[TCT][Non-ACR][Fix TCT tool script for tizen 6.0] 49/217549/5
authorwy0105-yoo <wy0105.yoo@samsung.com>
Tue, 12 Nov 2019 09:27:03 +0000 (18:27 +0900)
committerwy0105-yoo <wy0105.yoo@samsung.com>
Wed, 13 Nov 2019 03:41:58 +0000 (12:41 +0900)
Change-Id: Id393ab7e28cf09ea08f0135b46d63668fd5341ef

937 files changed:
release/csharp-tct_5.5_dotnet/README [deleted file]
release/csharp-tct_5.5_dotnet/csharp-tct_5.5_dotnet/doc/DotNet_TCT_4.0_Tester_User_Guide_v1.0.pdf [deleted file]
release/csharp-tct_5.5_dotnet/csharp-tct_5.5_dotnet/package/mobile/Tizen.Applications.Tests-5.5.zip [deleted file]
release/csharp-tct_5.5_dotnet/csharp-tct_5.5_dotnet/resource/InternalStorageSetting.wgt [deleted file]
release/csharp-tct_5.5_dotnet/csharp-tct_5.5_dotnet/resource/MessagePortHelper.wgt [deleted file]
release/csharp-tct_5.5_dotnet/csharp-tct_5.5_dotnet/resource/buildinfo.xml [deleted file]
release/csharp-tct_5.5_dotnet/csharp-tct_5.5_dotnet/resource/capability.xml [deleted file]
release/csharp-tct_5.5_dotnet/csharp-tct_5.5_dotnet/resource/getCap.wgt [deleted file]
release/csharp-tct_5.5_dotnet/csharp-tct_5.5_dotnet/resource/helper-applications/scm_testfile.tpk [deleted file]
release/csharp-tct_5.5_dotnet/csharp-tct_5.5_dotnet/resource/org.tizen.datacontrolprovider-1.0.0-aarch64.tpk [deleted file]
release/csharp-tct_5.5_dotnet/csharp-tct_5.5_dotnet/resource/org.tizen.datacontrolprovider-1.0.0-arm.tpk [deleted file]
release/csharp-tct_5.5_dotnet/csharp-tct_5.5_dotnet/resource/org.tizen.datacontrolprovider-1.0.0-i386.tpk [deleted file]
release/csharp-tct_5.5_dotnet/csharp-tct_5.5_dotnet/resource/org.tizen.datacontrolprovider-1.0.0-x86_64.tpk [deleted file]
release/csharp-tct_5.5_dotnet/csharp-tct_5.5_dotnet/resource/org.tizen.messageportapp-1.0.0-aarch64.tpk [deleted file]
release/csharp-tct_5.5_dotnet/csharp-tct_5.5_dotnet/resource/org.tizen.messageportapp-1.0.0-arm.tpk [deleted file]
release/csharp-tct_5.5_dotnet/csharp-tct_5.5_dotnet/resource/org.tizen.messageportapp-1.0.0-i386.tpk [deleted file]
release/csharp-tct_5.5_dotnet/csharp-tct_5.5_dotnet/resource/precondition.txt [deleted file]
release/csharp-tct_5.5_dotnet/csharp-tct_5.5_dotnet/resource/tct-testconfig-3.0.zip [deleted file]
release/csharp-tct_5.5_dotnet/csharp-tct_5.5_dotnet/resource/tct-testconfig/TC_Config.txt [deleted file]
release/csharp-tct_5.5_dotnet/csharp-tct_5.5_dotnet/resource/tct-testconfig/inst.py [deleted file]
release/csharp-tct_5.5_dotnet/csharp-tct_5.5_dotnet/resource/tct-testconfig/portconfigure.json [deleted file]
release/csharp-tct_5.5_dotnet/csharp-tct_5.5_dotnet/resource/tct-testconfig/preconfigure.json [deleted file]
release/csharp-tct_5.5_dotnet/csharp-tct_5.5_dotnet/resource/tct-testconfig/tct-testconfig.ini [deleted file]
release/csharp-tct_5.5_dotnet/csharp-tct_5.5_dotnet/resource/tct-testconfig/tests.full.xml [deleted file]
release/csharp-tct_5.5_dotnet/csharp-tct_5.5_dotnet/resource/tct-testconfig/tests.xml [deleted file]
release/csharp-tct_5.5_dotnet/csharp-tct_5.5_dotnet/resource/testkit-stub/aarch64/testkit-stub [deleted file]
release/csharp-tct_5.5_dotnet/csharp-tct_5.5_dotnet/resource/testkit-stub/arm/testkit-stub [deleted file]
release/csharp-tct_5.5_dotnet/csharp-tct_5.5_dotnet/resource/testkit-stub/ia/testkit-stub [deleted file]
release/csharp-tct_5.5_dotnet/csharp-tct_5.5_dotnet/resource/testkit-stub/ia64/testkit-stub [deleted file]
release/csharp-tct_5.5_dotnet/csharp-tct_5.5_dotnet/tools/devicemanager.py [deleted file]
release/csharp-tct_5.5_dotnet/csharp-tct_5.5_dotnet/tools/devicemanager.pyc [deleted file]
release/csharp-tct_5.5_dotnet/csharp-tct_5.5_dotnet/tools/healthcheck.ini [deleted file]
release/csharp-tct_5.5_dotnet/csharp-tct_5.5_dotnet/tools/sdbmanager.py [deleted file]
release/csharp-tct_5.5_dotnet/csharp-tct_5.5_dotnet/tools/sdbmanager.pyc [deleted file]
release/csharp-tct_5.5_dotnet/csharp-tct_5.5_dotnet/tools/tct-config-device.py [deleted file]
release/csharp-tct_5.5_dotnet/csharp-tct_5.5_dotnet/tools/tct-config-host.py [deleted file]
release/csharp-tct_5.5_dotnet/tct-setup.py [deleted file]
release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/TCT_CONFIG [deleted file]
release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/VERSION [deleted file]
release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/dev_event/lib/efl_util_screenshot_novice-1.0.0-1.armv7l.rpm [deleted file]
release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/dev_event/lib/libpython-2.7.1-1.7.armv7l.rpm [deleted file]
release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/dev_event/lib/python-2.7.1-1.4.armv7l.rpm [deleted file]
release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/dev_event/lib/python-base-2.7.1-1.7.armv7l.rpm [deleted file]
release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/dev_event/tct-monkey [deleted file]
release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/dev_event/tctmonkey/__init__.py [deleted file]
release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/dev_event/tctmonkey/constants.py [deleted file]
release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/dev_event/tctmonkey/devicemanager.py [deleted file]
release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/dev_event/tctmonkey/fmbttizen-agent.py [deleted file]
release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/dev_event/tctmonkey/fmbtuinput.py [deleted file]
release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/dev_event/tctmonkey/monkey_gti.py [deleted file]
release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/dev_event/tctmonkey/monkey_tizen.py [deleted file]
release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/dev_event/tctmonkey/monkeyworker.py [deleted file]
release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/dev_event/tctmonkey/monkeywrapper.py [deleted file]
release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/dev_event/tctmonkey/sdbmanager.py [deleted file]
release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/full_pkg_generator [deleted file]
release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/manager/doc/RELEASE_NOTES [deleted file]
release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/manager/doc/TCT-manager-guide.pdf [deleted file]
release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/manager/doc/Web_TCT_2.3_Behavior_Test_Tool_User_Guide_v1.0.pdf [deleted file]
release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/manager/doc/Web_TCT_2.3_Manager_User_Guide_v1.0.pdf [deleted file]
release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/manager/doc/Web_TCT_2.3_Shell_User_Guide_v1.0.pdf [deleted file]
release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/manager/doc/Web_TCT_2.3_TestSuite_Packaging_Guide_v1.0.pdf [deleted file]
release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/manager/doc/Web_TCT_2.3_Tool_Packaging_Ubuntu_Guide_v1.0.pdf [deleted file]
release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/manager/doc/Web_TCT_2.3_User_Guide_v1.0.pdf [deleted file]
release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/manager/lib/appFramework-1.0.jar [deleted file]
release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/manager/lib/commons-cli-1.2.jar [deleted file]
release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/manager/lib/commons-compress-1.12.jar [deleted file]
release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/manager/lib/commons-io-2.4.jar [deleted file]
release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/manager/lib/jdom-1.1.2.jar [deleted file]
release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/manager/lib/json_simple-1.1.jar [deleted file]
release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/manager/lib/log4j-1.2.17.jar [deleted file]
release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/manager/lib/log4j.properties [deleted file]
release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/manager/lib/manager.properties [deleted file]
release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/manager/lib/tct-mgr-app-3.1.5-20181122.jar [deleted file]
release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/manager/plan/Full_common_iot.xml [deleted file]
release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/manager/plan/Full_mobile.xml [deleted file]
release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/manager/plan/Full_tv.xml [deleted file]
release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/manager/plan/Full_wearable.xml [deleted file]
release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/manager/script/temp [deleted file]
release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/manager/style/application.js [deleted file]
release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/manager/style/back_top.png [deleted file]
release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/manager/style/blue.jpg [deleted file]
release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/manager/style/gray.jpg [deleted file]
release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/manager/style/jquery.min.js [deleted file]
release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/manager/style/orange.jpg [deleted file]
release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/manager/style/popup.js [deleted file]
release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/manager/style/red.jpg [deleted file]
release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/manager/style/summary.xsl [deleted file]
release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/manager/style/testresult.xsl [deleted file]
release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/manager/style/tests.css [deleted file]
release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/manager/tmp/temp [deleted file]
release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/plugin/native_templates/.cproject [deleted file]
release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/plugin/native_templates/.exportMap [deleted file]
release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/plugin/native_templates/.project [deleted file]
release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/plugin/native_templates/.tproject [deleted file]
release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/plugin/native_templates/Build/appendix.mk [deleted file]
release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/plugin/native_templates/Build/basedef.mk [deleted file]
release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/plugin/native_templates/Build/flags.mk [deleted file]
release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/plugin/native_templates/Build/makefile [deleted file]
release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/plugin/native_templates/Build/prepost.mk [deleted file]
release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/plugin/native_templates/Build/tooldef.mk [deleted file]
release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/plugin/native_templates/inc/assert.h [deleted file]
release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/plugin/native_templates/inc/assert_common.h [deleted file]
release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/plugin/native_templates/inc/tct_common.h [deleted file]
release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/plugin/native_templates/inc/testcase.h [deleted file]
release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/plugin/native_templates/inc/{TESTSUITE_NAME}.h [deleted file]
release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/plugin/native_templates/project_def.prop [deleted file]
release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/plugin/native_templates/shared/res/res/org.tizen.helloworld-1.0.0-arm.tpk [deleted file]
release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/plugin/native_templates/shared/res/res/org.tizen.helloworld-1.0.0-i386.tpk [deleted file]
release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/plugin/native_templates/shared/res/res/org.tizen.helloworld2-1.0.0-arm.tpk [deleted file]
release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/plugin/native_templates/shared/res/res/org.tizen.helloworld2-1.0.0-i386.tpk [deleted file]
release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/plugin/native_templates/shared/res/{TESTSUITE_NAME}.png [deleted file]
release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/plugin/native_templates/src/tct_common.c [deleted file]
release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/plugin/native_templates/src/{TESTSUITE_NAME}.c [deleted file]
release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/plugin/native_templates/tizen-manifest.xml [deleted file]
release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/plugin/web_templates/COPYING [deleted file]
release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/plugin/web_templates/LICENSE.Apache-2.0 [deleted file]
release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/plugin/web_templates/Makefile.am [deleted file]
release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/plugin/web_templates/NOTICE [deleted file]
release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/plugin/web_templates/README [deleted file]
release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/plugin/web_templates/autogen [deleted file]
release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/plugin/web_templates/config.xml [deleted file]
release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/plugin/web_templates/configure.ac [deleted file]
release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/plugin/web_templates/icon.png [deleted file]
release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/plugin/web_templates/inst.sh [deleted file]
release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/plugin/web_templates/manifest.json [deleted file]
release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/plugin/web_templates/pack.sh [deleted file]
release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/plugin/web_templates/resources/COPYING [deleted file]
release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/plugin/web_templates/resources/Makefile.am [deleted file]
release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/plugin/web_templates/resources/testharness.css [deleted file]
release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/plugin/web_templates/resources/testharness.js [deleted file]
release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/plugin/web_templates/resources/testharnessreport.js [deleted file]
release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/plugin/web_templates/testcase.xsl [deleted file]
release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/plugin/web_templates/testcase/Makefile.am [deleted file]
release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/plugin/web_templates/testresult.xsl [deleted file]
release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/plugin/web_templates/tests.css [deleted file]
release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/plugin/web_templates/tests.full.xml [deleted file]
release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/plugin/web_templates/tests.xml [deleted file]
release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/plugin/web_templates/webrunner/Makefile.am [deleted file]
release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/plugin/web_templates/webrunner/index.html [deleted file]
release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/plugin/web_templates/webrunner/jquery-1.10.2.min.js [deleted file]
release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/plugin/web_templates/webrunner/testrunner.js [deleted file]
release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/plugin/web_templates/{TESTSUITE_NAME}.spec [deleted file]
release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/sdb/sdb-32 [deleted file]
release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/sdb/sdb-32.exe [deleted file]
release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/sdb/sdb-64 [deleted file]
release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/sdb/sdb-64.exe [deleted file]
release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/shell/CONFIG [deleted file]
release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/shell/LICENSE [deleted file]
release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/shell/README [deleted file]
release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/shell/VERSION [deleted file]
release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/shell/debian/changelog [deleted file]
release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/shell/debian/compat [deleted file]
release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/shell/debian/control [deleted file]
release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/shell/debian/copyright [deleted file]
release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/shell/debian/docs [deleted file]
release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/shell/debian/files [deleted file]
release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/shell/debian/postinst [deleted file]
release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/shell/debian/rules [deleted file]
release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/shell/packaging/Makefile [deleted file]
release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/shell/packaging/tct-shell.dsc [deleted file]
release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/shell/packaging/tct-shell.spec [deleted file]
release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/shell/plan/CSharp_Full_mobile_3.0.xml [deleted file]
release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/shell/plan/Native_Full_mobile_2.4.xml [deleted file]
release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/shell/plan/Native_Full_mobile_3.0.xml [deleted file]
release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/shell/plan/Native_Full_tv_2.4.xml [deleted file]
release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/shell/plan/Native_Full_tv_3.0.xml [deleted file]
release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/shell/plan/Native_Full_wearable_2.3.2.xml [deleted file]
release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/shell/plan/Native_Full_wearable_3.0.xml [deleted file]
release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/shell/plan/Web_Full_mobile_2.4.xml [deleted file]
release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/shell/plan/Web_Full_mobile_3.0.xml [deleted file]
release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/shell/plan/Web_Full_tv_2.4.xml [deleted file]
release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/shell/plan/Web_Full_tv_3.0.xml [deleted file]
release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/shell/plan/Web_Full_wearable_2.3.2.xml [deleted file]
release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/shell/plan/Web_Full_wearable_3.0.xml [deleted file]
release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/shell/setup.py [deleted file]
release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/shell/sltLeader21.properties [deleted file]
release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/shell/style/application.js [deleted file]
release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/shell/style/back_top.png [deleted file]
release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/shell/style/blue.jpg [deleted file]
release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/shell/style/gray.jpg [deleted file]
release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/shell/style/jquery.min.js [deleted file]
release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/shell/style/orange.jpg [deleted file]
release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/shell/style/popup.js [deleted file]
release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/shell/style/red.jpg [deleted file]
release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/shell/style/summary.xsl [deleted file]
release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/shell/style/testresult.xsl [deleted file]
release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/shell/style/tests.css [deleted file]
release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/shell/tct-plan-generator [deleted file]
release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/shell/tct-scen-generator [deleted file]
release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/shell/tct-shell [deleted file]
release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/shell/tctshell/__init__.py [deleted file]
release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/shell/tctshell/commodule/__init__.py [deleted file]
release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/shell/tctshell/commodule/__init__.pyc [deleted file]
release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/shell/tctshell/commodule/killall.py [deleted file]
release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/shell/tctshell/commodule/killall.pyc [deleted file]
release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/shell/tctshell/constants.py [deleted file]
release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/shell/tctshell/constants.pyc [deleted file]
release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/shell/tctshell/devicemanager.py [deleted file]
release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/shell/tctshell/distribute_plan.py [deleted file]
release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/shell/tctshell/dumpmonitor.py [deleted file]
release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/shell/tctshell/environment_manager.py [deleted file]
release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/shell/tctshell/exception.py [deleted file]
release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/shell/tctshell/exception.pyc [deleted file]
release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/shell/tctshell/gui/__init__.py [deleted file]
release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/shell/tctshell/gui/action_frame.py [deleted file]
release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/shell/tctshell/gui/main_window.py [deleted file]
release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/shell/tctshell/intention_generator.py [deleted file]
release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/shell/tctshell/logmanager.py [deleted file]
release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/shell/tctshell/logmanager.pyc [deleted file]
release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/shell/tctshell/netstatmonitor.py [deleted file]
release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/shell/tctshell/plan_options.py [deleted file]
release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/shell/tctshell/plan_runner.py [deleted file]
release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/shell/tctshell/result_manager.py [deleted file]
release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/shell/tctshell/result_summary.py [deleted file]
release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/shell/tctshell/scenario_options.py [deleted file]
release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/shell/tctshell/scenario_runner.py [deleted file]
release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/shell/tctshell/sdbmanager.py [deleted file]
release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/shell/tctshell/sdbmanager.pyc [deleted file]
release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/shell/tctshell/shellguider.py [deleted file]
release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/shell/tctshell/shellplanner.py [deleted file]
release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/shell/tctshell/shellworker.py [deleted file]
release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/shell/tctshell/shellwrapper.py [deleted file]
release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/shell/tctshell/testenvironment.py [deleted file]
release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/shell/tctshell/testresource/__init__.py [deleted file]
release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/shell/tctshell/testresource/tempFiles/tct-capability-tests-2.4.zip [deleted file]
release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/shell/tctshell/testresource/tempFiles/tct-capability-tests-2.4.zip-test [deleted file]
release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/shell/tctshell/testresource/tempFiles/tct-capability-tests-3.0.zip [deleted file]
release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/shell/tctshell/testresource/test_compare_distribute.py [deleted file]
release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/shell/tctshell/testresource/test_constants.py [deleted file]
release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/shell/tctshell/testresource/test_devicemanager.py [deleted file]
release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/shell/tctshell/testresource/test_logmanager.py [deleted file]
release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/shell/tctshell/testresource/test_netstatlogger.py [deleted file]
release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/shell/tctshell/testresource/test_progress.py [deleted file]
release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/shell/tctshell/testresource/test_recovery.py [deleted file]
release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/shell/tctshell/testresource/test_rerun.py [deleted file]
release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/shell/tctshell/testresource/test_results.txt [deleted file]
release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/shell/tctshell/testresource/test_resultsummary.py [deleted file]
release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/shell/tctshell/testresource/test_sdbmanager.py [deleted file]
release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/shell/tctshell/testresource/test_shellplanner.py [deleted file]
release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/shell/tctshell/testresource/test_shellworker.py [deleted file]
release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/shell/tctshell/testresource/test_shellwrapper.py [deleted file]
release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/shell/tctshell/testresource/test_usbmonitor.py [deleted file]
release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/shell/tctshell/testresource/testcase_resultsummary.py [deleted file]
release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/shell/tctshell/usbmonitor.py [deleted file]
release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/shell/tmp/temp [deleted file]
release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/tct-config-tools.py [deleted file]
release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/tct-mgr [deleted file]
release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/tct-mgr.bat [deleted file]
release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/tct-monkey [deleted file]
release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/tct-shell [deleted file]
release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkit-lite1.0 [deleted file]
release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkit-lite2.0 [deleted file]
release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite1.0/LICENSE [deleted file]
release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite1.0/README [deleted file]
release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite1.0/VERSION [deleted file]
release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite1.0/commodule/Makefile.am [deleted file]
release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite1.0/commodule/__init__.py [deleted file]
release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite1.0/commodule/__init__.pyc [deleted file]
release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite1.0/commodule/autoexec.py [deleted file]
release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite1.0/commodule/autoexec.pyc [deleted file]
release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite1.0/commodule/connector.py [deleted file]
release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite1.0/commodule/connector.pyc [deleted file]
release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite1.0/commodule/httprequest.py [deleted file]
release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite1.0/commodule/httprequest.pyc [deleted file]
release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite1.0/commodule/impl/Makefile.am [deleted file]
release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite1.0/commodule/impl/__init__.py [deleted file]
release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite1.0/commodule/impl/localhost.py [deleted file]
release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite1.0/commodule/impl/tizenmobile.py [deleted file]
release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite1.0/commodule/killall.py [deleted file]
release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite1.0/commodule/killall.pyc [deleted file]
release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite1.0/commodule/log.py [deleted file]
release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite1.0/commodule/log.pyc [deleted file]
release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite1.0/commodule/str2.py [deleted file]
release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite1.0/commodule/str2.pyc [deleted file]
release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite1.0/debian/changelog [deleted file]
release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite1.0/debian/compat [deleted file]
release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite1.0/debian/control [deleted file]
release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite1.0/debian/copyright [deleted file]
release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite1.0/debian/docs [deleted file]
release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite1.0/debian/files [deleted file]
release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite1.0/debian/postinst [deleted file]
release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite1.0/debian/rules [deleted file]
release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite1.0/doc/Makefile.am [deleted file]
release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite1.0/doc/testkit-lite_user_guide.pdf [deleted file]
release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite1.0/doc/testkit-lite_user_guide_for_tct.pdf [deleted file]
release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite1.0/packaging/Makefile [deleted file]
release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite1.0/packaging/testkit-lite.dsc [deleted file]
release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite1.0/packaging/testkit-lite.spec [deleted file]
release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite1.0/setup.py [deleted file]
release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite1.0/temp/temp [deleted file]
release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite1.0/testkit-lite [deleted file]
release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite1.0/testkitlite/Makefile.am [deleted file]
release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite1.0/testkitlite/__init__.py [deleted file]
release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite1.0/testkitlite/__init__.pyc [deleted file]
release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite1.0/testkitlite/common/Makefile.am [deleted file]
release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite1.0/testkitlite/common/__init__.py [deleted file]
release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite1.0/testkitlite/common/__init__.pyc [deleted file]
release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite1.0/testkitlite/common/process_killall.py [deleted file]
release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite1.0/testkitlite/common/process_killall.pyc [deleted file]
release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite1.0/testkitlite/engines/Makefile.am [deleted file]
release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite1.0/testkitlite/engines/__init__.py [deleted file]
release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite1.0/testkitlite/engines/__init__.pyc [deleted file]
release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite1.0/testkitlite/engines/default/Makefile.am [deleted file]
release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite1.0/testkitlite/engines/default/__init__.py [deleted file]
release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite1.0/testkitlite/engines/default/__init__.pyc [deleted file]
release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite1.0/testkitlite/engines/default/runner.py [deleted file]
release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite1.0/testkitlite/engines/default/runner.pyc [deleted file]
release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite1.0/testkitlite/engines/default/worker.py [deleted file]
release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite1.0/testkitlite/engines/default/worker.pyc [deleted file]
release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite1.0/web/Makefile.am [deleted file]
release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite1.0/web/index.html [deleted file]
release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite1.0/web/jquery.js [deleted file]
release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite1.0/web/manual_harness.html [deleted file]
release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite1.0/web/manualharness.html [deleted file]
release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite1.0/xsd/Makefile.am [deleted file]
release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite1.0/xsd/application.js [deleted file]
release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite1.0/xsd/back_top.png [deleted file]
release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite1.0/xsd/jquery.min.js [deleted file]
release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite1.0/xsd/readme.txt [deleted file]
release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite1.0/xsd/release-notes [deleted file]
release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite1.0/xsd/result.xml [deleted file]
release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite1.0/xsd/test_definition.xsd [deleted file]
release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite1.0/xsd/testcase.xsl [deleted file]
release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite1.0/xsd/testresult.xsl [deleted file]
release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite1.0/xsd/tests.css [deleted file]
release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite1.0/xsd/tests.xml [deleted file]
release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite2.0/CONFIG [deleted file]
release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite2.0/LICENSE [deleted file]
release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite2.0/README.md [deleted file]
release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite2.0/VERSION [deleted file]
release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite2.0/debian/changelog [deleted file]
release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite2.0/debian/compat [deleted file]
release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite2.0/debian/control [deleted file]
release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite2.0/debian/copyright [deleted file]
release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite2.0/debian/docs [deleted file]
release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite2.0/debian/files [deleted file]
release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite2.0/debian/postinst [deleted file]
release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite2.0/debian/rules [deleted file]
release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite2.0/doc/Makefile.am [deleted file]
release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite2.0/doc/test_definition_schema.pdf [deleted file]
release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite2.0/doc/testkit-lite_tutorial.pdf [deleted file]
release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite2.0/doc/testkit-lite_user_guide.pdf [deleted file]
release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite2.0/packaging/Makefile [deleted file]
release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite2.0/packaging/testkit-lite.dsc [deleted file]
release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite2.0/packaging/testkit-lite.spec [deleted file]
release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite2.0/resource/mh.html [deleted file]
release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite2.0/setup.py [deleted file]
release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite2.0/temp/temp [deleted file]
release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite2.0/testkit-lite [deleted file]
release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite2.0/testkit-merge [deleted file]
release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite2.0/testkitlite/Makefile.am [deleted file]
release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite2.0/testkitlite/__init__.py [deleted file]
release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite2.0/testkitlite/capability/Makefile.am [deleted file]
release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite2.0/testkitlite/capability/__init__.py [deleted file]
release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite2.0/testkitlite/capability/chrome_ubuntu.py [deleted file]
release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite2.0/testkitlite/capability/xw_android.py [deleted file]
release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite2.0/testkitlite/capability/xw_tizen.py [deleted file]
release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite2.0/testkitlite/commodule/CONFIG [deleted file]
release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite2.0/testkitlite/commodule/Makefile.am [deleted file]
release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite2.0/testkitlite/commodule/__init__.py [deleted file]
release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite2.0/testkitlite/commodule/androidmobile.py [deleted file]
release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite2.0/testkitlite/commodule/localhost.py [deleted file]
release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite2.0/testkitlite/commodule/tizenivi.py [deleted file]
release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite2.0/testkitlite/commodule/tizenlocal.py [deleted file]
release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite2.0/testkitlite/commodule/tizenmobile.py [deleted file]
release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite2.0/testkitlite/engines/Makefile.am [deleted file]
release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite2.0/testkitlite/engines/__init__.py [deleted file]
release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite2.0/testkitlite/engines/androidunit.py [deleted file]
release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite2.0/testkitlite/engines/default.py [deleted file]
release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite2.0/testkitlite/engines/pyunit.py [deleted file]
release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite2.0/testkitlite/engines/test_executer.py [deleted file]
release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite2.0/testkitlite/engines/webdriver.py [deleted file]
release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite2.0/testkitlite/util/CONFIG [deleted file]
release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite2.0/testkitlite/util/Makefile.am [deleted file]
release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite2.0/testkitlite/util/__init__.py [deleted file]
release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite2.0/testkitlite/util/autoexec.py [deleted file]
release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite2.0/testkitlite/util/config.py [deleted file]
release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite2.0/testkitlite/util/connector.py [deleted file]
release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite2.0/testkitlite/util/errors.py [deleted file]
release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite2.0/testkitlite/util/httprequest.py [deleted file]
release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite2.0/testkitlite/util/killall.py [deleted file]
release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite2.0/testkitlite/util/log.py [deleted file]
release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite2.0/testkitlite/util/process.py [deleted file]
release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite2.0/testkitlite/util/result.py [deleted file]
release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite2.0/testkitlite/util/session.py [deleted file]
release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite2.0/testkitlite/util/str2.py [deleted file]
release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite2.0/testkitlite/util/tr_utils.py [deleted file]
release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite2.0/testkitmerge/__init__.py [deleted file]
release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite2.0/testkitmerge/merger.py [deleted file]
release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite2.0/xsd/Makefile.am [deleted file]
release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite2.0/xsd/application.js [deleted file]
release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite2.0/xsd/back_top.png [deleted file]
release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite2.0/xsd/jquery.min.js [deleted file]
release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite2.0/xsd/readme.md [deleted file]
release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite2.0/xsd/release-notes [deleted file]
release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite2.0/xsd/result.xml [deleted file]
release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite2.0/xsd/test_definition.xsd [deleted file]
release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite2.0/xsd/testcase.xsl [deleted file]
release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite2.0/xsd/testresult.xsl [deleted file]
release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite2.0/xsd/tests.css [deleted file]
release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite2.0/xsd/tests.xml [deleted file]
release/csharp-tct_6.0_dotnet/README [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/doc/DotNet_TCT_4.0_Tester_User_Guide_v1.0.pdf [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.Accounts.Tests-6.0.zip [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.Alarm.Tests-6.0.zip [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.Applications.ComponentBased.ComponentManager.Tests-6.0.zip [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.Applications.EventManager.Manual.Tests-6.0.zip [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.Applications.EventManager.Tests-6.0.zip [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.Applications.Manual.Tests-6.0.zip [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.Applications.Tests-6.0.zip [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.AttachPanel.Manual.Tests-6.0.zip [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.AttachPanel.Tests-6.0.zip [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.AudioIO.Tests-6.0.zip [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.Badge.Manual.Tests-6.0.zip [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.Badge.Tests-6.0.zip [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.Bluetooth.Manual.Tests-6.0.zip [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.Bluetooth.Tests-6.0.zip [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.Calendar.Tests-6.0.zip [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.Camera.Tests-6.0.zip [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.Common.Tests-6.0.zip [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.ComponentBased.Default.Manual.Tests-6.0.zip [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.ComponentBased.Default.Tests-6.0.zip [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.ComponentBased.Manual.Tests-6.0.zip [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.ComponentBased.Tests-6.0.zip [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.Connection.Manual.Tests-6.0.zip [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.Connection.Tests-6.0.zip [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.Contacts.Manual.Tests-6.0.zip [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.Contacts.Tests-6.0.zip [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.Context.Tests-6.0.zip [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.DataControl.Tests-6.0.zip [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.Device.Manual.Tests-6.0.zip [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.Device.Tests-6.0.zip [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.DevicePolicyManager.Manual.Tests-6.0.zip [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.DevicePolicyManager.Tests-6.0.zip [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.DotnetUtil.Tests-6.0.zip [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.Download.Manual.Tests-6.0.zip [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.Download.Tests-6.0.zip [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.ElmSharp.Manual.Tests-6.0.zip [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.ElmSharp.Tests-6.0.zip [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.Email.Tests-6.0.zip [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.Feedback.Tests-6.0.zip [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.FidoClient.Tests-6.0.zip [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.Geofence.Tests-6.0.zip [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.Information.Manual.Tests-6.0.zip [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.Information.Tests-6.0.zip [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.Inputmethod.Manual.Tests-6.0.zip [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.Inputmethod.Tests-6.0.zip [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.Inputmethodmanager.Tests-6.0.zip [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.IoTConnectivityClient.Tests-6.0.zip [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.IoTConnectivityServer.Tests-6.0.zip [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.Location.Manual.Tests-6.0.zip [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.Location.Tests-6.0.zip [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.Log.Manual.Tests-6.0.zip [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.Log.Tests-6.0.zip [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.MachineLearning.Inference.Tests-6.0.zip [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.Maps.Manual.Tests-6.0.zip [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.Maps.Tests-6.0.zip [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.MediaCodec.Tests-6.0.zip [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.MediaController.Tests-6.0.zip [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.MediaKey.Manual.Tests-6.0.zip [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.MediaKey.Tests-6.0.zip [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.MediaPlayer.Tests-6.0.zip [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.MediaVision.Manual.Tests-6.0.zip [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.MediaVision.Tests-6.0.zip [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.Mediacontent.Manual.Tests-6.0.zip [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.Mediacontent.Tests-6.0.zip [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.Messages.Tests-6.0.zip [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.Metadata.Tests-6.0.zip [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.Mime.Tests-6.0.zip [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.Multimedia.Manual.Tests-6.0.zip [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.Multimedia.Tests-6.0.zip [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.MultimediaUtil.Tests-6.0.zip [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.NUI.Components.Manual.Tests-6.0.zip [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.NUI.Components.Tests-6.0.zip [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.NUI.Manual.Tests-6.0.zip [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.NUI.Tests-6.0.zip [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.Network.Stc.Tests-6.0.zip [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.Nfc.Manual.Tests-6.0.zip [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.Nfc.Tests-6.0.zip [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.Nlp.Tests-6.0.zip [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.NotificationEventListener.Tests-6.0.zip [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.Notifications.Manual.Tests-6.0.zip [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.Notifications.Tests-6.0.zip [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.Nsd.Manual.Tests-6.0.zip [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.Nsd.Tests-6.0.zip [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.OAuth2.Tests-6.0.zip [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.Packagemanager.Manual.Tests-6.0.zip [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.Packagemanager.Tests-6.0.zip [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.PhonenumberUtils.Tests-6.0.zip [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.PrivacyPrivilegeManager.Manual.Tests-6.0.zip [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.Privilege.Tests-6.0.zip [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.Push.Tests-6.0.zip [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.Radio.Tests-6.0.zip [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.Recorder.Tests-6.0.zip [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.RemoteView.Tests-6.0.zip [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.ScreenMirroring.Tests-6.0.zip [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.Securerepository.Tests-6.0.zip [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.Sensor.Manual.Tests-6.0.zip [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.Sensor.Tests-6.0.zip [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.Shortcut.Tests-6.0.zip [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.Smartcard.Tests-6.0.zip [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.StreamRecorder.Tests-6.0.zip [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.Stt.Manual.Tests-6.0.zip [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.Stt.Tests-6.0.zip [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.SttEngine.Manual.Tests-6.0.zip [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.SyncManager.Tests-6.0.zip [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.System.Manual.Tests-6.0.zip [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.System.Tests-6.0.zip [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.Systemsettings.Tests-6.0.zip [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.TEEC.Tests-6.0.zip [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.Telephony.Manual.Tests-6.0.zip [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.Telephony.Tests-6.0.zip [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.ToastMessage.Tests-6.0.zip [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.Tracer.Tests-6.0.zip [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.Tts.Manual.Tests-6.0.zip [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.Tts.Tests-6.0.zip [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.TtsEngine.Manual.Tests-6.0.zip [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.Usb.Manual.Tests-6.0.zip [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.Usb.Tests-6.0.zip [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.VoiceControl.Manual.Tests-6.0.zip [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.VoiceControl.Tests-6.0.zip [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.WatchApplication.Manual.Tests-6.0.zip [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.WatchApplication.Tests-6.0.zip [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.WebView.Manual.Tests-6.0.zip [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.WebView.Tests-6.0.zip [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.WiFi.Manual.Tests-6.0.zip [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.WiFi.Tests-6.0.zip [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.WidgetApplication.Manual.Tests-6.0.zip [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.WidgetApplication.Tests-6.0.zip [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.WidgetControl.Manual.Tests-6.0.zip [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.WidgetControl.Tests-6.0.zip [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.Wifidirect.Manual.Tests-6.0.zip [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.Wifidirect.Tests-6.0.zip [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/pkg_infos/mobile_pkg_info.xml [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/resource/InternalStorageSetting.wgt [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/resource/MessagePortHelper.wgt [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/resource/buildinfo.xml [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/resource/capability.xml [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/resource/getCap.wgt [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/resource/helper-applications/scm_testfile.tpk [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/resource/org.tizen.datacontrolprovider-1.0.0-aarch64.tpk [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/resource/org.tizen.datacontrolprovider-1.0.0-arm.tpk [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/resource/org.tizen.datacontrolprovider-1.0.0-i386.tpk [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/resource/org.tizen.datacontrolprovider-1.0.0-x86_64.tpk [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/resource/org.tizen.messageportapp-1.0.0-aarch64.tpk [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/resource/org.tizen.messageportapp-1.0.0-arm.tpk [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/resource/org.tizen.messageportapp-1.0.0-i386.tpk [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/resource/precondition.txt [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/resource/tct-testconfig-3.0.zip [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/resource/tct-testconfig/TC_Config.txt [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/resource/tct-testconfig/inst.py [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/resource/tct-testconfig/portconfigure.json [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/resource/tct-testconfig/preconfigure.json [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/resource/tct-testconfig/tct-testconfig.ini [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/resource/tct-testconfig/tests.full.xml [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/resource/tct-testconfig/tests.xml [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/resource/testkit-stub/aarch64/testkit-stub [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/resource/testkit-stub/arm/testkit-stub [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/resource/testkit-stub/ia/testkit-stub [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/resource/testkit-stub/ia64/testkit-stub [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/tools/devicemanager.py [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/tools/devicemanager.pyc [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/tools/healthcheck.ini [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/tools/sdbmanager.py [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/tools/sdbmanager.pyc [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/tools/tct-config-device.py [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/tools/tct-config-host.py [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/tct-setup.py [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/TCT_CONFIG [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/VERSION [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/dev_event/lib/efl_util_screenshot_novice-1.0.0-1.armv7l.rpm [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/dev_event/lib/libpython-2.7.1-1.7.armv7l.rpm [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/dev_event/lib/python-2.7.1-1.4.armv7l.rpm [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/dev_event/lib/python-base-2.7.1-1.7.armv7l.rpm [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/dev_event/tct-monkey [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/dev_event/tctmonkey/__init__.py [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/dev_event/tctmonkey/constants.py [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/dev_event/tctmonkey/devicemanager.py [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/dev_event/tctmonkey/fmbttizen-agent.py [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/dev_event/tctmonkey/fmbtuinput.py [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/dev_event/tctmonkey/monkey_gti.py [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/dev_event/tctmonkey/monkey_tizen.py [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/dev_event/tctmonkey/monkeyworker.py [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/dev_event/tctmonkey/monkeywrapper.py [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/dev_event/tctmonkey/sdbmanager.py [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/full_pkg_generator [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/manager/doc/RELEASE_NOTES [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/manager/doc/TCT-manager-guide.pdf [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/manager/doc/Web_TCT_2.3_Behavior_Test_Tool_User_Guide_v1.0.pdf [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/manager/doc/Web_TCT_2.3_Manager_User_Guide_v1.0.pdf [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/manager/doc/Web_TCT_2.3_Shell_User_Guide_v1.0.pdf [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/manager/doc/Web_TCT_2.3_TestSuite_Packaging_Guide_v1.0.pdf [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/manager/doc/Web_TCT_2.3_Tool_Packaging_Ubuntu_Guide_v1.0.pdf [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/manager/doc/Web_TCT_2.3_User_Guide_v1.0.pdf [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/manager/lib/appFramework-1.0.jar [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/manager/lib/commons-cli-1.2.jar [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/manager/lib/commons-compress-1.12.jar [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/manager/lib/commons-io-2.4.jar [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/manager/lib/jdom-1.1.2.jar [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/manager/lib/json_simple-1.1.jar [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/manager/lib/log4j-1.2.17.jar [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/manager/lib/log4j.properties [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/manager/lib/manager.properties [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/manager/lib/tct-mgr-app-3.1.5-20181122.jar [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/manager/plan/Full_common_iot.xml [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/manager/plan/Full_mobile.xml [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/manager/plan/Full_tv.xml [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/manager/plan/Full_wearable.xml [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/manager/script/temp [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/manager/style/application.js [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/manager/style/back_top.png [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/manager/style/blue.jpg [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/manager/style/gray.jpg [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/manager/style/jquery.min.js [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/manager/style/orange.jpg [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/manager/style/popup.js [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/manager/style/red.jpg [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/manager/style/summary.xsl [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/manager/style/testresult.xsl [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/manager/style/tests.css [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/manager/tmp/temp [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/plugin/native_templates/.cproject [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/plugin/native_templates/.exportMap [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/plugin/native_templates/.project [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/plugin/native_templates/.tproject [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/plugin/native_templates/Build/appendix.mk [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/plugin/native_templates/Build/basedef.mk [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/plugin/native_templates/Build/flags.mk [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/plugin/native_templates/Build/makefile [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/plugin/native_templates/Build/prepost.mk [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/plugin/native_templates/Build/tooldef.mk [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/plugin/native_templates/inc/assert.h [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/plugin/native_templates/inc/assert_common.h [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/plugin/native_templates/inc/tct_common.h [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/plugin/native_templates/inc/testcase.h [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/plugin/native_templates/inc/{TESTSUITE_NAME}.h [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/plugin/native_templates/project_def.prop [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/plugin/native_templates/shared/res/res/org.tizen.helloworld-1.0.0-arm.tpk [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/plugin/native_templates/shared/res/res/org.tizen.helloworld-1.0.0-i386.tpk [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/plugin/native_templates/shared/res/res/org.tizen.helloworld2-1.0.0-arm.tpk [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/plugin/native_templates/shared/res/res/org.tizen.helloworld2-1.0.0-i386.tpk [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/plugin/native_templates/shared/res/{TESTSUITE_NAME}.png [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/plugin/native_templates/src/tct_common.c [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/plugin/native_templates/src/{TESTSUITE_NAME}.c [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/plugin/native_templates/tizen-manifest.xml [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/plugin/web_templates/COPYING [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/plugin/web_templates/LICENSE.Apache-2.0 [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/plugin/web_templates/Makefile.am [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/plugin/web_templates/NOTICE [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/plugin/web_templates/README [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/plugin/web_templates/autogen [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/plugin/web_templates/config.xml [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/plugin/web_templates/configure.ac [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/plugin/web_templates/icon.png [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/plugin/web_templates/inst.sh [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/plugin/web_templates/manifest.json [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/plugin/web_templates/pack.sh [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/plugin/web_templates/resources/COPYING [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/plugin/web_templates/resources/Makefile.am [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/plugin/web_templates/resources/testharness.css [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/plugin/web_templates/resources/testharness.js [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/plugin/web_templates/resources/testharnessreport.js [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/plugin/web_templates/testcase.xsl [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/plugin/web_templates/testcase/Makefile.am [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/plugin/web_templates/testresult.xsl [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/plugin/web_templates/tests.css [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/plugin/web_templates/tests.full.xml [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/plugin/web_templates/tests.xml [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/plugin/web_templates/webrunner/Makefile.am [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/plugin/web_templates/webrunner/index.html [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/plugin/web_templates/webrunner/jquery-1.10.2.min.js [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/plugin/web_templates/webrunner/testrunner.js [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/plugin/web_templates/{TESTSUITE_NAME}.spec [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/sdb/sdb-32 [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/sdb/sdb-32.exe [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/sdb/sdb-64 [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/sdb/sdb-64.exe [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/shell/CONFIG [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/shell/LICENSE [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/shell/README [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/shell/VERSION [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/shell/debian/changelog [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/shell/debian/compat [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/shell/debian/control [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/shell/debian/copyright [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/shell/debian/docs [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/shell/debian/files [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/shell/debian/postinst [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/shell/debian/rules [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/shell/packaging/Makefile [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/shell/packaging/tct-shell.dsc [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/shell/packaging/tct-shell.spec [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/shell/plan/CSharp_Full_mobile_3.0.xml [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/shell/plan/Native_Full_mobile_2.4.xml [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/shell/plan/Native_Full_mobile_3.0.xml [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/shell/plan/Native_Full_tv_2.4.xml [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/shell/plan/Native_Full_tv_3.0.xml [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/shell/plan/Native_Full_wearable_2.3.2.xml [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/shell/plan/Native_Full_wearable_3.0.xml [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/shell/plan/Web_Full_mobile_2.4.xml [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/shell/plan/Web_Full_mobile_3.0.xml [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/shell/plan/Web_Full_tv_2.4.xml [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/shell/plan/Web_Full_tv_3.0.xml [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/shell/plan/Web_Full_wearable_2.3.2.xml [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/shell/plan/Web_Full_wearable_3.0.xml [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/shell/setup.py [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/shell/sltLeader21.properties [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/shell/style/application.js [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/shell/style/back_top.png [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/shell/style/blue.jpg [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/shell/style/gray.jpg [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/shell/style/jquery.min.js [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/shell/style/orange.jpg [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/shell/style/popup.js [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/shell/style/red.jpg [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/shell/style/summary.xsl [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/shell/style/testresult.xsl [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/shell/style/tests.css [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/shell/tct-plan-generator [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/shell/tct-scen-generator [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/shell/tct-shell [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/shell/tctshell/__init__.py [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/shell/tctshell/commodule/__init__.py [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/shell/tctshell/commodule/__init__.pyc [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/shell/tctshell/commodule/killall.py [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/shell/tctshell/commodule/killall.pyc [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/shell/tctshell/constants.py [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/shell/tctshell/constants.pyc [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/shell/tctshell/devicemanager.py [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/shell/tctshell/distribute_plan.py [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/shell/tctshell/dumpmonitor.py [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/shell/tctshell/environment_manager.py [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/shell/tctshell/exception.py [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/shell/tctshell/exception.pyc [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/shell/tctshell/gui/__init__.py [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/shell/tctshell/gui/action_frame.py [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/shell/tctshell/gui/main_window.py [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/shell/tctshell/intention_generator.py [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/shell/tctshell/logmanager.py [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/shell/tctshell/logmanager.pyc [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/shell/tctshell/netstatmonitor.py [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/shell/tctshell/plan_options.py [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/shell/tctshell/plan_runner.py [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/shell/tctshell/result_manager.py [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/shell/tctshell/result_summary.py [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/shell/tctshell/scenario_options.py [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/shell/tctshell/scenario_runner.py [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/shell/tctshell/sdbmanager.py [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/shell/tctshell/sdbmanager.pyc [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/shell/tctshell/shellguider.py [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/shell/tctshell/shellplanner.py [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/shell/tctshell/shellworker.py [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/shell/tctshell/shellwrapper.py [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/shell/tctshell/testenvironment.py [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/shell/tctshell/testresource/__init__.py [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/shell/tctshell/testresource/tempFiles/tct-capability-tests-2.4.zip [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/shell/tctshell/testresource/tempFiles/tct-capability-tests-2.4.zip-test [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/shell/tctshell/testresource/tempFiles/tct-capability-tests-3.0.zip [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/shell/tctshell/testresource/test_compare_distribute.py [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/shell/tctshell/testresource/test_constants.py [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/shell/tctshell/testresource/test_devicemanager.py [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/shell/tctshell/testresource/test_logmanager.py [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/shell/tctshell/testresource/test_netstatlogger.py [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/shell/tctshell/testresource/test_progress.py [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/shell/tctshell/testresource/test_recovery.py [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/shell/tctshell/testresource/test_rerun.py [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/shell/tctshell/testresource/test_results.txt [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/shell/tctshell/testresource/test_resultsummary.py [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/shell/tctshell/testresource/test_sdbmanager.py [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/shell/tctshell/testresource/test_shellplanner.py [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/shell/tctshell/testresource/test_shellworker.py [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/shell/tctshell/testresource/test_shellwrapper.py [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/shell/tctshell/testresource/test_usbmonitor.py [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/shell/tctshell/testresource/testcase_resultsummary.py [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/shell/tctshell/usbmonitor.py [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/shell/tmp/temp [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/tct-config-tools.py [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/tct-mgr [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/tct-mgr.bat [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/tct-monkey [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/tct-shell [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkit-lite1.0 [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkit-lite2.0 [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite1.0/LICENSE [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite1.0/README [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite1.0/VERSION [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite1.0/commodule/Makefile.am [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite1.0/commodule/__init__.py [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite1.0/commodule/__init__.pyc [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite1.0/commodule/autoexec.py [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite1.0/commodule/autoexec.pyc [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite1.0/commodule/connector.py [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite1.0/commodule/connector.pyc [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite1.0/commodule/httprequest.py [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite1.0/commodule/httprequest.pyc [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite1.0/commodule/impl/Makefile.am [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite1.0/commodule/impl/__init__.py [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite1.0/commodule/impl/localhost.py [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite1.0/commodule/impl/tizenmobile.py [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite1.0/commodule/killall.py [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite1.0/commodule/killall.pyc [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite1.0/commodule/log.py [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite1.0/commodule/log.pyc [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite1.0/commodule/str2.py [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite1.0/commodule/str2.pyc [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite1.0/debian/changelog [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite1.0/debian/compat [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite1.0/debian/control [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite1.0/debian/copyright [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite1.0/debian/docs [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite1.0/debian/files [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite1.0/debian/postinst [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite1.0/debian/rules [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite1.0/doc/Makefile.am [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite1.0/doc/testkit-lite_user_guide.pdf [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite1.0/doc/testkit-lite_user_guide_for_tct.pdf [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite1.0/packaging/Makefile [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite1.0/packaging/testkit-lite.dsc [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite1.0/packaging/testkit-lite.spec [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite1.0/setup.py [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite1.0/temp/temp [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite1.0/testkit-lite [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite1.0/testkitlite/Makefile.am [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite1.0/testkitlite/__init__.py [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite1.0/testkitlite/__init__.pyc [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite1.0/testkitlite/common/Makefile.am [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite1.0/testkitlite/common/__init__.py [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite1.0/testkitlite/common/__init__.pyc [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite1.0/testkitlite/common/process_killall.py [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite1.0/testkitlite/common/process_killall.pyc [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite1.0/testkitlite/engines/Makefile.am [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite1.0/testkitlite/engines/__init__.py [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite1.0/testkitlite/engines/__init__.pyc [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite1.0/testkitlite/engines/default/Makefile.am [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite1.0/testkitlite/engines/default/__init__.py [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite1.0/testkitlite/engines/default/__init__.pyc [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite1.0/testkitlite/engines/default/runner.py [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite1.0/testkitlite/engines/default/runner.pyc [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite1.0/testkitlite/engines/default/worker.py [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite1.0/testkitlite/engines/default/worker.pyc [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite1.0/web/Makefile.am [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite1.0/web/index.html [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite1.0/web/jquery.js [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite1.0/web/manual_harness.html [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite1.0/web/manualharness.html [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite1.0/xsd/Makefile.am [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite1.0/xsd/application.js [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite1.0/xsd/back_top.png [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite1.0/xsd/jquery.min.js [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite1.0/xsd/readme.txt [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite1.0/xsd/release-notes [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite1.0/xsd/result.xml [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite1.0/xsd/test_definition.xsd [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite1.0/xsd/testcase.xsl [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite1.0/xsd/testresult.xsl [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite1.0/xsd/tests.css [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite1.0/xsd/tests.xml [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite2.0/CONFIG [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite2.0/LICENSE [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite2.0/README.md [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite2.0/VERSION [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite2.0/debian/changelog [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite2.0/debian/compat [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite2.0/debian/control [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite2.0/debian/copyright [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite2.0/debian/docs [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite2.0/debian/files [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite2.0/debian/postinst [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite2.0/debian/rules [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite2.0/doc/Makefile.am [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite2.0/doc/test_definition_schema.pdf [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite2.0/doc/testkit-lite_tutorial.pdf [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite2.0/doc/testkit-lite_user_guide.pdf [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite2.0/packaging/Makefile [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite2.0/packaging/testkit-lite.dsc [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite2.0/packaging/testkit-lite.spec [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite2.0/resource/mh.html [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite2.0/setup.py [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite2.0/temp/temp [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite2.0/testkit-lite [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite2.0/testkit-merge [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite2.0/testkitlite/Makefile.am [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite2.0/testkitlite/__init__.py [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite2.0/testkitlite/capability/Makefile.am [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite2.0/testkitlite/capability/__init__.py [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite2.0/testkitlite/capability/chrome_ubuntu.py [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite2.0/testkitlite/capability/xw_android.py [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite2.0/testkitlite/capability/xw_tizen.py [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite2.0/testkitlite/commodule/CONFIG [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite2.0/testkitlite/commodule/Makefile.am [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite2.0/testkitlite/commodule/__init__.py [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite2.0/testkitlite/commodule/androidmobile.py [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite2.0/testkitlite/commodule/localhost.py [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite2.0/testkitlite/commodule/tizenivi.py [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite2.0/testkitlite/commodule/tizenlocal.py [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite2.0/testkitlite/commodule/tizenmobile.py [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite2.0/testkitlite/engines/Makefile.am [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite2.0/testkitlite/engines/__init__.py [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite2.0/testkitlite/engines/androidunit.py [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite2.0/testkitlite/engines/default.py [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite2.0/testkitlite/engines/pyunit.py [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite2.0/testkitlite/engines/test_executer.py [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite2.0/testkitlite/engines/webdriver.py [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite2.0/testkitlite/util/CONFIG [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite2.0/testkitlite/util/Makefile.am [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite2.0/testkitlite/util/__init__.py [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite2.0/testkitlite/util/autoexec.py [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite2.0/testkitlite/util/config.py [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite2.0/testkitlite/util/connector.py [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite2.0/testkitlite/util/errors.py [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite2.0/testkitlite/util/httprequest.py [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite2.0/testkitlite/util/killall.py [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite2.0/testkitlite/util/log.py [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite2.0/testkitlite/util/process.py [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite2.0/testkitlite/util/result.py [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite2.0/testkitlite/util/session.py [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite2.0/testkitlite/util/str2.py [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite2.0/testkitlite/util/tr_utils.py [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite2.0/testkitmerge/__init__.py [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite2.0/testkitmerge/merger.py [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite2.0/xsd/Makefile.am [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite2.0/xsd/application.js [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite2.0/xsd/back_top.png [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite2.0/xsd/jquery.min.js [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite2.0/xsd/readme.md [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite2.0/xsd/release-notes [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite2.0/xsd/result.xml [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite2.0/xsd/test_definition.xsd [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite2.0/xsd/testcase.xsl [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite2.0/xsd/testresult.xsl [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite2.0/xsd/tests.css [new file with mode: 0755]
release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite2.0/xsd/tests.xml [new file with mode: 0755]
tool/script/artik_pack.sh
tool/script/auto_binary.py
tool/script/creating_auto_binary.sh
tool/script/pack.py
tool/script/pkginfo_gen.py

diff --git a/release/csharp-tct_5.5_dotnet/README b/release/csharp-tct_5.5_dotnet/README
deleted file mode 100755 (executable)
index 09dcb81..0000000
+++ /dev/null
@@ -1,54 +0,0 @@
-Dependency:
-================
-python2.7, python-pip, requests
-  sudo apt-get install python-pip
-  sudo pip install requests
-  sudo apt-get install python-dbus
-
-Change the owner and group of /opt
-  sudo chown [user]:[user] /opt
-
-How to install :
-================
-  - Install TCT from source code:
-    sudo python tct-setup.py
-
-  - Remove tct related folders in /opt
-    (** caution : all files in /opt/tct, /opt/testkit, /opt/tools will be removed)
-    sudo python tct-setup.py clean
-
-  - Upgrade the tct related folders in /opt
-    sudo python tct-setup.py upgrade
-
-How to use :
-================
-  - Set environment on your target device
-    sudo python /opt/tct/{TCTProject}/scripts/tct-config-device.py
-
-  - Execute the following command to launch TCT-Manager 
-    sudo tct-mgr
-
-  - Execute the following command in order to use TCT-Shell
-    tct-shell
-
-For Windows :
-================
-  - Prerequisites
-    1. Windows 7 - 32/64 bit
-    2. JDK 1.7 - 32bit ( You should install 32bit version. 
-    3. python 2.7 - 32bit, should be set as environment path
-        - Please use python 2.7 version, not 3.0 - https://www.python.org/downloads/windows/
-        - python lib which should be installed
-            : install pip
-                1. Navigate to C:\Python27\Scripts
-                2. open command window on C:\Python27\Scripts 
-                3. $ easy_install-2.7 pip
-            : install requests
-                1. downlaod requests source code : https://github.com/kennethreitz/requests/
-                2. unzip source code and open command window on unziped folder
-                3. $ python setup.py install
-
-  - Install / run in command prompt
-    (Run below scripts at the file location. You can launch the command prompt by [shift]+[mouse right click] on windows explorer)
-    1. Install : python tct-setup.py
-    2. Run : tct-mgr.bat
diff --git a/release/csharp-tct_5.5_dotnet/csharp-tct_5.5_dotnet/doc/DotNet_TCT_4.0_Tester_User_Guide_v1.0.pdf b/release/csharp-tct_5.5_dotnet/csharp-tct_5.5_dotnet/doc/DotNet_TCT_4.0_Tester_User_Guide_v1.0.pdf
deleted file mode 100755 (executable)
index fc52846..0000000
Binary files a/release/csharp-tct_5.5_dotnet/csharp-tct_5.5_dotnet/doc/DotNet_TCT_4.0_Tester_User_Guide_v1.0.pdf and /dev/null differ
diff --git a/release/csharp-tct_5.5_dotnet/csharp-tct_5.5_dotnet/package/mobile/Tizen.Applications.Tests-5.5.zip b/release/csharp-tct_5.5_dotnet/csharp-tct_5.5_dotnet/package/mobile/Tizen.Applications.Tests-5.5.zip
deleted file mode 100755 (executable)
index 0230137..0000000
Binary files a/release/csharp-tct_5.5_dotnet/csharp-tct_5.5_dotnet/package/mobile/Tizen.Applications.Tests-5.5.zip and /dev/null differ
diff --git a/release/csharp-tct_5.5_dotnet/csharp-tct_5.5_dotnet/resource/InternalStorageSetting.wgt b/release/csharp-tct_5.5_dotnet/csharp-tct_5.5_dotnet/resource/InternalStorageSetting.wgt
deleted file mode 100755 (executable)
index 64b8782..0000000
Binary files a/release/csharp-tct_5.5_dotnet/csharp-tct_5.5_dotnet/resource/InternalStorageSetting.wgt and /dev/null differ
diff --git a/release/csharp-tct_5.5_dotnet/csharp-tct_5.5_dotnet/resource/MessagePortHelper.wgt b/release/csharp-tct_5.5_dotnet/csharp-tct_5.5_dotnet/resource/MessagePortHelper.wgt
deleted file mode 100755 (executable)
index 3e4d0b3..0000000
Binary files a/release/csharp-tct_5.5_dotnet/csharp-tct_5.5_dotnet/resource/MessagePortHelper.wgt and /dev/null differ
diff --git a/release/csharp-tct_5.5_dotnet/csharp-tct_5.5_dotnet/resource/buildinfo.xml b/release/csharp-tct_5.5_dotnet/csharp-tct_5.5_dotnet/resource/buildinfo.xml
deleted file mode 100755 (executable)
index 533afd5..0000000
+++ /dev/null
@@ -1,13 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>\r
-<buildinfos xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"\r
-xsi:noNamespaceSchemaLocation="buildinfo.xsd">\r
-    <buildinfo name="model" support="true" type="String">\r
-        <value>SM-Z130H</value>\r
-    </buildinfo>\r
-    <buildinfo name="manufacturer" support="true" type="String">\r
-        <value>samsung</value>\r
-    </buildinfo>\r
-    <buildinfo name="buildVersion" support="true" type="String">\r
-        <value>Z130HDDE0ANL7</value>\r
-    </buildinfo>\r
-</buildinfos>
\ No newline at end of file
diff --git a/release/csharp-tct_5.5_dotnet/csharp-tct_5.5_dotnet/resource/capability.xml b/release/csharp-tct_5.5_dotnet/csharp-tct_5.5_dotnet/resource/capability.xml
deleted file mode 100755 (executable)
index 23216c3..0000000
+++ /dev/null
@@ -1,179 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>\r
-<capabilities xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"\r
-xsi:noNamespaceSchemaLocation="capability.xsd">\r
-    <capability name="http://tizen.org/feature/account" support="true" type="boolean"/>\r
-    <capability name="http://tizen.org/feature/battery" support="true" type="boolean"/>\r
-    <capability name="http://tizen.org/feature/bookmark" support="true" type="boolean"/>\r
-    <capability name="http://tizen.org/feature/calendar" support="true" type="boolean"/>\r
-    <capability name="http://tizen.org/feature/camera" support="true" type="boolean"/>\r
-    <capability name="http://tizen.org/feature/camera.back" support="false" type="boolean"/>\r
-    <capability name="http://tizen.org/feature/camera.back.flash" support="false" type="boolean"/>\r
-    <capability name="http://tizen.org/feature/camera.front" support="true" type="boolean"/>\r
-    <capability name="http://tizen.org/feature/camera.front.flash" support="false" type="boolean"/>\r
-    <capability name="http://tizen.org/feature/contact" support="true" type="boolean"/>\r
-    <capability name="http://tizen.org/feature/database.encryption" support="false" type="boolean"/>\r
-    <capability name="http://tizen.org/feature/datasync" support="false" type="boolean"/>\r
-    <capability name="http://tizen.org/feature/datacontrol" support="true" type="boolean"/>\r
-    <capability name="http://tizen.org/feature/download" support="true" type="boolean"/>\r
-    <capability name="http://tizen.org/feature/fmradio" support="false" type="boolean"/>\r
-    <capability name="http://tizen.org/feature/graphics.acceleration" support="true" type="boolean"/>\r
-    <capability name="http://tizen.org/feature/input.keyboard" support="false" type="boolean"/>\r
-    <capability name="http://tizen.org/feature/input.keyboard.layout" support="qwerty" type="String">\r
-    </capability>\r
-    <capability name="http://tizen.org/feature/location" support="true" type="boolean"/>\r
-    <capability name="http://tizen.org/feature/location.gps" support="true" type="boolean"/>\r
-    <capability name="http://tizen.org/feature/location.wps" support="false" type="boolean"/>\r
-    <capability name="http://tizen.org/feature/email" support="true" type="boolean"/>\r
-    <capability name="http://tizen.org/feature/microphone" support="true" type="boolean"/>\r
-    <capability name="http://tizen.org/feature/multi_point_touch.pinch_zoom" support="true" type="boolean"/>\r
-    <capability name="http://tizen.org/feature/multi_point_touch.point_count" support="10" type="Integer">\r
-    </capability>\r
-    <capability name="http://tizen.org/feature/network.bluetooth" support="false" type="boolean"/>\r
-    <capability name="http://tizen.org/feature/network.bluetooth.health" support="false" type="boolean"/>\r
-    <capability name="http://tizen.org/feature/network.nfc" support="false" type="boolean"/>\r
-    <capability name="http://tizen.org/feature/network.nfc.card_emulation" support="false" type="boolean"/>\r
-    <capability name="http://tizen.org/feature/network.nfc.reserved_push" support="false" type="boolean"/>\r
-    <capability name="http://tizen.org/feature/network.push" support="true" type="boolean"/>\r
-    <capability name="http://tizen.org/feature/network.secure_element" support="false" type="boolean"/>\r
-    <capability name="http://tizen.org/feature/network.telephony" support="false" type="boolean"/>\r
-    <capability name="http://tizen.org/feature/network.telephony.mms" support="false" type="boolean"/>\r
-    <capability name="http://tizen.org/feature/network.wifi" support="false" type="boolean"/>\r
-    <capability name="http://tizen.org/feature/network.wifi.direct" support="false" type="boolean"/>\r
-    <capability name="http://tizen.org/feature/notification" support="true" type="boolean"/>\r
-    <capability name="http://tizen.org/feature/opengles" support="true" type="boolean"/>\r
-    <capability name="http://tizen.org/feature/opengles.texture_format" support="etc" type="String">\r
-    </capability>\r
-    <capability name="http://tizen.org/feature/opengles.texture_format.3dc" support="false" type="boolean"/>\r
-    <capability name="http://tizen.org/feature/opengles.texture_format.atc" support="false" type="boolean"/>\r
-    <capability name="http://tizen.org/feature/opengles.texture_format.etc" support="true" type="boolean"/>\r
-    <capability name="http://tizen.org/feature/opengles.texture_format.ptc" support="false" type="boolean"/>\r
-    <capability name="http://tizen.org/feature/opengles.texture_format.pvrtc" support="false" type="boolean"/>\r
-    <capability name="http://tizen.org/feature/opengles.texture_format.utc" support="false" type="boolean"/>\r
-    <capability name="http://tizen.org/feature/opengles.version.1_1" support="true" type="boolean"/>\r
-    <capability name="http://tizen.org/feature/opengles.version.2_0" support="true" type="boolean"/>\r
-    <capability name="http://tizen.org/feature/platform.core.api.version" support="2.3" type="String">\r
-    </capability>\r
-    <capability name="http://tizen.org/feature/platform.core.cpu.arch" support="x86" type="String">\r
-    </capability>\r
-    <capability name="http://tizen.org/feature/platform.core.cpu.arch.armv6" support="false" type="boolean"/>\r
-    <capability name="http://tizen.org/feature/platform.core.cpu.arch.armv7" support="false" type="boolean"/>\r
-    <capability name="http://tizen.org/feature/platform.core.cpu.arch.x86" support="true" type="boolean"/>\r
-    <capability name="http://tizen.org/feature/platform.core.fpu.arch" support="sse3" type="String">\r
-    </capability>\r
-    <capability name="http://tizen.org/feature/platform.core.fpu.arch.sse2" support="false" type="boolean"/>\r
-    <capability name="http://tizen.org/feature/platform.core.fpu.arch.sse3" support="true" type="boolean"/>\r
-    <capability name="http://tizen.org/feature/platform.core.fpu.arch.ssse3" support="false" type="boolean"/>\r
-    <capability name="http://tizen.org/feature/platform.core.fpu.arch.vfpv2" support="false" type="boolean"/>\r
-    <capability name="http://tizen.org/feature/platform.core.fpu.arch.vfpv3" support="false" type="boolean"/>\r
-    <capability name="http://tizen.org/feature/platform.native.api.version" support="2.3" type="String">\r
-    </capability>\r
-    <capability name="http://tizen.org/feature/platform.native.osp_compatible" support="false" type="boolean"/>\r
-    <capability name="http://tizen.org/feature/platform.version" support="2.3.0" type="String">\r
-    </capability>\r
-    <capability name="http://tizen.org/feature/platform.web.api.version" support="2.3" type="String">\r
-    </capability>\r
-    <capability name="http://tizen.org/feature/profile" support="MOBILE" type="String">\r
-    </capability>\r
-    <capability name="http://tizen.org/feature/screen" support="true" type="boolean"/>\r
-    <capability name="http://tizen.org/feature/screen.auto_rotation" support="true" type="boolean"/>\r
-    <capability name="http://tizen.org/feature/screen.bpp" support="32" type="Integer">\r
-    </capability>\r
-    <capability name="http://tizen.org/feature/screen.coordinate_system.size.large" support="false" type="boolean"/>\r
-    <capability name="http://tizen.org/feature/screen.coordinate_system.size.normal" support="true" type="boolean"/>\r
-    <capability name="http://tizen.org/feature/screen.dpi" support="207" type="Integer">\r
-    </capability>\r
-    <capability name="http://tizen.org/feature/screen.height" support="800" type="Integer">\r
-    </capability>\r
-    <capability name="http://tizen.org/feature/screen.output.hdmi" support="false" type="boolean"/>\r
-    <capability name="http://tizen.org/feature/screen.output.rca" support="false" type="boolean"/>\r
-    <capability name="http://tizen.org/feature/screen.size.normal" support="true" type="boolean"/>\r
-    <capability name="http://tizen.org/feature/screen.size.normal.1080.1920" support="false" type="boolean"/>\r
-    <capability name="http://tizen.org/feature/screen.size.normal.240.400" support="false" type="boolean"/>\r
-    <capability name="http://tizen.org/feature/screen.size.normal.320.320" support="false" type="boolean"/>\r
-    <capability name="http://tizen.org/feature/screen.size.normal.320.480" support="false" type="boolean"/>\r
-    <capability name="http://tizen.org/feature/screen.size.normal.480.800" support="true" type="boolean"/>\r
-    <capability name="http://tizen.org/feature/screen.size.normal.540.960" support="false" type="boolean"/>\r
-    <capability name="http://tizen.org/feature/screen.size.normal.600.1024" support="false" type="boolean"/>\r
-    <capability name="http://tizen.org/feature/screen.size.normal.720.1280" support="false" type="boolean"/>\r
-    <capability name="http://tizen.org/feature/screen.width" support="480" type="Integer">\r
-    </capability>\r
-    <capability name="http://tizen.org/feature/sensor.accelerometer" support="true" type="boolean"/>\r
-    <capability name="http://tizen.org/feature/sensor.accelerometer.wakeup" support="false" type="boolean"/>\r
-    <capability name="http://tizen.org/feature/sensor.barometer" support="true" type="boolean"/>\r
-    <capability name="http://tizen.org/feature/sensor.barometer.wakeup" support="false" type="boolean"/>\r
-    <capability name="http://tizen.org/feature/sensor.gyroscope" support="true" type="boolean"/>\r
-    <capability name="http://tizen.org/feature/sensor.gyroscope.wakeup" support="false" type="boolean"/>\r
-    <capability name="http://tizen.org/feature/sensor.heart_rate_monitor" support="false" type="boolean"/>\r
-    <capability name="http://tizen.org/feature/sensor.magnetometer" support="true" type="boolean"/>\r
-    <capability name="http://tizen.org/feature/sensor.magnetometer.wakeup" support="false" type="boolean"/>\r
-    <capability name="http://tizen.org/feature/sensor.pedometer" support="false" type="boolean"/>\r
-    <capability name="http://tizen.org/feature/sensor.photometer" support="true" type="boolean"/>\r
-    <capability name="http://tizen.org/feature/sensor.photometer.wakeup" support="false" type="boolean"/>\r
-    <capability name="http://tizen.org/feature/sensor.proximity" support="true" type="boolean"/>\r
-    <capability name="http://tizen.org/feature/sensor.proximity.wakeup" support="false" type="boolean"/>\r
-    <capability name="http://tizen.org/feature/sensor.tiltmeter" support="true" type="boolean"/>\r
-    <capability name="http://tizen.org/feature/sensor.tiltmeter.wakeup" support="false" type="boolean"/>\r
-    <capability name="http://tizen.org/feature/sensor.ultraviolet" support="false" type="boolean"/>\r
-    <capability name="http://tizen.org/feature/sensor.wrist_up" support="false" type="boolean"/>\r
-    <capability name="http://tizen.org/feature/shell.appwidget" support="false" type="boolean"/>\r
-    <capability name="http://tizen.org/feature/sip.voip" support="false" type="boolean"/>\r
-    <capability name="http://tizen.org/feature/speech.recognition" support="false" type="boolean"/>\r
-    <capability name="http://tizen.org/feature/speech.synthesis" support="true" type="boolean"/>\r
-    <capability name="http://tizen.org/feature/systemsetting" support="true" type="boolean"/>\r
-    <capability name="http://tizen.org/feature/systemsetting.home_screen" support="true" type="boolean"/>\r
-    <capability name="http://tizen.org/feature/systemsetting.incoming_call" support="true" type="boolean"/>\r
-    <capability name="http://tizen.org/feature/systemsetting.lock_screen" support="true" type="boolean"/>\r
-    <capability name="http://tizen.org/feature/systemsetting.notification_email" support="true" type="boolean"/>\r
-    <capability name="http://tizen.org/feature/usb.accessory" support="false" type="boolean"/>\r
-    <capability name="http://tizen.org/feature/usb.host" support="false" type="boolean"/>\r
-    <capability name="http://tizen.org/feature/vision.face_recognition" support="false" type="boolean"/>\r
-    <capability name="http://tizen.org/feature/vision.image_recognition" support="false" type="boolean"/>\r
-    <capability name="http://tizen.org/feature/vision.qrcode_generation" support="false" type="boolean"/>\r
-    <capability name="http://tizen.org/feature/vision.qrcode_recognition" support="false" type="boolean"/>\r
-    <capability name="http://tizen.org/feature/websetting" support="true" type="boolean"/>\r
-    <capability name="http://tizen.org/system/platform.name" support="Tizen" type="String">\r
-    </capability>\r
-    <capability name="http://tizen.org/feature/archive" support="true" type="boolean"/>\r
-    <capability name="http://tizen.org/feature/badge" support="true" type="boolean"/>\r
-    <capability name="http://tizen.org/feature/exif" support="true" type="boolean"/>\r
-    <capability name="http://tizen.org/feature/led" support="false" type="boolean"/>\r
-    <capability name="http://tizen.org/feature/multimedia.transcoder" support="false" type="boolean"/>\r
-    <capability name="http://tizen.org/capability/network.bluetooth.always_on" support="false" type="boolean"/>\r
-    <capability name="http://tizen.org/feature/network.bluetooth.audio.call" support="false" type="boolean"/>\r
-    <capability name="http://tizen.org/feature/network.bluetooth.audio.media" support="false" type="boolean"/>\r
-    <capability name="http://tizen.org/feature/network.bluetooth.hid" support="false" type="boolean"/>\r
-    <capability name="http://tizen.org/feature/network.bluetooth.le" support="false" type="boolean"/>\r
-    <capability name="http://tizen.org/feature/network.bluetooth.opp" support="false" type="boolean"/>\r
-    <capability name="http://tizen.org/feature/platform.core.cpu.frequency" support="0" type="Integer">\r
-    </capability>\r
-    <capability name="http://tizen.org/feature/platform.version.name" support="" type="String">\r
-    </capability>\r
-    <capability name="http://tizen.org/feature/screen.size.all" support="true" type="boolean"/>\r
-    <capability name="http://tizen.org/feature/screen.size.large" support="false" type="boolean"/>\r
-    <capability name="http://tizen.org/feature/screen.size.normal.360.480" support="false" type="boolean"/>\r
-    <capability name="http://tizen.org/feature/sensor.activity_recognition" support="false" type="boolean"/>\r
-    <capability name="http://tizen.org/feature/sensor.gesture_recognition" support="false" type="boolean"/>\r
-    <capability name="http://tizen.org/feature/sensor.gravity" support="true" type="boolean"/>\r
-    <capability name="http://tizen.org/feature/sensor.humidity" support="false" type="boolean"/>\r
-    <capability name="http://tizen.org/feature/sensor.linear_acceleration" support="true" type="boolean"/>\r
-    <capability name="http://tizen.org/feature/sensor.rotation_vector" support="true" type="boolean"/>\r
-    <capability name="http://tizen.org/feature/sensor.temperature" support="false" type="boolean"/>\r
-    <capability name="http://tizen.org/system/build.date" support="2015.02.23" type="String">\r
-    </capability>\r
-    <capability name="http://tizen.org/system/build.string" support="Tizen-2.3.0_Mobile-Emulator_20150223.1659" type="String">\r
-    </capability>\r
-    <capability name="http://tizen.org/system/build.time" support="16:59:07" type="String">\r
-    </capability>\r
-    <capability name="http://tizen.org/system/manufacturer" support="Tizen" type="String">\r
-    </capability>\r
-    <capability name="http://tizen.org/system/tizenid" support="3PXV0WmJ+1caWiHvW7/s1APzFAA=" type="String">\r
-    </capability>\r
-    <capability name="http://tizen.org/system/model_name" support="Emulator" type="String">\r
-    </capability>\r
-    <capability name="http://tizen.org/system/platform.communication_processor" support="none" type="String">\r
-    </capability>\r
-    <capability name="http://tizen.org/system/platform.processor" support="Emulator" type="String">\r
-    </capability>\r
-    <capability name="http://tizen.org/feature/web.service" support="false" type="boolean"/>\r
-    <capability name="http://tizen.org/feature/humanactivitymonitor" support="true" type="boolean"/>\r
-</capabilities>
\ No newline at end of file
diff --git a/release/csharp-tct_5.5_dotnet/csharp-tct_5.5_dotnet/resource/getCap.wgt b/release/csharp-tct_5.5_dotnet/csharp-tct_5.5_dotnet/resource/getCap.wgt
deleted file mode 100755 (executable)
index 1592ff6..0000000
Binary files a/release/csharp-tct_5.5_dotnet/csharp-tct_5.5_dotnet/resource/getCap.wgt and /dev/null differ
diff --git a/release/csharp-tct_5.5_dotnet/csharp-tct_5.5_dotnet/resource/helper-applications/scm_testfile.tpk b/release/csharp-tct_5.5_dotnet/csharp-tct_5.5_dotnet/resource/helper-applications/scm_testfile.tpk
deleted file mode 100755 (executable)
index ff0d906..0000000
Binary files a/release/csharp-tct_5.5_dotnet/csharp-tct_5.5_dotnet/resource/helper-applications/scm_testfile.tpk and /dev/null differ
diff --git a/release/csharp-tct_5.5_dotnet/csharp-tct_5.5_dotnet/resource/org.tizen.datacontrolprovider-1.0.0-aarch64.tpk b/release/csharp-tct_5.5_dotnet/csharp-tct_5.5_dotnet/resource/org.tizen.datacontrolprovider-1.0.0-aarch64.tpk
deleted file mode 100755 (executable)
index 0f131e1..0000000
Binary files a/release/csharp-tct_5.5_dotnet/csharp-tct_5.5_dotnet/resource/org.tizen.datacontrolprovider-1.0.0-aarch64.tpk and /dev/null differ
diff --git a/release/csharp-tct_5.5_dotnet/csharp-tct_5.5_dotnet/resource/org.tizen.datacontrolprovider-1.0.0-arm.tpk b/release/csharp-tct_5.5_dotnet/csharp-tct_5.5_dotnet/resource/org.tizen.datacontrolprovider-1.0.0-arm.tpk
deleted file mode 100755 (executable)
index ff1c68a..0000000
Binary files a/release/csharp-tct_5.5_dotnet/csharp-tct_5.5_dotnet/resource/org.tizen.datacontrolprovider-1.0.0-arm.tpk and /dev/null differ
diff --git a/release/csharp-tct_5.5_dotnet/csharp-tct_5.5_dotnet/resource/org.tizen.datacontrolprovider-1.0.0-i386.tpk b/release/csharp-tct_5.5_dotnet/csharp-tct_5.5_dotnet/resource/org.tizen.datacontrolprovider-1.0.0-i386.tpk
deleted file mode 100755 (executable)
index 3d74a24..0000000
Binary files a/release/csharp-tct_5.5_dotnet/csharp-tct_5.5_dotnet/resource/org.tizen.datacontrolprovider-1.0.0-i386.tpk and /dev/null differ
diff --git a/release/csharp-tct_5.5_dotnet/csharp-tct_5.5_dotnet/resource/org.tizen.datacontrolprovider-1.0.0-x86_64.tpk b/release/csharp-tct_5.5_dotnet/csharp-tct_5.5_dotnet/resource/org.tizen.datacontrolprovider-1.0.0-x86_64.tpk
deleted file mode 100755 (executable)
index 61f1698..0000000
Binary files a/release/csharp-tct_5.5_dotnet/csharp-tct_5.5_dotnet/resource/org.tizen.datacontrolprovider-1.0.0-x86_64.tpk and /dev/null differ
diff --git a/release/csharp-tct_5.5_dotnet/csharp-tct_5.5_dotnet/resource/org.tizen.messageportapp-1.0.0-aarch64.tpk b/release/csharp-tct_5.5_dotnet/csharp-tct_5.5_dotnet/resource/org.tizen.messageportapp-1.0.0-aarch64.tpk
deleted file mode 100755 (executable)
index 112c56f..0000000
Binary files a/release/csharp-tct_5.5_dotnet/csharp-tct_5.5_dotnet/resource/org.tizen.messageportapp-1.0.0-aarch64.tpk and /dev/null differ
diff --git a/release/csharp-tct_5.5_dotnet/csharp-tct_5.5_dotnet/resource/org.tizen.messageportapp-1.0.0-arm.tpk b/release/csharp-tct_5.5_dotnet/csharp-tct_5.5_dotnet/resource/org.tizen.messageportapp-1.0.0-arm.tpk
deleted file mode 100755 (executable)
index 213fa1b..0000000
Binary files a/release/csharp-tct_5.5_dotnet/csharp-tct_5.5_dotnet/resource/org.tizen.messageportapp-1.0.0-arm.tpk and /dev/null differ
diff --git a/release/csharp-tct_5.5_dotnet/csharp-tct_5.5_dotnet/resource/org.tizen.messageportapp-1.0.0-i386.tpk b/release/csharp-tct_5.5_dotnet/csharp-tct_5.5_dotnet/resource/org.tizen.messageportapp-1.0.0-i386.tpk
deleted file mode 100755 (executable)
index 00fb916..0000000
Binary files a/release/csharp-tct_5.5_dotnet/csharp-tct_5.5_dotnet/resource/org.tizen.messageportapp-1.0.0-i386.tpk and /dev/null differ
diff --git a/release/csharp-tct_5.5_dotnet/csharp-tct_5.5_dotnet/resource/precondition.txt b/release/csharp-tct_5.5_dotnet/csharp-tct_5.5_dotnet/resource/precondition.txt
deleted file mode 100755 (executable)
index efccadb..0000000
+++ /dev/null
@@ -1,22 +0,0 @@
-Reference : http://168.219.209.56/confluence/display/Tizen3/Running+Web+TCT+for+Tizen+3.0\r
-\r
----------------------------------------------------------------------------------------\r
-\r
-1. Please push the below attached 2 files in the below location(target) before the test start.\r
-\r
-file name : \r
-\r
-capability.xml\r
-buildinfo.xml\r
-\r
-\r
-location :\r
-\r
-/home/owner/content/Documents/tct/\r
-\r
-\r
-ex) sdb push capability.xml /home/owner/content/Documents/tct/\r
-ex) sdb push buildinfo.xml /home/owner/content/Documents/tct/\r
-\r
-\r
----------------------------------------------------------------------------------------\r
diff --git a/release/csharp-tct_5.5_dotnet/csharp-tct_5.5_dotnet/resource/tct-testconfig-3.0.zip b/release/csharp-tct_5.5_dotnet/csharp-tct_5.5_dotnet/resource/tct-testconfig-3.0.zip
deleted file mode 100755 (executable)
index 25fd912..0000000
Binary files a/release/csharp-tct_5.5_dotnet/csharp-tct_5.5_dotnet/resource/tct-testconfig-3.0.zip and /dev/null differ
diff --git a/release/csharp-tct_5.5_dotnet/csharp-tct_5.5_dotnet/resource/tct-testconfig/TC_Config.txt b/release/csharp-tct_5.5_dotnet/csharp-tct_5.5_dotnet/resource/tct-testconfig/TC_Config.txt
deleted file mode 100755 (executable)
index 341f7fd..0000000
+++ /dev/null
@@ -1,14 +0,0 @@
-URLDOWNLOAD_URL=\r
-URLDOWNLOAD_DOWNLOADURL=\r
-URLDOWNLOAD_URLWITHETAG=\r
-WIFI_WPSACCESSPOINTNAME=\r
-WIFI_EAPACCESSPOINTNAME=\r
-WIFI_ACCESSPOINTPIN=\r
-MESSAGES_MOBILE_NUMBER=\r
-EMAIL_RECIPIENT=\r
-PLAYER_DOWNLOAD_URL=\r
-PLAYER_DOWNLOAD_PROGRESS_URL=\r
-PUSH_APPID=\r
-PUSH_APPSECRET=\r
-HERE_MAPS_PROVIDER_KEY=\r
-MAPZEN_MAPS_PROVIDER_KEY=\r
diff --git a/release/csharp-tct_5.5_dotnet/csharp-tct_5.5_dotnet/resource/tct-testconfig/inst.py b/release/csharp-tct_5.5_dotnet/csharp-tct_5.5_dotnet/resource/tct-testconfig/inst.py
deleted file mode 100755 (executable)
index b1bb50b..0000000
+++ /dev/null
@@ -1,197 +0,0 @@
-#!/usr/bin/env python
-
-import os
-import shutil
-import glob
-import time
-import sys
-import subprocess
-import string
-import ConfigParser
-from optparse import OptionParser, make_option
-
-TCT_CONFIG_FILE = "/opt/tools/TCT_CONFIG"
-tct_parser = ConfigParser.ConfigParser()
-tct_parser.read(TCT_CONFIG_FILE)
-
-DEVICE_SUITE_TARGET_30 = tct_parser.get('DEVICE', 'DEVICE_SUITE_TARGET_30')
-
-
-SCRIPT_DIR = os.path.dirname(os.path.abspath(__file__))
-PKG_NAME = os.path.basename(SCRIPT_DIR)
-PARAMETERS = None
-#XW_ENV = "export DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/5000/dbus/user_bus_socket"
-SRC_DIR = DEVICE_SUITE_TARGET_30
-PKG_SRC_DIR = SRC_DIR + "/tct/opt/%s" % PKG_NAME
-
-
-def doCMD(cmd):
-    # Do not need handle timeout in this short script, let tool do it
-    print "-->> \"%s\"" % cmd
-    output = []
-    cmd_return_code = 1
-    cmd_proc = subprocess.Popen(
-        cmd, stdout=subprocess.PIPE, stderr=subprocess.STDOUT, shell=True)
-
-    while True:
-        output_line = cmd_proc.stdout.readline().strip("\r\n")
-        cmd_return_code = cmd_proc.poll()
-        if output_line == '' and cmd_return_code != None:
-            break
-        sys.stdout.write("%s\n" % output_line)
-        sys.stdout.flush()
-        output.append(output_line)
-
-    return (cmd_return_code, output)
-
-
-def updateCMD(cmd=None):
-    if "pkgcmd" in cmd:
-        cmd = "su - %s -c '%s;%s'" % (PARAMETERS.user, XW_ENV, cmd)
-    return cmd
-def getUSERID():
-    if PARAMETERS.mode == "SDB":
-        cmd = "sdb -s %s shell id -u %s" % (
-            PARAMETERS.device, PARAMETERS.user)
-    else:
-        cmd = "ssh %s \"id -u %s\"" % (
-            PARAMETERS.device, PARAMETERS.user )
-    return doCMD(cmd)
-
-
-
-
-def getPKGID(pkg_name=None):
-    if PARAMETERS.mode == "SDB":
-        cmd = "sdb -s %s shell %s" % (
-            PARAMETERS.device, updateCMD('pkgcmd -l'))
-    else:
-        cmd = "ssh %s \"%s\"" % (
-            PARAMETERS.device, updateCMD('pkgcmd -l'))
-
-    (return_code, output) = doCMD(cmd)
-    if return_code != 0:
-        return None
-
-    test_pkg_id = None
-    for line in output:
-        if line.find("[" + pkg_name + "]") != -1:
-            pkgidIndex = line.split().index("pkgid")
-            test_pkg_id = line.split()[pkgidIndex+1].strip("[]")
-            break
-    return test_pkg_id
-
-
-def doRemoteCMD(cmd=None):
-    if PARAMETERS.mode == "SDB":
-        cmd = "sdb -s %s shell %s" % (PARAMETERS.device, updateCMD(cmd))
-    else:
-        cmd = "ssh %s \"%s\"" % (PARAMETERS.device, updateCMD(cmd))
-
-    return doCMD(cmd)
-
-
-def doRemoteCopy(src=None, dest=None):
-    if PARAMETERS.mode == "SDB":
-        cmd_prefix = "sdb -s %s push" % PARAMETERS.device
-        cmd = "%s %s %s" % (cmd_prefix, src, dest)
-    else:
-        cmd = "scp -r %s %s:/%s" % (src, PARAMETERS.device, dest)
-
-    (return_code, output) = doCMD(cmd)
-    doRemoteCMD("sync")
-
-    if return_code != 0:
-        return True
-    else:
-        return False
-
-
-def uninstPKGs():
-    action_status = True
-    (return_code, output) = doRemoteCMD("rm " + \
-            SRC_DIR + "/tct/preconfigure.json")
-    (return_code, output) = doRemoteCMD("rm " + \
-            SRC_DIR + "/tct/portconfigure.json")
-
-    for file in ['preconfigure.json', 'tests.xml', 'tct-testconfig.ini', 'portconfigure.json', 'TC_Config.txt']:
-        (return_code, output) = doRemoteCMD("rm %s/%s" % (PKG_SRC_DIR, file))
-        if return_code != 0:
-            action_status = False
-            break
-
-    return action_status
-
-def instPKGs():
-    action_status = True
-    (return_code, output) = doRemoteCMD("mkdir -p %s" % PKG_SRC_DIR)
-
-    for file in ['preconfigure.json', 'tests.xml', 'tct-testconfig.ini', 'portconfigure.json', 'TC_Config.txt']:
-        if not doRemoteCopy(SCRIPT_DIR + '/' + file, "%s/%s" % (PKG_SRC_DIR, file)):
-            action_status = False
-
-    return action_status
-
-def main():
-    try:
-        usage = "usage: inst.py -i"
-        opts_parser = OptionParser(usage=usage)
-        opts_parser.add_option(
-            "-m", dest="mode", action="store", help="Specify mode")
-        opts_parser.add_option(
-            "-s", dest="device", action="store", help="Specify device")
-        opts_parser.add_option(
-            "-i", dest="binstpkg", action="store_true", help="Install package")
-        opts_parser.add_option(
-            "-u", dest="buninstpkg", action="store_true", help="Uninstall package")
-        opts_parser.add_option(
-            "-a", dest="user", action="store", help="User name")
-        global PARAMETERS
-        (PARAMETERS, args) = opts_parser.parse_args()
-    except Exception, e:
-        print "Got wrong option: %s, exit ..." % e
-        sys.exit(1)
-
-    if not PARAMETERS.user:
-        PARAMETERS.user = "owner"
-    if not PARAMETERS.mode:
-        PARAMETERS.mode = "SDB"
-
-    if PARAMETERS.mode == "SDB":
-        if not PARAMETERS.device:
-            (return_code, output) = doCMD("sdb devices")
-            for line in output:
-                if str.find(line, "\tdevice") != -1:
-                    PARAMETERS.device = line.split("\t")[0]
-                    break
-    else:
-        PARAMETERS.mode = "SSH"
-
-    if not PARAMETERS.device:
-        print "No device provided"
-        sys.exit(1)
-
-    user_info = getUSERID()
-    re_code = user_info[0]
-    if re_code == 0 :
-        global XW_ENV
-        userid = user_info[1][0]
-        XW_ENV = "export DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/%s/dbus/user_bus_socket"%str(userid)
-    else:
-        print "[Error] cmd commands error : %s"%str(user_info[1])
-        sys.exit(1)
-    if PARAMETERS.binstpkg and PARAMETERS.buninstpkg:
-        print "-i and -u are conflict"
-        sys.exit(1)
-
-    if PARAMETERS.buninstpkg:
-        if not uninstPKGs():
-            sys.exit(1)
-    else:
-        if not instPKGs():
-            sys.exit(1)
-
-if __name__ == "__main__":
-    main()
-    sys.exit(0)
-
diff --git a/release/csharp-tct_5.5_dotnet/csharp-tct_5.5_dotnet/resource/tct-testconfig/portconfigure.json b/release/csharp-tct_5.5_dotnet/csharp-tct_5.5_dotnet/resource/tct-testconfig/portconfigure.json
deleted file mode 100755 (executable)
index f4838be..0000000
+++ /dev/null
@@ -1 +0,0 @@
-[{"STUB_PORT":"8000"}]
diff --git a/release/csharp-tct_5.5_dotnet/csharp-tct_5.5_dotnet/resource/tct-testconfig/preconfigure.json b/release/csharp-tct_5.5_dotnet/csharp-tct_5.5_dotnet/resource/tct-testconfig/preconfigure.json
deleted file mode 100755 (executable)
index 8bcbe6a..0000000
+++ /dev/null
@@ -1,39 +0,0 @@
-[{
-    "MESSAGES_MOBILE_NUMBER":"01012345678",
-    "BT_REMOTE_DEVICE_ADDRESS":"127.0.0.1",
-    "BT_REMOTE_DEVICE_NAME":"localhost",
-    "BT_REMOTE_HEALTH_DEVICE_ADDRESS":"127.0.0.1",
-    "BT_REMOTE_HEALTH_DEVICE_NAME":"localhost",
-    "BT_REMOTE_BLE_DEVICE_ADDRESS":"AA:AA:AA:AA:AA:AA",
-    "BT_REMOTE_HID_DEVICE_ADDRESS":"AA:AA:AA:AA:AA:AA",
-    "BT_REMOTE_OPP_DEVICE_ADDRESS":"AA:AA:AA:AA:AA:AA",
-    "BT_REMOTE_DEVICE_ADDRESS":"AA:AA:AA:AA:AA:AA",
-    "EMAIL_RECIPIENT_1":"123@intel.com",
-    "EMAIL_RECIPIENT_2":"456@intel.com",
-    "MMS_RECIPIENT_1":"123456789",
-    "MMS_RECIPIENT_2":"987654321",
-    "SMS_RECIPIENT_1":"123456789",
-    "SMS_RECIPIENT_2":"987654321",
-    "CHANNEL_MAJOR":11,
-    "CHANNEL_MINOR":1,
-    "CHANNEL_MAJOR_2":7,
-    "CHANNEL_MINOR_2":1,
-    "DATE_FORMAT":"D, d M y",
-    "TIME_FORMAT":"h:m:s ap",
-    "PUBLIC_AP":"Set available public AP name",
-    "PRIVATE_AP_1_2":"Set available private AP name 1",
-    "PRIVATE_AP_2_2":"Set available private AP name 2",
-    "HIDDEN_AP":"Set available hidden AP name",
-    "PASSWORD_FOR_ALL_PRIVATE_AP":"Set common password of all private APs",
-    "PUBLIC_AP":"Set available public AP name",
-    "PRIVATE_AP":"Set available private AP name",
-    "PRIVATE_AP_1_2":"Set available private AP name 1",
-    "PRIVATE_AP_2_2":"Set available private AP name 2",
-    "HIDDEN_AP":"Set available hidden AP name",
-    "PASSWORD_FOR_ALL_PRIVATE_AP":"Set common password of all private APs",
-    "WPS_PBC_AP":"Set name of available AP with WPS PBC function",
-    "WPS_PIN_AP":"Set name of available AP with WPS PIN function",
-    "PIN_NUMBER_OF_WPS_PIN_AP":"Set pin number of WPS_PIN_AP. The pin number should be generated with the checksum defined in WSC spec (Wi-Fi Simple Configuration Technical Specification). If you are not familiar with it, please use an example number, 47363533.",
-    "STREAMING_URI":"Set the streaming uri such as http://www.samsung.com/xx/xx/aa.mp4",
-    "ADAPTIVE_STREAMING_URL":"Set the adaptive streaming url"
-}]
diff --git a/release/csharp-tct_5.5_dotnet/csharp-tct_5.5_dotnet/resource/tct-testconfig/tct-testconfig.ini b/release/csharp-tct_5.5_dotnet/csharp-tct_5.5_dotnet/resource/tct-testconfig/tct-testconfig.ini
deleted file mode 100755 (executable)
index 3a23271..0000000
+++ /dev/null
@@ -1,56 +0,0 @@
-# Bluetooth test settings
-#[tct-bluetooth-tizen-tests]
-# The address of the device on which tct-bt-helper will be run
-#BT_REMOTE_DEVICE_ADDRESS=your BT remote device address
-# The name of the device on which tct-bt-helper will be run
-#BT_REMOTE_DEVICE_NAME=your BT remote device name
-#BT_REMOTE_HEALTH_DEVICE_ADDRESS=your BT remote health device address
-# The name of the device on which tct-bt-helper will be run
-#BT_REMOTE_HEALTH_DEVICE_NAME=your BT remote health device name
-# The name of the device on which tct-bt-helper will be run
-#BT_REMOTE_BLE_DEVICE_ADDRESS=your BT remote BLE device address
-
-# Bluetooth precondition settings
-[Tizen.Bluetooth.Tests]
-BT_REMOTE_DEVICE_ADDRESS=Set remote BT device address. (AA:AA:AA:AA:AA:AA)
-
-[Tizen.Bluetooth.Manual.Tests]
-BT_REMOTE_BLE_DEVICE_ADDRESS=Set remote BLE device address. (AA:AA:AA:AA:AA:AA)
-BT_REMOTE_HID_DEVICE_ADDRESS=Set remote HID device address. (AA:AA:AA:AA:AA:AA)
-BT_REMOTE_OPP_DEVICE_ADDRESS=Set remote OPP device address. (AA:AA:AA:AA:AA:AA)
-BT_REMOTE_DEVICE_ADDRESS=Set remote device address. (AA:AA:AA:AA:AA:AA)
-
-# WiFi test settings
-[Tizen.WiFi.Tests]
-PRIVATE_AP_1_2=Set available private AP name 1
-PRIVATE_AP_2_2=Set available private AP name 2
-HIDDEN_AP=Set available hidden AP
-PASSWORD_FOR_ALL_PRIVATE_AP=Set common password of all private APs
-
-# WiFi manual settings
-[Tizen.WiFi.Manual.Tests]
-WPS_PBC_AP=Set name of available AP with WPS PBC function
-WPS_PIN_AP=Set name of available AP with WPS PIN function
-PIN_NUMBER_OF_WPS_PIN_AP=Set pin number of WPS_PIN_AP
-
-# Connection test settings
-[Tizen.Connection.Tests]
-PUBLIC_AP=Set available public AP name
-PRIVATE_AP=Set available private AP name
-PASSWORD_FOR_ALL_PRIVATE_AP=Set common password of all private APs
-
-# Map test key settings
-[Tizen.Maps.Tests]
-HERE_MAPS_PROVIDER_KEY=Set the HERE_MAPS_PROVIDER_KEY
-
-# Map.Manual test key settings
-[Tizen.Maps.Manual.Tests]
-HERE_MAPS_PROVIDER_KEY=Set the HERE_MAPS_PROVIDER_KEY
-
-[Tizen.Messages.Tests]
-MESSAGES_MOBILE_NUMBER=You should write only number. Do NOT write - or ()
-
-# MediaPlayer test key settings
-[Tizen.MediaPlayer.Tests]
-STREAMING_URI = set the uri in here. ex>http://www.samsung.com/xx/xx/aa.mp4
-ADAPTIVE_STREAMING_URL = set the url in here
diff --git a/release/csharp-tct_5.5_dotnet/csharp-tct_5.5_dotnet/resource/tct-testconfig/tests.full.xml b/release/csharp-tct_5.5_dotnet/csharp-tct_5.5_dotnet/resource/tct-testconfig/tests.full.xml
deleted file mode 100755 (executable)
index 237bff0..0000000
+++ /dev/null
@@ -1,449 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<?xml-stylesheet type="text/xsl" href="./testcase.xsl"?>
-<test_definition>
-  <suite name="tct-testconfig">
-    <set name="tct-bluetooth-tizen-tests">
-      <testcase execution_type="manual" id="BluetoothConfiguration" purpose="tct-bluetooth-tizen-tests configuration" status="approved" type="compliance">
-        <description>
-          <steps>
-            <step order="1">
-              <step_desc>The 'tct-bt-helper' web application MUST be installed on the remote device whose address is REMOTE_DEVICE_ADDRESS.
-The tct-bt-helper is included in the tct-bluetooth-tizen-tests package. Install the tct-bluetooth-tizen-tests package on both your test device and the remote Bluetooth device.</step_desc>
-            </step>
-            <step order="2">
-              <step_desc>Turn on the Bluetooth of your test device and the remote device. Make the two devices discoverable to each other.</step_desc>
-            </step>
-            <step order="3">
-              <step_desc>Before manual testing, launch the 'tct-bt-helper' web application installed on the remote device, click 'Register service' on the 'tct-bt-helper', and then execute the TCs tests manually.</step_desc>
-            </step>
-          </steps>
-          <test_script_entry test_script_expected_result="0" timeout="90"/>
-        </description>
-      </testcase>
-    </set>
-    <set name="tct-callhistory-tizen-tests">
-      <testcase purpose="tct-callhistory-tizen-tests Configuration" type="compliance" status="approved" component="WebAPI/Tizen/Configuration" execution_type="manual" priority="P0" id="CallHistoryConfiguration">
-        <description>
-          <pre_condition/>
-          <post_condition/>
-          <steps>
-            <step order="1">
-              <step_desc>Make sure the telephony works well.</step_desc>
-              <expected>TBD</expected>
-            </step>
-            <step order="2">
-              <step_desc>Insert a SIM card and enable the cellular device service on your test device. During manual testing, you can see the preconditions for each test.</step_desc>
-              <expected>TBD</expected>
-            </step>
-          </steps>
-          <test_script_entry timeout="90" test_script_expected_result="0"/>
-        </description>
-        <specs>
-          <spec>
-            <spec_assertion element_type="TBD" element_name="TBD" interface="TBD" specification="TBD" section="TBD" category="TBD"/>
-            <spec_url>TBD</spec_url>
-            <spec_statement>TBD</spec_statement>
-          </spec>
-        </specs>
-      </testcase>
-    </set>
-    <set name="tct-datacontrol-tizen-tests">
-      <testcase purpose="tct-datacontrol-tizen-tests Configuration" type="compliance" status="approved" component="WebAPI/Tizen/Configuration" execution_type="manual" priority="P0" id="DataControlConfiguration">
-        <description>
-          <pre_condition/>
-          <post_condition/>
-          <steps>
-            <step order="1">
-              <step_desc> Create the sample native application using Tizen SDK. You can find this native application in the installation directory.
-              In Tizen SDK, select 'File' -&gt; 'Import' -&gt; 'Tizen' -&gt; 'Tizen Native Project' -&gt; 'Select archive file' -&gt; 'select datacontrolprovider.zip in the /opt/tct/tizen_web_2.4/resource/'.
-              </step_desc>
-              <expected>TBD</expected>
-            </step>
-            <step order="2">
-              <step_desc> Build and sign this native application with the same certification which you sign the 'tct-datacontrol-tizen-tests' package with.
-              </step_desc>
-              <expected>TBD</expected>
-            </step>
-            <step order="3">
-              <step_desc> Launch this native application(No UI).</step_desc>
-              <expected>TBD</expected>
-            </step>
-          </steps>
-          <test_script_entry timeout="90" test_script_expected_result="0"/>
-        </description>
-        <specs>
-          <spec>
-            <spec_assertion element_type="TBD" element_name="TBD" interface="TBD" specification="TBD" section="TBD" category="TBD"/>
-            <spec_url>TBD</spec_url>
-            <spec_statement>TBD</spec_statement>
-          </spec>
-        </specs>
-      </testcase>
-    </set>
-    <set name="tct-download-tizen-tests">
-      <testcase purpose="tct-download-tizen-tests Configuration" type="compliance" status="approved" component="WebAPI/Tizen/Configuration" execution_type="manual" priority="P0" id="DownloadConfiguration">
-        <description>
-          <pre_condition/>
-          <post_condition/>
-          <steps>
-            <step order="1">
-              <step_desc>A network connection capable of accessing the Internet MUST be established. If your device supports Wi-Fi, turn on Wi-Fi. If your device supports telephony, insert a SIM card and enable the cellular data service on your test device. During manual testing, you can see the preconditions for each test.</step_desc>
-              <expected>TBD</expected>
-            </step>
-          </steps>
-          <test_script_entry timeout="90" test_script_expected_result="0"/>
-        </description>
-        <specs>
-          <spec>
-            <spec_assertion element_type="TBD" element_name="TBD" interface="TBD" specification="TBD" section="TBD" category="TBD"/>
-            <spec_url>TBD</spec_url>
-            <spec_statement>TBD</spec_statement>
-          </spec>
-        </specs>
-      </testcase>
-    </set>
-    <set name="tct-camera-nonw3c-tests">
-      <testcase purpose="tct-camera-nonw3c-tests Configuration" type="compliance" status="approved" component="WebAPI/Tizen/Configuration" execution_type="manual" priority="P0" id="CameraConfiguration">
-        <description>
-          <pre_condition/>
-          <post_condition/>
-          <steps>
-            <step order="1">
-              <step_desc>Make sure device camera is working well.</step_desc>
-              <expected>TBD</expected>
-            </step>
-          </steps>
-          <test_script_entry timeout="90" test_script_expected_result="0"/>
-        </description>
-        <specs>
-          <spec>
-            <spec_assertion element_type="TBD" element_name="TBD" interface="TBD" specification="TBD" section="TBD" category="TBD"/>
-            <spec_url>TBD</spec_url>
-            <spec_statement>TBD</spec_statement>
-          </spec>
-        </specs>
-      </testcase>
-    </set>
-    <set name="tct-fmradio-tizen-tests">
-      <testcase purpose="tct-fmradio-tizen-tests Configuration" type="compliance" status="approved" component="WebAPI/Tizen/Configuration" execution_type="manual" priority="P0" id="FMRadioConfiguration">
-        <description>
-          <pre_condition/>
-          <post_condition/>
-          <steps>
-            <step order="1">
-              <step_desc>The antenna(earphones) is nessasary to test this module. please put antenna(earphones) jack into device.</step_desc>
-              <expected>TBD</expected>
-            </step>
-          </steps>
-          <test_script_entry timeout="90" test_script_expected_result="0"/>
-        </description>
-        <specs>
-          <spec>
-            <spec_assertion element_type="TBD" element_name="TBD" interface="TBD" specification="TBD" section="TBD" category="TBD"/>
-            <spec_url>TBD</spec_url>
-            <spec_statement>TBD</spec_statement>
-          </spec>
-        </specs>
-      </testcase>
-    </set>
-    <set name="tct-messaging-email-tizen-tests">
-      <testcase purpose="tct-messaging-email-tizen-tests Configuration" type="compliance" status="approved" component="WebAPI/Tizen/Configuration" execution_type="manual" priority="P0" id="MessagingConfiguration">
-        <description>
-          <pre_condition/>
-          <post_condition/>
-          <steps>
-            <step order="1">
-              <step_desc>There MUST be established Network connection for sending and receiving email tests (preferably through WiFi as it has smaller delays on connection)</step_desc>
-              <expected>TBD</expected>
-            </step>
-            <step order="2">
-             <step_desc>Add an account through Settings application.
-   (Settings -> Personal / Accounts)
-       2.1 Click "Add"
-       2.1 Select type of account: Email
-       2.2 Enter e-mail address and password (preferably Gmail account)
-       2.3 Click "Next" - configuration will be verified and stored</step_desc>
-              <expected>TBD</expected>
-            </step>
-            <step order="3">
-              <step_desc>There MUST be several email messages in your mailbox to be used for searching and removing messages tests</step_desc>
-              <expected>TBD</expected>
-            </step>
-            <step order="4">
-              <step_desc>There MUST be exactly one email service configured on the device.</step_desc>
-              <expected>TBD</expected>
-            </step>
-            <step order="5">
-              <step_desc>EMAIL_RECIPIENT_1 is the e-mail address of the account You have set up on the device</step_desc>
-              <expected>TBD</expected>
-            </step>
-            <step order="6">
-              <step_desc>EMAIL_RECIPIENT_2 is any valid e-mail address different from EMAIL_RECIPIENT_1</step_desc>
-              <expected>TBD</expected>
-            </step>
-          </steps>
-          <test_script_entry timeout="90" test_script_expected_result="0"/>
-        </description>
-        <specs>
-          <spec>
-            <spec_assertion element_type="TBD" element_name="TBD" interface="TBD" specification="TBD" section="TBD" category="TBD"/>
-            <spec_url>TBD</spec_url>
-            <spec_statement>TBD</spec_statement>
-          </spec>
-        </specs>
-      </testcase>
-    </set>
-    <set name="tct-messaging-mms-tizen-tests">
-      <testcase purpose="tct-messaging-mms-tizen-tests Configuration" type="compliance" status="approved" component="WebAPI/Tizen/Configuration" execution_type="manual" priority="P0" id="MessagingConfiguration">
-        <description>
-          <pre_condition/>
-          <post_condition/>
-          <steps>
-            <step order="1">
-              <step_desc>A SIM card MUST be inserted for sending MMS messages.</step_desc>
-              <expected>TBD</expected>
-            </step>
-            <step order="2">
-              <step_desc>MMS_RECIPIENT_1 is any valid phone number (without country code prefix). You should not use a number of the SIM card inserted into test device.</step_desc>
-              <expected>TBD</expected>
-            </step>
-            <step order="3">
-              <step_desc>MMS_RECIPIENT_2 is any valid phone number, different from MMS_RECIPIENT_1 (without country code prefix)</step_desc>
-              <expected>TBD</expected>
-            </step>
-          </steps>
-          <test_script_entry timeout="90" test_script_expected_result="0"/>
-        </description>
-        <specs>
-          <spec>
-            <spec_assertion element_type="TBD" element_name="TBD" interface="TBD" specification="TBD" section="TBD" category="TBD"/>
-            <spec_url>TBD</spec_url>
-            <spec_statement>TBD</spec_statement>
-          </spec>
-        </specs>
-      </testcase>
-    </set>
-    <set name="tct-messaging-sms-tizen-tests">
-      <testcase purpose="tct-messaging-sms-tizen-tests Configuration" type="compliance" status="approved" component="WebAPI/Tizen/Configuration" execution_type="manual" priority="P0" id="MessagingConfiguration">
-        <description>
-          <pre_condition/>
-          <post_condition/>
-          <steps>
-            <step order="1">
-              <step_desc>A SIM card MUST be inserted for sending SMS messages.</step_desc>
-              <expected>TBD</expected>
-            </step>
-            <step order="2">
-              <step_desc>SMS_RECIPIENT_1 is any valid phone number (without country code prefix). You should not use a number of the SIM card you in test device.</step_desc>
-              <expected>TBD</expected>
-            </step>
-            <step order="3">
-              <step_desc>SMS_RECIPIENT_2 is any valid phone number, different from SMS_RECIPIENT_1 (without country code prefix)</step_desc>
-              <expected>TBD</expected>
-            </step>
-          </steps>
-          <test_script_entry timeout="90" test_script_expected_result="0"/>
-        </description>
-        <specs>
-          <spec>
-            <spec_assertion element_type="TBD" element_name="TBD" interface="TBD" specification="TBD" section="TBD" category="TBD"/>
-            <spec_url>TBD</spec_url>
-            <spec_statement>TBD</spec_statement>
-          </spec>
-        </specs>
-      </testcase>
-    </set>
-    <set name="tct-nfc-tizen-tests">
-      <testcase purpose="tct-nfc-tizen-tests Configuration" type="compliance" status="approved" component="WebAPI/Tizen/Configuration" execution_type="manual" priority="P0" id="NFCConfiguration">
-        <description>
-          <pre_condition/>
-          <post_condition/>
-          <steps>
-            <step order="1">
-              <step_desc>Manual tests requires a NFC tag (which supports NDEF) and a NFC enabled device to connect your test device with.</step_desc>
-              <expected>TBD</expected>
-            </step>
-            <step order="2">
-              <step_desc>Enable NFC on your test device and the NFC device you will connect to.</step_desc>
-              <expected>TBD</expected>
-            </step>
-          </steps>
-          <test_script_entry timeout="90" test_script_expected_result="0"/>
-        </description>
-        <specs>
-          <spec>
-            <spec_assertion element_type="TBD" element_name="TBD" interface="TBD" specification="TBD" section="TBD" category="TBD"/>
-            <spec_url>TBD</spec_url>
-            <spec_statement>TBD</spec_statement>
-          </spec>
-        </specs>
-      </testcase>
-    </set>
-    <set name="tct-time-tizen-tests">
-      <testcase purpose="tct-time-tizen-tests Configuration" type="compliance" status="approved" component="WebAPI/Tizen/Configuration" execution_type="manual" priority="P0" id="TimeConfiguration">
-        <description>
-          <pre_condition/>
-          <post_condition/>
-          <steps>
-            <step order="1">
-              <step_desc>Before executing manual and auto time test, must set current time, language, region, and time must be as follows:</step_desc>
-              <expected>TBD</expected>
-            </step>
-            <step order="2">
-              <step_desc>'Time zone' MUST be set as Seoul.</step_desc>
-              <expected>TBD</expected>
-            </step>
-            <step order="3">
-              <step_desc>Set the current time correctly.</step_desc>
-              <expected>TBD</expected>
-            </step>
-            <step order="4">
-              <step_desc>'Display language' MUST be set as English.</step_desc>
-              <expected>TBD</expected>
-            </step>
-            <step order="5">
-              <step_desc>'Region' MUST be set as English(following time format D, M d y ).</step_desc>
-              <expected>TBD</expected>
-            </step>
-            <step order="6">
-              <step_desc>Time format MUST be set as AM/PM format,</step_desc>
-              <expected>TBD</expected>
-            </step>
-          </steps>
-          <test_script_entry timeout="90" test_script_expected_result="0"/>
-        </description>
-        <specs>
-          <spec>
-            <spec_assertion element_type="TBD" element_name="TBD" interface="TBD" specification="TBD" section="TBD" category="TBD"/>
-            <spec_url>TBD</spec_url>
-            <spec_statement>TBD</spec_statement>
-          </spec>
-        </specs>
-      </testcase>
-    </set>
-    <set name="tct-power-tizen-tests">
-      <testcase purpose="tct-power-tizen-tests Configuration" type="compliance" status="approved" component="WebAPI/Tizen/Configuration" execution_type="manual" priority="P0" id="PowerConfiguration">
-        <description>
-          <pre_condition/>
-          <post_condition/>
-          <steps>
-            <step order="1">
-              <step_desc>Turn off Automatic screen brightness (pull down the notification panel and ensure that Auto is disabled)</step_desc>
-              <expected>TBD</expected>
-            </step>
-          </steps>
-          <steps>
-            <step order="2">
-              <step_desc>Set Backlight time to 15 seconds (Settings -&gt; Display -&gt; Backlight time -&gt; 15 seconds)</step_desc>
-              <expected>TBD</expected>
-            </step>
-          </steps>
-          <test_script_entry timeout="90" test_script_expected_result="0"/>
-        </description>
-        <specs>
-          <spec>
-            <spec_assertion element_type="TBD" element_name="TBD" interface="TBD" specification="TBD" section="TBD" category="TBD"/>
-            <spec_url>TBD</spec_url>
-            <spec_statement>TBD</spec_statement>
-          </spec>
-        </specs>
-      </testcase>
-    </set>
-    <set name="tct-push-tizen-tests">
-      <testcase purpose="tct-push-tizen-tests Configuration" type="compliance" status="approved" component="WebAPI/Tizen/Configuration" execution_type="manual" priority="P0" id="PushConfiguration">
-        <description>
-          <pre_condition/>
-          <post_condition/>
-          <steps>
-            <step order="1">
-              <step_desc>A network connection capable of accessing the Internet MUST be established.</step_desc>
-              <expected>TBD</expected>
-            </step>
-          </steps>
-          <test_script_entry timeout="90" test_script_expected_result="0"/>
-        </description>
-        <specs>
-          <spec>
-            <spec_assertion element_type="TBD" element_name="TBD" interface="TBD" specification="TBD" section="TBD" category="TBD"/>
-            <spec_url>TBD</spec_url>
-            <spec_statement>TBD</spec_statement>
-          </spec>
-        </specs>
-      </testcase>
-    </set>
-    <set name="tct-networkbearerselection-tizen-tests">
-      <testcase purpose="tct-networkbearerselection-tizen-tests Configuration" type="compliance" status="approved" component="WebAPI/Tizen/Configuration" execution_type="manual" priority="P0" id="NetworkbearerselectionConfiguration">
-        <description>
-          <pre_condition/>
-          <post_condition/>
-          <steps>
-            <step order="1">
-              <step_desc>Make sure the telephony works well.</step_desc>
-              <expected>TBD</expected>
-            </step>
-            <step order="2">
-              <step_desc>Insert a SIM card and enable cellular data service on your test device.</step_desc>
-              <expected>TBD</expected>
-            </step>
-          </steps>
-          <test_script_entry timeout="90" test_script_expected_result="0"/>
-        </description>
-        <specs>
-          <spec>
-            <spec_assertion element_type="TBD" element_name="TBD" interface="TBD" specification="TBD" section="TBD" category="TBD"/>
-            <spec_url>TBD</spec_url>
-            <spec_statement>TBD</spec_statement>
-          </spec>
-        </specs>
-      </testcase>
-    </set>
-    <set name="tct-geoallow-w3c-tests">
-      <testcase purpose="tct-geoallow-w3c-tests Configuration" type="compliance" status="approved" component="WebAPI/Tizen/Configuration" execution_type="manual" priority="P0" id="GeoallowConfiguration">
-        <description>
-          <pre_condition/>
-          <post_condition/>
-          <steps>
-            <step order="1">
-              <step_desc>Enable GPS or connect to an available network</step_desc>
-              <expected>TBD</expected>
-            </step>
-          </steps>
-          <test_script_entry timeout="90" test_script_expected_result="0"/>
-        </description>
-        <specs>
-          <spec>
-            <spec_assertion element_type="TBD" element_name="TBD" interface="TBD" specification="TBD" section="TBD" category="TBD"/>
-            <spec_url>TBD</spec_url>
-            <spec_statement>TBD</spec_statement>
-          </spec>
-        </specs>
-      </testcase>
-    </set>
-    <set name="tct-tv-channel-tizen-tests">
-      <testcase purpose="tct-tv-channel-tizen-tests Configuration" type="compliance" status="approved" component="WebAPI/Tizen/Configuration" execution_type="manual" priority="P0" id="TVChannelConfiguration">
-        <description>
-          <pre_condition/>
-          <post_condition/>
-          <steps>
-            <step order="1">
-              <step_desc>Set Major and Minor channel number</step_desc>
-              <expected>TBD</expected>
-            </step>
-            <step order="2">
-              <step_desc>Set Major_2 and Minor_2 channel number</step_desc>
-              <expected>TBD</expected>
-            </step>
-          </steps>
-          <test_script_entry timeout="90" test_script_expected_result="0"/>
-        </description>
-        <specs>
-          <spec>
-            <spec_assertion element_type="TBD" element_name="TBD" interface="TBD" specification="TBD" section="TBD" category="TBD"/>
-            <spec_url>TBD</spec_url>
-            <spec_statement>TBD</spec_statement>
-          </spec>
-        </specs>
-      </testcase>
-    </set>
-  </suite>
-</test_definition>
diff --git a/release/csharp-tct_5.5_dotnet/csharp-tct_5.5_dotnet/resource/tct-testconfig/tests.xml b/release/csharp-tct_5.5_dotnet/csharp-tct_5.5_dotnet/resource/tct-testconfig/tests.xml
deleted file mode 100755 (executable)
index 8963046..0000000
+++ /dev/null
@@ -1,414 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<?xml-stylesheet type="text/xsl" href="./testcase.xsl"?>
-<test_definition>
-  <suite name="tct-testconfig">
-<!--    <set name="tct-bluetooth-tizen-tests">
-      <testcase execution_type="manual" id="Bluetoothconfiguration" purpose="tct-bluetooth-tizen-tests configuration">
-        <description>
-          <steps>
-            <step order="1">
-              <step_desc>The 'tct-bt-helper' web application MUST be installed on the remote device whose address is REMOTE_DEVICE_ADDRESS.
-The tct-bt-helper is included in the tct-bluetooth-tizen-tests package. Install the tct-bluetooth-tizen-tests package on both your test device and the remote Bluetooth device.</step_desc>
-            </step>
-            <step order="2">
-              <step_desc>Turn on the Bluetooth of your test device and the remote device. Make the two devices discoverable to each other.</step_desc>
-            </step>
-            <step order="3">
-              <step_desc>Before manual testing, launch the 'tct-bt-helper' web application installed on the remote device, click 'Register service' on the 'tct-bt-helper', and then execute the TCs tests manually.</step_desc>
-            </step>
-            <step order="4">
-              <step_desc>BLE test device should have at least one characteristic and descriptor information which is writable in its bluetooth low energy service.</step_desc>
-              <expected>TBD</expected>
-            </step>
-          </steps>
-          <test_script_entry test_script_expected_result="0" timeout="90"/>
-        </description>
-      </testcase>
-    </set>-->
-
-
-<!--Add -->
-    <set name="Tizen.Bluetooth.Tests">
-      <testcase component="WebAPI/Tizen/configuration"  execution_type="manual" id="Bluetoothconfiguration" purpose="Tizen.Bluetooth.Tests configuration">
-        <description>
-          <steps>
-            <step order="1">
-              <step_desc>Set the remote address of the Bluetooth device which you are going to use for testing.</step_desc>
-            </step>
-            <step order="2">
-              <step_desc>Recommends to use Tizen mobile phone for testing.</step_desc>
-            </step>
-          </steps>
-          <test_script_entry test_script_expected_result="0" timeout="90"/>
-        </description>
-      </testcase>
-    </set>
-    <set name="Tizen.Bluetooth.Manual.Tests">
-      <testcase component="WebAPI/Tizen/configuration"  execution_type="manual" id="BluetoothManualconfiguration" purpose="Tizen.Bluetooth.Manual.Tests configuration">
-        <description>
-          <steps>
-            <step order="1">
-              <step_desc>Set the remote address of the BLE(Bluetooth Low Energy) device which you are going to use for testing.</step_desc>
-            </step>
-            <step order="2">
-              <step_desc>Set the remote address of the HID(Human Interface Device) device which you are going to use for testing.</step_desc>
-            </step>
-            <step order="3">
-              <step_desc>Set the remote address of the OPP(Object Push Profile) device which you are going to use for testing.</step_desc>
-            </step>
-            <step order="4">
-              <step_desc>Set the remote address of the device which you are going to use for testing.</step_desc>
-            </step>
-          </steps>
-          <test_script_entry test_script_expected_result="0" timeout="90"/>
-        </description>
-      </testcase>
-    </set>
-    <set name="Tizen.System.Tests">
-      <testcase component="WebAPI/Tizen/configuration"  execution_type="manual" id="Systemconfiguration" purpose="Tizen.System.Tests configuration">
-        <description>
-          <steps>
-            <step order="1">
-              <step_desc>SDCard/USB(External storage) should be inserted on target</step_desc>
-            </step>
-          </steps>
-          <test_script_entry test_script_expected_result="0" timeout="90"/>
-        </description>
-      </testcase>
-    </set>
-    <set name="Tizen.Packagemanager.Tests">
-      <testcase component="WebAPI/Tizen/configuration"  execution_type="manual" id="Packagemanagerconfiguration" purpose="Tizen.Packagemanager.Tests configuration">
-        <description>
-          <steps>
-            <step order="1">
-              <step_desc>SdCard should be inserted on target.</step_desc>
-            </step>
-          </steps>
-          <test_script_entry test_script_expected_result="0" timeout="90"/>
-        </description>
-      </testcase>
-    </set>
-    <set name="Tizen.Download.Manual.Tests">
-      <testcase component="WebAPI/Tizen/configuration" execution_type="manual" id="Downloadmanualconfiguration" purpose="Tizen.Download.Manual.Tests configuration">
-        <description>
-          <steps>
-            <step order="1">
-              <step_desc>A network connection capable of accessing the Internet MUST be established.</step_desc>
-            </step>
-          </steps>
-          <test_script_entry test_script_expected_result="0" timeout="90"/>
-        </description>
-      </testcase>
-    </set>
-    <set name="Tizen.Download.Tests">
-      <testcase component="WebAPI/Tizen/configuration" execution_type="manual" id="Downloadconfiguration" purpose="Tizen.Download.Tests configuration">
-        <description>
-          <steps>
-            <step order="1">
-              <step_desc>A network connection capable of accessing the Internet MUST be established.</step_desc>
-            </step>
-          </steps>
-          <test_script_entry test_script_expected_result="0" timeout="90"/>
-        </description>
-      </testcase>
-    </set>
-    <set name="Tizen.Maps.Tests">
-      <testcase component="WebAPI/Tizen/configuration" execution_type="manual" id="Mapsconfiguration" purpose="Tizen.Maps.Tests configuration">
-        <description>          
-          <steps>
-            <step order="1">
-              <step_desc>A network connection capable of accessing the Internet MUST be established.</step_desc>
-            </step>
-            <step order="2">
-              <step_desc>Set the HERE_MAPS_PROVIDER_KEY configure (appid/app_code).</step_desc>
-            </step>
-          </steps>
-          <test_script_entry test_script_expected_result="0" timeout="90"/>
-        </description>
-      </testcase>
-    </set>
-
-    <set name="Tizen.Maps.Manual.Tests">
-      <testcase component="WebAPI/Tizen/configuration" execution_type="manual" id="Mapsconfiguration" purpose="Tizen.Maps.Manual.Tests configuration">
-        <description>
-          <steps>
-            <step order="1">
-              <step_desc>A network connection capable of accessing the Internet MUST be established.</step_desc>
-            </step>
-            <step order="2">
-              <step_desc>Set the HERE_MAPS_PROVIDER_KEY configure (appid/app_code).</step_desc>
-            </step>
-          </steps>
-          <test_script_entry test_script_expected_result="0" timeout="90"/>
-        </description>
-      </testcase>
-    </set>
-
-    <set name="Tizen.PrivacyPrivilegeManager.Manual.Tests">
-      <testcase component="WebAPI/Tizen/configuration" execution_type="manual" id="Mapsconfiguration" purpose="Tizen.PrivacyPrivilegeManager.Manual.Tests configuration">
-        <description>
-          <steps>
-            <step order="1">
-              <step_desc>There should be no '/opt/share/askuser_disable' file on the target</step_desc>
-            </step>
-          </steps>
-          <test_script_entry test_script_expected_result="0" timeout="90"/>
-        </description>
-      </testcase>
-    </set>
-
-<!--
-    <set name="tct-iotconnectivity-client-tizen-tests">
-      <testcase component="WebAPI/Tizen/configuration" execution_type="manual" id="IoTClientconfiguration" purpose="tct-iotconnectivity-client-tizen-tests configuration">
-        <description>
-          <steps>
-            <step order="1">
-              <step_desc>A network connection capable of accessing the Internet MUST be established.</step_desc>
-            </step>
-          </steps>
-          <test_script_entry test_script_expected_result="0" timeout="90"/>
-        </description>
-      </testcase>
-    </set>
-    <set name="tct-iotconnectivity-server-tizen-tests">
-      <testcase component="WebAPI/Tizen/configuration" execution_type="manual" id="IoTServerconfiguration" purpose="tct-iotconnectivity-server-tizen-tests configuration">
-        <description>
-          <steps>
-            <step order="1">
-              <step_desc>A network connection capable of accessing the Internet MUST be established.</step_desc>
-            </step>
-          </steps>
-          <test_script_entry test_script_expected_result="0" timeout="90"/>
-        </description>
-      </testcase>
-    </set>
--->
-<!--End -->
-
-    <set name="Tizen.Stt.Tests">
-      <testcase component="WebAPI/Tizen/configuration" execution_type="manual" id="Sttconfiguration" purpose="Tizen.Stt.Tests configuration">
-        <description>
-          <steps>
-            <step order="1">
-              <step_desc>In case of TV profile, connect a bluetooth remote controller which has mic.</step_desc>
-            </step>
-          </steps>
-          <test_script_entry test_script_expected_result="0" timeout="90"/>
-        </description>
-      </testcase>
-    </set>
-    <set name="Tizen.VoiceControl.Tests">
-      <testcase component="WebAPI/Tizen/configuration" execution_type="manual" id="VoiceControlconfiguration" purpose="Tizen.VoiceControl.Tests configuration">
-        <description>
-          <steps>
-            <step order="1">
-              <step_desc>In case of TV profile, connect a bluetooth remote controller which has mic.</step_desc>
-            </step>
-          </steps>
-          <test_script_entry test_script_expected_result="0" timeout="90"/>
-        </description>
-      </testcase>
-    </set>
-    <set name="Tizen.Push.Tests">
-      <testcase component="WebAPI/Tizen/configuration" execution_type="manual" id="Pushconfiguration" purpose="Tizen.Push.Tests configuration">
-        <description>
-          <steps>
-            <step order="1">
-              <step_desc>A network connection capable of accessing the Internet MUST be established.</step_desc>
-            </step>
-          </steps>
-          <test_script_entry test_script_expected_result="0" timeout="90"/>
-        </description>
-      </testcase>
-    </set>
-    <set name="Tizen.WiFi.Manual.Tests">
-      <testcase component="WebAPI/Tizen/configuration" execution_type="manual" id="WiFiconfiguration" purpose="Tizen.WiFi.Manual.Tests configuration">
-        <description>
-          <steps>
-            <step order="1">
-              <step_desc>Set name of available AP with WPS PBC function.</step_desc>
-            </step>
-            <step order="2">
-              <step_desc>Set name of available AP with WPS PIN function.</step_desc>
-            </step>
-            <step order="3">
-              <step_desc>Set pin number of WPS_PIN_AP to PIN_NUMBER_WPS_PIN_AP. The pin number should be generated with the checksum defined in WSC spec (Wi-Fi Simple Configuration Technical Specification). The length of WPS PIN number should be 4 or 8. If you are not familiar with it, please use an example number, 47363533.</step_desc>
-            </step>
-          </steps>
-          <test_script_entry test_script_expected_result="0" timeout="90"/>
-        </description>
-      </testcase>
-    </set>
-
-    <set name="Tizen.Messages.Tests">
-      <testcase component="WebAPI/Tizen/configuration" execution_type="manual" id="Messagesconfiguration" purpose="Tizen.Messages.Tests configuration">
-        <description>
-          <steps>
-            <step order="1">
-              <step_desc>Insert the available SIM Card into SIM slot 1.</step_desc>
-            </step>
-            <step order="2">
-              <step_desc>Set the MESSAGES_MOBILE_NUMBER configure.(example>01012345678)</step_desc>
-            </step>
-          </steps>
-          <test_script_entry test_script_expected_result="0" timeout="90"/>
-        </description>
-      </testcase>
-    </set>
-
-    <set name="Tizen.Device.Tests">
-      <testcase component="WebAPI/Tizen/configuration" execution_type="manual" id="Deviceconfiguration" purpose="Tizen.Device.Tests configuration">
-        <description>
-          <steps>
-            <step order="1">
-              <step_desc>Charger should be connected to test target.(In case of Emulator, you have to set with control panel.) </step_desc>
-            </step>
-          </steps>
-          <test_script_entry test_script_expected_result="0" timeout="90"/>
-        </description>
-      </testcase>
-    </set>
-
-    <set name="Tizen.Email.Tests">
-      <testcase component="WebAPI/Tizen/configuration" execution_type="manual" id="Emailconfiguration" purpose="Tizen.Email.Tests configuration">
-        <description>
-          <steps>
-            <step order="1">
-              <step_desc>A network connection capable of accessing the Internet MUST be established.</step_desc>
-            </step>
-            <step order="2">
-              <step_desc>Set the email account on your device. Settings > Accounts > Email > Set created accounts.</step_desc>
-            </step>
-          </steps>
-          <test_script_entry test_script_expected_result="0" timeout="90"/>
-        </description>
-      </testcase>
-    </set>
-
-    <set name="Tizen.SyncManager.Tests">
-      <testcase component="WebAPI/Tizen/configuration" execution_type="manual" id="SyncManagerconfiguration" purpose="Tizen.SyncManager.Tests configuration">
-        <description>
-          <steps>
-            <step order="1">
-              <step_desc>A network connection capable of accessing the Internet MUST be established.</step_desc>
-            </step>
-          </steps>
-          <test_script_entry test_script_expected_result="0" timeout="90"/>
-        </description>
-      </testcase>
-    </set>
-
-    <set name="Tizen.SyncManager.Manual.Tests">
-      <testcase component="WebAPI/Tizen/configuration" execution_type="manual" id="SyncManagerManualconfiguration" purpose="Tizen.SyncManager.Manual.Tests configuration">
-        <description>
-          <steps>
-            <step order="1">
-              <step_desc>A network connection capable of accessing the Internet MUST be established.</step_desc>
-            </step>
-          </steps>
-          <test_script_entry test_script_expected_result="0" timeout="90"/>
-        </description>
-      </testcase>
-    </set>
-
-    <set name="Tizen.Wifidirect.Tests">
-      <testcase component="WebAPI/Tizen/configuration" execution_type="manual" id="Wifidirectconfiguration" purpose="Tizen.Wifidirect.Tests configuration">
-        <description>
-          <steps>
-            <step order="1">
-              <step_desc>You should have two additional devices which are connected to each other via wifi-direct. (Used to get the status of connected devices.) </step_desc>
-            </step>
-          </steps>
-          <test_script_entry test_script_expected_result="0" timeout="90"/>
-        </description>
-      </testcase>
-    </set>
-
-    <set name="Tizen.WiFi.Tests">
-      <testcase component="WebAPI/Tizen/configuration" execution_type="manual" id="WiFiconfiguration" purpose="Tizen.WiFi.Tests configuration">
-        <description>
-          <steps>
-            <step order="1">
-              <step_desc>Set available private AP name 1.</step_desc>
-            </step>
-            <step order="2">
-              <step_desc>Set available private AP name 2.</step_desc>
-            </step>
-            <step order="3">
-              <step_desc>Set available hidden AP name.</step_desc>
-            </step>
-            <step order="4">
-              <step_desc>Set common password of all private APs.</step_desc>
-            </step>
-          </steps>
-          <test_script_entry test_script_expected_result="0" timeout="90"/>
-        </description>
-      </testcase>
-    </set>
-
-    <set name="Tizen.Connection.Tests">
-      <testcase component="WebAPI/Tizen/configuration" execution_type="manual" id="Connectionconfiguration" purpose="Tizen.Connection.Tests configuration">
-        <description>
-          <steps>
-            <step order="1">
-              <step_desc>Set available public AP name.</step_desc>
-            </step>
-            <step order="2">
-              <step_desc>Set available private AP name.</step_desc>
-            </step>
-            <step order="3">
-              <step_desc>Set common password of all private APs.</step_desc>
-            </step>
-          </steps>
-          <test_script_entry test_script_expected_result="0" timeout="90"/>
-        </description>
-      </testcase>
-    </set>
-
-   <set name="Tizen.MediaPlayer.Tests">
-      <testcase component="WebAPI/Tizen/configuration" execution_type="manual" id="MediaPlayerconfiguration" purpose="Tizen.MediaPlayer.Tests configuration">
-        <description>
-          <steps>
-            <step order="1">
-              <step_desc> Set the streaming uri such as http://www.samsung.com/xx/xx/aa.mp4.</step_desc>
-            </step>
-           <step order="2">
-              <step_desc> Set the adaptive streaming url.</step_desc>
-            </step>
-          </steps>
-          <test_script_entry test_script_expected_result="0" timeout="90"/>
-        </description>
-      </testcase>
-    </set>
-
-   <set name="Tizen.WebView.Tests">
-      <testcase component="WebAPI/Tizen/configuration" execution_type="manual" id="WebViewconfiguration" purpose="Tizen.WebView.Tests configuration">
-        <description>
-          <steps>
-            <step order="1">
-              <step_desc> Target has to connect to internet</step_desc>
-            </step>
-          </steps>
-          <test_script_entry test_script_expected_result="0" timeout="90"/>
-        </description>
-      </testcase>
-    </set>
-
-   <set name="Tizen.Usb.Tests">
-      <testcase component="WebAPI/Tizen/configuration" execution_type="manual" id="WebViewconfiguration" purpose="Tizen.Usb.Tests configuration">
-        <description>
-          <steps>
-            <step order="1">
-              <step_desc> The usb-host emulation driver MUST be loaded before testing.</step_desc>
-            </step>
-            <step order="2">
-              <step_desc> $ devicectl usb-host-test start</step_desc>
-            </step>
-          </steps>
-          <test_script_entry test_script_expected_result="0" timeout="90"/>
-        </description>
-      </testcase>
-    </set>
-  </suite>
-</test_definition>
-
diff --git a/release/csharp-tct_5.5_dotnet/csharp-tct_5.5_dotnet/resource/testkit-stub/aarch64/testkit-stub b/release/csharp-tct_5.5_dotnet/csharp-tct_5.5_dotnet/resource/testkit-stub/aarch64/testkit-stub
deleted file mode 100755 (executable)
index bc8c195..0000000
Binary files a/release/csharp-tct_5.5_dotnet/csharp-tct_5.5_dotnet/resource/testkit-stub/aarch64/testkit-stub and /dev/null differ
diff --git a/release/csharp-tct_5.5_dotnet/csharp-tct_5.5_dotnet/resource/testkit-stub/arm/testkit-stub b/release/csharp-tct_5.5_dotnet/csharp-tct_5.5_dotnet/resource/testkit-stub/arm/testkit-stub
deleted file mode 100755 (executable)
index 74e76ab..0000000
Binary files a/release/csharp-tct_5.5_dotnet/csharp-tct_5.5_dotnet/resource/testkit-stub/arm/testkit-stub and /dev/null differ
diff --git a/release/csharp-tct_5.5_dotnet/csharp-tct_5.5_dotnet/resource/testkit-stub/ia/testkit-stub b/release/csharp-tct_5.5_dotnet/csharp-tct_5.5_dotnet/resource/testkit-stub/ia/testkit-stub
deleted file mode 100755 (executable)
index 1cbe806..0000000
Binary files a/release/csharp-tct_5.5_dotnet/csharp-tct_5.5_dotnet/resource/testkit-stub/ia/testkit-stub and /dev/null differ
diff --git a/release/csharp-tct_5.5_dotnet/csharp-tct_5.5_dotnet/resource/testkit-stub/ia64/testkit-stub b/release/csharp-tct_5.5_dotnet/csharp-tct_5.5_dotnet/resource/testkit-stub/ia64/testkit-stub
deleted file mode 100755 (executable)
index f7a1344..0000000
Binary files a/release/csharp-tct_5.5_dotnet/csharp-tct_5.5_dotnet/resource/testkit-stub/ia64/testkit-stub and /dev/null differ
diff --git a/release/csharp-tct_5.5_dotnet/csharp-tct_5.5_dotnet/tools/devicemanager.py b/release/csharp-tct_5.5_dotnet/csharp-tct_5.5_dotnet/tools/devicemanager.py
deleted file mode 100755 (executable)
index 7ca7e7d..0000000
+++ /dev/null
@@ -1,101 +0,0 @@
-#!/usr/bin/python
-
-from sdbmanager import SdbManager
-
-class DeviceManager(object):
-    INSTANCE = None
-    devices = []
-
-    def __init__(self):
-        if DeviceManager.INSTANCE is not None:
-            raise Exception('DeviceManager instance already exists')
-
-    @classmethod
-    def getInstance(cls):
-        if cls.INSTANCE is None:
-            cls.INSTANCE = DeviceManager()
-        if len(cls.INSTANCE.devices) < 1:
-            cls.INSTANCE.loadDeviceList()
-        return cls.INSTANCE
-
-    def _updateConnDevice(self, connDevices):
-        self._resetDevices()
-
-        for dev in connDevices:
-            self.devices.append(dev)
-
-    def _resetDevices(self):
-        listSize = len(self.devices)
-        del self.devices[0:listSize]
-
-    def isDeviceAvailable(self, deviceId):
-        if len(self.devices) < 1:
-            return False
-        else:
-            devs = self.getSdbDeviceList()
-            for dev in devs:
-                devId = dev.getDeviceId()
-                if devId == deviceId:
-                    return True
-        return False
-
-    def getDeviceSize(self):
-        return len(self.devices)
-
-    def getSdbDeviceList(self):
-        return self.devices
-
-    def getDevice(self, deviceId):
-        for dev in self.devices:
-            if dev.getDeviceId() == deviceId:
-                return dev
-
-        print "#ERROR#: The '%s' device Id exists error" % deviceId
-        return None
-
-    def loadDeviceList(self):
-        connDevices = []
-        sdbOutLog = SdbManager.sdbDevices()
-        devicesInfo = sdbOutLog.replace("List of devices attached", "")
-        devList = devicesInfo.split('\n')
-
-        for dev in devList:
-            if len(dev) > 1:
-                devInfoItem = dev.split('\t')
-                devId = devInfoItem[0].rstrip()
-                devType = devInfoItem[1].rstrip()
-                devName = devInfoItem[2].rstrip()
-                if not (devType == "unknown" or devType == "offline" \
-                        or devId == "unknown" or devId == "offline"):
-                    connDevices.append(SdbDevice(devId, devName, devType))
-
-        if len(connDevices) > 0:
-            self._updateConnDevice(connDevices)
-            print "Connected Devices = %s" \
-                    % str([dev.devId for dev in self.devices])
-            return True
-        else:
-            self._resetDevices()
-            return False
-
-class SdbDevice:
-    def __init__(self, devId, devName, devType):
-        self.devId = devId
-        self.devName = devName
-        self.devType = devType
-
-    def _printDevInfo(self):
-        print "===== Device Infomation ====="
-        print " Name : " + self.devName
-        print " Id   : " + self.devId
-        print " Type : " + self.devType
-        print "============================="
-
-    def getDeviceId(self):
-        return self.devId
-
-    def getDeviceName(self):
-        return self.devName
-
-    def getDeviceType(self):
-        return self.devType
diff --git a/release/csharp-tct_5.5_dotnet/csharp-tct_5.5_dotnet/tools/devicemanager.pyc b/release/csharp-tct_5.5_dotnet/csharp-tct_5.5_dotnet/tools/devicemanager.pyc
deleted file mode 100755 (executable)
index 92b32c7..0000000
Binary files a/release/csharp-tct_5.5_dotnet/csharp-tct_5.5_dotnet/tools/devicemanager.pyc and /dev/null differ
diff --git a/release/csharp-tct_5.5_dotnet/csharp-tct_5.5_dotnet/tools/healthcheck.ini b/release/csharp-tct_5.5_dotnet/csharp-tct_5.5_dotnet/tools/healthcheck.ini
deleted file mode 100755 (executable)
index 52f8bcb..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-[HealthCheck]
-step1=checking widget getCap,getCap,10
-step2=checking process testkit-stub,testkit-stub,5
-step3=checking testconfig tool,testconfig,2
-step4=checking widget storage,storage,10
diff --git a/release/csharp-tct_5.5_dotnet/csharp-tct_5.5_dotnet/tools/sdbmanager.py b/release/csharp-tct_5.5_dotnet/csharp-tct_5.5_dotnet/tools/sdbmanager.py
deleted file mode 100755 (executable)
index 1f474e4..0000000
+++ /dev/null
@@ -1,221 +0,0 @@
-#!/usr/bin/python
-
-import subprocess
-import time
-import os
-import platform
-import re
-import signal
-import ctypes
-
-SDB_PUSH = "sdb -s %s push"
-SDB_SHELL = "sdb -s %s shell"
-SDB_ROOT_ON = "sdb -s %s root on"
-SDB_DEVICES = "sdb devices"
-SDB_START_SERVER = "sdb start-server"
-SDB_KILL_SERVER = "sdb kill-server"
-SDB_CONNECT = "sdb connect %s"
-SDB_PULL = "sdb -s %s pull"
-SDB_CAT_CONFIG = " cat %s"
-SDB_LS = "sdb -s %s shell ls -al"
-FILE_FOUND_SCRIPT = "[ -f %s ] && echo \"Found\" || echo \"Not Found\""
-
-class SdbManager:
-
-    @staticmethod
-    def hostCommand(command):
-        print command
-        proc = subprocess.Popen(command, shell=True, \
-                stdout=subprocess.PIPE, stderr=subprocess.PIPE)
-
-        while True:
-            exit_code = proc.poll()
-            if exit_code is not None:
-                break
-
-            output = proc.stdout.read()
-            if output:
-                print output
-
-            errlog = proc.stderr.read()
-            if errlog:
-                print errlog
-
-        return True
-
-    @staticmethod
-    def hostCommandwithResult(command):
-        print command
-        proc = subprocess.Popen(command, shell=True, \
-                stdout=subprocess.PIPE, stderr=subprocess.PIPE)
-
-        while True:
-            exit_code = proc.poll()
-            if exit_code is not None:
-                break
-
-        return proc.stdout.read()
-
-    @staticmethod
-    def sdbCommand(command, timeout=90):
-        print command
-        proc = subprocess.Popen(command,
-                                shell=True,
-                                stdout=subprocess.PIPE,
-                                stderr=subprocess.PIPE)
-        time_out = 0
-        exit_code = None
-        while time_out < timeout:
-            exit_code = proc.poll()
-            if exit_code is not None:
-                break
-            time_out += 0.5
-            time.sleep(0.5)
-        if exit_code is None:
-            SdbManager.killall(proc.pid)
-
-        return exit_code, proc.stdout, proc.stderr
-
-    @staticmethod
-    def _checkDevIdExists(_devid):
-        if len(_devid) < 0:
-            print "#ERROR#: The '%s' device Id exists error" % _devid
-            return False
-        return True
-
-    @staticmethod
-    def _checkFileExists(aPath):
-        if os.path.exists(aPath):
-            return True
-        else:
-            return False
-
-    @staticmethod
-    def sdbPush(_devid, local, remote):
-        if SdbManager._checkFileExists(local) is False:
-            print '#WARNING#: The %s file exists error' % local
-            return False
-
-        FAIL_LOG = "#ERROR#: sdb push failed"
-        SdbManager._checkDevIdExists(_devid)
-        push_cmd = SDB_PUSH % _devid + " " + local + " " + remote
-        exit_code, re_stdout, re_stderr = SdbManager.sdbCommand(push_cmd)
-
-        if exit_code is None:
-            print FAIL_LOG
-            errLog = re_stderr.read()
-            if errLog: print errLog
-            return False
-        else:
-            print re_stdout.read()
-            return True
-
-    @staticmethod
-    def sdbShell(deviceId, cmd, timeout=90):
-        SdbManager._checkDevIdExists(deviceId)
-        shell_cmd = SDB_SHELL % deviceId + " " + cmd
-        FAIL_LOG = "#ERROR#: sdb shell failed"
-        exit_code, re_stdout, re_stderr = SdbManager.sdbCommand(shell_cmd, timeout)
-
-        if exit_code is None:
-            print FAIL_LOG
-            errLog = re_stderr.read()
-            if errLog : print errLog
-            return None
-        else:
-            outLog = re_stdout.read()
-            errLog = re_stderr.read()
-            if errLog:
-                print FAIL_LOG
-                print errLog
-                return None
-            if outLog:
-                print outLog
-                return outLog
-
-    @staticmethod
-    def sdbRootOn(deviceId):
-        SdbManager._checkDevIdExists(deviceId)
-        FAIL_LOG = "#ERROR#: sdb root on failed"
-        is_pass = False
-        root_cmd = SDB_ROOT_ON % deviceId
-        exit_code, re_stdout, re_stderr = SdbManager.sdbCommand(root_cmd, 20)
-
-        if exit_code is None:
-            print FAIL_LOG
-            errLog = re_stderr.read()
-            if errLog: print (str(errLog))
-
-        checkLog = SdbManager.sdbShell(deviceId, 'whoami')
-        if checkLog and checkLog.find('root') != -1:
-            print 'SDB ROOT ON'
-            is_pass = True
-        else:
-            print FAIL_LOG
-            print str(checkLog)
-
-        return is_pass
-
-    @staticmethod
-    def sdbDevices():
-        dev_cmd = SDB_DEVICES
-        start_server_cmd = SDB_START_SERVER
-        SdbManager.sdbCommand(start_server_cmd, 8)
-        exit_code, re_stdout, re_stderr = SdbManager.sdbCommand(dev_cmd, 20)
-        if exit_code is None:
-            print "#ERROR#: %s" % re_stderr.read()
-            return None
-
-        return re_stdout.read()
-
-    @staticmethod
-    def sdbSetDate(devid):
-        print "set device date"
-        HDATE = '`date "+%Y-%m-%d %H:%M"`'
-        date_cmd = '"date -s \''+ HDATE + '\'"'
-        SdbManager.sdbShell(devid, date_cmd)
-
-    @staticmethod
-    def killall(ppid):
-        """Kill all children process by parent process ID"""
-        os_ver = platform.system()
-        try:
-            if os_ver == "Linux" or os_ver == "Darwin":
-                ppid = str(ppid)
-                pidgrp = []
-
-                def getchildpids(ppid):
-                    """Return a list of children process"""
-                    command = "ps -ef | awk '{if ($3 == %s) print $2;}'" % str(
-                    ppid)
-                    pids = os.popen(command).read()
-                    pids = pids.split()
-                    return pids
-
-                pidgrp.extend(getchildpids(ppid))
-                for pid in pidgrp:
-                    pidgrp.extend(getchildpids(pid))
-                # Insert self process ID to PID group list
-                pidgrp.insert(0, ppid)
-                while len(pidgrp) > 0:
-                    pid = pidgrp.pop()
-                    try:
-                        os.kill(int(pid), signal.SIGKILL)
-                    except OSError, error:
-                        pattern = re.compile('No such process')
-                        match = pattern.search(str(error))
-                        if not match:
-                            print "[ Error: fail to kill pid: %s," \
-                                " error: %s ]\n" % (int(pid), error)
-            # kill for windows platform
-            else:
-                kernel32 = ctypes.windll.kernel32
-                handle = kernel32.OpenProcess(1, 0, int(ppid))
-                kernel32.TerminateProcess(handle, 0)
-        except OSError, error:
-            pattern = re.compile('No such process')
-            match = pattern.search(str(error))
-            if not match:
-                print "[ Error: fail to kill pid: %s, error: %s ]\n" \
-                      % (int(ppid), error)
-        return None
diff --git a/release/csharp-tct_5.5_dotnet/csharp-tct_5.5_dotnet/tools/sdbmanager.pyc b/release/csharp-tct_5.5_dotnet/csharp-tct_5.5_dotnet/tools/sdbmanager.pyc
deleted file mode 100755 (executable)
index 08f1604..0000000
Binary files a/release/csharp-tct_5.5_dotnet/csharp-tct_5.5_dotnet/tools/sdbmanager.pyc and /dev/null differ
diff --git a/release/csharp-tct_5.5_dotnet/csharp-tct_5.5_dotnet/tools/tct-config-device.py b/release/csharp-tct_5.5_dotnet/csharp-tct_5.5_dotnet/tools/tct-config-device.py
deleted file mode 100755 (executable)
index 9c51077..0000000
+++ /dev/null
@@ -1,745 +0,0 @@
-#!/usr/bin/python
-
-"""Usage:
-         tct-config-device.py [--install [--deviceid <serial_no>]]
-         tct-config-device.py --purge [--deviceid <serial_no>]
-         tct-config-device.py --check [--deviceid <serial_no>][--procid <process_name>]
-         tct-config-device.py --bhtest <profile>
-
-Options:
-  -h, --help         show this help message and exit
-  --install          Install tct resources to TIZEN device,it can be omitted
-  --purge            Clean up tct resources from TIZEN device
-  --check            Check test resource on device
-  --bhtest           Install tct behavior test
-  --deviceid         Set the device serial number
-  --procid           Set the check process name
-
-"""
-import os
-import sys
-import time
-import ConfigParser
-import threading
-import subprocess
-
-
-from optparse import OptionParser
-from devicemanager import DeviceManager
-from sdbmanager import SdbManager
-
-JOIN = os.path.join
-EXISTS = os.path.exists
-DIRNAME = os.path.dirname
-BASENAME = os.path.basename
-ABSPATH = os.path.abspath
-SPLIT = os.path.split
-
-CURENT_DIR = SPLIT(DIRNAME(ABSPATH(__file__)))[0]
-
-TOOLS_DIR = JOIN(CURENT_DIR, "tools")
-RESRC_DIR = JOIN(CURENT_DIR, "resource")
-PKGS_DIR = JOIN(CURENT_DIR, "package")
-
-DEVID = ""
-
-TIZENV = "tizen_5.5"
-
-DLOG_CLEAR = "dlogutil -c"
-DLOG_UTIL = "sdb -s %s shell dlogutil -v time"
-
-TCT_CONFIG_FILE = "/opt/tools/TCT_CONFIG"
-tct_parser = ConfigParser.ConfigParser()
-tct_parser.read(TCT_CONFIG_FILE)
-
-DEVICE_SUITE_TARGET_24 = tct_parser.get('DEVICE', 'DEVICE_SUITE_TARGET_24')
-DEVICE_SUITE_TARGET_30 = tct_parser.get('DEVICE', 'DEVICE_SUITE_TARGET_30')
-DEVICE_EXECUTION_MODE_30 = tct_parser.get('DEVICE', 'DEVICE_EXECUTION_MODE_30')
-
-if TIZENV.find('tizen_5.5') > -1:
-    DEVICE_SUITE_TARGET = DEVICE_SUITE_TARGET_30
-else:
-    DEVICE_SUITE_TARGET = DEVICE_SUITE_TARGET_24
-
-def LS(root, file_name, extension=None):
-    import glob
-
-    file_path = ""
-    if extension:
-        file_path = JOIN(root, file_name) + "*." + extension
-    else:
-        file_path = JOIN(root, file_name) + "*"
-    files = glob.iglob(r'' + file_path + '')
-    for f in files:
-        return BASENAME(f)
-
-def get_device_arch():
-    global DEV_ARCH
-    #ARCHCMD = SDB_SERNO + " shell \"cat /etc/products.d/tizen.prod |grep \<arch\""
-    arch_cmd = "cat /etc/config/model-config.xml | grep tizen.org/feature/platform.core.cpu.arch"
-    #result example : <key name="tizen.org/feature/platform.core.cpu.arch" type="string">armv7</key>
-    result = SdbManager.sdbShell(DEVID, arch_cmd)
-    if result and len(result) > 0:
-        arch_str = result.split('\n')[0]
-        if arch_str and arch_str.find('armv') > -1:
-            DEV_ARCH = "arm"
-            print "info: [* Arch Type : arm *]"
-        elif arch_str and arch_str.find("aarch64") > -1:
-            DEV_ARCH = "aarch64"
-            print "info: [* Arch Type : aarch64 *]"
-        elif arch_str and arch_str.find('x86_64') > -1:
-            DEV_ARCH = "ia64"
-            print "info: [* Arch Type : ia64 *]"
-        elif arch_str and (arch_str.find("i686") > -1 or arch_str.find("x86") > -1 or arch_str.find("i386") > -1):
-            DEV_ARCH = "ia"
-            print "info: [* Arch Type : ia *]"
-        else:
-            print "info: [* Arch Type : None *]"
-            return False
-        return True
-    else:
-        print "#ERROR#: Failed to get device cpu_arch type"
-        return False
-
-
-def kill_process(process_name):
-    proc_cmd = "ps aux | grep " + process_name + " | grep -v grep | awk '{print $2}'"
-    result = SdbManager.sdbShell(DEVID, proc_cmd)
-    if result and len(result) > 0:
-        kill_cmd = "kill -9 " + str(result).strip() + " > /dev/null 2>&1"
-        SdbManager.sdbShell(DEVID, kill_cmd)
-        print "info: %s process has been killed" % process_name
-    else:
-        print "info: No process of %s activated" % process_name
-
-def remove_tinyweb():
-    SdbManager.sdbShell(DEVID, "rm -f /opt/home/developer/server.pem > /dev/null 2>&1")
-    SdbManager.sdbShell(DEVID, "rm -f /opt/home/developer/tinyweb > /dev/null 2>&1")
-    SdbManager.sdbShell(DEVID, "rm -f /opt/home/developer/cgi-getcookie > /dev/null 2>&1")
-    SdbManager.sdbShell(DEVID, "rm -f /opt/home/developer/cgi-getfield > /dev/null 2>&1")
-    SdbManager.sdbShell(DEVID, "rm -f /opt/home/developer/libmongoose.so > /dev/null 2>&1")
-    SdbManager.sdbShell(DEVID, "rm -f /opt/home/developer/echo.so > /dev/null 2>&1")
-    SdbManager.sdbShell(DEVID, "rm -f /opt/home/developer/libssl.so > /dev/null 2>&1")
-    SdbManager.sdbShell(DEVID, "rm -f /opt/home/developer/libcrypto.so > /dev/null 2>&1")
-
-def remove_stub():
-    SdbManager.sdbShell(DEVID, "rm -f /opt/home/developer/testkit-stub")
-
-
-def uninstall_testconfig():
-    if TIZENV.find('tizen_5.5') > -1:
-        inst_path = RESRC_DIR + os.sep + 'tct-testconfig' + os.sep + 'inst.py'
-        SdbManager.hostCommand("python %s -s %s -u" % (inst_path, DEVID))
-    else:
-        RPMPKG = LS(RESRC_DIR, "tct-testconfig")
-        if not RPMPKG:
-            sys.exit("#ERROR#: cannot found tct-testconfig.zip file in resource dir")
-        uninst_cmd = JOIN(DEVICE_SUITE_TARGET, 'tct/opt/tct-testconfig/inst.sh') + ' -u'
-        SdbManager.sdbShell(DEVID, uninst_cmd)
-        rm_cmd = 'rm -f ' + JOIN(DEVICE_SUITE_TARGET, 'tct/', RPMPKG)
-        SdbManager.sdbShell(DEVID, rm_cmd)
-
-
-def uninstall_behavior():
-    print "info: Uninstall behavior tool."
-    if TIZENV.find('tizen_5.5') > -1:
-        pass
-    else:
-        uninst_cmd = JOIN(DEVICE_SUITE_TARGET, 'tct/opt/tct-behavior-tests/inst.sh') + ' -u'
-        SdbManager.sdbShell(DEVID, uninst_cmd)
-
-
-def check_resource_dir():
-    print "info: check resource directory."
-    if os.path.exists(RESRC_DIR):
-        SdbManager.sdbShell(DEVID, 'mkdir -p ' + JOIN(DEVICE_SUITE_TARGET, 'tct/'))
-        SdbManager.sdbShell(DEVID, 'mkdir -p ' + JOIN(DEVICE_SUITE_TARGET, 'Documents/'))
-        return True
-    else:
-        print "#WARNING#: The directory resource does not exists. Please copy test resources to %s " % RESRC_DIR
-        return False
-
-def check_tinyweb():
-    print "info: Check tinyweb."
-    result = SdbManager.sdbShell(DEVID, "ls /opt/home/developer/ | grep tinyweb")
-    if result and result.find('tinyweb'):
-        remove_tinyweb()
-        install_tinyweb()
-        launch_tinyweb()
-    else:
-        install_tinyweb()
-        launch_tinyweb()
-
-
-def port_manager():
-    print "info: Check the tinyweb port"
-    result = SdbManager.sdbShell('fuser -n tcp 80 8080 8081 8082 8083 8443')
-    if result and len(result) > 0:
-        check_port = SdbManager.sdbShell('su "netstat -nap |grep tinyweb"')
-        if len(check_port) > 0:
-            print "info: tinyweb on"
-    else:
-        print "info: Port is available"
-
-
-def launch_tinyweb():
-    dpath_cmd = "printenv PATH"
-    dpath = SdbManager.sdbShell(DEVID, dpath_cmd)
-
-    launch_cmd = 'sdb -s ' + DEVID + ' shell ' + '"env LD_LIBRARY_PATH=/opt/home/developer PATH=' + dpath.strip() + \
-                 ':/opt/home/developer/ tinyweb -ssl_certificate /opt/home/developer/server.pem -document_root ' + \
-                 JOIN(DEVICE_SUITE_TARGET, 'tct') + ' -listening_ports 80,8080,8081,8082,8083,8443s; sleep 3s" 0> /dev/null'
-
-    SdbManager.sdbCommand(launch_cmd, 10)
-
-    check_tinyweb_cmd = '\"ps aux | grep tinyweb | grep -v grep\"'
-    result = SdbManager.sdbShell(DEVID, check_tinyweb_cmd)
-    if result and result.find('tinyweb') > -1:
-        print "info: Active process tinyweb successfully."
-        return True
-    else:
-        print "#ERROR#: Active process tinyweb failed."
-        return False
-
-def install_tinyweb():
-    print "info: Install tinyweb"
-    SdbManager.sdbPush(DEVID, JOIN(RESRC_DIR, 'tinyweb', DEV_ARCH, 'tinyweb'), '/opt/home/developer/')
-    SdbManager.sdbShell(DEVID, "chmod 777 /opt/home/developer/tinyweb")
-
-    SdbManager.sdbPush(DEVID, JOIN(RESRC_DIR, 'tinyweb', DEV_ARCH, 'cgi-getcookie'), '/opt/home/developer/')
-    SdbManager.sdbShell(DEVID, "chmod 777 /opt/home/developer/cgi-getcookie")
-
-    SdbManager.sdbPush(DEVID, JOIN(RESRC_DIR, 'tinyweb', DEV_ARCH, 'cgi-getfield'), '/opt/home/developer/')
-    SdbManager.sdbShell(DEVID, "chmod 777 /opt/home/developer/cgi-getfield")
-
-    SdbManager.sdbPush(DEVID, JOIN(RESRC_DIR, 'tinyweb', DEV_ARCH, 'libmongoose.so'), '/opt/home/developer/')
-    SdbManager.sdbShell(DEVID, "chmod 777 /opt/home/developer/libmongoose.so")
-
-    SdbManager.sdbPush(DEVID, JOIN(RESRC_DIR, 'tinyweb', DEV_ARCH, 'echo.so'), '/opt/home/developer/')
-    SdbManager.sdbShell(DEVID, "chmod 777 /opt/home/developer/echo.so")
-
-    SdbManager.sdbPush(DEVID, JOIN(RESRC_DIR, 'tinyweb', DEV_ARCH, 'server.pem'), '/opt/home/developer/')
-    SdbManager.sdbShell(DEVID, "chmod 777 /opt/home/developer/server.pem")
-    if DEV_ARCH == "arm":
-        SdbManager.sdbShell(DEVID, "ln -s /usr/lib/libssl.so.1.0.0 /opt/home/developer/libssl.so")
-        SdbManager.sdbShell(DEVID, "ln -s /usr/lib/libcrypto.so.1.0.0 /opt/home/developer/libcrypto.so")
-    elif DEV_ARCH == "ia":
-        SdbManager.sdbShell(DEVID, "ln -s /usr/lib/libssl.so.1.0.0 /opt/home/developer/libssl.so")
-        SdbManager.sdbShell(DEVID, "ln -s /usr/lib/libcrypto.so.1.0.0 /opt/home/developer/libcrypto.so")
-    elif DEV_ARCH == "aarch64":
-        SdbManager.sdbShell(DEVID, "ln -s /usr/lib64/libssl.so.1.0.0 /opt/home/developer/libssl.so")
-        SdbManager.sdbShell(DEVID, "ln -s /usr/lib64/libcrypto.so.1.0.0 /opt/home/developer/libcrypto.so")
-    elif DEV_ARCH == "ia64":
-        SdbManager.sdbShell(DEVID, "ln -s /usr/lib64/libssl.so.1.0.0 /opt/home/developer/libssl.so")
-        SdbManager.sdbShell(DEVID, "ln -s /usr/lib64/libcrypto.so.1.0.0 /opt/home/developer/libcrypto.so")
-
-
-def check_stub():
-    print "info: Check testkit-stub."
-    result = SdbManager.sdbShell(DEVID, "ls /opt/home/developer/ | grep testkit-stub")
-    if result and len(result) > 0:
-        print "info: testkit-stub has been installed on device."
-        kill_process("testkit-stub")
-    install_stub()
-
-
-def install_stub():
-    print "info: Install testkit-stub."
-    SdbManager.sdbPush(DEVID, JOIN(RESRC_DIR, 'testkit-stub', DEV_ARCH, 'testkit-stub'), '/opt/home/developer/testkit-stub')
-    SdbManager.sdbShell(DEVID, "chmod a+x /opt/home/developer/testkit-stub")
-    SdbManager.sdbShell(DEVID, "chsmack -e \"User\" /opt/home/developer/testkit-stub")
-
-
-def check_testconfig():
-    result = SdbManager.sdbShell(DEVID, '"cat ' + JOIN(DEVICE_SUITE_TARGET, 'tct/opt/tct-testconfig/tct-testconfig.ini') + ' | grep tct"')
-    if result and len(result) > 0 and result.find('No such file or directory') == -1:
-        print "info: testconfig has already been installed on device."
-    else:
-        install_testconfig()
-
-
-def install_testconfig():
-    print "info: Install testconfig."
-    if TIZENV.find('tizen_5.5') > -1:
-        instPath = RESRC_DIR + os.sep + 'tct-testconfig' + os.sep + 'inst.py'
-        SdbManager.hostCommand("python %s -s %s" % (instPath, DEVID))
-    else:
-        conf_pkg = LS(RESRC_DIR, "tct-testconfig")
-        SdbManager.sdbPush(DEVID, JOIN(RESRC_DIR, conf_pkg), JOIN(DEVICE_SUITE_TARGET, 'tct/'))
-        SdbManager.sdbShell(DEVID, 'unzip -uo ' + JOIN(DEVICE_SUITE_TARGET, 'tct/') + conf_pkg + ' -d ' + JOIN(DEVICE_SUITE_TARGET, 'tct/'))
-        SdbManager.sdbShell(DEVID, JOIN(DEVICE_SUITE_TARGET, 'tct/opt/tct-testconfig/inst.sh'))
-
-    result = SdbManager.sdbShell(DEVID, 'cat ' + JOIN(DEVICE_SUITE_TARGET, 'tct/opt/tct-testconfig/tct-testconfig.ini') + ' | grep tct')
-
-    if result and len(result) > 0:
-        print "info: Install testconfig successfully."
-    else:
-        print "#ERROR#: Failed to install testconfig, please check %s" % RESRC_DIR
-        return False
-
-    return True
-
-def install_behavior(profile_name):
-    print "info: Install behavior tool."
-
-    if not profile_name in ['wearable', 'mobile', 'tv', 'ivi']:
-        print "#WARNING#: Invalid device profile value %s" % profile_name
-        return False
-
-    if TIZENV.find('tizen_5.5') > -1:
-        RPMPKG = "tct-behavior-tests-5.5.zip"
-        opt_rpm_path = PKGS_DIR + "s" + os.sep + profile_name + os.sep + RPMPKG
-        local_rpm_path = PKGS_DIR + os.sep + profile_name + os.sep + RPMPKG
-
-        install_rpm = None
-        install_dest = None
-        install_cmd = None
-        if os.path.exists(opt_rpm_path):
-            install_rpm = opt_rpm_path
-            install_dest = PKGS_DIR + "s" + os.sep + profile_name + os.sep
-            install_cmd = PKGS_DIR + "s" + os.sep + profile_name + os.sep + \
-                    'opt' + os.sep + "tct-behavior-tests" + os.sep + "inst.py"
-        elif os.path.exists(local_rpm_path):
-            install_rpm = local_rpm_path
-            install_dest = PKGS_DIR + os.sep + profile_name + os.sep
-            install_cmd = PKGS_DIR + os.sep + profile_name + os.sep + \
-                    'opt' + os.sep + "tct-behavior-tests" + os.sep + "inst.py"
-
-        SdbManager.hostCommand("rm -rf %s" % install_dest + "opt/tct-behavior-tests")
-        SdbManager.hostCommand("unzip -uo %s -d %s" % (install_rpm, install_dest))
-        SdbManager.hostCommand("python %s -s %s" % (install_cmd, DEVID))
-
-        print "info: Check tizen-web-ui-fw. Please wait..."
-        check_uifw = SdbManager.sdbShell(DEVID, "ls /usr/share/ | grep tizen-web-ui-fw")
-        if check_uifw and len(check_uifw) > 0:
-            print "info: tizen-web-ui-fw has been installed on device."
-        else:
-            SdbManager.sdbShell(DEVID, '"mkdir -p /usr/share/tizen-web-ui-fw/"')
-            SdbManager.sdbPush(DEVID, JOIN(RESRC_DIR, "tizen-web-ui-fw"), '/usr/share/tizen-web-ui-fw/')
-    else:
-        pass
-
-    return True
-
-
-def install_getCap():
-    print "info: Install widget getCap."
-    widgetCap = LS(RESRC_DIR, 'getCap', 'wgt')
-    SdbManager.sdbPush(DEVID, JOIN(RESRC_DIR, widgetCap), JOIN(DEVICE_SUITE_TARGET, 'tct/') + widgetCap)
-
-    if TIZENV.find('5.5') > -1:
-        SdbManager.sdbShell(DEVID, "su - " + DEVICE_EXECUTION_MODE_30 + \
-                " -c 'pkgcmd -i -t wgt -q -p " + JOIN(DEVICE_SUITE_TARGET, 'tct/') + widgetCap + '\'')
-        SdbManager.sdbShell(DEVID, 'pkgcmd -i -t wgt -q -p ' + JOIN(DEVICE_SUITE_TARGET, 'tct/') + widgetCap)
-
-
-def install_ngetCap():
-    print "info: Install widget ngetCap."
-    getcap_pkg = LS(RESRC_DIR, 'getCap', 'tpk')
-    SdbManager.sdbPush(DEVID, JOIN(RESRC_DIR, getcap_pkg), JOIN(DEVICE_SUITE_TARGET, 'tct/') + getcap_pkg)
-
-    if TIZENV.find('tizen_5.5') > -1:
-        SdbManager.sdbShell(DEVID, "su - " + DEVICE_EXECUTION_MODE_30 + \
-                " -c 'pkgcmd -ipt tpk -p " + JOIN(DEVICE_SUITE_TARGET, 'tct/') + getcap_pkg + '\'')
-    else:
-        SdbManager.sdbShell(DEVID, "pkgcmd -iqt tpk -p" + JOIN(DEVICE_SUITE_TARGET, 'tct/') + getcap_pkg)
-
-def uninstall_getCap():
-    print "info: Uninstall widget getCap."
-    wgt_id = getCap_appid()
-    if wgt_id:
-        uninst_cmd = ""
-        if TIZENV.find('tizen_5.5') > -1:
-            uninst_cmd = "su - " + DEVICE_EXECUTION_MODE_30 + \
-                    " -c 'pkgcmd -qun " + wgt_id.split('.')[0] + '\''
-        elif TIZENV.find('tizen_2.4') > -1:
-            uninst_cmd = "pkgcmd -u -q -t wgt -q -p " + wgt_id + '\''
-        SdbManager.sdbShell(DEVID, uninst_cmd)
-
-    else:
-        print "info: getCap is not installed. No need to uninstall"
-
-    SdbManager.sdbShell(DEVID, "rm -rf " + JOIN(DEVICE_SUITE_TARGET, "Documents/tct"))
-    SdbManager.sdbShell(DEVID, "rm -rf " + JOIN(DEVICE_SUITE_TARGET, "tct/getCap.wgt"))
-    SdbManager.sdbShell(DEVID, "rm -rf " + JOIN(DEVICE_SUITE_TARGET, "tct/getCap.tpk"))
-
-
-def uninstall_ngetCap():
-    print "info: Uninstall widget ngetCap."
-
-def getCap_appid():
-    widgetid_cmd = ""
-    if TIZENV.find('tizen_5.5') > -1:
-        widgetid_cmd = "su - " + DEVICE_EXECUTION_MODE_30 + \
-                " -c \"app_launcher -l | grep getCapabilities\""
-    else:
-        widgetid_cmd = "wrt-launcher -l | grep getCapabilities"
-
-    widgetids = SdbManager.sdbShell(DEVID, widgetid_cmd)
-    if widgetids and widgetids.find('getCapabilities') > -1:
-        items = widgetids.split()
-        return items[len(items) - 1].strip("'")
-    else:
-        return None
-
-def check_getCap():
-    print "info: Check getCap widget. Please wait..."
-    if getCap_appid():
-        print "info: widget getCap has already been installed on device."
-    else:
-        install_getCap()
-    launch_getCap()
-
-
-def check_ngetCap():
-    print "info: Check ngetCap widget. Please wait..."
-    if getCap_appid():
-        print "info: widget ngetCap has already been installed on device."
-    else:
-        install_ngetCap()
-    launch_ngetCap()
-
-
-def launch_getCap():
-    wgt_id = getCap_appid()
-    if wgt_id:
-        launchResult = None
-        if TIZENV.find('tizen_5.5') > -1:
-            launchResult = SdbManager.sdbShell(DEVID, 'su - ' + \
-                    DEVICE_EXECUTION_MODE_30 + ' -c \"app_launcher -s ' + wgt_id + '\"')
-        else:
-            launchResult = SdbManager.sdbShell(DEVID, '\"wrt-launcher -s ' + wgt_id + '\"')
-
-        if launchResult.find('launched') > -1:
-            fcheck_retry = 20
-
-            while fcheck_retry > 0:
-                build = SdbManager.sdbShell(DEVID, "cat " + JOIN(DEVICE_SUITE_TARGET, "Documents/tct/buildinfo.xml") + " | grep buildinfos")
-                capa = SdbManager.sdbShell(DEVID, "cat " + JOIN(DEVICE_SUITE_TARGET, "Documents/tct/capability.xml") + " | grep capabilities")
-                if not build or not capa:
-                    time.sleep(2)
-                    fcheck_retry -= 1
-                else:
-                    break
-            if fcheck_retry == 0:
-                print "#ERROR#: getCap get buildinfo, capability of device failed!"
-                return False
-            else:
-                print "info: Launch getCap successfully"
-                return True
-        else:
-            print "#ERROR#: Launch getCap got failed"
-            return False
-    else:
-        print "#ERROR#: Widget getCap cannot be found. Please check whether the widget is installed successfully"
-        return False
-
-def launch_ngetCap():
-    launch_result = None
-    if TIZENV.find('tizen_5.5') > -1:
-        launch_result = SdbManager.sdbShell(DEVID, 'su - ' + \
-                DEVICE_EXECUTION_MODE_30 + ' -c \"launch_app org.example.getcap\"')
-    else:
-        launch_result = SdbManager.sdbShell(DEVID, '\"launch_app org.example.getcap\"')
-
-    if "launched" in launch_result:
-        return True
-    else:
-        return False
-
-def getStorage_appid():
-    widgetid_cmd = "su - " + DEVICE_EXECUTION_MODE_30 + \
-            " -c \"app_launcher -l | grep InternalStorageSetting\""
-    widgetids = SdbManager.sdbShell(DEVID, widgetid_cmd)
-    if widgetids and widgetids.find('InternalStorageSetting') > -1:
-        items = widgetids.split()
-        return items[len(items)-1].strip("'")
-    else:
-        return None
-
-def check_storage():
-    print "info: Check InternalStorageSetting widget. Please wait..."
-    if getStorage_appid():
-        print "info: widget InternalStorageSetting has already been installed on device."
-    else:
-        install_storage()
-    launch_storage()
-
-def install_storage():
-    print "info: Install widget InternalStorageSetting"
-    widget = LS(RESRC_DIR, 'InternalStorageSetting', 'wgt')
-    SdbManager.sdbPush(DEVID, JOIN(RESRC_DIR, widget), JOIN(DEVICE_SUITE_TARGET, 'tct/') + widget)
-
-    SdbManager.sdbShell(DEVID, "su - " + DEVICE_EXECUTION_MODE_30 + \
-            " -c 'pkgcmd -i -t wgt -q -p " + JOIN(DEVICE_SUITE_TARGET, 'tct/') + widget + '\'')
-
-def launch_storage():
-    wgt_id = getStorage_appid()
-    if wgt_id:
-        launch_result = SdbManager.sdbShell(DEVID, 'su - ' + \
-                DEVICE_EXECUTION_MODE_30 + ' -c \"app_launcher -s ' + wgt_id + '\"')
-
-        if launch_result.find('launched') > -1:
-            print "info: Launch InternalStorageSetting successfully"
-            return True
-        else:
-            print "#ERROR#: InternalStorageSetting launch failed"
-            return False
-    else:
-        print "#ERROR#: Widget InternalStorageSetting cannot be found"
-        return False
-
-def uninstall_storage():
-    print "info: Uninstall widget InternalStorageSetting"
-    wgt_id = getStorage_appid()
-    if wgt_id:
-        uninst_cmd = "su - " + DEVICE_EXECUTION_MODE_30 + \
-                " -c 'pkgcmd -qun " + wgt_id.split('.')[0] + '\''
-        SdbManager.sdbShell(DEVID, uninst_cmd)
-    else:
-        print "info: InternalStorageSetting is not installed"
-
-def push_tctconf_file():
-    local = TCT_CONFIG_FILE
-    remote = DEVICE_SUITE_TARGET_30
-    if not SdbManager.sdbPush(DEVID, local, remote):
-        print "#ERROR#: TCT_CONFIG file push failed"
-        return False
-    return True
-
-def find_ngetCap():
-    getcap_tpk = LS(RESRC_DIR, 'getCap', 'tpk')
-    if getcap_tpk:
-        return True
-    else:
-        return False
-
-def debug_trace(cmd, logfile):
-    global debug_flag, metux
-
-    wbuffile = file(logfile, "a+")
-    exit_code = None
-    proc = subprocess.Popen(args=cmd,
-            shell=True,
-            stdout=wbuffile,
-            stderr=None)
-    while True:
-        exit_code = proc.poll()
-        if exit_code is not None:
-            break
-        time.sleep(0.6)
-        metux.acquire()
-        proc_flag = debug_flag
-        metux.release()
-        if not proc_flag:
-            break
-    wbuffile.close()
-    SdbManager.killall(proc.pid)
-
-
-def start_debug(dlog_file):
-    global debug_flag, metux, dlog_thread
-    debug_flag = True
-    metux = threading.Lock()
-    clear_cmd = DLOG_CLEAR
-    SdbManager.sdbShell(DEVID, clear_cmd)
-
-    dlog_cmd = DLOG_UTIL % DEVID
-    dlog_thread = threading.Thread(target=debug_trace, args=(dlog_cmd, dlog_file))
-    dlog_thread.setDaemon(True)
-    dlog_thread.start()
-
-
-def stop_debug():
-    global debug_flag, metux
-    metux.acquire()
-    debug_flag = False
-    metux.release()
-    dlog_thread.join()
-
-
-def runProcess():
-    if options.purge:
-        print "[ Uninstall test resource on device. Please wait...]"
-        uninstall_testconfig()
-        uninstall_behavior()
-        uninstall_getCap()
-        remove_tinyweb()
-        kill_process("tinyweb")
-        kill_process("testkit-stub")
-        remove_stub()
-        if TIZENV.find('5.5') > -1:
-            uninstall_storage()
-        print "Clean the tct packages in device successfully."
-
-    elif options.check:
-        check_resource_dir()
-        print "[ Check test resource on device. Please wait...]"
-        if options.process == 'tinyweb':
-            check_tinyweb()
-        elif options.process == 'testkit-stub':
-            check_stub()
-        elif options.process == 'testconfig':
-            check_testconfig()
-        elif options.process == 'getCap':
-            check_getCap()
-        elif options.process == 'ngetCap':
-            if find_ngetCap():
-                check_ngetCap()
-            else:
-                check_getCap()
-        elif options.process == 'storage':
-            check_storage()
-        else:
-            check_tinyweb()
-            check_stub()
-            check_testconfig()
-            if find_ngetCap():
-                check_ngetCap()
-            else:
-                check_getCap()
-            if TIZENV.find('5.5') > -1:
-                check_storage()
-
-        print "Check finished."
-
-    elif options.bhtest:
-        check_resource_dir()
-        if TIZENV.find('5.5') > -1:
-            uninstall_storage()
-            install_storage()
-            launch_storage()
-
-        uninstall_behavior()
-        print "[ Install tct behavior tool on device. Please wait...]"
-        install_behavior(options.bhtest)
-        print "Installation of tct behavior on device completed."
-
-    else:
-        check_resource_dir()
-        print "[ Clean old test resource on device. Please wait...]"
-        if options.process == 'tinyweb':
-            kill_process("tinyweb")
-            remove_tinyweb()
-        elif options.process == 'testkit-stub':
-            kill_process("testkit-stub")
-            remove_stub()
-        elif options.process == 'testconfig':
-            uninstall_testconfig()
-        elif options.process == 'getCap':
-            uninstall_getCap()
-            pass
-        elif options.process == 'ngetCap':
-            uninstall_ngetCap()
-        elif options.process == 'storage':
-            uninstall_storage()
-        else:
-            remove_tinyweb()
-            kill_process("testkit-stub")
-            remove_stub()
-            uninstall_testconfig()
-            uninstall_getCap()
-            uninstall_ngetCap()
-            if TIZENV.find('5.5') > -1:
-                uninstall_storage()
-
-        print "Clean the tct packages in device successfully."
-        print "[ Install test resource on device. Please wait...]"
-        if options.process == 'tinyweb':
-            install_tinyweb()
-            launch_tinyweb()
-        elif options.process == 'testkit-stub':
-            install_stub()
-        elif options.process == 'testconfig':
-            install_testconfig()
-        elif options.process == 'getCap':
-            install_getCap()
-            launch_getCap()
-        elif options.process == 'ngetCap':
-            if find_ngetCap():
-                install_ngetCap()
-                launch_ngetCap()
-            else:
-                install_getCap()
-                launch_getCap()
-        elif options.process == 'storage':
-            install_storage()
-            launch_storage()
-        else:
-            install_testconfig()
-            install_stub()
-            install_tinyweb()
-            launch_tinyweb()
-            if find_ngetCap():
-                install_ngetCap()
-                launch_ngetCap()
-            else:
-                install_getCap()
-                launch_getCap()
-
-            if TIZENV.find('5.5') > -1:
-                install_storage()
-                launch_storage()
-
-        print "All of installation process on device completed."
-
-
-if __name__ == "__main__":
-
-    parser = OptionParser()
-    parser.add_option(
-        "--install", dest="install", action="store_true", default=False,
-        help="Install tct resources to TIZEN device,it can be omitted")
-    parser.add_option(
-        "--purge", dest="purge", action="store_true", default=False,
-        help="Clean up tct resources from TIZEN device")
-    parser.add_option(
-        "--check", dest="check", action="store_true", default=False,
-        help="Check test resource on device")
-    parser.add_option(
-        "--deviceid", dest="deviceid", action="store",
-        help="Set the device serial number")
-    parser.add_option(
-        "--procid", dest="process", action="store",
-        help="Set the process id for checking")
-    parser.add_option(
-        "--bhtest", dest="bhtest", action="store",
-        help="Install behavior test tool to device")
-
-    (options, args) = parser.parse_args()
-
-    devinst = DeviceManager.getInstance()
-    if options.deviceid:
-        if devinst.isDeviceAvailable(options.deviceid):
-            DEVID = options.deviceid
-        else:
-            sys.exit("#ERROR#: The '%s' device Id exists error" % options.deviceid)
-    else:
-        if devinst.getDeviceSize() > 1 or devinst.getDeviceSize() == 0:
-            sys.exit("#ERROR#: %s devices connected or device not connected" % str(devinst.getDeviceSize()))
-        else:
-            DEVID = devinst.getSdbDeviceList()[0].getDeviceId()
-
-    print "[========== start tct-config-device : %s ==========]" % DEVID
-    dev_temp_dir = '/opt/tools/shell/tmp/%s/' % DEVID
-    if not os.path.isdir(dev_temp_dir):
-        os.mkdir(dev_temp_dir)
-    DLOG_SAVE_PATH = '/opt/tools/shell/tmp/%s/conf_dev_%s.dlog'
-    if options.process is None:
-        DLOG_SAVE_PATH = DLOG_SAVE_PATH % (DEVID, 'all')
-    else:
-        DLOG_SAVE_PATH = DLOG_SAVE_PATH % (DEVID, options.process)
-
-    #start_debug(DLOG_SAVE_PATH)
-
-    if not SdbManager.sdbRootOn(DEVID):
-        sys.exit(-1)
-
-    SdbManager.sdbSetDate(DEVID)
-
-    if not get_device_arch() or not push_tctconf_file():
-        sys.exit(0)
-
-    runProcess()
-    #stop_debug()
-    print "[========== end tct-config-device : %s ==========]" % DEVID
diff --git a/release/csharp-tct_5.5_dotnet/csharp-tct_5.5_dotnet/tools/tct-config-host.py b/release/csharp-tct_5.5_dotnet/csharp-tct_5.5_dotnet/tools/tct-config-host.py
deleted file mode 100755 (executable)
index bfa213c..0000000
+++ /dev/null
@@ -1,203 +0,0 @@
-# -*- coding:utf-8 -*-
-import os
-import sys
-import platform
-import shutil
-import stat
-from optparse import OptionParser
-
-
-class CpFile:
-
-    def __init__(self, _tizenV, _upgrade=False):
-        self.tizenV = _tizenV
-        self.upgrade = _upgrade
-        self.sep = os.sep
-        self.TARGET_BASE_PATH = os.path.join(os.sep + "opt", "tct")
-
-        self.CURRENT_TARGET_BASE_PATH = ""
-        self.CURRENT_TARGET_LITE_PATH = ""
-        self.CURRENT_SOURCE_LITE_PATH = ""
-
-        #package
-        self.SOURCE_PACKAGE_PATH = ".." + self.sep + "package"
-        self.TARGET_PACKAGE_PATH = \
-                self.sep + self.tizenV + self.sep + "packages"
-        #manager
-        self.SOURCE_MANAGER_PATH = \
-                ".." + self.sep + "tools" + self.sep + "manager"
-        self.TARGET_MANAGER_PATH = \
-                self.sep + self.tizenV + self.sep + "manager"
-        #resource
-        self.SOURCE_RESOURCE_PATH = ".." + self.sep + "resource"
-        self.TARGET_RESOURCE_PATH = \
-                self.sep + self.tizenV + self.sep + "resource"
-        #script
-        self.SOURCE_SCRIPT_PATH = ""
-        self.TARGET_SCRIPT_PATH = self.sep + self.tizenV + self.sep + "scripts"
-        #doc
-        self.SOURCE_DOC_PATH = ".." + self.sep + "doc"
-        self.TARGET_DOC_PATH = self.sep + self.tizenV + self.sep + "doc"
-
-    def getCurrentOSBit(self):
-        return platform.architecture()
-
-    def setCurrentPath(self):
-        self.CURRENT_SOURCE_BASE_PATH = os.getcwd() + self.sep
-        self.CURRENT_TARGET_BASE_PATH = self.TARGET_BASE_PATH
-        print("current source base path =" + self.CURRENT_SOURCE_BASE_PATH)
-        print("current target base path =" + self.CURRENT_TARGET_BASE_PATH)
-
-    def cpDoc(self):
-        self.cpDir(self.CURRENT_SOURCE_BASE_PATH + self.SOURCE_DOC_PATH,
-                   self.CURRENT_TARGET_BASE_PATH + self.TARGET_DOC_PATH, "doc")
-
-    def cpScript(self):
-        self.cpFile(self.CURRENT_SOURCE_BASE_PATH + self.SOURCE_SCRIPT_PATH + \
-                self.sep + "healthcheck.ini",
-                    self.CURRENT_TARGET_BASE_PATH + self.TARGET_SCRIPT_PATH + \
-                            self.sep + "healthcheck.ini")
-        self.cpFile(self.CURRENT_SOURCE_BASE_PATH + self.SOURCE_SCRIPT_PATH + \
-                self.sep + "tct-config-device.py",
-                    self.CURRENT_TARGET_BASE_PATH + self.TARGET_SCRIPT_PATH + \
-                            self.sep + "tct-config-device.py")
-
-        self.cpFile(self.CURRENT_SOURCE_BASE_PATH + self.SOURCE_SCRIPT_PATH + \
-                self.sep + "devicemanager.py",
-                    self.CURRENT_TARGET_BASE_PATH + self.TARGET_SCRIPT_PATH + \
-                            self.sep + "devicemanager.py")
-
-        self.cpFile(self.CURRENT_SOURCE_BASE_PATH + self.SOURCE_SCRIPT_PATH + \
-                self.sep + "sdbmanager.py",
-                    self.CURRENT_TARGET_BASE_PATH + self.TARGET_SCRIPT_PATH + \
-                            self.sep + "sdbmanager.py")
-
-
-    def cpResource(self):
-        if not self.upgrade:
-            self.cpDir(self.CURRENT_SOURCE_BASE_PATH + self.SOURCE_RESOURCE_PATH,
-                       self.CURRENT_TARGET_BASE_PATH + self.TARGET_RESOURCE_PATH, \
-                               "resource")
-
-    def cpPackage(self):
-        self.cpDir(self.CURRENT_SOURCE_BASE_PATH + self.SOURCE_PACKAGE_PATH,
-                   self.CURRENT_TARGET_BASE_PATH + self.TARGET_PACKAGE_PATH, \
-                           "package")
-        for r, d, f in os.walk(self.CURRENT_TARGET_BASE_PATH + \
-                self.TARGET_PACKAGE_PATH):
-            if (platform.system() != "Windows"):
-                os.chmod(r, stat.S_IRWXU | stat.S_IRWXG | stat.S_IRWXO)
-
-    def cpManager(self):
-        if not self.upgrade:
-            self.cpDir(self.CURRENT_SOURCE_BASE_PATH + self.SOURCE_MANAGER_PATH,
-                       self.CURRENT_TARGET_BASE_PATH + self.TARGET_MANAGER_PATH, \
-                               "manager")
-            for r, d, f in os.walk(self.CURRENT_TARGET_BASE_PATH + \
-                    self.TARGET_MANAGER_PATH):
-                if (platform.system() != "Windows"):
-                    os.chmod(r, stat.S_IRWXU | stat.S_IRWXG | stat.S_IRWXO)
-
-    def cpFile(self, src, target):
-        if (not os.path.isfile(src)):
-            print(src + " is not a file")
-            return
-        path = os.path.dirname(target)
-        if (not os.path.isdir(path)):
-            os.makedirs(path)
-        shutil.copy2(src, target)
-
-    def del_rw(self, action, name, exc):
-        if (platform.system() != "Windows"):
-            os.chmod(name, stat.S_IWRITE)
-        os.remove(name)
-
-    def cpDir(self, src, target, name):
-        if (os.path.isdir(src) and not os.path.exists(target)):
-            print("copy " + name + "  dir start")
-            shutil.copytree(src, target)
-            print("copy " + name + "  dir finish")
-        else:
-            if (not os.path.isdir(src)):
-                print("source " + name + " path is not a dir")
-            if (os.path.exists(target)):
-                print ("target " + name + " path is exists")
-                try:
-                    shutil.rmtree(target, onerror=self.del_rw)
-                except Exception, data:
-                    print Exception, ":", data
-
-                print ("target " + name + " dir destroyed")
-                try:
-                    shutil.copytree(src, target)
-                except Exception, data:
-                    print Exception, ":", data
-                print("copy " + name + "  dir finish")
-
-    def clear(self):
-        self.setCurrentPath()
-        try:
-            shutil.rmtree(self.CURRENT_TARGET_BASE_PATH, onerror=self.del_rw)
-        except Exception, data:
-            print Exception, ":", data
-
-    def makeResult(self):
-        mgr_result_folder = os.path.join(self.CURRENT_TARGET_BASE_PATH, \
-                self.tizenV + "/manager/result")
-        shell_result_folder = os.path.join(self.CURRENT_TARGET_BASE_PATH, \
-                self.tizenV + "/shell/result")
-
-        if not os.path.isdir(mgr_result_folder):
-            os.makedirs(mgr_result_folder)
-        else:
-            if not self.upgrade:
-                shutil.rmtree(mgr_result_folder, onerror=self.del_rw)
-                os.makedirs(mgr_result_folder)
-
-        if not os.path.isdir(shell_result_folder):
-            os.makedirs(shell_result_folder)
-        else:
-            if not self.upgrade:
-                shutil.rmtree(shell_result_folder, onerror=self.del_rw)
-                os.makedirs(shell_result_folder)
-        if (platform.system() != "Windows"):
-            os.chmod(shell_result_folder, stat.S_IRWXU | stat.S_IRWXG | stat.S_IRWXO)
-            os.chmod(mgr_result_folder, stat.S_IRWXU | stat.S_IRWXG | stat.S_IRWXO)
-
-    def cp(self):
-        self.setCurrentPath()
-        self.cpDoc()
-        self.cpPackage()
-        self.cpManager()
-        self.cpResource()
-        self.cpScript()
-        self.makeResult()
-
-parser = OptionParser()
-parser.add_option("-i", "--install", dest="install", action="store_true", \
-        default=False, help="copy folders and file into os")
-parser.add_option("-p", "--purge", dest="clear", action="store_true", \
-        default=False, help="clear all files")
-parser.add_option("-t", "--tizen-version", dest="tizenV", \
-        help="set tizen version infomation")
-parser.add_option("-u", "--upgrade", dest="upgrade", action="store_true", \
-        default=False, help="upgrade tct tools")
-
-(options, args) = parser.parse_args()
-
-if options.tizenV is None:
-    print "[ Error : input your tizen version ]"
-    sys.exit(1)
-
-if (options.install):
-    test = CpFile(options.tizenV)
-    test.cp()
-elif (options.clear):
-    test = CpFile(options.tizenV)
-    test.clear()
-elif (options.upgrade):
-    test = CpFile(options.tizenV, options.upgrade)
-    test.cp()
-else:
-    test = CpFile(options.tizenV)
-    test.cp()
diff --git a/release/csharp-tct_5.5_dotnet/tct-setup.py b/release/csharp-tct_5.5_dotnet/tct-setup.py
deleted file mode 100755 (executable)
index f526c87..0000000
+++ /dev/null
@@ -1,175 +0,0 @@
-# -*- coding:utf-8 -*-
-import os
-import sys
-import shutil
-import stat
-import re
-import tarfile
-import zipfile
-import platform
-
-SCRIPT_VERSION = "1.1"
-WEB_TCT_PATTERN = "^web-tct_\d.\d"
-NATIVE_TCT_PATTERN = "^nativetct_\d.\d"
-CSHARP_TCT_PATTERN = "^csharp-tct_\d.\d"
-
-TOOLS_PATTERN = "^tct-tools"
-
-TCT_INSTALL_SCRIPT = "tct-config-host.py"
-TOOLS_INSTALL_SCRIPT = "tct-config-tools.py"
-
-NATIVE_TCT_TYPE = 0
-WEB_TCT_TYPE = 1
-TOOLS_TYPE = 2
-NORMAL_TYPE = 3
-CSHARP_TCT_TYPE = 4
-
-def make_ver_file(tctV, tizenV):
-    ver_path = "/opt/tct/" + tizenV + "/VERSION"
-    #ver_file = open('/opt/tct/tizen_web_3.0/VERSION', 'wa')
-    ver_file = open(ver_path, 'w')
-    ver_file.write(str(tctV))
-    ver_file.close()
-
-def get_tizenV(afile):
-    tizenV = ""
-    ver = afile.split('_')[1]
-    if afile.find("web") > -1:
-        tizenV = "tizen_web_" + ver
-    elif afile.find("Native") > -1:
-        tizenV = "tizen_native_" + ver
-    elif afile.find("csharp") > -1:
-        tizenV = "tizen_csharp_" + ver
-
-    return tizenV
-
-def install_release_file(afile, file_type, upgrade):
-
-    try:
-        tizenV = None
-        for r,d,f in os.walk(afile):
-            if (platform.system() != "Windows"):
-                os.system("chmod -R 777 "+ r)
-
-        inst_cmd = "python " + TCT_INSTALL_SCRIPT
-        if upgrade:
-            inst_cmd += " --upgrade"
-
-        if file_type is WEB_TCT_TYPE or file_type is CSHARP_TCT_TYPE:
-            tizenV = get_tizenV(afile)
-            os.chdir(afile +"/tools")
-            os.system(inst_cmd + " --tizen-version " + tizenV)
-            os.chdir("../../")
-            make_ver_file(str(afile), tizenV)
-
-        if file_type is NATIVE_TCT_TYPE:
-            tizenV = get_tizenV(afile)
-            os.chdir(afile + "/TCT/native-tct/tools")
-            os.system(inst_cmd + " --tizen-version " + tizenV)
-            os.chdir("../../../../")
-            make_ver_file(str(afile), tizenV)
-
-        if file_type is TOOLS_TYPE:
-            os.chdir(afile)
-            os.system("python "+ TOOLS_INSTALL_SCRIPT)
-            os.chdir("../")
-    except Exception as ex:
-        print (str(ex))
-
-
-def unpack_release_file(afile):
-    if tarfile.is_tarfile(afile):
-        tar = tarfile.open(afile)
-        for tarinfo in tar:
-            msg = tarinfo.name + " is " + str(tarinfo.size) + " bytes in size and is "
-            if tarinfo.isreg():
-                msg += "a regular file."
-            elif tarinfo.isdir():
-                msg += "a directory."
-            else:
-                msg += "something else."
-            print msg
-        tar.extractall()
-        tar.close()
-
-    if zipfile.is_zipfile(afile):
-        zipf = zipfile.ZipFile(afile)
-        zipf.extractall()
-        zipf.close()
-
-def find_release_file(afile):
-    web_tct_pa = re.compile(WEB_TCT_PATTERN, re.I)
-    web_tct_match = web_tct_pa.match(afile)
-
-    native_tct_pa = re.compile(NATIVE_TCT_PATTERN, re.I)
-    native_tct_match = native_tct_pa.match(afile)
-
-    csharp_tct_pa = re.compile(CSHARP_TCT_PATTERN, re.I)
-    csharp_tct_match = csharp_tct_pa.match(afile)
-
-    if web_tct_match:
-        return WEB_TCT_TYPE
-
-    if native_tct_match:
-        return NATIVE_TCT_TYPE
-
-    if csharp_tct_match:
-        return CSHARP_TCT_TYPE
-
-    tools_pa = re.compile(TOOLS_PATTERN, re.I)
-    tools_match = tools_pa.match(afile)
-    if tools_match :
-        return TOOLS_TYPE
-
-    return NORMAL_TYPE
-
-def is_archvie_file(afile):
-    file_extension = get_file_extension(afile)
-    if file_extension == ".gz" or file_extension == ".zip":
-        return True
-    else :
-        return False
-
-def get_file_extension(afile):
-    return os.path.splitext(afile)[1]
-
-def remove_readonly(func, path, excinfo):
-    if (platform.system() != "Windows"):
-        os.chmod(path, stat.S_IWRITE)
-    func(path)
-
-def remove_dir_tree(remove_dir):
-    try:
-        shutil.rmtree(remove_dir, ignore_errors=False, onerror=remove_readonly)
-    except Exception as e:  ## if failed, report it back to the user ##
-        print("[Delete Error] %s - %s." % (e.filename,e.strerror))
-
-def install_tct(upgrade=False):
-    current_path = os.getcwd()
-    filelist = os.listdir(current_path)
-    for file in filelist :
-        file_type = find_release_file(file)
-        if file_type is not NORMAL_TYPE :
-            if is_archvie_file(file) is True:
-                unpack_release_file(file)
-
-    filelist = os.listdir(current_path)
-    for file in filelist:
-        file_type = find_release_file(file)
-        if file_type is not NORMAL_TYPE :
-            if is_archvie_file(file) is False:
-                install_release_file(file, file_type, upgrade)
-
-if len(sys.argv) > 1:
-    if(sys.argv[1]) == 'clean':
-        print("clean option is given")
-        remove_dir_tree("/opt/tct")
-        remove_dir_tree("/opt/tools")
-        remove_dir_tree("/opt/testkit")
-    elif(sys.argv[1]) == 'upgrade':
-        print("upgrade option is given")
-        install_tct(True)
-    else:
-        print("error:invalid option is given")
-else:
-    install_tct(False)
diff --git a/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/TCT_CONFIG b/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/TCT_CONFIG
deleted file mode 100755 (executable)
index fee9308..0000000
+++ /dev/null
@@ -1,9 +0,0 @@
-[DEVICE]
-DEVICE_SUITE_TARGET_24=/opt/usr/media
-DEVICE_SUITE_TARGET_30=/opt/usr/home/owner/share
-DEVICE_USER_30=/opt/usr/home/owner
-DEVICE_EXECUTION_MODE_30=owner
-DEVICE_PHYSICAL_STORAGE_30=/home/owner/media
-DEVICE_ADMIN_USER_30=owner
-DEVICE_ADMIN_USER_APPS_ROOT_30=/opt/usr/globalapps
-DEVICE_OTHER_USER_APPS_ROOT_30=/opt/usr/home/owner/apps_rw
diff --git a/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/VERSION b/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/VERSION
deleted file mode 100755 (executable)
index 2e471da..0000000
+++ /dev/null
@@ -1 +0,0 @@
-tct-tools_r4_rc1
diff --git a/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/dev_event/lib/efl_util_screenshot_novice-1.0.0-1.armv7l.rpm b/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/dev_event/lib/efl_util_screenshot_novice-1.0.0-1.armv7l.rpm
deleted file mode 100755 (executable)
index fbf53c8..0000000
Binary files a/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/dev_event/lib/efl_util_screenshot_novice-1.0.0-1.armv7l.rpm and /dev/null differ
diff --git a/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/dev_event/lib/libpython-2.7.1-1.7.armv7l.rpm b/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/dev_event/lib/libpython-2.7.1-1.7.armv7l.rpm
deleted file mode 100755 (executable)
index 4f12725..0000000
Binary files a/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/dev_event/lib/libpython-2.7.1-1.7.armv7l.rpm and /dev/null differ
diff --git a/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/dev_event/lib/python-2.7.1-1.4.armv7l.rpm b/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/dev_event/lib/python-2.7.1-1.4.armv7l.rpm
deleted file mode 100755 (executable)
index 9d205fb..0000000
Binary files a/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/dev_event/lib/python-2.7.1-1.4.armv7l.rpm and /dev/null differ
diff --git a/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/dev_event/lib/python-base-2.7.1-1.7.armv7l.rpm b/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/dev_event/lib/python-base-2.7.1-1.7.armv7l.rpm
deleted file mode 100755 (executable)
index d89618c..0000000
Binary files a/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/dev_event/lib/python-base-2.7.1-1.7.armv7l.rpm and /dev/null differ
diff --git a/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/dev_event/tct-monkey b/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/dev_event/tct-monkey
deleted file mode 100755 (executable)
index a63cecf..0000000
+++ /dev/null
@@ -1,38 +0,0 @@
-#!/usr/bin/python
-
-import sys
-
-from tctmonkey.monkeywrapper import MonkeyWrapper
-from tctmonkey.devicemanager import DeviceManager
-from tctmonkey.monkeyworker import RandomExecutor
-from tctmonkey.monkeyworker import ReplayExecutor
-
-
-def main():
-    wrapper = MonkeyWrapper()
-    wrapper.parse_options(sys.argv)
-
-    dmi = DeviceManager.getInstance()
-
-    mExecutor = []
-    for dev in dmi.getSdbDeviceList():
-        th = None
-        if wrapper.is_py_install():
-            wrapper.python_install(dev.getDeviceId())
-        if wrapper.is_random_mode():
-            th = RandomExecutor(dev.getDeviceId(), wrapper)
-        elif wrapper.is_replay_mode():
-            th = ReplayExecutor(dev.getDeviceId(), wrapper)
-
-        mExecutor.append(th)
-
-    for thread in mExecutor:
-        if thread:
-            thread.start()
-
-    for thread in mExecutor:
-        if thread:
-            thread.join()
-
-if __name__ == "__main__":
-    main()
diff --git a/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/dev_event/tctmonkey/__init__.py b/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/dev_event/tctmonkey/__init__.py
deleted file mode 100755 (executable)
index 8b13789..0000000
+++ /dev/null
@@ -1 +0,0 @@
-
diff --git a/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/dev_event/tctmonkey/constants.py b/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/dev_event/tctmonkey/constants.py
deleted file mode 100755 (executable)
index f861d00..0000000
+++ /dev/null
@@ -1,28 +0,0 @@
-
-import os
-
-class Constants:
-    LIB_DIR = "/opt/tools/dev_event/lib/"
-    AGENT_PATH = "/opt/tools/dev_event/tctmonkey/fmbttizen-agent.py"
-    UINPUT_AGENT_PATH = "/opt/tools/dev_event/tctmonkey/fmbtuinput.py"
-    DUMP_DIR_PATH = "/opt/share/crash/dump/"
-    RESULT_DIR = "/opt/monkey/result/"
-    RECORD_FILE_NAME = "record_file"
-    SDB_LS = "sdb -s %s shell ls -al"
-    SDB_PUSH = "sdb -s %s push"
-    SDB_SHELL = "sdb -s %s shell"
-    SDB_ROOT_ON = "sdb -s %s root on"
-    SDB_DEVICES = "sdb devices"
-    SDB_START_SERVER = "sdb start-server"
-    SDB_KILL_SERVER = "sdb kill-server"
-    SDB_CONNECT = "sdb connect %s"
-    SDB_PULL = "sdb -s %s pull"
-    SDB_CAT_CONFIG = " cat %s"
-    FILE_FOUND_SCRIPT = "[ -f %s ] && echo \"Found\" || echo \"Not Found\""
-
-    @staticmethod
-    def checkFileExists(aPath):
-        if os.path.exists(aPath):
-            return True
-        else:
-            return False
diff --git a/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/dev_event/tctmonkey/devicemanager.py b/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/dev_event/tctmonkey/devicemanager.py
deleted file mode 100755 (executable)
index c1335d3..0000000
+++ /dev/null
@@ -1,76 +0,0 @@
-
-from sdbmanager import SdbManager
-
-class DeviceManager(object):
-    INSTANCE = None
-    devices = []
-
-    def __init__(self):
-        if DeviceManager.INSTANCE is not None:
-            raise Exception ("DeviceManager instance already exists")
-
-    @classmethod
-    def getInstance(cls):
-        if cls.INSTANCE is None:
-            cls.INSTANCE = DeviceManager()
-        if len(cls.INSTANCE.devices) < 1:
-            cls.INSTANCE.loadDeviceList()
-        return cls.INSTANCE
-
-    def _updateConnDevice(self, connDevices):
-        self._resetDevices()
-
-        for dev in connDevices:
-            self.devices.append(dev)
-
-    def _resetDevices(self):
-        listSize = len(self.devices)
-        del self.devices[0:listSize]
-
-    def getDeviceSize(self):
-        return len(self.devices)
-
-    def getSdbDeviceList(self):
-        return self.devices
-
-    def loadDeviceList(self):
-        connDevices = []
-        sdbOutLog = SdbManager.sdbDevices()
-        devicesInfo = sdbOutLog.replace("List of devices attached", "")
-        devList = devicesInfo.split('\n')
-
-        for dev in devList:
-            if len(dev) > 1:
-                devInfoItem = dev.split('\t')
-                devId = devInfoItem[0].rstrip()
-                devType = devInfoItem[1].rstrip()
-                devName = devInfoItem[2].rstrip()
-                if not (devType == "unknown" or devType == "offline" \
-                        or devId == "unknown" or devId == "offline"):
-                    connDevices.append(SdbDevice(devId, devName, devType))
-
-        if len(connDevices) > 0:
-            self._updateConnDevice(connDevices)
-            return True
-        else:
-            self._resetDevices()
-            return False
-
-
-class SdbDevice:
-    def __init__(self, devId, devName, devType):
-        self.devId = devId
-        self.devName = devName
-        self.devType = devType
-
-    def _printDevInfo(self):
-        pass
-
-    def getDeviceId(self):
-        return self.devId
-
-    def getDeviceName(self):
-        return self.devName
-
-    def getDeviceType(self):
-        return self.devType
diff --git a/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/dev_event/tctmonkey/fmbttizen-agent.py b/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/dev_event/tctmonkey/fmbttizen-agent.py
deleted file mode 100755 (executable)
index 1bd1cd6..0000000
+++ /dev/null
@@ -1,1067 +0,0 @@
-# fMBT, free Model Based Testing tool
-# Copyright (c) 2013, Intel Corporation.
-#
-# This program is free software; you can redistribute it and/or modify it
-# under the terms and conditions of the GNU Lesser General Public License,
-# version 2.1, as published by the Free Software Foundation.
-#
-# This program is distributed in the hope it will be useful, but WITHOUT
-# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-# FITNESS FOR A PARTICULAR PURPOSE.  See the GNU Lesser General Public License for
-# more details.
-#
-# You should have received a copy of the GNU Lesser General Public License along with
-# this program; if not, write to the Free Software Foundation, Inc.,
-# 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA.
-
-import base64
-import cPickle
-import ctypes
-import fcntl
-import glob
-import os
-import platform
-import re
-import shlex
-import shutil
-import string
-import struct
-import subprocess
-import sys
-import termios
-import time
-import zlib
-
-import fmbtuinput
-
-fmbtuinput.refreshDeviceInfo()
-
-if "--debug" in sys.argv:
-    g_debug = True
-else:
-    g_debug = False
-
-try:
-    _opt_keyboard = [a.split("=")[1] \
-            for a in sys.argv if a.startswith("--keyboard=")][0]
-except IndexError:
-    _opt_keyboard = None
-
-try:
-    _opt_touch = [a.split("=")[1] \
-            for a in sys.argv if a.startswith("--touch=")][0]
-except IndexError:
-    _opt_touch = None
-
-try:
-    _opt_mouse = [a.split("=")[1] \
-            for a in sys.argv if a.startswith("--mouse=")][0]
-except IndexError:
-    _opt_mouse = None
-
-keyboard_device = None
-touch_device = None
-mouse_device = None
-
-
-def openKeyboardDevice(keyboardSpec=None):
-    keyboard_device = None
-    if keyboardSpec == None:
-        try:
-            keyboard_device = openKeyboardDevice("sysrq")
-        except IndexError:
-            keyboard_device = openKeyboardDevice("virtual")
-    elif keyboardSpec in (None, "virtual"):
-        keyboard_device = fmbtuinput.Keyboard().create()
-    elif keyboardSpec.startswith("file:"):
-        keyboard_device = fmbtuinput.Keyboard().open(keyboardSpec.split(":",1)[1])
-    elif keyboardSpec == "sysrq":
-        keyboard_device = fmbtuinput.Keyboard().open(
-            "/dev/input/" + re.findall(
-                '[ =](event[0-9]+)\s',
-                [i for i in devices.split("\n\n") if "sysrq" in i.lower()][0])[0])
-    elif keyboardSpec == "disabled":
-        keyboard_device = None
-    return keyboard_device
-
-
-def openTouchDevice(touchSpec=None, fallback=None):
-    touch_device = None
-    if touchSpec == None:
-        if fallback != None:
-            return openTouchDevice(fallback)
-        else:
-            pass # will return None
-    elif touchSpec.startswith("virtual"):
-        inputResolution=re.findall("virtual:([0-9]*)x([0-9]*)", touchSpec)
-        if inputResolution:
-            maxX = int(inputResolution[0][0])
-            maxY = int(inputResolution[0][1])
-        else:
-            maxX, maxY = None, None
-        touch_device = fmbtuinput.Touch().create(maxX=maxX, maxY=maxY)
-    elif touchSpec.startswith("file:") or touchSpec.startswith("name:"):
-        touch_device = fmbtuinput.Touch().open(touchSpec.split(":",1)[1])
-    elif touchSpec == "disabled":
-        pass # will return None
-    else:
-        raise ValueError('invalid touch device "%s"' % (touchSpec,))
-    return touch_device
-
-
-def openMouseDevice(mouseSpec=None, fallback=None):
-    mouse_device = None
-    if mouseSpec == None:
-        if fallback != None:
-            return openMouseDevice(fallback)
-        else:
-            pass # will return None
-    elif mouseSpec.startswith("virtual:"):
-        abs_or_rel = mouseSpec.split(":",1)[1]
-        if abs_or_rel == "abs":
-            absoluteMove = True
-        elif abs_or_rel == "rel":
-            absoluteMove = False
-        else:
-            raise ValueError('invalid mouse "%s"' % (mouseSpec,))
-        mouse_device = fmbtuinput.Mouse(absoluteMove=absoluteMove).create()
-    elif mouseSpec.startswith("file:") or mouseSpec.startswith("name:"):
-        mouse_device = fmbtuinput.Mouse().open(mouseSpec.split(":",1)[1])
-    elif mouseSpec == "disabled":
-        pass # will return None
-    else:
-        raise ValueError('invalid mouse device "%s"' % (mouseSpec,))
-    return mouse_device
-
-
-def debug(msg):
-    if g_debug:
-        sys.stdout.write("debug: %s\n" % (msg,))
-        sys.stdout.flush()
-
-
-def error(msg, exitstatus=1):
-    sys.stdout.write("fmbttizen-agent: %s\n" % (msg,))
-    sys.stdout.flush()
-    sys.exit(exitstatus)
-
-
-iAmRoot = (os.getuid() == 0)
-
-try:
-    libc           = ctypes.CDLL("libc.so.6")
-    libX11         = ctypes.CDLL("libX11.so.6")
-    libXtst        = ctypes.CDLL("libXtst.so.6")
-    g_Xavailable = True
-    g_keyb = None # no need for virtual keyboard
-except OSError:
-    g_Xavailable = False
-
-if g_Xavailable:
-    class XImage(ctypes.Structure):
-        _fields_ = [
-            ('width'            , ctypes.c_int),
-            ('height'           , ctypes.c_int),
-            ('xoffset'          , ctypes.c_int),
-            ('format'           , ctypes.c_int),
-            ('data'             , ctypes.c_void_p),
-            ('byte_order'       , ctypes.c_int),
-            ('bitmap_unit'      , ctypes.c_int),
-            ('bitmap_bit_order' , ctypes.c_int),
-            ('bitmap_pad'       , ctypes.c_int),
-            ('depth'            , ctypes.c_int),
-            ('bytes_per_line'   , ctypes.c_int),
-            ('bits_per_pixel'   , ctypes.c_int)]
-
-    libc.write.argtypes           = [ctypes.c_int, ctypes.c_void_p, ctypes.c_size_t]
-    libX11.XAllPlanes.restype     = ctypes.c_ulong
-    libX11.XGetImage.restype      = ctypes.POINTER(XImage)
-    libX11.XRootWindow.restype    = ctypes.c_uint32
-    libX11.XOpenDisplay.restype   = ctypes.c_void_p
-    libX11.XDefaultScreen.restype = ctypes.c_int
-    libX11.XGetKeyboardMapping.restype = ctypes.POINTER(ctypes.c_uint32)
-
-    # X11 constants, see Xlib.h
-
-    X_CurrentTime  = ctypes.c_ulong(0)
-    X_False        = ctypes.c_int(0)
-    X_NULL         = ctypes.c_void_p(0)
-    X_True         = ctypes.c_int(1)
-    X_ZPixmap      = ctypes.c_int(2)
-    NoSymbol       = 0
-
-# InputKeys contains key names known to input devices, see
-# linux/input.h or http://www.usb.org/developers/hidpage. The order is
-# significant, because keyCode = InputKeys.index(keyName).
-InputKeys = [
-    "RESERVED", "ESC","1", "2", "3", "4", "5", "6", "7", "8", "9", "0",
-    "MINUS", "EQUAL", "BACKSPACE", "TAB",
-    "Q", "W", "E", "R", "T", "Y", "U", "I", "O", "P",
-    "LEFTBRACE", "RIGHTBRACE", "ENTER", "LEFTCTRL",
-    "A", "S", "D", "F", "G", "H", "J", "K", "L",
-    "SEMICOLON", "APOSTROPHE", "GRAVE", "LEFTSHIFT", "BACKSLASH",
-    "Z", "X", "C", "V", "B", "N", "M",
-    "COMMA", "DOT", "SLASH", "RIGHTSHIFT", "KPASTERISK", "LEFTALT",
-    "SPACE", "CAPSLOCK",
-    "F1", "F2", "F3", "F4", "F5", "F6", "F7", "F8", "F9", "F10",
-    "NUMLOCK", "SCROLLLOCK",
-    "KP7", "KP8", "KP9", "KPMINUS",
-    "KP4", "KP5", "KP6", "KPPLUS",
-    "KP1", "KP2", "KP3", "KP0", "KPDOT",
-    "undefined0",
-    "ZENKAKUHANKAKU", "102ND", "F11", "F12", "RO",
-    "KATAKANA", "HIRAGANA", "HENKAN", "KATAKANAHIRAGANA", "MUHENKAN",
-    "KPJPCOMMA", "KPENTER", "RIGHTCTRL", "KPSLASH", "SYSRQ", "RIGHTALT",
-    "LINEFEED", "HOME", "UP", "PAGEUP", "LEFT", "RIGHT", "END", "DOWN",
-    "PAGEDOWN", "INSERT", "DELETE", "MACRO",
-    "MUTE", "VOLUMEDOWN", "VOLUMEUP",
-    "POWER",
-    "KPEQUAL", "KPPLUSMINUS", "PAUSE", "SCALE", "KPCOMMA", "HANGEUL",
-    "HANGUEL", "HANJA", "YEN", "LEFTMETA", "RIGHTMETA", "COMPOSE"]
-
-_inputKeyNameToCode={}
-for c, n in enumerate(InputKeys):
-    _inputKeyNameToCode[n] = c
-
-# See struct input_event in /usr/include/linux/input.h
-if platform.architecture()[0] == "32bit":
-    _input_event = 'IIHHi'
-else:
-    _input_event = 'QQHHi'
-
-# Event and keycodes are in input.h, too.
-_EV_KEY = 0x01
-_EV_ABS             = 0x03
-_ABS_X              = 0x00
-_ABS_Y              = 0x01
-_ABS_MT_SLOT        = 0x2f
-_ABS_MT_POSITION_X  = 0x35
-_ABS_MT_POSITION_Y  = 0x36
-_ABS_MT_TRACKING_ID = 0x39
-
-_BTN_MOUSE          = 0x110
-
-# Set input device names (in /proc/bus/input/devices)
-# for pressing hardware keys.
-try:
-    cpuinfo = file("/proc/cpuinfo").read()
-except:
-    cpuinfo = ""
-
-def readDeviceInfo():
-    global devices
-    try:
-        devices = file("/proc/bus/input/devices").read()
-    except:
-        devices = ""
-
-readDeviceInfo()
-kbInputDevFd = None
-
-if iAmRoot:
-    debug("hardware detection uses generic defaults")
-    # Unknown platform, guessing best possible defaults for devices
-    _d = devices.split("\n\n")
-    try:
-        power_devname = re.findall('Name=\"([^"]*)\"', [i for i in _d if "power" in i.lower()][0])[0]
-    except IndexError:
-        power_devname = "gpio-keys"
-
-    touch_device = None
-    try:
-        touch_device_f = "file:/dev/input/" + re.findall('[ =](event[0-9]+)\s',  [i for i in _d if "touch" in i.lower()][0])[0]
-    except IndexError:
-        touch_device_f = None
-    touch_device = openTouchDevice(_opt_touch, touch_device_f)
-
-    mouse_device = None
-    try:
-        mouse_device_f = "file:/dev/input/" + re.findall('[ =](event[0-9]+)\s', [i for i in _d if "Mouse" in i][0])[0]
-    except IndexError:
-        mouse_device_f = None
-    mouse_device = openMouseDevice(_opt_mouse, mouse_device_f)
-
-    keyboard_device = openKeyboardDevice(_opt_keyboard)
-
-    hwKeyDevice = {
-        "POWER": power_devname,
-        "VOLUMEUP": "gpio-keys",
-        "VOLUMEDOWN": "gpio-keys",
-        "HOME": "gpio-keys"
-        }
-
-    if isinstance(mouse_device, fmbtuinput.Mouse):
-        time.sleep(1)
-        mouse_device.move(-4096, -4096)
-        mouse_device.setXY(0, 0)
-
-    del _d
-
-if iAmRoot and g_debug:
-    debug("touch device: %s" % (touch_device,))
-    debug("mouse device: %s" % (mouse_device,))
-    debug("keyb device:  %s" % (keyboard_device,))
-
-if iAmRoot and _opt_keyboard and "keyboard_device" not in globals():
-    # Use forced keyboard with any hardware type
-    keyboard_device = openKeyboardDevice(_opt_keyboard)
-
-if "touch_device" in globals() and touch_device:
-    mtInputDevFd = touch_device._fd
-
-if "keyboard_device" in globals() and keyboard_device:
-    kbInputDevFd = keyboard_device._fd
-
-
-# Read input devices
-deviceToEventFile = {}
-for _l in devices.splitlines():
-    if _l.startswith('N: Name="'): _device = _l.split('"')[1]
-    elif _l.startswith("H: Handlers=") and "event" in _l:
-        try: deviceToEventFile[_device] = "/dev/input/" + re.findall("(event[0-9]+)", _l)[0]
-        except Exception, e: pass
-
-screenWidth = None
-screenHeight = None
-
-# Connect to X server, get root window size for screenshots
-display = None
-if g_Xavailable:
-    def resetXConnection():
-        global display, current_screen, root_window, X_AllPlanes
-        if display != None:
-            libX11.XCloseDisplay(display)
-        display        = libX11.XOpenDisplay(X_NULL)
-        if display == 0 or display == None:
-            error("cannot connect to X server")
-        current_screen = libX11.XDefaultScreen(display)
-        root_window    = libX11.XRootWindow(display, current_screen)
-        X_AllPlanes    = libX11.XAllPlanes()
-    resetXConnection()
-
-    ref            = ctypes.byref
-    __rw           = ctypes.c_uint(0)
-    __x            = ctypes.c_int(0)
-    __y            = ctypes.c_int(0)
-    root_width     = ctypes.c_uint(0)
-    root_height    = ctypes.c_uint(0)
-    __bwidth       = ctypes.c_uint(0)
-    root_depth     = ctypes.c_uint(0)
-
-    libX11.XGetGeometry(display, root_window, ref(__rw), ref(__x), ref(__y),
-                        ref(root_width), ref(root_height), ref(__bwidth),
-                        ref(root_depth))
-
-    cMinKeycode        = ctypes.c_int(0)
-    cMaxKeycode        = ctypes.c_int(0)
-    cKeysymsPerKeycode = ctypes.c_int(0)
-    libX11.XDisplayKeycodes(display, ref(cMinKeycode), ref(cMaxKeycode))
-    keysyms = libX11.XGetKeyboardMapping(display,
-                                         cMinKeycode,
-                                         (cMaxKeycode.value - cMinKeycode.value) + 1,
-                                         ref(cKeysymsPerKeycode))
-    shiftModifier = libX11.XKeysymToKeycode(display, libX11.XStringToKeysym("Shift_R"))
-
-    screenWidth = root_width.value
-    screenHeight = root_height.value
-
-def read_cmd():
-    return sys.stdin.readline().strip()
-
-def _encode(obj):
-    return base64.b64encode(cPickle.dumps(obj))
-
-def _decode(string):
-    return cPickle.loads(base64.b64decode(string))
-
-def write_response(ok, value):
-    if ok: p = "FMBTAGENT OK "
-    else: p = "FMBTAGENT ERROR "
-    if not g_debug:
-        response = "%s%s\n" % (p, _encode(value))
-    else:
-        response = "%s%s\n" % (p, value)
-    sys.stdout.write(response)
-    sys.stdout.flush()
-
-def sendHwTap(x, y, button):
-    try:
-        if touch_device:
-            touch_device.tap(x, y)
-        else:
-            mouse_device.tap(x, y, button)
-        return True, None
-    except Exception, e:
-        return False, str(e)
-
-def sendHwMove(x, y):
-    try:
-        if touch_device:
-            touch_device.move(x, y)
-        else:
-            mouse_device.move(x, y)
-        return True, None
-    except Exception, e:
-        return False, str(e)
-
-def sendRelMove(x, y):
-    try:
-        mouse_device.setXY(0,0)
-        mouse_device.move(x, y)
-        mouse_device.setXY(0,0)
-        return True, None
-    except Exception, e:
-        return False, str(e)
-
-def sendHwFingerDown(x, y, button):
-    try:
-        if touch_device:
-            touch_device.pressFinger(button, x, y)
-        else:
-            mouse_device.move(x, y)
-            mouse_device.press(button)
-        return True, None
-    except Exception, e:
-        return False, str(e)
-
-def sendHwFingerUp(x, y, button):
-    try:
-        if touch_device:
-            touch_device.releaseFinger(button)
-        else:
-            mouse_device.move(x, y)
-            mouse_device.release(button)
-        return True, None
-    except Exception, e:
-        return False, str(e)
-
-def sendHwKey(keyName, delayBeforePress, delayBeforeRelease):
-    keyName = keyName.upper()
-    if keyName.startswith("KEY_"):
-        keyName = keyName.lstrip("KEY_")
-    fd = None
-    closeFd = False
-    try:
-        # Explicit IO device defined for the key?
-        inputDevice = deviceToEventFile[hwKeyDevice[keyName]]
-    except:
-        # Fall back to giving input with keyboard - given that there is one
-        if not kbInputDevFd:
-            return False, 'No input device for key "%s"' % (keyName,)
-        fd = kbInputDevFd
-    try: keyCode = _inputKeyNameToCode[keyName]
-    except KeyError:
-        try: keyCode = fmbtuinput.toKeyCode(keyName)
-        except ValueError: return False, 'No keycode for key "%s"' % (keyName,)
-    try:
-        if not fd:
-            fd = os.open(inputDevice, os.O_WRONLY | os.O_NONBLOCK)
-            closeFd = True
-    except: return False, 'Unable to open input device "%s" for writing' % (inputDevice,)
-    if delayBeforePress > 0: time.sleep(delayBeforePress)
-    if delayBeforePress >= 0:
-        if os.write(fd, struct.pack(_input_event, int(time.time()), 0, _EV_KEY, keyCode, 1)) > 0:
-            os.write(fd, struct.pack(_input_event, 0, 0, 0, 0, 0))
-    if delayBeforeRelease > 0: time.sleep(delayBeforeRelease)
-    if delayBeforeRelease >= 0:
-        if os.write(fd, struct.pack(_input_event, int(time.time()), 0, _EV_KEY, keyCode, 0)) > 0:
-            os.write(fd, struct.pack(_input_event, 0, 0, 0, 0, 0))
-    if closeFd:
-        os.close(fd)
-    return True, None
-
-def specialCharToXString(c):
-    c2s = {'\n': "Return",
-           ' ': "space", '!': "exclam", '"': "quotedbl",
-           '#': "numbersign", '$': "dollar", '%': "percent",
-           '&': "ampersand", "'": "apostrophe",
-           '(': "parenleft", ')': "parenright", '*': "asterisk",
-           '+': "plus", '-': "minus", '.': "period", '/': "slash",
-           ':': "colon", ';': "semicolon", '<': "less", '=': "equal",
-           '>': "greater", '?': "question", '@': "at",
-           '_': "underscore"}
-    return c2s.get(c, c)
-
-def specialCharToUsKeys(c):
-    # character -> ([modifier, [modifier...]] keycode)
-    c2s = {'\n': ("KEY_ENTER",),
-           ' ': ("KEY_SPACE",),
-           '`': ("KEY_GRAVE",),      '~': ("KEY_LEFTSHIFT", "KEY_GRAVE"),
-           '!': ("KEY_LEFTSHIFT", "KEY_1"),
-           '@': ("KEY_LEFTSHIFT", "KEY_2"),
-           '#': ("KEY_LEFTSHIFT", "KEY_3"),
-           '$': ("KEY_LEFTSHIFT", "KEY_4"),
-           '%': ("KEY_LEFTSHIFT", "KEY_5"),
-           '^': ("KEY_LEFTSHIFT", "KEY_6"),
-           '&': ("KEY_LEFTSHIFT", "KEY_7"),
-           '*': ("KEY_LEFTSHIFT", "KEY_8"),
-           '(': ("KEY_LEFTSHIFT", "KEY_9"),
-           ')': ("KEY_LEFTSHIFT", "KEY_0"),
-           '-': ("KEY_MINUS",),      '_': ("KEY_LEFTSHIFT", "KEY_MINUS"),
-           '=': ("KEY_EQUAL",),      '+': ("KEY_LEFTSHIFT", "KEY_EQUAL"),
-           '\t': ("KEY_TAB",),
-           '[': ("KEY_LEFTBRACE",),  '{': ("KEY_LEFTSHIFT", "KEY_LEFTBRACE"),
-           ']': ("KEY_RIGHTBRACE",), '}': ("KEY_LEFTSHIFT", "KEY_RIGHTBRACE"),
-           ';': ("KEY_SEMICOLON",),  ':': ("KEY_LEFTSHIFT", "KEY_SEMICOLON"),
-           "'": ("KEY_APOSTROPHE",), '"': ("KEY_LEFTSHIFT", "KEY_APOSTROPHE"),
-           '\\': ("KEY_BACKSLASH",), '|': ("KEY_LEFTSHIFT", "KEY_BACKSLASH"),
-           ',': ("KEY_COMMA",),      '<': ("KEY_LEFTSHIFT", "KEY_COMMA"),
-           '.': ("KEY_DOT",),        '>': ("KEY_LEFTSHIFT", "KEY_DOT"),
-           '/': ("KEY_SLASH",),      '?': ("KEY_LEFTSHIFT", "KEY_SLASH"),
-    }
-    return c2s.get(c, c)
-
-mtEvents = {} # slot -> (tracking_id, x, y)
-
-def inputEventSend(inputDevFd, eventType, event, param):
-    t = time.time()
-    tsec = int(t)
-    tusec = int(1000000*(t-tsec))
-    os.write(inputDevFd, struct.pack(_input_event,
-        tsec, tusec, eventType, event, param))
-
-def mtEventSend(eventType, event, param):
-    """multitouch device event"""
-    return inputEventSend(mtInputDevFd, eventType, event, param)
-
-def mtGestureStart(x, y):
-    mtGestureStart.trackingId += 1
-    trackingId = mtGestureStart.trackingId
-
-    for freeSlot in xrange(16):
-        if not freeSlot in mtEvents: break
-    else: raise ValueError("No free multitouch event slots available")
-
-    mtEvents[freeSlot] = [trackingId, x, y]
-
-    mtEventSend(_EV_ABS, _ABS_MT_SLOT, freeSlot)
-    mtEventSend(_EV_ABS, _ABS_MT_TRACKING_ID, trackingId)
-    mtEventSend(_EV_ABS, _ABS_MT_POSITION_X, x)
-    mtEventSend(_EV_ABS, _ABS_MT_POSITION_Y, y)
-    mtEventSend(_EV_ABS, _ABS_X, x)
-    mtEventSend(_EV_ABS, _ABS_Y, y)
-    mtEventSend(0, 0, 0) # SYNC
-    return freeSlot
-mtGestureStart.trackingId = 0
-
-def mtGestureMove(slot, x, y):
-    if x == mtEvents[slot][1] and y == mtEvents[slot][2]: return
-    mtEventSend(_EV_ABS, _ABS_MT_SLOT, slot)
-    mtEventSend(_EV_ABS, _ABS_MT_TRACKING_ID, mtEvents[slot][0])
-    if x != mtEvents[slot][1] and 0 <= x <= root_width:
-        mtEventSend(_EV_ABS, _ABS_MT_POSITION_X, x)
-        mtEvents[slot][1] = x
-    if y != mtEvents[slot][2] and 0 <= y <= root_height:
-        mtEventSend(_EV_ABS, _ABS_MT_POSITION_Y, y)
-        mtEvents[slot][2] = y
-    if 0 <= x <= root_width:
-        mtEventSend(_EV_ABS, _ABS_X, x)
-    if 0 <= y <= root_height:
-        mtEventSend(_EV_ABS, _ABS_Y, y)
-    mtEventSend(0, 0, 0)
-
-def mtGestureEnd(slot):
-    mtEventSend(_EV_ABS, _ABS_MT_SLOT, slot)
-    mtEventSend(_EV_ABS, _ABS_MT_TRACKING_ID, -1)
-    mtEventSend(0, 0, 0) # SYNC
-    del mtEvents[slot]
-
-def mtLinearGesture(listOfStartEndPoints, duration, movePoints, sleepBeforeMove=0, sleepAfterMove=0):
-    # listOfStartEndPoints: [ [(finger1startX, finger1startY), (finger1endX, finger1endY)],
-    #                         [(finger2startX, finger2startY), (finger2endX, finger2endY)], ...]
-    startPoints = [startEnd[0] for startEnd in listOfStartEndPoints]
-    xDist = [startEnd[1][0] - startEnd[0][0] for startEnd in listOfStartEndPoints]
-    yDist = [startEnd[1][1] - startEnd[0][1] for startEnd in listOfStartEndPoints]
-    movePointsF = float(movePoints)
-    fingers = []
-    for (x, y) in startPoints:
-        fingers.append(mtGestureStart(x, y))
-
-    if sleepBeforeMove > 0: time.sleep(sleepBeforeMove)
-
-    if movePoints > 0:
-        intermediateSleep = float(duration) / movePoints
-        for i in xrange(1, movePoints + 1):
-            if intermediateSleep > 0:
-                time.sleep(intermediateSleep)
-            for fingerIndex, finger in enumerate(fingers):
-                mtGestureMove(finger,
-                              startPoints[fingerIndex][0] + int(xDist[fingerIndex]*i/movePointsF),
-                              startPoints[fingerIndex][1] + int(yDist[fingerIndex]*i/movePointsF))
-
-    if sleepAfterMove > 0: time.sleep(sleepAfterMove)
-
-    for finger in fingers:
-        mtGestureEnd(finger)
-    return True, None
-
-def typeCharX(origChar):
-    modifiers = []
-    c         = specialCharToXString(origChar)
-    keysym    = libX11.XStringToKeysym(c)
-    if keysym == NoSymbol:
-        return False
-    keycode   = libX11.XKeysymToKeycode(display, keysym)
-
-    first = (keycode - cMinKeycode.value) * cKeysymsPerKeycode.value
-
-    try:
-        if chr(keysyms[first + 1]) == origChar:
-            modifiers.append(shiftModifier)
-    except ValueError: pass
-
-    for m in modifiers:
-        libXtst.XTestFakeKeyEvent(display, m, X_True, X_CurrentTime)
-
-    libXtst.XTestFakeKeyEvent(display, keycode, X_True, X_CurrentTime)
-    libXtst.XTestFakeKeyEvent(display, keycode, X_False, X_CurrentTime)
-
-    for m in modifiers[::-1]:
-        libXtst.XTestFakeKeyEvent(display, m, X_False, X_CurrentTime)
-    return True
-
-def typeCharHw(origChar):
-    for c in origChar:
-        modifiers = []
-        keyCode = None
-        c = specialCharToUsKeys(c)
-        if isinstance(c, tuple):
-            modifiers = c[:-1]
-            keyCode = c[-1]
-        elif c in string.uppercase:
-            modifiers = ["KEY_LEFTSHIFT"]
-            keyCode = "KEY_" + c
-        elif c in string.lowercase or c in string.digits:
-            keyCode = "KEY_" + c.upper()
-        else:
-            # do not know how to type the character
-            pass
-        if keyCode:
-            for m in modifiers:
-                keyboard_device.press(m)
-            keyboard_device.tap(keyCode)
-            for m in modifiers[::-1]:
-                keyboard_device.release(m)
-    return True
-
-if g_Xavailable:
-    typeChar = typeCharX
-else:
-    typeChar = typeCharHw
-
-def typeSequence(s, delayBetweenChars=0):
-    skipped = []
-    for c in s:
-        if not typeChar(c):
-            skipped.append(c)
-        if delayBetweenChars != 0:
-            time.sleep(delayBetweenChars)
-    if skipped: return False, skipped
-    else: return True, skipped
-
-def takeScreenshotOnX():
-    image_p = libX11.XGetImage(display, root_window,
-                               0, 0, root_width, root_height,
-                               X_AllPlanes, X_ZPixmap)
-    image = image_p[0]
-    # FMBTRAWX11 image format header:
-    # FMBTRAWX11 [width] [height] [color depth] [bits per pixel]<linefeed>
-    # Binary data
-    rawfmbt_header = "FMBTRAWX11 %d %d %d %d\n" % (
-                     image.width, image.height, root_depth.value, image.bits_per_pixel)
-    rawfmbt_data = ctypes.string_at(image.data, image.height * image.bytes_per_line)
-    compressed_image = rawfmbt_header + zlib.compress(rawfmbt_data, 3)
-    libX11.XDestroyImage(image_p)
-    return True, compressed_image
-
-def westonTakeScreenshotRoot(retry=2):
-    if westonTakeScreenshotRoot.ssFilenames == None:
-        westonTakeScreenshotRoot.ssFilenames = findWestonScreenshotFilenames()
-    if not westonTakeScreenshotRoot.ssFilenames:
-        return False, "cannot find weston screenshot directory"
-    try:
-        for ssFilename in westonTakeScreenshotRoot.ssFilenames:
-            if os.access(ssFilename, os.R_OK):
-                os.remove(ssFilename)
-        keyboard_device.press("KEY_LEFTMETA")
-        keyboard_device.tap("s")
-        keyboard_device.release("KEY_LEFTMETA")
-        time.sleep(0.5)
-        # find which screenshot file got created?
-        for ssFilename in westonTakeScreenshotRoot.ssFilenames:
-            if os.access(ssFilename, os.R_OK):
-                break
-        else:
-            if retry > 0:
-                return westonTakeScreenshotRoot(retry-1)
-            else:
-                return False, "weston did not create any of files %s" % (
-                    westonTakeScreenshotRoot.ssFilenames,)
-        # wait for the screenshot writer to finish
-        writerPid = fuser(ssFilename)
-        if writerPid != None:
-            time.sleep(0.1)
-            while fuser(ssFilename, [writerPid]) != None:
-                time.sleep(0.1)
-        shutil.move(ssFilename, "/tmp/screenshot.png")
-        os.chmod("/tmp/screenshot.png", 0666)
-    except Exception, e:
-        return False, str(e)
-    return True, None
-westonTakeScreenshotRoot.ssFilenames = None
-
-def takeScreenshotOnWeston():
-    if iAmRoot:
-        rv, status = westonTakeScreenshotRoot()
-    else:
-        rv, status = subAgentCommand("root", "tizen", "ss weston-root")
-    if rv == False:
-        return rv, status
-    return True, file("/tmp/screenshot.png").read()
-
-def fuser(filename, usualSuspects=None):
-    """Returns the pid of a user of given file, or None"""
-    filepath = os.path.realpath(filename)
-    if not os.access(filepath, os.R_OK):
-        raise ValueError('No such file: "%s"' % (filename,))
-    if usualSuspects == None:
-        procFds = glob.glob("/proc/[1-9][0-9][0-9]*/fd/*")
-    else:
-        procFds = []
-        for pid in usualSuspects:
-            procFds.extend(glob.glob("/proc/%s/fd/*" % (pid,)))
-    for symlink in procFds:
-        try:
-            if os.path.realpath(symlink) == filepath:
-                return int(symlink.split('/')[2])
-        except OSError:
-            pass
-
-def findWestonScreenshotFilenames():
-    # find weston cwd
-    dirs = []
-    for exe in glob.glob("/proc/[1-9][0-9][0-9]*/exe"):
-        try:
-            if os.path.realpath(exe) == "/usr/bin/weston":
-                dirs.append(os.path.realpath(os.path.dirname(exe) + "/cwd"))
-        except OSError:
-            pass
-    return [d + "/wayland-screenshot.png" for d in sorted(set(dirs))]
-
-if g_Xavailable:
-    takeScreenshot = takeScreenshotOnX
-else:
-    takeScreenshot = takeScreenshotOnWeston
-
-def shellSOE(command, asyncStatus, asyncOut, asyncError, usePty):
-    if usePty:
-        command = '''python -c "import pty; pty.spawn(%s)" ''' % (repr(shlex.split(command)),),
-    if (asyncStatus, asyncOut, asyncError) != (None, None, None):
-        # prepare for decoupled asynchronous execution
-        if asyncStatus == None: asyncStatus = "/dev/null"
-        if asyncOut == None: asyncOut = "/dev/null"
-        if asyncError == None: asyncError = "/dev/null"
-        try:
-            stdinFile = file("/dev/null", "r")
-            stdoutFile = file(asyncOut, "a+")
-            stderrFile = file(asyncError, "a+", 0)
-            statusFile = file(asyncStatus, "a+")
-        except IOError, e:
-            return False, (None, None, e)
-        try:
-            if os.fork() > 0:
-                # parent returns after successful fork, there no
-                # direct visibility to async child process beyond this
-                # point.
-                stdinFile.close()
-                stdoutFile.close()
-                stderrFile.close()
-                statusFile.close()
-                return True, (0, None, None) # async parent finishes here
-        except OSError, e:
-            return False, (None, None, e)
-        os.setsid()
-    else:
-        stdinFile = subprocess.PIPE
-        stdoutFile = subprocess.PIPE
-        stderrFile = subprocess.PIPE
-    try:
-        p = subprocess.Popen(command, shell=True,
-                             stdin=stdinFile,
-                             stdout=stdoutFile,
-                             stderr=stderrFile,
-                             close_fds=True)
-    except Exception, e:
-        return False, (None, None, e)
-    if asyncStatus == None and asyncOut == None and asyncError == None:
-        # synchronous execution, read stdout and stderr
-        out, err = p.communicate()
-    else:
-        # asynchronous execution, store status to file
-        statusFile.write(str(p.wait()) + "\n")
-        statusFile.close()
-        out, err = None, None
-        sys.exit(0) # async child finishes here
-    return True, (p.returncode, out, err)
-
-def waitOutput(nonblockingFd, acceptedOutputs, timeout, pollInterval=0.1):
-    start = time.time()
-    endTime = start + timeout
-    s = ""
-    try: s += nonblockingFd.read()
-    except IOError: pass
-    foundOutputs = [ao for ao in acceptedOutputs if ao in s]
-    while len(foundOutputs) == 0 and time.time() < endTime:
-        time.sleep(pollInterval)
-        try: s += nonblockingFd.read()
-        except IOError: pass
-        foundOutputs = [ao for ao in acceptedOutputs if ao in s]
-    return foundOutputs, s
-
-_subAgents = {}
-def openSubAgent(username, password):
-    p = subprocess.Popen('''python -c 'import pty; pty.spawn(["su", "-c", "python /tmp/fmbttizen-agent.py --sub-agent", "-", "%s"])' ''' % (username,),
-            shell=True,
-            stdin=subprocess.PIPE,
-            stdout=subprocess.PIPE,
-            stderr=subprocess.PIPE)
-
-    # Read in non-blocking mode to ensure agent starts correctly
-    fl = fcntl.fcntl(p.stdout.fileno(), fcntl.F_GETFL)
-    fcntl.fcntl(p.stdout.fileno(), fcntl.F_SETFL, fl | os.O_NONBLOCK)
-
-    output2 = ""
-    seenPrompts, output1 = waitOutput(p.stdout, ["Password:", "FMBTAGENT"], 5.0)
-    if "Password:" in seenPrompts:
-        p.stdin.write(password + "\r")
-        output1 = ""
-        seenPrompts, output2 = waitOutput(p.stdout, ["FMBTAGENT"], 5.0)
-
-    if not "FMBTAGENT" in seenPrompts:
-        p.terminate()
-        return (None, 'fMBT agent with username "%s" does not answer.' % (username,),
-                output1 + output2)
-
-    # Agent is alive, continue in blocking mode
-    fcntl.fcntl(p.stdout.fileno(), fcntl.F_SETFL, fl)
-
-    return p, "", ""
-
-def subAgentCommand(username, password, cmd):
-    if not username in _subAgents:
-        process, output, error = openSubAgent(username, password)
-        if process == None:
-            return None, (-1, output, error)
-        else:
-            _subAgents[username] = process
-    p = _subAgents[username]
-    p.stdin.write(cmd + "\r")
-    p.stdin.flush()
-    answer = p.stdout.readline().rstrip()
-    if answer.startswith("FMBTAGENT OK "):
-        return True, _decode(answer[len("FMBTAGENT OK "):])
-    else:
-        return False, _decode(answer[len("FMBTAGENT ERROR "):])
-
-def closeSubAgents():
-    for username in _subAgents:
-        subAgentCommand(username, None, "quit")
-
-if __name__ == "__main__":
-    try:
-        origTermAttrs = termios.tcgetattr(sys.stdin.fileno())
-        hasTerminal = True
-    except termios.error:
-        origTermAttrs = None
-        hasTerminal = False
-    if hasTerminal and not "--keep-echo" in sys.argv and not "--debug" in sys.argv:
-        # Disable terminal echo
-        newTermAttrs = origTermAttrs
-        newTermAttrs[3] = origTermAttrs[3] &  ~termios.ECHO
-        termios.tcsetattr(sys.stdin.fileno(), termios.TCSANOW, newTermAttrs)
-
-    if "--no-x" in sys.argv:
-        debug("X disabled")
-        g_Xavailable = False
-
-    platformInfo = {}
-    platformInfo["input devices"] = fmbtuinput._g_deviceNames.keys()
-
-    # Send version number, enter main loop
-    write_response(True, platformInfo)
-    cmd = read_cmd()
-    while cmd:
-        if cmd.startswith("bl "): # set display backlight time
-            if iAmRoot:
-                timeout = int(cmd[3:].strip())
-                try:
-                    file("/opt/var/kdb/db/setting/lcd_backlight_normal","wb").write(struct.pack("ii",0x29,timeout))
-                    write_response(True, None)
-                except Exception, e: write_response(False, e)
-            else:
-                write_response(*subAgentCommand("root", "tizen", cmd))
-        elif cmd.startswith("er "): # event recorder
-            if iAmRoot:
-                cmd, arg = cmd.split(" ", 1)
-                if arg.startswith("start "):
-                    filterOpts = _decode(arg.split()[1])
-                    if touch_device:
-                        filterOpts["touchScreen"] = touch_device
-                    fmbtuinput.startQueueingEvents(filterOpts)
-                    write_response(True, None)
-                elif arg == "stop":
-                    events = fmbtuinput.stopQueueingEvents()
-                    write_response(True, None)
-                elif arg == "fetch":
-                    events = fmbtuinput.fetchQueuedEvents()
-                    write_response(True, events)
-            else:
-                write_response(*subAgentCommand("root", "tizen", cmd))
-        elif cmd.startswith("gd"):   # get display status
-            try:
-                p = subprocess.Popen(['/usr/bin/xset', 'q'], stdout=subprocess.PIPE, stderr=subprocess.PIPE)
-                out, err = p.communicate()
-                if "Monitor is Off" in out: write_response(True, "Off")
-                elif "Monitor is On" in out: write_response(True, "On")
-                else: write_response(False, err)
-            except Exception, e: write_response(False, e)
-        elif cmd.startswith("tm "):   # touch move(x, y)
-            xs, ys = cmd[3:].strip().split()
-            if g_Xavailable:
-                libXtst.XTestFakeMotionEvent(display, current_screen, int(xs), int(ys), X_CurrentTime)
-                libX11.XFlush(display)
-            else:
-                if iAmRoot: rv, msg = sendHwMove(int(xs), int(ys))
-                else: rv, msg = subAgentCommand("root", "tizen", cmd)
-            write_response(True, None)
-        elif cmd.startswith("tr "):   # relative move(x, y)
-            xd, yd = cmd[3:].strip().split()
-            if iAmRoot: rv, msg = sendRelMove(int(xd), int(yd))
-            else: rv, msg = subAgentCommand("root", "tizen", cmd)
-            write_response(True, None)
-        elif cmd.startswith("tt "): # touch tap(x, y, button)
-            x, y, button = [int(i) for i in cmd[3:].strip().split()]
-            if g_Xavailable:
-                libXtst.XTestFakeMotionEvent(display, current_screen, x, y, X_CurrentTime)
-                libXtst.XTestFakeButtonEvent(display, button, X_True, X_CurrentTime)
-                libXtst.XTestFakeButtonEvent(display, button, X_False, X_CurrentTime)
-                libX11.XFlush(display)
-                rv, msg = True, None
-            else:
-                if iAmRoot: rv, msg = sendHwTap(x, y, button-1)
-                else: rv, msg = subAgentCommand("root", "tizen", cmd)
-            write_response(rv, msg)
-        elif cmd.startswith("td "): # touch down(x, y, button)
-            xs, ys, button = cmd[3:].strip().split()
-            button = int(button)
-            if g_Xavailable:
-                libXtst.XTestFakeMotionEvent(display, current_screen, int(xs), int(ys), X_CurrentTime)
-                libXtst.XTestFakeButtonEvent(display, button, X_True, X_CurrentTime)
-                libX11.XFlush(display)
-            else:
-                if iAmRoot: rv, msg = sendHwFingerDown(int(xs), int(ys), button-1)
-                else: rv, msg = subAgentCommand("root", "tizen", cmd)
-            write_response(True, None)
-        elif cmd.startswith("tu "): # touch up(x, y, button)
-            xs, ys, button = cmd[3:].strip().split()
-            button = int(button)
-            if g_Xavailable:
-                libXtst.XTestFakeMotionEvent(display, current_screen, int(xs), int(ys), X_CurrentTime)
-                libXtst.XTestFakeButtonEvent(display, button, X_False, X_CurrentTime)
-                libX11.XFlush(display)
-            else:
-                if iAmRoot: rv, msg = sendHwFingerUp(int(xs), int(ys), button-1)
-                else: rv, msg = subAgentCommand("root", "tizen", cmd)
-            write_response(True, None)
-        elif cmd.startswith("kd "): # hw key down
-            if iAmRoot: rv, msg = sendHwKey(cmd[3:], 0, -1)
-            else: rv, msg = subAgentCommand("root", "tizen", cmd)
-            write_response(rv, msg)
-        elif cmd.startswith("kn"): # list input key names
-            if "hwKeyDevice" in globals():
-                hk = hwKeyDevice.keys()
-            else:
-                hk = []
-            if "keyboard_device" in globals():
-                ik = InputKeys
-            else:
-                ik = []
-            write_response(True, sorted(ik + hk))
-        elif cmd.startswith("kp "): # hw key press
-            if iAmRoot: rv, msg = sendHwKey(cmd[3:], 0, 0)
-            else: rv, msg = subAgentCommand("root", "tizen", cmd)
-            write_response(rv, msg)
-        elif cmd.startswith("ku "): # hw key up
-            if iAmRoot: rv, msg = sendHwKey(cmd[3:], -1, 0)
-            else: rv, msg = subAgentCommand("root", "tizen", cmd)
-            write_response(rv, msg)
-        elif cmd.startswith("kt "): # send x events
-            if g_Xavailable:
-                rv, skippedSymbols = typeSequence(_decode(cmd[3:]))
-                libX11.XFlush(display)
-            elif iAmRoot:
-                rv, skippedSymbols = typeSequence(_decode(cmd[3:]),
-                                                  delayBetweenChars=0.05)
-            else:
-                rv, skippedSymbols = subAgentCommand("root", "tizen", cmd)
-            write_response(rv, skippedSymbols)
-        elif cmd.startswith("ml "): # send multitouch linear gesture
-            if iAmRoot:
-                rv, _ = mtLinearGesture(*_decode(cmd[3:]))
-            else:
-                rv, _ = subAgentCommand("root", "tizen", cmd)
-            write_response(rv, _)
-        elif cmd.startswith("ss"): # save screenshot
-            if "R" in cmd.split() and g_Xavailable:
-                resetXConnection()
-            if "weston-root" in cmd.split(): # do Weston root part only
-                write_response(*westonTakeScreenshotRoot())
-            else:
-                rv, compressedImage = takeScreenshot()
-                write_response(rv, compressedImage)
-        elif cmd.startswith("sd "): # set screen dimensions (width and height)
-            _sw, _sh = cmd[3:].split()
-            screenWidth, screenHeight = int(_sw), int(_sh)
-            if iAmRoot:
-                if touch_device:
-                    touch_device.setScreenSize((screenWidth, screenHeight))
-                    rv, msg = True, None
-                else:
-                    rv, msg = True, "no touch device"
-            else:
-                rv, msg = subAgentCommand("root", "tizen", cmd)
-            write_response(rv, msg)
-        elif cmd.startswith("sa "): # set screenshot rotation angle (degrees)
-            if iAmRoot:
-                if touch_device:
-                    _sa = int(cmd[3:])
-                    # compensate it with opposite rotation
-                    touch_device.setScreenAngle(-_sa)
-                    rv, msg = True, None
-                else:
-                    rv, msg = True, "no touch device"
-            else:
-                rv, msg = subAgentCommand("root", "tizen", cmd)
-            write_response(rv, msg)
-        elif cmd.startswith("es "): # execute shell
-            shellCmd, username, password, asyncStatus, asyncOut, asyncError, usePty = _decode(cmd[3:])
-            if username == "":
-                rv, soe = shellSOE(shellCmd, asyncStatus, asyncOut, asyncError, usePty)
-            else:
-                rv, soe = subAgentCommand(username, password,
-                    "es " + _encode((shellCmd, "", "", asyncStatus, asyncOut, asyncError, usePty)))
-            write_response(rv, soe)
-        elif cmd.startswith("quit"): # quit
-            write_response(rv, True)
-            break
-        else:
-            write_response(False, 'Unknown command: "%s"' % (cmd,))
-        cmd = read_cmd()
-
-    closeSubAgents()
-
-    if g_Xavailable:
-        libX11.XCloseDisplay(display)
-
-    if hasTerminal:
-        termios.tcsetattr(sys.stdin.fileno(), termios.TCSANOW, origTermAttrs)
diff --git a/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/dev_event/tctmonkey/fmbtuinput.py b/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/dev_event/tctmonkey/fmbtuinput.py
deleted file mode 100755 (executable)
index 5f43079..0000000
+++ /dev/null
@@ -1,1260 +0,0 @@
-# fMBT, free Model Based Testing tool
-# Copyright (c) 2013, Intel Corporation.
-#
-# This program is free software; you can redistribute it and/or modify it
-# under the terms and conditions of the GNU Lesser General Public License,
-# version 2.1, as published by the Free Software Foundation.
-#
-# This program is distributed in the hope it will be useful, but WITHOUT
-# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-# FITNESS FOR A PARTICULAR PURPOSE.  See the GNU Lesser General Public
-# License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this program; if not, write to the Free Software
-# Foundation, Inc., 51 Franklin St - Fifth Floor, Boston, MA
-# 02110-1301 USA.
-
-# pylint: disable = C0103, C0111, R0913
-
-"""
-This library offers Python interface for Linux uinput system.
-
-Mouse, Touch and Keyboard classes can be used for
-creating new mouse, touch and keyboard devices and synthesizing user
-inputs through those devices.
-"""
-
-cmdline_usage = """
-Usage: python fmbtuinput.py -p <list-of-input-device-files>
-
-Example: python fmbtuinput.py -p /dev/input/event*
-"""
-
-import array
-import glob
-import os
-import platform
-import re
-import struct
-import thread
-import time
-import Queue
-
-if os.name != "nt":
-    import fcntl
-else:
-    class fcntl:
-        def __getattr__(self, attr):
-            raise NotImplementedError("%s not available on Windows" % (attr,))
-
-# See /usr/include/linux/input.h
-eventTypes = {
-    "EV_SYN":                  0x00,
-    "EV_KEY":                  0x01,
-    "EV_REL":                  0x02,
-    "EV_ABS":                  0x03,
-    "EV_MSC":                  0x04,
-    "EV_SW":                   0x05,
-    "EV_LED":                  0x11,
-    "EV_SND":                  0x12,
-    "EV_REP":                  0x14,
-    "EV_FF":                   0x15,
-    "EV_PWR":                  0x16,
-    "EV_FF_STATUS":            0x17,
-    "EV_MAX":                  0x1f,
-    }
-
-keyCodes = {
-    "KEY_RESERVED":            0,
-    "KEY_ESC":                 1,
-    "KEY_1":                   2,
-    "KEY_2":                   3,
-    "KEY_3":                   4,
-    "KEY_4":                   5,
-    "KEY_5":                   6,
-    "KEY_6":                   7,
-    "KEY_7":                   8,
-    "KEY_8":                   9,
-    "KEY_9":                   10,
-    "KEY_0":                   11,
-    "KEY_MINUS":               12,
-    "KEY_EQUAL":               13,
-    "KEY_BACKSPACE":           14,
-    "KEY_TAB":                 15,
-    "KEY_Q":                   16,
-    "KEY_W":                   17,
-    "KEY_E":                   18,
-    "KEY_R":                   19,
-    "KEY_T":                   20,
-    "KEY_Y":                   21,
-    "KEY_U":                   22,
-    "KEY_I":                   23,
-    "KEY_O":                   24,
-    "KEY_P":                   25,
-    "KEY_LEFTBRACE":           26,
-    "KEY_RIGHTBRACE":          27,
-    "KEY_ENTER":               28,
-    "KEY_LEFTCTRL":            29,
-    "KEY_A":                   30,
-    "KEY_S":                   31,
-    "KEY_D":                   32,
-    "KEY_F":                   33,
-    "KEY_G":                   34,
-    "KEY_H":                   35,
-    "KEY_J":                   36,
-    "KEY_K":                   37,
-    "KEY_L":                   38,
-    "KEY_SEMICOLON":           39,
-    "KEY_APOSTROPHE":          40,
-    "KEY_GRAVE":               41,
-    "KEY_LEFTSHIFT":           42,
-    "KEY_BACKSLASH":           43,
-    "KEY_Z":                   44,
-    "KEY_X":                   45,
-    "KEY_C":                   46,
-    "KEY_V":                   47,
-    "KEY_B":                   48,
-    "KEY_N":                   49,
-    "KEY_M":                   50,
-    "KEY_COMMA":               51,
-    "KEY_DOT":                 52,
-    "KEY_SLASH":               53,
-    "KEY_RIGHTSHIFT":          54,
-    "KEY_KPASTERISK":          55,
-    "KEY_LEFTALT":             56,
-    "KEY_SPACE":               57,
-    "KEY_CAPSLOCK":            58,
-    "KEY_F1":                  59,
-    "KEY_F2":                  60,
-    "KEY_F3":                  61,
-    "KEY_F4":                  62,
-    "KEY_F5":                  63,
-    "KEY_F6":                  64,
-    "KEY_F7":                  65,
-    "KEY_F8":                  66,
-    "KEY_F9":                  67,
-    "KEY_F10":                 68,
-    "KEY_NUMLOCK":             69,
-    "KEY_SCROLLLOCK":          70,
-    "KEY_KP7":                 71,
-    "KEY_KP8":                 72,
-    "KEY_KP9":                 73,
-    "KEY_KPMINUS":             74,
-    "KEY_KP4":                 75,
-    "KEY_KP5":                 76,
-    "KEY_KP6":                 77,
-    "KEY_KPPLUS":              78,
-    "KEY_KP1":                 79,
-    "KEY_KP2":                 80,
-    "KEY_KP3":                 81,
-    "KEY_KP0":                 82,
-    "KEY_KPDOT":               83,
-
-    "KEY_ZENKAKUHANKAKU":      85,
-    "KEY_102ND":               86,
-    "KEY_F11":                 87,
-    "KEY_F12":                 88,
-    "KEY_RO":                  89,
-    "KEY_KATAKANA":            90,
-    "KEY_HIRAGANA":            91,
-    "KEY_HENKAN":              92,
-    "KEY_KATAKANAHIRAGANA":    93,
-    "KEY_MUHENKAN":            94,
-    "KEY_KPJPCOMMA":           95,
-    "KEY_KPENTER":             96,
-    "KEY_RIGHTCTRL":           97,
-    "KEY_KPSLASH":             98,
-    "KEY_SYSRQ":               99,
-    "KEY_RIGHTALT":            100,
-    "KEY_LINEFEED":            101,
-    "KEY_HOME":                102,
-    "KEY_UP":                  103,
-    "KEY_PAGEUP":              104,
-    "KEY_LEFT":                105,
-    "KEY_RIGHT":               106,
-    "KEY_END":                 107,
-    "KEY_DOWN":                108,
-    "KEY_PAGEDOWN":            109,
-    "KEY_INSERT":              110,
-    "KEY_DELETE":              111,
-    "KEY_MACRO":               112,
-    "KEY_MUTE":                113,
-    "KEY_VOLUMEDOWN":          114,
-    "KEY_VOLUMEUP":            115,
-    "KEY_POWER":               116,
-    "KEY_KPEQUAL":             117,
-    "KEY_KPPLUSMINUS":         118,
-    "KEY_PAUSE":               119,
-    "KEY_SCALE":               120,
-
-    "KEY_KPCOMMA":             121,
-    "KEY_HANGEUL":             122,
-    "KEY_HANJA":               123,
-    "KEY_YEN":                 124,
-    "KEY_LEFTMETA":            125,
-    "KEY_RIGHTMETA":           126,
-    "KEY_COMPOSE":             127,
-
-    "KEY_STOP":                128,
-    "KEY_AGAIN":               129,
-    "KEY_PROPS":               130,
-    "KEY_UNDO":                131,
-    "KEY_FRONT":               132,
-    "KEY_COPY":                133,
-    "KEY_OPEN":                134,
-    "KEY_PASTE":               135,
-    "KEY_FIND":                136,
-    "KEY_CUT":                 137,
-    "KEY_HELP":                138,
-    "KEY_MENU":                139,
-    "KEY_CALC":                140,
-    "KEY_SETUP":               141,
-    "KEY_SLEEP":               142,
-    "KEY_WAKEUP":              143,
-    "KEY_FILE":                144,
-    "KEY_SENDFILE":            145,
-    "KEY_DELETEFILE":          146,
-    "KEY_XFER":                147,
-    "KEY_PROG1":               148,
-    "KEY_PROG2":               149,
-    "KEY_WWW":                 150,
-    "KEY_MSDOS":               151,
-    "KEY_COFFEE":              152,
-    "KEY_DIRECTION":           153,
-    "KEY_CYCLEWINDOWS":        154,
-    "KEY_MAIL":                155,
-    "KEY_BOOKMARKS":           156,
-    "KEY_COMPUTER":            157,
-    "KEY_BACK":                158,
-    "KEY_FORWARD":             159,
-    "KEY_CLOSECD":             160,
-    "KEY_EJECTCD":             161,
-    "KEY_EJECTCLOSECD":        162,
-    "KEY_NEXTSONG":            163,
-    "KEY_PLAYPAUSE":           164,
-    "KEY_PREVIOUSSONG":        165,
-    "KEY_STOPCD":              166,
-    "KEY_RECORD":              167,
-    "KEY_REWIND":              168,
-    "KEY_PHONE":               169,
-    "KEY_ISO":                 170,
-    "KEY_CONFIG":              171,
-    "KEY_HOMEPAGE":            172,
-    "KEY_REFRESH":             173,
-    "KEY_EXIT":                174,
-    "KEY_MOVE":                175,
-    "KEY_EDIT":                176,
-    "KEY_SCROLLUP":            177,
-    "KEY_SCROLLDOWN":          178,
-    "KEY_KPLEFTPAREN":         179,
-    "KEY_KPRIGHTPAREN":        180,
-    "KEY_NEW":                 181,
-    "KEY_REDO":                182,
-
-    "KEY_F13":                 183,
-    "KEY_F14":                 184,
-    "KEY_F15":                 185,
-    "KEY_F16":                 186,
-    "KEY_F17":                 187,
-    "KEY_F18":                 188,
-    "KEY_F19":                 189,
-    "KEY_F20":                 190,
-    "KEY_F21":                 191,
-    "KEY_F22":                 192,
-    "KEY_F23":                 193,
-    "KEY_F24":                 194,
-
-    "KEY_PLAYCD":              200,
-    "KEY_PAUSECD":             201,
-    "KEY_PROG3":               202,
-    "KEY_PROG4":               203,
-    "KEY_DASHBOARD":           204,
-    "KEY_SUSPEND":             205,
-    "KEY_CLOSE":               206,
-    "KEY_PLAY":                207,
-    "KEY_FASTFORWARD":         208,
-    "KEY_BASSBOOST":           209,
-    "KEY_PRINT":               210,
-    "KEY_HP":                  211,
-    "KEY_CAMERA":              212,
-    "KEY_SOUND":               213,
-    "KEY_QUESTION":            214,
-    "KEY_EMAIL":               215,
-    "KEY_CHAT":                216,
-    "KEY_SEARCH":              217,
-    "KEY_CONNECT":             218,
-    "KEY_FINANCE":             219,
-    "KEY_SPORT":               220,
-    "KEY_SHOP":                221,
-    "KEY_ALTERASE":            222,
-    "KEY_CANCEL":              223,
-    "KEY_BRIGHTNESSDOWN":      224,
-    "KEY_BRIGHTNESSUP":        225,
-    "KEY_MEDIA":               226,
-
-    "KEY_SWITCHVIDEOMODE":     227,
-
-    "KEY_KBDILLUMTOGGLE":      228,
-    "KEY_KBDILLUMDOWN":        229,
-    "KEY_KBDILLUMUP":          230,
-
-    "KEY_SEND":                231,
-    "KEY_REPLY":               232,
-    "KEY_FORWARDMAIL":         233,
-    "KEY_SAVE":                234,
-    "KEY_DOCUMENTS":           235,
-
-    "KEY_BATTERY":             236,
-
-    "KEY_BLUETOOTH":           237,
-    "KEY_WLAN":                238,
-    "KEY_UWB":                 239,
-
-    "KEY_UNKNOWN":             240,
-
-    "KEY_VIDEO_NEXT":          241,
-    "KEY_VIDEO_PREV":          242,
-    "KEY_BRIGHTNESS_CYCLE":    243,
-    "KEY_BRIGHTNESS_ZERO":     244,
-    "KEY_DISPLAY_OFF":         245,
-
-    "KEY_WIMAX":               246,
-    "KEY_RFKILL":              247,
-
-    "KEY_MICMUTE":             248,
-
-    "BTN_MISC":                0x100,
-    "BTN_0":                   0x100,
-    "BTN_1":                   0x101,
-    "BTN_2":                   0x102,
-    "BTN_3":                   0x103,
-    "BTN_4":                   0x104,
-    "BTN_5":                   0x105,
-    "BTN_6":                   0x106,
-    "BTN_7":                   0x107,
-    "BTN_8":                   0x108,
-    "BTN_9":                   0x109,
-
-    "BTN_MOUSE":               0x110,
-    "BTN_LEFT":                0x110,
-    "BTN_RIGHT":               0x111,
-    "BTN_MIDDLE":              0x112,
-    "BTN_SIDE":                0x113,
-    "BTN_EXTRA":               0x114,
-    "BTN_FORWARD":             0x115,
-    "BTN_BACK":                0x116,
-    "BTN_TASK":                0x117,
-
-    "BTN_JOYSTICK":            0x120,
-    "BTN_TRIGGER":             0x120,
-    "BTN_THUMB":               0x121,
-    "BTN_THUMB2":              0x122,
-    "BTN_TOP":                 0x123,
-    "BTN_TOP2":                0x124,
-    "BTN_PINKIE":              0x125,
-    "BTN_BASE":                0x126,
-    "BTN_BASE2":               0x127,
-    "BTN_BASE3":               0x128,
-    "BTN_BASE4":               0x129,
-    "BTN_BASE5":               0x12a,
-    "BTN_BASE6":               0x12b,
-    "BTN_DEAD":                0x12f,
-
-    "BTN_GAMEPAD":             0x130,
-    "BTN_A":                   0x130,
-    "BTN_B":                   0x131,
-    "BTN_C":                   0x132,
-    "BTN_X":                   0x133,
-    "BTN_Y":                   0x134,
-    "BTN_Z":                   0x135,
-    "BTN_TL":                  0x136,
-    "BTN_TR":                  0x137,
-    "BTN_TL2":                 0x138,
-    "BTN_TR2":                 0x139,
-    "BTN_SELECT":              0x13a,
-    "BTN_START":               0x13b,
-    "BTN_MODE":                0x13c,
-    "BTN_THUMBL":              0x13d,
-    "BTN_THUMBR":              0x13e,
-
-    "BTN_DIGI":                0x140,
-    "BTN_TOOL_PEN":            0x140,
-    "BTN_TOOL_RUBBER":         0x141,
-    "BTN_TOOL_BRUSH":          0x142,
-    "BTN_TOOL_PENCIL":         0x143,
-    "BTN_TOOL_AIRBRUSH":       0x144,
-    "BTN_TOOL_FINGER":         0x145,
-    "BTN_TOOL_MOUSE":          0x146,
-    "BTN_TOOL_LENS":           0x147,
-    "BTN_TOOL_QUINTTAP":       0x148,
-    "BTN_TOUCH":               0x14a,
-    "BTN_STYLUS":              0x14b,
-    "BTN_STYLUS2":             0x14c,
-    "BTN_TOOL_DOUBLETAP":      0x14d,
-    "BTN_TOOL_TRIPLETAP":      0x14e,
-    "BTN_TOOL_QUADTAP":        0x14f,
-
-    "BTN_WHEEL":               0x150,
-    "BTN_GEAR_DOWN":           0x150,
-    "BTN_GEAR_UP":             0x151,
-    }
-
-relCodes = {
-    "REL_X":                   0x00,
-    "REL_Y":                   0x01,
-    "REL_Z":                   0x02,
-    "REL_RX":                  0x03,
-    "REL_RY":                  0x04,
-    "REL_RZ":                  0x05,
-    "REL_HWHEEL":              0x06,
-    "REL_DIAL":                0x07,
-    "REL_WHEEL":               0x08,
-    "REL_MISC":                0x09,
-    "REL_MAX":                 0x0f,
-    }
-
-absCodes = {
-    "ABS_X":                   0x00,
-    "ABS_Y":                   0x01,
-    "ABS_Z":                   0x02,
-    "ABS_RX":                  0x03,
-    "ABS_RY":                  0x04,
-    "ABS_RZ":                  0x05,
-    "ABS_THROTTLE":            0x06,
-    "ABS_RUDDER":              0x07,
-    "ABS_WHEEL":               0x08,
-    "ABS_GAS":                 0x09,
-    "ABS_BRAKE":               0x0a,
-    "ABS_HAT0X":               0x10,
-    "ABS_HAT0Y":               0x11,
-    "ABS_HAT1X":               0x12,
-    "ABS_HAT1Y":               0x13,
-    "ABS_HAT2X":               0x14,
-    "ABS_HAT2Y":               0x15,
-    "ABS_HAT3X":               0x16,
-    "ABS_HAT3Y":               0x17,
-    "ABS_PRESSURE":            0x18,
-    "ABS_DISTANCE":            0x19,
-    "ABS_TILT_X":              0x1a,
-    "ABS_TILT_Y":              0x1b,
-    "ABS_TOOL_WIDTH":          0x1c,
-
-    "ABS_VOLUME":              0x20,
-
-    "ABS_MISC":                0x28,
-
-    "ABS_MT_SLOT":             0x2f,
-    "ABS_MT_TOUCH_MAJOR":      0x30,
-    "ABS_MT_TOUCH_MINOR":      0x31,
-    "ABS_MT_WIDTH_MAJOR":      0x32,
-    "ABS_MT_WIDTH_MINOR":      0x33,
-    "ABS_MT_ORIENTATION":      0x34,
-    "ABS_MT_POSITION_X":       0x35,
-    "ABS_MT_POSITION_Y":       0x36,
-    "ABS_MT_TOOL_TYPE":        0x37,
-    "ABS_MT_BLOB_ID":          0x38,
-    "ABS_MT_TRACKING_ID":      0x39,
-    "ABS_MT_PRESSURE":         0x3a,
-    "ABS_MT_DISTANCE":         0x3b,
-
-    "ABS_MAX":                 0x3f,
-    }
-
-mscCodes = {
-    "MSC_SERIAL":              0x00,
-    "MSC_PULSELED":            0x01,
-    "MSC_GESTURE":             0x02,
-    "MSC_RAW":                 0x03,
-    "MSC_SCAN":                0x04,
-    "MSC_TIMESTAMP":           0x05,
-    "MSC_MAX":                 0x07,
-    "MSC_CNT":                 0x08,
-}
-
-abs_count = absCodes['ABS_MAX'] + 1
-
-event_codetables = {
-    eventTypes["EV_SYN"]: {},
-    eventTypes["EV_KEY"]: keyCodes,
-    eventTypes["EV_REL"]: relCodes,
-    eventTypes["EV_ABS"]: absCodes,
-}
-
-BUS_PCI       = 0x01
-BUS_ISAPNP    = 0x02
-BUS_USB       = 0x03
-BUS_HIL       = 0x04
-BUS_BLUETOOTH = 0x05
-BUS_VIRTUAL   = 0x06
-
-# See struct input_event in /usr/include/linux/input.h
-if platform.architecture()[0] == "32bit":
-    struct_timeval = "II"
-else:
-    struct_timeval = "QQ"
-
-struct_input_event = struct_timeval + 'HHi'
-sizeof_input_event = struct.calcsize(struct_input_event)
-
-struct_input_id    = 'HHHH'
-struct_uinput_user_dev = ('80s' +
-                          struct_input_id +
-                          'i' +
-                          str(abs_count) + 'i' +
-                          str(abs_count) + 'i' +
-                          str(abs_count) + 'i' +
-                          str(abs_count) + 'i')
-sizeof_uinput_user_dev = struct.calcsize(struct_uinput_user_dev)
-
-struct_input_absinfo = 'iiii'
-
-# asm-generic/ioctl.h:
-IOC_NRBITS = 8
-IOC_TYPEBITS = 8
-IOC_SIZEBITS = 14
-IOC_DIRBITS = 2
-
-IOC_NRSHIFT = 0
-IOC_TYPESHIFT = IOC_NRSHIFT + IOC_NRBITS
-IOC_SIZESHIFT = IOC_TYPESHIFT + IOC_TYPEBITS
-IOC_DIRSHIFT = IOC_SIZESHIFT + IOC_SIZEBITS
-
-IOC_NONE = 0
-IOC_WRITE = 1
-IOC_READ = 2
-
-def IOC(dir_, type_, nr, size):
-    return ((dir_ << IOC_DIRSHIFT) |
-            (type_ << IOC_TYPESHIFT) |
-            (nr << IOC_NRSHIFT) |
-            (size << IOC_SIZESHIFT))
-def IO(type_, nr):
-    return IOC(IOC_NONE, type_, nr, 0)
-def IOR(type_, nr, size):
-    return IOC(IOC_READ, type_, nr, struct.calcsize(size))
-def IOW(type_, nr, size):
-    return IOC(IOC_WRITE, type_, nr, struct.calcsize(size))
-def EVIOCGABS(abs):
-    return IOR(ord('E'), 0x40 + (abs), struct_input_absinfo)
-
-UINPUT_IOCTL_BASE = ord('U')
-UI_DEV_CREATE = IO(UINPUT_IOCTL_BASE, 1)
-UI_DEV_DESTROY = IO(UINPUT_IOCTL_BASE, 2)
-
-UI_SET_EVBIT  = IOW(UINPUT_IOCTL_BASE, 100, 'i')
-UI_SET_KEYBIT = IOW(UINPUT_IOCTL_BASE, 101, 'i')
-UI_SET_RELBIT = IOW(UINPUT_IOCTL_BASE, 102, 'i')
-UI_SET_ABSBIT = IOW(UINPUT_IOCTL_BASE, 103, 'i')
-
-# inverse lookup tables for event/key/rel/abs codes
-eventTypesInv = {}
-keyCodesInv = {}
-relCodesInv = {}
-absCodesInv = {}
-for d in ["eventTypes", "keyCodes",
-          "relCodes", "absCodes"]:
-    globals()[d + "Inv"] = dict([(v, k) for k, v in globals()[d].iteritems()])
-
-def toKeyCode(keyCodeOrName):
-    if isinstance(keyCodeOrName, int):
-        return keyCodeOrName
-    elif keyCodeOrName in keyCodes:
-        return keyCodes[keyCodeOrName]
-    elif keyCodeOrName.upper() in keyCodes:
-        return keyCodes[keyCodeOrName.upper(keyCodeOrName)]
-    elif ("KEY_" + keyCodeOrName.upper()) in keyCodes:
-        return keyCodes["KEY_" + keyCodeOrName.upper()]
-    else:
-        raise ValueError('Invalid keycode "%s"' % (keyCodeOrName,))
-
-def toKeyName(keyCode):
-    if keyCode in keyCodesInv:
-        return keyCodesInv[keyCode]
-    else:
-        raise ValueError('Invalid keycode "%s"' % (keyCode,))
-
-def toButtonCode(buttonCodeOrName):
-    if isinstance(buttonCodeOrName, str):
-        buttonCode = toKeyCode(buttonCodeOrName)
-    elif buttonCodeOrName < 0xf:
-        buttonCode = keyCodes["BTN_MOUSE"] + buttonCodeOrName
-    else:
-        buttonCode = buttonCodeOrName
-    return buttonCode
-
-def refreshDeviceInfo():
-    global _g_devices
-    global _g_deviceNames
-    global _g_filenames
-    _g_devices = file("/proc/bus/input/devices").read().split("\n\n")
-    _g_deviceNames = {}
-    _g_filenames = {}
-    for d in _g_devices:
-        if d.strip() == "":
-            continue
-        _name = [line.split('"')[1] for line in d.split('\n')
-                 if line.startswith('N: ')][0]
-        _g_deviceNames[_name] = ("/dev/input/" + 
-                                 re.findall('[ =](event[0-9]+)\s', d)[0])
-        _g_filenames[_g_deviceNames[_name]] = _name
-
-def toEventFilename(deviceName):
-    return _g_deviceNames[deviceName]
-
-def toEventDeviceName(filename):
-    return _g_filenames[filename]
-
-class InputDevice(object):
-    def __init__(self):
-        if not "_g_devices" in globals():
-            refreshDeviceInfo()
-        self._fd = -1
-        self._filename = None
-        self._uidev = None
-        self._created = False
-        self._opened = False
-        self._name = None
-
-    def __del__(self):
-        if self._created:
-            self.destroy()
-
-    def __str__(self):
-        return "%s(name=%s, filename=%s, created=%s, opened=%s, fd=%s)" % (
-            self.__class__.__name__,
-            repr(self._name),
-            repr(self._filename),
-            repr(self._created),
-            repr(self._opened),
-            repr(self._fd))
-
-    def startCreating(self, name, vendor, product, version,
-                      absmin=None, absmax=None):
-        if self._fd > 0:
-            raise InputDeviceError("InputDevice is already open")
-        self._fd = os.open("/dev/uinput", os.O_WRONLY | os.O_NONBLOCK)
-        if absmin == None:
-            absmin = [0 for _ in xrange(abs_count)]
-        if absmax == None:
-            absmax = [0 for _ in xrange(abs_count)]
-        absfuzz = [0 for _ in xrange(abs_count)]
-        absflat = [0 for _ in xrange(abs_count)]
-        self._name = name
-        self._uidev = struct.pack(struct_uinput_user_dev,
-                                  name, # name
-                                  BUS_USB, # id.bus_type
-                                  vendor, # id.vendor
-                                  product, # id.product
-                                  version, # id.version
-                                  0, # ff_effects_max
-                                  # TODO: why absmin + absmax gives
-                                  # error for touch?
-                                  *(absmax + absmin + absfuzz + absflat)
-                              )
-
-    def finishCreating(self):
-        if self._fd < 1:
-            raise InputDeviceError("startCreating() not called")
-        bytes_written = os.write(self._fd, self._uidev)
-        if bytes_written != sizeof_uinput_user_dev:
-            raise InputDeviceError(
-                "Writing to /dev/uinput failed, wrote %s/%s bytes"
-                % (bytes_written, sizeof_uinput_user_dev))
-        rv = fcntl.ioctl(self._fd, UI_DEV_CREATE)
-        if rv != 0:
-            raise InputDeviceError(
-                "Creating device failed, ioctl UI_DEV_CREATE returned %s"
-                % (rv,))
-        self._created = True
-        return True
-
-    def destroy(self):
-        if self._created:
-            fcntl.ioctl(self._fd, UI_DEV_DESTROY)
-            self._created = False
-        self.close()
-
-    def open(self, filename):
-        if self._fd > 0:
-            raise InputDeviceError("InputDevice is already open")
-        if not filename.startswith("/dev/input"):
-            filename = toEventFilename(filename)
-        self._fd = os.open(filename, os.O_WRONLY | os.O_NONBLOCK)
-        self._filename = filename
-        self._created = False
-        self._name = toEventDeviceName(self._filename)
-        return self
-
-    def close(self):
-        if self._fd > 0:
-            os.close(self._fd)
-            self._fd = -1
-
-    def filename(self):
-        return self._filename
-
-    def addCap(self, capBit, capCodeOrName, capCode2Name):
-        if self._fd < 1:
-            raise InputDeviceError("startCreating() not called")
-        if self._created or self._opened:
-            raise InputDeviceError("Cannot add capabilities after creation")
-        if isinstance(capCodeOrName, int):
-            capCode = capCodeOrName
-        elif capCodeOrName in capCode2Name:
-            capCode = capCode2Name[capCodeOrName]
-        else:
-            raise InputDeviceError('Unknown name "%s"' % (capCodeOrName,))
-        return fcntl.ioctl(self._fd, capBit, capCode)
-
-    def addEvent(self, eventCodeOrName):
-        return self.addCap(UI_SET_EVBIT, eventCodeOrName, eventTypes)
-
-    def addKey(self, keyCodeOrName):
-        return self.addCap(UI_SET_KEYBIT, keyCodeOrName, keyCodes)
-
-    def addRel(self, relCodeOrName):
-        return self.addCap(UI_SET_RELBIT, relCodeOrName, relCodes)
-
-    def addAbs(self, absCodeOrName):
-        return self.addCap(UI_SET_ABSBIT, absCodeOrName, absCodes)
-
-    def send(self, type_, code, value):
-        if self._fd < 1:
-            raise InputDeviceError("InputDevice is not open")
-        if isinstance(type_, str):
-            typeCode = eventTypes[type_]
-        else:
-            typeCode = type_
-        if isinstance(code, str):
-            codeCode = event_codetables[typeCode][code]
-        else:
-            codeCode = code
-        return sendInputEvent(self._fd, typeCode, codeCode, value)
-
-    def sync(self):
-        if self._fd < 1:
-            raise InputDeviceError("InputDevice is not open")
-        return sendInputSync(self._fd)
-
-class InputDeviceError(Exception):
-    pass
-
-class Mouse(InputDevice):
-    def __init__(self, absoluteMove=False):
-        """
-        Parameters:
-
-          absoluteMove (boolean, optional)
-                  force move(x,y) to send absolute coordinates instead
-                  of standard relative movement. This helps avoiding
-                  mouse pointer drift in some occasions. The default
-                  is False.
-        """
-        InputDevice.__init__(self)
-        self._x = 0
-        self._y = 0
-        self._sendAbs = absoluteMove
-
-    def create(self, name="Virtual fMBT Mouse",
-               vendor=0xf4b7, product=0x4053, version=1):
-
-        self.startCreating(name, vendor, product, version)
-        self.addEvent("EV_KEY")
-        self.addEvent("EV_REL")
-        if self._sendAbs:
-            self.addEvent("EV_ABS")
-        self.addEvent("EV_SYN")
-        self.addRel("REL_X")
-        self.addRel("REL_Y")
-        self.addRel("REL_HWHEEL")
-        self.addRel("REL_WHEEL")
-        self.addKey("BTN_LEFT")
-        self.addKey("BTN_RIGHT")
-        self.addKey("BTN_MIDDLE")
-        self.addKey("BTN_SIDE")
-        self.addKey("BTN_EXTRA")
-        self.addKey("BTN_FORWARD")
-        self.addKey("BTN_BACK")
-        self.addKey("BTN_TASK")
-        if self._sendAbs:
-            self.addAbs("ABS_X")
-            self.addAbs("ABS_Y")
-        self.finishCreating()
-        return self
-
-    def move(self, x, y):
-        """
-        Move mouse cursor to coordinates x, y.
-        """
-        if self._sendAbs:
-            self.send("EV_ABS", "ABS_X", x)
-            self.send("EV_ABS", "ABS_Y", y)
-        else:
-            deltaX = x - self._x
-            deltaY = y - self._y
-            self.send("EV_REL", "REL_X", deltaX)
-            self.send("EV_REL", "REL_Y", deltaY)
-        self.sync()
-        self.setXY(x, y)
-
-    def moveRel(self, deltaX, deltaY):
-        self.send("EV_REL", "REL_X", deltaX)
-        self.send("EV_REL", "REL_Y", deltaY)
-        self.sync()
-        self.setXY(self._x + deltaX, self._y + deltaY)
-
-    def press(self, button):
-        buttonCode = toButtonCode(button)
-        self.send("EV_KEY", buttonCode, 1)
-        self.sync()
-
-    def release(self, button):
-        buttonCode = toButtonCode(button)
-        self.send("EV_KEY", buttonCode, 0)
-        self.sync()
-
-    def setXY(self, x, y):
-        """
-        Resets relative mouse position to (x, y), does not synthesize
-        event. Example: disable possible mouse pointer drift:
-
-        mouse.moveRel(-4096, -4096) # move to the top-left corner
-        mouse.setXY(0, 0) # set current pointer coordinates to 0, 0
-
-        After this, mouse.move(x, y) will synthesize relative mouse
-        move event which will drive cursor to coordinates x, y.
-        """
-        self._x = x
-        self._y = y
-
-    def xy(self):
-        return (self._x, self._y)
-
-    def tap(self, x, y, button):
-        self.move(x, y)
-        self.press(button)
-        self.release(button)
-
-class Touch(InputDevice):
-    """
-    Simulates touchpanel and touchpad
-    """
-    def __init__(self, maxX = None, maxY = None,
-                 screenWidth = None, screenHeight = None, screenAngle = None):
-        InputDevice.__init__(self)
-        self._maxX = maxX
-        self._maxY = maxY
-        self._screenW = screenWidth
-        self._screenH = screenHeight
-        self._screenA = screenAngle
-        self._maxPressure = None
-        self._multiTouch = True
-        self._mtTrackingId = 0
-        self._mtTracking = {}
-        self._hoover = (0, 0)
-
-    def create(self, name="Virtual fMBT Touch",
-               vendor=0xf4b7, product=0x70c5, version=1,
-               maxX=0xffff, maxY=0xffff, maxPressure=None,
-               multiTouch = True):
-        if maxX != None:
-            self._maxX = maxX
-        else:
-            self._maxX = 0xffff
-        if maxY != None:
-            self._maxY = maxY
-        else:
-            self._maxY = 0xffff
-        absmin = [0 for _ in xrange(abs_count)]
-        absmax = [0 for _ in xrange(abs_count)]
-        absmax[absCodes["ABS_X"]] = self._maxX
-        absmax[absCodes["ABS_Y"]] = self._maxY
-        if maxPressure != None:
-            self._maxPressure = maxPressure
-            absmax[absCodes["ABS_PRESSURE"]] = self._maxPressure
-        absmax[absCodes["ABS_MT_SLOT"]] = 16
-        absmax[absCodes["ABS_MT_TRACKING_ID"]] = 0x0fffffff
-        absmax[absCodes["ABS_MT_POSITION_X"]] = self._maxX
-        absmax[absCodes["ABS_MT_POSITION_Y"]] = self._maxY
-        self._multiTouch = multiTouch
-
-        self.startCreating(name, vendor, product, version,
-                           absmin=absmin, absmax=absmax)
-        self.addEvent("EV_KEY")
-        self.addEvent("EV_ABS")
-        self.addEvent("EV_SYN")
-        self.addKey("BTN_TOUCH")
-        self.addAbs("ABS_X")
-        self.addAbs("ABS_Y")
-        if self._maxPressure != None:
-            self.addAbs("ABS_PRESSURE")
-        if self._multiTouch:
-            self.addAbs("ABS_MT_SLOT")
-            self.addAbs("ABS_MT_TRACKING_ID")
-            self.addAbs("ABS_MT_POSITION_X")
-            self.addAbs("ABS_MT_POSITION_Y")
-        self.finishCreating()
-        return self
-
-    def open(self, filename):
-        InputDevice.open(self, filename)
-        # detect touch device capabilities and max values
-        # nfo is struct input_absinfo
-        nfo = array.array('i', range(6))
-        fcntl.ioctl(self._fd, EVIOCGABS(absCodes["ABS_X"]), nfo, 1)
-        self._maxX = nfo[2]
-        fcntl.ioctl(self._fd, EVIOCGABS(absCodes["ABS_Y"]), nfo, 1)
-        self._maxY = nfo[2]
-        return self
-
-    def setScreenSize(self, (width, height)):
-        self._screenW, self._screenH = (width, height)
-
-    def setScreenAngle(self, angle):
-        self._screenA = angle
-
-    def _angleXY(self, x, y, angle=None):
-        """return x, y in screen without rotation"""
-        if angle == None:
-            angle = self._screenA
-        sw, sh = self._screenW, self._screenH
-        if angle:
-            while angle < 0:
-                angle += 360
-            while angle > 360:
-                angle -= 360
-            if angle == 90:
-                ax = self._screenH - y
-                ay = x
-                sw, sh = self._screenH, self._screenW
-            elif angle == 180:
-                ax = self._screenH - x
-                ay = self._screenW - y
-            elif angle == 270:
-                ax = y
-                ay = self._screenW - x
-                sw, sh = self._screenH, self._screenW
-            else:
-                raise ValueError('Illegal screen rotation angle %s' %
-                                 (self._screenA,))
-        else:
-            ax, ay = x, y
-        return (sw, sh, ax, ay)
-
-    def _tXY(self, x, y):
-        """convert x, y to touch screen coordinates"""
-        if self._screenW and self._maxX and self._screenH and self._maxY:
-            w, h, x, y = self._angleXY(x, y)
-            x = int((self._maxX * x) / w)
-            y = int((self._maxY * y) / h)
-            return (x, y)
-        else:
-            return (x, y)
-
-    def absToScreenXY(self, absX, absY):
-        if self._screenW and self._maxX and self._screenH and self._maxY:
-            x = int(self._screenW * absX / self._maxX)
-            y = int(self._screenH * absY / self._maxY)
-            if self._screenA:
-                _, _, x, y = self._angleXY(x, y, -self._screenA)
-            return (x, y)
-        else:
-            return (absX, absY)
-
-    def _startTracking(self, finger, x, y):
-        self._mtTrackingId += 1
-        usedSlots = set([self._mtTracking[fngr][0]
-                         for fngr in self._mtTracking])
-        for freeSlot in xrange(16):
-            if not freeSlot in usedSlots:
-                break
-        else:
-            raise ValueError("No free slots for multitouch")
-        self._mtTracking[finger] = [freeSlot, self._mtTrackingId, x, y]
-        self._sendSlot(finger)
-        self.send("EV_ABS", "ABS_MT_TRACKING_ID", self._mtTrackingId)
-        tx, ty = self._tXY(x, y)
-        self.send("EV_ABS", "ABS_MT_POSITION_X", tx)
-        self.send("EV_ABS", "ABS_MT_POSITION_Y", ty)
-        return self._mtTrackingId
-
-    def _stopTracking(self, finger):
-        self._sendSlot(finger)
-        self.send("EV_ABS", "ABS_MT_TRACKING_ID", -1)
-        del self._mtTracking[finger]
-
-    def _sendSlot(self, finger):
-        slot = self._mtTracking[finger][0]
-        self.send("EV_ABS", "ABS_MT_SLOT", slot)
-
-    def tap(self, x, y, pressure=None):
-        self.pressFinger(-1, x, y, pressure)
-        self.releaseFinger(-1)
-
-    # Compatibility API to allow using a Touch almost like a Mouse
-    def move(self, x, y):
-        if len(self._mtTracking.keys()) == 0:
-            self._hoover = (x, y)
-        else:
-            finger = sorted(self._mtTracking.keys())[0]
-            return self.moveFinger(finger, x, y)
-
-    def press(self, finger):
-        return self.pressFinger(finger, *self._hoover)
-
-    def release(self, finger):
-        return self.releaseFinger(finger)
-    # end of compatibility API
-
-    # Multi-touch API
-    def pressFinger(self, finger, x, y, pressure=None):
-        """Add a finger to current multitouch gesture. If multitouch gesture
-        is not started, it starts automatically.
-        """
-        if self._multiTouch and not finger in self._mtTracking:
-            self._startTracking(finger, x, y)
-        if pressure != None and self._maxPressure != None:
-            self.send("EV_ABS", "ABS_PRESSURE", pressure)
-        self.send("EV_KEY", "BTN_TOUCH", 1)
-        tx, ty = self._tXY(x, y)
-        self.send("EV_ABS", "ABS_X", tx)
-        self.send("EV_ABS", "ABS_Y", ty)
-        self.sync()
-
-    def releaseFinger(self, finger):
-        """Remove a finger from current multitouch gesture. When last finger
-        is raised from the screen, multitouch gesture ends."""
-        if self._multiTouch:
-            self._stopTracking(finger)
-        self.send("EV_KEY", "BTN_TOUCH", 0)
-        for fngr in self._mtTracking:
-            # still some finger pressed, non-multitouch reader gets
-            # coordinates from one of those
-            tx, ty = self._tXY(self._mtTracking[fngr][2],
-                               self._mtTracking[fngr][3])
-            self.send("EV_ABS", "ABS_X", tx)
-            self.send("EV_ABS", "ABS_Y", ty)
-            break # only one coordinates will be sent.
-        self.sync()
-
-    def moveFinger(self, finger, x, y):
-        """Move a finger in current multitouch gesture"""
-        self._sendSlot(finger)
-        tx, ty = self._tXY(x, y)
-        if self._multiTouch:
-            self.send("EV_ABS", "ABS_MT_POSITION_X", tx)
-            self.send("EV_ABS", "ABS_MT_POSITION_Y", ty)
-        self.send("EV_ABS", "ABS_X", tx)
-        self.send("EV_ABS", "ABS_Y", ty)
-        self._mtTracking[finger][2] = x # last X
-        self._mtTracking[finger][3] = y # last Y
-        self.sync()
-
-class Keyboard(InputDevice):
-    def __init__(self):
-        InputDevice.__init__(self)
-
-    def create(self, name="Virtual fMBT Keyboard",
-               vendor=0xf4b7, product=0x4ebd, version=1):
-        self.startCreating(name, vendor, product, version)
-        self.addEvent("EV_KEY")
-        self.addEvent("EV_SYN")
-        for keyName in keyCodes:
-            if keyName.startswith("KEY_"):
-                self.addKey(keyCodes[keyName])
-        self.finishCreating()
-        return self
-
-    def press(self, keyCodeOrName):
-        # TODO: there should be different MSC_SCAN matrix location for each key
-        self.send("EV_MSC", mscCodes["MSC_SCAN"], 458793)
-        self.send("EV_KEY", toKeyCode(keyCodeOrName), 1)
-        self.sync()
-
-    def release(self, keyCodeOrName):
-        # TODO: there should be different MSC_SCAN matrix location for each key
-        self.send("EV_MSC", mscCodes["MSC_SCAN"], 458793)
-        self.send("EV_KEY", toKeyCode(keyCodeOrName), 0)
-        self.sync()
-
-    def tap(self, keyCodeOrName):
-        keyCode = toKeyCode(keyCodeOrName)
-        self.press(keyCode)
-        self.release(keyCode)
-
-def sendInputSync(devFd):
-    return sendInputEvent(devFd, 0, 0, 0)
-
-def sendInputEvent(devFd, type_, code, value):
-    t = time.time()
-    t_sec = int(t)
-    t_usec = int(1000000*(t-t_sec))
-    rv = os.write(devFd,
-                  struct.pack(struct_input_event,
-                              t_sec, t_usec,
-                              type_,
-                              code,
-                              value))
-    return rv == sizeof_input_event
-
-def eventToString(inputEvent):
-    tim, tus, typ, cod, val = struct.unpack(struct_input_event, inputEvent)
-    styp = eventTypesInv.get(typ, "?")
-    if styp == "EV_KEY":
-        scod = keyCodesInv.get(cod, "?")
-    elif styp == "EV_REL":
-        scod = relCodesInv.get(cod, "?")
-    elif styp == "EV_ABS":
-        scod = absCodesInv.get(cod, "?")
-    else:
-        scod = "N/A"
-    if typ == 0:
-        return styp
-    else:
-        return "%8s.%s type: %4s (%5s), code: %5s (%15s) value: %8s" % \
-            (tim, str(tus).zfill(6), typ, styp, cod, scod, val)
-
-def queueEventsFromFile(filename, queue, lock, filterOpts):
-    if isinstance(filterOpts, dict) and "type" in filterOpts:
-        allowedTypes = set()
-        for t in filterOpts["type"]:
-            if isinstance(t, str):
-                allowedTypes.add(eventTypes[t])
-            else:
-                allowedTypes.add(t)
-    else:
-        allowedTypes = set(eventTypes.values())
-    if ("touchScreen" in filterOpts and
-        filename == filterOpts["touchScreen"].filename()):
-        touchScreen = filterOpts["touchScreen"]
-        absXCodes = set([absCodes["ABS_X"], absCodes["ABS_MT_POSITION_X"]])
-        absYCodes = set([absCodes["ABS_Y"], absCodes["ABS_MT_POSITION_Y"]])
-        absType = eventTypes["EV_ABS"]
-    else:
-        touchScreen = None
-    fd = os.open(filename, os.O_RDONLY)
-    try:
-        while 1:
-            eventData = os.read(fd, sizeof_input_event)
-            if not lock.locked():
-                return
-            if not eventData:
-                break
-            (ts, tus, typ, cod, val) = struct.unpack(struct_input_event, eventData)
-            if touchScreen and typ == absType:
-                if cod in absXCodes:
-                    val, _ = touchScreen.absToScreenXY(val, 0)
-                elif cod in absYCodes:
-                    _, val = touchScreen.absToScreenXY(0, val)
-            if typ in allowedTypes:
-                queue.put((ts, tus, typ, cod, val))
-    finally:
-        os.close(fd)
-
-# _g_recQL dictionary contains events being actively recorded
-# - key: filename, like "/dev/input/event0"
-# - value: (eventQueue, lock)
-# A thread is filling eventQueue with events from filename.
-# Once the lock is released, the thread will quit without writing
-# anything to the eventQueue anymore.
-_g_recQL = {}
-_g_unfetchedEvents = []
-def queueEventsFromFiles(listOfFilenames, filterOpts):
-    global _g_recQL
-    for filename in listOfFilenames:
-        q = Queue.Queue()
-        l = thread.allocate_lock()
-        l.acquire()
-        if filename in _g_recQL:
-            # previous reader thread should quit
-            _g_recQL[filename][1].release()
-        thread.start_new_thread(
-            queueEventsFromFile, (filename, q, l, filterOpts))
-        _g_recQL[filename] = (q, l)
-
-def startQueueingEvents(filterOpts):
-    refreshDeviceInfo()
-    if len(_g_recQL) > 0:
-        # already queueing, restart
-        stopQueueingEvents()
-    if "device" in filterOpts:
-        deviceFiles = []
-        for n in filterOpts["device"]:
-            if n in _g_deviceNames:
-                deviceFiles.append(_g_deviceNames[n])
-            elif os.access(n, os.R_OK):
-                deviceFiles.append(n)
-        del filterOpts["device"]
-    else:
-        deviceFiles = glob.glob("/dev/input/event[0-9]*")
-    queueEventsFromFiles(deviceFiles, filterOpts)
-
-def stopQueueingEvents():
-    global _g_recQL
-    global _g_unfetchedEvents
-    for filename in _g_recQL:
-        _g_recQL[filename][1].release()
-    _g_unfetchedEvents = fetchQueuedEvents()
-    _g_recQL = {}
-
-def fetchQueuedEvents():
-    global _g_unfetchedEvents
-    if len(_g_recQL) == 0: # no active recording
-        rv = _g_unfetchedEvents
-        _g_unfetchedEvents = []
-        return rv
-    else: # events are being recorded
-        events = []
-        for filename in _g_recQL:
-            events.extend(fetchQueuedEventsFromFile(filename))
-        return events
-
-def fetchQueuedEventsFromFile(filename):
-    events = []
-    q = _g_recQL[filename][0]
-    deviceName = toEventDeviceName(filename)
-    while 1:
-        try:
-            ts, tus, typ, cod, val = q.get_nowait()
-            events.append((deviceName, ts + tus/1000000.0, typ, cod, val))
-        except Queue.Empty:
-            break
-    return events
-
-def printEventsFromFile(filename):
-    fd = os.open(filename, os.O_RDONLY)
-
-    sdev = filename.split("/")[-1]
-
-    try:
-        while 1:
-            inputEvent = os.read(fd, sizeof_input_event)
-            if not inputEvent:
-                break
-            print sdev, eventToString(inputEvent)
-    finally:
-        os.close(fd)
-
-if __name__ == "__main__":
-    import getopt
-    import sys
-
-    opt_print_devices = []
-
-    opts, remainder = getopt.getopt(
-        sys.argv[1:], 'hp',
-        ['help', 'print'])
-    for opt, arg in opts:
-        if opt in ['-h', '--help']:
-            print cmdline_usage
-            sys.exit(0)
-        elif opt in ['-p', '--print']:
-            if not remainder:
-                print cmdline_usage
-            opt_print_devices = remainder
-
-    if opt_print_devices:
-        for deviceFilename in opt_print_devices:
-            thread.start_new_thread(printEventsFromFile, (deviceFilename,))
-        raw_input("Press ENTER to stop printing...\n")
diff --git a/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/dev_event/tctmonkey/monkey_gti.py b/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/dev_event/tctmonkey/monkey_gti.py
deleted file mode 100755 (executable)
index f303ced..0000000
+++ /dev/null
@@ -1,179 +0,0 @@
-import time
-
-class _USE_DEFAULTS:
-    pass
-
-
-def int_coords((x,y), (width, height)):
-    if 0 <= x <= 1 and type(x) == float:
-        x = x * width
-    if 0 <= y <= 1 and type(y) == float:
-        y = y * height
-    return (int(round(x)), int(round(y)))
-
-
-class GUITestConnection(object):
-
-    def send_tap(self, x, y):
-        return self.send_touchdown(x, y) and self.send_touchup(x, y)
-
-    def send_press(self, keyname):
-        return self.send_keydown(keyname) and self.send_keyup(keyname)
-
-    def send_keydown(self, keyname):
-        print ("send keydown(%s) needed but not implemented." % (keyname,))
-
-    def send_keyup(self, keyname):
-        print ("send keyup(%s) needed but not implemented." % (keyname,))
-
-    def send_touchdown(self, x, y):
-        print ("send touchdown(%d, %d) needed but not implemented" % (x, y))
-
-    def send_touchup(self, x, y):
-        print ("send touchup(%d, %d) needed but not implemented" % (x, y))
-
-    def send_touchmove(self, x, y):
-        print ("send touchmove(%d, %d) needed but not implemented" % (x, y))
-
-
-class GUITestInterface(object):
-    def __init__(self):
-        self._conn = None
-        self.tap_defaults = {}
-        self.longtap_holdtime = 2.0
-
-    def setConnection(self, conn):
-        self._conn = conn
-
-    def screen_size(Self):
-        return 720, 1280
-
-    def pressKey(self, keyname, long=False, hold=0.0, modifiers=None):
-        extra_params = {}
-        if modifiers != None:
-            extra_params['modifiers'] = modifiers
-        if hold > 0.0:
-            try:
-                assert self.existing_connection().\
-                        send_keydown(keyname, **extra_params)
-                time.sleep(hold)
-                assert self.existing_connection().\
-                        send_keyup(keyname, **extra_params)
-            except AssertionError:
-                return False
-            return True
-        return self.existing_connection().send_press(keyname, **extra_params)
-
-    def tap(self, (x, y), long=_USE_DEFAULTS, hold=_USE_DEFAULTS,\
-            count=_USE_DEFAULTS, delay_between_taps=_USE_DEFAULTS,
-            button=_USE_DEFAULTS):
-        if long == _USE_DEFAULTS:
-            long = self.tap_defaults.get("long", False)
-        if hold == _USE_DEFAULTS:
-            hold = self.tap_defaults.get("hold", 0.0)
-        if count == _USE_DEFAULTS:
-            count = self.tap_defaults.get("count", 1)
-        if delay_between_taps == _USE_DEFAULTS:
-            delay_between_taps = \
-                    self.tap_defaults.get("delay_between_taps", 0.5)
-        if button == _USE_DEFAULTS:
-            button = self.tap_defaults.get("button", None)
-
-        x, y = self.int_coords((x,y))
-        count = int(count)
-        if long and hold == 0.0:
-            hold = self.longtap_holdtime
-        extra_params = {}
-        if button != None:
-            extra_params['button'] = button
-        while count > 0:
-            if hold > 0.0:
-                try:
-                    assert self.existing_connection().\
-                            send_touchdown(x,y, **extra_params)
-                    time.sleep(hold)
-                    assert self.existing_connection().\
-                            send_touchup(x,y, **extra_params)
-                except AssertionError:
-                    return False
-            else:
-                if delay_between_taps:
-                    time.sleep(delay_between_taps)
-                if not self.existing_connection().send_tap(x, y, **extra_params):
-                    return False
-            count = int(count) - 1
-        return True
-
-    def down_scroll(self, (x1, y1), (x2, y2)):
-        x1, y1 = self.int_coords((x1, y1))
-        x2, y2 = self.int_coords((x2, y2))
-
-        self.existing_connection().send_touchdown(x1, y1)
-        ytemp = y1 - y2
-        yidx = 0
-
-        while ytemp - yidx > 0:
-            self.existing_connection().send_touchmove(x1, y1 - yidx)
-            yidx += 5
-
-        self.existing_connection().send_touchup(x2, y2)
-
-    def up_scroll(self, (x1, y1), (x2, y2)):
-        x1, y1 = self.int_coords((x1, y1))
-        x2, y2 = self.int_coords((x2, y2))
-
-        self.existing_connection().send_touchdown(x1, y1)
-        ytemp = y2 - y1
-        yidx = 0
-
-        while ytemp - yidx > 0:
-            self.existing_connection().send_touchmove(x1, y2 + yidx)
-            yidx += 5
-
-        self.existing_connection().send_touchup(x2, y2)
-
-
-    def drag(self, (x1, y1), (x2, y2), delay_between_moves=0.01,\
-            delay_before_moves=0, delay_after_moves=0, move_points=10,\
-            button=_USE_DEFAULTS):
-        x1, y1 = self.int_coords((x1, y1))
-        x2, y2 = self.int_coords((x2, y2))
-
-        extra_args = {}
-        if button != _USE_DEFAULTS:
-            extra_args["button"] = button
-
-        if delay_before_moves >= 0:
-            time.sleep(delay_before_moves)
-        else:
-            time.sleep(delay_between_moves)
-        for i in xrange(0, move_points):
-            nx = x1 + int(round(((x2 - x1) / float(move_points+1)) * (i+1)))
-            ny = y1 + int(round(((y2 - y2) / float(move_points+1)) * (i+1)))
-            if not self.existing_connection().\
-                    send_touchmove(nx, ny, **extra_args):
-                return False
-            time.sleep(delay_between_moves)
-        if delay_after_moves > 0:
-            self.existing_connection().send_touchmove(x2, y2, **extra_args)
-            time.sleep(delay_after_moves)
-        if delay_after_moves >= 0:
-            if self.existing_connection().send_touchup(x2, y2, **extra_args):
-                return True
-            else:
-                return False
-        else:
-            return True
-
-
-
-    def existing_connection(self):
-        if self._conn:
-            return self._conn
-        else:
-            print ("not connected")
-
-    def int_coords(self, (x, y)):
-        width, height = self.screen_size()
-        return int_coords((x,y), (width, height))
-
diff --git a/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/dev_event/tctmonkey/monkey_tizen.py b/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/dev_event/tctmonkey/monkey_tizen.py
deleted file mode 100755 (executable)
index acd1c3b..0000000
+++ /dev/null
@@ -1,324 +0,0 @@
-
-import os
-import time
-import subprocess
-import cPickle
-import base64
-import Queue
-import thread
-
-import monkey_gti
-
-from constants import Constants
-
-
-def _file_to_queue(f, out_queue):
-    line = f.readline()
-    while line != "":
-        out_queue.put(line)
-        line = f.readline()
-    f.close()
-
-
-def _encode(obj):
-    return base64.b64encode(cPickle.dumps(obj))
-
-
-def _decode(string):
-    return cPickle.loads(base64.b64decode(string))
-
-
-def _run(cmd, expected_exitstatus=None):
-    if type(cmd) == str:
-        shell = True
-    else:
-        shell = False
-
-    try:
-        proc = subprocess.Popen(cmd, shell=shell, stdout=subprocess.PIPE,\
-                stderr=subprocess.PIPE, close_fds=True)
-        if expected_exitstatus != None:
-            out, err = proc.communicate()
-        else:
-            out, err = ('', None)
-    except Exception, ex:
-        class fakeProcess(object):
-            pass
-        p = fakeProcess
-        p.returncode = 127
-        out, err = ('', ex)
-
-    exit_status = proc.returncode
-
-    if (expected_exitstatus != None and
-            exit_status != expected_exitstatus and
-            exit_status not in expected_exitstatus):
-        msg = "Executing %s failed. Exit status: %s, expected %s" % \
-                (cmd, exit_status, expected_exitstatus)
-        raise FMBTTizenError(msg)
-
-    return exit_status, out, err
-
-
-class Device(monkey_gti.GUITestInterface):
-
-    def __init__(self, serial_number=None, debug_agentfile=None, \
-            keyboard_device=None, touch_device=None, \
-            mouse_device=None, **kwargs):
-
-        monkey_gti.GUITestInterface.__init__(self, **kwargs)
-        c = TizenDeviceConnection(serial_number=serial_number,\
-                debug_agentfile=debug_agentfile,\
-                keyboard_device=keyboard_device,\
-                touch_device=touch_device,\
-                mouse_device=mouse_device)
-        self.setConnection(c)
-        c.gti = self
-
-    def connect(self):
-        if hasattr(self, "_conn"):
-            self._conn.open()
-            return True
-        else:
-            return False
-
-    def disconnect(self):
-        if hasattr(self, "_conn"):
-            self._conn.close()
-            return True
-        else:
-            return False
-
-    def pressPower(self, **pressKeyKwArgs):
-        return self.pressKey("POWER", **pressKeyKwArgs)
-
-    def pressBack(self, **pressKeyKwArgs):
-        return self.pressKey("BACK", **pressKeyKwArgs)
-
-    def pressMenu(self, **pressKeyKwArgs):
-        return self.pressKey("MENU", **pressKeyKwArgs)
-
-    def pressVolumeDown(self, **pressKeyKwArgs):
-        return self.pressKey("VOLUMEDOWN", **pressKeyKwArgs)
-
-    def pressVolumeUp(self, **pressKeyKwArgs):
-        return self.pressKey("VOLUMEUP", **pressKeyKwArgs)
-
-    def key_names(self):
-        return self._conn.key_names()
-
-
-class TizenDeviceConnection(monkey_gti.GUITestConnection):
-
-    def __init__(self, serial_number=None, debug_agentfile=None, \
-            keyboard_device=None, touch_device=None, mouse_device=None):
-        if serial_number == None:
-            self.serial_number = "unknown"
-        else:
-            self.serial_number = serial_number
-
-        self.sdb_shell = None
-        self.agent_needs_resolution = True
-        self.touch_device = touch_device
-        self.keyboard_device = keyboard_device
-        self.debug_agentfile = debug_agentfile
-        self.mouse_device = mouse_device
-        self.open()
-
-    def open(self):
-        if self.serial_number == "unknown":
-            raise TizenDeviceNotFoundError("Tizen device not found.")
-
-        self.close()
-
-        agent_fname = "fmbttizen-agent.py"
-        agent_uinput_fname = "fmbtuinput.py"
-
-        agent_fname_path = Constants.AGENT_PATH
-        uinput_fname_path = Constants.UINPUT_AGENT_PATH
-        remote_upload_path = "/tmp/"
-
-        remote_agent_fname = remote_upload_path + agent_fname
-
-        upload_files = [(agent_fname_path, remote_upload_path), \
-                (uinput_fname_path, remote_upload_path)]
-
-        for src, dst in upload_files:
-            upload_cmd = ["sdb", "-s", self.serial_number, "push", src, dst]
-            status, out, err = _run(upload_cmd, range(256))
-            if status == 127:
-                raise TizenConnectionError("Executing sdb -s %s push failed." + \
-                        "Check your Tizen SDK installation." % \
-                        self.serial_number)
-            elif status != 0:
-                if "device not found" in err:
-                    raise TizenDeviceNotFoundError(\
-                            'Tizen device "%s" not found.'% \
-                            self.serial_number)
-                else:
-                    raise TizenConnectionError('Executing "%s" failed: %s' % \
-                            (' '.join(upload_cmd), err + " " + out))
-
-        self.agent_args = []
-        if self.keyboard_device:
-            self.agent_args.append("--keyboard=%s" % (self.keyboard_device,))
-        if self.touch_device:
-            self.agent_args.append("--touch=%s" % (self.touch_device,))
-        if self.mouse_device:
-            self.agent_args.append("--mouse=%s" % (self.mouse_device,))
-
-        remote_shellcmd = ["sdb", "-s", self.serial_number, "shell"]
-        try:
-            self.sdb_shell = subprocess.Popen(remote_shellcmd,\
-                    shell=False,
-                    stdin=subprocess.PIPE,
-                    stdout=subprocess.PIPE,
-                    stderr=subprocess.PIPE,
-                    close_fds=True)
-        except OSError:
-            raise TizenConnectionError("Executing %s failed" % \
-                    " ".join(remote_shellcmd),)
-
-        self.sdbshell_errqueue = Queue.Queue()
-        thread.start_new_thread(_file_to_queue, (self.sdb_shell.stderr, \
-                self.sdbshell_errqueue))
-        self.sdb_shell.stdin.write("\r")
-        try:
-            ok, self.platform_info = self._agent_cmd(\
-                    "python %s %s; exit" % \
-                    (remote_agent_fname, " ".join(self.agent_args)))
-        except IOError, msg:
-            raise TizenConnectionError(\
-                    ('Connecting to a Tizen device/emulator failed. Error: %s'
-                    '\nTry "sdb -s %s shell python %s --debug".') % \
-                    (msg, self.serial_number, remote_agent_fname))
-
-        return ok
-
-    def key_names(self):
-        return self._agent_cmd("kn")[1]
-
-    def send_keydown(self, keyname):
-        print 'keydown %s' % keyname
-        return self._agent_cmd("kd %s" % (keyname,))[0]
-
-    def send_keyup(self, keyname):
-        print 'keyup %s' % keyname
-        return self._agent_cmd("ku %s" % (keyname,))[0]
-
-    def send_press(self, keyname, modifiers=()):
-        print 'send_press %s' % keyname
-        rv = True
-        for m in modifiers:
-            rv = rv and self.send_keydown(m)
-        rv = rv and self._agent_cmd("kp %s" % (keyname,))[0]
-        for m in modifiers[::-1]:
-            rv = rv and self.send_keyup(m)
-        return rv
-
-    def send_touchdown(self, x, y):
-        print 'touchdown %s %s' % (x, y)
-        return self._agent_cmd("td %s %s 1" % (x, y))[0]
-
-    def send_touchup(self, x, y):
-        print 'touchup %s %s' % (x, y)
-        return self._agent_cmd("tu %s %s 1" % (x, y))[0]
-
-    def send_tap(self, x, y):
-        print 'tap %s %s' % (x, y)
-        return self._agent_cmd("tt %s %s 1" % (x, y))[0]
-
-    def send_touchmove(self, x, y):
-        print 'touchmove %s %s' % (x, y)
-        return self._agent_cmd("tm %s %s" % (x, y))[0]
-
-    def _report_errors_inqueue(self):
-        while True:
-            try:
-                l = self._sdbshell_errqueue.get_nowait()
-            except Queue.Empty:
-                return
-            if self.debug_agentfile:
-                self.debug_agentfile.write("<2 %s" % (l,))
-
-    def _agent_cmd(self, cmd, retry=3):
-        if cmd[:2] in ["tt", "td", "tm", "tu", "er"]:
-            if self.agent_needs_resolution:
-                self._agent_cmd("sd %s %s" % self.gti.screen_size())
-                self.agent_needs_resolution = False
-
-        if self.sdb_shell == None:
-            return False, "disconnected"
-
-        if self.debug_agentfile:
-            self.debug_agentfile.write(">0 %s\n" % (cmd,))
-        try:
-            if len(cmd) > 0:
-                self.sdb_shell.stdin.write("%s%s" % (cmd, '\n'))
-                self.sdb_shell.stdin.flush()
-        except IOError, msg:
-            if retry > 0:
-                time.sleep(2)
-                self._report_errors_inqueue()
-                print ("Error when sending command %s : %s" % (cmd, msg))
-                self.open()
-                self._agent_cmd(cmd, retry=retry - 1)
-        return self._agent_answer()
-
-    def _agent_answer(self):
-        error_line_prefix = "FMBTAGENT ERROR "
-        ok_line_prefix = "FMBTAGENT OK "
-        l = self.sdb_shell.stdout.readline()
-        output = []
-        while True:
-            if self.debug_agentfile:
-                if len(l) > 72:
-                    self.debug_agentfile.write("<1 %s...\n" % (l[:72],))
-                else:
-                    self.debug_agentfile.write("<1 %s\n" % (l,))
-            if l.startswith(ok_line_prefix):
-                return True, _decode(l[len(ok_line_prefix):])
-            elif l.startswith(error_line_prefix):
-                return False, _decode(l[len(error_line_prefix):])
-            else:
-                output.append(l)
-                pass
-            l = self.sdb_shell.stdout.readline()
-            if l == "":
-                raise IOError("Agent connection lost : %s" % \
-                        ("\n".join(output)))
-                break
-            l = l.strip()
-
-    def close(self):
-        if hasattr(self, "sdb_Shell") and self.sdb_shell != None:
-            try:
-                self._agent_cmd("quit", retry=0)
-            except:
-                pass
-            try:
-                self.sdb_shell.stdin.close()
-            except:
-                pass
-            try:
-                self.sdb_shell.stdout.close()
-            except:
-                pass
-            try:
-                self.sdb_shell.stderr.close()
-            except:
-                pass
-            self._report_errors_inqueue()
-        self.sdb_shell = None
-
-
-class FMBTTizenError(Exception):
-    pass
-
-
-class TizenConnectionError(FMBTTizenError):
-    pass
-
-
-class TizenDeviceNotFoundError(TizenConnectionError):
-    pass
diff --git a/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/dev_event/tctmonkey/monkeyworker.py b/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/dev_event/tctmonkey/monkeyworker.py
deleted file mode 100755 (executable)
index 48bcef6..0000000
+++ /dev/null
@@ -1,80 +0,0 @@
-
-import os
-import threading
-import random
-
-from monkey_tizen import Device
-from sdbmanager import SdbManager
-from constants import Constants
-
-
-class RandomExecutor(threading.Thread):
-    def __init__(self, _devid, _wrap):
-        self.monkey_dev = Device(_devid, _wrap.get_debug_file(), \
-                _wrap.get_key_dev(), _wrap.get_touch_dev(), \
-                _wrap.get_mouse_dev())
-        self.devid = _devid
-        self.monkey_dev.connect()
-        self.random_count = int(_wrap.get_random_count())
-        self.result_path = _wrap.get_result_dirpath(_devid)
-        self.back_count = _wrap.get_back_count()
-
-        if _wrap.get_record_file():
-            self.rec_file = open(_wrap.get_record_file(), 'w')
-        else:
-            self.rec_file = open(\
-                    os.path.join(self.result_path, \
-                    Constants.RECORD_FILE_NAME), 'w')
-        threading.Thread.__init__(self)
-
-    def run(self):
-        for idx in range(self.random_count):
-            x = random.uniform(0.0, 1.0)
-            y = random.uniform(0.0, 1.0)
-
-            self.rec_file.write("tap %s %s\n" % (x, y))
-            self.monkey_dev.tap((x, y))
-
-            if self.back_count and idx >= int(self.back_count):
-                if idx % int(self.back_count) == 0:
-                    self.rec_file.write("pressBack\n")
-                    self.monkey_dev.pressBack()
-
-        SdbManager.exportDumpFiles(self.devid, \
-                os.path.join(self.result_path, 'random'))
-        self.monkey_dev.disconnect()
-        self.rec_file.close()
-
-
-class ReplayExecutor(threading.Thread):
-    def __init__(self, _devid, _wrap):
-        self.monkey_dev = Device(_devid, _wrap.get_debug_file(), \
-                _wrap.get_key_dev(), _wrap.get_touch_dev(), \
-                _wrap.get_mouse_dev())
-        self.devid = _devid
-        self.monkey_dev.connect()
-        self.replay_filepath = _wrap.get_replay_file()
-        self.replay_file = None
-
-        self.result_path = _wrap.get_result_dirpath(_devid)
-
-        if self.replay_filepath:
-            self.replay_file = open(self.replay_filepath, 'r')
-
-        threading.Thread.__init__(self)
-
-    def run(self):
-        while True:
-            line = self.replay_file.readline()
-            if not line:
-                break
-            msg = line.split()
-            if msg[0].find('tap') > -1:
-                self.monkey_dev.tap((float(msg[1]), float(msg[2])))
-            elif msg[0].find('pressBack') > -1:
-                self.monkey_dev.pressBack()
-
-        self.replay_file.close()
-        self.monkey_dev.disconnect()
-        SdbManager.exportDumpFiles(self.devid, \
-                os.path.join(self.result_path, 'replay'))
diff --git a/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/dev_event/tctmonkey/monkeywrapper.py b/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/dev_event/tctmonkey/monkeywrapper.py
deleted file mode 100755 (executable)
index 6aa8e52..0000000
+++ /dev/null
@@ -1,138 +0,0 @@
-
-import os
-import datetime
-
-from optparse import *
-from constants import Constants
-
-
-def varnarg(option, opt_str, value, parser):
-    """ parser srg"""
-    value = []
-    import re
-    for arg in parser.rargs:
-        if re.search('^--.+', arg) or re.search('^-[\D]', arg):
-            break
-        value.append(arg)
-
-    del parser.rargs[:len(value)]
-    setattr(parser.values, option.dest, value)
-
-
-class MonkeyWrapper:
-    def __init__(self):
-        self.options = None
-        self.USAGE = "\n\""
-
-    def print_usage(self):
-        print self.USAGE
-
-    def parse_options(self, argv):
-        option_list = [
-            make_option("--py-install", dest="python_install", \
-                    action="store_true", default=False, help=""),
-            make_option("--random", dest="random_count", action="callback", \
-                    callback=varnarg, help=""),
-            make_option("--record", dest="record_file", action="callback", \
-                    callback=varnarg, help=""),
-            make_option("--debug", dest="debug_file", action="callback", \
-                    callback=varnarg, help=""),
-            make_option("--replay", dest="replay_file", action="callback", \
-                    callback=varnarg, help=""),
-            make_option("--key-dev", dest="key_device", action="callback", \
-                    callback=varnarg, help=""),
-            make_option("--touch-dev", dest="touch_device", \
-                    action="callback", callback=varnarg, help=""),
-            make_option("--mouse_dev", dest="mouse_device", \
-                    action="callback", callback=varnarg, help=""),
-            make_option("--output", dest="result_dir",  action="callback", \
-                    callback=varnarg, help=""),
-            make_option("--back-key", dest="back_count", action="callback", \
-                    callback=varnarg, help="")
-        ]
-
-        # detect non-params
-        if len(argv) == 1:
-            pass
-            argv.append("--help")
-
-        PARSERS = OptionParser(option_list=option_list, usage=self.USAGE)
-        (self.options, args) = PARSERS.parse_args()
-
-    def is_py_install(self):
-        return self.options.python_install
-
-    def python_install(self, _devid):
-        os.system('sdb -s %s root on' % _devid)
-        curr_path = Constants.LIB_DIR
-        os.system('sdb -s %s push %s %s' % (_devid, os.path.join(curr_path, 'libpython-2.7.1-1.7.armv7l.rpm'), '/tmp/'))
-        os.system('sdb -s %s push %s %s' % (_devid, os.path.join(curr_path, 'python-2.7.1-1.4.armv7l.rpm'), '/tmp/'))
-        os.system('sdb -s %s push %s %s' % (_devid,  os.path.join(curr_path, 'python-base-2.7.1-1.7.armv7l.rpm'), '/tmp/'))
-        os.system('sdb -s %s shell rpm -ivh /tmp/libpython-2.7.1-1.7.armv7l.rpm' % _devid)
-        os.system('sdb -s %s shell rpm -ivh /tmp/python-base-2.7.1-1.7.armv7l.rpm' % _devid)
-        os.system('sdb -s %s shell rpm -ivh /tmp/python-2.7.1-1.4.armv7l.rpm' % _devid)
-
-    def get_replay_file(self):
-        if self.options.replay_file:
-            return self.options.replay_file[0]
-        else:
-            return None
-
-    def get_record_file(self):
-        if self.options.record_file:
-            return self.options.record_file[0]
-        else:
-            return None
-
-    def get_random_count(self):
-        return self.options.random_count[0]
-
-    def get_back_count(self):
-        if self.options.back_count:
-            return self.options.back_count[0]
-        else:
-            return None
-
-    def get_debug_file(self):
-        if self.options.debug_file:
-            return self.options.debug_file[0]
-        else:
-            return None
-
-    def get_key_dev(self):
-        if self.options.key_device:
-            return self.options.key_device[0]
-        else:
-            return None
-
-    def get_touch_dev(self):
-        if self.options.touch_device:
-            return str(self.options.touch_device[0])
-        else:
-            return None
-
-    def get_mouse_dev(self):
-        if self.options.mouse_device:
-            self.options.mouse_device[0]
-        else:
-            return None
-
-    def is_random_mode(self):
-        if self.options.random_count and self.options.random_count[0] > 0:
-            return True
-        else:
-            return False
-
-    def is_replay_mode(self):
-        if self.options.replay_file:
-            return True
-        else:
-            return False
-
-    def get_result_dirpath(self, _devid):
-        curr_time = datetime.datetime.now().strftime('%Y-%m-%d_%H:%M:%S')
-        result_path = os.path.join(Constants.RESULT_DIR, _devid, curr_time)
-        if not os.path.exists(result_path):
-            os.makedirs(result_path)
-
-        return result_path
diff --git a/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/dev_event/tctmonkey/sdbmanager.py b/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/dev_event/tctmonkey/sdbmanager.py
deleted file mode 100755 (executable)
index c345505..0000000
+++ /dev/null
@@ -1,100 +0,0 @@
-
-import os
-import time
-import subprocess
-
-from constants import Constants
-
-class SdbManager:
-
-    @staticmethod
-    def sdbCommand(command, timeout=90):
-        #LOGGER.debug("sdbCommand : %s" % command)
-        proc = subprocess.Popen(command,
-                                shell=True,
-                                stdout=subprocess.PIPE,
-                                stderr=subprocess.PIPE)
-        time_out = 0
-        while time_out < timeout:
-            exit_code = proc.poll()
-            if exit_code is not None:
-                break
-            time_out += 0.5
-            time.sleep(0.5)
-        if exit_code is None:
-            pass
-            #LOGGER.error("sdb time out,kill subprocess...")
-            #killall(proc.pid)
-
-        return exit_code, proc.stdout, proc.stderr
-
-
-    @staticmethod
-    def sdbDevices():
-        dev_cmd = "sdb devices"
-        start_server_cmd = "sdb start-server"
-        SdbManager.sdbCommand(start_server_cmd, 8)
-        exit_code, re_stdout, re_stderr = SdbManager.sdbCommand(dev_cmd, 5)
-
-        return re_stdout.read()
-
-
-    @staticmethod
-    def checkDirExist(_devid, _dirname):
-        existed = True
-        lscmd = Constants.SDB_LS % _devid + " " + _dirname
-        exit_code, std_out, std_err = SdbManager.sdbCommand(lscmd)
-        out_log = std_out.read()
-        if out_log and out_log.find("No such file or directory") > -1:
-            existed = False
-        return existed
-
-    @staticmethod
-    def sdbShell(deviceId, cmd):
-        shell_cmd = Constants.SDB_SHELL % deviceId + " " + cmd
-        exit_code, re_stdout, re_stderr = SdbManager.sdbCommand(shell_cmd)
-
-        if exit_code is None:
-            return False
-        else:
-            outLog = re_stdout.read()
-            if outLog and outLog.find('command not found') > -1:
-                return False
-
-        return outLog
-
-    @staticmethod
-    def exportDumpFiles(_devid, _resultDir):
-        dumpPath = os.path.join(_resultDir, "dump")
-        if not os.path.exists(dumpPath):
-            os.makedirs(dumpPath)
-        remote = Constants.DUMP_DIR_PATH
-        SdbManager.sdbPull(_devid, remote, dumpPath)
-        SdbManager.sdbShell(_devid, 'rm -rf ' + remote)
-
-
-    @staticmethod
-    def sdbPull(_devid, remote, local):
-        rmtFileCheck_cmd = Constants.SDB_SHELL % _devid + " " \
-                + Constants.FILE_FOUND_SCRIPT % remote
-        exit_code, re_stdout, re_stderr = \
-                SdbManager.sdbCommand(rmtFileCheck_cmd)
-
-        if exit_code is None:
-            return False
-
-        pull_cmd = Constants.SDB_PULL % _devid + " " + remote + " " + local
-        exit_code, re_stdout, re_stderr = SdbManager.sdbCommand(pull_cmd)
-
-        if exit_code is None:
-            return False
-
-        if Constants.checkFileExists(local) is False:
-            return False
-        else:
-            pass
-
-        return True
-
-
-
diff --git a/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/full_pkg_generator b/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/full_pkg_generator
deleted file mode 100755 (executable)
index 4f7bb7c..0000000
+++ /dev/null
@@ -1,11 +0,0 @@
-#!/bin/bash
-
-THE_CLASSPATH=
-for i in `ls /opt/tools/manager/lib/*.jar`
-do
-  THE_CLASSPATH=${THE_CLASSPATH}:${i}
-done
-
-
-java -cp /opt/tools/manager/config/:${THE_CLASSPATH} org.tizen.tct.tool.mgr.PackageList "${@}"
-chmod 777 /opt/tools/manager/tmp/
diff --git a/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/manager/doc/RELEASE_NOTES b/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/manager/doc/RELEASE_NOTES
deleted file mode 100755 (executable)
index 01ddcc3..0000000
+++ /dev/null
@@ -1,64 +0,0 @@
-TCT 2.3 Release Notes\r
-\r
-1. Content overview\r
- +----doc\r
-     |---- Web_TCT_2.3_Behavior_Test_Tool_User_Guide_v1.0.pdf\r
-     |---- Web_TCT_2.3_Manager_User_Guide_v1.0.pdf\r
-     |---- Web_TCT_2.3_Shell_User_Guide_v1.0.pdf\r
-     |---- Web_TCT_2.3_TestSuite_Packaging_Guide_v1.0.pdf\r
-     |---- Web_TCT_2.3_Tool_Packaging_Guide_v1.0.pdf\r
-     |---- Web_TCT_2.3_Tool_Packaging_Ubuntu_Guide_v1.0.pdf\r
-     |---- Web_TCT_2.3_User_Guide_v1.0.pdf\r
-     |---- RELEASE_NOTES\r
- +----package\r
-     +---- common\r
-     +---- mobile\r
-     +---- wearable\r
-     +---- pkg_infos\r
- +----resource\r
-     |---- getCap.wgt\r
-     |---- tct-testconfig-2.3-1.zip\r
-     |---- org.tizen.datacontrolprovider-1.0.0-arm.tpk\r
-     |---- org.tizen.datacontrolprovider-1.0.0-i386.tpk\r
-     +---- testkit-stub\r
-     +---- tinyweb subdirectory\r
- +----tools\r
-     |---- healthcheck.ini\r
-     |---- full_pkg_generator\r
-     |---- tct-config-device.py\r
-     |---- tct-config-host.py\r
-     |---- tct-shell\r
-     |---- testkit-lite\r
-     |---- tct-mgr\r
-     +---- sdb\r
-     +---- shell\r
-     +---- testkitlite\r
-     +---- manager\r
-           +---- tct-manager related files\r
-\r
-2 Getting started\r
-\r
-2.1 TCT tools overview\r
-Tizen Compliance Tests (TCT) tools consist of these components:\r
-* Web TCT Manager:  A java GUI tool that runs on the host machine, allowing users to create a test execution plan, trigger test execution, and view the test report.\r
-* Web TCT Shell: A lightweight console tool that runs on the host machine, allowing users to trigger TCT testing with an existing test plan, or a package list, or a test case ID.\r
-* Web TCT Behavior Test Tool: A device behavior checker developed using jQuery.\r
-\r
-2.2 Setting up the environment and installing the tools\r
-Follow instructions in doc/Web_TCT_2.3_User_Guide_v1.0.pdf to set up the environment of both the host and the device, and to install the tools.\r
-\r
-2.3 Using the tools\r
-Consult these documents below for detailed usage information:\r
-* doc/Web_TCT_Manager_2.3_User_Guide_v1.0.pdf\r
-* doc/Web_TCT_Shell_2.3_User_Guide_v1.0.pdf\r
-* doc/Web_TCT_Behavior_Test_Tool_2.3_User_Guide_v1.0.pdf\r
-\r
-3. Contacting us\r
-We're counting on your feedback to further improve our tools. In the meantime, we'll help you out if you encounter any problems. Please contact cathy.shen@intel.com if you'd like to get help, offer feedback, or contribute new ideas.\r
-\r
-4. Upcoming features and enhancements\r
-Upcoming features and enhancements include:\r
-* Manual test cases will be automated, as much as possible, to save execution effort.\r
-* TCT tools and cases will be modified according to TCS changes and feedback.\r
-* Manual case support for Web TCT Shell and the "--manual" command option are placeholders, currently.\r
-\r
diff --git a/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/manager/doc/TCT-manager-guide.pdf b/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/manager/doc/TCT-manager-guide.pdf
deleted file mode 100755 (executable)
index 3f2d277..0000000
Binary files a/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/manager/doc/TCT-manager-guide.pdf and /dev/null differ
diff --git a/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/manager/doc/Web_TCT_2.3_Behavior_Test_Tool_User_Guide_v1.0.pdf b/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/manager/doc/Web_TCT_2.3_Behavior_Test_Tool_User_Guide_v1.0.pdf
deleted file mode 100755 (executable)
index b9dd66b..0000000
Binary files a/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/manager/doc/Web_TCT_2.3_Behavior_Test_Tool_User_Guide_v1.0.pdf and /dev/null differ
diff --git a/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/manager/doc/Web_TCT_2.3_Manager_User_Guide_v1.0.pdf b/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/manager/doc/Web_TCT_2.3_Manager_User_Guide_v1.0.pdf
deleted file mode 100755 (executable)
index 8b1b100..0000000
Binary files a/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/manager/doc/Web_TCT_2.3_Manager_User_Guide_v1.0.pdf and /dev/null differ
diff --git a/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/manager/doc/Web_TCT_2.3_Shell_User_Guide_v1.0.pdf b/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/manager/doc/Web_TCT_2.3_Shell_User_Guide_v1.0.pdf
deleted file mode 100755 (executable)
index 46e4d9e..0000000
Binary files a/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/manager/doc/Web_TCT_2.3_Shell_User_Guide_v1.0.pdf and /dev/null differ
diff --git a/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/manager/doc/Web_TCT_2.3_TestSuite_Packaging_Guide_v1.0.pdf b/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/manager/doc/Web_TCT_2.3_TestSuite_Packaging_Guide_v1.0.pdf
deleted file mode 100755 (executable)
index 91f1b61..0000000
Binary files a/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/manager/doc/Web_TCT_2.3_TestSuite_Packaging_Guide_v1.0.pdf and /dev/null differ
diff --git a/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/manager/doc/Web_TCT_2.3_Tool_Packaging_Ubuntu_Guide_v1.0.pdf b/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/manager/doc/Web_TCT_2.3_Tool_Packaging_Ubuntu_Guide_v1.0.pdf
deleted file mode 100755 (executable)
index eded39b..0000000
Binary files a/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/manager/doc/Web_TCT_2.3_Tool_Packaging_Ubuntu_Guide_v1.0.pdf and /dev/null differ
diff --git a/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/manager/doc/Web_TCT_2.3_User_Guide_v1.0.pdf b/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/manager/doc/Web_TCT_2.3_User_Guide_v1.0.pdf
deleted file mode 100755 (executable)
index 4ed1efe..0000000
Binary files a/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/manager/doc/Web_TCT_2.3_User_Guide_v1.0.pdf and /dev/null differ
diff --git a/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/manager/lib/appFramework-1.0.jar b/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/manager/lib/appFramework-1.0.jar
deleted file mode 100755 (executable)
index f480d62..0000000
Binary files a/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/manager/lib/appFramework-1.0.jar and /dev/null differ
diff --git a/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/manager/lib/commons-cli-1.2.jar b/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/manager/lib/commons-cli-1.2.jar
deleted file mode 100755 (executable)
index ce4b9ff..0000000
Binary files a/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/manager/lib/commons-cli-1.2.jar and /dev/null differ
diff --git a/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/manager/lib/commons-compress-1.12.jar b/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/manager/lib/commons-compress-1.12.jar
deleted file mode 100755 (executable)
index 4867705..0000000
Binary files a/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/manager/lib/commons-compress-1.12.jar and /dev/null differ
diff --git a/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/manager/lib/commons-io-2.4.jar b/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/manager/lib/commons-io-2.4.jar
deleted file mode 100755 (executable)
index 90035a4..0000000
Binary files a/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/manager/lib/commons-io-2.4.jar and /dev/null differ
diff --git a/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/manager/lib/jdom-1.1.2.jar b/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/manager/lib/jdom-1.1.2.jar
deleted file mode 100755 (executable)
index b8091ef..0000000
Binary files a/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/manager/lib/jdom-1.1.2.jar and /dev/null differ
diff --git a/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/manager/lib/json_simple-1.1.jar b/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/manager/lib/json_simple-1.1.jar
deleted file mode 100755 (executable)
index f395f41..0000000
Binary files a/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/manager/lib/json_simple-1.1.jar and /dev/null differ
diff --git a/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/manager/lib/log4j-1.2.17.jar b/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/manager/lib/log4j-1.2.17.jar
deleted file mode 100755 (executable)
index 068867e..0000000
Binary files a/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/manager/lib/log4j-1.2.17.jar and /dev/null differ
diff --git a/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/manager/lib/log4j.properties b/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/manager/lib/log4j.properties
deleted file mode 100755 (executable)
index 6956ec6..0000000
+++ /dev/null
@@ -1,33 +0,0 @@
-log4j.rootLogger=INFO,CONSOLE,FILE, ROLLING_FILE
-#DEBUG,CONSOLE,FILE,ROLLING_FILE,MAIL,DATABASE
-log4j.addivity.org.apache=true
-###################
-# Console Appender
-###################
-log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender
-log4j.appender.Threshold=DEBUG
-log4j.appender.CONSOLE.Target=System.out
-log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout
-log4j.appender.CONSOLE.layout.ConversionPattern=[%p]-%d-[%t] %c (%F:%L) - %m%n
-#log4j.appender.CONSOLE.layout.ConversionPattern=[start]%d{DATE}[DATE]%n%p[PRIORITY]%n%x[NDC]%n%t[THREAD] n%c[CATEGORY]%n%m[MESSAGE]%n%n
-#####################
-# File Appender
-#####################
-log4j.appender.FILE=org.apache.log4j.FileAppender
-log4j.appender.FILE.File=/opt/tools/manager/log/file.log
-log4j.appender.FILE.Append=false
-log4j.appender.FILE.layout=org.apache.log4j.PatternLayout
-#log4j.appender.FILE.layout.ConversionPattern=[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n
-log4j.appender.FILE.layout.ConversionPattern=[%p]-%d-[%t] %c (%F:%L) - %m%n
-########################
-# Rolling File
-########################
-log4j.appender.ROLLING_FILE=org.apache.log4j.RollingFileAppender
-log4j.appender.ROLLING_FILE.Threshold=ERROR
-log4j.appender.ROLLING_FILE.File=/opt/tools/manager/log/rolling.log
-log4j.appender.ROLLING_FILE.Append=true
-log4j.appender.ROLLING_FILE.MaxFileSize=10KB
-log4j.appender.ROLLING_FILE.MaxBackupIndex=1
-log4j.appender.ROLLING_FILE.layout=org.apache.log4j.PatternLayout
-#log4j.appender.ROLLING_FILE.layout.ConversionPattern=[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n
-log4j.appender.ROLLING_FILE.layout.ConversionPattern=[%p]-%d-[%t] %c (%F:%L) - %m%n
diff --git a/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/manager/lib/manager.properties b/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/manager/lib/manager.properties
deleted file mode 100755 (executable)
index 255bbd4..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-TIZENV=tizen_web_2.3,tizen_native_2.3,tizen_web_2.3.1,tizen_native_2.3.1,tizen_web_2.3.2,tizen_native_2.3.2,tizen_web_2.4,tizen_native_2.4,tizen_web_3.0,tizen_native_3.0,tizen_csharp_3.0,tizen_web_4.0,tizen_native_4.0,tizen_csharp_4.0,tizen_web_5.0,tizen_native_5.0,tizen_csharp_5.0,tizen_web_5.5,tizen_native_5.5,tizen_csharp_5.5
-PROFILE=mobile,wearable,tv,common_iot
diff --git a/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/manager/lib/tct-mgr-app-3.1.5-20181122.jar b/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/manager/lib/tct-mgr-app-3.1.5-20181122.jar
deleted file mode 100755 (executable)
index 3ecfe95..0000000
Binary files a/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/manager/lib/tct-mgr-app-3.1.5-20181122.jar and /dev/null differ
diff --git a/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/manager/plan/Full_common_iot.xml b/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/manager/plan/Full_common_iot.xml
deleted file mode 100755 (executable)
index a4f2e12..0000000
+++ /dev/null
@@ -1,755 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>\r
-<ns3:testplan xmlns:ns3="http://www.example.org/plan/" xmlns="" name="Full_mobile" profile="mobile">\r
-  <execute_type>All</execute_type>\r
-  <suite name="tct-webdatabase-w3c-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
-    <auto_tcn>247</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>247</total_tcn>\r
-    <pkg_name>mobile/tct-webdatabase-w3c-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-jsenhance-html5-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
-    <auto_tcn>49</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>49</total_tcn>\r
-    <pkg_name>common/tct-jsenhance-html5-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-multicolumn-css3-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
-    <auto_tcn>141</auto_tcn>\r
-    <manual_tcn>18</manual_tcn>\r
-    <total_tcn>159</total_tcn>\r
-    <pkg_name>mobile/tct-multicolumn-css3-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-messaging-mms-tizen-tests" launcher="WRTLauncher" category="Tizen Web Device APIs">\r
-    <auto_tcn>123</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>123</total_tcn>\r
-    <pkg_name>mobile/tct-messaging-mms-tizen-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-workers-w3c-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
-    <auto_tcn>85</auto_tcn>\r
-    <manual_tcn>1</manual_tcn>\r
-    <total_tcn>86</total_tcn>\r
-    <pkg_name>mobile/tct-workers-w3c-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-transitions-css3-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
-    <auto_tcn>26</auto_tcn>\r
-    <manual_tcn>5</manual_tcn>\r
-    <total_tcn>31</total_tcn>\r
-    <pkg_name>common/tct-transitions-css3-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-namespace-tizen-tests" launcher="WRTLauncher" category="Tizen Web Device APIs">\r
-    <auto_tcn>23</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>23</total_tcn>\r
-    <pkg_name>common/tct-namespace-tizen-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-messaging-email-tizen-tests" launcher="WRTLauncher" category="Tizen Web Device APIs">\r
-    <auto_tcn>308</auto_tcn>\r
-    <manual_tcn>1</manual_tcn>\r
-    <total_tcn>309</total_tcn>\r
-    <pkg_name>mobile/tct-messaging-email-tizen-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-2dtransforms-css3-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
-    <auto_tcn>34</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>34</total_tcn>\r
-    <pkg_name>common/tct-2dtransforms-css3-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-time-tizen-tests" launcher="WRTLauncher" category="Tizen Web Device APIs">\r
-    <auto_tcn>470</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>470</total_tcn>\r
-    <pkg_name>mobile/tct-time-tizen-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-forms-html5-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
-    <auto_tcn>151</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>151</total_tcn>\r
-    <pkg_name>mobile/tct-forms-html5-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-capability-tests" launcher="WRTLauncher" category="Compliance">\r
-    <auto_tcn>15</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>15</total_tcn>\r
-    <pkg_name>common/tct-capability-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-fileapi-w3c-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
-    <auto_tcn>98</auto_tcn>\r
-    <manual_tcn>3</manual_tcn>\r
-    <total_tcn>101</total_tcn>\r
-    <pkg_name>mobile/tct-fileapi-w3c-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-mediacapture-w3c-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
-    <auto_tcn>7</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>7</total_tcn>\r
-    <pkg_name>common/tct-mediacapture-w3c-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-ext01-wrt-tests" launcher="WRTLauncher -iu" category="Web Runtime">\r
-    <auto_tcn>3</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>3</total_tcn>\r
-    <pkg_name>mobile/tct-ext01-wrt-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-exif-tizen-tests" launcher="WRTLauncher" category="Tizen Web Device APIs">\r
-    <auto_tcn>64</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>64</total_tcn>\r
-    <pkg_name>common/tct-exif-tizen-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-csp-w3c-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
-    <auto_tcn>133</auto_tcn>\r
-    <manual_tcn>78</manual_tcn>\r
-    <total_tcn>211</total_tcn>\r
-    <pkg_name>mobile/tct-csp-w3c-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-privilege-wrt-tests" category="Web Runtime">\r
-    <auto_tcn>155</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>155</total_tcn>\r
-    <pkg_name>mobile/tct-privilege-wrt-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-mediakey-tizen-tests" launcher="WRTLauncher" category="Tizen Web Device APIs">\r
-    <auto_tcn>11</auto_tcn>\r
-    <manual_tcn>4</manual_tcn>\r
-    <total_tcn>15</total_tcn>\r
-    <pkg_name>mobile/tct-mediakey-tizen-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-deviceorientation-w3c-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
-    <auto_tcn>37</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>37</total_tcn>\r
-    <pkg_name>mobile/tct-deviceorientation-w3c-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-webmessaging-w3c-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
-    <auto_tcn>176</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>176</total_tcn>\r
-    <pkg_name>mobile/tct-webmessaging-w3c-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-package-tizen-tests" launcher="WRTLauncher" category="Tizen Web Device APIs">\r
-    <auto_tcn>54</auto_tcn>\r
-    <manual_tcn>12</manual_tcn>\r
-    <total_tcn>66</total_tcn>\r
-    <pkg_name>common/tct-package-tizen-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-notification-tizen-tests" launcher="WRTLauncher" category="Tizen Web Device APIs">\r
-    <auto_tcn>93</auto_tcn>\r
-    <manual_tcn>1</manual_tcn>\r
-    <total_tcn>94</total_tcn>\r
-    <pkg_name>mobile/tct-notification-tizen-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-fmradio-tizen-tests" launcher="WRTLauncher" category="Tizen Web Device APIs">\r
-    <auto_tcn>67</auto_tcn>\r
-    <manual_tcn>7</manual_tcn>\r
-    <total_tcn>74</total_tcn>\r
-    <pkg_name>mobile/tct-fmradio-tizen-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-rt01-wrt-tests" launcher="WRTLauncher -iu" category="Web Runtime">\r
-    <auto_tcn>12</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>12</total_tcn>\r
-    <pkg_name>common/tct-rt01-wrt-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-appcache-html5-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
-    <auto_tcn>36</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>36</total_tcn>\r
-    <pkg_name>mobile/tct-appcache-html5-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-filesystemapi-w3c-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
-    <auto_tcn>208</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>208</total_tcn>\r
-    <pkg_name>mobile/tct-filesystemapi-w3c-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-svg-html5-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
-    <auto_tcn>3</auto_tcn>\r
-    <manual_tcn>9</manual_tcn>\r
-    <total_tcn>12</total_tcn>\r
-    <pkg_name>common/tct-svg-html5-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-websocket-w3c-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
-    <auto_tcn>270</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>270</total_tcn>\r
-    <pkg_name>mobile/tct-websocket-w3c-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-flexiblebox-css3-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
-    <auto_tcn>25</auto_tcn>\r
-    <manual_tcn>28</manual_tcn>\r
-    <total_tcn>53</total_tcn>\r
-    <pkg_name>common/tct-flexiblebox-css3-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-dnd-html5-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
-    <auto_tcn>6</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>6</total_tcn>\r
-    <pkg_name>mobile/tct-dnd-html5-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-extra-html5-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
-    <auto_tcn>548</auto_tcn>\r
-    <manual_tcn>25</manual_tcn>\r
-    <total_tcn>573</total_tcn>\r
-    <pkg_name>mobile/tct-extra-html5-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-fullscreen-nonw3c-tests" launcher="WRTLauncher" category="Supplementary APIs">\r
-    <auto_tcn>16</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>16</total_tcn>\r
-    <pkg_name>mobile/tct-fullscreen-nonw3c-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-colors-css3-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
-    <auto_tcn>46</auto_tcn>\r
-    <manual_tcn>29</manual_tcn>\r
-    <total_tcn>75</total_tcn>\r
-    <pkg_name>common/tct-colors-css3-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-indexeddb-w3c-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
-    <auto_tcn>400</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>400</total_tcn>\r
-    <pkg_name>mobile/tct-indexeddb-w3c-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-sandbox-html5-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
-    <auto_tcn>72</auto_tcn>\r
-    <manual_tcn>1</manual_tcn>\r
-    <total_tcn>73</total_tcn>\r
-    <pkg_name>common/tct-sandbox-html5-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-networkbearerselection-tizen-tests" launcher="WRTLauncher" category="Tizen Web Device APIs">\r
-    <auto_tcn>24</auto_tcn>\r
-    <manual_tcn>1</manual_tcn>\r
-    <total_tcn>25</total_tcn>\r
-    <pkg_name>mobile/tct-networkbearerselection-tizen-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-push-tizen-tests" launcher="WRTLauncher" category="Tizen Web Device APIs">\r
-    <auto_tcn>41</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>41</total_tcn>\r
-    <pkg_name>common/tct-push-tizen-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-messageport-tizen-tests" launcher="WRTLauncher" category="Tizen Web Device APIs">\r
-    <auto_tcn>48</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>48</total_tcn>\r
-    <pkg_name>mobile/tct-messageport-tizen-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-browserstate-html5-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
-    <auto_tcn>3</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>3</total_tcn>\r
-    <pkg_name>mobile/tct-browserstate-html5-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-cors-w3c-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
-    <auto_tcn>10</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>10</total_tcn>\r
-    <pkg_name>common/tct-cors-w3c-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-xmlhttprequest-w3c-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
-    <auto_tcn>262</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>262</total_tcn>\r
-    <pkg_name>mobile/tct-xmlhttprequest-w3c-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-navigationtiming-w3c-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
-    <auto_tcn>45</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>45</total_tcn>\r
-    <pkg_name>mobile/tct-navigationtiming-w3c-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-typedarrays-nonw3c-tests" launcher="WRTLauncher" category="Supplementary APIs">\r
-    <auto_tcn>80</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>80</total_tcn>\r
-    <pkg_name>common/tct-typedarrays-nonw3c-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-animations-css3-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
-    <auto_tcn>24</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>24</total_tcn>\r
-    <pkg_name>common/tct-animations-css3-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-badge-tizen-tests" launcher="WRTLauncher" category="Tizen Web Device APIs">\r
-    <auto_tcn>26</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>26</total_tcn>\r
-    <pkg_name>mobile/tct-badge-tizen-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-nfc-tizen-tests" launcher="WRTLauncher" category="Tizen Web Device APIs">\r
-    <auto_tcn>195</auto_tcn>\r
-    <manual_tcn>35</manual_tcn>\r
-    <total_tcn>230</total_tcn>\r
-    <pkg_name>mobile/tct-nfc-tizen-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-pagevisibility-w3c-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
-    <auto_tcn>18</auto_tcn>\r
-    <manual_tcn>2</manual_tcn>\r
-    <total_tcn>20</total_tcn>\r
-    <pkg_name>mobile/tct-pagevisibility-w3c-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-contact-tizen-tests" launcher="WRTLauncher" category="Tizen Web Device APIs">\r
-    <auto_tcn>441</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>441</total_tcn>\r
-    <pkg_name>mobile/tct-contact-tizen-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-content-tizen-tests" launcher="WRTLauncher" category="Tizen Web Device APIs">\r
-    <auto_tcn>245</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>245</total_tcn>\r
-    <pkg_name>common/tct-content-tizen-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-gumallow-w3c-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
-    <auto_tcn>6</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>6</total_tcn>\r
-    <pkg_name>common/tct-gumallow-w3c-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-notification-w3c-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
-    <auto_tcn>14</auto_tcn>\r
-    <manual_tcn>3</manual_tcn>\r
-    <total_tcn>17</total_tcn>\r
-    <pkg_name>mobile/tct-notification-w3c-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-sp01-wrt-tests" launcher="WRTLauncher -iu" category="Web Runtime">\r
-    <auto_tcn>4</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>4</total_tcn>\r
-    <pkg_name>common/tct-sp01-wrt-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-widget02-w3c-tests" category="W3C/HTML5 APIs">\r
-    <auto_tcn>68</auto_tcn>\r
-    <manual_tcn>82</manual_tcn>\r
-    <total_tcn>150</total_tcn>\r
-    <pkg_name>mobile/tct-widget02-w3c-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-websetting-tizen-tests" launcher="WRTLauncher" category="Tizen Web Device APIs">\r
-    <auto_tcn>22</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>22</total_tcn>\r
-    <pkg_name>mobile/tct-websetting-tizen-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-audio-html5-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
-    <auto_tcn>333</auto_tcn>\r
-    <manual_tcn>1</manual_tcn>\r
-    <total_tcn>334</total_tcn>\r
-    <pkg_name>mobile/tct-audio-html5-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-screenorientation-w3c-tests" launcher="xwalk" category="W3C/HTML5 APIs">\r
-    <auto_tcn>17</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>17</total_tcn>\r
-    <pkg_name>mobile/tct-screenorientation-w3c-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-rt02-wrt-tests" category="Web Runtime">\r
-    <auto_tcn>3</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>3</total_tcn>\r
-    <pkg_name>common/tct-rt02-wrt-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-sp02-wrt-tests" category="Web Runtime">\r
-    <auto_tcn>1</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>1</total_tcn>\r
-    <pkg_name>common/tct-sp02-wrt-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-sound-tizen-tests" launcher="WRTLauncher" category="Tizen Web Device APIs">\r
-    <auto_tcn>52</auto_tcn>\r
-    <manual_tcn>8</manual_tcn>\r
-    <total_tcn>60</total_tcn>\r
-    <pkg_name>mobile/tct-sound-tizen-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-ext02-wrt-tests" category="Web Runtime">\r
-    <auto_tcn>8</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>8</total_tcn>\r
-    <pkg_name>common/tct-ext02-wrt-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-application-tizen-tests" launcher="WRTLauncher" category="Tizen Web Device APIs">\r
-    <auto_tcn>184</auto_tcn>\r
-    <manual_tcn>8</manual_tcn>\r
-    <total_tcn>192</total_tcn>\r
-    <pkg_name>mobile/tct-application-tizen-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-bluetooth-tizen-tests" launcher="WRTLauncher" category="Tizen Web Device APIs">\r
-    <auto_tcn>257</auto_tcn>\r
-    <manual_tcn>142</manual_tcn>\r
-    <total_tcn>399</total_tcn>\r
-    <pkg_name>mobile/tct-bluetooth-tizen-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-humanactivitymonitor-tizen-tests" launcher="WRTLauncher" category="Tizen Web Device APIs">\r
-    <auto_tcn>61</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>61</total_tcn>\r
-    <pkg_name>mobile/tct-humanactivitymonitor-tizen-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-fonts-css3-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
-    <auto_tcn>11</auto_tcn>\r
-    <manual_tcn>131</manual_tcn>\r
-    <total_tcn>142</total_tcn>\r
-    <pkg_name>common/tct-fonts-css3-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-speech-w3c-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
-    <auto_tcn>40</auto_tcn>\r
-    <manual_tcn>1</manual_tcn>\r
-    <total_tcn>41</total_tcn>\r
-    <pkg_name>common/tct-speech-w3c-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-security-tcs-tests" launcher="WRTLauncher" category="Compliance">\r
-    <auto_tcn>3</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>3</total_tcn>\r
-    <pkg_name>common/tct-security-tcs-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-ui01-wrt-tests" launcher="WRTLauncher -iu" category="Web Runtime">\r
-    <auto_tcn>30</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>30</total_tcn>\r
-    <pkg_name>mobile/tct-ui01-wrt-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-animationtiming-w3c-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
-    <auto_tcn>11</auto_tcn>\r
-    <manual_tcn>7</manual_tcn>\r
-    <total_tcn>18</total_tcn>\r
-    <pkg_name>common/tct-animationtiming-w3c-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-selectorslevel2-w3c-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
-    <auto_tcn>30</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>30</total_tcn>\r
-    <pkg_name>common/tct-selectorslevel2-w3c-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-wgtapi01-w3c-tests" launcher="WRTLauncher -iu" category="W3C/HTML5 APIs">\r
-    <auto_tcn>107</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>107</total_tcn>\r
-    <pkg_name>common/tct-wgtapi01-w3c-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-inputdevice-tizen-tests" launcher="WRTLauncher" category="Tizen Web Device APIs">\r
-    <auto_tcn>19</auto_tcn>\r
-    <manual_tcn>1</manual_tcn>\r
-    <total_tcn>20</total_tcn>\r
-    <pkg_name>mobile/tct-inputdevice-tizen-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-webaudio-w3c-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
-    <auto_tcn>422</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>422</total_tcn>\r
-    <pkg_name>mobile/tct-webaudio-w3c-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-filewriterapi-w3c-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
-    <auto_tcn>106</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>106</total_tcn>\r
-    <pkg_name>mobile/tct-filewriterapi-w3c-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-sensor-tizen-tests" launcher="WRTLauncher" category="Tizen Web Device APIs">\r
-    <auto_tcn>119</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>119</total_tcn>\r
-    <pkg_name>mobile/tct-sensor-tizen-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-secureelement-tizen-tests" launcher="WRTLauncher" category="Tizen Web Device APIs">\r
-    <auto_tcn>71</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>71</total_tcn>\r
-    <pkg_name>mobile/tct-secureelement-tizen-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-power-tizen-tests" launcher="WRTLauncher" category="Tizen Web Device APIs">\r
-    <auto_tcn>50</auto_tcn>\r
-    <manual_tcn>6</manual_tcn>\r
-    <total_tcn>56</total_tcn>\r
-    <pkg_name>mobile/tct-power-tizen-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-appwgt-wrt-tests" category="Web Runtime">\r
-    <auto_tcn>7</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>7</total_tcn>\r
-    <pkg_name>common/tct-appwgt-wrt-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-privilege-tizen-tests" launcher="WRTLauncher" category="Tizen Web Device APIs">\r
-    <auto_tcn>65</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>65</total_tcn>\r
-    <pkg_name>common/tct-privilege-tizen-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-alarm-tizen-tests" launcher="WRTLauncher" category="Tizen Web Device APIs">\r
-    <auto_tcn>61</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>61</total_tcn>\r
-    <pkg_name>common/tct-alarm-tizen-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-touchevent-w3c-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
-    <auto_tcn>16</auto_tcn>\r
-    <manual_tcn>7</manual_tcn>\r
-    <total_tcn>23</total_tcn>\r
-    <pkg_name>mobile/tct-touchevent-w3c-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-wgtapi02-w3c-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
-    <auto_tcn>0</auto_tcn>\r
-    <manual_tcn>34</manual_tcn>\r
-    <total_tcn>34</total_tcn>\r
-    <pkg_name>common/tct-wgtapi02-w3c-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-archive-tizen-tests" launcher="WRTLauncher" category="Tizen Web Device APIs">\r
-    <auto_tcn>106</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>106</total_tcn>\r
-    <pkg_name>common/tct-archive-tizen-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-account-tizen-tests" launcher="WRTLauncher" category="Tizen Web Device APIs">\r
-    <auto_tcn>89</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>89</total_tcn>\r
-    <pkg_name>mobile/tct-account-tizen-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-tizen-tizen-tests" launcher="WRTLauncher" category="Tizen Web Device APIs">\r
-    <auto_tcn>81</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>81</total_tcn>\r
-    <pkg_name>common/tct-tizen-tizen-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-widget01-w3c-tests" launcher="WRTLauncher -iu" category="W3C/HTML5 APIs">\r
-    <auto_tcn>155</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>155</total_tcn>\r
-    <pkg_name>mobile/tct-widget01-w3c-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-bookmark-tizen-tests" launcher="WRTLauncher" category="Tizen Web Device APIs">\r
-    <auto_tcn>36</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>36</total_tcn>\r
-    <pkg_name>mobile/tct-bookmark-tizen-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-3dtransforms-css3-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
-    <auto_tcn>32</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>32</total_tcn>\r
-    <pkg_name>common/tct-3dtransforms-css3-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-geoallow-w3c-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
-    <auto_tcn>208</auto_tcn>\r
-    <manual_tcn>3</manual_tcn>\r
-    <total_tcn>211</total_tcn>\r
-    <pkg_name>mobile/tct-geoallow-w3c-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-calendar-tizen-tests" launcher="WRTLauncher" category="Tizen Web Device APIs">\r
-    <auto_tcn>354</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>354</total_tcn>\r
-    <pkg_name>mobile/tct-calendar-tizen-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-sessionhistory-html5-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
-    <auto_tcn>148</auto_tcn>\r
-    <manual_tcn>1</manual_tcn>\r
-    <total_tcn>149</total_tcn>\r
-    <pkg_name>common/tct-sessionhistory-html5-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-datacontrol-tizen-tests" launcher="WRTLauncher" category="Tizen Web Device APIs">\r
-    <auto_tcn>113</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>113</total_tcn>\r
-    <pkg_name>mobile/tct-datacontrol-tizen-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-appcontrol-tizen-tests" launcher="WRTLauncher" category="Tizen Web Device APIs">\r
-    <auto_tcn>5</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>5</total_tcn>\r
-    <pkg_name>mobile/tct-appcontrol-tizen-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-callhistory-tizen-tests" launcher="WRTLauncher" category="Tizen Web Device APIs">\r
-    <auto_tcn>80</auto_tcn>\r
-    <manual_tcn>27</manual_tcn>\r
-    <total_tcn>107</total_tcn>\r
-    <pkg_name>mobile/tct-callhistory-tizen-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-geodeny-w3c-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
-    <auto_tcn>0</auto_tcn>\r
-    <manual_tcn>3</manual_tcn>\r
-    <total_tcn>3</total_tcn>\r
-    <pkg_name>mobile/tct-geodeny-w3c-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-canvas-html5-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
-    <auto_tcn>846</auto_tcn>\r
-    <manual_tcn>18</manual_tcn>\r
-    <total_tcn>864</total_tcn>\r
-    <pkg_name>common/tct-canvas-html5-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-ui-css3-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
-    <auto_tcn>43</auto_tcn>\r
-    <manual_tcn>1</manual_tcn>\r
-    <total_tcn>44</total_tcn>\r
-    <pkg_name>common/tct-ui-css3-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-testconfig" launcher="WRTLauncher">\r
-    <auto_tcn>0</auto_tcn>\r
-    <manual_tcn>20</manual_tcn>\r
-    <total_tcn>20</total_tcn>\r
-    <pkg_name>common/tct-testconfig-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-selectorslevel1-w3c-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
-    <auto_tcn>78</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>78</total_tcn>\r
-    <pkg_name>common/tct-selectorslevel1-w3c-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-sse-w3c-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
-    <auto_tcn>68</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>68</total_tcn>\r
-    <pkg_name>mobile/tct-sse-w3c-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-widgetpolicy-w3c-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
-    <auto_tcn>0</auto_tcn>\r
-    <manual_tcn>33</manual_tcn>\r
-    <total_tcn>33</total_tcn>\r
-    <pkg_name>common/tct-widgetpolicy-w3c-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-batterystatus-w3c-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
-    <auto_tcn>23</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>23</total_tcn>\r
-    <pkg_name>mobile/tct-batterystatus-w3c-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-mediacontroller-tizen-tests" launcher="WRTLauncher" category="Tizen Web Device APIs">\r
-    <auto_tcn>162</auto_tcn>\r
-    <manual_tcn>3</manual_tcn>\r
-    <total_tcn>165</total_tcn>\r
-    <pkg_name>mobile/tct-mediacontroller-tizen-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-webuifw-tests03" category="Web UI Framework">\r
-    <auto_tcn>179</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>179</total_tcn>\r
-    <pkg_name>mobile/tct-webuifw-tests03-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-maxLength-wrt-tests" launcher="WRTLauncher -iu" category="Web Runtime">\r
-    <auto_tcn>14</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>14</total_tcn>\r
-    <pkg_name>common/tct-maxLength-wrt-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-webuifw-tests04" category="Web UI Framework">\r
-    <auto_tcn>375</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>375</total_tcn>\r
-    <pkg_name>mobile/tct-webuifw-tests04-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-systeminfo-tizen-tests" launcher="WRTLauncher" category="Tizen Web Device APIs">\r
-    <auto_tcn>304</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>304</total_tcn>\r
-    <pkg_name>mobile/tct-systeminfo-tizen-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-webuifw-tests05" category="Web UI Framework">\r
-    <auto_tcn>322</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>322</total_tcn>\r
-    <pkg_name>mobile/tct-webuifw-tests05-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-filesystem-tizen-tests" launcher="WRTLauncher" category="Tizen Web Device APIs">\r
-    <auto_tcn>289</auto_tcn>\r
-    <manual_tcn>3</manual_tcn>\r
-    <total_tcn>292</total_tcn>\r
-    <pkg_name>mobile/tct-filesystem-tizen-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-webuifw-tests06" category="Web UI Framework">\r
-    <auto_tcn>98</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>98</total_tcn>\r
-    <pkg_name>mobile/tct-webuifw-tests06-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-webuifw-tests01" category="Web UI Framework">\r
-    <auto_tcn>355</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>355</total_tcn>\r
-    <pkg_name>mobile/tct-webuifw-tests01-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-webuifw-tests02" category="Web UI Framework">\r
-    <auto_tcn>455</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>455</total_tcn>\r
-    <pkg_name>mobile/tct-webuifw-tests02-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-vibration-w3c-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
-    <auto_tcn>2</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>2</total_tcn>\r
-    <pkg_name>mobile/tct-vibration-w3c-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-messaging-sms-tizen-tests" launcher="WRTLauncher" category="Tizen Web Device APIs">\r
-    <auto_tcn>184</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>184</total_tcn>\r
-    <pkg_name>mobile/tct-messaging-sms-tizen-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-text-css3-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
-    <auto_tcn>27</auto_tcn>\r
-    <manual_tcn>15</manual_tcn>\r
-    <total_tcn>42</total_tcn>\r
-    <pkg_name>common/tct-text-css3-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-stab-wrt-tests" category="Web Runtime">\r
-    <auto_tcn>1</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>1</total_tcn>\r
-    <pkg_name>common/tct-stab-wrt-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-webstorage-w3c-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
-    <auto_tcn>177</auto_tcn>\r
-    <manual_tcn>4</manual_tcn>\r
-    <total_tcn>181</total_tcn>\r
-    <pkg_name>common/tct-webstorage-w3c-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-behavior-tests">\r
-    <auto_tcn>0</auto_tcn>\r
-    <manual_tcn>30</manual_tcn>\r
-    <total_tcn>30</total_tcn>\r
-    <pkg_name>mobile/tct-behavior-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-download-tizen-tests" launcher="WRTLauncher" category="Tizen Web Device APIs">\r
-    <auto_tcn>62</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>62</total_tcn>\r
-    <pkg_name>common/tct-download-tizen-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-mediaqueries-css3-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
-    <auto_tcn>49</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>49</total_tcn>\r
-    <pkg_name>mobile/tct-mediaqueries-css3-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-systemsetting-tizen-tests" launcher="WRTLauncher" category="Tizen Web Device APIs">\r
-    <auto_tcn>33</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>33</total_tcn>\r
-    <pkg_name>mobile/tct-systemsetting-tizen-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-backgrounds-css3-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
-    <auto_tcn>541</auto_tcn>\r
-    <manual_tcn>74</manual_tcn>\r
-    <total_tcn>615</total_tcn>\r
-    <pkg_name>mobile/tct-backgrounds-css3-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-video-html5-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
-    <auto_tcn>361</auto_tcn>\r
-    <manual_tcn>4</manual_tcn>\r
-    <total_tcn>365</total_tcn>\r
-    <pkg_name>mobile/tct-video-html5-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-pm-wrt-tests" category="Web Runtime">\r
-    <auto_tcn>24</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>24</total_tcn>\r
-    <pkg_name>common/tct-pm-wrt-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-webgl-nonw3c-tests" launcher="WRTLauncher" category="Supplementary APIs">\r
-    <auto_tcn>889</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>889</total_tcn>\r
-    <pkg_name>common/tct-webgl-nonw3c-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-</ns3:testplan>\r
-\r
diff --git a/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/manager/plan/Full_mobile.xml b/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/manager/plan/Full_mobile.xml
deleted file mode 100755 (executable)
index a4f2e12..0000000
+++ /dev/null
@@ -1,755 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>\r
-<ns3:testplan xmlns:ns3="http://www.example.org/plan/" xmlns="" name="Full_mobile" profile="mobile">\r
-  <execute_type>All</execute_type>\r
-  <suite name="tct-webdatabase-w3c-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
-    <auto_tcn>247</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>247</total_tcn>\r
-    <pkg_name>mobile/tct-webdatabase-w3c-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-jsenhance-html5-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
-    <auto_tcn>49</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>49</total_tcn>\r
-    <pkg_name>common/tct-jsenhance-html5-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-multicolumn-css3-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
-    <auto_tcn>141</auto_tcn>\r
-    <manual_tcn>18</manual_tcn>\r
-    <total_tcn>159</total_tcn>\r
-    <pkg_name>mobile/tct-multicolumn-css3-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-messaging-mms-tizen-tests" launcher="WRTLauncher" category="Tizen Web Device APIs">\r
-    <auto_tcn>123</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>123</total_tcn>\r
-    <pkg_name>mobile/tct-messaging-mms-tizen-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-workers-w3c-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
-    <auto_tcn>85</auto_tcn>\r
-    <manual_tcn>1</manual_tcn>\r
-    <total_tcn>86</total_tcn>\r
-    <pkg_name>mobile/tct-workers-w3c-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-transitions-css3-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
-    <auto_tcn>26</auto_tcn>\r
-    <manual_tcn>5</manual_tcn>\r
-    <total_tcn>31</total_tcn>\r
-    <pkg_name>common/tct-transitions-css3-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-namespace-tizen-tests" launcher="WRTLauncher" category="Tizen Web Device APIs">\r
-    <auto_tcn>23</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>23</total_tcn>\r
-    <pkg_name>common/tct-namespace-tizen-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-messaging-email-tizen-tests" launcher="WRTLauncher" category="Tizen Web Device APIs">\r
-    <auto_tcn>308</auto_tcn>\r
-    <manual_tcn>1</manual_tcn>\r
-    <total_tcn>309</total_tcn>\r
-    <pkg_name>mobile/tct-messaging-email-tizen-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-2dtransforms-css3-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
-    <auto_tcn>34</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>34</total_tcn>\r
-    <pkg_name>common/tct-2dtransforms-css3-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-time-tizen-tests" launcher="WRTLauncher" category="Tizen Web Device APIs">\r
-    <auto_tcn>470</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>470</total_tcn>\r
-    <pkg_name>mobile/tct-time-tizen-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-forms-html5-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
-    <auto_tcn>151</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>151</total_tcn>\r
-    <pkg_name>mobile/tct-forms-html5-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-capability-tests" launcher="WRTLauncher" category="Compliance">\r
-    <auto_tcn>15</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>15</total_tcn>\r
-    <pkg_name>common/tct-capability-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-fileapi-w3c-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
-    <auto_tcn>98</auto_tcn>\r
-    <manual_tcn>3</manual_tcn>\r
-    <total_tcn>101</total_tcn>\r
-    <pkg_name>mobile/tct-fileapi-w3c-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-mediacapture-w3c-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
-    <auto_tcn>7</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>7</total_tcn>\r
-    <pkg_name>common/tct-mediacapture-w3c-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-ext01-wrt-tests" launcher="WRTLauncher -iu" category="Web Runtime">\r
-    <auto_tcn>3</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>3</total_tcn>\r
-    <pkg_name>mobile/tct-ext01-wrt-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-exif-tizen-tests" launcher="WRTLauncher" category="Tizen Web Device APIs">\r
-    <auto_tcn>64</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>64</total_tcn>\r
-    <pkg_name>common/tct-exif-tizen-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-csp-w3c-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
-    <auto_tcn>133</auto_tcn>\r
-    <manual_tcn>78</manual_tcn>\r
-    <total_tcn>211</total_tcn>\r
-    <pkg_name>mobile/tct-csp-w3c-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-privilege-wrt-tests" category="Web Runtime">\r
-    <auto_tcn>155</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>155</total_tcn>\r
-    <pkg_name>mobile/tct-privilege-wrt-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-mediakey-tizen-tests" launcher="WRTLauncher" category="Tizen Web Device APIs">\r
-    <auto_tcn>11</auto_tcn>\r
-    <manual_tcn>4</manual_tcn>\r
-    <total_tcn>15</total_tcn>\r
-    <pkg_name>mobile/tct-mediakey-tizen-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-deviceorientation-w3c-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
-    <auto_tcn>37</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>37</total_tcn>\r
-    <pkg_name>mobile/tct-deviceorientation-w3c-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-webmessaging-w3c-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
-    <auto_tcn>176</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>176</total_tcn>\r
-    <pkg_name>mobile/tct-webmessaging-w3c-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-package-tizen-tests" launcher="WRTLauncher" category="Tizen Web Device APIs">\r
-    <auto_tcn>54</auto_tcn>\r
-    <manual_tcn>12</manual_tcn>\r
-    <total_tcn>66</total_tcn>\r
-    <pkg_name>common/tct-package-tizen-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-notification-tizen-tests" launcher="WRTLauncher" category="Tizen Web Device APIs">\r
-    <auto_tcn>93</auto_tcn>\r
-    <manual_tcn>1</manual_tcn>\r
-    <total_tcn>94</total_tcn>\r
-    <pkg_name>mobile/tct-notification-tizen-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-fmradio-tizen-tests" launcher="WRTLauncher" category="Tizen Web Device APIs">\r
-    <auto_tcn>67</auto_tcn>\r
-    <manual_tcn>7</manual_tcn>\r
-    <total_tcn>74</total_tcn>\r
-    <pkg_name>mobile/tct-fmradio-tizen-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-rt01-wrt-tests" launcher="WRTLauncher -iu" category="Web Runtime">\r
-    <auto_tcn>12</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>12</total_tcn>\r
-    <pkg_name>common/tct-rt01-wrt-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-appcache-html5-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
-    <auto_tcn>36</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>36</total_tcn>\r
-    <pkg_name>mobile/tct-appcache-html5-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-filesystemapi-w3c-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
-    <auto_tcn>208</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>208</total_tcn>\r
-    <pkg_name>mobile/tct-filesystemapi-w3c-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-svg-html5-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
-    <auto_tcn>3</auto_tcn>\r
-    <manual_tcn>9</manual_tcn>\r
-    <total_tcn>12</total_tcn>\r
-    <pkg_name>common/tct-svg-html5-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-websocket-w3c-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
-    <auto_tcn>270</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>270</total_tcn>\r
-    <pkg_name>mobile/tct-websocket-w3c-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-flexiblebox-css3-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
-    <auto_tcn>25</auto_tcn>\r
-    <manual_tcn>28</manual_tcn>\r
-    <total_tcn>53</total_tcn>\r
-    <pkg_name>common/tct-flexiblebox-css3-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-dnd-html5-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
-    <auto_tcn>6</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>6</total_tcn>\r
-    <pkg_name>mobile/tct-dnd-html5-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-extra-html5-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
-    <auto_tcn>548</auto_tcn>\r
-    <manual_tcn>25</manual_tcn>\r
-    <total_tcn>573</total_tcn>\r
-    <pkg_name>mobile/tct-extra-html5-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-fullscreen-nonw3c-tests" launcher="WRTLauncher" category="Supplementary APIs">\r
-    <auto_tcn>16</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>16</total_tcn>\r
-    <pkg_name>mobile/tct-fullscreen-nonw3c-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-colors-css3-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
-    <auto_tcn>46</auto_tcn>\r
-    <manual_tcn>29</manual_tcn>\r
-    <total_tcn>75</total_tcn>\r
-    <pkg_name>common/tct-colors-css3-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-indexeddb-w3c-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
-    <auto_tcn>400</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>400</total_tcn>\r
-    <pkg_name>mobile/tct-indexeddb-w3c-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-sandbox-html5-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
-    <auto_tcn>72</auto_tcn>\r
-    <manual_tcn>1</manual_tcn>\r
-    <total_tcn>73</total_tcn>\r
-    <pkg_name>common/tct-sandbox-html5-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-networkbearerselection-tizen-tests" launcher="WRTLauncher" category="Tizen Web Device APIs">\r
-    <auto_tcn>24</auto_tcn>\r
-    <manual_tcn>1</manual_tcn>\r
-    <total_tcn>25</total_tcn>\r
-    <pkg_name>mobile/tct-networkbearerselection-tizen-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-push-tizen-tests" launcher="WRTLauncher" category="Tizen Web Device APIs">\r
-    <auto_tcn>41</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>41</total_tcn>\r
-    <pkg_name>common/tct-push-tizen-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-messageport-tizen-tests" launcher="WRTLauncher" category="Tizen Web Device APIs">\r
-    <auto_tcn>48</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>48</total_tcn>\r
-    <pkg_name>mobile/tct-messageport-tizen-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-browserstate-html5-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
-    <auto_tcn>3</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>3</total_tcn>\r
-    <pkg_name>mobile/tct-browserstate-html5-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-cors-w3c-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
-    <auto_tcn>10</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>10</total_tcn>\r
-    <pkg_name>common/tct-cors-w3c-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-xmlhttprequest-w3c-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
-    <auto_tcn>262</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>262</total_tcn>\r
-    <pkg_name>mobile/tct-xmlhttprequest-w3c-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-navigationtiming-w3c-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
-    <auto_tcn>45</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>45</total_tcn>\r
-    <pkg_name>mobile/tct-navigationtiming-w3c-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-typedarrays-nonw3c-tests" launcher="WRTLauncher" category="Supplementary APIs">\r
-    <auto_tcn>80</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>80</total_tcn>\r
-    <pkg_name>common/tct-typedarrays-nonw3c-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-animations-css3-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
-    <auto_tcn>24</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>24</total_tcn>\r
-    <pkg_name>common/tct-animations-css3-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-badge-tizen-tests" launcher="WRTLauncher" category="Tizen Web Device APIs">\r
-    <auto_tcn>26</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>26</total_tcn>\r
-    <pkg_name>mobile/tct-badge-tizen-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-nfc-tizen-tests" launcher="WRTLauncher" category="Tizen Web Device APIs">\r
-    <auto_tcn>195</auto_tcn>\r
-    <manual_tcn>35</manual_tcn>\r
-    <total_tcn>230</total_tcn>\r
-    <pkg_name>mobile/tct-nfc-tizen-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-pagevisibility-w3c-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
-    <auto_tcn>18</auto_tcn>\r
-    <manual_tcn>2</manual_tcn>\r
-    <total_tcn>20</total_tcn>\r
-    <pkg_name>mobile/tct-pagevisibility-w3c-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-contact-tizen-tests" launcher="WRTLauncher" category="Tizen Web Device APIs">\r
-    <auto_tcn>441</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>441</total_tcn>\r
-    <pkg_name>mobile/tct-contact-tizen-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-content-tizen-tests" launcher="WRTLauncher" category="Tizen Web Device APIs">\r
-    <auto_tcn>245</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>245</total_tcn>\r
-    <pkg_name>common/tct-content-tizen-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-gumallow-w3c-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
-    <auto_tcn>6</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>6</total_tcn>\r
-    <pkg_name>common/tct-gumallow-w3c-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-notification-w3c-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
-    <auto_tcn>14</auto_tcn>\r
-    <manual_tcn>3</manual_tcn>\r
-    <total_tcn>17</total_tcn>\r
-    <pkg_name>mobile/tct-notification-w3c-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-sp01-wrt-tests" launcher="WRTLauncher -iu" category="Web Runtime">\r
-    <auto_tcn>4</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>4</total_tcn>\r
-    <pkg_name>common/tct-sp01-wrt-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-widget02-w3c-tests" category="W3C/HTML5 APIs">\r
-    <auto_tcn>68</auto_tcn>\r
-    <manual_tcn>82</manual_tcn>\r
-    <total_tcn>150</total_tcn>\r
-    <pkg_name>mobile/tct-widget02-w3c-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-websetting-tizen-tests" launcher="WRTLauncher" category="Tizen Web Device APIs">\r
-    <auto_tcn>22</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>22</total_tcn>\r
-    <pkg_name>mobile/tct-websetting-tizen-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-audio-html5-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
-    <auto_tcn>333</auto_tcn>\r
-    <manual_tcn>1</manual_tcn>\r
-    <total_tcn>334</total_tcn>\r
-    <pkg_name>mobile/tct-audio-html5-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-screenorientation-w3c-tests" launcher="xwalk" category="W3C/HTML5 APIs">\r
-    <auto_tcn>17</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>17</total_tcn>\r
-    <pkg_name>mobile/tct-screenorientation-w3c-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-rt02-wrt-tests" category="Web Runtime">\r
-    <auto_tcn>3</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>3</total_tcn>\r
-    <pkg_name>common/tct-rt02-wrt-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-sp02-wrt-tests" category="Web Runtime">\r
-    <auto_tcn>1</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>1</total_tcn>\r
-    <pkg_name>common/tct-sp02-wrt-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-sound-tizen-tests" launcher="WRTLauncher" category="Tizen Web Device APIs">\r
-    <auto_tcn>52</auto_tcn>\r
-    <manual_tcn>8</manual_tcn>\r
-    <total_tcn>60</total_tcn>\r
-    <pkg_name>mobile/tct-sound-tizen-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-ext02-wrt-tests" category="Web Runtime">\r
-    <auto_tcn>8</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>8</total_tcn>\r
-    <pkg_name>common/tct-ext02-wrt-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-application-tizen-tests" launcher="WRTLauncher" category="Tizen Web Device APIs">\r
-    <auto_tcn>184</auto_tcn>\r
-    <manual_tcn>8</manual_tcn>\r
-    <total_tcn>192</total_tcn>\r
-    <pkg_name>mobile/tct-application-tizen-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-bluetooth-tizen-tests" launcher="WRTLauncher" category="Tizen Web Device APIs">\r
-    <auto_tcn>257</auto_tcn>\r
-    <manual_tcn>142</manual_tcn>\r
-    <total_tcn>399</total_tcn>\r
-    <pkg_name>mobile/tct-bluetooth-tizen-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-humanactivitymonitor-tizen-tests" launcher="WRTLauncher" category="Tizen Web Device APIs">\r
-    <auto_tcn>61</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>61</total_tcn>\r
-    <pkg_name>mobile/tct-humanactivitymonitor-tizen-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-fonts-css3-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
-    <auto_tcn>11</auto_tcn>\r
-    <manual_tcn>131</manual_tcn>\r
-    <total_tcn>142</total_tcn>\r
-    <pkg_name>common/tct-fonts-css3-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-speech-w3c-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
-    <auto_tcn>40</auto_tcn>\r
-    <manual_tcn>1</manual_tcn>\r
-    <total_tcn>41</total_tcn>\r
-    <pkg_name>common/tct-speech-w3c-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-security-tcs-tests" launcher="WRTLauncher" category="Compliance">\r
-    <auto_tcn>3</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>3</total_tcn>\r
-    <pkg_name>common/tct-security-tcs-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-ui01-wrt-tests" launcher="WRTLauncher -iu" category="Web Runtime">\r
-    <auto_tcn>30</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>30</total_tcn>\r
-    <pkg_name>mobile/tct-ui01-wrt-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-animationtiming-w3c-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
-    <auto_tcn>11</auto_tcn>\r
-    <manual_tcn>7</manual_tcn>\r
-    <total_tcn>18</total_tcn>\r
-    <pkg_name>common/tct-animationtiming-w3c-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-selectorslevel2-w3c-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
-    <auto_tcn>30</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>30</total_tcn>\r
-    <pkg_name>common/tct-selectorslevel2-w3c-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-wgtapi01-w3c-tests" launcher="WRTLauncher -iu" category="W3C/HTML5 APIs">\r
-    <auto_tcn>107</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>107</total_tcn>\r
-    <pkg_name>common/tct-wgtapi01-w3c-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-inputdevice-tizen-tests" launcher="WRTLauncher" category="Tizen Web Device APIs">\r
-    <auto_tcn>19</auto_tcn>\r
-    <manual_tcn>1</manual_tcn>\r
-    <total_tcn>20</total_tcn>\r
-    <pkg_name>mobile/tct-inputdevice-tizen-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-webaudio-w3c-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
-    <auto_tcn>422</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>422</total_tcn>\r
-    <pkg_name>mobile/tct-webaudio-w3c-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-filewriterapi-w3c-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
-    <auto_tcn>106</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>106</total_tcn>\r
-    <pkg_name>mobile/tct-filewriterapi-w3c-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-sensor-tizen-tests" launcher="WRTLauncher" category="Tizen Web Device APIs">\r
-    <auto_tcn>119</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>119</total_tcn>\r
-    <pkg_name>mobile/tct-sensor-tizen-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-secureelement-tizen-tests" launcher="WRTLauncher" category="Tizen Web Device APIs">\r
-    <auto_tcn>71</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>71</total_tcn>\r
-    <pkg_name>mobile/tct-secureelement-tizen-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-power-tizen-tests" launcher="WRTLauncher" category="Tizen Web Device APIs">\r
-    <auto_tcn>50</auto_tcn>\r
-    <manual_tcn>6</manual_tcn>\r
-    <total_tcn>56</total_tcn>\r
-    <pkg_name>mobile/tct-power-tizen-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-appwgt-wrt-tests" category="Web Runtime">\r
-    <auto_tcn>7</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>7</total_tcn>\r
-    <pkg_name>common/tct-appwgt-wrt-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-privilege-tizen-tests" launcher="WRTLauncher" category="Tizen Web Device APIs">\r
-    <auto_tcn>65</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>65</total_tcn>\r
-    <pkg_name>common/tct-privilege-tizen-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-alarm-tizen-tests" launcher="WRTLauncher" category="Tizen Web Device APIs">\r
-    <auto_tcn>61</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>61</total_tcn>\r
-    <pkg_name>common/tct-alarm-tizen-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-touchevent-w3c-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
-    <auto_tcn>16</auto_tcn>\r
-    <manual_tcn>7</manual_tcn>\r
-    <total_tcn>23</total_tcn>\r
-    <pkg_name>mobile/tct-touchevent-w3c-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-wgtapi02-w3c-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
-    <auto_tcn>0</auto_tcn>\r
-    <manual_tcn>34</manual_tcn>\r
-    <total_tcn>34</total_tcn>\r
-    <pkg_name>common/tct-wgtapi02-w3c-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-archive-tizen-tests" launcher="WRTLauncher" category="Tizen Web Device APIs">\r
-    <auto_tcn>106</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>106</total_tcn>\r
-    <pkg_name>common/tct-archive-tizen-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-account-tizen-tests" launcher="WRTLauncher" category="Tizen Web Device APIs">\r
-    <auto_tcn>89</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>89</total_tcn>\r
-    <pkg_name>mobile/tct-account-tizen-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-tizen-tizen-tests" launcher="WRTLauncher" category="Tizen Web Device APIs">\r
-    <auto_tcn>81</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>81</total_tcn>\r
-    <pkg_name>common/tct-tizen-tizen-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-widget01-w3c-tests" launcher="WRTLauncher -iu" category="W3C/HTML5 APIs">\r
-    <auto_tcn>155</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>155</total_tcn>\r
-    <pkg_name>mobile/tct-widget01-w3c-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-bookmark-tizen-tests" launcher="WRTLauncher" category="Tizen Web Device APIs">\r
-    <auto_tcn>36</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>36</total_tcn>\r
-    <pkg_name>mobile/tct-bookmark-tizen-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-3dtransforms-css3-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
-    <auto_tcn>32</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>32</total_tcn>\r
-    <pkg_name>common/tct-3dtransforms-css3-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-geoallow-w3c-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
-    <auto_tcn>208</auto_tcn>\r
-    <manual_tcn>3</manual_tcn>\r
-    <total_tcn>211</total_tcn>\r
-    <pkg_name>mobile/tct-geoallow-w3c-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-calendar-tizen-tests" launcher="WRTLauncher" category="Tizen Web Device APIs">\r
-    <auto_tcn>354</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>354</total_tcn>\r
-    <pkg_name>mobile/tct-calendar-tizen-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-sessionhistory-html5-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
-    <auto_tcn>148</auto_tcn>\r
-    <manual_tcn>1</manual_tcn>\r
-    <total_tcn>149</total_tcn>\r
-    <pkg_name>common/tct-sessionhistory-html5-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-datacontrol-tizen-tests" launcher="WRTLauncher" category="Tizen Web Device APIs">\r
-    <auto_tcn>113</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>113</total_tcn>\r
-    <pkg_name>mobile/tct-datacontrol-tizen-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-appcontrol-tizen-tests" launcher="WRTLauncher" category="Tizen Web Device APIs">\r
-    <auto_tcn>5</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>5</total_tcn>\r
-    <pkg_name>mobile/tct-appcontrol-tizen-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-callhistory-tizen-tests" launcher="WRTLauncher" category="Tizen Web Device APIs">\r
-    <auto_tcn>80</auto_tcn>\r
-    <manual_tcn>27</manual_tcn>\r
-    <total_tcn>107</total_tcn>\r
-    <pkg_name>mobile/tct-callhistory-tizen-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-geodeny-w3c-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
-    <auto_tcn>0</auto_tcn>\r
-    <manual_tcn>3</manual_tcn>\r
-    <total_tcn>3</total_tcn>\r
-    <pkg_name>mobile/tct-geodeny-w3c-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-canvas-html5-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
-    <auto_tcn>846</auto_tcn>\r
-    <manual_tcn>18</manual_tcn>\r
-    <total_tcn>864</total_tcn>\r
-    <pkg_name>common/tct-canvas-html5-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-ui-css3-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
-    <auto_tcn>43</auto_tcn>\r
-    <manual_tcn>1</manual_tcn>\r
-    <total_tcn>44</total_tcn>\r
-    <pkg_name>common/tct-ui-css3-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-testconfig" launcher="WRTLauncher">\r
-    <auto_tcn>0</auto_tcn>\r
-    <manual_tcn>20</manual_tcn>\r
-    <total_tcn>20</total_tcn>\r
-    <pkg_name>common/tct-testconfig-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-selectorslevel1-w3c-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
-    <auto_tcn>78</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>78</total_tcn>\r
-    <pkg_name>common/tct-selectorslevel1-w3c-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-sse-w3c-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
-    <auto_tcn>68</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>68</total_tcn>\r
-    <pkg_name>mobile/tct-sse-w3c-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-widgetpolicy-w3c-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
-    <auto_tcn>0</auto_tcn>\r
-    <manual_tcn>33</manual_tcn>\r
-    <total_tcn>33</total_tcn>\r
-    <pkg_name>common/tct-widgetpolicy-w3c-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-batterystatus-w3c-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
-    <auto_tcn>23</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>23</total_tcn>\r
-    <pkg_name>mobile/tct-batterystatus-w3c-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-mediacontroller-tizen-tests" launcher="WRTLauncher" category="Tizen Web Device APIs">\r
-    <auto_tcn>162</auto_tcn>\r
-    <manual_tcn>3</manual_tcn>\r
-    <total_tcn>165</total_tcn>\r
-    <pkg_name>mobile/tct-mediacontroller-tizen-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-webuifw-tests03" category="Web UI Framework">\r
-    <auto_tcn>179</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>179</total_tcn>\r
-    <pkg_name>mobile/tct-webuifw-tests03-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-maxLength-wrt-tests" launcher="WRTLauncher -iu" category="Web Runtime">\r
-    <auto_tcn>14</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>14</total_tcn>\r
-    <pkg_name>common/tct-maxLength-wrt-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-webuifw-tests04" category="Web UI Framework">\r
-    <auto_tcn>375</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>375</total_tcn>\r
-    <pkg_name>mobile/tct-webuifw-tests04-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-systeminfo-tizen-tests" launcher="WRTLauncher" category="Tizen Web Device APIs">\r
-    <auto_tcn>304</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>304</total_tcn>\r
-    <pkg_name>mobile/tct-systeminfo-tizen-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-webuifw-tests05" category="Web UI Framework">\r
-    <auto_tcn>322</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>322</total_tcn>\r
-    <pkg_name>mobile/tct-webuifw-tests05-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-filesystem-tizen-tests" launcher="WRTLauncher" category="Tizen Web Device APIs">\r
-    <auto_tcn>289</auto_tcn>\r
-    <manual_tcn>3</manual_tcn>\r
-    <total_tcn>292</total_tcn>\r
-    <pkg_name>mobile/tct-filesystem-tizen-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-webuifw-tests06" category="Web UI Framework">\r
-    <auto_tcn>98</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>98</total_tcn>\r
-    <pkg_name>mobile/tct-webuifw-tests06-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-webuifw-tests01" category="Web UI Framework">\r
-    <auto_tcn>355</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>355</total_tcn>\r
-    <pkg_name>mobile/tct-webuifw-tests01-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-webuifw-tests02" category="Web UI Framework">\r
-    <auto_tcn>455</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>455</total_tcn>\r
-    <pkg_name>mobile/tct-webuifw-tests02-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-vibration-w3c-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
-    <auto_tcn>2</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>2</total_tcn>\r
-    <pkg_name>mobile/tct-vibration-w3c-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-messaging-sms-tizen-tests" launcher="WRTLauncher" category="Tizen Web Device APIs">\r
-    <auto_tcn>184</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>184</total_tcn>\r
-    <pkg_name>mobile/tct-messaging-sms-tizen-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-text-css3-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
-    <auto_tcn>27</auto_tcn>\r
-    <manual_tcn>15</manual_tcn>\r
-    <total_tcn>42</total_tcn>\r
-    <pkg_name>common/tct-text-css3-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-stab-wrt-tests" category="Web Runtime">\r
-    <auto_tcn>1</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>1</total_tcn>\r
-    <pkg_name>common/tct-stab-wrt-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-webstorage-w3c-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
-    <auto_tcn>177</auto_tcn>\r
-    <manual_tcn>4</manual_tcn>\r
-    <total_tcn>181</total_tcn>\r
-    <pkg_name>common/tct-webstorage-w3c-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-behavior-tests">\r
-    <auto_tcn>0</auto_tcn>\r
-    <manual_tcn>30</manual_tcn>\r
-    <total_tcn>30</total_tcn>\r
-    <pkg_name>mobile/tct-behavior-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-download-tizen-tests" launcher="WRTLauncher" category="Tizen Web Device APIs">\r
-    <auto_tcn>62</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>62</total_tcn>\r
-    <pkg_name>common/tct-download-tizen-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-mediaqueries-css3-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
-    <auto_tcn>49</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>49</total_tcn>\r
-    <pkg_name>mobile/tct-mediaqueries-css3-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-systemsetting-tizen-tests" launcher="WRTLauncher" category="Tizen Web Device APIs">\r
-    <auto_tcn>33</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>33</total_tcn>\r
-    <pkg_name>mobile/tct-systemsetting-tizen-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-backgrounds-css3-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
-    <auto_tcn>541</auto_tcn>\r
-    <manual_tcn>74</manual_tcn>\r
-    <total_tcn>615</total_tcn>\r
-    <pkg_name>mobile/tct-backgrounds-css3-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-video-html5-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
-    <auto_tcn>361</auto_tcn>\r
-    <manual_tcn>4</manual_tcn>\r
-    <total_tcn>365</total_tcn>\r
-    <pkg_name>mobile/tct-video-html5-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-pm-wrt-tests" category="Web Runtime">\r
-    <auto_tcn>24</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>24</total_tcn>\r
-    <pkg_name>common/tct-pm-wrt-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-webgl-nonw3c-tests" launcher="WRTLauncher" category="Supplementary APIs">\r
-    <auto_tcn>889</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>889</total_tcn>\r
-    <pkg_name>common/tct-webgl-nonw3c-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-</ns3:testplan>\r
-\r
diff --git a/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/manager/plan/Full_tv.xml b/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/manager/plan/Full_tv.xml
deleted file mode 100755 (executable)
index ffee850..0000000
+++ /dev/null
@@ -1,653 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>\r
-<ns3:testplan xmlns:ns3="http://www.example.org/plan/" xmlns="" name="Full_tv" profile="tv">\r
-  <execute_type>All</execute_type>\r
-  <suite name="tct-jsenhance-html5-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
-    <auto_tcn>49</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>49</total_tcn>\r
-    <pkg_name>common/tct-jsenhance-html5-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-multicolumn-css3-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
-    <auto_tcn>141</auto_tcn>\r
-    <manual_tcn>18</manual_tcn>\r
-    <total_tcn>159</total_tcn>\r
-    <pkg_name>tv/tct-multicolumn-css3-tests-2.3.1.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-workers-w3c-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
-    <auto_tcn>85</auto_tcn>\r
-    <manual_tcn>1</manual_tcn>\r
-    <total_tcn>86</total_tcn>\r
-    <pkg_name>tv/tct-workers-w3c-tests-2.3.1.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-namespace-tizen-tests" launcher="WRTLauncher" category="Tizen Web Device APIs">\r
-    <auto_tcn>23</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>23</total_tcn>\r
-    <pkg_name>common/tct-namespace-tizen-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-transitions-css3-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
-    <auto_tcn>26</auto_tcn>\r
-    <manual_tcn>5</manual_tcn>\r
-    <total_tcn>31</total_tcn>\r
-    <pkg_name>common/tct-transitions-css3-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-2dtransforms-css3-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
-    <auto_tcn>34</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>34</total_tcn>\r
-    <pkg_name>common/tct-2dtransforms-css3-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-time-tizen-tests" launcher="WRTLauncher" category="Tizen Web Device APIs">\r
-    <auto_tcn>459</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>459</total_tcn>\r
-    <pkg_name>tv/tct-time-tizen-tests-2.4-1.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-forms-html5-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
-    <auto_tcn>146</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>146</total_tcn>\r
-    <pkg_name>tv/tct-forms-html5-tests-2.3.1.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-capability-tests" launcher="WRTLauncher" category="Compliance">\r
-    <auto_tcn>15</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>15</total_tcn>\r
-    <pkg_name>common/tct-capability-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-fileapi-w3c-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
-    <auto_tcn>97</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>97</total_tcn>\r
-    <pkg_name>tv/tct-fileapi-w3c-tests-2.3.1.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-mediacapture-w3c-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
-    <auto_tcn>7</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>7</total_tcn>\r
-    <pkg_name>common/tct-mediacapture-w3c-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-ext01-wrt-tests" launcher="WRTLauncher -iu" category="Web Runtime">\r
-    <auto_tcn>2</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>2</total_tcn>\r
-    <pkg_name>tv/tct-ext01-wrt-tests-2.3-1.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-tv-channel-tizen-tests" launcher="WRTLauncher" category="Tizen Web Device APIs">\r
-    <auto_tcn>123</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>123</total_tcn>\r
-    <pkg_name>tv/tct-tv-channel-tizen-tests-2.4-1.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-exif-tizen-tests" launcher="WRTLauncher" category="Tizen Web Device APIs">\r
-    <auto_tcn>63</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>63</total_tcn>\r
-    <pkg_name>common/tct-exif-tizen-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-csp-w3c-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
-    <auto_tcn>133</auto_tcn>\r
-    <manual_tcn>78</manual_tcn>\r
-    <total_tcn>211</total_tcn>\r
-    <pkg_name>common/tct-csp-w3c-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-mediakey-tizen-tests" launcher="WRTLauncher" category="Tizen Web Device APIs">\r
-    <auto_tcn>11</auto_tcn>\r
-    <manual_tcn>4</manual_tcn>\r
-    <total_tcn>15</total_tcn>\r
-    <pkg_name>common/tct-mediakey-tizen-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-deviceorientation-w3c-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
-    <auto_tcn>37</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>37</total_tcn>\r
-    <pkg_name>common/tct-deviceorientation-w3c-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-webmessaging-w3c-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
-    <auto_tcn>175</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>175</total_tcn>\r
-    <pkg_name>tv/tct-webmessaging-w3c-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-package-tizen-tests" launcher="WRTLauncher" category="Tizen Web Device APIs">\r
-    <auto_tcn>54</auto_tcn>\r
-    <manual_tcn>12</manual_tcn>\r
-    <total_tcn>66</total_tcn>\r
-    <pkg_name>common/tct-package-tizen-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-appcache-html5-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
-    <auto_tcn>36</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>36</total_tcn>\r
-    <pkg_name>tv/tct-appcache-html5-tests-2.3.1.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-rt01-wrt-tests" launcher="WRTLauncher -iu" category="Web Runtime">\r
-    <auto_tcn>12</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>12</total_tcn>\r
-    <pkg_name>common/tct-rt01-wrt-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-svg-html5-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
-    <auto_tcn>3</auto_tcn>\r
-    <manual_tcn>9</manual_tcn>\r
-    <total_tcn>12</total_tcn>\r
-    <pkg_name>common/tct-svg-html5-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-flexiblebox-css3-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
-    <auto_tcn>25</auto_tcn>\r
-    <manual_tcn>28</manual_tcn>\r
-    <total_tcn>53</total_tcn>\r
-    <pkg_name>common/tct-flexiblebox-css3-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-websocket-w3c-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
-    <auto_tcn>268</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>268</total_tcn>\r
-    <pkg_name>tv/tct-websocket-w3c-tests-2.3.1.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-extra-html5-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
-    <auto_tcn>544</auto_tcn>\r
-    <manual_tcn>25</manual_tcn>\r
-    <total_tcn>569</total_tcn>\r
-    <pkg_name>tv/tct-extra-html5-tests-2.3.1.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-dnd-html5-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
-    <auto_tcn>6</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>6</total_tcn>\r
-    <pkg_name>common/tct-dnd-html5-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-fullscreen-nonw3c-tests" launcher="WRTLauncher" category="Supplementary APIs">\r
-    <auto_tcn>16</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>16</total_tcn>\r
-    <pkg_name>tv/tct-fullscreen-nonw3c-tests-2.3.1.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-colors-css3-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
-    <auto_tcn>46</auto_tcn>\r
-    <manual_tcn>29</manual_tcn>\r
-    <total_tcn>75</total_tcn>\r
-    <pkg_name>common/tct-colors-css3-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-indexeddb-w3c-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
-    <auto_tcn>391</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>391</total_tcn>\r
-    <pkg_name>tv/tct-indexeddb-w3c-tests-2.3.1.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-sandbox-html5-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
-    <auto_tcn>72</auto_tcn>\r
-    <manual_tcn>1</manual_tcn>\r
-    <total_tcn>73</total_tcn>\r
-    <pkg_name>common/tct-sandbox-html5-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-messageport-tizen-tests" launcher="WRTLauncher" category="Tizen Web Device APIs">\r
-    <auto_tcn>48</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>48</total_tcn>\r
-    <pkg_name>common/tct-messageport-tizen-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-browserstate-html5-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
-    <auto_tcn>3</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>3</total_tcn>\r
-    <pkg_name>tv/tct-browserstate-html5-tests-2.3.1.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-cors-w3c-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
-    <auto_tcn>10</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>10</total_tcn>\r
-    <pkg_name>common/tct-cors-w3c-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-xmlhttprequest-w3c-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
-    <auto_tcn>202</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>202</total_tcn>\r
-    <pkg_name>tv/tct-xmlhttprequest-w3c-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-navigationtiming-w3c-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
-    <auto_tcn>45</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>45</total_tcn>\r
-    <pkg_name>tv/tct-navigationtiming-w3c-tests-2.3.1.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-typedarrays-nonw3c-tests" launcher="WRTLauncher" category="Supplementary APIs">\r
-    <auto_tcn>80</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>80</total_tcn>\r
-    <pkg_name>common/tct-typedarrays-nonw3c-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-animations-css3-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
-    <auto_tcn>24</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>24</total_tcn>\r
-    <pkg_name>common/tct-animations-css3-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-badge-tizen-tests" launcher="WRTLauncher" category="Tizen Web Device APIs">\r
-    <auto_tcn>26</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>26</total_tcn>\r
-    <pkg_name>common/tct-badge-tizen-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-pagevisibility-w3c-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
-    <auto_tcn>18</auto_tcn>\r
-    <manual_tcn>2</manual_tcn>\r
-    <total_tcn>20</total_tcn>\r
-    <pkg_name>tv/tct-pagevisibility-w3c-tests-2.3.1.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-content-tizen-tests" launcher="WRTLauncher" category="Tizen Web Device APIs">\r
-    <auto_tcn>230</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>230</total_tcn>\r
-    <pkg_name>common/tct-content-tizen-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-gumallow-w3c-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
-    <auto_tcn>6</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>6</total_tcn>\r
-    <pkg_name>common/tct-gumallow-w3c-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-notification-w3c-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
-    <auto_tcn>14</auto_tcn>\r
-    <manual_tcn>3</manual_tcn>\r
-    <total_tcn>17</total_tcn>\r
-    <pkg_name>tv/tct-notification-w3c-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-tv-displaycontrol-tizen-tests" launcher="WRTLauncher" category="Tizen Web Device APIs">\r
-    <auto_tcn>20</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>20</total_tcn>\r
-    <pkg_name>tv/tct-tv-displaycontrol-tizen-tests-2.4-1.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-sp01-wrt-tests" launcher="WRTLauncher -iu" category="Web Runtime">\r
-    <auto_tcn>4</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>4</total_tcn>\r
-    <pkg_name>common/tct-sp01-wrt-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-widget02-w3c-tests" category="W3C/HTML5 APIs">\r
-    <auto_tcn>18</auto_tcn>\r
-    <manual_tcn>51</manual_tcn>\r
-    <total_tcn>69</total_tcn>\r
-    <pkg_name>tv/tct-widget02-w3c-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-websetting-tizen-tests" launcher="WRTLauncher" category="Tizen Web Device APIs">\r
-    <auto_tcn>22</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>22</total_tcn>\r
-    <pkg_name>tv/tct-websetting-tizen-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-audio-html5-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
-    <auto_tcn>338</auto_tcn>\r
-    <manual_tcn>1</manual_tcn>\r
-    <total_tcn>339</total_tcn>\r
-    <pkg_name>common/tct-audio-html5-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-screenorientation-w3c-tests" launcher="xwalk" category="W3C/HTML5 APIs">\r
-    <auto_tcn>17</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>17</total_tcn>\r
-    <pkg_name>tv/tct-screenorientation-w3c-tests-2.3.1.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-sp02-wrt-tests" category="Web Runtime">\r
-    <auto_tcn>1</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>1</total_tcn>\r
-    <pkg_name>common/tct-sp02-wrt-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-sound-tizen-tests" launcher="WRTLauncher" category="Tizen Web Device APIs">\r
-    <auto_tcn>52</auto_tcn>\r
-    <manual_tcn>8</manual_tcn>\r
-    <total_tcn>60</total_tcn>\r
-    <pkg_name>common/tct-sound-tizen-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-rt02-wrt-tests" category="Web Runtime">\r
-    <auto_tcn>3</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>3</total_tcn>\r
-    <pkg_name>common/tct-rt02-wrt-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-ext02-wrt-tests" category="Web Runtime">\r
-    <auto_tcn>8</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>8</total_tcn>\r
-    <pkg_name>common/tct-ext02-wrt-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-application-tizen-tests" launcher="WRTLauncher" category="Tizen Web Device APIs">\r
-    <auto_tcn>159</auto_tcn>\r
-    <manual_tcn>6</manual_tcn>\r
-    <total_tcn>165</total_tcn>\r
-    <pkg_name>tv/tct-application-tizen-tests-2.3-1.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-humanactivitymonitor-tizen-tests" launcher="WRTLauncher" category="Tizen Web Device APIs">\r
-    <auto_tcn>47</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>47</total_tcn>\r
-    <pkg_name>common/tct-humanactivitymonitor-tizen-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-fonts-css3-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
-    <auto_tcn>11</auto_tcn>\r
-    <manual_tcn>131</manual_tcn>\r
-    <total_tcn>142</total_tcn>\r
-    <pkg_name>common/tct-fonts-css3-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-security-tcs-tests" launcher="WRTLauncher" category="Compliance">\r
-    <auto_tcn>3</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>3</total_tcn>\r
-    <pkg_name>common/tct-security-tcs-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-speech-w3c-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
-    <auto_tcn>40</auto_tcn>\r
-    <manual_tcn>1</manual_tcn>\r
-    <total_tcn>41</total_tcn>\r
-    <pkg_name>common/tct-speech-w3c-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-ui01-wrt-tests" launcher="WRTLauncher -iu" category="Web Runtime">\r
-    <auto_tcn>11</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>11</total_tcn>\r
-    <pkg_name>tv/tct-ui01-wrt-tests-2.4-1.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-dynamicbox-wrt-tests" category="Web Runtime">\r
-    <auto_tcn>17</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>17</total_tcn>\r
-    <pkg_name>common/tct-dynamicbox-wrt-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-animationtiming-w3c-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
-    <auto_tcn>11</auto_tcn>\r
-    <manual_tcn>7</manual_tcn>\r
-    <total_tcn>18</total_tcn>\r
-    <pkg_name>common/tct-animationtiming-w3c-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-tv-window-tizen-tests" launcher="WRTLauncher" category="Tizen Web Device APIs">\r
-    <auto_tcn>70</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>70</total_tcn>\r
-    <pkg_name>tv/tct-tv-window-tizen-tests-2.4-1.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-selectorslevel2-w3c-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
-    <auto_tcn>30</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>30</total_tcn>\r
-    <pkg_name>common/tct-selectorslevel2-w3c-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-wgtapi01-w3c-tests" launcher="WRTLauncher -iu" category="W3C/HTML5 APIs">\r
-    <auto_tcn>107</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>107</total_tcn>\r
-    <pkg_name>common/tct-wgtapi01-w3c-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-webaudio-w3c-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
-    <auto_tcn>422</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>422</total_tcn>\r
-    <pkg_name>tv/tct-webaudio-w3c-tests-2.3.1.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-sensor-tizen-tests" launcher="WRTLauncher" category="Tizen Web Device APIs">\r
-    <auto_tcn>100</auto_tcn>\r
-    <manual_tcn>19</manual_tcn>\r
-    <total_tcn>119</total_tcn>\r
-    <pkg_name>common/tct-sensor-tizen-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-power-tizen-tests" launcher="WRTLauncher" category="Tizen Web Device APIs">\r
-    <auto_tcn>50</auto_tcn>\r
-    <manual_tcn>6</manual_tcn>\r
-    <total_tcn>56</total_tcn>\r
-    <pkg_name>common/tct-power-tizen-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-tv-inputdevice-tizen-tests" launcher="WRTLauncher" category="Tizen Web Device APIs">\r
-    <auto_tcn>23</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>23</total_tcn>\r
-    <pkg_name>tv/tct-tv-inputdevice-tizen-tests-2.4-1.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-appwgt-wrt-tests" category="Web Runtime">\r
-    <auto_tcn>7</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>7</total_tcn>\r
-    <pkg_name>common/tct-appwgt-wrt-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-privilege-tizen-tests" launcher="WRTLauncher" category="Tizen Web Device APIs">\r
-    <auto_tcn>70</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>70</total_tcn>\r
-    <pkg_name>common/tct-privilege-tizen-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-alarm-tizen-tests" launcher="WRTLauncher" category="Tizen Web Device APIs">\r
-    <auto_tcn>61</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>61</total_tcn>\r
-    <pkg_name>common/tct-alarm-tizen-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-touchevent-w3c-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
-    <auto_tcn>16</auto_tcn>\r
-    <manual_tcn>7</manual_tcn>\r
-    <total_tcn>23</total_tcn>\r
-    <pkg_name>common/tct-touchevent-w3c-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-tv-audiocontrol-tizen-tests" launcher="WRTLauncher" category="Tizen Web Device APIs">\r
-    <auto_tcn>61</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>61</total_tcn>\r
-    <pkg_name>tv/tct-tv-audiocontrol-tizen-tests-2.4-1.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-wgtapi02-w3c-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
-    <auto_tcn>0</auto_tcn>\r
-    <manual_tcn>34</manual_tcn>\r
-    <total_tcn>34</total_tcn>\r
-    <pkg_name>common/tct-wgtapi02-w3c-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-archive-tizen-tests" launcher="WRTLauncher" category="Tizen Web Device APIs">\r
-    <auto_tcn>106</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>106</total_tcn>\r
-    <pkg_name>common/tct-archive-tizen-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-tizen-tizen-tests" launcher="WRTLauncher" category="Tizen Web Device APIs">\r
-    <auto_tcn>81</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>81</total_tcn>\r
-    <pkg_name>common/tct-tizen-tizen-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-widget01-w3c-tests" launcher="WRTLauncher -iu" category="W3C/HTML5 APIs">\r
-    <auto_tcn>75</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>75</total_tcn>\r
-    <pkg_name>tv/tct-widget01-w3c-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-3dtransforms-css3-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
-    <auto_tcn>32</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>32</total_tcn>\r
-    <pkg_name>common/tct-3dtransforms-css3-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-geoallow-w3c-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
-    <auto_tcn>209</auto_tcn>\r
-    <manual_tcn>3</manual_tcn>\r
-    <total_tcn>212</total_tcn>\r
-    <pkg_name>common/tct-geoallow-w3c-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-sessionhistory-html5-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
-    <auto_tcn>148</auto_tcn>\r
-    <manual_tcn>1</manual_tcn>\r
-    <total_tcn>149</total_tcn>\r
-    <pkg_name>common/tct-sessionhistory-html5-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-geodeny-w3c-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
-    <auto_tcn>0</auto_tcn>\r
-    <manual_tcn>3</manual_tcn>\r
-    <total_tcn>3</total_tcn>\r
-    <pkg_name>common/tct-geodeny-w3c-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-canvas-html5-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
-    <auto_tcn>846</auto_tcn>\r
-    <manual_tcn>19</manual_tcn>\r
-    <total_tcn>865</total_tcn>\r
-    <pkg_name>common/tct-canvas-html5-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-ui-css3-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
-    <auto_tcn>43</auto_tcn>\r
-    <manual_tcn>1</manual_tcn>\r
-    <total_tcn>44</total_tcn>\r
-    <pkg_name>common/tct-ui-css3-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-testconfig" launcher="WRTLauncher">\r
-    <auto_tcn>0</auto_tcn>\r
-    <manual_tcn>19</manual_tcn>\r
-    <total_tcn>19</total_tcn>\r
-    <pkg_name>common/tct-testconfig-2.3.1.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-selectorslevel1-w3c-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
-    <auto_tcn>78</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>78</total_tcn>\r
-    <pkg_name>common/tct-selectorslevel1-w3c-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-sse-w3c-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
-    <auto_tcn>68</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>68</total_tcn>\r
-    <pkg_name>tv/tct-sse-w3c-tests-2.3.1.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-widgetpolicy-w3c-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
-    <auto_tcn>0</auto_tcn>\r
-    <manual_tcn>33</manual_tcn>\r
-    <total_tcn>33</total_tcn>\r
-    <pkg_name>common/tct-widgetpolicy-w3c-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-batterystatus-w3c-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
-    <auto_tcn>23</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>23</total_tcn>\r
-    <pkg_name>common/tct-batterystatus-w3c-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-webuifw-tests03" category="Web UI Framework">\r
-    <auto_tcn>179</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>179</total_tcn>\r
-    <pkg_name>tv/tct-webuifw-tests03-2.3.1.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-webuifw-tests04" category="Web UI Framework">\r
-    <auto_tcn>375</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>375</total_tcn>\r
-    <pkg_name>tv/tct-webuifw-tests04-2.3.1.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-maxLength-wrt-tests" launcher="WRTLauncher -iu" category="Web Runtime">\r
-    <auto_tcn>14</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>14</total_tcn>\r
-    <pkg_name>common/tct-maxLength-wrt-tests-2.3.1.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-webuifw-tests05" category="Web UI Framework">\r
-    <auto_tcn>322</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>322</total_tcn>\r
-    <pkg_name>tv/tct-webuifw-tests05-2.3.1.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-filesystem-tizen-tests" launcher="WRTLauncher" category="Tizen Web Device APIs">\r
-    <auto_tcn>291</auto_tcn>\r
-    <manual_tcn>3</manual_tcn>\r
-    <total_tcn>294</total_tcn>\r
-    <pkg_name>tv/tct-filesystem-tizen-tests-2.3-1.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-systeminfo-tizen-tests" launcher="WRTLauncher" category="Tizen Web Device APIs">\r
-    <auto_tcn>276</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>276</total_tcn>\r
-    <pkg_name>tv/tct-systeminfo-tizen-tests-2.3-1.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-webuifw-tests06" category="Web UI Framework">\r
-    <auto_tcn>98</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>98</total_tcn>\r
-    <pkg_name>tv/tct-webuifw-tests06-2.3.1.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-webuifw-tests01" category="Web UI Framework">\r
-    <auto_tcn>355</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>355</total_tcn>\r
-    <pkg_name>tv/tct-webuifw-tests01-2.3.1.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-webuifw-tests02" category="Web UI Framework">\r
-    <auto_tcn>455</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>455</total_tcn>\r
-    <pkg_name>tv/tct-webuifw-tests02-2.3.1.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-vibration-w3c-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
-    <auto_tcn>2</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>2</total_tcn>\r
-    <pkg_name>common/tct-vibration-w3c-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-stab-wrt-tests" category="Web Runtime">\r
-    <auto_tcn>1</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>1</total_tcn>\r
-    <pkg_name>common/tct-stab-wrt-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-text-css3-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
-    <auto_tcn>27</auto_tcn>\r
-    <manual_tcn>15</manual_tcn>\r
-    <total_tcn>42</total_tcn>\r
-    <pkg_name>common/tct-text-css3-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-behavior-tests">\r
-    <auto_tcn>0</auto_tcn>\r
-    <manual_tcn>15</manual_tcn>\r
-    <total_tcn>15</total_tcn>\r
-    <pkg_name>tv/tct-behavior-tests-2.4-1.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-webstorage-w3c-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
-    <auto_tcn>177</auto_tcn>\r
-    <manual_tcn>4</manual_tcn>\r
-    <total_tcn>181</total_tcn>\r
-    <pkg_name>common/tct-webstorage-w3c-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-download-tizen-tests" launcher="WRTLauncher" category="Tizen Web Device APIs">\r
-    <auto_tcn>62</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>62</total_tcn>\r
-    <pkg_name>common/tct-download-tizen-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-mediaqueries-css3-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
-    <auto_tcn>52</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>52</total_tcn>\r
-    <pkg_name>tv/tct-mediaqueries-css3-tests-2.3.1.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-systemsetting-tizen-tests" launcher="WRTLauncher" category="Tizen Web Device APIs">\r
-    <auto_tcn>33</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>33</total_tcn>\r
-    <pkg_name>common/tct-systemsetting-tizen-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-backgrounds-css3-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
-    <auto_tcn>541</auto_tcn>\r
-    <manual_tcn>74</manual_tcn>\r
-    <total_tcn>615</total_tcn>\r
-    <pkg_name>tv/tct-backgrounds-css3-tests-2.3.1.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-video-html5-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
-    <auto_tcn>366</auto_tcn>\r
-    <manual_tcn>4</manual_tcn>\r
-    <total_tcn>370</total_tcn>\r
-    <pkg_name>tv/tct-video-html5-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-pm-wrt-tests" category="Web Runtime">\r
-    <auto_tcn>24</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>24</total_tcn>\r
-    <pkg_name>common/tct-pm-wrt-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-webgl-nonw3c-tests" launcher="WRTLauncher" category="Supplementary APIs">\r
-    <auto_tcn>889</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>889</total_tcn>\r
-    <pkg_name>common/tct-webgl-nonw3c-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-</ns3:testplan>\r
-\r
diff --git a/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/manager/plan/Full_wearable.xml b/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/manager/plan/Full_wearable.xml
deleted file mode 100755 (executable)
index a6fb1f8..0000000
+++ /dev/null
@@ -1,557 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>\r
-<ns3:testplan xmlns:ns3="http://www.example.org/plan/" xmlns="" name="Full_wearable" profile="wearable">\r
-  <execute_type>All</execute_type>\r
-  <suite name="tct-sp01-wrt-tests" launcher="WRTLauncher -iu" category="Web Runtime">\r
-    <auto_tcn>4</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>4</total_tcn>\r
-    <pkg_name>common/tct-sp01-wrt-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-widget02-w3c-tests" category="W3C/HTML5 APIs">\r
-    <auto_tcn>68</auto_tcn>\r
-    <manual_tcn>63</manual_tcn>\r
-    <total_tcn>131</total_tcn>\r
-    <pkg_name>wearable/tct-widget02-w3c-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-jsenhance-html5-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
-    <auto_tcn>49</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>49</total_tcn>\r
-    <pkg_name>common/tct-jsenhance-html5-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-audio-html5-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
-    <auto_tcn>338</auto_tcn>\r
-    <manual_tcn>1</manual_tcn>\r
-    <total_tcn>339</total_tcn>\r
-    <pkg_name>common/tct-audio-html5-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-sp02-wrt-tests" category="Web Runtime">\r
-    <auto_tcn>1</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>1</total_tcn>\r
-    <pkg_name>common/tct-sp02-wrt-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-rt02-wrt-tests" category="Web Runtime">\r
-    <auto_tcn>3</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>3</total_tcn>\r
-    <pkg_name>common/tct-rt02-wrt-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-sound-tizen-tests" launcher="WRTLauncher" category="Tizen Web Device APIs">\r
-    <auto_tcn>52</auto_tcn>\r
-    <manual_tcn>8</manual_tcn>\r
-    <total_tcn>60</total_tcn>\r
-    <pkg_name>common/tct-sound-tizen-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-workers-w3c-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
-    <auto_tcn>85</auto_tcn>\r
-    <manual_tcn>1</manual_tcn>\r
-    <total_tcn>86</total_tcn>\r
-    <pkg_name>wearable/tct-workers-w3c-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-ext02-wrt-tests" category="Web Runtime">\r
-    <auto_tcn>8</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>8</total_tcn>\r
-    <pkg_name>common/tct-ext02-wrt-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-transitions-css3-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
-    <auto_tcn>26</auto_tcn>\r
-    <manual_tcn>5</manual_tcn>\r
-    <total_tcn>31</total_tcn>\r
-    <pkg_name>common/tct-transitions-css3-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-namespace-tizen-tests" launcher="WRTLauncher" category="Tizen Web Device APIs">\r
-    <auto_tcn>23</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>23</total_tcn>\r
-    <pkg_name>common/tct-namespace-tizen-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-application-tizen-tests" launcher="WRTLauncher" category="Tizen Web Device APIs">\r
-    <auto_tcn>159</auto_tcn>\r
-    <manual_tcn>6</manual_tcn>\r
-    <total_tcn>165</total_tcn>\r
-    <pkg_name>wearable/tct-application-tizen-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-humanactivitymonitor-tizen-tests" launcher="WRTLauncher" category="Tizen Web Device APIs">\r
-    <auto_tcn>47</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>47</total_tcn>\r
-    <pkg_name>common/tct-humanactivitymonitor-tizen-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-bluetooth-tizen-tests" launcher="WRTLauncher" category="Tizen Web Device APIs">\r
-    <auto_tcn>214</auto_tcn>\r
-    <manual_tcn>44</manual_tcn>\r
-    <total_tcn>258</total_tcn>\r
-    <pkg_name>common/tct-bluetooth-tizen-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-fonts-css3-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
-    <auto_tcn>11</auto_tcn>\r
-    <manual_tcn>131</manual_tcn>\r
-    <total_tcn>142</total_tcn>\r
-    <pkg_name>common/tct-fonts-css3-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-speech-w3c-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
-    <auto_tcn>40</auto_tcn>\r
-    <manual_tcn>1</manual_tcn>\r
-    <total_tcn>41</total_tcn>\r
-    <pkg_name>common/tct-speech-w3c-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-security-tcs-tests" launcher="WRTLauncher" category="Compliance">\r
-    <auto_tcn>3</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>3</total_tcn>\r
-    <pkg_name>common/tct-security-tcs-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-ui01-wrt-tests" launcher="WRTLauncher -iu" category="Web Runtime">\r
-    <auto_tcn>11</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>11</total_tcn>\r
-    <pkg_name>wearable/tct-ui01-wrt-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-dynamicbox-wrt-tests" category="Web Runtime">\r
-    <auto_tcn>17</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>17</total_tcn>\r
-    <pkg_name>common/tct-dynamicbox-wrt-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-animationtiming-w3c-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
-    <auto_tcn>11</auto_tcn>\r
-    <manual_tcn>7</manual_tcn>\r
-    <total_tcn>18</total_tcn>\r
-    <pkg_name>common/tct-animationtiming-w3c-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-selectorslevel2-w3c-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
-    <auto_tcn>30</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>30</total_tcn>\r
-    <pkg_name>common/tct-selectorslevel2-w3c-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-2dtransforms-css3-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
-    <auto_tcn>34</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>34</total_tcn>\r
-    <pkg_name>common/tct-2dtransforms-css3-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-forms-html5-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
-    <auto_tcn>146</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>146</total_tcn>\r
-    <pkg_name>wearable/tct-forms-html5-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-time-tizen-tests" launcher="WRTLauncher" category="Tizen Web Device APIs">\r
-    <auto_tcn>470</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>470</total_tcn>\r
-    <pkg_name>wearable/tct-time-tizen-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-wgtapi01-w3c-tests" launcher="WRTLauncher -iu" category="W3C/HTML5 APIs">\r
-    <auto_tcn>107</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>107</total_tcn>\r
-    <pkg_name>common/tct-wgtapi01-w3c-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-fileapi-w3c-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
-    <auto_tcn>98</auto_tcn>\r
-    <manual_tcn>3</manual_tcn>\r
-    <total_tcn>101</total_tcn>\r
-    <pkg_name>wearable/tct-fileapi-w3c-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-capability-tests" launcher="WRTLauncher" category="Compliance">\r
-    <auto_tcn>15</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>15</total_tcn>\r
-    <pkg_name>common/tct-capability-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-ext01-wrt-tests" launcher="WRTLauncher -iu" category="Web Runtime">\r
-    <auto_tcn>2</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>2</total_tcn>\r
-    <pkg_name>wearable/tct-ext01-wrt-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-mediacapture-w3c-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
-    <auto_tcn>7</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>7</total_tcn>\r
-    <pkg_name>common/tct-mediacapture-w3c-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-exif-tizen-tests" launcher="WRTLauncher" category="Tizen Web Device APIs">\r
-    <auto_tcn>63</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>63</total_tcn>\r
-    <pkg_name>common/tct-exif-tizen-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-csp-w3c-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
-    <auto_tcn>133</auto_tcn>\r
-    <manual_tcn>78</manual_tcn>\r
-    <total_tcn>211</total_tcn>\r
-    <pkg_name>common/tct-csp-w3c-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-sensor-tizen-tests" launcher="WRTLauncher" category="Tizen Web Device APIs">\r
-    <auto_tcn>119</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>119</total_tcn>\r
-    <pkg_name>common/tct-sensor-tizen-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-privilege-wrt-tests" category="Web Runtime">\r
-    <auto_tcn>142</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>142</total_tcn>\r
-    <pkg_name>wearable/tct-privilege-wrt-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-power-tizen-tests" launcher="WRTLauncher" category="Tizen Web Device APIs">\r
-    <auto_tcn>50</auto_tcn>\r
-    <manual_tcn>6</manual_tcn>\r
-    <total_tcn>56</total_tcn>\r
-    <pkg_name>common/tct-power-tizen-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-appwgt-wrt-tests" category="Web Runtime">\r
-    <auto_tcn>7</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>7</total_tcn>\r
-    <pkg_name>common/tct-appwgt-wrt-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-privilege-tizen-tests" launcher="WRTLauncher" category="Tizen Web Device APIs">\r
-    <auto_tcn>66</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>66</total_tcn>\r
-    <pkg_name>common/tct-privilege-tizen-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-mediakey-tizen-tests" launcher="WRTLauncher" category="Tizen Web Device APIs">\r
-    <auto_tcn>11</auto_tcn>\r
-    <manual_tcn>4</manual_tcn>\r
-    <total_tcn>15</total_tcn>\r
-    <pkg_name>common/tct-mediakey-tizen-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-alarm-tizen-tests" launcher="WRTLauncher" category="Tizen Web Device APIs">\r
-    <auto_tcn>61</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>61</total_tcn>\r
-    <pkg_name>common/tct-alarm-tizen-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-touchevent-w3c-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
-    <auto_tcn>16</auto_tcn>\r
-    <manual_tcn>7</manual_tcn>\r
-    <total_tcn>23</total_tcn>\r
-    <pkg_name>common/tct-touchevent-w3c-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-wgtapi02-w3c-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
-    <auto_tcn>0</auto_tcn>\r
-    <manual_tcn>34</manual_tcn>\r
-    <total_tcn>34</total_tcn>\r
-    <pkg_name>common/tct-wgtapi02-w3c-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-deviceorientation-w3c-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
-    <auto_tcn>37</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>37</total_tcn>\r
-    <pkg_name>common/tct-deviceorientation-w3c-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-archive-tizen-tests" launcher="WRTLauncher" category="Tizen Web Device APIs">\r
-    <auto_tcn>106</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>106</total_tcn>\r
-    <pkg_name>common/tct-archive-tizen-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-webmessaging-w3c-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
-    <auto_tcn>175</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>175</total_tcn>\r
-    <pkg_name>wearable/tct-webmessaging-w3c-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-package-tizen-tests" launcher="WRTLauncher" category="Tizen Web Device APIs">\r
-    <auto_tcn>54</auto_tcn>\r
-    <manual_tcn>12</manual_tcn>\r
-    <total_tcn>66</total_tcn>\r
-    <pkg_name>common/tct-package-tizen-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-notification-tizen-tests" launcher="WRTLauncher" category="Tizen Web Device APIs">\r
-    <auto_tcn>85</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>85</total_tcn>\r
-    <pkg_name>wearable/tct-notification-tizen-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-tizen-tizen-tests" launcher="WRTLauncher" category="Tizen Web Device APIs">\r
-    <auto_tcn>81</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>81</total_tcn>\r
-    <pkg_name>common/tct-tizen-tizen-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-rt01-wrt-tests" launcher="WRTLauncher -iu" category="Web Runtime">\r
-    <auto_tcn>12</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>12</total_tcn>\r
-    <pkg_name>common/tct-rt01-wrt-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-widget01-w3c-tests" launcher="WRTLauncher -iu" category="W3C/HTML5 APIs">\r
-    <auto_tcn>155</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>155</total_tcn>\r
-    <pkg_name>wearable/tct-widget01-w3c-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-svg-html5-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
-    <auto_tcn>3</auto_tcn>\r
-    <manual_tcn>9</manual_tcn>\r
-    <total_tcn>12</total_tcn>\r
-    <pkg_name>common/tct-svg-html5-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-3dtransforms-css3-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
-    <auto_tcn>32</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>32</total_tcn>\r
-    <pkg_name>common/tct-3dtransforms-css3-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-geoallow-w3c-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
-    <auto_tcn>209</auto_tcn>\r
-    <manual_tcn>3</manual_tcn>\r
-    <total_tcn>212</total_tcn>\r
-    <pkg_name>common/tct-geoallow-w3c-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-sessionhistory-html5-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
-    <auto_tcn>148</auto_tcn>\r
-    <manual_tcn>1</manual_tcn>\r
-    <total_tcn>149</total_tcn>\r
-    <pkg_name>common/tct-sessionhistory-html5-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-websocket-w3c-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
-    <auto_tcn>268</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>268</total_tcn>\r
-    <pkg_name>wearable/tct-websocket-w3c-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-flexiblebox-css3-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
-    <auto_tcn>25</auto_tcn>\r
-    <manual_tcn>28</manual_tcn>\r
-    <total_tcn>53</total_tcn>\r
-    <pkg_name>common/tct-flexiblebox-css3-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-extra-html5-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
-    <auto_tcn>544</auto_tcn>\r
-    <manual_tcn>25</manual_tcn>\r
-    <total_tcn>569</total_tcn>\r
-    <pkg_name>wearable/tct-extra-html5-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-dnd-html5-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
-    <auto_tcn>6</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>6</total_tcn>\r
-    <pkg_name>common/tct-dnd-html5-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-geodeny-w3c-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
-    <auto_tcn>0</auto_tcn>\r
-    <manual_tcn>3</manual_tcn>\r
-    <total_tcn>3</total_tcn>\r
-    <pkg_name>common/tct-geodeny-w3c-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-colors-css3-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
-    <auto_tcn>46</auto_tcn>\r
-    <manual_tcn>29</manual_tcn>\r
-    <total_tcn>75</total_tcn>\r
-    <pkg_name>common/tct-colors-css3-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-indexeddb-w3c-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
-    <auto_tcn>391</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>391</total_tcn>\r
-    <pkg_name>wearable/tct-indexeddb-w3c-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-sandbox-html5-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
-    <auto_tcn>72</auto_tcn>\r
-    <manual_tcn>1</manual_tcn>\r
-    <total_tcn>73</total_tcn>\r
-    <pkg_name>common/tct-sandbox-html5-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-camera-nonw3c-tests" launcher="WRTLauncher" category="Supplementary APIs">\r
-    <auto_tcn>83</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>83</total_tcn>\r
-    <pkg_name>wearable/tct-camera-nonw3c-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-ui-css3-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
-    <auto_tcn>43</auto_tcn>\r
-    <manual_tcn>1</manual_tcn>\r
-    <total_tcn>44</total_tcn>\r
-    <pkg_name>common/tct-ui-css3-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-canvas-html5-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
-    <auto_tcn>846</auto_tcn>\r
-    <manual_tcn>18</manual_tcn>\r
-    <total_tcn>864</total_tcn>\r
-    <pkg_name>common/tct-canvas-html5-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-messageport-tizen-tests" launcher="WRTLauncher" category="Tizen Web Device APIs">\r
-    <auto_tcn>48</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>48</total_tcn>\r
-    <pkg_name>common/tct-messageport-tizen-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-testconfig" launcher="WRTLauncher">\r
-    <auto_tcn>0</auto_tcn>\r
-    <manual_tcn>19</manual_tcn>\r
-    <total_tcn>19</total_tcn>\r
-    <pkg_name>common/tct-testconfig-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-selectorslevel1-w3c-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
-    <auto_tcn>78</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>78</total_tcn>\r
-    <pkg_name>common/tct-selectorslevel1-w3c-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-widgetpolicy-w3c-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
-    <auto_tcn>0</auto_tcn>\r
-    <manual_tcn>34</manual_tcn>\r
-    <total_tcn>34</total_tcn>\r
-    <pkg_name>common/tct-widgetpolicy-w3c-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-cors-w3c-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
-    <auto_tcn>10</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>10</total_tcn>\r
-    <pkg_name>common/tct-cors-w3c-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-batterystatus-w3c-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
-    <auto_tcn>23</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>23</total_tcn>\r
-    <pkg_name>common/tct-batterystatus-w3c-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-xmlhttprequest-w3c-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
-    <auto_tcn>202</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>202</total_tcn>\r
-    <pkg_name>wearable/tct-xmlhttprequest-w3c-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-maxLength-wrt-tests" launcher="WRTLauncher -iu" category="Web Runtime">\r
-    <auto_tcn>14</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>14</total_tcn>\r
-    <pkg_name>common/tct-maxLength-wrt-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-systeminfo-tizen-tests" launcher="WRTLauncher" category="Tizen Web Device APIs">\r
-    <auto_tcn>281</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>281</total_tcn>\r
-    <pkg_name>wearable/tct-systeminfo-tizen-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-filesystem-tizen-tests" launcher="WRTLauncher" category="Tizen Web Device APIs">\r
-    <auto_tcn>289</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>289</total_tcn>\r
-    <pkg_name>wearable/tct-filesystem-tizen-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-typedarrays-nonw3c-tests" launcher="WRTLauncher" category="Supplementary APIs">\r
-    <auto_tcn>80</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>80</total_tcn>\r
-    <pkg_name>common/tct-typedarrays-nonw3c-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-animations-css3-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
-    <auto_tcn>24</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>24</total_tcn>\r
-    <pkg_name>common/tct-animations-css3-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-badge-tizen-tests" launcher="WRTLauncher" category="Tizen Web Device APIs">\r
-    <auto_tcn>26</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>26</total_tcn>\r
-    <pkg_name>common/tct-badge-tizen-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-vibration-w3c-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
-    <auto_tcn>2</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>2</total_tcn>\r
-    <pkg_name>common/tct-vibration-w3c-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-pagevisibility-w3c-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
-    <auto_tcn>18</auto_tcn>\r
-    <manual_tcn>2</manual_tcn>\r
-    <total_tcn>20</total_tcn>\r
-    <pkg_name>wearable/tct-pagevisibility-w3c-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-stab-wrt-tests" category="Web Runtime">\r
-    <auto_tcn>1</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>1</total_tcn>\r
-    <pkg_name>common/tct-stab-wrt-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-text-css3-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
-    <auto_tcn>27</auto_tcn>\r
-    <manual_tcn>15</manual_tcn>\r
-    <total_tcn>42</total_tcn>\r
-    <pkg_name>common/tct-text-css3-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-behavior-tests">\r
-    <auto_tcn>0</auto_tcn>\r
-    <manual_tcn>19</manual_tcn>\r
-    <total_tcn>19</total_tcn>\r
-    <pkg_name>wearable/tct-behavior-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-webstorage-w3c-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
-    <auto_tcn>177</auto_tcn>\r
-    <manual_tcn>4</manual_tcn>\r
-    <total_tcn>181</total_tcn>\r
-    <pkg_name>common/tct-webstorage-w3c-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-webuifw-tests" category="Web UI Framework">\r
-    <auto_tcn>524</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>524</total_tcn>\r
-    <pkg_name>wearable/tct-webuifw-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-download-tizen-tests" launcher="WRTLauncher" category="Tizen Web Device APIs">\r
-    <auto_tcn>62</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>62</total_tcn>\r
-    <pkg_name>common/tct-download-tizen-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-mediaqueries-css3-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
-    <auto_tcn>52</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>52</total_tcn>\r
-    <pkg_name>wearable/tct-mediaqueries-css3-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-content-tizen-tests" launcher="WRTLauncher" category="Tizen Web Device APIs">\r
-    <auto_tcn>230</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>230</total_tcn>\r
-    <pkg_name>common/tct-content-tizen-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-gumallow-w3c-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
-    <auto_tcn>6</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>6</total_tcn>\r
-    <pkg_name>common/tct-gumallow-w3c-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-systemsetting-tizen-tests" launcher="WRTLauncher" category="Tizen Web Device APIs">\r
-    <auto_tcn>33</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>33</total_tcn>\r
-    <pkg_name>common/tct-systemsetting-tizen-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-video-html5-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
-    <auto_tcn>366</auto_tcn>\r
-    <manual_tcn>4</manual_tcn>\r
-    <total_tcn>370</total_tcn>\r
-    <pkg_name>wearable/tct-video-html5-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-backgrounds-css3-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
-    <auto_tcn>541</auto_tcn>\r
-    <manual_tcn>74</manual_tcn>\r
-    <total_tcn>615</total_tcn>\r
-    <pkg_name>wearable/tct-backgrounds-css3-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-pm-wrt-tests" category="Web Runtime">\r
-    <auto_tcn>24</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>24</total_tcn>\r
-    <pkg_name>common/tct-pm-wrt-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-webgl-nonw3c-tests" launcher="WRTLauncher" category="Supplementary APIs">\r
-    <auto_tcn>889</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>889</total_tcn>\r
-    <pkg_name>common/tct-webgl-nonw3c-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-</ns3:testplan>\r
-\r
diff --git a/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/manager/script/temp b/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/manager/script/temp
deleted file mode 100755 (executable)
index e69de29..0000000
diff --git a/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/manager/style/application.js b/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/manager/style/application.js
deleted file mode 100755 (executable)
index 147094f..0000000
+++ /dev/null
@@ -1,194 +0,0 @@
-function getScrollTop() {
-       return f_scrollTop();
-}
-
-function f_scrollTop() {
-       return f_filterResults($(window) ? $(window).scrollTop() : 0,
-                       document.documentElement ? document.documentElement.scrollTop : 0,
-                       document.body ? document.body.scrollTop : 0);
-}
-function f_filterResults(n_win, n_docel, n_body) {
-       var n_result = n_win ? n_win : 0;
-       if (n_docel && (!n_result || (n_result > n_docel)))
-               n_result = n_docel;
-       return n_body && (!n_result || (n_result > n_body)) ? n_body : n_result;
-}
-
-function setScrollTop() {
-       $(window) ? $(window).scrollTop(0) : 0;
-       document.documentElement ? document.documentElement.scrollTop = 0 : 0;
-       document.body ? document.body.scrollTop = 0 : 0;
-}
-
-function goTopEx() {
-       $node = $('#goTopBtn');
-       if (getScrollTop() > 0) {
-               $node.show();
-       } else {
-               $node.hide();
-       }
-
-       $(window).scroll(function() {
-               if (getScrollTop() > 0) {
-                       $node.show();
-               } else {
-                       $node.hide();
-               }
-       });
-
-       $node.click(function() {
-               setScrollTop();
-       });
-}
-
-function drawRatio() {
-       $('.suite_item').each(function(i, node) {
-               drawSuiteRatio(node)
-       });
-}
-
-$(".see_all").click(function(){
-       $("#see_all").show();
-    $("#see_fail").hide();
-    $("#see_block").hide();
-    $("#see_na").hide();
-    updateToggles();
-    return false;
-});
-
-$(".see_failed").click(function(){
-       $("#see_all").hide();
-    $("#see_fail").show();
-    $("#see_block").hide();
-    $("#see_na").hide();
-    updateToggles();
-    return false;
-});
-
-$(".see_blocked").click(function(){
-       $("#see_all").hide();
-    $("#see_fail").hide();
-    $("#see_block").show();
-    $("#see_na").hide();
-    updateToggles();
-    return false;
-});
-
-$(".see_na").click(function(){
-       $("#see_all").hide();
-    $("#see_fail").hide();
-    $("#see_block").hide();
-    $("#see_na").show();
-    updateToggles();
-    return false;
-});
-
-$("a.test_case_popup").click(function(){
-       var $this = $(this);
-       Popup.show($this.attr('id'));
-    return false;
-});
-
-$(".see_capabilities").click(function(){
-       if ($('#capability_table').css('display') == 'none') {
-               $("#capability_table").show();
-       }else{
-               $("#capability_table").hide();
-       }
-    return false;
-});
-
-function drawSuiteRatio(node) {
-       arrTitle = new Array("Passed", "Failed", "Blocked", "Not Executed");
-       var $node = $(node);
-       var $total = $node.find('.total');
-       var $pass = $node.find('.pass');
-       var $fail = $node.find('.fail');
-       var $block = $node.find('.block');
-       var $na = $node.find('.na');
-       var $div = $node.find('.RatioGraphic');
-
-       var total_int = parseInt($total.text());
-       var pass_int = parseInt($pass.text());
-       var fail_int = parseInt($fail.text());
-       var block_int = parseInt($block.text());
-       var na_int = parseInt($na.text());
-
-       var pass_rate = pass_int * 100 / total_int;
-       var fail_rate = fail_int * 100 / total_int;
-       var block_rate = block_int * 100 / total_int;
-       var na_rate = na_int * 100 / total_int;
-
-       var areaWidth = 380;
-
-       var pass_width = areaWidth * pass_rate / 100;
-       var fail_width = areaWidth * fail_rate / 100;
-       var block_width = areaWidth * block_rate / 100;
-       var na_width = areaWidth * na_rate / 100;
-       
-       pass_rate = pass_rate.toFixed(2);
-       fail_rate = fail_rate.toFixed(2);
-       block_rate = block_rate.toFixed(2);
-       na_rate = na_rate.toFixed(2);
-
-       var pass_style = "padding:3px 0px 0px 0px;font-size:9pt;height:17px;text-align:center;color:white;font-weight:bold;background:url(&quot;./style/blue.jpg&quot;);"
-       var fail_style = "padding:3px 0px 0px 0px;font-size:9pt;height:17px;text-align:center;color:white;font-weight:bold;background:url(&quot;./style/red.jpg&quot;);"
-       var block_style = "padding:3px 0px 0px 0px;font-size:9pt;height:17px;text-align:center;color:white;font-weight:bold;background:url(&quot;./style/orange.jpg&quot;);"
-       var na_style = "padding:3px 0px 0px 0px;font-size:9pt;height:17px;text-align:center;color:white;font-weight:bold;background:url(&quot;./style/gray.jpg&quot;);"
-
-       var html = "<table width=\"380.68\" align=\"center\"><tbody><tr>";
-       if (pass_width > 0){
-           html += "<td width=\""
-                       + pass_width
-                       + "\" style=\""
-                       + pass_style
-                       + "\" title=\"Passed :"
-                       + pass_rate
-                       + "%\">";
-           if (pass_width > 20){
-               html += pass_rate + "%"
-           }
-           html +=  "</td>";
-       }
-       if (fail_width > 0){
-               html += "<td width=\""
-                       + fail_width
-                       + "\" style=\""
-                       + fail_style
-                       + "\" title=\"Failed :"
-                       + fail_rate
-                       + "%\">";
-           if (fail_width > 20){
-               html += fail_rate + "%"
-           }
-           html +=  "</td>";
-       }
-       if (block_width > 0){
-               html += "<td width=\""
-                       + block_width
-                       + "\" style=\""
-                       + block_style
-                       + "\" title=\"Blocked :"
-                       + block_rate
-                       + "%\">";
-           if (block_width > 20){
-               html += block_rate + "%"
-           }
-           html +=  "</td>";
-       }
-       if (na_width > 0){
-               html += "<td width=\""
-                       + na_width
-                       + "\" style=\""
-                       + na_style
-                       + "\" title=\"Blocked :"
-                       + na_rate
-                       + "%\">";
-           if (na_width > 20){
-               html += na_rate + "%"
-           }
-           html +=  "</td>";
-       }
-       html += "</tr></tbody></table>";
-       $div.html(html);
-}
diff --git a/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/manager/style/back_top.png b/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/manager/style/back_top.png
deleted file mode 100755 (executable)
index 19cbd76..0000000
Binary files a/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/manager/style/back_top.png and /dev/null differ
diff --git a/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/manager/style/blue.jpg b/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/manager/style/blue.jpg
deleted file mode 100755 (executable)
index d1db8f7..0000000
Binary files a/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/manager/style/blue.jpg and /dev/null differ
diff --git a/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/manager/style/gray.jpg b/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/manager/style/gray.jpg
deleted file mode 100755 (executable)
index f1acfdb..0000000
Binary files a/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/manager/style/gray.jpg and /dev/null differ
diff --git a/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/manager/style/jquery.min.js b/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/manager/style/jquery.min.js
deleted file mode 100755 (executable)
index 198b3ff..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-/*! jQuery v1.7.1 jquery.com | jquery.org/license */
-(function(a,b){function cy(a){return f.isWindow(a)?a:a.nodeType===9?a.defaultView||a.parentWindow:!1}function cv(a){if(!ck[a]){var b=c.body,d=f("<"+a+">").appendTo(b),e=d.css("display");d.remove();if(e==="none"||e===""){cl||(cl=c.createElement("iframe"),cl.frameBorder=cl.width=cl.height=0),b.appendChild(cl);if(!cm||!cl.createElement)cm=(cl.contentWindow||cl.contentDocument).document,cm.write((c.compatMode==="CSS1Compat"?"<!doctype html>":"")+"<html><body>"),cm.close();d=cm.createElement(a),cm.body.appendChild(d),e=f.css(d,"display"),b.removeChild(cl)}ck[a]=e}return ck[a]}function cu(a,b){var c={};f.each(cq.concat.apply([],cq.slice(0,b)),function(){c[this]=a});return c}function ct(){cr=b}function cs(){setTimeout(ct,0);return cr=f.now()}function cj(){try{return new a.ActiveXObject("Microsoft.XMLHTTP")}catch(b){}}function ci(){try{return new a.XMLHttpRequest}catch(b){}}function cc(a,c){a.dataFilter&&(c=a.dataFilter(c,a.dataType));var d=a.dataTypes,e={},g,h,i=d.length,j,k=d[0],l,m,n,o,p;for(g=1;g<i;g++){if(g===1)for(h in a.converters)typeof h=="string"&&(e[h.toLowerCase()]=a.converters[h]);l=k,k=d[g];if(k==="*")k=l;else if(l!=="*"&&l!==k){m=l+" "+k,n=e[m]||e["* "+k];if(!n){p=b;for(o in e){j=o.split(" ");if(j[0]===l||j[0]==="*"){p=e[j[1]+" "+k];if(p){o=e[o],o===!0?n=p:p===!0&&(n=o);break}}}}!n&&!p&&f.error("No conversion from "+m.replace(" "," to ")),n!==!0&&(c=n?n(c):p(o(c)))}}return c}function cb(a,c,d){var e=a.contents,f=a.dataTypes,g=a.responseFields,h,i,j,k;for(i in g)i in d&&(c[g[i]]=d[i]);while(f[0]==="*")f.shift(),h===b&&(h=a.mimeType||c.getResponseHeader("content-type"));if(h)for(i in e)if(e[i]&&e[i].test(h)){f.unshift(i);break}if(f[0]in d)j=f[0];else{for(i in d){if(!f[0]||a.converters[i+" "+f[0]]){j=i;break}k||(k=i)}j=j||k}if(j){j!==f[0]&&f.unshift(j);return d[j]}}function ca(a,b,c,d){if(f.isArray(b))f.each(b,function(b,e){c||bE.test(a)?d(a,e):ca(a+"["+(typeof e=="object"||f.isArray(e)?b:"")+"]",e,c,d)});else if(!c&&b!=null&&typeof b=="object")for(var e in b)ca(a+"["+e+"]",b[e],c,d);else d(a,b)}function b_(a,c){var d,e,g=f.ajaxSettings.flatOptions||{};for(d in c)c[d]!==b&&((g[d]?a:e||(e={}))[d]=c[d]);e&&f.extend(!0,a,e)}function b$(a,c,d,e,f,g){f=f||c.dataTypes[0],g=g||{},g[f]=!0;var h=a[f],i=0,j=h?h.length:0,k=a===bT,l;for(;i<j&&(k||!l);i++)l=h[i](c,d,e),typeof l=="string"&&(!k||g[l]?l=b:(c.dataTypes.unshift(l),l=b$(a,c,d,e,l,g)));(k||!l)&&!g["*"]&&(l=b$(a,c,d,e,"*",g));return l}function bZ(a){return function(b,c){typeof b!="string"&&(c=b,b="*");if(f.isFunction(c)){var d=b.toLowerCase().split(bP),e=0,g=d.length,h,i,j;for(;e<g;e++)h=d[e],j=/^\+/.test(h),j&&(h=h.substr(1)||"*"),i=a[h]=a[h]||[],i[j?"unshift":"push"](c)}}}function bC(a,b,c){var d=b==="width"?a.offsetWidth:a.offsetHeight,e=b==="width"?bx:by,g=0,h=e.length;if(d>0){if(c!=="border")for(;g<h;g++)c||(d-=parseFloat(f.css(a,"padding"+e[g]))||0),c==="margin"?d+=parseFloat(f.css(a,c+e[g]))||0:d-=parseFloat(f.css(a,"border"+e[g]+"Width"))||0;return d+"px"}d=bz(a,b,b);if(d<0||d==null)d=a.style[b]||0;d=parseFloat(d)||0;if(c)for(;g<h;g++)d+=parseFloat(f.css(a,"padding"+e[g]))||0,c!=="padding"&&(d+=parseFloat(f.css(a,"border"+e[g]+"Width"))||0),c==="margin"&&(d+=parseFloat(f.css(a,c+e[g]))||0);return d+"px"}function bp(a,b){b.src?f.ajax({url:b.src,async:!1,dataType:"script"}):f.globalEval((b.text||b.textContent||b.innerHTML||"").replace(bf,"/*$0*/")),b.parentNode&&b.parentNode.removeChild(b)}function bo(a){var b=c.createElement("div");bh.appendChild(b),b.innerHTML=a.outerHTML;return b.firstChild}function bn(a){var b=(a.nodeName||"").toLowerCase();b==="input"?bm(a):b!=="script"&&typeof a.getElementsByTagName!="undefined"&&f.grep(a.getElementsByTagName("input"),bm)}function bm(a){if(a.type==="checkbox"||a.type==="radio")a.defaultChecked=a.checked}function bl(a){return typeof a.getElementsByTagName!="undefined"?a.getElementsByTagName("*"):typeof a.querySelectorAll!="undefined"?a.querySelectorAll("*"):[]}function bk(a,b){var c;if(b.nodeType===1){b.clearAttributes&&b.clearAttributes(),b.mergeAttributes&&b.mergeAttributes(a),c=b.nodeName.toLowerCase();if(c==="object")b.outerHTML=a.outerHTML;else if(c!=="input"||a.type!=="checkbox"&&a.type!=="radio"){if(c==="option")b.selected=a.defaultSelected;else if(c==="input"||c==="textarea")b.defaultValue=a.defaultValue}else a.checked&&(b.defaultChecked=b.checked=a.checked),b.value!==a.value&&(b.value=a.value);b.removeAttribute(f.expando)}}function bj(a,b){if(b.nodeType===1&&!!f.hasData(a)){var c,d,e,g=f._data(a),h=f._data(b,g),i=g.events;if(i){delete h.handle,h.events={};for(c in i)for(d=0,e=i[c].length;d<e;d++)f.event.add(b,c+(i[c][d].namespace?".":"")+i[c][d].namespace,i[c][d],i[c][d].data)}h.data&&(h.data=f.extend({},h.data))}}function bi(a,b){return f.nodeName(a,"table")?a.getElementsByTagName("tbody")[0]||a.appendChild(a.ownerDocument.createElement("tbody")):a}function U(a){var b=V.split("|"),c=a.createDocumentFragment();if(c.createElement)while(b.length)c.createElement(b.pop());return c}function T(a,b,c){b=b||0;if(f.isFunction(b))return f.grep(a,function(a,d){var e=!!b.call(a,d,a);return e===c});if(b.nodeType)return f.grep(a,function(a,d){return a===b===c});if(typeof b=="string"){var d=f.grep(a,function(a){return a.nodeType===1});if(O.test(b))return f.filter(b,d,!c);b=f.filter(b,d)}return f.grep(a,function(a,d){return f.inArray(a,b)>=0===c})}function S(a){return!a||!a.parentNode||a.parentNode.nodeType===11}function K(){return!0}function J(){return!1}function n(a,b,c){var d=b+"defer",e=b+"queue",g=b+"mark",h=f._data(a,d);h&&(c==="queue"||!f._data(a,e))&&(c==="mark"||!f._data(a,g))&&setTimeout(function(){!f._data(a,e)&&!f._data(a,g)&&(f.removeData(a,d,!0),h.fire())},0)}function m(a){for(var b in a){if(b==="data"&&f.isEmptyObject(a[b]))continue;if(b!=="toJSON")return!1}return!0}function l(a,c,d){if(d===b&&a.nodeType===1){var e="data-"+c.replace(k,"-$1").toLowerCase();d=a.getAttribute(e);if(typeof d=="string"){try{d=d==="true"?!0:d==="false"?!1:d==="null"?null:f.isNumeric(d)?parseFloat(d):j.test(d)?f.parseJSON(d):d}catch(g){}f.data(a,c,d)}else d=b}return d}function h(a){var b=g[a]={},c,d;a=a.split(/\s+/);for(c=0,d=a.length;c<d;c++)b[a[c]]=!0;return b}var c=a.document,d=a.navigator,e=a.location,f=function(){function J(){if(!e.isReady){try{c.documentElement.doScroll("left")}catch(a){setTimeout(J,1);return}e.ready()}}var e=function(a,b){return new e.fn.init(a,b,h)},f=a.jQuery,g=a.$,h,i=/^(?:[^#<]*(<[\w\W]+>)[^>]*$|#([\w\-]*)$)/,j=/\S/,k=/^\s+/,l=/\s+$/,m=/^<(\w+)\s*\/?>(?:<\/\1>)?$/,n=/^[\],:{}\s]*$/,o=/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,p=/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,q=/(?:^|:|,)(?:\s*\[)+/g,r=/(webkit)[ \/]([\w.]+)/,s=/(opera)(?:.*version)?[ \/]([\w.]+)/,t=/(msie) ([\w.]+)/,u=/(mozilla)(?:.*? rv:([\w.]+))?/,v=/-([a-z]|[0-9])/ig,w=/^-ms-/,x=function(a,b){return(b+"").toUpperCase()},y=d.userAgent,z,A,B,C=Object.prototype.toString,D=Object.prototype.hasOwnProperty,E=Array.prototype.push,F=Array.prototype.slice,G=String.prototype.trim,H=Array.prototype.indexOf,I={};e.fn=e.prototype={constructor:e,init:function(a,d,f){var g,h,j,k;if(!a)return this;if(a.nodeType){this.context=this[0]=a,this.length=1;return this}if(a==="body"&&!d&&c.body){this.context=c,this[0]=c.body,this.selector=a,this.length=1;return this}if(typeof a=="string"){a.charAt(0)!=="<"||a.charAt(a.length-1)!==">"||a.length<3?g=i.exec(a):g=[null,a,null];if(g&&(g[1]||!d)){if(g[1]){d=d instanceof e?d[0]:d,k=d?d.ownerDocument||d:c,j=m.exec(a),j?e.isPlainObject(d)?(a=[c.createElement(j[1])],e.fn.attr.call(a,d,!0)):a=[k.createElement(j[1])]:(j=e.buildFragment([g[1]],[k]),a=(j.cacheable?e.clone(j.fragment):j.fragment).childNodes);return e.merge(this,a)}h=c.getElementById(g[2]);if(h&&h.parentNode){if(h.id!==g[2])return f.find(a);this.length=1,this[0]=h}this.context=c,this.selector=a;return this}return!d||d.jquery?(d||f).find(a):this.constructor(d).find(a)}if(e.isFunction(a))return f.ready(a);a.selector!==b&&(this.selector=a.selector,this.context=a.context);return e.makeArray(a,this)},selector:"",jquery:"1.7.1",length:0,size:function(){return this.length},toArray:function(){return F.call(this,0)},get:function(a){return a==null?this.toArray():a<0?this[this.length+a]:this[a]},pushStack:function(a,b,c){var d=this.constructor();e.isArray(a)?E.apply(d,a):e.merge(d,a),d.prevObject=this,d.context=this.context,b==="find"?d.selector=this.selector+(this.selector?" ":"")+c:b&&(d.selector=this.selector+"."+b+"("+c+")");return d},each:function(a,b){return e.each(this,a,b)},ready:function(a){e.bindReady(),A.add(a);return this},eq:function(a){a=+a;return a===-1?this.slice(a):this.slice(a,a+1)},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},slice:function(){return this.pushStack(F.apply(this,arguments),"slice",F.call(arguments).join(","))},map:function(a){return this.pushStack(e.map(this,function(b,c){return a.call(b,c,b)}))},end:function(){return this.prevObject||this.constructor(null)},push:E,sort:[].sort,splice:[].splice},e.fn.init.prototype=e.fn,e.extend=e.fn.extend=function(){var a,c,d,f,g,h,i=arguments[0]||{},j=1,k=arguments.length,l=!1;typeof i=="boolean"&&(l=i,i=arguments[1]||{},j=2),typeof i!="object"&&!e.isFunction(i)&&(i={}),k===j&&(i=this,--j);for(;j<k;j++)if((a=arguments[j])!=null)for(c in a){d=i[c],f=a[c];if(i===f)continue;l&&f&&(e.isPlainObject(f)||(g=e.isArray(f)))?(g?(g=!1,h=d&&e.isArray(d)?d:[]):h=d&&e.isPlainObject(d)?d:{},i[c]=e.extend(l,h,f)):f!==b&&(i[c]=f)}return i},e.extend({noConflict:function(b){a.$===e&&(a.$=g),b&&a.jQuery===e&&(a.jQuery=f);return e},isReady:!1,readyWait:1,holdReady:function(a){a?e.readyWait++:e.ready(!0)},ready:function(a){if(a===!0&&!--e.readyWait||a!==!0&&!e.isReady){if(!c.body)return setTimeout(e.ready,1);e.isReady=!0;if(a!==!0&&--e.readyWait>0)return;A.fireWith(c,[e]),e.fn.trigger&&e(c).trigger("ready").off("ready")}},bindReady:function(){if(!A){A=e.Callbacks("once memory");if(c.readyState==="complete")return setTimeout(e.ready,1);if(c.addEventListener)c.addEventListener("DOMContentLoaded",B,!1),a.addEventListener("load",e.ready,!1);else if(c.attachEvent){c.attachEvent("onreadystatechange",B),a.attachEvent("onload",e.ready);var b=!1;try{b=a.frameElement==null}catch(d){}c.documentElement.doScroll&&b&&J()}}},isFunction:function(a){return e.type(a)==="function"},isArray:Array.isArray||function(a){return e.type(a)==="array"},isWindow:function(a){return a&&typeof a=="object"&&"setInterval"in a},isNumeric:function(a){return!isNaN(parseFloat(a))&&isFinite(a)},type:function(a){return a==null?String(a):I[C.call(a)]||"object"},isPlainObject:function(a){if(!a||e.type(a)!=="object"||a.nodeType||e.isWindow(a))return!1;try{if(a.constructor&&!D.call(a,"constructor")&&!D.call(a.constructor.prototype,"isPrototypeOf"))return!1}catch(c){return!1}var d;for(d in a);return d===b||D.call(a,d)},isEmptyObject:function(a){for(var b in a)return!1;return!0},error:function(a){throw new Error(a)},parseJSON:function(b){if(typeof b!="string"||!b)return null;b=e.trim(b);if(a.JSON&&a.JSON.parse)return a.JSON.parse(b);if(n.test(b.replace(o,"@").replace(p,"]").replace(q,"")))return(new Function("return "+b))();e.error("Invalid JSON: "+b)},parseXML:function(c){var d,f;try{a.DOMParser?(f=new DOMParser,d=f.parseFromString(c,"text/xml")):(d=new ActiveXObject("Microsoft.XMLDOM"),d.async="false",d.loadXML(c))}catch(g){d=b}(!d||!d.documentElement||d.getElementsByTagName("parsererror").length)&&e.error("Invalid XML: "+c);return d},noop:function(){},globalEval:function(b){b&&j.test(b)&&(a.execScript||function(b){a.eval.call(a,b)})(b)},camelCase:function(a){return a.replace(w,"ms-").replace(v,x)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toUpperCase()===b.toUpperCase()},each:function(a,c,d){var f,g=0,h=a.length,i=h===b||e.isFunction(a);if(d){if(i){for(f in a)if(c.apply(a[f],d)===!1)break}else for(;g<h;)if(c.apply(a[g++],d)===!1)break}else if(i){for(f in a)if(c.call(a[f],f,a[f])===!1)break}else for(;g<h;)if(c.call(a[g],g,a[g++])===!1)break;return a},trim:G?function(a){return a==null?"":G.call(a)}:function(a){return a==null?"":(a+"").replace(k,"").replace(l,"")},makeArray:function(a,b){var c=b||[];if(a!=null){var d=e.type(a);a.length==null||d==="string"||d==="function"||d==="regexp"||e.isWindow(a)?E.call(c,a):e.merge(c,a)}return c},inArray:function(a,b,c){var d;if(b){if(H)return H.call(b,a,c);d=b.length,c=c?c<0?Math.max(0,d+c):c:0;for(;c<d;c++)if(c in b&&b[c]===a)return c}return-1},merge:function(a,c){var d=a.length,e=0;if(typeof c.length=="number")for(var f=c.length;e<f;e++)a[d++]=c[e];else while(c[e]!==b)a[d++]=c[e++];a.length=d;return a},grep:function(a,b,c){var d=[],e;c=!!c;for(var f=0,g=a.length;f<g;f++)e=!!b(a[f],f),c!==e&&d.push(a[f]);return d},map:function(a,c,d){var f,g,h=[],i=0,j=a.length,k=a instanceof e||j!==b&&typeof j=="number"&&(j>0&&a[0]&&a[j-1]||j===0||e.isArray(a));if(k)for(;i<j;i++)f=c(a[i],i,d),f!=null&&(h[h.length]=f);else for(g in a)f=c(a[g],g,d),f!=null&&(h[h.length]=f);return h.concat.apply([],h)},guid:1,proxy:function(a,c){if(typeof c=="string"){var d=a[c];c=a,a=d}if(!e.isFunction(a))return b;var f=F.call(arguments,2),g=function(){return a.apply(c,f.concat(F.call(arguments)))};g.guid=a.guid=a.guid||g.guid||e.guid++;return g},access:function(a,c,d,f,g,h){var i=a.length;if(typeof c=="object"){for(var j in c)e.access(a,j,c[j],f,g,d);return a}if(d!==b){f=!h&&f&&e.isFunction(d);for(var k=0;k<i;k++)g(a[k],c,f?d.call(a[k],k,g(a[k],c)):d,h);return a}return i?g(a[0],c):b},now:function(){return(new Date).getTime()},uaMatch:function(a){a=a.toLowerCase();var b=r.exec(a)||s.exec(a)||t.exec(a)||a.indexOf("compatible")<0&&u.exec(a)||[];return{browser:b[1]||"",version:b[2]||"0"}},sub:function(){function a(b,c){return new a.fn.init(b,c)}e.extend(!0,a,this),a.superclass=this,a.fn=a.prototype=this(),a.fn.constructor=a,a.sub=this.sub,a.fn.init=function(d,f){f&&f instanceof e&&!(f instanceof a)&&(f=a(f));return e.fn.init.call(this,d,f,b)},a.fn.init.prototype=a.fn;var b=a(c);return a},browser:{}}),e.each("Boolean Number String Function Array Date RegExp Object".split(" "),function(a,b){I["[object "+b+"]"]=b.toLowerCase()}),z=e.uaMatch(y),z.browser&&(e.browser[z.browser]=!0,e.browser.version=z.version),e.browser.webkit&&(e.browser.safari=!0),j.test(" ")&&(k=/^[\s\xA0]+/,l=/[\s\xA0]+$/),h=e(c),c.addEventListener?B=function(){c.removeEventListener("DOMContentLoaded",B,!1),e.ready()}:c.attachEvent&&(B=function(){c.readyState==="complete"&&(c.detachEvent("onreadystatechange",B),e.ready())});return e}(),g={};f.Callbacks=function(a){a=a?g[a]||h(a):{};var c=[],d=[],e,i,j,k,l,m=function(b){var d,e,g,h,i;for(d=0,e=b.length;d<e;d++)g=b[d],h=f.type(g),h==="array"?m(g):h==="function"&&(!a.unique||!o.has(g))&&c.push(g)},n=function(b,f){f=f||[],e=!a.memory||[b,f],i=!0,l=j||0,j=0,k=c.length;for(;c&&l<k;l++)if(c[l].apply(b,f)===!1&&a.stopOnFalse){e=!0;break}i=!1,c&&(a.once?e===!0?o.disable():c=[]:d&&d.length&&(e=d.shift(),o.fireWith(e[0],e[1])))},o={add:function(){if(c){var a=c.length;m(arguments),i?k=c.length:e&&e!==!0&&(j=a,n(e[0],e[1]))}return this},remove:function(){if(c){var b=arguments,d=0,e=b.length;for(;d<e;d++)for(var f=0;f<c.length;f++)if(b[d]===c[f]){i&&f<=k&&(k--,f<=l&&l--),c.splice(f--,1);if(a.unique)break}}return this},has:function(a){if(c){var b=0,d=c.length;for(;b<d;b++)if(a===c[b])return!0}return!1},empty:function(){c=[];return this},disable:function(){c=d=e=b;return this},disabled:function(){return!c},lock:function(){d=b,(!e||e===!0)&&o.disable();return this},locked:function(){return!d},fireWith:function(b,c){d&&(i?a.once||d.push([b,c]):(!a.once||!e)&&n(b,c));return this},fire:function(){o.fireWith(this,arguments);return this},fired:function(){return!!e}};return o};var i=[].slice;f.extend({Deferred:function(a){var b=f.Callbacks("once memory"),c=f.Callbacks("once memory"),d=f.Callbacks("memory"),e="pending",g={resolve:b,reject:c,notify:d},h={done:b.add,fail:c.add,progress:d.add,state:function(){return e},isResolved:b.fired,isRejected:c.fired,then:function(a,b,c){i.done(a).fail(b).progress(c);return this},always:function(){i.done.apply(i,arguments).fail.apply(i,arguments);return this},pipe:function(a,b,c){return f.Deferred(function(d){f.each({done:[a,"resolve"],fail:[b,"reject"],progress:[c,"notify"]},function(a,b){var c=b[0],e=b[1],g;f.isFunction(c)?i[a](function(){g=c.apply(this,arguments),g&&f.isFunction(g.promise)?g.promise().then(d.resolve,d.reject,d.notify):d[e+"With"](this===i?d:this,[g])}):i[a](d[e])})}).promise()},promise:function(a){if(a==null)a=h;else for(var b in h)a[b]=h[b];return a}},i=h.promise({}),j;for(j in g)i[j]=g[j].fire,i[j+"With"]=g[j].fireWith;i.done(function(){e="resolved"},c.disable,d.lock).fail(function(){e="rejected"},b.disable,d.lock),a&&a.call(i,i);return i},when:function(a){function m(a){return function(b){e[a]=arguments.length>1?i.call(arguments,0):b,j.notifyWith(k,e)}}function l(a){return function(c){b[a]=arguments.length>1?i.call(arguments,0):c,--g||j.resolveWith(j,b)}}var b=i.call(arguments,0),c=0,d=b.length,e=Array(d),g=d,h=d,j=d<=1&&a&&f.isFunction(a.promise)?a:f.Deferred(),k=j.promise();if(d>1){for(;c<d;c++)b[c]&&b[c].promise&&f.isFunction(b[c].promise)?b[c].promise().then(l(c),j.reject,m(c)):--g;g||j.resolveWith(j,b)}else j!==a&&j.resolveWith(j,d?[a]:[]);return k}}),f.support=function(){var b,d,e,g,h,i,j,k,l,m,n,o,p,q=c.createElement("div"),r=c.documentElement;q.setAttribute("className","t"),q.innerHTML="   <link/><table></table><a href='/a' style='top:1px;float:left;opacity:.55;'>a</a><input type='checkbox'/>",d=q.getElementsByTagName("*"),e=q.getElementsByTagName("a")[0];if(!d||!d.length||!e)return{};g=c.createElement("select"),h=g.appendChild(c.createElement("option")),i=q.getElementsByTagName("input")[0],b={leadingWhitespace:q.firstChild.nodeType===3,tbody:!q.getElementsByTagName("tbody").length,htmlSerialize:!!q.getElementsByTagName("link").length,style:/top/.test(e.getAttribute("style")),hrefNormalized:e.getAttribute("href")==="/a",opacity:/^0.55/.test(e.style.opacity),cssFloat:!!e.style.cssFloat,checkOn:i.value==="on",optSelected:h.selected,getSetAttribute:q.className!=="t",enctype:!!c.createElement("form").enctype,html5Clone:c.createElement("nav").cloneNode(!0).outerHTML!=="<:nav></:nav>",submitBubbles:!0,changeBubbles:!0,focusinBubbles:!1,deleteExpando:!0,noCloneEvent:!0,inlineBlockNeedsLayout:!1,shrinkWrapBlocks:!1,reliableMarginRight:!0},i.checked=!0,b.noCloneChecked=i.cloneNode(!0).checked,g.disabled=!0,b.optDisabled=!h.disabled;try{delete q.test}catch(s){b.deleteExpando=!1}!q.addEventListener&&q.attachEvent&&q.fireEvent&&(q.attachEvent("onclick",function(){b.noCloneEvent=!1}),q.cloneNode(!0).fireEvent("onclick")),i=c.createElement("input"),i.value="t",i.setAttribute("type","radio"),b.radioValue=i.value==="t",i.setAttribute("checked","checked"),q.appendChild(i),k=c.createDocumentFragment(),k.appendChild(q.lastChild),b.checkClone=k.cloneNode(!0).cloneNode(!0).lastChild.checked,b.appendChecked=i.checked,k.removeChild(i),k.appendChild(q),q.innerHTML="",a.getComputedStyle&&(j=c.createElement("div"),j.style.width="0",j.style.marginRight="0",q.style.width="2px",q.appendChild(j),b.reliableMarginRight=(parseInt((a.getComputedStyle(j,null)||{marginRight:0}).marginRight,10)||0)===0);if(q.attachEvent)for(o in{submit:1,change:1,focusin:1})n="on"+o,p=n in q,p||(q.setAttribute(n,"return;"),p=typeof q[n]=="function"),b[o+"Bubbles"]=p;k.removeChild(q),k=g=h=j=q=i=null,f(function(){var a,d,e,g,h,i,j,k,m,n,o,r=c.getElementsByTagName("body")[0];!r||(j=1,k="position:absolute;top:0;left:0;width:1px;height:1px;margin:0;",m="visibility:hidden;border:0;",n="style='"+k+"border:5px solid #000;padding:0;'",o="<div "+n+"><div></div></div>"+"<table "+n+" cellpadding='0' cellspacing='0'>"+"<tr><td></td></tr></table>",a=c.createElement("div"),a.style.cssText=m+"width:0;height:0;position:static;top:0;margin-top:"+j+"px",r.insertBefore(a,r.firstChild),q=c.createElement("div"),a.appendChild(q),q.innerHTML="<table><tr><td style='padding:0;border:0;display:none'></td><td>t</td></tr></table>",l=q.getElementsByTagName("td"),p=l[0].offsetHeight===0,l[0].style.display="",l[1].style.display="none",b.reliableHiddenOffsets=p&&l[0].offsetHeight===0,q.innerHTML="",q.style.width=q.style.paddingLeft="1px",f.boxModel=b.boxModel=q.offsetWidth===2,typeof q.style.zoom!="undefined"&&(q.style.display="inline",q.style.zoom=1,b.inlineBlockNeedsLayout=q.offsetWidth===2,q.style.display="",q.innerHTML="<div style='width:4px;'></div>",b.shrinkWrapBlocks=q.offsetWidth!==2),q.style.cssText=k+m,q.innerHTML=o,d=q.firstChild,e=d.firstChild,h=d.nextSibling.firstChild.firstChild,i={doesNotAddBorder:e.offsetTop!==5,doesAddBorderForTableAndCells:h.offsetTop===5},e.style.position="fixed",e.style.top="20px",i.fixedPosition=e.offsetTop===20||e.offsetTop===15,e.style.position=e.style.top="",d.style.overflow="hidden",d.style.position="relative",i.subtractsBorderForOverflowNotVisible=e.offsetTop===-5,i.doesNotIncludeMarginInBodyOffset=r.offsetTop!==j,r.removeChild(a),q=a=null,f.extend(b,i))});return b}();var j=/^(?:\{.*\}|\[.*\])$/,k=/([A-Z])/g;f.extend({cache:{},uuid:0,expando:"jQuery"+(f.fn.jquery+Math.random()).replace(/\D/g,""),noData:{embed:!0,object:"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000",applet:!0},hasData:function(a){a=a.nodeType?f.cache[a[f.expando]]:a[f.expando];return!!a&&!m(a)},data:function(a,c,d,e){if(!!f.acceptData(a)){var g,h,i,j=f.expando,k=typeof c=="string",l=a.nodeType,m=l?f.cache:a,n=l?a[j]:a[j]&&j,o=c==="events";if((!n||!m[n]||!o&&!e&&!m[n].data)&&k&&d===b)return;n||(l?a[j]=n=++f.uuid:n=j),m[n]||(m[n]={},l||(m[n].toJSON=f.noop));if(typeof c=="object"||typeof c=="function")e?m[n]=f.extend(m[n],c):m[n].data=f.extend(m[n].data,c);g=h=m[n],e||(h.data||(h.data={}),h=h.data),d!==b&&(h[f.camelCase(c)]=d);if(o&&!h[c])return g.events;k?(i=h[c],i==null&&(i=h[f.camelCase(c)])):i=h;return i}},removeData:function(a,b,c){if(!!f.acceptData(a)){var d,e,g,h=f.expando,i=a.nodeType,j=i?f.cache:a,k=i?a[h]:h;if(!j[k])return;if(b){d=c?j[k]:j[k].data;if(d){f.isArray(b)||(b in d?b=[b]:(b=f.camelCase(b),b in d?b=[b]:b=b.split(" ")));for(e=0,g=b.length;e<g;e++)delete d[b[e]];if(!(c?m:f.isEmptyObject)(d))return}}if(!c){delete j[k].data;if(!m(j[k]))return}f.support.deleteExpando||!j.setInterval?delete j[k]:j[k]=null,i&&(f.support.deleteExpando?delete a[h]:a.removeAttribute?a.removeAttribute(h):a[h]=null)}},_data:function(a,b,c){return f.data(a,b,c,!0)},acceptData:function(a){if(a.nodeName){var b=f.noData[a.nodeName.toLowerCase()];if(b)return b!==!0&&a.getAttribute("classid")===b}return!0}}),f.fn.extend({data:function(a,c){var d,e,g,h=null;if(typeof a=="undefined"){if(this.length){h=f.data(this[0]);if(this[0].nodeType===1&&!f._data(this[0],"parsedAttrs")){e=this[0].attributes;for(var i=0,j=e.length;i<j;i++)g=e[i].name,g.indexOf("data-")===0&&(g=f.camelCase(g.substring(5)),l(this[0],g,h[g]));f._data(this[0],"parsedAttrs",!0)}}return h}if(typeof a=="object")return this.each(function(){f.data(this,a)});d=a.split("."),d[1]=d[1]?"."+d[1]:"";if(c===b){h=this.triggerHandler("getData"+d[1]+"!",[d[0]]),h===b&&this.length&&(h=f.data(this[0],a),h=l(this[0],a,h));return h===b&&d[1]?this.data(d[0]):h}return this.each(function(){var b=f(this),e=[d[0],c];b.triggerHandler("setData"+d[1]+"!",e),f.data(this,a,c),b.triggerHandler("changeData"+d[1]+"!",e)})},removeData:function(a){return this.each(function(){f.removeData(this,a)})}}),f.extend({_mark:function(a,b){a&&(b=(b||"fx")+"mark",f._data(a,b,(f._data(a,b)||0)+1))},_unmark:function(a,b,c){a!==!0&&(c=b,b=a,a=!1);if(b){c=c||"fx";var d=c+"mark",e=a?0:(f._data(b,d)||1)-1;e?f._data(b,d,e):(f.removeData(b,d,!0),n(b,c,"mark"))}},queue:function(a,b,c){var d;if(a){b=(b||"fx")+"queue",d=f._data(a,b),c&&(!d||f.isArray(c)?d=f._data(a,b,f.makeArray(c)):d.push(c));return d||[]}},dequeue:function(a,b){b=b||"fx";var c=f.queue(a,b),d=c.shift(),e={};d==="inprogress"&&(d=c.shift()),d&&(b==="fx"&&c.unshift("inprogress"),f._data(a,b+".run",e),d.call(a,function(){f.dequeue(a,b)},e)),c.length||(f.removeData(a,b+"queue "+b+".run",!0),n(a,b,"queue"))}}),f.fn.extend({queue:function(a,c){typeof a!="string"&&(c=a,a="fx");if(c===b)return f.queue(this[0],a);return this.each(function(){var b=f.queue(this,a,c);a==="fx"&&b[0]!=="inprogress"&&f.dequeue(this,a)})},dequeue:function(a){return this.each(function(){f.dequeue(this,a)})},delay:function(a,b){a=f.fx?f.fx.speeds[a]||a:a,b=b||"fx";return this.queue(b,function(b,c){var d=setTimeout(b,a);c.stop=function(){clearTimeout(d)}})},clearQueue:function(a){return this.queue(a||"fx",[])},promise:function(a,c){function m(){--h||d.resolveWith(e,[e])}typeof a!="string"&&(c=a,a=b),a=a||"fx";var d=f.Deferred(),e=this,g=e.length,h=1,i=a+"defer",j=a+"queue",k=a+"mark",l;while(g--)if(l=f.data(e[g],i,b,!0)||(f.data(e[g],j,b,!0)||f.data(e[g],k,b,!0))&&f.data(e[g],i,f.Callbacks("once memory"),!0))h++,l.add(m);m();return d.promise()}});var o=/[\n\t\r]/g,p=/\s+/,q=/\r/g,r=/^(?:button|input)$/i,s=/^(?:button|input|object|select|textarea)$/i,t=/^a(?:rea)?$/i,u=/^(?:autofocus|autoplay|async|checked|controls|defer|disabled|hidden|loop|multiple|open|readonly|required|scoped|selected)$/i,v=f.support.getSetAttribute,w,x,y;f.fn.extend({attr:function(a,b){return f.access(this,a,b,!0,f.attr)},removeAttr:function(a){return this.each(function(){f.removeAttr(this,a)})},prop:function(a,b){return f.access(this,a,b,!0,f.prop)},removeProp:function(a){a=f.propFix[a]||a;return this.each(function(){try{this[a]=b,delete this[a]}catch(c){}})},addClass:function(a){var b,c,d,e,g,h,i;if(f.isFunction(a))return this.each(function(b){f(this).addClass(a.call(this,b,this.className))});if(a&&typeof a=="string"){b=a.split(p);for(c=0,d=this.length;c<d;c++){e=this[c];if(e.nodeType===1)if(!e.className&&b.length===1)e.className=a;else{g=" "+e.className+" ";for(h=0,i=b.length;h<i;h++)~g.indexOf(" "+b[h]+" ")||(g+=b[h]+" ");e.className=f.trim(g)}}}return this},removeClass:function(a){var c,d,e,g,h,i,j;if(f.isFunction(a))return this.each(function(b){f(this).removeClass(a.call(this,b,this.className))});if(a&&typeof a=="string"||a===b){c=(a||"").split(p);for(d=0,e=this.length;d<e;d++){g=this[d];if(g.nodeType===1&&g.className)if(a){h=(" "+g.className+" ").replace(o," ");for(i=0,j=c.length;i<j;i++)h=h.replace(" "+c[i]+" "," ");g.className=f.trim(h)}else g.className=""}}return this},toggleClass:function(a,b){var c=typeof a,d=typeof b=="boolean";if(f.isFunction(a))return this.each(function(c){f(this).toggleClass(a.call(this,c,this.className,b),b)});return this.each(function(){if(c==="string"){var e,g=0,h=f(this),i=b,j=a.split(p);while(e=j[g++])i=d?i:!h.hasClass(e),h[i?"addClass":"removeClass"](e)}else if(c==="undefined"||c==="boolean")this.className&&f._data(this,"__className__",this.className),this.className=this.className||a===!1?"":f._data(this,"__className__")||""})},hasClass:function(a){var b=" "+a+" ",c=0,d=this.length;for(;c<d;c++)if(this[c].nodeType===1&&(" "+this[c].className+" ").replace(o," ").indexOf(b)>-1)return!0;return!1},val:function(a){var c,d,e,g=this[0];{if(!!arguments.length){e=f.isFunction(a);return this.each(function(d){var g=f(this),h;if(this.nodeType===1){e?h=a.call(this,d,g.val()):h=a,h==null?h="":typeof h=="number"?h+="":f.isArray(h)&&(h=f.map(h,function(a){return a==null?"":a+""})),c=f.valHooks[this.nodeName.toLowerCase()]||f.valHooks[this.type];if(!c||!("set"in c)||c.set(this,h,"value")===b)this.value=h}})}if(g){c=f.valHooks[g.nodeName.toLowerCase()]||f.valHooks[g.type];if(c&&"get"in c&&(d=c.get(g,"value"))!==b)return d;d=g.value;return typeof d=="string"?d.replace(q,""):d==null?"":d}}}}),f.extend({valHooks:{option:{get:function(a){var b=a.attributes.value;return!b||b.specified?a.value:a.text}},select:{get:function(a){var b,c,d,e,g=a.selectedIndex,h=[],i=a.options,j=a.type==="select-one";if(g<0)return null;c=j?g:0,d=j?g+1:i.length;for(;c<d;c++){e=i[c];if(e.selected&&(f.support.optDisabled?!e.disabled:e.getAttribute("disabled")===null)&&(!e.parentNode.disabled||!f.nodeName(e.parentNode,"optgroup"))){b=f(e).val();if(j)return b;h.push(b)}}if(j&&!h.length&&i.length)return f(i[g]).val();return h},set:function(a,b){var c=f.makeArray(b);f(a).find("option").each(function(){this.selected=f.inArray(f(this).val(),c)>=0}),c.length||(a.selectedIndex=-1);return c}}},attrFn:{val:!0,css:!0,html:!0,text:!0,data:!0,width:!0,height:!0,offset:!0},attr:function(a,c,d,e){var g,h,i,j=a.nodeType;if(!!a&&j!==3&&j!==8&&j!==2){if(e&&c in f.attrFn)return f(a)[c](d);if(typeof a.getAttribute=="undefined")return f.prop(a,c,d);i=j!==1||!f.isXMLDoc(a),i&&(c=c.toLowerCase(),h=f.attrHooks[c]||(u.test(c)?x:w));if(d!==b){if(d===null){f.removeAttr(a,c);return}if(h&&"set"in h&&i&&(g=h.set(a,d,c))!==b)return g;a.setAttribute(c,""+d);return d}if(h&&"get"in h&&i&&(g=h.get(a,c))!==null)return g;g=a.getAttribute(c);return g===null?b:g}},removeAttr:function(a,b){var c,d,e,g,h=0;if(b&&a.nodeType===1){d=b.toLowerCase().split(p),g=d.length;for(;h<g;h++)e=d[h],e&&(c=f.propFix[e]||e,f.attr(a,e,""),a.removeAttribute(v?e:c),u.test(e)&&c in a&&(a[c]=!1))}},attrHooks:{type:{set:function(a,b){if(r.test(a.nodeName)&&a.parentNode)f.error("type property can't be changed");else if(!f.support.radioValue&&b==="radio"&&f.nodeName(a,"input")){var c=a.value;a.setAttribute("type",b),c&&(a.value=c);return b}}},value:{get:function(a,b){if(w&&f.nodeName(a,"button"))return w.get(a,b);return b in a?a.value:null},set:function(a,b,c){if(w&&f.nodeName(a,"button"))return w.set(a,b,c);a.value=b}}},propFix:{tabindex:"tabIndex",readonly:"readOnly","for":"htmlFor","class":"className",maxlength:"maxLength",cellspacing:"cellSpacing",cellpadding:"cellPadding",rowspan:"rowSpan",colspan:"colSpan",usemap:"useMap",frameborder:"frameBorder",contenteditable:"contentEditable"},prop:function(a,c,d){var e,g,h,i=a.nodeType;if(!!a&&i!==3&&i!==8&&i!==2){h=i!==1||!f.isXMLDoc(a),h&&(c=f.propFix[c]||c,g=f.propHooks[c]);return d!==b?g&&"set"in g&&(e=g.set(a,d,c))!==b?e:a[c]=d:g&&"get"in g&&(e=g.get(a,c))!==null?e:a[c]}},propHooks:{tabIndex:{get:function(a){var c=a.getAttributeNode("tabindex");return c&&c.specified?parseInt(c.value,10):s.test(a.nodeName)||t.test(a.nodeName)&&a.href?0:b}}}}),f.attrHooks.tabindex=f.propHooks.tabIndex,x={get:function(a,c){var d,e=f.prop(a,c);return e===!0||typeof e!="boolean"&&(d=a.getAttributeNode(c))&&d.nodeValue!==!1?c.toLowerCase():b},set:function(a,b,c){var d;b===!1?f.removeAttr(a,c):(d=f.propFix[c]||c,d in a&&(a[d]=!0),a.setAttribute(c,c.toLowerCase()));return c}},v||(y={name:!0,id:!0},w=f.valHooks.button={get:function(a,c){var d;d=a.getAttributeNode(c);return d&&(y[c]?d.nodeValue!=="":d.specified)?d.nodeValue:b},set:function(a,b,d){var e=a.getAttributeNode(d);e||(e=c.createAttribute(d),a.setAttributeNode(e));return e.nodeValue=b+""}},f.attrHooks.tabindex.set=w.set,f.each(["width","height"],function(a,b){f.attrHooks[b]=f.extend(f.attrHooks[b],{set:function(a,c){if(c===""){a.setAttribute(b,"auto");return c}}})}),f.attrHooks.contenteditable={get:w.get,set:function(a,b,c){b===""&&(b="false"),w.set(a,b,c)}}),f.support.hrefNormalized||f.each(["href","src","width","height"],function(a,c){f.attrHooks[c]=f.extend(f.attrHooks[c],{get:function(a){var d=a.getAttribute(c,2);return d===null?b:d}})}),f.support.style||(f.attrHooks.style={get:function(a){return a.style.cssText.toLowerCase()||b},set:function(a,b){return a.style.cssText=""+b}}),f.support.optSelected||(f.propHooks.selected=f.extend(f.propHooks.selected,{get:function(a){var b=a.parentNode;b&&(b.selectedIndex,b.parentNode&&b.parentNode.selectedIndex);return null}})),f.support.enctype||(f.propFix.enctype="encoding"),f.support.checkOn||f.each(["radio","checkbox"],function(){f.valHooks[this]={get:function(a){return a.getAttribute("value")===null?"on":a.value}}}),f.each(["radio","checkbox"],function(){f.valHooks[this]=f.extend(f.valHooks[this],{set:function(a,b){if(f.isArray(b))return a.checked=f.inArray(f(a).val(),b)>=0}})});var z=/^(?:textarea|input|select)$/i,A=/^([^\.]*)?(?:\.(.+))?$/,B=/\bhover(\.\S+)?\b/,C=/^key/,D=/^(?:mouse|contextmenu)|click/,E=/^(?:focusinfocus|focusoutblur)$/,F=/^(\w*)(?:#([\w\-]+))?(?:\.([\w\-]+))?$/,G=function(a){var b=F.exec(a);b&&(b[1]=(b[1]||"").toLowerCase(),b[3]=b[3]&&new RegExp("(?:^|\\s)"+b[3]+"(?:\\s|$)"));return b},H=function(a,b){var c=a.attributes||{};return(!b[1]||a.nodeName.toLowerCase()===b[1])&&(!b[2]||(c.id||{}).value===b[2])&&(!b[3]||b[3].test((c["class"]||{}).value))},I=function(a){return f.event.special.hover?a:a.replace(B,"mouseenter$1 mouseleave$1")};
-f.event={add:function(a,c,d,e,g){var h,i,j,k,l,m,n,o,p,q,r,s;if(!(a.nodeType===3||a.nodeType===8||!c||!d||!(h=f._data(a)))){d.handler&&(p=d,d=p.handler),d.guid||(d.guid=f.guid++),j=h.events,j||(h.events=j={}),i=h.handle,i||(h.handle=i=function(a){return typeof f!="undefined"&&(!a||f.event.triggered!==a.type)?f.event.dispatch.apply(i.elem,arguments):b},i.elem=a),c=f.trim(I(c)).split(" ");for(k=0;k<c.length;k++){l=A.exec(c[k])||[],m=l[1],n=(l[2]||"").split(".").sort(),s=f.event.special[m]||{},m=(g?s.delegateType:s.bindType)||m,s=f.event.special[m]||{},o=f.extend({type:m,origType:l[1],data:e,handler:d,guid:d.guid,selector:g,quick:G(g),namespace:n.join(".")},p),r=j[m];if(!r){r=j[m]=[],r.delegateCount=0;if(!s.setup||s.setup.call(a,e,n,i)===!1)a.addEventListener?a.addEventListener(m,i,!1):a.attachEvent&&a.attachEvent("on"+m,i)}s.add&&(s.add.call(a,o),o.handler.guid||(o.handler.guid=d.guid)),g?r.splice(r.delegateCount++,0,o):r.push(o),f.event.global[m]=!0}a=null}},global:{},remove:function(a,b,c,d,e){var g=f.hasData(a)&&f._data(a),h,i,j,k,l,m,n,o,p,q,r,s;if(!!g&&!!(o=g.events)){b=f.trim(I(b||"")).split(" ");for(h=0;h<b.length;h++){i=A.exec(b[h])||[],j=k=i[1],l=i[2];if(!j){for(j in o)f.event.remove(a,j+b[h],c,d,!0);continue}p=f.event.special[j]||{},j=(d?p.delegateType:p.bindType)||j,r=o[j]||[],m=r.length,l=l?new RegExp("(^|\\.)"+l.split(".").sort().join("\\.(?:.*\\.)?")+"(\\.|$)"):null;for(n=0;n<r.length;n++)s=r[n],(e||k===s.origType)&&(!c||c.guid===s.guid)&&(!l||l.test(s.namespace))&&(!d||d===s.selector||d==="**"&&s.selector)&&(r.splice(n--,1),s.selector&&r.delegateCount--,p.remove&&p.remove.call(a,s));r.length===0&&m!==r.length&&((!p.teardown||p.teardown.call(a,l)===!1)&&f.removeEvent(a,j,g.handle),delete o[j])}f.isEmptyObject(o)&&(q=g.handle,q&&(q.elem=null),f.removeData(a,["events","handle"],!0))}},customEvent:{getData:!0,setData:!0,changeData:!0},trigger:function(c,d,e,g){if(!e||e.nodeType!==3&&e.nodeType!==8){var h=c.type||c,i=[],j,k,l,m,n,o,p,q,r,s;if(E.test(h+f.event.triggered))return;h.indexOf("!")>=0&&(h=h.slice(0,-1),k=!0),h.indexOf(".")>=0&&(i=h.split("."),h=i.shift(),i.sort());if((!e||f.event.customEvent[h])&&!f.event.global[h])return;c=typeof c=="object"?c[f.expando]?c:new f.Event(h,c):new f.Event(h),c.type=h,c.isTrigger=!0,c.exclusive=k,c.namespace=i.join("."),c.namespace_re=c.namespace?new RegExp("(^|\\.)"+i.join("\\.(?:.*\\.)?")+"(\\.|$)"):null,o=h.indexOf(":")<0?"on"+h:"";if(!e){j=f.cache;for(l in j)j[l].events&&j[l].events[h]&&f.event.trigger(c,d,j[l].handle.elem,!0);return}c.result=b,c.target||(c.target=e),d=d!=null?f.makeArray(d):[],d.unshift(c),p=f.event.special[h]||{};if(p.trigger&&p.trigger.apply(e,d)===!1)return;r=[[e,p.bindType||h]];if(!g&&!p.noBubble&&!f.isWindow(e)){s=p.delegateType||h,m=E.test(s+h)?e:e.parentNode,n=null;for(;m;m=m.parentNode)r.push([m,s]),n=m;n&&n===e.ownerDocument&&r.push([n.defaultView||n.parentWindow||a,s])}for(l=0;l<r.length&&!c.isPropagationStopped();l++)m=r[l][0],c.type=r[l][1],q=(f._data(m,"events")||{})[c.type]&&f._data(m,"handle"),q&&q.apply(m,d),q=o&&m[o],q&&f.acceptData(m)&&q.apply(m,d)===!1&&c.preventDefault();c.type=h,!g&&!c.isDefaultPrevented()&&(!p._default||p._default.apply(e.ownerDocument,d)===!1)&&(h!=="click"||!f.nodeName(e,"a"))&&f.acceptData(e)&&o&&e[h]&&(h!=="focus"&&h!=="blur"||c.target.offsetWidth!==0)&&!f.isWindow(e)&&(n=e[o],n&&(e[o]=null),f.event.triggered=h,e[h](),f.event.triggered=b,n&&(e[o]=n));return c.result}},dispatch:function(c){c=f.event.fix(c||a.event);var d=(f._data(this,"events")||{})[c.type]||[],e=d.delegateCount,g=[].slice.call(arguments,0),h=!c.exclusive&&!c.namespace,i=[],j,k,l,m,n,o,p,q,r,s,t;g[0]=c,c.delegateTarget=this;if(e&&!c.target.disabled&&(!c.button||c.type!=="click")){m=f(this),m.context=this.ownerDocument||this;for(l=c.target;l!=this;l=l.parentNode||this){o={},q=[],m[0]=l;for(j=0;j<e;j++)r=d[j],s=r.selector,o[s]===b&&(o[s]=r.quick?H(l,r.quick):m.is(s)),o[s]&&q.push(r);q.length&&i.push({elem:l,matches:q})}}d.length>e&&i.push({elem:this,matches:d.slice(e)});for(j=0;j<i.length&&!c.isPropagationStopped();j++){p=i[j],c.currentTarget=p.elem;for(k=0;k<p.matches.length&&!c.isImmediatePropagationStopped();k++){r=p.matches[k];if(h||!c.namespace&&!r.namespace||c.namespace_re&&c.namespace_re.test(r.namespace))c.data=r.data,c.handleObj=r,n=((f.event.special[r.origType]||{}).handle||r.handler).apply(p.elem,g),n!==b&&(c.result=n,n===!1&&(c.preventDefault(),c.stopPropagation()))}}return c.result},props:"attrChange attrName relatedNode srcElement altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "),fixHooks:{},keyHooks:{props:"char charCode key keyCode".split(" "),filter:function(a,b){a.which==null&&(a.which=b.charCode!=null?b.charCode:b.keyCode);return a}},mouseHooks:{props:"button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement".split(" "),filter:function(a,d){var e,f,g,h=d.button,i=d.fromElement;a.pageX==null&&d.clientX!=null&&(e=a.target.ownerDocument||c,f=e.documentElement,g=e.body,a.pageX=d.clientX+(f&&f.scrollLeft||g&&g.scrollLeft||0)-(f&&f.clientLeft||g&&g.clientLeft||0),a.pageY=d.clientY+(f&&f.scrollTop||g&&g.scrollTop||0)-(f&&f.clientTop||g&&g.clientTop||0)),!a.relatedTarget&&i&&(a.relatedTarget=i===a.target?d.toElement:i),!a.which&&h!==b&&(a.which=h&1?1:h&2?3:h&4?2:0);return a}},fix:function(a){if(a[f.expando])return a;var d,e,g=a,h=f.event.fixHooks[a.type]||{},i=h.props?this.props.concat(h.props):this.props;a=f.Event(g);for(d=i.length;d;)e=i[--d],a[e]=g[e];a.target||(a.target=g.srcElement||c),a.target.nodeType===3&&(a.target=a.target.parentNode),a.metaKey===b&&(a.metaKey=a.ctrlKey);return h.filter?h.filter(a,g):a},special:{ready:{setup:f.bindReady},load:{noBubble:!0},focus:{delegateType:"focusin"},blur:{delegateType:"focusout"},beforeunload:{setup:function(a,b,c){f.isWindow(this)&&(this.onbeforeunload=c)},teardown:function(a,b){this.onbeforeunload===b&&(this.onbeforeunload=null)}}},simulate:function(a,b,c,d){var e=f.extend(new f.Event,c,{type:a,isSimulated:!0,originalEvent:{}});d?f.event.trigger(e,null,b):f.event.dispatch.call(b,e),e.isDefaultPrevented()&&c.preventDefault()}},f.event.handle=f.event.dispatch,f.removeEvent=c.removeEventListener?function(a,b,c){a.removeEventListener&&a.removeEventListener(b,c,!1)}:function(a,b,c){a.detachEvent&&a.detachEvent("on"+b,c)},f.Event=function(a,b){if(!(this instanceof f.Event))return new f.Event(a,b);a&&a.type?(this.originalEvent=a,this.type=a.type,this.isDefaultPrevented=a.defaultPrevented||a.returnValue===!1||a.getPreventDefault&&a.getPreventDefault()?K:J):this.type=a,b&&f.extend(this,b),this.timeStamp=a&&a.timeStamp||f.now(),this[f.expando]=!0},f.Event.prototype={preventDefault:function(){this.isDefaultPrevented=K;var a=this.originalEvent;!a||(a.preventDefault?a.preventDefault():a.returnValue=!1)},stopPropagation:function(){this.isPropagationStopped=K;var a=this.originalEvent;!a||(a.stopPropagation&&a.stopPropagation(),a.cancelBubble=!0)},stopImmediatePropagation:function(){this.isImmediatePropagationStopped=K,this.stopPropagation()},isDefaultPrevented:J,isPropagationStopped:J,isImmediatePropagationStopped:J},f.each({mouseenter:"mouseover",mouseleave:"mouseout"},function(a,b){f.event.special[a]={delegateType:b,bindType:b,handle:function(a){var c=this,d=a.relatedTarget,e=a.handleObj,g=e.selector,h;if(!d||d!==c&&!f.contains(c,d))a.type=e.origType,h=e.handler.apply(this,arguments),a.type=b;return h}}}),f.support.submitBubbles||(f.event.special.submit={setup:function(){if(f.nodeName(this,"form"))return!1;f.event.add(this,"click._submit keypress._submit",function(a){var c=a.target,d=f.nodeName(c,"input")||f.nodeName(c,"button")?c.form:b;d&&!d._submit_attached&&(f.event.add(d,"submit._submit",function(a){this.parentNode&&!a.isTrigger&&f.event.simulate("submit",this.parentNode,a,!0)}),d._submit_attached=!0)})},teardown:function(){if(f.nodeName(this,"form"))return!1;f.event.remove(this,"._submit")}}),f.support.changeBubbles||(f.event.special.change={setup:function(){if(z.test(this.nodeName)){if(this.type==="checkbox"||this.type==="radio")f.event.add(this,"propertychange._change",function(a){a.originalEvent.propertyName==="checked"&&(this._just_changed=!0)}),f.event.add(this,"click._change",function(a){this._just_changed&&!a.isTrigger&&(this._just_changed=!1,f.event.simulate("change",this,a,!0))});return!1}f.event.add(this,"beforeactivate._change",function(a){var b=a.target;z.test(b.nodeName)&&!b._change_attached&&(f.event.add(b,"change._change",function(a){this.parentNode&&!a.isSimulated&&!a.isTrigger&&f.event.simulate("change",this.parentNode,a,!0)}),b._change_attached=!0)})},handle:function(a){var b=a.target;if(this!==b||a.isSimulated||a.isTrigger||b.type!=="radio"&&b.type!=="checkbox")return a.handleObj.handler.apply(this,arguments)},teardown:function(){f.event.remove(this,"._change");return z.test(this.nodeName)}}),f.support.focusinBubbles||f.each({focus:"focusin",blur:"focusout"},function(a,b){var d=0,e=function(a){f.event.simulate(b,a.target,f.event.fix(a),!0)};f.event.special[b]={setup:function(){d++===0&&c.addEventListener(a,e,!0)},teardown:function(){--d===0&&c.removeEventListener(a,e,!0)}}}),f.fn.extend({on:function(a,c,d,e,g){var h,i;if(typeof a=="object"){typeof c!="string"&&(d=c,c=b);for(i in a)this.on(i,c,d,a[i],g);return this}d==null&&e==null?(e=c,d=c=b):e==null&&(typeof c=="string"?(e=d,d=b):(e=d,d=c,c=b));if(e===!1)e=J;else if(!e)return this;g===1&&(h=e,e=function(a){f().off(a);return h.apply(this,arguments)},e.guid=h.guid||(h.guid=f.guid++));return this.each(function(){f.event.add(this,a,e,d,c)})},one:function(a,b,c,d){return this.on.call(this,a,b,c,d,1)},off:function(a,c,d){if(a&&a.preventDefault&&a.handleObj){var e=a.handleObj;f(a.delegateTarget).off(e.namespace?e.type+"."+e.namespace:e.type,e.selector,e.handler);return this}if(typeof a=="object"){for(var g in a)this.off(g,c,a[g]);return this}if(c===!1||typeof c=="function")d=c,c=b;d===!1&&(d=J);return this.each(function(){f.event.remove(this,a,d,c)})},bind:function(a,b,c){return this.on(a,null,b,c)},unbind:function(a,b){return this.off(a,null,b)},live:function(a,b,c){f(this.context).on(a,this.selector,b,c);return this},die:function(a,b){f(this.context).off(a,this.selector||"**",b);return this},delegate:function(a,b,c,d){return this.on(b,a,c,d)},undelegate:function(a,b,c){return arguments.length==1?this.off(a,"**"):this.off(b,a,c)},trigger:function(a,b){return this.each(function(){f.event.trigger(a,b,this)})},triggerHandler:function(a,b){if(this[0])return f.event.trigger(a,b,this[0],!0)},toggle:function(a){var b=arguments,c=a.guid||f.guid++,d=0,e=function(c){var e=(f._data(this,"lastToggle"+a.guid)||0)%d;f._data(this,"lastToggle"+a.guid,e+1),c.preventDefault();return b[e].apply(this,arguments)||!1};e.guid=c;while(d<b.length)b[d++].guid=c;return this.click(e)},hover:function(a,b){return this.mouseenter(a).mouseleave(b||a)}}),f.each("blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error contextmenu".split(" "),function(a,b){f.fn[b]=function(a,c){c==null&&(c=a,a=null);return arguments.length>0?this.on(b,null,a,c):this.trigger(b)},f.attrFn&&(f.attrFn[b]=!0),C.test(b)&&(f.event.fixHooks[b]=f.event.keyHooks),D.test(b)&&(f.event.fixHooks[b]=f.event.mouseHooks)}),function(){function x(a,b,c,e,f,g){for(var h=0,i=e.length;h<i;h++){var j=e[h];if(j){var k=!1;j=j[a];while(j){if(j[d]===c){k=e[j.sizset];break}if(j.nodeType===1){g||(j[d]=c,j.sizset=h);if(typeof b!="string"){if(j===b){k=!0;break}}else if(m.filter(b,[j]).length>0){k=j;break}}j=j[a]}e[h]=k}}}function w(a,b,c,e,f,g){for(var h=0,i=e.length;h<i;h++){var j=e[h];if(j){var k=!1;j=j[a];while(j){if(j[d]===c){k=e[j.sizset];break}j.nodeType===1&&!g&&(j[d]=c,j.sizset=h);if(j.nodeName.toLowerCase()===b){k=j;break}j=j[a]}e[h]=k}}}var a=/((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^\[\]]*\]|['"][^'"]*['"]|[^\[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,d="sizcache"+(Math.random()+"").replace(".",""),e=0,g=Object.prototype.toString,h=!1,i=!0,j=/\\/g,k=/\r\n/g,l=/\W/;[0,0].sort(function(){i=!1;return 0});var m=function(b,d,e,f){e=e||[],d=d||c;var h=d;if(d.nodeType!==1&&d.nodeType!==9)return[];if(!b||typeof b!="string")return e;var i,j,k,l,n,q,r,t,u=!0,v=m.isXML(d),w=[],x=b;do{a.exec(""),i=a.exec(x);if(i){x=i[3],w.push(i[1]);if(i[2]){l=i[3];break}}}while(i);if(w.length>1&&p.exec(b))if(w.length===2&&o.relative[w[0]])j=y(w[0]+w[1],d,f);else{j=o.relative[w[0]]?[d]:m(w.shift(),d);while(w.length)b=w.shift(),o.relative[b]&&(b+=w.shift()),j=y(b,j,f)}else{!f&&w.length>1&&d.nodeType===9&&!v&&o.match.ID.test(w[0])&&!o.match.ID.test(w[w.length-1])&&(n=m.find(w.shift(),d,v),d=n.expr?m.filter(n.expr,n.set)[0]:n.set[0]);if(d){n=f?{expr:w.pop(),set:s(f)}:m.find(w.pop(),w.length===1&&(w[0]==="~"||w[0]==="+")&&d.parentNode?d.parentNode:d,v),j=n.expr?m.filter(n.expr,n.set):n.set,w.length>0?k=s(j):u=!1;while(w.length)q=w.pop(),r=q,o.relative[q]?r=w.pop():q="",r==null&&(r=d),o.relative[q](k,r,v)}else k=w=[]}k||(k=j),k||m.error(q||b);if(g.call(k)==="[object Array]")if(!u)e.push.apply(e,k);else if(d&&d.nodeType===1)for(t=0;k[t]!=null;t++)k[t]&&(k[t]===!0||k[t].nodeType===1&&m.contains(d,k[t]))&&e.push(j[t]);else for(t=0;k[t]!=null;t++)k[t]&&k[t].nodeType===1&&e.push(j[t]);else s(k,e);l&&(m(l,h,e,f),m.uniqueSort(e));return e};m.uniqueSort=function(a){if(u){h=i,a.sort(u);if(h)for(var b=1;b<a.length;b++)a[b]===a[b-1]&&a.splice(b--,1)}return a},m.matches=function(a,b){return m(a,null,null,b)},m.matchesSelector=function(a,b){return m(b,null,null,[a]).length>0},m.find=function(a,b,c){var d,e,f,g,h,i;if(!a)return[];for(e=0,f=o.order.length;e<f;e++){h=o.order[e];if(g=o.leftMatch[h].exec(a)){i=g[1],g.splice(1,1);if(i.substr(i.length-1)!=="\\"){g[1]=(g[1]||"").replace(j,""),d=o.find[h](g,b,c);if(d!=null){a=a.replace(o.match[h],"");break}}}}d||(d=typeof b.getElementsByTagName!="undefined"?b.getElementsByTagName("*"):[]);return{set:d,expr:a}},m.filter=function(a,c,d,e){var f,g,h,i,j,k,l,n,p,q=a,r=[],s=c,t=c&&c[0]&&m.isXML(c[0]);while(a&&c.length){for(h in o.filter)if((f=o.leftMatch[h].exec(a))!=null&&f[2]){k=o.filter[h],l=f[1],g=!1,f.splice(1,1);if(l.substr(l.length-1)==="\\")continue;s===r&&(r=[]);if(o.preFilter[h]){f=o.preFilter[h](f,s,d,r,e,t);if(!f)g=i=!0;else if(f===!0)continue}if(f)for(n=0;(j=s[n])!=null;n++)j&&(i=k(j,f,n,s),p=e^i,d&&i!=null?p?g=!0:s[n]=!1:p&&(r.push(j),g=!0));if(i!==b){d||(s=r),a=a.replace(o.match[h],"");if(!g)return[];break}}if(a===q)if(g==null)m.error(a);else break;q=a}return s},m.error=function(a){throw new Error("Syntax error, unrecognized expression: "+a)};var n=m.getText=function(a){var b,c,d=a.nodeType,e="";if(d){if(d===1||d===9){if(typeof a.textContent=="string")return a.textContent;if(typeof a.innerText=="string")return a.innerText.replace(k,"");for(a=a.firstChild;a;a=a.nextSibling)e+=n(a)}else if(d===3||d===4)return a.nodeValue}else for(b=0;c=a[b];b++)c.nodeType!==8&&(e+=n(c));return e},o=m.selectors={order:["ID","NAME","TAG"],match:{ID:/#((?:[\w\u00c0-\uFFFF\-]|\\.)+)/,CLASS:/\.((?:[\w\u00c0-\uFFFF\-]|\\.)+)/,NAME:/\[name=['"]*((?:[\w\u00c0-\uFFFF\-]|\\.)+)['"]*\]/,ATTR:/\[\s*((?:[\w\u00c0-\uFFFF\-]|\\.)+)\s*(?:(\S?=)\s*(?:(['"])(.*?)\3|(#?(?:[\w\u00c0-\uFFFF\-]|\\.)*)|)|)\s*\]/,TAG:/^((?:[\w\u00c0-\uFFFF\*\-]|\\.)+)/,CHILD:/:(only|nth|last|first)-child(?:\(\s*(even|odd|(?:[+\-]?\d+|(?:[+\-]?\d*)?n\s*(?:[+\-]\s*\d+)?))\s*\))?/,POS:/:(nth|eq|gt|lt|first|last|even|odd)(?:\((\d*)\))?(?=[^\-]|$)/,PSEUDO:/:((?:[\w\u00c0-\uFFFF\-]|\\.)+)(?:\((['"]?)((?:\([^\)]+\)|[^\(\)]*)+)\2\))?/},leftMatch:{},attrMap:{"class":"className","for":"htmlFor"},attrHandle:{href:function(a){return a.getAttribute("href")},type:function(a){return a.getAttribute("type")}},relative:{"+":function(a,b){var c=typeof b=="string",d=c&&!l.test(b),e=c&&!d;d&&(b=b.toLowerCase());for(var f=0,g=a.length,h;f<g;f++)if(h=a[f]){while((h=h.previousSibling)&&h.nodeType!==1);a[f]=e||h&&h.nodeName.toLowerCase()===b?h||!1:h===b}e&&m.filter(b,a,!0)},">":function(a,b){var c,d=typeof b=="string",e=0,f=a.length;if(d&&!l.test(b)){b=b.toLowerCase();for(;e<f;e++){c=a[e];if(c){var g=c.parentNode;a[e]=g.nodeName.toLowerCase()===b?g:!1}}}else{for(;e<f;e++)c=a[e],c&&(a[e]=d?c.parentNode:c.parentNode===b);d&&m.filter(b,a,!0)}},"":function(a,b,c){var d,f=e++,g=x;typeof b=="string"&&!l.test(b)&&(b=b.toLowerCase(),d=b,g=w),g("parentNode",b,f,a,d,c)},"~":function(a,b,c){var d,f=e++,g=x;typeof b=="string"&&!l.test(b)&&(b=b.toLowerCase(),d=b,g=w),g("previousSibling",b,f,a,d,c)}},find:{ID:function(a,b,c){if(typeof b.getElementById!="undefined"&&!c){var d=b.getElementById(a[1]);return d&&d.parentNode?[d]:[]}},NAME:function(a,b){if(typeof b.getElementsByName!="undefined"){var c=[],d=b.getElementsByName(a[1]);for(var e=0,f=d.length;e<f;e++)d[e].getAttribute("name")===a[1]&&c.push(d[e]);return c.length===0?null:c}},TAG:function(a,b){if(typeof b.getElementsByTagName!="undefined")return b.getElementsByTagName(a[1])}},preFilter:{CLASS:function(a,b,c,d,e,f){a=" "+a[1].replace(j,"")+" ";if(f)return a;for(var g=0,h;(h=b[g])!=null;g++)h&&(e^(h.className&&(" "+h.className+" ").replace(/[\t\n\r]/g," ").indexOf(a)>=0)?c||d.push(h):c&&(b[g]=!1));return!1},ID:function(a){return a[1].replace(j,"")},TAG:function(a,b){return a[1].replace(j,"").toLowerCase()},CHILD:function(a){if(a[1]==="nth"){a[2]||m.error(a[0]),a[2]=a[2].replace(/^\+|\s*/g,"");var b=/(-?)(\d*)(?:n([+\-]?\d*))?/.exec(a[2]==="even"&&"2n"||a[2]==="odd"&&"2n+1"||!/\D/.test(a[2])&&"0n+"+a[2]||a[2]);a[2]=b[1]+(b[2]||1)-0,a[3]=b[3]-0}else a[2]&&m.error(a[0]);a[0]=e++;return a},ATTR:function(a,b,c,d,e,f){var g=a[1]=a[1].replace(j,"");!f&&o.attrMap[g]&&(a[1]=o.attrMap[g]),a[4]=(a[4]||a[5]||"").replace(j,""),a[2]==="~="&&(a[4]=" "+a[4]+" ");return a},PSEUDO:function(b,c,d,e,f){if(b[1]==="not")if((a.exec(b[3])||"").length>1||/^\w/.test(b[3]))b[3]=m(b[3],null,null,c);else{var g=m.filter(b[3],c,d,!0^f);d||e.push.apply(e,g);return!1}else if(o.match.POS.test(b[0])||o.match.CHILD.test(b[0]))return!0;return b},POS:function(a){a.unshift(!0);return a}},filters:{enabled:function(a){return a.disabled===!1&&a.type!=="hidden"},disabled:function(a){return a.disabled===!0},checked:function(a){return a.checked===!0},selected:function(a){a.parentNode&&a.parentNode.selectedIndex;return a.selected===!0},parent:function(a){return!!a.firstChild},empty:function(a){return!a.firstChild},has:function(a,b,c){return!!m(c[3],a).length},header:function(a){return/h\d/i.test(a.nodeName)},text:function(a){var b=a.getAttribute("type"),c=a.type;return a.nodeName.toLowerCase()==="input"&&"text"===c&&(b===c||b===null)},radio:function(a){return a.nodeName.toLowerCase()==="input"&&"radio"===a.type},checkbox:function(a){return a.nodeName.toLowerCase()==="input"&&"checkbox"===a.type},file:function(a){return a.nodeName.toLowerCase()==="input"&&"file"===a.type},password:function(a){return a.nodeName.toLowerCase()==="input"&&"password"===a.type},submit:function(a){var b=a.nodeName.toLowerCase();return(b==="input"||b==="button")&&"submit"===a.type},image:function(a){return a.nodeName.toLowerCase()==="input"&&"image"===a.type},reset:function(a){var b=a.nodeName.toLowerCase();return(b==="input"||b==="button")&&"reset"===a.type},button:function(a){var b=a.nodeName.toLowerCase();return b==="input"&&"button"===a.type||b==="button"},input:function(a){return/input|select|textarea|button/i.test(a.nodeName)},focus:function(a){return a===a.ownerDocument.activeElement}},setFilters:{first:function(a,b){return b===0},last:function(a,b,c,d){return b===d.length-1},even:function(a,b){return b%2===0},odd:function(a,b){return b%2===1},lt:function(a,b,c){return b<c[3]-0},gt:function(a,b,c){return b>c[3]-0},nth:function(a,b,c){return c[3]-0===b},eq:function(a,b,c){return c[3]-0===b}},filter:{PSEUDO:function(a,b,c,d){var e=b[1],f=o.filters[e];if(f)return f(a,c,b,d);if(e==="contains")return(a.textContent||a.innerText||n([a])||"").indexOf(b[3])>=0;if(e==="not"){var g=b[3];for(var h=0,i=g.length;h<i;h++)if(g[h]===a)return!1;return!0}m.error(e)},CHILD:function(a,b){var c,e,f,g,h,i,j,k=b[1],l=a;switch(k){case"only":case"first":while(l=l.previousSibling)if(l.nodeType===1)return!1;if(k==="first")return!0;l=a;case"last":while(l=l.nextSibling)if(l.nodeType===1)return!1;return!0;case"nth":c=b[2],e=b[3];if(c===1&&e===0)return!0;f=b[0],g=a.parentNode;if(g&&(g[d]!==f||!a.nodeIndex)){i=0;for(l=g.firstChild;l;l=l.nextSibling)l.nodeType===1&&(l.nodeIndex=++i);g[d]=f}j=a.nodeIndex-e;return c===0?j===0:j%c===0&&j/c>=0}},ID:function(a,b){return a.nodeType===1&&a.getAttribute("id")===b},TAG:function(a,b){return b==="*"&&a.nodeType===1||!!a.nodeName&&a.nodeName.toLowerCase()===b},CLASS:function(a,b){return(" "+(a.className||a.getAttribute("class"))+" ").indexOf(b)>-1},ATTR:function(a,b){var c=b[1],d=m.attr?m.attr(a,c):o.attrHandle[c]?o.attrHandle[c](a):a[c]!=null?a[c]:a.getAttribute(c),e=d+"",f=b[2],g=b[4];return d==null?f==="!=":!f&&m.attr?d!=null:f==="="?e===g:f==="*="?e.indexOf(g)>=0:f==="~="?(" "+e+" ").indexOf(g)>=0:g?f==="!="?e!==g:f==="^="?e.indexOf(g)===0:f==="$="?e.substr(e.length-g.length)===g:f==="|="?e===g||e.substr(0,g.length+1)===g+"-":!1:e&&d!==!1},POS:function(a,b,c,d){var e=b[2],f=o.setFilters[e];if(f)return f(a,c,b,d)}}},p=o.match.POS,q=function(a,b){return"\\"+(b-0+1)};for(var r in o.match)o.match[r]=new RegExp(o.match[r].source+/(?![^\[]*\])(?![^\(]*\))/.source),o.leftMatch[r]=new RegExp(/(^(?:.|\r|\n)*?)/.source+o.match[r].source.replace(/\\(\d+)/g,q));var s=function(a,b){a=Array.prototype.slice.call(a,0);if(b){b.push.apply(b,a);return b}return a};try{Array.prototype.slice.call(c.documentElement.childNodes,0)[0].nodeType}catch(t){s=function(a,b){var c=0,d=b||[];if(g.call(a)==="[object Array]")Array.prototype.push.apply(d,a);else if(typeof a.length=="number")for(var e=a.length;c<e;c++)d.push(a[c]);else for(;a[c];c++)d.push(a[c]);return d}}var u,v;c.documentElement.compareDocumentPosition?u=function(a,b){if(a===b){h=!0;return 0}if(!a.compareDocumentPosition||!b.compareDocumentPosition)return a.compareDocumentPosition?-1:1;return a.compareDocumentPosition(b)&4?-1:1}:(u=function(a,b){if(a===b){h=!0;return 0}if(a.sourceIndex&&b.sourceIndex)return a.sourceIndex-b.sourceIndex;var c,d,e=[],f=[],g=a.parentNode,i=b.parentNode,j=g;if(g===i)return v(a,b);if(!g)return-1;if(!i)return 1;while(j)e.unshift(j),j=j.parentNode;j=i;while(j)f.unshift(j),j=j.parentNode;c=e.length,d=f.length;for(var k=0;k<c&&k<d;k++)if(e[k]!==f[k])return v(e[k],f[k]);return k===c?v(a,f[k],-1):v(e[k],b,1)},v=function(a,b,c){if(a===b)return c;var d=a.nextSibling;while(d){if(d===b)return-1;d=d.nextSibling}return 1}),function(){var a=c.createElement("div"),d="script"+(new Date).getTime(),e=c.documentElement;a.innerHTML="<a name='"+d+"'/>",e.insertBefore(a,e.firstChild),c.getElementById(d)&&(o.find.ID=function(a,c,d){if(typeof c.getElementById!="undefined"&&!d){var e=c.getElementById(a[1]);return e?e.id===a[1]||typeof e.getAttributeNode!="undefined"&&e.getAttributeNode("id").nodeValue===a[1]?[e]:b:[]}},o.filter.ID=function(a,b){var c=typeof a.getAttributeNode!="undefined"&&a.getAttributeNode("id");return a.nodeType===1&&c&&c.nodeValue===b}),e.removeChild(a),e=a=null}(),function(){var a=c.createElement("div");a.appendChild(c.createComment("")),a.getElementsByTagName("*").length>0&&(o.find.TAG=function(a,b){var c=b.getElementsByTagName(a[1]);if(a[1]==="*"){var d=[];for(var e=0;c[e];e++)c[e].nodeType===1&&d.push(c[e]);c=d}return c}),a.innerHTML="<a href='#'></a>",a.firstChild&&typeof a.firstChild.getAttribute!="undefined"&&a.firstChild.getAttribute("href")!=="#"&&(o.attrHandle.href=function(a){return a.getAttribute("href",2)}),a=null}(),c.querySelectorAll&&function(){var a=m,b=c.createElement("div"),d="__sizzle__";b.innerHTML="<p class='TEST'></p>";if(!b.querySelectorAll||b.querySelectorAll(".TEST").length!==0){m=function(b,e,f,g){e=e||c;if(!g&&!m.isXML(e)){var h=/^(\w+$)|^\.([\w\-]+$)|^#([\w\-]+$)/.exec(b);if(h&&(e.nodeType===1||e.nodeType===9)){if(h[1])return s(e.getElementsByTagName(b),f);if(h[2]&&o.find.CLASS&&e.getElementsByClassName)return s(e.getElementsByClassName(h[2]),f)}if(e.nodeType===9){if(b==="body"&&e.body)return s([e.body],f);if(h&&h[3]){var i=e.getElementById(h[3]);if(!i||!i.parentNode)return s([],f);if(i.id===h[3])return s([i],f)}try{return s(e.querySelectorAll(b),f)}catch(j){}}else if(e.nodeType===1&&e.nodeName.toLowerCase()!=="object"){var k=e,l=e.getAttribute("id"),n=l||d,p=e.parentNode,q=/^\s*[+~]/.test(b);l?n=n.replace(/'/g,"\\$&"):e.setAttribute("id",n),q&&p&&(e=e.parentNode);try{if(!q||p)return s(e.querySelectorAll("[id='"+n+"'] "+b),f)}catch(r){}finally{l||k.removeAttribute("id")}}}return a(b,e,f,g)};for(var e in a)m[e]=a[e];b=null}}(),function(){var a=c.documentElement,b=a.matchesSelector||a.mozMatchesSelector||a.webkitMatchesSelector||a.msMatchesSelector;if(b){var d=!b.call(c.createElement("div"),"div"),e=!1;try{b.call(c.documentElement,"[test!='']:sizzle")}catch(f){e=!0}m.matchesSelector=function(a,c){c=c.replace(/\=\s*([^'"\]]*)\s*\]/g,"='$1']");if(!m.isXML(a))try{if(e||!o.match.PSEUDO.test(c)&&!/!=/.test(c)){var f=b.call(a,c);if(f||!d||a.document&&a.document.nodeType!==11)return f}}catch(g){}return m(c,null,null,[a]).length>0}}}(),function(){var a=c.createElement("div");a.innerHTML="<div class='test e'></div><div class='test'></div>";if(!!a.getElementsByClassName&&a.getElementsByClassName("e").length!==0){a.lastChild.className="e";if(a.getElementsByClassName("e").length===1)return;o.order.splice(1,0,"CLASS"),o.find.CLASS=function(a,b,c){if(typeof b.getElementsByClassName!="undefined"&&!c)return b.getElementsByClassName(a[1])},a=null}}(),c.documentElement.contains?m.contains=function(a,b){return a!==b&&(a.contains?a.contains(b):!0)}:c.documentElement.compareDocumentPosition?m.contains=function(a,b){return!!(a.compareDocumentPosition(b)&16)}:m.contains=function(){return!1},m.isXML=function(a){var b=(a?a.ownerDocument||a:0).documentElement;return b?b.nodeName!=="HTML":!1};var y=function(a,b,c){var d,e=[],f="",g=b.nodeType?[b]:b;while(d=o.match.PSEUDO.exec(a))f+=d[0],a=a.replace(o.match.PSEUDO,"");a=o.relative[a]?a+"*":a;for(var h=0,i=g.length;h<i;h++)m(a,g[h],e,c);return m.filter(f,e)};m.attr=f.attr,m.selectors.attrMap={},f.find=m,f.expr=m.selectors,f.expr[":"]=f.expr.filters,f.unique=m.uniqueSort,f.text=m.getText,f.isXMLDoc=m.isXML,f.contains=m.contains}();var L=/Until$/,M=/^(?:parents|prevUntil|prevAll)/,N=/,/,O=/^.[^:#\[\.,]*$/,P=Array.prototype.slice,Q=f.expr.match.POS,R={children:!0,contents:!0,next:!0,prev:!0};f.fn.extend({find:function(a){var b=this,c,d;if(typeof a!="string")return f(a).filter(function(){for(c=0,d=b.length;c<d;c++)if(f.contains(b[c],this))return!0});var e=this.pushStack("","find",a),g,h,i;for(c=0,d=this.length;c<d;c++){g=e.length,f.find(a,this[c],e);if(c>0)for(h=g;h<e.length;h++)for(i=0;i<g;i++)if(e[i]===e[h]){e.splice(h--,1);break}}return e},has:function(a){var b=f(a);return this.filter(function(){for(var a=0,c=b.length;a<c;a++)if(f.contains(this,b[a]))return!0})},not:function(a){return this.pushStack(T(this,a,!1),"not",a)},filter:function(a){return this.pushStack(T(this,a,!0),"filter",a)},is:function(a){return!!a&&(typeof a=="string"?Q.test(a)?f(a,this.context).index(this[0])>=0:f.filter(a,this).length>0:this.filter(a).length>0)},closest:function(a,b){var c=[],d,e,g=this[0];if(f.isArray(a)){var h=1;while(g&&g.ownerDocument&&g!==b){for(d=0;d<a.length;d++)f(g).is(a[d])&&c.push({selector:a[d],elem:g,level:h});g=g.parentNode,h++}return c}var i=Q.test(a)||typeof a!="string"?f(a,b||this.context):0;for(d=0,e=this.length;d<e;d++){g=this[d];while(g){if(i?i.index(g)>-1:f.find.matchesSelector(g,a)){c.push(g);break}g=g.parentNode;if(!g||!g.ownerDocument||g===b||g.nodeType===11)break}}c=c.length>1?f.unique(c):c;return this.pushStack(c,"closest",a)},index:function(a){if(!a)return this[0]&&this[0].parentNode?this.prevAll().length:-1;if(typeof a=="string")return f.inArray(this[0],f(a));return f.inArray(a.jquery?a[0]:a,this)},add:function(a,b){var c=typeof a=="string"?f(a,b):f.makeArray(a&&a.nodeType?[a]:a),d=f.merge(this.get(),c);return this.pushStack(S(c[0])||S(d[0])?d:f.unique(d))},andSelf:function(){return this.add(this.prevObject)}}),f.each({parent:function(a){var b=a.parentNode;return b&&b.nodeType!==11?b:null},parents:function(a){return f.dir(a,"parentNode")},parentsUntil:function(a,b,c){return f.dir(a,"parentNode",c)},next:function(a){return f.nth(a,2,"nextSibling")},prev:function(a){return f.nth(a,2,"previousSibling")},nextAll:function(a){return f.dir(a,"nextSibling")},prevAll:function(a){return f.dir(a,"previousSibling")},nextUntil:function(a,b,c){return f.dir(a,"nextSibling",c)},prevUntil:function(a,b,c){return f.dir(a,"previousSibling",c)},siblings:function(a){return f.sibling(a.parentNode.firstChild,a)},children:function(a){return f.sibling(a.firstChild)},contents:function(a){return f.nodeName(a,"iframe")?a.contentDocument||a.contentWindow.document:f.makeArray(a.childNodes)}},function(a,b){f.fn[a]=function(c,d){var e=f.map(this,b,c);L.test(a)||(d=c),d&&typeof d=="string"&&(e=f.filter(d,e)),e=this.length>1&&!R[a]?f.unique(e):e,(this.length>1||N.test(d))&&M.test(a)&&(e=e.reverse());return this.pushStack(e,a,P.call(arguments).join(","))}}),f.extend({filter:function(a,b,c){c&&(a=":not("+a+")");return b.length===1?f.find.matchesSelector(b[0],a)?[b[0]]:[]:f.find.matches(a,b)},dir:function(a,c,d){var e=[],g=a[c];while(g&&g.nodeType!==9&&(d===b||g.nodeType!==1||!f(g).is(d)))g.nodeType===1&&e.push(g),g=g[c];return e},nth:function(a,b,c,d){b=b||1;var e=0;for(;a;a=a[c])if(a.nodeType===1&&++e===b)break;return a},sibling:function(a,b){var c=[];for(;a;a=a.nextSibling)a.nodeType===1&&a!==b&&c.push(a);return c}});var V="abbr|article|aside|audio|canvas|datalist|details|figcaption|figure|footer|header|hgroup|mark|meter|nav|output|progress|section|summary|time|video",W=/ jQuery\d+="(?:\d+|null)"/g,X=/^\s+/,Y=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/ig,Z=/<([\w:]+)/,$=/<tbody/i,_=/<|&#?\w+;/,ba=/<(?:script|style)/i,bb=/<(?:script|object|embed|option|style)/i,bc=new RegExp("<(?:"+V+")","i"),bd=/checked\s*(?:[^=]|=\s*.checked.)/i,be=/\/(java|ecma)script/i,bf=/^\s*<!(?:\[CDATA\[|\-\-)/,bg={option:[1,"<select multiple='multiple'>","</select>"],legend:[1,"<fieldset>","</fieldset>"],thead:[1,"<table>","</table>"],tr:[2,"<table><tbody>","</tbody></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],col:[2,"<table><tbody></tbody><colgroup>","</colgroup></table>"],area:[1,"<map>","</map>"],_default:[0,"",""]},bh=U(c);bg.optgroup=bg.option,bg.tbody=bg.tfoot=bg.colgroup=bg.caption=bg.thead,bg.th=bg.td,f.support.htmlSerialize||(bg._default=[1,"div<div>","</div>"]),f.fn.extend({text:function(a){if(f.isFunction(a))return this.each(function(b){var c=f(this);c.text(a.call(this,b,c.text()))});if(typeof a!="object"&&a!==b)return this.empty().append((this[0]&&this[0].ownerDocument||c).createTextNode(a));return f.text(this)},wrapAll:function(a){if(f.isFunction(a))return this.each(function(b){f(this).wrapAll(a.call(this,b))});if(this[0]){var b=f(a,this[0].ownerDocument).eq(0).clone(!0);this[0].parentNode&&b.insertBefore(this[0]),b.map(function(){var a=this;while(a.firstChild&&a.firstChild.nodeType===1)a=a.firstChild;return a}).append(this)}return this},wrapInner:function(a){if(f.isFunction(a))return this.each(function(b){f(this).wrapInner(a.call(this,b))});return this.each(function(){var b=f(this),c=b.contents();c.length?c.wrapAll(a):b.append(a)})},wrap:function(a){var b=f.isFunction(a);return this.each(function(c){f(this).wrapAll(b?a.call(this,c):a)})},unwrap:function(){return this.parent().each(function(){f.nodeName(this,"body")||f(this).replaceWith(this.childNodes)}).end()},append:function(){return this.domManip(arguments,!0,function(a){this.nodeType===1&&this.appendChild(a)})},prepend:function(){return this.domManip(arguments,!0,function(a){this.nodeType===1&&this.insertBefore(a,this.firstChild)})},before:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this)});if(arguments.length){var a=f.clean(arguments);a.push.apply(a,this.toArray());return this.pushStack(a,"before",arguments)}},after:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this.nextSibling)});if(arguments.length){var a=this.pushStack(this,"after",arguments);a.push.apply(a,f.clean(arguments));return a}},remove:function(a,b){for(var c=0,d;(d=this[c])!=null;c++)if(!a||f.filter(a,[d]).length)!b&&d.nodeType===1&&(f.cleanData(d.getElementsByTagName("*")),f.cleanData([d])),d.parentNode&&d.parentNode.removeChild(d);return this},empty:function()
-{for(var a=0,b;(b=this[a])!=null;a++){b.nodeType===1&&f.cleanData(b.getElementsByTagName("*"));while(b.firstChild)b.removeChild(b.firstChild)}return this},clone:function(a,b){a=a==null?!1:a,b=b==null?a:b;return this.map(function(){return f.clone(this,a,b)})},html:function(a){if(a===b)return this[0]&&this[0].nodeType===1?this[0].innerHTML.replace(W,""):null;if(typeof a=="string"&&!ba.test(a)&&(f.support.leadingWhitespace||!X.test(a))&&!bg[(Z.exec(a)||["",""])[1].toLowerCase()]){a=a.replace(Y,"<$1></$2>");try{for(var c=0,d=this.length;c<d;c++)this[c].nodeType===1&&(f.cleanData(this[c].getElementsByTagName("*")),this[c].innerHTML=a)}catch(e){this.empty().append(a)}}else f.isFunction(a)?this.each(function(b){var c=f(this);c.html(a.call(this,b,c.html()))}):this.empty().append(a);return this},replaceWith:function(a){if(this[0]&&this[0].parentNode){if(f.isFunction(a))return this.each(function(b){var c=f(this),d=c.html();c.replaceWith(a.call(this,b,d))});typeof a!="string"&&(a=f(a).detach());return this.each(function(){var b=this.nextSibling,c=this.parentNode;f(this).remove(),b?f(b).before(a):f(c).append(a)})}return this.length?this.pushStack(f(f.isFunction(a)?a():a),"replaceWith",a):this},detach:function(a){return this.remove(a,!0)},domManip:function(a,c,d){var e,g,h,i,j=a[0],k=[];if(!f.support.checkClone&&arguments.length===3&&typeof j=="string"&&bd.test(j))return this.each(function(){f(this).domManip(a,c,d,!0)});if(f.isFunction(j))return this.each(function(e){var g=f(this);a[0]=j.call(this,e,c?g.html():b),g.domManip(a,c,d)});if(this[0]){i=j&&j.parentNode,f.support.parentNode&&i&&i.nodeType===11&&i.childNodes.length===this.length?e={fragment:i}:e=f.buildFragment(a,this,k),h=e.fragment,h.childNodes.length===1?g=h=h.firstChild:g=h.firstChild;if(g){c=c&&f.nodeName(g,"tr");for(var l=0,m=this.length,n=m-1;l<m;l++)d.call(c?bi(this[l],g):this[l],e.cacheable||m>1&&l<n?f.clone(h,!0,!0):h)}k.length&&f.each(k,bp)}return this}}),f.buildFragment=function(a,b,d){var e,g,h,i,j=a[0];b&&b[0]&&(i=b[0].ownerDocument||b[0]),i.createDocumentFragment||(i=c),a.length===1&&typeof j=="string"&&j.length<512&&i===c&&j.charAt(0)==="<"&&!bb.test(j)&&(f.support.checkClone||!bd.test(j))&&(f.support.html5Clone||!bc.test(j))&&(g=!0,h=f.fragments[j],h&&h!==1&&(e=h)),e||(e=i.createDocumentFragment(),f.clean(a,i,e,d)),g&&(f.fragments[j]=h?e:1);return{fragment:e,cacheable:g}},f.fragments={},f.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){f.fn[a]=function(c){var d=[],e=f(c),g=this.length===1&&this[0].parentNode;if(g&&g.nodeType===11&&g.childNodes.length===1&&e.length===1){e[b](this[0]);return this}for(var h=0,i=e.length;h<i;h++){var j=(h>0?this.clone(!0):this).get();f(e[h])[b](j),d=d.concat(j)}return this.pushStack(d,a,e.selector)}}),f.extend({clone:function(a,b,c){var d,e,g,h=f.support.html5Clone||!bc.test("<"+a.nodeName)?a.cloneNode(!0):bo(a);if((!f.support.noCloneEvent||!f.support.noCloneChecked)&&(a.nodeType===1||a.nodeType===11)&&!f.isXMLDoc(a)){bk(a,h),d=bl(a),e=bl(h);for(g=0;d[g];++g)e[g]&&bk(d[g],e[g])}if(b){bj(a,h);if(c){d=bl(a),e=bl(h);for(g=0;d[g];++g)bj(d[g],e[g])}}d=e=null;return h},clean:function(a,b,d,e){var g;b=b||c,typeof b.createElement=="undefined"&&(b=b.ownerDocument||b[0]&&b[0].ownerDocument||c);var h=[],i;for(var j=0,k;(k=a[j])!=null;j++){typeof k=="number"&&(k+="");if(!k)continue;if(typeof k=="string")if(!_.test(k))k=b.createTextNode(k);else{k=k.replace(Y,"<$1></$2>");var l=(Z.exec(k)||["",""])[1].toLowerCase(),m=bg[l]||bg._default,n=m[0],o=b.createElement("div");b===c?bh.appendChild(o):U(b).appendChild(o),o.innerHTML=m[1]+k+m[2];while(n--)o=o.lastChild;if(!f.support.tbody){var p=$.test(k),q=l==="table"&&!p?o.firstChild&&o.firstChild.childNodes:m[1]==="<table>"&&!p?o.childNodes:[];for(i=q.length-1;i>=0;--i)f.nodeName(q[i],"tbody")&&!q[i].childNodes.length&&q[i].parentNode.removeChild(q[i])}!f.support.leadingWhitespace&&X.test(k)&&o.insertBefore(b.createTextNode(X.exec(k)[0]),o.firstChild),k=o.childNodes}var r;if(!f.support.appendChecked)if(k[0]&&typeof (r=k.length)=="number")for(i=0;i<r;i++)bn(k[i]);else bn(k);k.nodeType?h.push(k):h=f.merge(h,k)}if(d){g=function(a){return!a.type||be.test(a.type)};for(j=0;h[j];j++)if(e&&f.nodeName(h[j],"script")&&(!h[j].type||h[j].type.toLowerCase()==="text/javascript"))e.push(h[j].parentNode?h[j].parentNode.removeChild(h[j]):h[j]);else{if(h[j].nodeType===1){var s=f.grep(h[j].getElementsByTagName("script"),g);h.splice.apply(h,[j+1,0].concat(s))}d.appendChild(h[j])}}return h},cleanData:function(a){var b,c,d=f.cache,e=f.event.special,g=f.support.deleteExpando;for(var h=0,i;(i=a[h])!=null;h++){if(i.nodeName&&f.noData[i.nodeName.toLowerCase()])continue;c=i[f.expando];if(c){b=d[c];if(b&&b.events){for(var j in b.events)e[j]?f.event.remove(i,j):f.removeEvent(i,j,b.handle);b.handle&&(b.handle.elem=null)}g?delete i[f.expando]:i.removeAttribute&&i.removeAttribute(f.expando),delete d[c]}}}});var bq=/alpha\([^)]*\)/i,br=/opacity=([^)]*)/,bs=/([A-Z]|^ms)/g,bt=/^-?\d+(?:px)?$/i,bu=/^-?\d/,bv=/^([\-+])=([\-+.\de]+)/,bw={position:"absolute",visibility:"hidden",display:"block"},bx=["Left","Right"],by=["Top","Bottom"],bz,bA,bB;f.fn.css=function(a,c){if(arguments.length===2&&c===b)return this;return f.access(this,a,c,!0,function(a,c,d){return d!==b?f.style(a,c,d):f.css(a,c)})},f.extend({cssHooks:{opacity:{get:function(a,b){if(b){var c=bz(a,"opacity","opacity");return c===""?"1":c}return a.style.opacity}}},cssNumber:{fillOpacity:!0,fontWeight:!0,lineHeight:!0,opacity:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{"float":f.support.cssFloat?"cssFloat":"styleFloat"},style:function(a,c,d,e){if(!!a&&a.nodeType!==3&&a.nodeType!==8&&!!a.style){var g,h,i=f.camelCase(c),j=a.style,k=f.cssHooks[i];c=f.cssProps[i]||i;if(d===b){if(k&&"get"in k&&(g=k.get(a,!1,e))!==b)return g;return j[c]}h=typeof d,h==="string"&&(g=bv.exec(d))&&(d=+(g[1]+1)*+g[2]+parseFloat(f.css(a,c)),h="number");if(d==null||h==="number"&&isNaN(d))return;h==="number"&&!f.cssNumber[i]&&(d+="px");if(!k||!("set"in k)||(d=k.set(a,d))!==b)try{j[c]=d}catch(l){}}},css:function(a,c,d){var e,g;c=f.camelCase(c),g=f.cssHooks[c],c=f.cssProps[c]||c,c==="cssFloat"&&(c="float");if(g&&"get"in g&&(e=g.get(a,!0,d))!==b)return e;if(bz)return bz(a,c)},swap:function(a,b,c){var d={};for(var e in b)d[e]=a.style[e],a.style[e]=b[e];c.call(a);for(e in b)a.style[e]=d[e]}}),f.curCSS=f.css,f.each(["height","width"],function(a,b){f.cssHooks[b]={get:function(a,c,d){var e;if(c){if(a.offsetWidth!==0)return bC(a,b,d);f.swap(a,bw,function(){e=bC(a,b,d)});return e}},set:function(a,b){if(!bt.test(b))return b;b=parseFloat(b);if(b>=0)return b+"px"}}}),f.support.opacity||(f.cssHooks.opacity={get:function(a,b){return br.test((b&&a.currentStyle?a.currentStyle.filter:a.style.filter)||"")?parseFloat(RegExp.$1)/100+"":b?"1":""},set:function(a,b){var c=a.style,d=a.currentStyle,e=f.isNumeric(b)?"alpha(opacity="+b*100+")":"",g=d&&d.filter||c.filter||"";c.zoom=1;if(b>=1&&f.trim(g.replace(bq,""))===""){c.removeAttribute("filter");if(d&&!d.filter)return}c.filter=bq.test(g)?g.replace(bq,e):g+" "+e}}),f(function(){f.support.reliableMarginRight||(f.cssHooks.marginRight={get:function(a,b){var c;f.swap(a,{display:"inline-block"},function(){b?c=bz(a,"margin-right","marginRight"):c=a.style.marginRight});return c}})}),c.defaultView&&c.defaultView.getComputedStyle&&(bA=function(a,b){var c,d,e;b=b.replace(bs,"-$1").toLowerCase(),(d=a.ownerDocument.defaultView)&&(e=d.getComputedStyle(a,null))&&(c=e.getPropertyValue(b),c===""&&!f.contains(a.ownerDocument.documentElement,a)&&(c=f.style(a,b)));return c}),c.documentElement.currentStyle&&(bB=function(a,b){var c,d,e,f=a.currentStyle&&a.currentStyle[b],g=a.style;f===null&&g&&(e=g[b])&&(f=e),!bt.test(f)&&bu.test(f)&&(c=g.left,d=a.runtimeStyle&&a.runtimeStyle.left,d&&(a.runtimeStyle.left=a.currentStyle.left),g.left=b==="fontSize"?"1em":f||0,f=g.pixelLeft+"px",g.left=c,d&&(a.runtimeStyle.left=d));return f===""?"auto":f}),bz=bA||bB,f.expr&&f.expr.filters&&(f.expr.filters.hidden=function(a){var b=a.offsetWidth,c=a.offsetHeight;return b===0&&c===0||!f.support.reliableHiddenOffsets&&(a.style&&a.style.display||f.css(a,"display"))==="none"},f.expr.filters.visible=function(a){return!f.expr.filters.hidden(a)});var bD=/%20/g,bE=/\[\]$/,bF=/\r?\n/g,bG=/#.*$/,bH=/^(.*?):[ \t]*([^\r\n]*)\r?$/mg,bI=/^(?:color|date|datetime|datetime-local|email|hidden|month|number|password|range|search|tel|text|time|url|week)$/i,bJ=/^(?:about|app|app\-storage|.+\-extension|file|res|widget):$/,bK=/^(?:GET|HEAD)$/,bL=/^\/\//,bM=/\?/,bN=/<script\b[^<]*(?:(?!<\/script>)<[^<]*)*<\/script>/gi,bO=/^(?:select|textarea)/i,bP=/\s+/,bQ=/([?&])_=[^&]*/,bR=/^([\w\+\.\-]+:)(?:\/\/([^\/?#:]*)(?::(\d+))?)?/,bS=f.fn.load,bT={},bU={},bV,bW,bX=["*/"]+["*"];try{bV=e.href}catch(bY){bV=c.createElement("a"),bV.href="",bV=bV.href}bW=bR.exec(bV.toLowerCase())||[],f.fn.extend({load:function(a,c,d){if(typeof a!="string"&&bS)return bS.apply(this,arguments);if(!this.length)return this;var e=a.indexOf(" ");if(e>=0){var g=a.slice(e,a.length);a=a.slice(0,e)}var h="GET";c&&(f.isFunction(c)?(d=c,c=b):typeof c=="object"&&(c=f.param(c,f.ajaxSettings.traditional),h="POST"));var i=this;f.ajax({url:a,type:h,dataType:"html",data:c,complete:function(a,b,c){c=a.responseText,a.isResolved()&&(a.done(function(a){c=a}),i.html(g?f("<div>").append(c.replace(bN,"")).find(g):c)),d&&i.each(d,[c,b,a])}});return this},serialize:function(){return f.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?f.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||bO.test(this.nodeName)||bI.test(this.type))}).map(function(a,b){var c=f(this).val();return c==null?null:f.isArray(c)?f.map(c,function(a,c){return{name:b.name,value:a.replace(bF,"\r\n")}}):{name:b.name,value:c.replace(bF,"\r\n")}}).get()}}),f.each("ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "),function(a,b){f.fn[b]=function(a){return this.on(b,a)}}),f.each(["get","post"],function(a,c){f[c]=function(a,d,e,g){f.isFunction(d)&&(g=g||e,e=d,d=b);return f.ajax({type:c,url:a,data:d,success:e,dataType:g})}}),f.extend({getScript:function(a,c){return f.get(a,b,c,"script")},getJSON:function(a,b,c){return f.get(a,b,c,"json")},ajaxSetup:function(a,b){b?b_(a,f.ajaxSettings):(b=a,a=f.ajaxSettings),b_(a,b);return a},ajaxSettings:{url:bV,isLocal:bJ.test(bW[1]),global:!0,type:"GET",contentType:"application/x-www-form-urlencoded",processData:!0,async:!0,accepts:{xml:"application/xml, text/xml",html:"text/html",text:"text/plain",json:"application/json, text/javascript","*":bX},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText"},converters:{"* text":a.String,"text html":!0,"text json":f.parseJSON,"text xml":f.parseXML},flatOptions:{context:!0,url:!0}},ajaxPrefilter:bZ(bT),ajaxTransport:bZ(bU),ajax:function(a,c){function w(a,c,l,m){if(s!==2){s=2,q&&clearTimeout(q),p=b,n=m||"",v.readyState=a>0?4:0;var o,r,u,w=c,x=l?cb(d,v,l):b,y,z;if(a>=200&&a<300||a===304){if(d.ifModified){if(y=v.getResponseHeader("Last-Modified"))f.lastModified[k]=y;if(z=v.getResponseHeader("Etag"))f.etag[k]=z}if(a===304)w="notmodified",o=!0;else try{r=cc(d,x),w="success",o=!0}catch(A){w="parsererror",u=A}}else{u=w;if(!w||a)w="error",a<0&&(a=0)}v.status=a,v.statusText=""+(c||w),o?h.resolveWith(e,[r,w,v]):h.rejectWith(e,[v,w,u]),v.statusCode(j),j=b,t&&g.trigger("ajax"+(o?"Success":"Error"),[v,d,o?r:u]),i.fireWith(e,[v,w]),t&&(g.trigger("ajaxComplete",[v,d]),--f.active||f.event.trigger("ajaxStop"))}}typeof a=="object"&&(c=a,a=b),c=c||{};var d=f.ajaxSetup({},c),e=d.context||d,g=e!==d&&(e.nodeType||e instanceof f)?f(e):f.event,h=f.Deferred(),i=f.Callbacks("once memory"),j=d.statusCode||{},k,l={},m={},n,o,p,q,r,s=0,t,u,v={readyState:0,setRequestHeader:function(a,b){if(!s){var c=a.toLowerCase();a=m[c]=m[c]||a,l[a]=b}return this},getAllResponseHeaders:function(){return s===2?n:null},getResponseHeader:function(a){var c;if(s===2){if(!o){o={};while(c=bH.exec(n))o[c[1].toLowerCase()]=c[2]}c=o[a.toLowerCase()]}return c===b?null:c},overrideMimeType:function(a){s||(d.mimeType=a);return this},abort:function(a){a=a||"abort",p&&p.abort(a),w(0,a);return this}};h.promise(v),v.success=v.done,v.error=v.fail,v.complete=i.add,v.statusCode=function(a){if(a){var b;if(s<2)for(b in a)j[b]=[j[b],a[b]];else b=a[v.status],v.then(b,b)}return this},d.url=((a||d.url)+"").replace(bG,"").replace(bL,bW[1]+"//"),d.dataTypes=f.trim(d.dataType||"*").toLowerCase().split(bP),d.crossDomain==null&&(r=bR.exec(d.url.toLowerCase()),d.crossDomain=!(!r||r[1]==bW[1]&&r[2]==bW[2]&&(r[3]||(r[1]==="http:"?80:443))==(bW[3]||(bW[1]==="http:"?80:443)))),d.data&&d.processData&&typeof d.data!="string"&&(d.data=f.param(d.data,d.traditional)),b$(bT,d,c,v);if(s===2)return!1;t=d.global,d.type=d.type.toUpperCase(),d.hasContent=!bK.test(d.type),t&&f.active++===0&&f.event.trigger("ajaxStart");if(!d.hasContent){d.data&&(d.url+=(bM.test(d.url)?"&":"?")+d.data,delete d.data),k=d.url;if(d.cache===!1){var x=f.now(),y=d.url.replace(bQ,"$1_="+x);d.url=y+(y===d.url?(bM.test(d.url)?"&":"?")+"_="+x:"")}}(d.data&&d.hasContent&&d.contentType!==!1||c.contentType)&&v.setRequestHeader("Content-Type",d.contentType),d.ifModified&&(k=k||d.url,f.lastModified[k]&&v.setRequestHeader("If-Modified-Since",f.lastModified[k]),f.etag[k]&&v.setRequestHeader("If-None-Match",f.etag[k])),v.setRequestHeader("Accept",d.dataTypes[0]&&d.accepts[d.dataTypes[0]]?d.accepts[d.dataTypes[0]]+(d.dataTypes[0]!=="*"?", "+bX+"; q=0.01":""):d.accepts["*"]);for(u in d.headers)v.setRequestHeader(u,d.headers[u]);if(d.beforeSend&&(d.beforeSend.call(e,v,d)===!1||s===2)){v.abort();return!1}for(u in{success:1,error:1,complete:1})v[u](d[u]);p=b$(bU,d,c,v);if(!p)w(-1,"No Transport");else{v.readyState=1,t&&g.trigger("ajaxSend",[v,d]),d.async&&d.timeout>0&&(q=setTimeout(function(){v.abort("timeout")},d.timeout));try{s=1,p.send(l,w)}catch(z){if(s<2)w(-1,z);else throw z}}return v},param:function(a,c){var d=[],e=function(a,b){b=f.isFunction(b)?b():b,d[d.length]=encodeURIComponent(a)+"="+encodeURIComponent(b)};c===b&&(c=f.ajaxSettings.traditional);if(f.isArray(a)||a.jquery&&!f.isPlainObject(a))f.each(a,function(){e(this.name,this.value)});else for(var g in a)ca(g,a[g],c,e);return d.join("&").replace(bD,"+")}}),f.extend({active:0,lastModified:{},etag:{}});var cd=f.now(),ce=/(\=)\?(&|$)|\?\?/i;f.ajaxSetup({jsonp:"callback",jsonpCallback:function(){return f.expando+"_"+cd++}}),f.ajaxPrefilter("json jsonp",function(b,c,d){var e=b.contentType==="application/x-www-form-urlencoded"&&typeof b.data=="string";if(b.dataTypes[0]==="jsonp"||b.jsonp!==!1&&(ce.test(b.url)||e&&ce.test(b.data))){var g,h=b.jsonpCallback=f.isFunction(b.jsonpCallback)?b.jsonpCallback():b.jsonpCallback,i=a[h],j=b.url,k=b.data,l="$1"+h+"$2";b.jsonp!==!1&&(j=j.replace(ce,l),b.url===j&&(e&&(k=k.replace(ce,l)),b.data===k&&(j+=(/\?/.test(j)?"&":"?")+b.jsonp+"="+h))),b.url=j,b.data=k,a[h]=function(a){g=[a]},d.always(function(){a[h]=i,g&&f.isFunction(i)&&a[h](g[0])}),b.converters["script json"]=function(){g||f.error(h+" was not called");return g[0]},b.dataTypes[0]="json";return"script"}}),f.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/javascript|ecmascript/},converters:{"text script":function(a){f.globalEval(a);return a}}}),f.ajaxPrefilter("script",function(a){a.cache===b&&(a.cache=!1),a.crossDomain&&(a.type="GET",a.global=!1)}),f.ajaxTransport("script",function(a){if(a.crossDomain){var d,e=c.head||c.getElementsByTagName("head")[0]||c.documentElement;return{send:function(f,g){d=c.createElement("script"),d.async="async",a.scriptCharset&&(d.charset=a.scriptCharset),d.src=a.url,d.onload=d.onreadystatechange=function(a,c){if(c||!d.readyState||/loaded|complete/.test(d.readyState))d.onload=d.onreadystatechange=null,e&&d.parentNode&&e.removeChild(d),d=b,c||g(200,"success")},e.insertBefore(d,e.firstChild)},abort:function(){d&&d.onload(0,1)}}}});var cf=a.ActiveXObject?function(){for(var a in ch)ch[a](0,1)}:!1,cg=0,ch;f.ajaxSettings.xhr=a.ActiveXObject?function(){return!this.isLocal&&ci()||cj()}:ci,function(a){f.extend(f.support,{ajax:!!a,cors:!!a&&"withCredentials"in a})}(f.ajaxSettings.xhr()),f.support.ajax&&f.ajaxTransport(function(c){if(!c.crossDomain||f.support.cors){var d;return{send:function(e,g){var h=c.xhr(),i,j;c.username?h.open(c.type,c.url,c.async,c.username,c.password):h.open(c.type,c.url,c.async);if(c.xhrFields)for(j in c.xhrFields)h[j]=c.xhrFields[j];c.mimeType&&h.overrideMimeType&&h.overrideMimeType(c.mimeType),!c.crossDomain&&!e["X-Requested-With"]&&(e["X-Requested-With"]="XMLHttpRequest");try{for(j in e)h.setRequestHeader(j,e[j])}catch(k){}h.send(c.hasContent&&c.data||null),d=function(a,e){var j,k,l,m,n;try{if(d&&(e||h.readyState===4)){d=b,i&&(h.onreadystatechange=f.noop,cf&&delete ch[i]);if(e)h.readyState!==4&&h.abort();else{j=h.status,l=h.getAllResponseHeaders(),m={},n=h.responseXML,n&&n.documentElement&&(m.xml=n),m.text=h.responseText;try{k=h.statusText}catch(o){k=""}!j&&c.isLocal&&!c.crossDomain?j=m.text?200:404:j===1223&&(j=204)}}}catch(p){e||g(-1,p)}m&&g(j,k,m,l)},!c.async||h.readyState===4?d():(i=++cg,cf&&(ch||(ch={},f(a).unload(cf)),ch[i]=d),h.onreadystatechange=d)},abort:function(){d&&d(0,1)}}}});var ck={},cl,cm,cn=/^(?:toggle|show|hide)$/,co=/^([+\-]=)?([\d+.\-]+)([a-z%]*)$/i,cp,cq=[["height","marginTop","marginBottom","paddingTop","paddingBottom"],["width","marginLeft","marginRight","paddingLeft","paddingRight"],["opacity"]],cr;f.fn.extend({show:function(a,b,c){var d,e;if(a||a===0)return this.animate(cu("show",3),a,b,c);for(var g=0,h=this.length;g<h;g++)d=this[g],d.style&&(e=d.style.display,!f._data(d,"olddisplay")&&e==="none"&&(e=d.style.display=""),e===""&&f.css(d,"display")==="none"&&f._data(d,"olddisplay",cv(d.nodeName)));for(g=0;g<h;g++){d=this[g];if(d.style){e=d.style.display;if(e===""||e==="none")d.style.display=f._data(d,"olddisplay")||""}}return this},hide:function(a,b,c){if(a||a===0)return this.animate(cu("hide",3),a,b,c);var d,e,g=0,h=this.length;for(;g<h;g++)d=this[g],d.style&&(e=f.css(d,"display"),e!=="none"&&!f._data(d,"olddisplay")&&f._data(d,"olddisplay",e));for(g=0;g<h;g++)this[g].style&&(this[g].style.display="none");return this},_toggle:f.fn.toggle,toggle:function(a,b,c){var d=typeof a=="boolean";f.isFunction(a)&&f.isFunction(b)?this._toggle.apply(this,arguments):a==null||d?this.each(function(){var b=d?a:f(this).is(":hidden");f(this)[b?"show":"hide"]()}):this.animate(cu("toggle",3),a,b,c);return this},fadeTo:function(a,b,c,d){return this.filter(":hidden").css("opacity",0).show().end().animate({opacity:b},a,c,d)},animate:function(a,b,c,d){function g(){e.queue===!1&&f._mark(this);var b=f.extend({},e),c=this.nodeType===1,d=c&&f(this).is(":hidden"),g,h,i,j,k,l,m,n,o;b.animatedProperties={};for(i in a){g=f.camelCase(i),i!==g&&(a[g]=a[i],delete a[i]),h=a[g],f.isArray(h)?(b.animatedProperties[g]=h[1],h=a[g]=h[0]):b.animatedProperties[g]=b.specialEasing&&b.specialEasing[g]||b.easing||"swing";if(h==="hide"&&d||h==="show"&&!d)return b.complete.call(this);c&&(g==="height"||g==="width")&&(b.overflow=[this.style.overflow,this.style.overflowX,this.style.overflowY],f.css(this,"display")==="inline"&&f.css(this,"float")==="none"&&(!f.support.inlineBlockNeedsLayout||cv(this.nodeName)==="inline"?this.style.display="inline-block":this.style.zoom=1))}b.overflow!=null&&(this.style.overflow="hidden");for(i in a)j=new f.fx(this,b,i),h=a[i],cn.test(h)?(o=f._data(this,"toggle"+i)||(h==="toggle"?d?"show":"hide":0),o?(f._data(this,"toggle"+i,o==="show"?"hide":"show"),j[o]()):j[h]()):(k=co.exec(h),l=j.cur(),k?(m=parseFloat(k[2]),n=k[3]||(f.cssNumber[i]?"":"px"),n!=="px"&&(f.style(this,i,(m||1)+n),l=(m||1)/j.cur()*l,f.style(this,i,l+n)),k[1]&&(m=(k[1]==="-="?-1:1)*m+l),j.custom(l,m,n)):j.custom(l,h,""));return!0}var e=f.speed(b,c,d);if(f.isEmptyObject(a))return this.each(e.complete,[!1]);a=f.extend({},a);return e.queue===!1?this.each(g):this.queue(e.queue,g)},stop:function(a,c,d){typeof a!="string"&&(d=c,c=a,a=b),c&&a!==!1&&this.queue(a||"fx",[]);return this.each(function(){function h(a,b,c){var e=b[c];f.removeData(a,c,!0),e.stop(d)}var b,c=!1,e=f.timers,g=f._data(this);d||f._unmark(!0,this);if(a==null)for(b in g)g[b]&&g[b].stop&&b.indexOf(".run")===b.length-4&&h(this,g,b);else g[b=a+".run"]&&g[b].stop&&h(this,g,b);for(b=e.length;b--;)e[b].elem===this&&(a==null||e[b].queue===a)&&(d?e[b](!0):e[b].saveState(),c=!0,e.splice(b,1));(!d||!c)&&f.dequeue(this,a)})}}),f.each({slideDown:cu("show",1),slideUp:cu("hide",1),slideToggle:cu("toggle",1),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(a,b){f.fn[a]=function(a,c,d){return this.animate(b,a,c,d)}}),f.extend({speed:function(a,b,c){var d=a&&typeof a=="object"?f.extend({},a):{complete:c||!c&&b||f.isFunction(a)&&a,duration:a,easing:c&&b||b&&!f.isFunction(b)&&b};d.duration=f.fx.off?0:typeof d.duration=="number"?d.duration:d.duration in f.fx.speeds?f.fx.speeds[d.duration]:f.fx.speeds._default;if(d.queue==null||d.queue===!0)d.queue="fx";d.old=d.complete,d.complete=function(a){f.isFunction(d.old)&&d.old.call(this),d.queue?f.dequeue(this,d.queue):a!==!1&&f._unmark(this)};return d},easing:{linear:function(a,b,c,d){return c+d*a},swing:function(a,b,c,d){return(-Math.cos(a*Math.PI)/2+.5)*d+c}},timers:[],fx:function(a,b,c){this.options=b,this.elem=a,this.prop=c,b.orig=b.orig||{}}}),f.fx.prototype={update:function(){this.options.step&&this.options.step.call(this.elem,this.now,this),(f.fx.step[this.prop]||f.fx.step._default)(this)},cur:function(){if(this.elem[this.prop]!=null&&(!this.elem.style||this.elem.style[this.prop]==null))return this.elem[this.prop];var a,b=f.css(this.elem,this.prop);return isNaN(a=parseFloat(b))?!b||b==="auto"?0:b:a},custom:function(a,c,d){function h(a){return e.step(a)}var e=this,g=f.fx;this.startTime=cr||cs(),this.end=c,this.now=this.start=a,this.pos=this.state=0,this.unit=d||this.unit||(f.cssNumber[this.prop]?"":"px"),h.queue=this.options.queue,h.elem=this.elem,h.saveState=function(){e.options.hide&&f._data(e.elem,"fxshow"+e.prop)===b&&f._data(e.elem,"fxshow"+e.prop,e.start)},h()&&f.timers.push(h)&&!cp&&(cp=setInterval(g.tick,g.interval))},show:function(){var a=f._data(this.elem,"fxshow"+this.prop);this.options.orig[this.prop]=a||f.style(this.elem,this.prop),this.options.show=!0,a!==b?this.custom(this.cur(),a):this.custom(this.prop==="width"||this.prop==="height"?1:0,this.cur()),f(this.elem).show()},hide:function(){this.options.orig[this.prop]=f._data(this.elem,"fxshow"+this.prop)||f.style(this.elem,this.prop),this.options.hide=!0,this.custom(this.cur(),0)},step:function(a){var b,c,d,e=cr||cs(),g=!0,h=this.elem,i=this.options;if(a||e>=i.duration+this.startTime){this.now=this.end,this.pos=this.state=1,this.update(),i.animatedProperties[this.prop]=!0;for(b in i.animatedProperties)i.animatedProperties[b]!==!0&&(g=!1);if(g){i.overflow!=null&&!f.support.shrinkWrapBlocks&&f.each(["","X","Y"],function(a,b){h.style["overflow"+b]=i.overflow[a]}),i.hide&&f(h).hide();if(i.hide||i.show)for(b in i.animatedProperties)f.style(h,b,i.orig[b]),f.removeData(h,"fxshow"+b,!0),f.removeData(h,"toggle"+b,!0);d=i.complete,d&&(i.complete=!1,d.call(h))}return!1}i.duration==Infinity?this.now=e:(c=e-this.startTime,this.state=c/i.duration,this.pos=f.easing[i.animatedProperties[this.prop]](this.state,c,0,1,i.duration),this.now=this.start+(this.end-this.start)*this.pos),this.update();return!0}},f.extend(f.fx,{tick:function(){var a,b=f.timers,c=0;for(;c<b.length;c++)a=b[c],!a()&&b[c]===a&&b.splice(c--,1);b.length||f.fx.stop()},interval:13,stop:function(){clearInterval(cp),cp=null},speeds:{slow:600,fast:200,_default:400},step:{opacity:function(a){f.style(a.elem,"opacity",a.now)},_default:function(a){a.elem.style&&a.elem.style[a.prop]!=null?a.elem.style[a.prop]=a.now+a.unit:a.elem[a.prop]=a.now}}}),f.each(["width","height"],function(a,b){f.fx.step[b]=function(a){f.style(a.elem,b,Math.max(0,a.now)+a.unit)}}),f.expr&&f.expr.filters&&(f.expr.filters.animated=function(a){return f.grep(f.timers,function(b){return a===b.elem}).length});var cw=/^t(?:able|d|h)$/i,cx=/^(?:body|html)$/i;"getBoundingClientRect"in c.documentElement?f.fn.offset=function(a){var b=this[0],c;if(a)return this.each(function(b){f.offset.setOffset(this,a,b)});if(!b||!b.ownerDocument)return null;if(b===b.ownerDocument.body)return f.offset.bodyOffset(b);try{c=b.getBoundingClientRect()}catch(d){}var e=b.ownerDocument,g=e.documentElement;if(!c||!f.contains(g,b))return c?{top:c.top,left:c.left}:{top:0,left:0};var h=e.body,i=cy(e),j=g.clientTop||h.clientTop||0,k=g.clientLeft||h.clientLeft||0,l=i.pageYOffset||f.support.boxModel&&g.scrollTop||h.scrollTop,m=i.pageXOffset||f.support.boxModel&&g.scrollLeft||h.scrollLeft,n=c.top+l-j,o=c.left+m-k;return{top:n,left:o}}:f.fn.offset=function(a){var b=this[0];if(a)return this.each(function(b){f.offset.setOffset(this,a,b)});if(!b||!b.ownerDocument)return null;if(b===b.ownerDocument.body)return f.offset.bodyOffset(b);var c,d=b.offsetParent,e=b,g=b.ownerDocument,h=g.documentElement,i=g.body,j=g.defaultView,k=j?j.getComputedStyle(b,null):b.currentStyle,l=b.offsetTop,m=b.offsetLeft;while((b=b.parentNode)&&b!==i&&b!==h){if(f.support.fixedPosition&&k.position==="fixed")break;c=j?j.getComputedStyle(b,null):b.currentStyle,l-=b.scrollTop,m-=b.scrollLeft,b===d&&(l+=b.offsetTop,m+=b.offsetLeft,f.support.doesNotAddBorder&&(!f.support.doesAddBorderForTableAndCells||!cw.test(b.nodeName))&&(l+=parseFloat(c.borderTopWidth)||0,m+=parseFloat(c.borderLeftWidth)||0),e=d,d=b.offsetParent),f.support.subtractsBorderForOverflowNotVisible&&c.overflow!=="visible"&&(l+=parseFloat(c.borderTopWidth)||0,m+=parseFloat(c.borderLeftWidth)||0),k=c}if(k.position==="relative"||k.position==="static")l+=i.offsetTop,m+=i.offsetLeft;f.support.fixedPosition&&k.position==="fixed"&&(l+=Math.max(h.scrollTop,i.scrollTop),m+=Math.max(h.scrollLeft,i.scrollLeft));return{top:l,left:m}},f.offset={bodyOffset:function(a){var b=a.offsetTop,c=a.offsetLeft;f.support.doesNotIncludeMarginInBodyOffset&&(b+=parseFloat(f.css(a,"marginTop"))||0,c+=parseFloat(f.css(a,"marginLeft"))||0);return{top:b,left:c}},setOffset:function(a,b,c){var d=f.css(a,"position");d==="static"&&(a.style.position="relative");var e=f(a),g=e.offset(),h=f.css(a,"top"),i=f.css(a,"left"),j=(d==="absolute"||d==="fixed")&&f.inArray("auto",[h,i])>-1,k={},l={},m,n;j?(l=e.position(),m=l.top,n=l.left):(m=parseFloat(h)||0,n=parseFloat(i)||0),f.isFunction(b)&&(b=b.call(a,c,g)),b.top!=null&&(k.top=b.top-g.top+m),b.left!=null&&(k.left=b.left-g.left+n),"using"in b?b.using.call(a,k):e.css(k)}},f.fn.extend({position:function(){if(!this[0])return null;var a=this[0],b=this.offsetParent(),c=this.offset(),d=cx.test(b[0].nodeName)?{top:0,left:0}:b.offset();c.top-=parseFloat(f.css(a,"marginTop"))||0,c.left-=parseFloat(f.css(a,"marginLeft"))||0,d.top+=parseFloat(f.css(b[0],"borderTopWidth"))||0,d.left+=parseFloat(f.css(b[0],"borderLeftWidth"))||0;return{top:c.top-d.top,left:c.left-d.left}},offsetParent:function(){return this.map(function(){var a=this.offsetParent||c.body;while(a&&!cx.test(a.nodeName)&&f.css(a,"position")==="static")a=a.offsetParent;return a})}}),f.each(["Left","Top"],function(a,c){var d="scroll"+c;f.fn[d]=function(c){var e,g;if(c===b){e=this[0];if(!e)return null;g=cy(e);return g?"pageXOffset"in g?g[a?"pageYOffset":"pageXOffset"]:f.support.boxModel&&g.document.documentElement[d]||g.document.body[d]:e[d]}return this.each(function(){g=cy(this),g?g.scrollTo(a?f(g).scrollLeft():c,a?c:f(g).scrollTop()):this[d]=c})}}),f.each(["Height","Width"],function(a,c){var d=c.toLowerCase();f.fn["inner"+c]=function(){var a=this[0];return a?a.style?parseFloat(f.css(a,d,"padding")):this[d]():null},f.fn["outer"+c]=function(a){var b=this[0];return b?b.style?parseFloat(f.css(b,d,a?"margin":"border")):this[d]():null},f.fn[d]=function(a){var e=this[0];if(!e)return a==null?null:this;if(f.isFunction(a))return this.each(function(b){var c=f(this);c[d](a.call(this,b,c[d]()))});if(f.isWindow(e)){var g=e.document.documentElement["client"+c],h=e.document.body;return e.document.compatMode==="CSS1Compat"&&g||h&&h["client"+c]||g}if(e.nodeType===9)return Math.max(e.documentElement["client"+c],e.body["scroll"+c],e.documentElement["scroll"+c],e.body["offset"+c],e.documentElement["offset"+c]);if(a===b){var i=f.css(e,d),j=parseFloat(i);return f.isNumeric(j)?j:i}return this.css(d,typeof a=="string"?a:a+"px")}}),a.jQuery=a.$=f,typeof define=="function"&&define.amd&&define.amd.jQuery&&define("jquery",[],function(){return f})})(window);
\ No newline at end of file
diff --git a/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/manager/style/orange.jpg b/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/manager/style/orange.jpg
deleted file mode 100755 (executable)
index ac4c749..0000000
Binary files a/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/manager/style/orange.jpg and /dev/null differ
diff --git a/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/manager/style/popup.js b/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/manager/style/popup.js
deleted file mode 100755 (executable)
index 5f994f4..0000000
+++ /dev/null
@@ -1,1215 +0,0 @@
-/**
- * Copyright (c)2005-2009 Matt Kruse (javascripttoolbox.com)
- * 
- * Dual licensed under the MIT and GPL licenses. 
- * This basically means you can use this code however you want for
- * free, but don't claim to have written it yourself!
- * Donations always accepted: http://www.JavascriptToolbox.com/donate/
- * 
- * Please do not link to the .js files on javascripttoolbox.com from
- * your site. Copy the files locally to your server instead.
- * 
- */
-/* ******************************************************************* */
-/*   UTIL FUNCTIONS                                                    */
-/* ******************************************************************* */
-var Util = {'$VERSION':1.06};
-
-// Util functions - these are GLOBAL so they
-// look like built-in functions.
-
-// Determine if an object is an array
-function isArray(o) {
-       return (o!=null && typeof(o)=="object" && typeof(o.length)=="number" && (o.length==0 || defined(o[0])));
-};
-
-// Determine if an object is an Object
-function isObject(o) {
-       return (o!=null && typeof(o)=="object" && defined(o.constructor) && o.constructor==Object && !defined(o.nodeName));
-};
-
-// Determine if a reference is defined
-function defined(o) {
-       return (typeof(o)!="undefined");
-};
-
-// Iterate over an array, object, or list of items and run code against each item
-// Similar functionality to Perl's map() function
-function map(func) {
-       var i,j,o;
-       var results = [];
-       if (typeof(func)=="string") {
-               func = new Function('$_',func);
-       }
-       for (i=1; i<arguments.length; i++) {
-               o = arguments[i];
-               if (isArray(o)) {
-                       for (j=0; j<o.length; j++) {
-                               results[results.length] = func(o[j]);
-                       }
-               }
-               else if (isObject(o)) {
-                       for (j in o) {
-                               results[results.length] = func(o[j]);
-                       }
-               }
-               else {
-                       results[results.length] = func(o);
-               }
-       }
-       return results;
-};
-
-// Set default values in an object if they are undefined
-function setDefaultValues(o,values) {
-       if (!defined(o) || o==null) {
-               o = {};
-       }
-       if (!defined(values) || values==null) {
-               return o;
-       }
-       for (var val in values) {
-               if (!defined(o[val])) {
-                       o[val] = values[val];
-               }
-       }
-       return o;
-};
-
-/* ******************************************************************* */
-/*   DEFAULT OBJECT PROTOTYPE ENHANCEMENTS                             */
-/* ******************************************************************* */
-// These functions add useful functionality to built-in objects
-Array.prototype.contains = function(o) {
-       var i,l;
-       if (!(l = this.length)) { return false; }
-       for (i=0; i<l; i++) {
-               if (o==this[i]) {
-                       return true;
-               }
-       }
-};
-
-/* ******************************************************************* */
-/*   DOM FUNCTIONS                                                     */
-/* ******************************************************************* */
-var DOM = (function() { 
-       var dom = {};
-       
-       // Get a parent tag with a given nodename
-       dom.getParentByTagName = function(o,tagNames) {
-               if(o==null) { return null; }
-               if (isArray(tagNames)) {
-                       tagNames = map("return $_.toUpperCase()",tagNames);
-                       while (o=o.parentNode) {
-                               if (o.nodeName && tagNames.contains(o.nodeName)) {
-                                       return o;
-                               }
-                       }
-               }
-               else {
-                       tagNames = tagNames.toUpperCase();
-                       while (o=o.parentNode) {
-                               if (o.nodeName && tagNames==o.nodeName) {
-                                       return o;
-                               }
-                       }
-               }
-               return null;
-       };
-       
-       // Remove a node from its parent
-       dom.removeNode = function(o) {
-               if (o!=null && o.parentNode && o.parentNode.removeChild) {
-                       // First remove all attributes which are func references, to avoid memory leaks
-                       for (var i in o) {
-                               if (typeof(o[i])=="function") {
-                                       o[i] = null;
-                               }
-                       }
-                       o.parentNode.removeChild(o);
-                       return true;
-               }
-               return false;
-       };
-
-       // Get the outer width in pixels of an object, including borders, padding, and margin
-       dom.getOuterWidth = function(o) {
-               if (defined(o.offsetWidth)) {
-                       return o.offsetWidth;
-               }
-               return null;
-       };
-
-       // Get the outer height in pixels of an object, including borders, padding, and margin
-       dom.getOuterHeight = function(o) {
-               if (defined(o.offsetHeight)) {
-                       return o.offsetHeight;
-               }
-               return null;
-       };
-
-       // Resolve an item, an array of items, or an object of items
-       dom.resolve = function() {
-               var results = new Array();
-               var i,j,o;
-               for (var i=0; i<arguments.length; i++) {
-                       var o = arguments[i];
-                       if (o==null) {
-                               if (arguments.length==1) {
-                                       return null;
-                               }
-                               results[results.length] = null;
-                       }
-                       else if (typeof(o)=='string') {
-                               if (document.getElementById) {
-                                       o = document.getElementById(o);
-                               }
-                               else if (document.all) {
-                                       o = document.all[o];
-                               }
-                               if (arguments.length==1) {
-                                       return o;
-                               }
-                               results[results.length] = o;
-                       }
-                       else if (isArray(o)) {
-                               for (j=0; j<o.length; j++) {
-                                       results[results.length] = o[j];
-                               }
-                       }
-                       else if (isObject(o)) {
-                               for (j in o) {
-                                       results[results.length] = o[j];
-                               }
-                       }
-                       else if (arguments.length==1) {
-                               return o;
-                       }
-                       else {
-                               results[results.length] = o;
-                       }
-         }
-         return results;
-       };
-       dom.$ = dom.resolve;
-       
-       return dom;
-})();
-
-/* ******************************************************************* */
-/*   CSS FUNCTIONS                                                     */
-/* ******************************************************************* */
-var CSS = (function(){
-       var css = {};
-
-       // Convert an RGB string in the form "rgb (255, 255, 255)" to "#ffffff"
-       css.rgb2hex = function(rgbString) {
-               if (typeof(rgbString)!="string" || !defined(rgbString.match)) { return null; }
-               var result = rgbString.match(/^\s*rgb\s*\(\s*(\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*/);
-               if (result==null) { return rgbString; }
-               var rgb = +result[1] << 16 | +result[2] << 8 | +result[3];
-               var hex = "";
-               var digits = "0123456789abcdef";
-               while(rgb!=0) { 
-                       hex = digits.charAt(rgb&0xf)+hex; 
-                       rgb>>>=4; 
-               } 
-               while(hex.length<6) { hex='0'+hex; }
-               return "#" + hex;
-       };
-
-       // Convert hyphen style names like border-width to camel case like borderWidth
-       css.hyphen2camel = function(property) {
-               if (!defined(property) || property==null) { return null; }
-               if (property.indexOf("-")<0) { return property; }
-               var str = "";
-               var c = null;
-               var l = property.length;
-               for (var i=0; i<l; i++) {
-                       c = property.charAt(i);
-                       str += (c!="-")?c:property.charAt(++i).toUpperCase();
-               }
-               return str;
-       };
-       
-       // Determine if an object or class string contains a given class.
-       css.hasClass = function(obj,className) {
-               if (!defined(obj) || obj==null || !RegExp) { return false; }
-               var re = new RegExp("(^|\\s)" + className + "(\\s|$)");
-               if (typeof(obj)=="string") {
-                       return re.test(obj);
-               }
-               else if (typeof(obj)=="object" && obj.className) {
-                       return re.test(obj.className);
-               }
-               return false;
-       };
-       
-       // Add a class to an object
-       css.addClass = function(obj,className) {
-               if (typeof(obj)!="object" || obj==null || !defined(obj.className)) { return false; }
-               if (obj.className==null || obj.className=='') { 
-                       obj.className = className; 
-                       return true; 
-               }
-               if (css.hasClass(obj,className)) { return true; }
-               obj.className = obj.className + " " + className;
-               return true;
-       };
-       
-       // Remove a class from an object
-       css.removeClass = function(obj,className) {
-               if (typeof(obj)!="object" || obj==null || !defined(obj.className) || obj.className==null) { return false; }
-               if (!css.hasClass(obj,className)) { return false; }
-               var re = new RegExp("(^|\\s+)" + className + "(\\s+|$)");
-               obj.className = obj.className.replace(re,' ');
-               return true;
-       };
-       
-       // Fully replace a class with a new one
-       css.replaceClass = function(obj,className,newClassName) {
-               if (typeof(obj)!="object" || obj==null || !defined(obj.className) || obj.className==null) { return false; }
-               css.removeClass(obj,className);
-               css.addClass(obj,newClassName);
-               return true;
-       };
-       
-       // Get the currently-applied style of an object
-       css.getStyle = function(o, property) {
-               if (o==null) { return null; }
-               var val = null;
-               var camelProperty = css.hyphen2camel(property);
-               // Handle "float" property as a special case
-               if (property=="float") {
-                       val = css.getStyle(o,"cssFloat");
-                       if (val==null) { 
-                               val = css.getStyle(o,"styleFloat"); 
-                       }
-               }
-               else if (o.currentStyle && defined(o.currentStyle[camelProperty])) {
-                       val = o.currentStyle[camelProperty];
-               }
-               else if (window.getComputedStyle) {
-                       val = window.getComputedStyle(o,null).getPropertyValue(property);
-               }
-               else if (o.style && defined(o.style[camelProperty])) {
-                       val = o.style[camelProperty];
-               }
-               // For color values, make the value consistent across browsers
-               // Convert rgb() colors back to hex for consistency
-               if (/^\s*rgb\s*\(/.test(val)) {
-                       val = css.rgb2hex(val);
-               }
-               // Lowercase all #hex values
-               if (/^#/.test(val)) {
-                       val = val.toLowerCase();
-               }
-               return val;
-       };
-       css.get = css.getStyle;
-
-       // Set a style on an object
-       css.setStyle = function(o, property, value) {
-               if (o==null || !defined(o.style) || !defined(property) || property==null || !defined(value)) { return false; }
-               if (property=="float") {
-                       o.style["cssFloat"] = value;
-                       o.style["styleFloat"] = value;
-               }
-               else if (property=="opacity") {
-                       o.style['-moz-opacity'] = value;
-                       o.style['-khtml-opacity'] = value;
-                       o.style.opacity = value;
-                       if (defined(o.style.filter)) {
-                               o.style.filter = "alpha(opacity=" + value*100 + ")";
-                       }
-               }
-               else {
-                       o.style[css.hyphen2camel(property)] = value;
-               }
-               return true;
-       };
-       css.set = css.setStyle;
-       
-       // Get a unique ID which doesn't already exist on the page
-       css.uniqueIdNumber=1000;
-       css.createId = function(o) {
-               if (defined(o) && o!=null && defined(o.id) && o.id!=null && o.id!="") { 
-                       return o.id;
-               }
-               var id = null;
-               while (id==null || document.getElementById(id)!=null) {
-                       id = "ID_"+(css.uniqueIdNumber++);
-               }
-               if (defined(o) && o!=null && (!defined(o.id)||o.id=="")) {
-                       o.id = id;
-               }
-               return id;
-       };
-       
-       return css;
-})();
-
-/* ******************************************************************* */
-/*   EVENT FUNCTIONS                                                   */
-/* ******************************************************************* */
-
-var Event = (function(){
-       var ev = {};
-       
-       // Resolve an event using IE's window.event if necessary
-       // --------------------------------------------------------------------
-       ev.resolve = function(e) {
-               if (!defined(e) && defined(window.event)) {
-                       e = window.event;
-               }
-               return e;
-       };
-       
-       // Add an event handler to a function
-       // Note: Don't use 'this' within functions added using this method, since
-       // the attachEvent and addEventListener models differ.
-       // --------------------------------------------------------------------
-       ev.add = function( obj, type, fn, capture ) {
-               if (obj.addEventListener) {
-                       obj.addEventListener( type, fn, capture );
-                       return true;
-               }
-               else if (obj.attachEvent) {
-                       obj.attachEvent( "on"+type, fn );
-                       return true;
-               }
-               return false;
-       };
-
-       // Get the mouse position of an event
-       // --------------------------------------------------------------------
-       // PageX/Y, where they exist, are more reliable than ClientX/Y because 
-       // of some browser bugs in Opera/Safari
-       ev.getMouseX = function(e) {
-               e = ev.resolve(e);
-               if (defined(e.pageX)) {
-                       return e.pageX;
-               }
-               if (defined(e.clientX)) {
-                       return e.clientX+Screen.getScrollLeft();
-               }
-               return null;
-       };
-       ev.getMouseY = function(e) {
-               e = ev.resolve(e);
-               if (defined(e.pageY)) {
-                       return e.pageY;
-               }
-               if (defined(e.clientY)) {
-                       return e.clientY+Screen.getScrollTop();
-               }
-               return null;
-       };
-
-       // Stop the event from bubbling up to parent elements.
-       // Two method names map to the same function
-       // --------------------------------------------------------------------
-       ev.cancelBubble = function(e) {
-               e = ev.resolve(e);
-               if (typeof(e.stopPropagation)=="function") { e.stopPropagation(); } 
-               if (defined(e.cancelBubble)) { e.cancelBubble = true; }
-       };
-       ev.stopPropagation = ev.cancelBubble;
-
-       // Prevent the default handling of the event to occur
-       // --------------------------------------------------------------------
-       ev.preventDefault = function(e) {
-               e = ev.resolve(e);
-               if (typeof(e.preventDefault)=="function") { e.preventDefault(); } 
-               if (defined(e.returnValue)) { e.returnValue = false; }
-       };
-       
-       return ev;
-})();
-
-/* ******************************************************************* */
-/*   SCREEN FUNCTIONS                                                  */
-/* ******************************************************************* */
-var Screen = (function() {
-       var screen = {};
-
-       // Get a reference to the body
-       // --------------------------------------------------------------------
-       screen.getBody = function() {
-               if (document.body) {
-                       return document.body;
-               }
-               if (document.getElementsByTagName) {
-                       var bodies = document.getElementsByTagName("BODY");
-                       if (bodies!=null && bodies.length>0) {
-                               return bodies[0];
-                       }
-               }
-               return null;
-       };
-
-       // Get the amount that the main document has scrolled from top
-       // --------------------------------------------------------------------
-       screen.getScrollTop = function() {
-               if (document.documentElement && defined(document.documentElement.scrollTop) && document.documentElement.scrollTop>0) {
-                       return document.documentElement.scrollTop;
-               }
-               if (document.body && defined(document.body.scrollTop)) {
-                       return document.body.scrollTop;
-               }
-               return null;
-       };
-       
-       // Get the amount that the main document has scrolled from left
-       // --------------------------------------------------------------------
-       screen.getScrollLeft = function() {
-               if (document.documentElement && defined(document.documentElement.scrollLeft) && document.documentElement.scrollLeft>0) {
-                       return document.documentElement.scrollLeft;
-               }
-               if (document.body && defined(document.body.scrollLeft)) {
-                       return document.body.scrollLeft;
-               }
-               return null;
-       };
-       
-       // Util function to default a bad number to 0
-       // --------------------------------------------------------------------
-       screen.zero = function(n) {
-               return (!defined(n) || isNaN(n))?0:n;
-       };
-
-       // Get the width of the entire document
-       // --------------------------------------------------------------------
-       screen.getDocumentWidth = function() {
-               var width = 0;
-               var body = screen.getBody();
-               if (document.documentElement && (!document.compatMode || document.compatMode=="CSS1Compat")) {
-                   var rightMargin = parseInt(CSS.get(body,'marginRight'),10) || 0;
-                   var leftMargin = parseInt(CSS.get(body,'marginLeft'), 10) || 0;
-                       width = Math.max(body.offsetWidth + leftMargin + rightMargin, document.documentElement.clientWidth);
-               }
-               else {
-                       width =  Math.max(body.clientWidth, body.scrollWidth);
-               }
-               if (isNaN(width) || width==0) {
-                       width = screen.zero(self.innerWidth);
-               }
-               return width;
-       };
-       
-       // Get the height of the entire document
-       // --------------------------------------------------------------------
-       screen.getDocumentHeight = function() {
-               var body = screen.getBody();
-               var innerHeight = (defined(self.innerHeight)&&!isNaN(self.innerHeight))?self.innerHeight:0;
-               if (document.documentElement && (!document.compatMode || document.compatMode=="CSS1Compat")) {
-                   var topMargin = parseInt(CSS.get(body,'marginTop'),10) || 0;
-                   var bottomMargin = parseInt(CSS.get(body,'marginBottom'), 10) || 0;
-                       return Math.max(body.offsetHeight + topMargin + bottomMargin, document.documentElement.clientHeight, document.documentElement.scrollHeight, screen.zero(self.innerHeight));
-               }
-               return Math.max(body.scrollHeight, body.clientHeight, screen.zero(self.innerHeight));
-       };
-       
-       // Get the width of the viewport (viewable area) in the browser window
-       // --------------------------------------------------------------------
-       screen.getViewportWidth = function() {
-               if (document.documentElement && (!document.compatMode || document.compatMode=="CSS1Compat")) {
-                       return document.documentElement.clientWidth;
-               }
-               else if (document.compatMode && document.body) {
-                       return document.body.clientWidth;
-               }
-               return screen.zero(self.innerWidth);
-       };
-       
-       // Get the height of the viewport (viewable area) in the browser window
-       // --------------------------------------------------------------------
-       screen.getViewportHeight = function() {
-               if (!window.opera && document.documentElement && (!document.compatMode || document.compatMode=="CSS1Compat")) {
-                       return document.documentElement.clientHeight;
-               }
-               else if (document.compatMode && !window.opera && document.body) {
-                       return document.body.clientHeight;
-               }
-               return screen.zero(self.innerHeight);
-       };
-
-       return screen;
-})();var Sort = (function(){
-       var sort = {};
-       sort.AlphaNumeric = function(a,b) {
-               if (a==b) { return 0; }
-               if (a<b) { return -1; }
-               return 1;
-       };
-
-       sort.Default = sort.AlphaNumeric;
-       
-       sort.NumericConversion = function(val) {
-               if (typeof(val)!="number") {
-                       if (typeof(val)=="string") {
-                               val = parseFloat(val.replace(/,/g,''));
-                               if (isNaN(val) || val==null) { val=0; }
-                       }
-                       else {
-                               val = 0;
-                       }
-               }
-               return val;
-       };
-       
-       sort.Numeric = function(a,b) {
-               return sort.NumericConversion(a)-sort.NumericConversion(b);
-       };
-
-       sort.IgnoreCaseConversion = function(val) {
-               if (val==null) { val=""; }
-               return (""+val).toLowerCase();
-       };
-
-       sort.IgnoreCase = function(a,b) {
-               return sort.AlphaNumeric(sort.IgnoreCaseConversion(a),sort.IgnoreCaseConversion(b));
-       };
-
-       sort.CurrencyConversion = function(val) {
-               if (typeof(val)=="string") {
-                       val = val.replace(/^[^\d\.]/,'');
-               }
-               return sort.NumericConversion(val);
-       };
-       
-       sort.Currency = function(a,b) {
-               return sort.Numeric(sort.CurrencyConversion(a),sort.CurrencyConversion(b));
-       };
-       
-       sort.DateConversion = function(val) {
-               // inner util function to parse date formats
-               function getdate(str) {
-                       // inner util function to convert 2-digit years to 4
-                       function fixYear(yr) {
-                               yr = +yr;
-                               if (yr<50) { yr += 2000; }
-                               else if (yr<100) { yr += 1900; }
-                               return yr;
-                       };
-                       var ret;
-                       // YYYY-MM-DD
-                       if (ret=str.match(/(\d{2,4})-(\d{1,2})-(\d{1,2})/)) {
-                               return (fixYear(ret[1])*10000) + (ret[2]*100) + (+ret[3]);
-                       }
-                       // MM/DD/YY[YY] or MM-DD-YY[YY]
-                       if (ret=str.match(/(\d{1,2})[\/-](\d{1,2})[\/-](\d{2,4})/)) {
-                               return (fixYear(ret[3])*10000) + (ret[1]*100) + (+ret[2]);
-                       }
-                       return 99999999; // So non-parsed dates will be last, not first
-               };
-               return getdate(val);
-       };
-
-       sort.Date = function(a,b) {
-               return sort.Numeric(sort.DateConversion(a),sort.DateConversion(b));
-       };
-
-       return sort;
-})();
-
-var Position = (function() {
-       // Resolve a string identifier to an object
-       // ========================================
-       function resolveObject(s) {
-               if (document.getElementById && document.getElementById(s)!=null) {
-                       return document.getElementById(s);
-               }
-               else if (document.all && document.all[s]!=null) {
-                       return document.all[s];
-               }
-               else if (document.anchors && document.anchors.length && document.anchors.length>0 && document.anchors[0].x) {
-                       for (var i=0; i<document.anchors.length; i++) {
-                               if (document.anchors[i].name==s) { 
-                                       return document.anchors[i]
-                               }
-                       }
-               }
-       }
-       
-       var pos = {};
-       pos.$VERSION = 1.0;
-       
-       // Set the position of an object
-       // =============================
-       pos.set = function(o,left,top) {
-               if (typeof(o)=="string") {
-                       o = resolveObject(o);
-               }
-               if (o==null || !o.style) {
-                       return false;
-               }
-               
-               // If the second parameter is an object, it is assumed to be the result of getPosition()
-               if (typeof(left)=="object") {
-                       var pos = left;
-                       left = pos.left;
-                       top = pos.top;
-               }
-               
-               o.style.left = left + "px";
-               o.style.top = top + "px";
-               return true;
-       };
-       
-       // Retrieve the position and size of an object
-       // ===========================================
-       pos.get = function(o) {
-               var fixBrowserQuirks = true;
-                       // If a string is passed in instead of an object ref, resolve it
-               if (typeof(o)=="string") {
-                       o = resolveObject(o);
-               }
-               
-               if (o==null) {
-                       return null;
-               }
-               
-               var left = 0;
-               var top = 0;
-               var width = 0;
-               var height = 0;
-               var parentNode = null;
-               var offsetParent = null;
-       
-               
-               offsetParent = o.offsetParent;
-               var originalObject = o;
-               var el = o; // "el" will be nodes as we walk up, "o" will be saved for offsetParent references
-               while (el.parentNode!=null) {
-                       el = el.parentNode;
-                       if (el.offsetParent==null) {
-                       }
-                       else {
-                               var considerScroll = true;
-                               /*
-                               In Opera, if parentNode of the first object is scrollable, then offsetLeft/offsetTop already 
-                               take its scroll position into account. If elements further up the chain are scrollable, their 
-                               scroll offsets still need to be added in. And for some reason, TR nodes have a scrolltop value
-                               which must be ignored.
-                               */
-                               if (fixBrowserQuirks && window.opera) {
-                                       if (el==originalObject.parentNode || el.nodeName=="TR") {
-                                               considerScroll = false;
-                                       }
-                               }
-                               if (considerScroll) {
-                                       if (el.scrollTop && el.scrollTop>0) {
-                                               top -= el.scrollTop;
-                                       }
-                                       if (el.scrollLeft && el.scrollLeft>0) {
-                                               left -= el.scrollLeft;
-                                       }
-                               }
-                       }
-                       // If this node is also the offsetParent, add on the offsets and reset to the new offsetParent
-                       if (el == offsetParent) {
-                               left += o.offsetLeft;
-                               if (el.clientLeft && el.nodeName!="TABLE") { 
-                                       left += el.clientLeft;
-                               }
-                               top += o.offsetTop;
-                               if (el.clientTop && el.nodeName!="TABLE") {
-                                       top += el.clientTop;
-                               }
-                               o = el;
-                               if (o.offsetParent==null) {
-                                       if (o.offsetLeft) {
-                                               left += o.offsetLeft;
-                                       }
-                                       if (o.offsetTop) {
-                                               top += o.offsetTop;
-                                       }
-                               }
-                               offsetParent = o.offsetParent;
-                       }
-               }
-               
-       
-               if (originalObject.offsetWidth) {
-                       width = originalObject.offsetWidth;
-               }
-               if (originalObject.offsetHeight) {
-                       height = originalObject.offsetHeight;
-               }
-               
-               return {'left':left, 'top':top, 'width':width, 'height':height
-                               };
-       };
-       
-       // Retrieve the position of an object's center point
-       // =================================================
-       pos.getCenter = function(o) {
-               var c = this.get(o);
-               if (c==null) { return null; }
-               c.left = c.left + (c.width/2);
-               c.top = c.top + (c.height/2);
-               return c;
-       };
-       
-       return pos;
-})();// CLASS CONSTRUCTOR
-// --------------------------------------------------------------------
-var Popup = function(div, options) {
-       this.div = defined(div)?div:null;
-       this.index = Popup.maxIndex++;
-       this.ref = "Popup.objects["+this.index+"]";
-       Popup.objects[this.index] = this;
-       // Store a reference to the DIV by id, also
-       if (typeof(this.div)=="string") {
-               Popup.objectsById[this.div] = this;
-       }
-       if (defined(this.div) && this.div!=null && defined(this.div.id)) {
-               Popup.objectsById[this.div.id] = this.div.id;
-       }
-       // Apply passed-in options
-       if (defined(options) && options!=null && typeof(options)=="object") {
-               for (var i in options) {
-                       this[i] = options[i];
-               }
-       }
-       return this;
-};
-
-// CLASS PROPERTIES
-// --------------------------------------------------------------------
-// Index of popup objects, to maintain a global reference if necessary
-Popup.maxIndex = 0;
-Popup.objects = {};
-Popup.objectsById = {};
-
-// The z-index value that popups will start at
-Popup.minZIndex = 101;
-
-// Class names to assign to other objects
-Popup.screenClass = "PopupScreen";
-Popup.iframeClass = "PopupIframe";
-Popup.screenIframeClass = "PopupScreenIframe";
-
-// CLASS METHODS
-// --------------------------------------------------------------------
-
-// Hide all currently-visible non-modal dialogs
-Popup.hideAll = function() {
-       for (var i in Popup.objects) {
-               var p = Popup.objects[i];
-               if (!p.modal && p.autoHide) {
-                       p.hide();
-               }
-       }
-};
-// Catch global events as a trigger to hide auto-hide popups
-Event.add(document, "mouseup", Popup.hideAll, false);
-
-// A simple class method to show a popup without creating an instance
-Popup.show = function(divObject, referenceObject, position, options, modal) {
-       var popup;
-       if (defined(divObject)) { 
-               popup = new Popup(divObject);
-       }
-       else {
-               popup = new Popup();
-               popup.destroyDivOnHide = true;
-       }
-       if (defined(referenceObject)) { popup.reference = DOM.resolve(referenceObject); }
-       if (defined(position)) { popup.position = position; }
-       if (defined(options) && options!=null && typeof(options)=="object") {
-               for (var i in options) {
-                       popup[i] = options[i];
-               }
-       }
-       if (typeof(modal)=="boolean") {
-               popup.modal = modal;
-       }
-       popup.destroyObjectsOnHide = true;
-       popup.show();
-       return popup;
-};
-
-// A simple class method to show a modal popup
-Popup.showModal = function(divObject, referenceObject, position, options) {
-       Popup.show(divObject, referenceObject, position, options, true);
-};
-
-// A method to retrieve a popup object based on a div ID
-Popup.get = function(divId) {
-       if (defined(Popup.objectsById[divId])) {
-               return Popup.objectsById[divId];
-       }
-       return null;
-};
-
-// A method to hide a popup based on a div id
-Popup.hide = function(divId) {
-       var popup = Popup.get(divId);
-       if (popup!=null) {
-               popup.hide();
-       }
-};
-
-// PROTOTYPE PROPERTIES
-// --------------------------------------------------------------------
-Popup.prototype.content = null;
-Popup.prototype.className = "PopupDiv";
-Popup.prototype.style = null; // Styles to be applied to the DIV
-Popup.prototype.width = null;
-Popup.prototype.height = null;
-Popup.prototype.top = null;
-Popup.prototype.left = null;
-Popup.prototype.offsetLeft = 0;
-Popup.prototype.offsetTop = 0;
-Popup.prototype.constrainToScreen = true;
-Popup.prototype.autoHide = true;
-Popup.prototype.useIframeShim = false; /*@cc_on @*/ /*@if (@_win32) {Popup.prototype.useIframeShim = true;} @end @*/ 
-Popup.prototype.iframe = null;
-Popup.prototype.position = null; // vertical: "above top center bottom below", horizontal: "adjacent-left,left,center,right,adjacent-right"
-Popup.prototype.reference = null;
-Popup.prototype.modal = false;
-Popup.prototype.destroyDivOnHide = false;
-Popup.prototype.destroyObjectsOnHide = false;
-Popup.prototype.screen = null;
-Popup.prototype.screenIframeShim = null;
-Popup.prototype.screenOpacity=.4;
-Popup.prototype.screenColor="#cccccc";
-
-// INSTANCE METHODS
-// --------------------------------------------------------------------
-
-// Show the popup
-// --------------------------------------------------------------------
-Popup.prototype.show = function(options, modal) {
-       this.modal = this.modal || (typeof(modal)=="boolean" && modal);
-       if (defined(options) && options!=null && typeof(options)=="object") {
-               for (var i in options) {
-                       this[i] = options[i];
-               }
-       }
-       this.div = DOM.resolve(this.div);
-       CSS.setStyle(this.div,'position','absolute');
-       
-       // If there is no div pre-defined to use, create one
-       if (this.div==null) {
-               this.div = this.createDiv();
-       }
-       if (this.content!=null) {
-               this.div.innerHTML = this.content;
-               this.content = null;
-       }
-       if (this.className!=null) {
-               this.div.className = this.className;
-       }
-       if (this.style!=null) {
-               this.applyStyle();
-       }
-       if (this.width!=null) {
-               this.div.style.width = this.width+"px";
-               this.div.style.overflowX="auto";
-       }
-       if (this.height!=null) {
-               this.div.style.height = this.height+"px";
-               this.div.style.overflowY="auto";
-       }
-
-       // Do the actual display - this is a separate method so display transitions can be implemented
-       this.transition();
-       
-       // Make sure clicks on the DIV don't bubble up to the document
-       this.div.onclick = function(e) { 
-               Event.cancelBubble(Event.resolve(e));
-       };
-       this.div.onmouseup = this.div.onclick;
-       
-       // Focus to the DIV if possible 
-       if (this.modal && this.div.focus) {
-               this.div.focus();
-       }
-};
-
-// Show the popup but make it modal
-// --------------------------------------------------------------------
-Popup.prototype.transition = function() {
-       if (this.modal) {
-               this.addScreen();
-       }
-       
-       // Make the DIV displayed but hidden so its size can be measured
-       CSS.setStyle(this.div,'visibility','hidden');
-       CSS.setStyle(this.div,'display','block');
-
-       // Position the popup
-       this.setPosition();
-
-       // Add the shim if necessary    
-       if (this.useIframeShim) {
-               this.addIframeShim();
-       }
-
-       // Make sure the DIV is higher than the shim
-       this.div.style.zIndex = Popup.minZIndex++;
-
-       CSS.setStyle(this.div,'display','block');
-       CSS.setStyle(this.div,'visibility','visible');
-};
-
-// Show the popup but make it modal
-// --------------------------------------------------------------------
-Popup.prototype.showModal = function(options) {
-       this.show(options,true);
-};
-
-// Apply user styles to the DIV
-// --------------------------------------------------------------------
-Popup.prototype.applyStyle = function() {
-       if (this.div!=null && this.style!=null && typeof(this.style)=="object") {
-               for (var i in this.style) {
-                       this.div.style[i] = this.style[i];
-               }
-       }
-};
-
-// Hide the popup
-// --------------------------------------------------------------------
-Popup.prototype.hide = function() {
-       // If this was a temp object creating on-the-fly, then remove objects from the DOM so
-       // The document doesn't get littered with extra objects
-       if (this.destroyDivOnHide) {
-               DOM.removeNode(this.div);
-               this.div = null;
-               delete Popup.objects[this.id];
-       }
-       else if (this.div!=null) {
-               CSS.setStyle(this.div,'display','none');
-       }
-
-       if (this.destroyObjectsOnHide) {
-               DOM.removeNode(this.iframe);
-               DOM.removeNode(this.screen);
-               DOM.removeNode(this.screenIframeShim);
-       }
-       else {
-               if (this.iframe!=null) {
-                       this.iframe.style.display = "none";
-               }
-               if (this.screen!=null) {
-                       this.screen.style.display = "none";
-               }
-               if (this.screenIframeShim!=null) {
-                       this.screenIframeShim.style.display = "none";
-               }
-       }
-};
-
-// Util funcs for position
-// --------------------------------------------------------------------
-Popup.prototype.setTop = function(top) {
-       this.div.style.top = top+"px";
-};
-Popup.prototype.setLeft = function(left) {
-       this.div.style.left = left+"px";
-};
-Popup.prototype.getTop = function() {
-       return parseInt(CSS.getStyle(this.div,"top"),10);
-};
-Popup.prototype.getLeft = function() {
-       return parseInt(CSS.getStyle(this.div,"left"),10);
-};
-
-// All the logic to position the popup based on various criteria
-// --------------------------------------------------------------------
-Popup.prototype.setPosition = function() {
-       if (this.position!=null) {
-               var m = this.position.match(/^(\S+)\s+(\S+)/); 
-               if (m!=null && m.length==3) {
-                       var v = m[1];
-                       var h = m[2];
-
-                       var ref = this.reference;
-                       if (ref==null) { ref = Screen.getBody(); }
-                       var p = Position.get(ref);
-                       var refTop = p.top;
-                       var refLeft = p.left;
-                       var refWidth = DOM.getOuterWidth(ref);
-                       var refHeight = DOM.getOuterHeight(ref);
-                       
-                       var width = DOM.getOuterWidth(this.div);
-                       var height = DOM.getOuterHeight(this.div);
-                       
-                       var scrollLeft = Screen.getScrollLeft();
-                       var scrollTop = Screen.getScrollTop();
-
-                       // Set vertical position relative to reference object
-                       if (v=="above") { this.setTop(refTop-height+this.offsetTop); }
-                       else if (v=="top") { this.setTop(refTop+this.offsetTop); }
-                       else if (v=="center") { this.setTop(refTop+(refHeight/2)-(height/2)+this.offsetTop); }
-                       else if (v=="bottom") { this.setTop(refTop+refHeight-height+this.offsetTop); }
-                       else if (v=="below") { this.setTop(refTop+refHeight+this.offsetTop); }
-
-                       // Set horizontal position relative to reference object
-                       if (h=="adjacent-left") { this.setLeft(refLeft-width+this.offsetLeft); }
-                       else if (h=="left") { this.setLeft(refLeft+this.offsetLeft); }
-                       else if (h=="center") { this.setLeft(refLeft+(refWidth/2)-(width/2)+this.offsetLeft); }
-                       else if (h=="right") { this.setLeft(refLeft+refWidth-width+this.offsetLeft); }
-                       else if (h=="adjacent-right") { this.setLeft(refLeft+refWidth+this.offsetLeft); }
-               }
-       }
-       else if (this.top==null && this.left==null) {
-               this.center();
-       }
-       else {
-               if (this.top==null) { this.top=0; }
-               if (this.left==null) { this.left=0; }
-               this.div.style.top = this.top+this.offsetTop+"px";
-               this.div.style.left = this.left+this.offsetLeft+"px";
-       }
-
-       // Re-position to make sure it stays on the screen
-       if (this.constrainToScreen) {
-               this.fitToScreen();
-       }
-};
-
-// Append an object to the body
-// --------------------------------------------------------------------
-Popup.prototype.appendToBody = function(o) {
-       var body = Screen.getBody();
-       if (body && body.appendChild) {
-               body.appendChild(o);
-       }
-};
-
-// Create a new DIV object to be used for a popup
-// --------------------------------------------------------------------
-Popup.prototype.createDiv = function() {
-       if (document.createElement) {
-               var d = document.createElement("DIV");
-               d.style.position="absolute";
-               d.style.display="block";
-               d.style.visibility="hidden";
-               this.appendToBody(d);
-               return d;
-       }
-       alert("ERROR: Couldn't create DIV element in Popup.prototype.createDiv()");
-       return null;
-};
-
-// Create a new IFRAME object to be used behind the popup
-// --------------------------------------------------------------------
-Popup.prototype.createIframe = function() {
-       if (document.createElement) {
-               var i= document.createElement("IFRAME");
-               i.style.position="absolute";
-               i.style.display="block";
-               i.style.visibility="hidden";
-               i.style.background="none";
-               this.appendToBody(i);
-               return i;
-       }
-       else {
-               alert("ERROR: Couldn't create IFRAME object in Popup.prototype.createIframe()");
-       }
-};
-
-// Add an IFRAME shim for the DIV
-// --------------------------------------------------------------------
-Popup.prototype.addIframeShim = function() {
-       if (this.iframe==null) {
-               this.iframe = this.createIframe();
-       }
-       this.iframe.className = Popup.iframeClass;
-       CSS.setStyle(this.iframe,'top',this.getTop()+"px");
-       CSS.setStyle(this.iframe,'left',this.getLeft()+"px");
-       CSS.setStyle(this.iframe,'width',DOM.getOuterWidth(this.div) + "px");
-       CSS.setStyle(this.iframe,'height',DOM.getOuterHeight(this.div) + "px");
-       CSS.setStyle(this.iframe,'zIndex',Popup.minZIndex++);
-       CSS.setStyle(this.iframe,'opacity',0);
-       CSS.setStyle(this.iframe,'visibility','visible');
-       CSS.setStyle(this.iframe,'display','block');
-};
-
-// Create a "screen" to make a popup modal
-// --------------------------------------------------------------------
-Popup.prototype.addScreen = function() {
-       if (this.screen==null) {
-               this.screen = this.createDiv();
-               this.screen.style.top="0px";
-               this.screen.style.left="0px";
-               this.screen.style.backgroundColor = this.screenColor;
-               this.screen.className=Popup.screenClass;;
-               CSS.setStyle(this.screen,"opacity",this.screenOpacity);
-               this.screen.onclick = function(e) { Event.cancelBubble(Event.resolve(e)); }
-       }
-       if (this.screenIframeShim==null) {
-               this.screenIframeShim = this.createIframe();
-               this.screenIframeShim.style.top="0px";
-               this.screenIframeShim.style.left="0px";
-               this.screenIframeShim.className=Popup.screenIframeClass;
-               CSS.setStyle(this.screenIframeShim,"opacity",0);
-       }
-       this.screen.style.width = Screen.getDocumentWidth()+"px";
-       this.screen.style.height = Screen.getDocumentHeight()+"px";
-       this.screenIframeShim.style.width = Screen.getDocumentWidth()+"px";
-       this.screenIframeShim.style.height = Screen.getDocumentHeight()+"px";
-       this.screenIframeShim.style.zIndex = Popup.minZIndex++;
-       this.screenIframeShim.style.visibility="visible";
-       this.screenIframeShim.style.display="block";
-       this.screen.style.zIndex = Popup.minZIndex++;
-       this.screen.style.visibility="visible";
-       this.screen.style.display="block";
-};
-
-// Re-position the DIV so it stays on the screen
-// --------------------------------------------------------------------
-Popup.prototype.fitToScreen = function() {
-       var width = DOM.getOuterWidth(this.div);
-       var height = DOM.getOuterHeight(this.div);
-       var top = this.getTop();
-       var left = this.getLeft();
-       
-       var clientWidth = Screen.getViewportWidth();
-       var clientHeight = Screen.getViewportHeight();
-       
-       var scrollLeft = Screen.getScrollLeft();
-       var scrollTop = Screen.getScrollTop();
-
-       if (top-scrollTop+height>clientHeight) {
-               top = top - ((top+height) - (scrollTop+clientHeight));
-               this.div.style.top = top + "px";
-       }
-       if (left-scrollLeft+width>clientWidth) {
-               left = left - ((left+width) - (scrollLeft+clientWidth));
-               this.div.style.left = left + "px";
-       }
-       if (top<scrollTop) {
-               this.div.style.top=scrollTop+"px";
-       }
-       if (left<scrollLeft) {
-               this.div.style.left=scrollLeft+"px";
-       }
-};
-
-// Center the DIV object
-// --------------------------------------------------------------------
-Popup.prototype.center = function() {
-       var left = DOM.getOuterWidth(this.div);
-       var top = DOM.getOuterHeight(this.div);
-       if (isNaN(left)) { left=0; }
-       if (isNaN(top)) { top=0; }      
-       var clientW = Screen.getViewportWidth();
-       var clientH = Screen.getViewportHeight();
-       if (clientW!=null && clientH!=null) {
-               top = (clientH-top)/2;
-               left = (clientW-left)/2;
-       }
-       top += Screen.getScrollTop();
-       left += Screen.getScrollLeft();
-       
-       this.div.style.top = top+this.offsetTop+"px";
-       this.div.style.left = left+this.offsetLeft+"px";
-};
-
diff --git a/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/manager/style/red.jpg b/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/manager/style/red.jpg
deleted file mode 100755 (executable)
index ab67c5a..0000000
Binary files a/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/manager/style/red.jpg and /dev/null differ
diff --git a/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/manager/style/summary.xsl b/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/manager/style/summary.xsl
deleted file mode 100755 (executable)
index 2f7f0df..0000000
+++ /dev/null
@@ -1,523 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<xsl:stylesheet version="1.0"
-       xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
-       <xsl:output method="html" version="1.0" encoding="UTF-8"
-               indent="yes" />
-       <xsl:template match="/">
-               <html>
-                       <STYLE type="text/css">
-                               @import "./style/tests.css";
-                       </STYLE>
-                       <head>
-                               <script type="text/javascript" src="./style/jquery.min.js" />
-                       </head>
-                       <body>
-                               <div id="testcasepage">
-                                       <div id="title">
-                                               <table>
-                                                       <tr>
-                                                               <td>
-                                                                       <h1>TCT Report</h1>
-                                                               </td>
-                                                       </tr>
-                                               </table>
-                                       </div>
-                                       <div id="overview">
-                                       <table>
-                                               <tr>
-                                                       <td>
-                                       <div id="summary">
-                                               <table>
-                                                       <tr>
-                                                               <th colspan="2">Test Summary</th>
-                                                       </tr>
-                                                       <tr>
-                                                               <td>TCT Version</td>
-                                                               <td>
-                                                                       <xsl:value-of select="result_summary/environment/@tct_version" />
-                                                               </td>
-                                                       </tr>
-                                                       <tr>
-                                                               <td>Test Plan Name</td>
-                                                               <td>
-                                                                       <xsl:value-of select="result_summary/@plan_name" />
-                                                               </td>
-                                                       </tr>
-                                                       <tr>
-                                                               <td>Test Profile</td>
-                                                               <td>
-                                                                       <xsl:value-of select="result_summary/environment/@tct_profile" />
-                                                               </td>
-                                                       </tr>
-                                                       <tr>
-                                                               <td>Build ID</td>
-                                                               <td>
-                                                                       <xsl:choose>
-                                                                               <xsl:when test="result_summary/environment/@build_id">
-                                                                                       <xsl:if test="result_summary/environment/@build_id = ''">
-                                                                                               N/A
-                                                                                       </xsl:if>
-                                                                                       <xsl:value-of select="result_summary/environment/@build_id" />
-                                                                               </xsl:when>
-                                                                               <xsl:otherwise>
-                                                                                       N/A
-                                                                               </xsl:otherwise>
-                                                                       </xsl:choose>
-                                                               </td>
-                                                       </tr>
-                                                       <tr>
-                                                               <td>Test Total</td>
-                                                               <td>
-                                                                       <xsl:value-of select="sum(result_summary//suite/total_case)" />
-                                                               </td>
-                                                       </tr>
-                                                       <tr>
-                                                               <td>Test Passed</td>
-                                                               <td>
-                                                                       <xsl:value-of select="sum(result_summary//suite/pass_case)" />
-                                                               </td>
-                                                       </tr>
-                                                       <tr>
-                                                               <td>Test Failed</td>
-                                                               <td>
-                                                                       <xsl:value-of select="sum(result_summary//suite/fail_case)" />
-                                                               </td>
-                                                       </tr>
-                                                       <tr>
-                                                               <td>Test Blocked</td>
-                                                               <td>
-                                                                       <xsl:value-of select="sum(result_summary//suite/block_case)" />
-                                                               </td>
-                                                       </tr>
-                                                       <tr>
-                                                               <td>Test Not Executed</td>
-                                                               <td>
-                                                                       <xsl:value-of select="sum(result_summary//suite/na_case)" />
-                                                               </td>
-                                                       </tr>
-                                                       <tr>
-                                                               <td>Time</td>
-                                                               <td>
-                                                                       <xsl:value-of select="result_summary/summary/start_at" />
-                                                                       ~
-                                                                       <xsl:value-of select="result_summary/summary/end_at" />
-                                                               </td>
-                                                       </tr>
-                                               </table>
-                                       </div>
-                                       </td>
-                                       <td>
-                                       <div id="device">
-                                               <table>
-                                                       <tr>
-                                                               <th colspan="2">Device Information</th>
-                                                       </tr>
-                                                       <tr>
-                                                               <td>Host Device</td>
-                                                               <td>
-                                                                       <xsl:choose>
-                                                                               <xsl:when test="result_summary/environment/@host">
-                                                                                       <xsl:if test="result_summary/environment/@host = ''">
-                                                                                               N/A
-                                                                                       </xsl:if>
-                                                                                       <xsl:value-of select="result_summary/environment/@host" />
-                                                                               </xsl:when>
-                                                                               <xsl:otherwise>
-                                                                                       N/A
-                                                                               </xsl:otherwise>
-                                                                       </xsl:choose>
-                                                               </td>
-                                                       </tr>
-                                                       <tr>
-                                                               <td>Manufacturer</td>
-                                                               <td>
-                                                                       <xsl:choose>
-                                                                               <xsl:when test="result_summary/environment/@manufacturer">
-                                                                                       <xsl:if test="result_summary/environment/@manufacturer = ''">
-                                                                                               N/A
-                                                                                       </xsl:if>
-                                                                                       <xsl:value-of select="result_summary/environment/@manufacturer" />
-                                                                               </xsl:when>
-                                                                               <xsl:otherwise>
-                                                                                       N/A
-                                                                               </xsl:otherwise>
-                                                                       </xsl:choose>
-                                                               </td>
-                                                       </tr>
-                                                       <tr>
-                                                               <td>Device Model</td>
-                                                               <td>
-                                                                       <xsl:choose>
-                                                                               <xsl:when test="result_summary/environment/@device_model">
-                                                                                       <xsl:if test="result_summary/environment/@device_model = ''">
-                                                                                               N/A
-                                                                                       </xsl:if>
-                                                                                       <xsl:value-of select="result_summary/environment/@device_model" />
-                                                                               </xsl:when>
-                                                                               <xsl:otherwise>
-                                                                                       N/A
-                                                                               </xsl:otherwise>
-                                                                       </xsl:choose>
-                                                               </td>
-                                                       </tr>
-                                                       <tr>
-                                                               <td>Device ID</td>
-                                                               <td>
-                                                                       <xsl:choose>
-                                                                               <xsl:when test="result_summary/environment/@device_id">
-                                                                                       <xsl:if test="result_summary/environment/@device_id = ''">
-                                                                                               N/A
-                                                                                       </xsl:if>
-                                                                                       <xsl:value-of select="result_summary/environment/@device_id" />
-                                                                               </xsl:when>
-                                                                               <xsl:otherwise>
-                                                                                       N/A
-                                                                               </xsl:otherwise>
-                                                                       </xsl:choose>
-                                                               </td>
-                                                       </tr>
-                                                       <tr>
-                                                               <td>Screen Size</td>
-                                                               <td>
-                                                                       <xsl:choose>
-                                                                               <xsl:when test="result_summary/environment/@screen_size">
-                                                                                       <xsl:if test="result_summary/environment/@screen_size = ''">
-                                                                                               N/A
-                                                                                       </xsl:if>
-                                                                                       <xsl:value-of select="result_summary/environment/@screen_size" />
-                                                                               </xsl:when>
-                                                                               <xsl:otherwise>
-                                                                                       N/A
-                                                                               </xsl:otherwise>
-                                                                       </xsl:choose>
-                                                               </td>
-                                                       </tr>
-                                                       <tr>
-                                                               <td>Resolution</td>
-                                                               <td>
-                                                                       <xsl:choose>
-                                                                               <xsl:when test="result_summary/environment/@resolution">
-                                                                                       <xsl:if test="result_summary/environment/@resolution = ''">
-                                                                                               N/A
-                                                                                       </xsl:if>
-                                                                                       <xsl:value-of select="result_summary/environment/@resolution" />
-                                                                               </xsl:when>
-                                                                               <xsl:otherwise>
-                                                                                       N/A
-                                                                               </xsl:otherwise>
-                                                                       </xsl:choose>
-                                                               </td>
-                                                       </tr>
-                                               </table>
-                                       </div>
-                                       </td>
-                                       </tr>
-                                       </table>
-                                       </div>
-                                       <div id="capability">
-                                               <div id="title">
-                                                       <a name="contents"></a>
-                                                       <table>
-                                                               <tr>
-                                                                       <td class="title">
-                                                                               <h1><a href="#" class="see_capabilities">Device Capability</a></h1>
-                                                                       </td>
-                                                               </tr>
-                                                       </table>
-                                               </div>
-                                               <xsl:choose>
-                                                       <xsl:when test="result_summary/capabilities">
-                                                               <div id="capability_table" style="display:none;">
-                                                               <table>
-                                                                       <tr>
-                                                                               <th>Capability Name</th>
-                                                                               <th>Type</th>
-                                                                               <th>Value</th>
-                                                                       </tr>
-                                                                       <xsl:for-each select="result_summary/capabilities/capability">
-                                                                               <xsl:sort select="@name" />
-                                                                               <tr>
-                                                                                       <td>
-                                                                                               <xsl:value-of select="@name" />
-                                                                                       </td>
-                                                                                       <td>
-                                                                                               <xsl:value-of select="@type" />
-                                                                                       </td>
-                                                                                       <td>
-                                                                                               <xsl:choose>
-                                                                                                       <xsl:when test="value">
-                                                                                                               <xsl:value-of select="value" />
-                                                                                                       </xsl:when>
-                                                                                                       <xsl:otherwise>
-                                                                                                               <xsl:value-of select="@support" />
-                                                                                                       </xsl:otherwise>
-                                                                                               </xsl:choose>
-                                                                                       </td>
-                                                                               </tr>
-                                                                       </xsl:for-each>
-                                                               </table>
-                                                               </div>
-                                                       </xsl:when>
-                                                       <xsl:otherwise>
-                                                               The information of device capability is not available.
-                                                       </xsl:otherwise>
-                                               </xsl:choose>
-                                       </div>
-                                       <div id="btc">
-                                               <table>
-                                                       <tr>
-                                                               <td>
-                                                                       <a href="#" class="see_all">Show all</a>
-                                                               </td>
-                                                               <td>
-                                                                       <a href="#" class="see_failed">Show only failed</a>
-                                                               </td>
-                                                               <td>
-                                                                       <a href="#" class="see_blocked">Show only blocked</a>
-                                                               </td>
-                                                               <td>
-                                                                       <a href="#" class="see_na">Show only not executed</a>
-                                                               </td>
-                                                       </tr>
-                                               </table>
-                                       </div>
-                                       <div id="title">
-                                               <h1></h1>
-                                       </div>
-                                       <div id="suite_summary">
-                                               <div id="title">
-                                                       <a name="contents"></a>
-                                                       <table>
-                                                               <tr>
-                                                                       <td class="title">
-                                                                               <h1>Test Summary by Suite</h1>
-                                                                       </td>
-                                                               </tr>
-                                                       </table>
-                                               </div>
-                                               <div id="see_all">
-                                                       <table>
-                                                               <tr>
-                                                                       <th>Suite</th>
-                                                                       <th>Total</th>
-                                                                       <th>Passed</th>
-                                                                       <th>Failed</th>
-                                                                       <th>Blocked</th>
-                                                                       <th>Not Executed</th>
-                                                                       <th class="Ratio">Ratio</th>
-                                                               </tr>
-                                                               <xsl:for-each select="result_summary/suite">
-                                                                       <xsl:if test="total_case &gt; 0">
-                                                                               <tr class="suite_item">
-                                                                                       <xsl:attribute name="id">
-                                                               <xsl:value-of
-                                                                                               select="@name" />
-                                                   </xsl:attribute>
-                                                                                       <td>
-                                                                                               <a>
-                                                                                                       <xsl:attribute name="href"><xsl:value-of
-                                                                                                               select="@name" />.xml</xsl:attribute>
-                                                                                                       <xsl:value-of select="@name" />
-                                                                                               </a>
-                                                                                       </td>
-                                                                                       <td class="total">
-                                                                                               <xsl:value-of select="total_case" />
-                                                                                       </td>
-                                                                                       <td class="pass">
-                                                                                               <xsl:value-of select="pass_case" />
-                                                                                       </td>
-                                                                                       <td class="fail">
-                                                                                               <xsl:value-of select="fail_case" />
-                                                                                       </td>
-                                                                                       <td class="block">
-                                                                                               <xsl:value-of select="block_case" />
-                                                                                       </td>
-                                                                                       <td class="na">
-                                                                                               <xsl:value-of select="na_case" />
-                                                                                       </td>
-                                                                                       <td class="Ratio">
-                                                                                               <div class="RatioGraphic" />
-                                                                                       </td>
-                                                                               </tr>
-                                                                       </xsl:if>
-                                                               </xsl:for-each>
-                                                       </table>
-                                               </div>
-                                               <div id="see_fail" style="display:none;">
-                                                       <table>
-                                                               <tr>
-                                                                       <th>Suite</th>
-                                                                       <th>Total</th>
-                                                                       <th>Passed</th>
-                                                                       <th>Failed</th>
-                                                                       <th>Blocked</th>
-                                                                       <th>Not Executed</th>
-                                                                       <th class="Ratio">Ratio</th>
-                                                               </tr>
-                                                               <xsl:for-each select="result_summary/suite">
-                                                                       <xsl:if test="fail_case &gt; 0">
-                                                                               <tr class="suite_item">
-                                                                                       <xsl:attribute name="id">
-                                                               <xsl:value-of
-                                                                                               select="@name" />
-                                                   </xsl:attribute>
-                                                                                       <td>
-                                                                                               <a>
-                                                                                                       <xsl:attribute name="href"><xsl:value-of
-                                                                                                               select="@name" />.xml</xsl:attribute>
-                                                                                                       <xsl:value-of select="@name" />
-                                                                                               </a>
-                                                                                       </td>
-                                                                                       <td class="total">
-                                                                                               <xsl:value-of select="total_case" />
-                                                                                       </td>
-                                                                                       <td class="pass">
-                                                                                               <xsl:value-of select="pass_case" />
-                                                                                       </td>
-                                                                                       <td class="fail">
-                                                                                               <xsl:value-of select="fail_case" />
-                                                                                       </td>
-                                                                                       <td class="block">
-                                                                                               <xsl:value-of select="block_case" />
-                                                                                       </td>
-                                                                                       <td class="na">
-                                                                                               <xsl:value-of select="na_case" />
-                                                                                       </td>
-                                                                                       <td class="Ratio">
-                                                                                               <div class="RatioGraphic" />
-                                                                                       </td>
-                                                                               </tr>
-                                                                       </xsl:if>
-                                                               </xsl:for-each>
-                                                       </table>
-                                               </div>
-                                               <div id="see_block" style="display:none;">
-                                                       <table>
-                                                               <tr>
-                                                                       <th>Suite</th>
-                                                                       <th>Total</th>
-                                                                       <th>Passed</th>
-                                                                       <th>Failed</th>
-                                                                       <th>Blocked</th>
-                                                                       <th>Not Executed</th>
-                                                                       <th class="Ratio">Ratio</th>
-                                                               </tr>
-                                                               <xsl:for-each select="result_summary/suite">
-                                                                       <xsl:if test="block_case &gt; 0">
-                                                                               <tr class="suite_item">
-                                                                                       <xsl:attribute name="id">
-                                                               <xsl:value-of
-                                                                                               select="@name" />
-                                                   </xsl:attribute>
-                                                                                       <td>
-                                                                                               <a>
-                                                                                                       <xsl:attribute name="href"><xsl:value-of
-                                                                                                               select="@name" />.xml</xsl:attribute>
-                                                                                                       <xsl:value-of select="@name" />
-                                                                                               </a>
-                                                                                       </td>
-                                                                                       <td class="total">
-                                                                                               <xsl:value-of select="total_case" />
-                                                                                       </td>
-                                                                                       <td class="pass">
-                                                                                               <xsl:value-of select="pass_case" />
-                                                                                       </td>
-                                                                                       <td class="fail">
-                                                                                               <xsl:value-of select="fail_case" />
-                                                                                       </td>
-                                                                                       <td class="block">
-                                                                                               <xsl:value-of select="block_case" />
-                                                                                       </td>
-                                                                                       <td class="na">
-                                                                                               <xsl:value-of select="na_case" />
-                                                                                       </td>
-                                                                                       <td class="Ratio">
-                                                                                               <div class="RatioGraphic" />
-                                                                                       </td>
-                                                                               </tr>
-                                                                       </xsl:if>
-                                                               </xsl:for-each>
-                                                       </table>
-                                               </div>
-                                               <div id="see_na" style="display:none;">
-                                                       <table>
-                                                               <tr>
-                                                                       <th>Suite</th>
-                                                                       <th>Total</th>
-                                                                       <th>Passed</th>
-                                                                       <th>Failed</th>
-                                                                       <th>Blocked</th>
-                                                                       <th>Not Executed</th>
-                                                                       <th class="Ratio">Ratio</th>
-                                                               </tr>
-                                                               <xsl:for-each select="result_summary/suite">
-                                                                       <xsl:if test="na_case &gt; 0">
-                                                                               <tr class="suite_item">
-                                                                                       <xsl:attribute name="id">
-                                                               <xsl:value-of
-                                                                                               select="@name" />
-                                                   </xsl:attribute>
-                                                                                       <td>
-                                                                                               <a>
-                                                                                                       <xsl:attribute name="href"><xsl:value-of
-                                                                                                               select="@name" />.xml</xsl:attribute>
-                                                                                                       <xsl:value-of select="@name" />
-                                                                                               </a>
-                                                                                       </td>
-                                                                                       <td class="total">
-                                                                                               <xsl:value-of select="total_case" />
-                                                                                       </td>
-                                                                                       <td class="pass">
-                                                                                               <xsl:value-of select="pass_case" />
-                                                                                       </td>
-                                                                                       <td class="fail">
-                                                                                               <xsl:value-of select="fail_case" />
-                                                                                       </td>
-                                                                                       <td class="block">
-                                                                                               <xsl:value-of select="block_case" />
-                                                                                       </td>
-                                                                                       <td class="na">
-                                                                                               <xsl:value-of select="na_case" />
-                                                                                       </td>
-                                                                                       <td class="Ratio">
-                                                                                               <div class="RatioGraphic" />
-                                                                                       </td>
-                                                                               </tr>
-                                                                       </xsl:if>
-                                                               </xsl:for-each>
-                                                       </table>
-                                               </div>
-                                       </div>
-                               </div>
-                               <div id="goTopBtn">
-                                       <img border="0" src="./style/back_top.png" />
-                               </div>
-                               <script type="text/javascript" src="./style/application.js" />
-                               <script language="javascript" type="text/javascript">
-                                       $(document).ready(function(){
-                                       goTopEx();
-                                       drawRatio();
-                                       });
-                               </script>
-                       </body>
-               </html>
-       </xsl:template>
-       <xsl:template name="br-replace">
-               <xsl:param name="word" />
-               <xsl:variable name="cr">
-                       <xsl:text>\n</xsl:text>
-               </xsl:variable>
-               <xsl:choose>
-                       <xsl:when test="contains($word,$cr)">
-                               <xsl:value-of select="substring-before($word,$cr)" />
-                               <br />
-                               <xsl:call-template name="br-replace">
-                                       <xsl:with-param name="word" select="substring-after($word,$cr)" />
-                               </xsl:call-template>
-                       </xsl:when>
-                       <xsl:otherwise>
-                               <xsl:value-of select="$word" />
-                       </xsl:otherwise>
-               </xsl:choose>
-       </xsl:template>
-</xsl:stylesheet>
diff --git a/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/manager/style/testresult.xsl b/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/manager/style/testresult.xsl
deleted file mode 100755 (executable)
index 244c187..0000000
+++ /dev/null
@@ -1,559 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<xsl:stylesheet version="1.0"
-       xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
-       <xsl:output method="html" version="1.0" encoding="UTF-8"
-               indent="yes" />
-       <xsl:template match="/">
-               <html>
-                       <STYLE type="text/css">
-                               @import "./style/tests.css";
-                       </STYLE>
-                       <head>
-                               <script type="text/javascript" src="./style/jquery.min.js" />
-                               <script type="text/javascript" src="./style/popup.js" />
-                       </head>
-                       <body>
-                               <div id="title">
-                                       <table>
-                                               <tr>
-                                                       <td class="title">
-                                                               <h1 align="center">Suite Test Results</h1>
-                                                       </td>
-                                               </tr>
-                                       </table>
-                               </div>
-                               <div id="btc">
-                                       <table>
-                                               <tr>
-                                                       <td>
-                                                               <a href="#" class="see_all">Show all</a>
-                                                       </td>
-                                                       <td>
-                                                               <a href="#" class="see_failed">Show only failed</a>
-                                                       </td>
-                                                       <td>
-                                                               <a href="#" class="see_blocked">Show only blocked</a>
-                                                       </td>
-                                                       <td>
-                                                               <a href="#" class="see_na">Show only not executed</a>
-                                                       </td>
-                                                       <td>
-                                                               <a href="summary.xml">Summary</a>
-                                                       </td>
-                                               </tr>
-                                       </table>
-                               </div>
-                               <div id="testcasepage">
-                                       <div id="cases">
-                                               <div id="see_all">
-                                                       <xsl:for-each select="test_definition/suite">
-                                                               <div id="suite_title">
-                                                                       <h2>
-                                                                               Test Suite:
-                                                                               <xsl:value-of select="@name" />
-                                                                               (All)
-                                                                       </h2>
-                                                                       <a>
-                                                                               <xsl:attribute name="name">
-                                                                     <xsl:value-of
-                                                                                       select="@name" />
-                                                                  </xsl:attribute>
-                                                                       </a>
-                                                               </div>
-                                                               <table>
-                                                                       <tr>
-                                                                               <th>Case_ID</th>
-                                                                               <th>Purpose</th>
-                                                                               <th>Result</th>
-                                                                               <th>Stdout</th>
-                                                                       </tr>
-                                                                       <xsl:for-each select=".//set">
-                                                                               <tr>
-                                                                                       <xsl:choose>
-                                                                                               <xsl:when test="@name">
-                                                                                                       <td colspan="3">
-                                                                                                               <h3>
-                                                                                                                       Test Set:
-                                                                                                                       <xsl:value-of select="@name" />
-                                                                                                               </h3>
-                                                                                                       </td>
-                                                                                                       <td colspan="1">
-                                                                                                               <h4>
-                                                                                                                       <a>
-                                                                                                                               <xsl:attribute name="href"><xsl:value-of
-                                                                                                                                       select="@set_debug_msg" /></xsl:attribute>
-                                                                                                                               dlog
-                                                                                                                       </a>
-                                                                                                               </h4>
-                                                                                                       </td>
-                                                                                               </xsl:when>
-                                                                                               <xsl:otherwise>
-                                                                                                       <td colspan="4">
-                                                                                                               <h3>
-                                                                                                                       Test Set:
-                                                                                                                       <xsl:value-of select="@name" />
-                                                                                                               </h3>
-                                                                                                       </td>
-                                                                                               </xsl:otherwise>
-                                                                                       </xsl:choose>
-                                                                               </tr>
-                                                                               <xsl:for-each select=".//testcase">
-                                                                                       <tr>
-                                                                                               <td>
-                                                                                                       <div
-                                                                                                               style="background-color:#F5DEB3;border:1px solid black;display:none;">
-                                                                                                               <xsl:attribute name="id"><xsl:value-of
-                                                                                                                       select="@id" /></xsl:attribute>
-                                                                                                               <p>
-                                                                                                                       <xsl:for-each select="./description/steps//step">
-                                                                                                                               <xsl:sort select="@order" />
-                                                                                                                               <B>
-                                                                                                                                       Step
-                                                                                                                                       <xsl:value-of select="@order" />
-                                                                                                                                       :
-                                                                                                                               </B>
-                                                                                                                               <br />
-                                                                                                                               <xsl:value-of select=".//step_desc" />
-                                                                                                                               <br />
-                                                                                                                               <B>Expected:</B>
-                                                                                                                               <xsl:value-of select=".//expected" />
-                                                                                                                               <br />
-                                                                                                                       </xsl:for-each>
-                                                                                                               </p>
-                                                                                                               <p>
-                                                                                                                       <br />
-                                                                                                                       <B>
-                                                                                                                               Entry:
-                                                                                                                               <br />
-                                                                                                                       </B>
-                                                                                                                       <xsl:value-of select="./description//test_script_entry" />
-                                                                                                                       <br />
-                                                                                                               </p>
-                                                                                                       </div>
-                                                                                                       <a href="#" class="test_case_popup">
-                                                                                                               <xsl:attribute name="id"><xsl:value-of
-                                                                                                                       select="@id" /></xsl:attribute>
-                                                                                                               <xsl:value-of select="@id" />
-                                                                                                       </a>
-                                                                                               </td>
-                                                                                               <td>
-                                                                                                       <xsl:value-of select="@purpose" />
-                                                                                               </td>
-
-                                                                                               <xsl:choose>
-                                                                                                       <xsl:when test="@result">
-                                                                                                               <xsl:if test="@result = 'FAIL'">
-                                                                                                                       <td class="red_rate">
-                                                                                                                               <xsl:value-of select="@result" />
-                                                                                                                       </td>
-                                                                                                               </xsl:if>
-                                                                                                               <xsl:if test="@result = 'PASS'">
-                                                                                                                       <td class="green_rate">
-                                                                                                                               <xsl:value-of select="@result" />
-                                                                                                                       </td>
-                                                                                                               </xsl:if>
-                                                                                                               <xsl:if test="@result = 'BLOCK' ">
-                                                                                                                       <td class="orange_rate">
-                                                                                                                               BLOCK
-                                                                                                                       </td>
-                                                                                                               </xsl:if>
-                                                                                                               <xsl:if
-                                                                                                                       test="@result != 'BLOCK' and @result != 'FAIL' and @result != 'PASS' ">
-                                                                                                                       <td class="gray_rate">
-                                                                                                                               Not Run
-                                                                                                                       </td>
-                                                                                                               </xsl:if>
-                                                                                                       </xsl:when>
-                                                                                                       <xsl:otherwise>
-                                                                                                               <td>
-
-                                                                                                               </td>
-                                                                                                       </xsl:otherwise>
-                                                                                               </xsl:choose>
-                                                                                               <td>
-                                                                                                       <xsl:call-template name="br-replace">
-                                                                                                               <xsl:with-param name="word"
-                                                                                                                       select=".//result_info/stdout" />
-                                                                                                       </xsl:call-template>
-                                                                                                       <xsl:if test=".//result_info/stdout = ''">
-                                                                                                               N/A
-                                                                                                       </xsl:if>
-                                                                                               </td>
-                                                                                       </tr>
-                                                                               </xsl:for-each>
-                                                                       </xsl:for-each>
-                                                               </table>
-                                                       </xsl:for-each>
-                                               </div>
-                                               <div id="see_fail" style="display:none;">
-                                                       <xsl:for-each select="test_definition/suite">
-                                                               <div id="suite_title">
-                                                                       <h2>
-                                                                               Test Suite:
-                                                                               <xsl:value-of select="@name" />
-                                                                               (Failed only)
-                                                                       </h2>
-                                                                       <a>
-                                                                               <xsl:attribute name="name">
-                                                                     <xsl:value-of
-                                                                                       select="@name" />
-                                                                  </xsl:attribute>
-                                                                       </a>
-                                                               </div>
-                                                               <table>
-                                                                       <tr>
-                                                                               <th>Case_ID</th>
-                                                                               <th>Purpose</th>
-                                                                               <th>Result</th>
-                                                                               <th>Stdout</th>
-                                                                       </tr>
-                                                                       <xsl:for-each select=".//set">
-                                                                               <tr>
-                                                                                       <xsl:choose>
-                                                                                               <xsl:when test="@name">
-                                                                                                       <td colspan="3">
-                                                                                                               <h3>
-                                                                                                                       Test Set:
-                                                                                                                       <xsl:value-of select="@name" />
-                                                                                                               </h3>
-                                                                                                       </td>
-                                                                                                       <td colspan="1">
-                                                                                                               <h4>
-                                                                                                                       <a>
-                                                                                                                               <xsl:attribute name="href"><xsl:value-of
-                                                                                                                                       select="@set_debug_msg" /></xsl:attribute>
-                                                                                                                               dlog
-                                                                                                                       </a>
-                                                                                                               </h4>
-                                                                                                       </td>
-                                                                                               </xsl:when>
-                                                                                               <xsl:otherwise>
-                                                                                                       <td colspan="4">
-                                                                                                               <h3>
-                                                                                                                       Test Set:
-                                                                                                                       <xsl:value-of select="@name" />
-                                                                                                               </h3>
-                                                                                                       </td>
-                                                                                               </xsl:otherwise>
-                                                                                       </xsl:choose>
-                                                                               </tr>
-                                                                               <xsl:for-each select=".//testcase[@result='FAIL']">
-                                                                                       <tr>
-                                                                                               <td>
-                                                                                                       <div
-                                                                                                               style="background-color:#F5DEB3;border:1px solid black;display:none;">
-                                                                                                               <xsl:attribute name="id">fail_<xsl:value-of
-                                                                                                                       select="@id" /></xsl:attribute>
-                                                                                                               <p>
-                                                                                                                       <xsl:for-each select="./description/steps//step">
-                                                                                                                               <xsl:sort select="@order" />
-                                                                                                                               <B>
-                                                                                                                                       Step
-                                                                                                                                       <xsl:value-of select="@order" />
-                                                                                                                                       :
-                                                                                                                               </B>
-                                                                                                                               <br />
-                                                                                                                               <xsl:value-of select=".//step_desc" />
-                                                                                                                               <br />
-                                                                                                                               <B>Expected:</B>
-                                                                                                                               <xsl:value-of select=".//expected" />
-                                                                                                                               <br />
-                                                                                                                       </xsl:for-each>
-                                                                                                               </p>
-                                                                                                               <p>
-                                                                                                                       <br />
-                                                                                                                       <B>
-                                                                                                                               Entry:
-                                                                                                                               <br />
-                                                                                                                       </B>
-                                                                                                                       <xsl:value-of select="./description//test_script_entry" />
-                                                                                                                       <br />
-                                                                                                               </p>
-                                                                                                       </div>
-                                                                                                       <a href="#" class="test_case_popup">
-                                                                                                               <xsl:attribute name="id">fail_<xsl:value-of
-                                                                                                                       select="@id" /></xsl:attribute>
-                                                                                                               <xsl:value-of select="@id" />
-                                                                                                       </a>
-                                                                                               </td>
-                                                                                               <td>
-                                                                                                       <xsl:value-of select="@purpose" />
-                                                                                               </td>
-
-                                                                                               <td class="red_rate">
-                                                                                                       <xsl:value-of select="@result" />
-                                                                                               </td>
-                                                                                               <td>
-                                                                                                       <xsl:call-template name="br-replace">
-                                                                                                               <xsl:with-param name="word"
-                                                                                                                       select=".//result_info/stdout" />
-                                                                                                       </xsl:call-template>
-                                                                                                       <xsl:if test=".//result_info/stdout = ''">
-                                                                                                               N/A
-                                                                                                       </xsl:if>
-                                                                                               </td>
-                                                                                       </tr>
-                                                                               </xsl:for-each>
-                                                                       </xsl:for-each>
-                                                               </table>
-                                                       </xsl:for-each>
-                                               </div>
-                                               <div id="see_block" style="display:none;">
-                                                       <xsl:for-each select="test_definition/suite">
-                                                               <div id="suite_title">
-                                                                       <h2>
-                                                                               Test Suite:
-                                                                               <xsl:value-of select="@name" />
-                                                                               (Blocked Only)
-                                                                       </h2>
-                                                                       <a>
-                                                                               <xsl:attribute name="name">
-                                                                     <xsl:value-of
-                                                                                       select="@name" />
-                                                                  </xsl:attribute>
-                                                                       </a>
-                                                               </div>
-                                                               <table>
-                                                                       <tr>
-                                                                               <th>Case_ID</th>
-                                                                               <th>Purpose</th>
-                                                                               <th>Result</th>
-                                                                               <th>Stdout</th>
-                                                                       </tr>
-                                                                       <xsl:for-each select=".//set">
-                                                                               <tr>
-                                                                                       <xsl:choose>
-                                                                                               <xsl:when test="@name">
-                                                                                                       <td colspan="3">
-                                                                                                               <h3>
-                                                                                                                       Test Set:
-                                                                                                                       <xsl:value-of select="@name" />
-                                                                                                               </h3>
-                                                                                                       </td>
-                                                                                                       <td colspan="1">
-                                                                                                               <h4>
-                                                                                                                       <a>
-                                                                                                                               <xsl:attribute name="href"><xsl:value-of
-                                                                                                                                       select="@set_debug_msg" /></xsl:attribute>
-                                                                                                                               dlog
-                                                                                                                       </a>
-                                                                                                               </h4>
-                                                                                                       </td>
-                                                                                               </xsl:when>
-                                                                                               <xsl:otherwise>
-                                                                                                       <td colspan="4">
-                                                                                                               <h3>
-                                                                                                                       Test Set:
-                                                                                                                       <xsl:value-of select="@name" />
-                                                                                                               </h3>
-                                                                                                       </td>
-                                                                                               </xsl:otherwise>
-                                                                                       </xsl:choose>
-                                                                               </tr>
-                                                                               <xsl:for-each select=".//testcase[@result='BLOCK']">
-                                                                                       <tr>
-                                                                                               <td>
-                                                                                                       <div
-                                                                                                               style="background-color:#F5DEB3;border:1px solid black;display:none;">
-                                                                                                               <xsl:attribute name="id">block_<xsl:value-of
-                                                                                                                       select="@id" /></xsl:attribute>
-                                                                                                               <p>
-                                                                                                                       <xsl:for-each select="./description/steps//step">
-                                                                                                                               <xsl:sort select="@order" />
-                                                                                                                               <B>
-                                                                                                                                       Step
-                                                                                                                                       <xsl:value-of select="@order" />
-                                                                                                                                       :
-                                                                                                                               </B>
-                                                                                                                               <br />
-                                                                                                                               <xsl:value-of select=".//step_desc" />
-                                                                                                                               <br />
-                                                                                                                               <B>Expected:</B>
-                                                                                                                               <xsl:value-of select=".//expected" />
-                                                                                                                               <br />
-                                                                                                                       </xsl:for-each>
-                                                                                                               </p>
-                                                                                                               <p>
-                                                                                                                       <br />
-                                                                                                                       <B>
-                                                                                                                               Entry:
-                                                                                                                               <br />
-                                                                                                                       </B>
-                                                                                                                       <xsl:value-of select="./description//test_script_entry" />
-                                                                                                                       <br />
-                                                                                                               </p>
-                                                                                                       </div>
-                                                                                                       <a href="#" class="test_case_popup">
-                                                                                                               <xsl:attribute name="id">block_<xsl:value-of
-                                                                                                                       select="@id" /></xsl:attribute>
-                                                                                                               <xsl:value-of select="@id" />
-                                                                                                       </a>
-                                                                                               </td>
-                                                                                               <td>
-                                                                                                       <xsl:value-of select="@purpose" />
-                                                                                               </td>
-
-                                                                                               <td class="orange_rate">
-                                                                                                       <xsl:value-of select="@result" />
-                                                                                               </td>
-                                                                                               <td>
-                                                                                                       <xsl:call-template name="br-replace">
-                                                                                                               <xsl:with-param name="word"
-                                                                                                                       select=".//result_info/stdout" />
-                                                                                                       </xsl:call-template>
-                                                                                                       <xsl:if test=".//result_info/stdout = ''">
-                                                                                                               N/A
-                                                                                                       </xsl:if>
-                                                                                               </td>
-                                                                                       </tr>
-                                                                               </xsl:for-each>
-                                                                       </xsl:for-each>
-                                                               </table>
-                                                       </xsl:for-each>
-                                               </div>
-                                               <div id="see_na" style="display:none;">
-                                                       <xsl:for-each select="test_definition/suite">
-                                                               <div id="suite_title">
-                                                                       <h2>
-                                                                               Test Suite:
-                                                                               <xsl:value-of select="@name" />
-                                                                               (Not executed Only)
-                                                                       </h2>
-                                                                       <a>
-                                                                               <xsl:attribute name="name">
-                                                                     <xsl:value-of
-                                                                                       select="@name" />
-                                                                  </xsl:attribute>
-                                                                       </a>
-                                                               </div>
-                                                               <table>
-                                                                       <tr>
-                                                                               <th>Case_ID</th>
-                                                                               <th>Purpose</th>
-                                                                               <th>Result</th>
-                                                                               <th>Stdout</th>
-                                                                       </tr>
-                                                                       <xsl:for-each select=".//set">
-                                                                               <tr>
-                                                                                       <xsl:choose>
-                                                                                               <xsl:when test="@name">
-                                                                                                       <td colspan="3">
-                                                                                                               <h3>
-                                                                                                                       Test Set:
-                                                                                                                       <xsl:value-of select="@name" />
-                                                                                                               </h3>
-                                                                                                       </td>
-                                                                                                       <td colspan="1">
-                                                                                                               <h4>
-                                                                                                                       <a>
-                                                                                                                               <xsl:attribute name="href"><xsl:value-of
-                                                                                                                                       select="@set_debug_msg" /></xsl:attribute>
-                                                                                                                               dlog
-                                                                                                                       </a>
-                                                                                                               </h4>
-                                                                                                       </td>
-                                                                                               </xsl:when>
-                                                                                               <xsl:otherwise>
-                                                                                                       <td colspan="4">
-                                                                                                               <h3>
-                                                                                                                       Test Set:
-                                                                                                                       <xsl:value-of select="@name" />
-                                                                                                               </h3>
-                                                                                                       </td>
-                                                                                               </xsl:otherwise>
-                                                                                       </xsl:choose>
-                                                                               </tr>
-                                                                               <xsl:for-each select=".//testcase[@result='N/A']">
-                                                                                       <tr>
-                                                                                               <td>
-                                                                                                       <div
-                                                                                                               style="background-color:#F5DEB3;border:1px solid black;display:none;">
-                                                                                                               <xsl:attribute name="id">na_<xsl:value-of
-                                                                                                                       select="@id" /></xsl:attribute>
-                                                                                                               <p>
-                                                                                                                       <xsl:for-each select="./description/steps//step">
-                                                                                                                               <xsl:sort select="@order" />
-                                                                                                                               <B>
-                                                                                                                                       Step
-                                                                                                                                       <xsl:value-of select="@order" />
-                                                                                                                                       :
-                                                                                                                               </B>
-                                                                                                                               <br />
-                                                                                                                               <xsl:value-of select=".//step_desc" />
-                                                                                                                               <br />
-                                                                                                                               <B>Expected:</B>
-                                                                                                                               <xsl:value-of select=".//expected" />
-                                                                                                                               <br />
-                                                                                                                       </xsl:for-each>
-                                                                                                               </p>
-                                                                                                               <p>
-                                                                                                                       <br />
-                                                                                                                       <B>
-                                                                                                                               Entry:
-                                                                                                                               <br />
-                                                                                                                       </B>
-                                                                                                                       <xsl:value-of select="./description//test_script_entry" />
-                                                                                                                       <br />
-                                                                                                               </p>
-                                                                                                       </div>
-                                                                                                       <a href="#" class="test_case_popup">
-                                                                                                               <xsl:attribute name="id">na_<xsl:value-of
-                                                                                                                       select="@id" /></xsl:attribute>
-                                                                                                               <xsl:value-of select="@id" />
-                                                                                                       </a>
-                                                                                               </td>
-                                                                                               <td>
-                                                                                                       <xsl:value-of select="@purpose" />
-                                                                                               </td>
-
-                                                                                               <td class="gray_rate">
-                                                                                                       <xsl:value-of select="@result" />
-                                                                                               </td>
-                                                                                               <td>
-                                                                                                       <xsl:call-template name="br-replace">
-                                                                                                               <xsl:with-param name="word"
-                                                                                                                       select=".//result_info/stdout" />
-                                                                                                       </xsl:call-template>
-                                                                                                       <xsl:if test=".//result_info/stdout = ''">
-                                                                                                               N/A
-                                                                                                       </xsl:if>
-                                                                                               </td>
-                                                                                       </tr>
-                                                                               </xsl:for-each>
-                                                                       </xsl:for-each>
-                                                               </table>
-                                                       </xsl:for-each>
-                                               </div>
-                                       </div>
-                               </div>
-                               <div id="goTopBtn">
-                                       <img border="0" src="./style/back_top.png" />
-                               </div>
-                               <script type="text/javascript" src="./style/application.js" />
-                               <script language="javascript" type="text/javascript">
-                                       $(document).ready(function(){
-                                       goTopEx();
-                                       });
-                               </script>
-                       </body>
-               </html>
-       </xsl:template>
-       <xsl:template name="br-replace">
-               <xsl:param name="word" />
-               <xsl:variable name="cr">
-                       <xsl:text>\n</xsl:text>
-               </xsl:variable>
-               <xsl:choose>
-                       <xsl:when test="contains($word,$cr)">
-                               <xsl:value-of select="substring-before($word,$cr)" />
-                               <br />
-                               <xsl:call-template name="br-replace">
-                                       <xsl:with-param name="word" select="substring-after($word,$cr)" />
-                               </xsl:call-template>
-                       </xsl:when>
-                       <xsl:otherwise>
-                               <xsl:value-of select="$word" />
-                       </xsl:otherwise>
-               </xsl:choose>
-       </xsl:template>
-</xsl:stylesheet>
diff --git a/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/manager/style/tests.css b/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/manager/style/tests.css
deleted file mode 100755 (executable)
index 487bca0..0000000
+++ /dev/null
@@ -1,195 +0,0 @@
-@charset "UTF-8";\r
-/* CSS Document */\r
-#testcasepage div,#testcasepage h1,#testcasepage p,#testcasepage table,#testcasepage tr,#testcasepage th,#testcasepage td\r
-       {\r
-       margin: 0;\r
-       padding: 0;\r
-       border: 0;\r
-       font-weight: inherit;\r
-       font-style: inherit;\r
-       font-size: 0.96em;\r
-       font-family: arial;\r
-       vertical-align: baseline;\r
-}\r
-\r
-#title td, #btc td{\r
-       margin: 0;\r
-       padding: 0;\r
-       border: 0;\r
-       font-weight: inherit;\r
-       font-style: inherit;\r
-       font-size: 0.96em;\r
-       font-family: arial;\r
-       vertical-align: baseline;\r
-}\r
-\r
-td.Ratio {\r
-       text-align: left;\r
-       font-weight: normal;\r
-       padding: 4px 10px 4px 5px;\r
-       vertical-align: middle;\r
-}\r
-\r
-th.Ratio {\r
-       width: 400px;\r
-}\r
-\r
-#testcasepage p {\r
-       text-align: left;\r
-}\r
-\r
-#suite_title {\r
-       text-align: left;\r
-}\r
-\r
-#btc {\r
-       text-align: right;\r
-}\r
-\r
-#btc table {\r
-       position: absolute;\r
-       right: 0px;\r
-       width: 600px;\r
-}\r
-\r
-#testcasepage table {\r
-       border-collapse: separate;\r
-       border-spacing: 0;\r
-       margin-bottom: 1.4em;\r
-       vertical-align: middle;\r
-}\r
-\r
-#testcasepage th,#testcasepage td {\r
-       text-align: left;\r
-       font-weight: normal;\r
-       padding: 4px 10px 4px 5px;\r
-       vertical-align: middle;\r
-}\r
-\r
-#cases table {\r
-       width: 101%;\r
-}\r
-\r
-#cases td {\r
-       border-left: 0px;\r
-       font-weight: normal;\r
-       border-bottom: 0px;\r
-}\r
-\r
-#suite_summary table {\r
-       width: 100%;\r
-}\r
-\r
-\r
-#overview table {\r
-       width: 101%;\r
-}\r
-\r
-#overview table, #overview td, #overview tr {\r
-       border-left: none;\r
-       border-bottom: none;\r
-       border-right: none;\r
-       vertical-align: top;\r
-}\r
-\r
-#overview td{\r
-       width: 50%;\r
-}\r
-\r
-#capability table {\r
-       width: 50%;\r
-}\r
-\r
-#fail_cases table {\r
-       width: 101%;\r
-}\r
-\r
-#title table {\r
-       width: 101%;\r
-}\r
-\r
-#device table {\r
-       width: 100%;\r
-}\r
-\r
-#summary table {\r
-       width: 100%;\r
-}\r
-\r
-#testcasepage th {\r
-       border-bottom: 1px solid #000;\r
-       background-color: #AAAAAA;\r
-       border-left: 1px solid #000;\r
-       border-top: 1px solid #000;\r
-       color: #000;\r
-       font-weight: bold;\r
-       vertical-align: bottom;\r
-}\r
-\r
-#summary th:last-child,#summary td:last-child, #device th:last-child,#device td:last-child, #suite_summary th:last-child,#suite_summary td:last-child,#cases th:last-child,#cases td:last-child,#capability th:last-child,#capability td:last-child {\r
-       border-right: 1px solid #000;\r
-}\r
-\r
-#testcasepage td {\r
-       font-weight: normal;\r
-}\r
-\r
-#summary td, #device td, #capability td, #suite_summary td, #cases td{\r
-       border-left: 1px solid;\r
-       font-weight: normal;\r
-       border-bottom: 1px solid;\r
-}\r
-\r
-#testcasepage td.yellow_rate {\r
-       background-color: #ffcc00;\r
-}\r
-\r
-#testcasepage td.green_rate {\r
-       background-color: #1E90FF;\r
-}\r
-\r
-#testcasepage td.dgreen_rate {\r
-       background-color: #339933;\r
-}\r
-\r
-#testcasepage td.red_rate {\r
-       background-color: #FF3333;\r
-}\r
-\r
-#testcasepage td.orange_rate {\r
-       background-color: #FFA500;\r
-}\r
-\r
-#testcasepage td.gray_rate {\r
-       background-color: #AAAAAA;\r
-}\r
-\r
-#title table,#title tr,#title td {\r
-       border-left: none;\r
-       border-bottom: none;\r
-       text-align: center;\r
-}\r
-\r
-#title td:last-child {\r
-       border-right: none;\r
-}\r
-\r
-#testcasepage h1 {\r
-       font-size: 2em;\r
-       font-family: Arial, sans-serif;\r
-       font-weight: bold;\r
-       line-height: 1;\r
-       color: #000;\r
-       margin-bottom: 0.75em;\r
-       padding-top: 0.25em;\r
-       font-weight: bold;\r
-}\r
-\r
-#goTopBtn {\r
-       right: 0px;\r
-       bottom: 0px;\r
-       position: fixed; +\r
-       position: absolute;\r
-       top: expression(parseInt(document.body.scrollTop)+document.body.clientHeight-40\r
-               );\r
-}\r
diff --git a/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/manager/tmp/temp b/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/manager/tmp/temp
deleted file mode 100755 (executable)
index e69de29..0000000
diff --git a/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/plugin/native_templates/.cproject b/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/plugin/native_templates/.cproject
deleted file mode 100755 (executable)
index db22a91..0000000
+++ /dev/null
@@ -1,543 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<?fileVersion 4.0.0?><cproject storage_type_id="org.eclipse.cdt.core.XmlProjectDescriptionStorage">
-       <storageModule moduleId="org.eclipse.cdt.core.settings">
-               <cconfiguration id="org.tizen.nativecore.config.sbi.gcc45.app.debug.542757660">
-                       <storageModule buildSystemId="org.eclipse.cdt.managedbuilder.core.configurationDataProvider" id="org.tizen.nativecore.config.sbi.gcc45.app.debug.542757660" moduleId="org.eclipse.cdt.core.settings" name="Debug">
-                               <externalSettings/>
-                               <extensions>
-                                       <extension id="org.eclipse.cdt.core.ELF" point="org.eclipse.cdt.core.BinaryParser"/>
-                                       <extension id="org.eclipse.cdt.core.GmakeErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
-                                       <extension id="org.eclipse.cdt.core.CWDLocator" point="org.eclipse.cdt.core.ErrorParser"/>
-                                       <extension id="org.eclipse.cdt.core.MakeErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
-                                       <extension id="org.eclipse.cdt.core.GCCErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
-                                       <extension id="org.eclipse.cdt.core.GASErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
-                                       <extension id="org.eclipse.cdt.core.GLDErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
-                               </extensions>
-                       </storageModule>
-                       <storageModule moduleId="cdtBuildSystem" version="4.0.0">
-                               <configuration artifactName="{TESTSUITE_NAME}" buildArtefactType="org.tizen.nativecore.buildArtefactType.app" buildProperties="org.eclipse.cdt.build.core.buildType=org.eclipse.cdt.build.core.buildType.debug,org.eclipse.cdt.build.core.buildArtefactType=org.tizen.nativecore.buildArtefactType.app" description="" errorParsers="org.eclipse.cdt.core.MakeErrorParser;org.eclipse.cdt.core.GCCErrorParser;" id="org.tizen.nativecore.config.sbi.gcc45.app.debug.542757660" name="Debug" parent="org.tizen.nativecore.config.sbi.gcc45.app.debug">
-                                       <folderInfo id="org.tizen.nativecore.config.sbi.gcc45.app.debug.542757660." name="/" resourcePath="">
-                                               <toolChain id="org.tizen.nativecore.toolchain.sbi.gcc45.app.debug.1784086492" name="Tizen Native Toolchain" superClass="org.tizen.nativecore.toolchain.sbi.gcc45.app.debug">
-                                                       <targetPlatform binaryParser="org.eclipse.cdt.core.ELF" id="org.tizen.nativeide.target.sbi.gnu.platform.base.165304646" osList="linux,win32" superClass="org.tizen.nativeide.target.sbi.gnu.platform.base"/>
-                                                       <builder autoBuildTarget="all" buildPath="${workspace_loc:/{TESTSUITE_NAME}/Debug}" enableAutoBuild="true" id="org.tizen.nativecore.target.sbi.gnu.builder.910776161" keepEnvironmentInBuildfile="false" managedBuildOn="true" name="Tizen Application Builder" superClass="org.tizen.nativecore.target.sbi.gnu.builder"/>
-                                                       <tool id="org.tizen.nativecore.tool.sbi.gnu.archiver.707842937" name="Archiver" superClass="org.tizen.nativecore.tool.sbi.gnu.archiver"/>
-                                                       <tool command="clang++" id="org.tizen.nativecore.tool.sbi.gnu.cpp.compiler.1219153705" name="C++ Compiler" superClass="org.tizen.nativecore.tool.sbi.gnu.cpp.compiler">
-                                                               <option id="gnu.cpp.compiler.option.optimization.level.235211314" name="Optimization Level" superClass="gnu.cpp.compiler.option.optimization.level" value="gnu.cpp.compiler.optimization.level.none" valueType="enumerated"/>
-                                                               <option id="sbi.gnu.cpp.compiler.option.debugging.level.275888905" name="Debug level" superClass="sbi.gnu.cpp.compiler.option.debugging.level" value="gnu.cpp.compiler.debugging.level.max" valueType="enumerated"/>
-                                                               <option id="sbi.gnu.cpp.compiler.option.debug.applog.437831432" name="Enable application logging (-D_APP_LOG)" superClass="sbi.gnu.cpp.compiler.option.debug.applog" value="true" valueType="boolean"/>
-                                                               <option id="sbi.gnu.cpp.compiler.option.2067868547" superClass="sbi.gnu.cpp.compiler.option" valueType="userObjs">
-                                                                       <listOptionValue builtIn="false" value="mobile-2.4-emulator.core_llvm36.i386.core.app"/>
-                                                               </option>
-                                                               <option id="sbi.gnu.cpp.compiler.option.frameworks_inc.core.1395160493" superClass="sbi.gnu.cpp.compiler.option.frameworks_inc.core" valueType="includePath">
-                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/libxml2&quot;"/>
-                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include&quot;"/>
-                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/appcore-agent&quot;"/>
-                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/appfw&quot;"/>
-                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/attach-panel&quot;"/>
-                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/badge&quot;"/>
-                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/base&quot;"/>
-                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/cairo&quot;"/>
-                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/calendar-service2&quot;"/>
-                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/ckm&quot;"/>
-                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/contacts-svc&quot;"/>
-                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/content&quot;"/>
-                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/context-service&quot;"/>
-                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/dali&quot;"/>
-                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/dali-toolkit&quot;"/>
-                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/dbus-1.0&quot;"/>
-                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/device&quot;"/>
-                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/dlog&quot;"/>
-                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/ecore-1&quot;"/>
-                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/ecore-con-1&quot;"/>
-                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/ecore-evas-1&quot;"/>
-                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/ecore-file-1&quot;"/>
-                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/ecore-imf-1&quot;"/>
-                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/ecore-imf-evas-1&quot;"/>
-                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/ecore-input-1&quot;"/>
-                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/ecore-input-evas-1&quot;"/>
-                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/ecore-ipc-1&quot;"/>
-                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/ecore-x-1&quot;"/>
-                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/e_dbus-1&quot;"/>
-                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/edje-1&quot;"/>
-                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/eet-1&quot;"/>
-                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/efl-1&quot;"/>
-                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/efl-extension&quot;"/>
-                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/efreet-1&quot;"/>
-                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/eina-1&quot;"/>
-                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/eina-1/eina&quot;"/>
-                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/eio-1&quot;"/>
-                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/eldbus-1&quot;"/>
-                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/elementary-1&quot;"/>
-                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/embryo-1&quot;"/>
-                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/eo-1&quot;"/>
-                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/eom&quot;"/>
-                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/ethumb-1&quot;"/>
-                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/ethumb-client-1&quot;"/>
-                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/evas-1&quot;"/>
-                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/ewebkit2-0&quot;"/>
-                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/feedback&quot;"/>
-                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/fontconfig&quot;"/>
-                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/freetype2&quot;"/>
-                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/geofence&quot;"/>
-                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/gio-unix-2.0&quot;"/>
-                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/glib-2.0&quot;"/>
-                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/harfbuzz&quot;"/>
-                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/json-glib-1.0&quot;"/>
-                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/location&quot;"/>
-                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/maps&quot;"/>
-                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/media&quot;"/>
-                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/media-content&quot;"/>
-                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/messaging&quot;"/>
-                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/metadata-editor&quot;"/>
-                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/minicontrol&quot;"/>
-                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/minizip&quot;"/>
-                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/network&quot;"/>
-                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/notification&quot;"/>
-                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/phonenumber-utils&quot;"/>
-                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/sensor&quot;"/>
-                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/shortcut&quot;"/>
-                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/storage&quot;"/>
-                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/system&quot;"/>
-                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/telephony&quot;"/>
-                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/ui&quot;"/>
-                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/web&quot;"/>
-                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/widget_service&quot;"/>
-                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/widget_viewer_evas&quot;"/>
-                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/wifi-direct&quot;"/>
-                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/lib/dbus-1.0/include&quot;"/>
-                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/lib/glib-2.0/include&quot;"/>
-                                                               </option>
-                                                               <option id="sbi.gnu.cpp.compiler.option.frameworks_cflags.core.2042453024" superClass="sbi.gnu.cpp.compiler.option.frameworks_cflags.core" valueType="stringList">
-                                                                       <listOptionValue builtIn="false" value="${TC_COMPILER_MISC}"/>
-                                                                       <listOptionValue builtIn="false" value="${RS_COMPILER_MISC}"/>
-                                                                       <listOptionValue builtIn="false" value=" -fPIE"/>
-                                                                       <listOptionValue builtIn="false" value="--sysroot=&quot;${SBI_SYSROOT}&quot;"/>
-                                                               </option>
-                                                               <option id="gnu.cpp.compiler.option.include.paths.1491943414" superClass="gnu.cpp.compiler.option.include.paths" valueType="includePath">
-                                                                       <listOptionValue builtIn="false" value="&quot;${workspace_loc:/${ProjName}/inc}&quot;"/>
-                                                               </option>
-                                                               <option id="sbi.gnu.cpp.compiler.option.frameworks.core.399579441" superClass="sbi.gnu.cpp.compiler.option.frameworks.core" valueType="userObjs">
-                                                                       <listOptionValue builtIn="false" value="Native_API"/>
-                                                               </option>
-                                                               <option id="gnu.cpp.compiler.option.preprocessor.def.1290489636" superClass="gnu.cpp.compiler.option.preprocessor.def" valueType="definedSymbols">
-                                                                       <listOptionValue builtIn="false" value="_DEBUG"/>
-                                                               </option>
-                                                               <inputType id="sbi.gnu.cpp.compiler.tizen.inputType.1444030222"/>
-                                                               <inputType id="cdt.managedbuild.tool.gnu.cpp.compiler.input.828773414" superClass="cdt.managedbuild.tool.gnu.cpp.compiler.input"/>
-                                                       </tool>
-                                                       <tool command="clang" id="org.tizen.nativecore.tool.sbi.gnu.c.compiler.1332097163" name="C Compiler" superClass="org.tizen.nativecore.tool.sbi.gnu.c.compiler">
-                                                               <option defaultValue="gnu.c.optimization.level.none" id="gnu.c.compiler.option.optimization.level.569133032" name="Optimization Level" superClass="gnu.c.compiler.option.optimization.level" valueType="enumerated"/>
-                                                               <option id="sbi.gnu.c.compiler.option.debugging.level.1038790997" name="Debug level" superClass="sbi.gnu.c.compiler.option.debugging.level" value="gnu.c.debugging.level.max" valueType="enumerated"/>
-                                                               <option id="sbi.gnu.c.compiler.option.debug.applog.30619937" name="Enable application logging (-D_APP_LOG)" superClass="sbi.gnu.c.compiler.option.debug.applog" value="true" valueType="boolean"/>
-                                                               <option id="sbi.gnu.c.compiler.option.2093892473" superClass="sbi.gnu.c.compiler.option" valueType="userObjs">
-                                                                       <listOptionValue builtIn="false" value="mobile-2.4-emulator.core_llvm36.i386.core.app"/>
-                                                               </option>
-                                                               <option id="sbi.gnu.c.compiler.option.frameworks_inc.core.1795177369" superClass="sbi.gnu.c.compiler.option.frameworks_inc.core" valueType="includePath">
-                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/libxml2&quot;"/>
-                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include&quot;"/>
-                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/appcore-agent&quot;"/>
-                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/appfw&quot;"/>
-                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/attach-panel&quot;"/>
-                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/badge&quot;"/>
-                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/base&quot;"/>
-                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/cairo&quot;"/>
-                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/calendar-service2&quot;"/>
-                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/ckm&quot;"/>
-                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/contacts-svc&quot;"/>
-                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/content&quot;"/>
-                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/context-service&quot;"/>
-                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/dali&quot;"/>
-                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/dali-toolkit&quot;"/>
-                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/dbus-1.0&quot;"/>
-                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/device&quot;"/>
-                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/dlog&quot;"/>
-                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/ecore-1&quot;"/>
-                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/ecore-con-1&quot;"/>
-                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/ecore-evas-1&quot;"/>
-                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/ecore-file-1&quot;"/>
-                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/ecore-imf-1&quot;"/>
-                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/ecore-imf-evas-1&quot;"/>
-                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/ecore-input-1&quot;"/>
-                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/ecore-input-evas-1&quot;"/>
-                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/ecore-ipc-1&quot;"/>
-                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/ecore-x-1&quot;"/>
-                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/e_dbus-1&quot;"/>
-                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/edje-1&quot;"/>
-                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/eet-1&quot;"/>
-                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/efl-1&quot;"/>
-                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/efl-extension&quot;"/>
-                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/efreet-1&quot;"/>
-                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/eina-1&quot;"/>
-                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/eina-1/eina&quot;"/>
-                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/eio-1&quot;"/>
-                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/eldbus-1&quot;"/>
-                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/elementary-1&quot;"/>
-                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/embryo-1&quot;"/>
-                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/eo-1&quot;"/>
-                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/eom&quot;"/>
-                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/ethumb-1&quot;"/>
-                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/ethumb-client-1&quot;"/>
-                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/evas-1&quot;"/>
-                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/ewebkit2-0&quot;"/>
-                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/feedback&quot;"/>
-                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/fontconfig&quot;"/>
-                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/freetype2&quot;"/>
-                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/geofence&quot;"/>
-                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/gio-unix-2.0&quot;"/>
-                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/glib-2.0&quot;"/>
-                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/harfbuzz&quot;"/>
-                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/json-glib-1.0&quot;"/>
-                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/location&quot;"/>
-                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/maps&quot;"/>
-                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/media&quot;"/>
-                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/media-content&quot;"/>
-                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/messaging&quot;"/>
-                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/metadata-editor&quot;"/>
-                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/minicontrol&quot;"/>
-                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/minizip&quot;"/>
-                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/network&quot;"/>
-                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/notification&quot;"/>
-                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/phonenumber-utils&quot;"/>
-                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/sensor&quot;"/>
-                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/shortcut&quot;"/>
-                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/storage&quot;"/>
-                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/system&quot;"/>
-                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/telephony&quot;"/>
-                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/ui&quot;"/>
-                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/web&quot;"/>
-                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/widget_service&quot;"/>
-                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/widget_viewer_evas&quot;"/>
-                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/wifi-direct&quot;"/>
-                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/lib/dbus-1.0/include&quot;"/>
-                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/lib/glib-2.0/include&quot;"/>
-                                                               </option>
-                                                               <option id="sbi.gnu.c.compiler.option.frameworks_cflags.core.129230233" superClass="sbi.gnu.c.compiler.option.frameworks_cflags.core" valueType="stringList">
-                                                                       <listOptionValue builtIn="false" value="${TC_COMPILER_MISC}"/>
-                                                                       <listOptionValue builtIn="false" value="${RS_COMPILER_MISC}"/>
-                                                                       <listOptionValue builtIn="false" value=" -fPIE"/>
-                                                                       <listOptionValue builtIn="false" value="--sysroot=&quot;${SBI_SYSROOT}&quot;"/>
-                                                               </option>
-                                                               <option id="gnu.c.compiler.option.include.paths.2147015964" superClass="gnu.c.compiler.option.include.paths" valueType="includePath">
-                                                                       <listOptionValue builtIn="false" value="&quot;${workspace_loc:/${ProjName}/inc}&quot;"/>
-                                                               </option>
-                                                               <option id="sbi.gnu.c.compiler.option.frameworks.core.435620859" superClass="sbi.gnu.c.compiler.option.frameworks.core" valueType="userObjs">
-                                                                       <listOptionValue builtIn="false" value="Native_API"/>
-                                                               </option>
-                                                               <option id="gnu.c.compiler.option.preprocessor.def.symbols.927058880" superClass="gnu.c.compiler.option.preprocessor.def.symbols" valueType="definedSymbols">
-                                                                       <listOptionValue builtIn="false" value="_DEBUG"/>
-                                                               </option>
-                                                               <inputType id="sbi.gnu.c.compiler.tizen.inputType.386884738"/>
-                                                               <inputType id="cdt.managedbuild.tool.gnu.c.compiler.input.981494680" superClass="cdt.managedbuild.tool.gnu.c.compiler.input"/>
-                                                       </tool>
-                                                       <tool id="org.tizen.nativeide.tool.sbi.gnu.c.linker.base.640241801" name="C Linker" superClass="org.tizen.nativeide.tool.sbi.gnu.c.linker.base"/>
-                                                       <tool command="clang++" id="org.tizen.nativecore.tool.sbi.gnu.cpp.linker.901135465" name="C++ Linker" superClass="org.tizen.nativecore.tool.sbi.gnu.cpp.linker">
-                                                               <option id="sbi.gnu.cpp.linker.option.frameworks_lflags.core.787442281" superClass="sbi.gnu.cpp.linker.option.frameworks_lflags.core" valueType="stringList">
-                                                                       <listOptionValue builtIn="false" value="${TC_LINKER_MISC}"/>
-                                                                       <listOptionValue builtIn="false" value="${RS_LINKER_MISC}"/>
-                                                                       <listOptionValue builtIn="false" value="-pie -lpthread "/>
-                                                                       <listOptionValue builtIn="false" value="-Xlinker -rpath=&quot;/home/developer/sdk_tools/lib&quot;"/>
-                                                                       <listOptionValue builtIn="false" value="--sysroot=&quot;${SBI_SYSROOT}&quot;"/>
-                                                                       <listOptionValue builtIn="false" value="-Xlinker --version-script=&quot;${PROJ_PATH}/.exportMap&quot;"/>
-                                                                       <listOptionValue builtIn="false" value="-L&quot;${SBI_SYSROOT}/usr/lib&quot;"/>
-                                                                       <listOptionValue builtIn="false" value="$(RS_LIBRARIES)"/>
-                                                               </option>
-                                                               <option id="gnu.cpp.link.option.paths.1307041173" superClass="gnu.cpp.link.option.paths" valueType="libPaths">
-                                                                       <listOptionValue builtIn="false" value="&quot;${workspace_loc:/${ProjName}/lib}&quot;"/>
-                                                               </option>
-                                                               <inputType id="cdt.managedbuild.tool.gnu.cpp.linker.input.2119600729" superClass="cdt.managedbuild.tool.gnu.cpp.linker.input">
-                                                                       <additionalInput kind="additionalinputdependency" paths="$(USER_OBJS)"/>
-                                                                       <additionalInput kind="additionalinput" paths="$(LIBS)"/>
-                                                               </inputType>
-                                                       </tool>
-                                                       <tool command="i386-linux-gnueabi-as" id="org.tizen.nativeapp.tool.sbi.gnu.assembler.base.2146766494" name="Assembler" superClass="org.tizen.nativeapp.tool.sbi.gnu.assembler.base">
-                                                               <inputType id="cdt.managedbuild.tool.gnu.assembler.input.2008442855" superClass="cdt.managedbuild.tool.gnu.assembler.input"/>
-                                                       </tool>
-                                                       <tool id="org.tizen.nativecore.tool.sbi.po.compiler.248419226" name="PO Resource Compiler" superClass="org.tizen.nativecore.tool.sbi.po.compiler"/>
-                                                       <tool id="org.tizen.nativecore.tool.sbi.edc.compiler.2010848909" name="EDC Resource Compiler" superClass="org.tizen.nativecore.tool.sbi.edc.compiler"/>
-                                                       <tool id="org.tizen.nativecore.tool.fnmapgen.147350839" name="C FN-Map Generator" superClass="org.tizen.nativecore.tool.fnmapgen"/>
-                                                       <tool id="org.tizen.nativecore.tool.fnmapgen.cpp.2051940365" name="C++ FN-Map Generator" superClass="org.tizen.nativecore.tool.fnmapgen.cpp"/>
-                                                       <tool id="org.tizen.nativecore.tool.ast.1075947210" name="C Static Analyzer" superClass="org.tizen.nativecore.tool.ast"/>
-                                                       <tool id="org.tizen.nativecore.tool.ast.cpp.255856593" name="C++ Static Analyzer" superClass="org.tizen.nativecore.tool.ast.cpp"/>
-                                                       <tool id="org.tizen.nativecore.tool.sbi.gnu.archiver.mergelib.1173374538" name="Archive Generator" superClass="org.tizen.nativecore.tool.sbi.gnu.archiver.mergelib"/>
-                                               </toolChain>
-                                       </folderInfo>
-                                       <sourceEntries>
-                                               <entry flags="VALUE_WORKSPACE_PATH|RESOLVED" kind="sourcePath" name="res"/>
-                                               <entry flags="VALUE_WORKSPACE_PATH|RESOLVED" kind="sourcePath" name="src"/>
-                                               <entry flags="VALUE_WORKSPACE_PATH|RESOLVED" kind="sourcePath" name="inc"/>
-                                       </sourceEntries>
-                               </configuration>
-                       </storageModule>
-                       <storageModule moduleId="org.eclipse.cdt.core.externalSettings"/>
-               </cconfiguration>
-               <cconfiguration id="org.tizen.nativecore.config.sbi.gcc45.app.release.728069853">
-                       <storageModule buildSystemId="org.eclipse.cdt.managedbuilder.core.configurationDataProvider" id="org.tizen.nativecore.config.sbi.gcc45.app.release.728069853" moduleId="org.eclipse.cdt.core.settings" name="Release">
-                               <externalSettings/>
-                               <extensions>
-                                       <extension id="org.eclipse.cdt.core.ELF" point="org.eclipse.cdt.core.BinaryParser"/>
-                                       <extension id="org.eclipse.cdt.core.GmakeErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
-                                       <extension id="org.eclipse.cdt.core.CWDLocator" point="org.eclipse.cdt.core.ErrorParser"/>
-                                       <extension id="org.eclipse.cdt.core.MakeErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
-                                       <extension id="org.eclipse.cdt.core.GCCErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
-                                       <extension id="org.eclipse.cdt.core.GASErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
-                                       <extension id="org.eclipse.cdt.core.GLDErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
-                               </extensions>
-                       </storageModule>
-                       <storageModule moduleId="cdtBuildSystem" version="4.0.0">
-                               <configuration artifactName="${ProjName}" buildArtefactType="org.tizen.nativecore.buildArtefactType.app" buildProperties="org.eclipse.cdt.build.core.buildType=org.eclipse.cdt.build.core.buildType.release,org.eclipse.cdt.build.core.buildArtefactType=org.tizen.nativecore.buildArtefactType.app" description="" errorParsers="org.eclipse.cdt.core.MakeErrorParser;org.eclipse.cdt.core.GCCErrorParser;" id="org.tizen.nativecore.config.sbi.gcc45.app.release.728069853" name="Release" parent="org.tizen.nativecore.config.sbi.gcc45.app.release">
-                                       <folderInfo id="org.tizen.nativecore.config.sbi.gcc45.app.release.728069853." name="/" resourcePath="">
-                                               <toolChain id="org.tizen.nativecore.toolchain.sbi.gcc45.app.release.1698569602" name="Tizen Native Toolchain" superClass="org.tizen.nativecore.toolchain.sbi.gcc45.app.release">
-                                                       <targetPlatform binaryParser="org.eclipse.cdt.core.ELF" id="org.tizen.nativeide.target.sbi.gnu.platform.base.530558826" osList="linux,win32" superClass="org.tizen.nativeide.target.sbi.gnu.platform.base"/>
-                                                       <builder buildPath="${workspace_loc:/{TESTSUITE_NAME}/Release}" id="org.tizen.nativecore.target.sbi.gnu.builder.975214550" keepEnvironmentInBuildfile="false" managedBuildOn="true" name="Tizen Application Builder" superClass="org.tizen.nativecore.target.sbi.gnu.builder"/>
-                                                       <tool id="org.tizen.nativecore.tool.sbi.gnu.archiver.1514849212" name="Archiver" superClass="org.tizen.nativecore.tool.sbi.gnu.archiver"/>
-                                                       <tool command="clang++" id="org.tizen.nativecore.tool.sbi.gnu.cpp.compiler.1790549045" name="C++ Compiler" superClass="org.tizen.nativecore.tool.sbi.gnu.cpp.compiler">
-                                                               <option id="gnu.cpp.compiler.option.optimization.level.316489008" name="Optimization Level" superClass="gnu.cpp.compiler.option.optimization.level" value="gnu.cpp.compiler.optimization.level.most" valueType="enumerated"/>
-                                                               <option id="sbi.gnu.cpp.compiler.option.debugging.level.1500294719" name="Debug level" superClass="sbi.gnu.cpp.compiler.option.debugging.level"/>
-                                                               <option id="sbi.gnu.cpp.compiler.option.debug.applog.220428565" name="Enable application logging (-D_APP_LOG)" superClass="sbi.gnu.cpp.compiler.option.debug.applog"/>
-                                                               <option id="sbi.gnu.cpp.compiler.option.900296718" superClass="sbi.gnu.cpp.compiler.option" valueType="userObjs">
-                                                                       <listOptionValue builtIn="false" value="mobile-2.4-emulator.core_llvm36.i386.core.app"/>
-                                                               </option>
-                                                               <option id="sbi.gnu.cpp.compiler.option.frameworks_inc.core.1334366520" superClass="sbi.gnu.cpp.compiler.option.frameworks_inc.core" valueType="includePath">
-                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/libxml2&quot;"/>
-                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include&quot;"/>
-                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/appcore-agent&quot;"/>
-                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/appfw&quot;"/>
-                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/attach-panel&quot;"/>
-                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/badge&quot;"/>
-                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/base&quot;"/>
-                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/cairo&quot;"/>
-                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/calendar-service2&quot;"/>
-                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/ckm&quot;"/>
-                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/contacts-svc&quot;"/>
-                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/content&quot;"/>
-                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/context-service&quot;"/>
-                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/dali&quot;"/>
-                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/dali-toolkit&quot;"/>
-                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/dbus-1.0&quot;"/>
-                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/device&quot;"/>
-                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/dlog&quot;"/>
-                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/ecore-1&quot;"/>
-                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/ecore-con-1&quot;"/>
-                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/ecore-evas-1&quot;"/>
-                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/ecore-file-1&quot;"/>
-                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/ecore-imf-1&quot;"/>
-                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/ecore-imf-evas-1&quot;"/>
-                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/ecore-input-1&quot;"/>
-                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/ecore-input-evas-1&quot;"/>
-                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/ecore-ipc-1&quot;"/>
-                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/ecore-x-1&quot;"/>
-                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/e_dbus-1&quot;"/>
-                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/edje-1&quot;"/>
-                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/eet-1&quot;"/>
-                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/efl-1&quot;"/>
-                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/efl-extension&quot;"/>
-                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/efreet-1&quot;"/>
-                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/eina-1&quot;"/>
-                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/eina-1/eina&quot;"/>
-                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/eio-1&quot;"/>
-                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/eldbus-1&quot;"/>
-                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/elementary-1&quot;"/>
-                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/embryo-1&quot;"/>
-                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/eo-1&quot;"/>
-                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/eom&quot;"/>
-                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/ethumb-1&quot;"/>
-                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/ethumb-client-1&quot;"/>
-                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/evas-1&quot;"/>
-                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/ewebkit2-0&quot;"/>
-                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/feedback&quot;"/>
-                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/fontconfig&quot;"/>
-                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/freetype2&quot;"/>
-                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/geofence&quot;"/>
-                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/gio-unix-2.0&quot;"/>
-                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/glib-2.0&quot;"/>
-                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/harfbuzz&quot;"/>
-                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/json-glib-1.0&quot;"/>
-                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/location&quot;"/>
-                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/maps&quot;"/>
-                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/media&quot;"/>
-                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/media-content&quot;"/>
-                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/messaging&quot;"/>
-                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/metadata-editor&quot;"/>
-                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/minicontrol&quot;"/>
-                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/minizip&quot;"/>
-                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/network&quot;"/>
-                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/notification&quot;"/>
-                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/phonenumber-utils&quot;"/>
-                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/sensor&quot;"/>
-                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/shortcut&quot;"/>
-                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/storage&quot;"/>
-                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/system&quot;"/>
-                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/telephony&quot;"/>
-                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/ui&quot;"/>
-                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/web&quot;"/>
-                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/widget_service&quot;"/>
-                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/widget_viewer_evas&quot;"/>
-                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/wifi-direct&quot;"/>
-                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/lib/dbus-1.0/include&quot;"/>
-                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/lib/glib-2.0/include&quot;"/>
-                                                               </option>
-                                                               <option id="sbi.gnu.cpp.compiler.option.frameworks_cflags.core.528700311" superClass="sbi.gnu.cpp.compiler.option.frameworks_cflags.core" valueType="stringList">
-                                                                       <listOptionValue builtIn="false" value="${TC_COMPILER_MISC}"/>
-                                                                       <listOptionValue builtIn="false" value="${RS_COMPILER_MISC}"/>
-                                                                       <listOptionValue builtIn="false" value=" -fPIE"/>
-                                                                       <listOptionValue builtIn="false" value="--sysroot=&quot;${SBI_SYSROOT}&quot;"/>
-                                                               </option>
-                                                               <option id="gnu.cpp.compiler.option.include.paths.623797688" superClass="gnu.cpp.compiler.option.include.paths" valueType="includePath">
-                                                                       <listOptionValue builtIn="false" value="&quot;${workspace_loc:/${ProjName}/inc}&quot;"/>
-                                                               </option>
-                                                               <option id="sbi.gnu.cpp.compiler.option.frameworks.core.1909718066" superClass="sbi.gnu.cpp.compiler.option.frameworks.core" valueType="userObjs">
-                                                                       <listOptionValue builtIn="false" value="Native_API"/>
-                                                               </option>
-                                                               <inputType id="sbi.gnu.cpp.compiler.tizen.inputType.1912377546"/>
-                                                               <inputType id="cdt.managedbuild.tool.gnu.cpp.compiler.input.916984243" superClass="cdt.managedbuild.tool.gnu.cpp.compiler.input"/>
-                                                       </tool>
-                                                       <tool command="clang" id="org.tizen.nativecore.tool.sbi.gnu.c.compiler.2061633942" name="C Compiler" superClass="org.tizen.nativecore.tool.sbi.gnu.c.compiler">
-                                                               <option defaultValue="gnu.c.optimization.level.most" id="gnu.c.compiler.option.optimization.level.2022990414" name="Optimization Level" superClass="gnu.c.compiler.option.optimization.level" valueType="enumerated"/>
-                                                               <option id="sbi.gnu.c.compiler.option.debugging.level.2037589780" name="Debug level" superClass="sbi.gnu.c.compiler.option.debugging.level"/>
-                                                               <option id="sbi.gnu.c.compiler.option.debug.applog.930351060" name="Enable application logging (-D_APP_LOG)" superClass="sbi.gnu.c.compiler.option.debug.applog"/>
-                                                               <option id="sbi.gnu.c.compiler.option.623943791" superClass="sbi.gnu.c.compiler.option" valueType="userObjs">
-                                                                       <listOptionValue builtIn="false" value="mobile-2.4-emulator.core_llvm36.i386.core.app"/>
-                                                               </option>
-                                                               <option id="sbi.gnu.c.compiler.option.frameworks_inc.core.1091342970" superClass="sbi.gnu.c.compiler.option.frameworks_inc.core" valueType="includePath">
-                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/libxml2&quot;"/>
-                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include&quot;"/>
-                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/appcore-agent&quot;"/>
-                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/appfw&quot;"/>
-                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/attach-panel&quot;"/>
-                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/badge&quot;"/>
-                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/base&quot;"/>
-                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/cairo&quot;"/>
-                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/calendar-service2&quot;"/>
-                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/ckm&quot;"/>
-                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/contacts-svc&quot;"/>
-                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/content&quot;"/>
-                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/context-service&quot;"/>
-                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/dali&quot;"/>
-                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/dali-toolkit&quot;"/>
-                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/dbus-1.0&quot;"/>
-                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/device&quot;"/>
-                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/dlog&quot;"/>
-                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/ecore-1&quot;"/>
-                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/ecore-con-1&quot;"/>
-                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/ecore-evas-1&quot;"/>
-                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/ecore-file-1&quot;"/>
-                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/ecore-imf-1&quot;"/>
-                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/ecore-imf-evas-1&quot;"/>
-                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/ecore-input-1&quot;"/>
-                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/ecore-input-evas-1&quot;"/>
-                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/ecore-ipc-1&quot;"/>
-                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/ecore-x-1&quot;"/>
-                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/e_dbus-1&quot;"/>
-                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/edje-1&quot;"/>
-                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/eet-1&quot;"/>
-                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/efl-1&quot;"/>
-                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/efl-extension&quot;"/>
-                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/efreet-1&quot;"/>
-                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/eina-1&quot;"/>
-                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/eina-1/eina&quot;"/>
-                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/eio-1&quot;"/>
-                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/eldbus-1&quot;"/>
-                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/elementary-1&quot;"/>
-                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/embryo-1&quot;"/>
-                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/eo-1&quot;"/>
-                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/eom&quot;"/>
-                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/ethumb-1&quot;"/>
-                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/ethumb-client-1&quot;"/>
-                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/evas-1&quot;"/>
-                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/ewebkit2-0&quot;"/>
-                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/feedback&quot;"/>
-                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/fontconfig&quot;"/>
-                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/freetype2&quot;"/>
-                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/geofence&quot;"/>
-                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/gio-unix-2.0&quot;"/>
-                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/glib-2.0&quot;"/>
-                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/harfbuzz&quot;"/>
-                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/json-glib-1.0&quot;"/>
-                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/location&quot;"/>
-                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/maps&quot;"/>
-                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/media&quot;"/>
-                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/media-content&quot;"/>
-                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/messaging&quot;"/>
-                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/metadata-editor&quot;"/>
-                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/minicontrol&quot;"/>
-                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/minizip&quot;"/>
-                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/network&quot;"/>
-                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/notification&quot;"/>
-                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/phonenumber-utils&quot;"/>
-                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/sensor&quot;"/>
-                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/shortcut&quot;"/>
-                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/storage&quot;"/>
-                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/system&quot;"/>
-                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/telephony&quot;"/>
-                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/ui&quot;"/>
-                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/web&quot;"/>
-                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/widget_service&quot;"/>
-                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/widget_viewer_evas&quot;"/>
-                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/wifi-direct&quot;"/>
-                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/lib/dbus-1.0/include&quot;"/>
-                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/lib/glib-2.0/include&quot;"/>
-                                                               </option>
-                                                               <option id="sbi.gnu.c.compiler.option.frameworks_cflags.core.1782808167" superClass="sbi.gnu.c.compiler.option.frameworks_cflags.core" valueType="stringList">
-                                                                       <listOptionValue builtIn="false" value="${TC_COMPILER_MISC}"/>
-                                                                       <listOptionValue builtIn="false" value="${RS_COMPILER_MISC}"/>
-                                                                       <listOptionValue builtIn="false" value=" -fPIE"/>
-                                                                       <listOptionValue builtIn="false" value="--sysroot=&quot;${SBI_SYSROOT}&quot;"/>
-                                                               </option>
-                                                               <option id="gnu.c.compiler.option.include.paths.499488519" superClass="gnu.c.compiler.option.include.paths" valueType="includePath">
-                                                                       <listOptionValue builtIn="false" value="&quot;${workspace_loc:/${ProjName}/inc}&quot;"/>
-                                                               </option>
-                                                               <option id="sbi.gnu.c.compiler.option.frameworks.core.120447946" superClass="sbi.gnu.c.compiler.option.frameworks.core" valueType="userObjs">
-                                                                       <listOptionValue builtIn="false" value="Native_API"/>
-                                                               </option>
-                                                               <inputType id="sbi.gnu.c.compiler.tizen.inputType.1431704404"/>
-                                                               <inputType id="cdt.managedbuild.tool.gnu.c.compiler.input.27305889" superClass="cdt.managedbuild.tool.gnu.c.compiler.input"/>
-                                                       </tool>
-                                                       <tool id="org.tizen.nativeide.tool.sbi.gnu.c.linker.base.267766539" name="C Linker" superClass="org.tizen.nativeide.tool.sbi.gnu.c.linker.base"/>
-                                                       <tool command="clang++" id="org.tizen.nativecore.tool.sbi.gnu.cpp.linker.1382202266" name="C++ Linker" superClass="org.tizen.nativecore.tool.sbi.gnu.cpp.linker">
-                                                               <option id="sbi.gnu.cpp.linker.option.frameworks_lflags.core.476062144" superClass="sbi.gnu.cpp.linker.option.frameworks_lflags.core" valueType="stringList">
-                                                                       <listOptionValue builtIn="false" value="${TC_LINKER_MISC}"/>
-                                                                       <listOptionValue builtIn="false" value="${RS_LINKER_MISC}"/>
-                                                                       <listOptionValue builtIn="false" value="-pie -lpthread "/>
-                                                                       <listOptionValue builtIn="false" value="-Xlinker -rpath=&quot;/home/developer/sdk_tools/lib&quot;"/>
-                                                                       <listOptionValue builtIn="false" value="--sysroot=&quot;${SBI_SYSROOT}&quot;"/>
-                                                                       <listOptionValue builtIn="false" value="-Xlinker --version-script=&quot;${PROJ_PATH}/.exportMap&quot;"/>
-                                                                       <listOptionValue builtIn="false" value="-L&quot;${SBI_SYSROOT}/usr/lib&quot;"/>
-                                                                       <listOptionValue builtIn="false" value="$(RS_LIBRARIES)"/>
-                                                               </option>
-                                                               <option id="gnu.cpp.link.option.paths.29188932" superClass="gnu.cpp.link.option.paths" valueType="libPaths">
-                                                                       <listOptionValue builtIn="false" value="&quot;${workspace_loc:/${ProjName}/lib}&quot;"/>
-                                                               </option>
-                                                               <inputType id="cdt.managedbuild.tool.gnu.cpp.linker.input.140241049" superClass="cdt.managedbuild.tool.gnu.cpp.linker.input">
-                                                                       <additionalInput kind="additionalinputdependency" paths="$(USER_OBJS)"/>
-                                                                       <additionalInput kind="additionalinput" paths="$(LIBS)"/>
-                                                               </inputType>
-                                                       </tool>
-                                                       <tool command="i386-linux-gnueabi-as" id="org.tizen.nativeapp.tool.sbi.gnu.assembler.base.1380224608" name="Assembler" superClass="org.tizen.nativeapp.tool.sbi.gnu.assembler.base">
-                                                               <inputType id="cdt.managedbuild.tool.gnu.assembler.input.383736666" superClass="cdt.managedbuild.tool.gnu.assembler.input"/>
-                                                       </tool>
-                                                       <tool id="org.tizen.nativecore.tool.sbi.po.compiler.1356965384" name="PO Resource Compiler" superClass="org.tizen.nativecore.tool.sbi.po.compiler"/>
-                                                       <tool id="org.tizen.nativecore.tool.sbi.edc.compiler.1251472052" name="EDC Resource Compiler" superClass="org.tizen.nativecore.tool.sbi.edc.compiler"/>
-                                                       <tool id="org.tizen.nativecore.tool.fnmapgen.1001165225" name="C FN-Map Generator" superClass="org.tizen.nativecore.tool.fnmapgen"/>
-                                                       <tool id="org.tizen.nativecore.tool.fnmapgen.cpp.259998567" name="C++ FN-Map Generator" superClass="org.tizen.nativecore.tool.fnmapgen.cpp"/>
-                                                       <tool id="org.tizen.nativecore.tool.ast.277372493" name="C Static Analyzer" superClass="org.tizen.nativecore.tool.ast"/>
-                                                       <tool id="org.tizen.nativecore.tool.ast.cpp.616356266" name="C++ Static Analyzer" superClass="org.tizen.nativecore.tool.ast.cpp"/>
-                                                       <tool id="org.tizen.nativecore.tool.sbi.gnu.archiver.mergelib.1007103551" name="Archive Generator" superClass="org.tizen.nativecore.tool.sbi.gnu.archiver.mergelib"/>
-                                               </toolChain>
-                                       </folderInfo>
-                                       <sourceEntries>
-                                               <entry flags="VALUE_WORKSPACE_PATH|RESOLVED" kind="sourcePath" name="res"/>
-                                               <entry flags="VALUE_WORKSPACE_PATH|RESOLVED" kind="sourcePath" name="src"/>
-                                               <entry flags="VALUE_WORKSPACE_PATH|RESOLVED" kind="sourcePath" name="inc"/>
-                                       </sourceEntries>
-                               </configuration>
-                       </storageModule>
-                       <storageModule moduleId="org.eclipse.cdt.core.externalSettings"/>
-               </cconfiguration>
-       </storageModule>
-       <storageModule moduleId="cdtBuildSystem" version="4.0.0">
-               <project id="{TESTSUITE_NAME}.org.tizen.nativecore.target.sbi.gcc45.app.893663013" name="Tizen Core Application" projectType="org.tizen.nativecore.target.sbi.gcc45.app"/>
-       </storageModule>
-       <storageModule moduleId="com.samsung.tizen.nativeapp.projectInfo" version="1.0.0"/>
-       <storageModule moduleId="scannerConfiguration"/>
-       <storageModule moduleId="org.eclipse.cdt.core.LanguageSettingsProviders"/>
-</cproject>
diff --git a/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/plugin/native_templates/.exportMap b/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/plugin/native_templates/.exportMap
deleted file mode 100755 (executable)
index 43e310e..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-{
-       global: main;
-       local: *;
-};
diff --git a/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/plugin/native_templates/.project b/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/plugin/native_templates/.project
deleted file mode 100755 (executable)
index 8b7ae50..0000000
+++ /dev/null
@@ -1,99 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<projectDescription>
-       <name>{TESTSUITE_NAME}</name>
-       <comment></comment>
-       <projects>
-       </projects>
-       <buildSpec>
-               <buildCommand>
-                       <name>org.eclipse.cdt.managedbuilder.core.genmakebuilder</name>
-                       <arguments>
-                               <dictionary>
-                                       <key>?name?</key>
-                                       <value></value>
-                               </dictionary>
-                               <dictionary>
-                                       <key>org.eclipse.cdt.make.core.append_environment</key>
-                                       <value>true</value>
-                               </dictionary>
-                               <dictionary>
-                                       <key>org.eclipse.cdt.make.core.autoBuildTarget</key>
-                                       <value>all</value>
-                               </dictionary>
-                               <dictionary>
-                                       <key>org.eclipse.cdt.make.core.buildArguments</key>
-                                       <value></value>
-                               </dictionary>
-                               <dictionary>
-                                       <key>org.eclipse.cdt.make.core.buildCommand</key>
-                                       <value>sbi-make</value>
-                               </dictionary>
-                               <dictionary>
-                                       <key>org.eclipse.cdt.make.core.buildLocation</key>
-                                       <value>${workspace_loc:/{TESTSUITE_NAME}/Debug}</value>
-                               </dictionary>
-                               <dictionary>
-                                       <key>org.eclipse.cdt.make.core.cleanBuildTarget</key>
-                                       <value>clean</value>
-                               </dictionary>
-                               <dictionary>
-                                       <key>org.eclipse.cdt.make.core.contents</key>
-                                       <value>org.eclipse.cdt.make.core.activeConfigSettings</value>
-                               </dictionary>
-                               <dictionary>
-                                       <key>org.eclipse.cdt.make.core.enableAutoBuild</key>
-                                       <value>true</value>
-                               </dictionary>
-                               <dictionary>
-                                       <key>org.eclipse.cdt.make.core.enableCleanBuild</key>
-                                       <value>true</value>
-                               </dictionary>
-                               <dictionary>
-                                       <key>org.eclipse.cdt.make.core.enableFullBuild</key>
-                                       <value>true</value>
-                               </dictionary>
-                               <dictionary>
-                                       <key>org.eclipse.cdt.make.core.fullBuildTarget</key>
-                                       <value>all</value>
-                               </dictionary>
-                               <dictionary>
-                                       <key>org.eclipse.cdt.make.core.stopOnError</key>
-                                       <value>true</value>
-                               </dictionary>
-                               <dictionary>
-                                       <key>org.eclipse.cdt.make.core.useDefaultBuildCmd</key>
-                                       <value>true</value>
-                               </dictionary>
-                       </arguments>
-               </buildCommand>
-               <buildCommand>
-                       <name>org.eclipse.cdt.managedbuilder.core.ScannerConfigBuilder</name>
-                       <triggers>full,incremental,</triggers>
-                       <arguments>
-                       </arguments>
-               </buildCommand>
-               <buildCommand>
-                       <name>org.tizen.nativecore.apichecker.core.builder</name>
-                       <arguments>
-                       </arguments>
-               </buildCommand>
-       </buildSpec>
-       <natures>
-               <nature>org.eclipse.cdt.core.cnature</nature>
-               <nature>org.eclipse.cdt.core.ccnature</nature>
-               <nature>org.eclipse.cdt.managedbuilder.core.managedBuildNature</nature>
-               <nature>org.eclipse.cdt.managedbuilder.core.ScannerConfigNature</nature>
-               <nature>org.tizen.nativecore.apichecker.core.tizenCppNature</nature>
-       </natures>
-       <filteredResources>
-               <filter>
-                       <id>1360216703005</id>
-                       <name></name>
-                       <type>26</type>
-                       <matcher>
-                               <id>org.eclipse.ui.ide.multiFilter</id>
-                               <arguments>1.0-projectRelativePath-matches-false-false-*/.tpk</arguments>
-                       </matcher>
-               </filter>
-       </filteredResources>
-</projectDescription>
diff --git a/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/plugin/native_templates/.tproject b/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/plugin/native_templates/.tproject
deleted file mode 100755 (executable)
index 7a02b61..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
-<tproject xmlns="http://www.tizen.org/tproject">
-    <platforms>
-        <platform>
-            <name>mobile-2.4</name>
-        </platform>
-    </platforms>
-</tproject>
diff --git a/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/plugin/native_templates/Build/appendix.mk b/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/plugin/native_templates/Build/appendix.mk
deleted file mode 100755 (executable)
index fad5ae4..0000000
+++ /dev/null
@@ -1 +0,0 @@
-# Appendix
diff --git a/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/plugin/native_templates/Build/basedef.mk b/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/plugin/native_templates/Build/basedef.mk
deleted file mode 100755 (executable)
index 1324388..0000000
+++ /dev/null
@@ -1,113 +0,0 @@
-# Add inputs and outputs from these tool invocations to the build variables
-
-C_DEPS +=
-
-USES_EFL = yes
-USES_USR_INC = yes
-
-SYSROOT = $(SBI_SYSROOT)
-
-ifneq ($(strip $(SYSROOT)),)
-
-ifeq ($(strip $(USES_EFL)),yes)
-_EFL_INCS := \
-     ecore-1 \
-     ecore-audio-1 \
-     ecore-avahi-1 \
-     ecore-con-1 \
-     ecore-evas-1 \
-     ecore-fb-1 \
-     ecore-file-1  \
-     ecore-imf-1 \
-     ecore-imf-evas-1 \
-     ecore-input-1 \
-     ecore-input-evas-1 \
-     ecore-ipc-1 \
-     ecore-x-1 \
-     e_dbus-1 \
-     edje-1 \
-     eet-1 \
-     efl-1 \
-     efl-extension efl-extension/default efl-extension/circle \
-     efreet-1 \
-     eina-1 eina-1/eina \
-     eio-1 \
-     eldbus-1 \
-     elementary-1 \
-     embryo-1 \
-     eo-1 \
-     eom \
-     ethumb-1 \
-     ethumb-client-1 \
-     evas-1 \
-     ewebkit2-0
-_EFL_INC_ROOT := $(SYSROOT)/usr/include
-EFL_INCS := $(addprefix -I $(_EFL_INC_ROOT)/,$(_EFL_INCS))
-endif
-
-ifeq ($(strip $(USES_USR_INC)),yes)
-_USR_INCS := \
-     usr/include \
-     usr/include/AL \
-     usr/include/feedback \
-     usr/include/ui-extension \
-     usr/include/vconf \
-     usr/include/weconn \
-     usr/include/wipc \
-     usr/include/wnoti-service \
-     usr/include/appcore-agent \
-     usr/include/appcore-watch \
-     usr/include/appfw \
-     usr/include/badge \
-     usr/include/base \
-     usr/include/cairo \
-     usr/include/calendar-service2 \
-     usr/include/ckm \
-     usr/include/contacts-svc \
-     usr/include/content \
-     usr/include/context-manager \
-     usr/include/context-service \
-     usr/include/dali \
-     usr/include/dali-toolkit \
-     usr/include/dbus-1.0 \
-     usr/include/device \
-     usr/include/dlog \
-     usr/include/fontconfig \
-     usr/include/freetype2 \
-     usr/include/geofence \
-     usr/include/gio-unix-2.0 \
-     usr/include/glib-2.0 \
-     usr/include/json-glib-1.0 \
-     usr/include/json-glib-1.0/json-glib \
-     usr/include/libxml2 \
-     usr/include/location \
-     usr/include/maps \
-     usr/include/media \
-     usr/include/media-content \
-     usr/include/messaging \
-     usr/include/metadata-editor \
-     usr/include/minicontrol \
-     usr/include/minizip \
-     usr/include/network \
-     usr/include/notification \
-     usr/include/phonenumber-utils \
-     usr/include/sensor \
-     usr/include/shortcut \
-     usr/include/storage \
-     usr/include/system \
-     usr/include/telephony \
-     usr/include/ui \
-     usr/include/web \
-     usr/include/widget_service \
-     usr/include/widget_viewer_evas \
-     usr/include/wifi-direct \
-     usr/lib/dbus-1.0/include \
-     usr/lib/glib-2.0/include 
-_USR_INC_ROOT := $(SYSROOT)
-USR_INCS := $(addprefix -I $(_USR_INC_ROOT)/,$(_USR_INCS))
-endif
-
-PLATFORM_INCS = $(USR_INCS) $(EFL_INCS) \
-     -I"$(SDK_PATH)/library" 
-
-endif
diff --git a/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/plugin/native_templates/Build/flags.mk b/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/plugin/native_templates/Build/flags.mk
deleted file mode 100755 (executable)
index 3305cb8..0000000
+++ /dev/null
@@ -1,10 +0,0 @@
-
-COMPILE_FLAGS = $(DEBUG_OP) $(OPTIMIZATION_OP) -Wall -c -fmessage-length=0 
-
-CPP_COMPILE_FLAGS = $(DEBUG_OP) $(OPTIMIZATION_OP) 
-
-LINK_FLAGS = 
-
-AR_FLAGS = 
-
-EDC_COMPILE_FLAGS = 
\ No newline at end of file
diff --git a/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/plugin/native_templates/Build/makefile b/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/plugin/native_templates/Build/makefile
deleted file mode 100755 (executable)
index d0a02f2..0000000
+++ /dev/null
@@ -1,265 +0,0 @@
-BUILD_SCRIPT_VERSION := 1.0.6
-
-BSLASH := \\#
-
-PROJ_ROOT := $(subst $(BSLASH),/,$(PROJPATH))
-
--include $(PROJ_ROOT)/project_def.prop
--include basedef.mk
--include tooldef.mk
--include flags.mk
--include prepost.mk
-
-APPTYPE := $(type)
-
-OBJ_OUTPUT := $(OUTPUT_DIR)/objs
-
-OS_NAME = $(shell $(UNAME))
-
-ifneq ($(strip $(PLATFORM_INCS)),)
-PLATFORM_INCS_FILE := $(OBJ_OUTPUT)/platform_incs_file.inc 
-endif
-
-FIND_FILES = $(shell $(FIND) $(PROJ_ROOT)/$(dir $(1)) -type f -name $(notdir $(1)) -printf '$(dir $(1))%P ')
-
-#USER_SRCS2 := $(shell sed -n '/^\s*USER_SRCS\s*=/s/USER_SRCS\s*=\s*//gp' '$(PROJ_ROOT)/project_def.prop')
-USER_SRCS2 := $(shell sed --version)
-
-NORMAL_SRCS := $(filter-out %*.c %*.cpp,$(USER_SRCS))
-WIDLCARD_SRCS := $(filter %*.c %*.cpp,$(USER_SRCS))
-ALL_SRCS := $(NORMAL_SRCS) $(foreach var,$(WIDLCARD_SRCS),$(call FIND_FILES,$(var)))
-
-C_SRCS := $(filter %.c,$(ALL_SRCS))
-CPP_SRCS := $(filter %.cpp,$(ALL_SRCS))
-
-USER_EDCS := $(subst $(BSLASH),/,$(USER_EDCS))
-NORMAL_EDCS := $(filter-out %*.edc,$(USER_EDCS))
-WIDLCARD_EDCS := $(filter %*.edc,$(USER_EDCS))
-EDCS := $(NORMAL_EDCS) $(foreach var,$(WIDLCARD_EDCS),$(call FIND_FILES,$(var)))
-
-NORMAL_POS := $(filter-out %*.po,$(USER_POS))
-WIDLCARD_POS := $(filter %*.po,$(USER_POS))
-POS := $(NORMAL_POS) $(foreach var,$(WIDLCARD_POS),$(call FIND_FILES,$(var)))
-
-LIBPATHS := $(addprefix -L$(PROJ_ROOT)/,$(USER_LIB_DIRS)) \
-                       $(addprefix -L,$(USER_LIB_DIRS_ABS))
-LIBS += $(addprefix -l,$(USER_LIBS))
-UOBJS := $(addprefix $(PROJ_ROOT)/,$(USER_OBJS)) \
-                $(USER_OBJS_ABS)
-
-M_OPT = -MMD -MP -MF"$(@:%.o=%.d)"
-
-#LOWER_APPNAME := $(shell echo translit($(APPNAME),[A-Z],[a-z])|$(M4))
-LOWER_APPNAME := $(shell echo $(APPNAME)|$(TR) [A-Z] [a-z])
-
-ifeq ($(strip $(APPTYPE)),app)
-APPFILE := $(OUTPUT_DIR)/$(LOWER_APPNAME)
-endif
-ifeq ($(strip $(APPTYPE)),staticLib)
-APPFILE := $(OUTPUT_DIR)/lib$(LOWER_APPNAME).a
-endif
-ifeq ($(strip $(APPTYPE)),sharedLib)
-APPFILE := $(OUTPUT_DIR)/lib$(LOWER_APPNAME).so
-endif
-
-FUNC_C2O = $(patsubst %.c,$(OBJ_OUTPUT)/%.o,$(1))
-FUNC_CPP2O = $(patsubst %.cpp,$(OBJ_OUTPUT)/%.o,$(1))
-FUNC_EDC2EDJ = $(patsubst %.edc,$(OUTPUT_DIR)/%.edj,$(1))
-FUNC_PO2MO = $(patsubst %.po,$(OUTPUT_DIR)/res/locale/%/LC_MESSAGES/$(LOWER_APPNAME).mo,$(notdir $(1)))
-
-
-C_OBJS := $(call FUNC_C2O,$(C_SRCS)) 
-CPP_OBJS := $(call FUNC_CPP2O,$(CPP_SRCS)) 
-OBJS := $(C_OBJS) $(CPP_OBJS)
-EDJ_FILES := $(call FUNC_EDC2EDJ,$(EDCS))
-MO_FILES := $(call FUNC_PO2MO,$(POS))
-DEPS := $(OBJS:.o=.d)
-
-
-all : preproc $(APPFILE) secondary-outputs postproc
-
-ifneq ($(strip $(DEPS)),)
--include $(DEPS)
-endif
-
-ifeq ($(strip $(APPTYPE)),app)
-$(APPFILE) : $(OBJS) $(UOBJS)
-       @echo '  Building target: $@'
-       @echo '  Invoking: C/C++ Linker'
-       @$(MKDIR) $(MKDIR_OP) $(subst $(BSLASH),/,$(@D))
-       $(CXX) -o "$(APPFILE)" $(OBJS) $(UOBJS) $(LIBPATHS) $(LIBS) $(LINK_FLAGS) $(TC_LINKER_MISC) $(RS_LINKER_MISC) -pie -lpthread -Xlinker -rpath="/home/developer/sdk_tools/lib" --sysroot="$(SYSROOT)" -Xlinker --version-script="$(PROJ_PATH)/.exportMap" -L"$(SBI_SYSROOT)/usr/lib" $(RS_LIBRARIES) -Xlinker -rpath="/opt/usr/apps/$(APPID)/lib" -Werror-implicit-function-declaration
-       @echo '  Finished building target: $@'
-endif
-ifeq ($(strip $(APPTYPE)),staticLib)
-$(APPFILE) : $(OBJS) $(UOBJS)
-       @echo '  Building target: $@'
-       @echo '  Invoking: Archive utility'
-       @$(MKDIR) $(MKDIR_OP) $(subst $(BSLASH),/,$(@D))
-       $(AR) -r "$(APPFILE)" $(OBJS) $(UOBJS) $(AR_FLAGS)
-       @echo '  Finished building target: $@'
-endif
-ifeq ($(strip $(APPTYPE)),sharedLib)
-$(APPFILE) : $(OBJS) $(UOBJS)
-       @echo '  Building target: $@'
-       @echo '  Invoking: C/C++ Linker'
-       @$(MKDIR) $(MKDIR_OP) $(subst $(BSLASH),/,$(@D))
-       $(CXX) -o "$(APPFILE)" $(OBJS) $(UOBJS) $(LIBPATHS) $(LIBS) $(LINK_FLAGS) $(TC_LINKER_MISC) $(RS_LINKER_MISC) -shared -lpthread --sysroot="$(SYSROOT)" -L"$(SYSROOT)/usr/lib" $(RS_LIBRARIES)
-       @echo '  Finished building target: $@'
-endif
-
-
-ifneq ($(strip $(C_SRCS)),)
-CDEFS += $(addprefix -D,$(USER_DEFS))
-CDEFS += $(addprefix -U,$(USER_UNDEFS))
-
-INCS := $(addprefix -I$(PROJ_ROOT)/,$(USER_INC_DIRS)) \
-               $(addprefix -I,$(USER_INC_DIRS_ABS)) \
-               $(addprefix -include$(PROJ_ROOT)/,$(USER_INC_FILES)) \
-               $(addprefix -include,$(USER_INC_FILES_ABS))
-
-$(C_OBJS) : $(OBJ_OUTPUT)/%.o : $(PROJ_ROOT)/%.c $(PLATFORM_INCS_FILE)  
-       @echo '  Building file: $<'
-       @echo '  Invoking: C Compiler'
-       @$(MKDIR) $(MKDIR_OP) $(subst $(BSLASH),/,$(@D))
-ifeq ($(strip $(APPTYPE)),sharedLib)
-       $(CC) -c $< -o $@ $(CDEFS) $(INCS) -I"pch" $(COMPILE_FLAGS) $(TC_COMPILER_MISC) $(RS_COMPILER_MISC) -fPIC --sysroot="$(SYSROOT)" -Werror-implicit-function-declaration $(M_OPT) @$(PLATFORM_INCS_FILE)
-else
-       $(CC) -c $< -o $@ $(CDEFS) $(INCS) -I"pch" $(COMPILE_FLAGS) $(TC_COMPILER_MISC) $(RS_COMPILER_MISC) -fPIE --sysroot="$(SYSROOT)" -Werror-implicit-function-declaration $(M_OPT) @$(PLATFORM_INCS_FILE)
-endif
-       @echo '  Finished building: $<'
-endif
-
-ifneq ($(strip $(CPP_SRCS)),)
-CPPDEFS += $(addprefix -D,$(USER_CPP_DEFS))
-CPPDEFS += $(addprefix -U,$(USER_CPP_UNDEFS))
-
-CPP_INCS := $(addprefix -I$(PROJ_ROOT)/,$(USER_CPP_INC_DIRS)) \
-               $(addprefix -I,$(USER_CPP_INC_DIRS_ABS)) \
-               $(addprefix -include$(PROJ_ROOT)/,$(USER_CPP_INC_FILES)) \
-               $(addprefix -include,$(USER_CPP_INC_FILES_ABS))
-               
-$(CPP_OBJS) : $(OBJ_OUTPUT)/%.o : $(PROJ_ROOT)/%.cpp $(PLATFORM_INCS_FILE)  
-       @echo '  Building file: $<'
-       @echo '  Invoking: C++ Compiler'
-       @$(MKDIR) $(MKDIR_OP) $(subst $(BSLASH),/,$(@D))
-ifeq ($(strip $(APPTYPE)),sharedLib)
-       $(CXX) -c $< -o $@ $(CPPDEFS) $(CPP_INCS) -I"pch" $(CPP_COMPILE_FLAGS) $(TC_COMPILER_MISC) $(RS_COMPILER_MISC) -fPIC --sysroot="$(SYSROOT)" -Werror-implicit-function-declaration $(M_OPT) @$(PLATFORM_INCS_FILE)
-else
-       $(CXX) -c $< -o $@ $(CPPDEFS) $(CPP_INCS) -I"pch" $(CPP_COMPILE_FLAGS) $(TC_COMPILER_MISC) $(RS_COMPILER_MISC) -fPIE --sysroot="$(SYSROOT)" -Werror-implicit-function-declaration $(M_OPT) @$(PLATFORM_INCS_FILE)
-endif
-       @echo '  Finished building: $<'
-endif
-
-preproc :
-ifneq ($(strip $(PREBUILD_COMMAND)),)
-ifneq ($(strip $(PREBUILD_DESC)),)
-       @echo $(PREBUILD_DESC)
-endif  
-       @echo $(shell $(PREBUILD_COMMAND))
-endif  
-       @$(MKDIR) $(MKDIR_OP) $(subst $(BSLASH),/,$(OBJ_OUTPUT))
-
-postproc :
-ifneq ($(strip $(POSTBUILD_COMMAND)),)
-ifneq ($(strip $(POSTBUILD_DESC)),)
-       @echo $(POSTBUILD_DESC)
-endif  
-       @echo $(shell $(POSTBUILD_COMMAND))
-endif  
-
-ifneq ($(strip $(PLATFORM_INCS)),)
-$(PLATFORM_INCS_FILE) :
-       @$(MKDIR) $(MKDIR_OP) $(subst $(BSLASH),/,$(@D))
-ifneq ($(findstring Linux,$(OS_NAME)),)
-       @echo $(PLATFORM_INCS) > $@
-else
-ifneq ($(findstring 3.82,$(MAKE_VERSION)),)
-       $(file > $@,$(PLATFORM_INCS))
-else
-       @echo $(PLATFORM_INCS) > $@
-endif   
-endif
-endif
-
-ALL_EDJ_FILES :=
-
-define EDJ_PROC
-ALL_EDCS := $$(subst $(BSLASH),/,$$($(2)))
-NORMAL_EDCS := $$(filter-out %*.edc,$$(ALL_EDCS))
-WIDLCARD_EDCS := $$(filter %*.edc,$$(ALL_EDCS))
-EDCS := $$(NORMAL_EDCS) $$(foreach var_edc,$$(WIDLCARD_EDCS),$$(call FIND_FILES,$$(var_edc)))
-
-ifneq ($$(strip $$(EDCS)),)
-EDJ_FILES := $$(call FUNC_EDC2EDJ,$$(EDCS))
-
-ALL_EDJ_FILES += $$(EDJ_FILES)
-
-EDC_$(1)_COMPILER_FLAGS := -id "$$(SDK_TOOLPATH)/enventor/share/enventor/images"
-EDC_$(1)_COMPILER_FLAGS += -sd "$$(SDK_TOOLPATH)/enventor/share/enventor/sounds"
-EDC_$(1)_COMPILER_FLAGS += -fd "$$(SDK_TOOLPATH)/enventor/share/enventor/fonts"
-
-ifneq ($$(strip $(3)),)
-EDC_$(1)_COMPILER_FLAGS += $$(addprefix -id $$(PROJ_PATH)/,$$($(3)))
-endif
-ifneq ($$(strip $(4)),)
-EDC_$(1)_COMPILER_FLAGS += $$(addprefix -id ,$$($(4)))
-endif
-ifneq ($$(strip $(5)),)
-EDC_$(1)_COMPILER_FLAGS += $$(addprefix -sd $$(PROJ_PATH)/,$$($(5)))
-endif
-ifneq ($$(strip $(6)),)
-EDC_$(1)_COMPILER_FLAGS += $$(addprefix -sd ,$$($(6)))
-endif
-ifneq ($$(strip $(7)),)
-EDC_$(1)_COMPILER_FLAGS += $$(addprefix -fd $$(PROJ_PATH)/,$$($(7)))
-endif
-ifneq ($$(strip $(8)),)
-EDC_$(1)_COMPILER_FLAGS += $$(addprefix -fd ,$$($(8)))
-endif
-
-$$(EDJ_FILES) : $$(OUTPUT_DIR)/%.edj : $$(PROJ_ROOT)/%.edc 
-       @echo '  Building file: $$<'
-       @echo '  Invoking: EDC Resource Compiler'
-       @$$(MKDIR) $$(MKDIR_OP) $$(subst $$(BSLASH),/,$$(@D))
-       $$(EDJE_CC) $$(EDC_$(1)_COMPILER_FLAGS) $$(CDEFS) "$$<" "$$@"
-       @echo '  Finished building: $$<'
-endif
-endef
-
-# Global EDCs
-ifneq ($(strip $(USER_EDCS)),)
-$(eval $(call EDJ_PROC,,USER_EDCS,USER_EDCS_IMAGE_DIRS,USER_EDCS_IMAGE_DIRS_ABS,USER_EDCS_SOUND_DIRS,USER_EDCS_SOUND_DIRS_ABS,USER_EDCS_FONT_DIRS,USER_EDCS_FONT_DIRS_ABS))
-endif
-
-# Individual EDCs
-ifneq ($(strip $(USER_EXT_EDC_KEYS)),)
-$(foreach var,$(USER_EXT_EDC_KEYS),$(eval $(call EDJ_PROC,$(var),USER_EXT_$(var)_EDCS,USER_EXT_$(var)_EDCS_IMAGE_DIRS,USER_EXT_$(var)_EDCS_IMAGE_DIRS_ABS,USER_EXT_$(var)_EDCS_SOUND_DIRS,USER_EXT_$(var)_EDCS_SOUND_DIRS_ABS,USER_EXT_$(var)_EDCS_FONT_DIRS,USER_EXT_$(var)_EDCS_FONT_DIRS_ABS)))
-endif
-
-
-ifneq ($(strip $(POS)),)
-define MO_RULE
-$(call FUNC_PO2MO,$(1)) : $(PROJ_ROOT)/$(1)
-       @echo '  Building file: $$<'
-       @echo '  Invoking: msgfmt String Formatter'
-       @$$(MKDIR) $$(MKDIR_OP) $$(subst $$(BSLASH),/,$$(@D))
-       $$(MSGFMT) -o $$@ $$<
-       @echo '  Finished building: $$<'
-endef
-
-$(foreach var,$(POS),$(eval $(call MO_RULE,$(var))))
-endif
-
-
-secondary-outputs : $(ALL_EDJ_FILES) $(MO_FILES)
-
--include appendix.mk
-
-
-clean :
-       rm -f "$(APPFILE)"
-       rm -rf "$(OUTPUT_DIR)"
-
-
-version :
-       @echo $(BUILD_SCRIPT_VERSION)
diff --git a/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/plugin/native_templates/Build/prepost.mk b/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/plugin/native_templates/Build/prepost.mk
deleted file mode 100755 (executable)
index 6bb5e2f..0000000
+++ /dev/null
@@ -1,6 +0,0 @@
-
-# Add pre/post build process
-PREBUILD_DESC = 
-PREBUILD_COMMAND = 
-POSTBUILD_DESC = 
-POSTBUILD_COMMAND = 
diff --git a/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/plugin/native_templates/Build/tooldef.mk b/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/plugin/native_templates/Build/tooldef.mk
deleted file mode 100755 (executable)
index 4244fb3..0000000
+++ /dev/null
@@ -1,61 +0,0 @@
-# Add inputs and outputs from these tool invocations to the build variables
-
-ifeq ($(strip $(BUILD_CONFIG)),)
-BUILD_CONFIG = Debug
-endif
-
-ifeq ($(strip $(OUTPUT_DIR)),)
-OUTPUT_DIR := $(PROJPATH)/$(BUILD_CONFIG)
-endif
-
-
-ifneq ($(strip $(MKDIR_BIN)),)
-MKDIR = $(MKDIR_BIN)
-MKDIR_OP = -p
-else
-MKDIR = mkdir
-MKDIR_OP = -p
-endif
-
-ifneq ($(strip $(UNAME_BIN)),)
-UNAME = $(UNAME_BIN)
-else
-UNAME = uname
-endif
-
-ifneq ($(strip $(M4_BIN)),)
-M4 = $(M4_BIN)
-else
-M4 = m4
-endif
-
-ifneq ($(strip $(TR_BIN)),)
-TR = $(TR_BIN)
-else
-TR = tr
-endif
-
-ifneq ($(strip $(FIND_BIN)),)
-FIND = $(FIND_BIN)
-else
-FIND = find
-endif
-
-ifneq ($(strip $(GREP_BIN)),)
-GREP = $(GREP_BIN)
-else
-GREP = grep
-endif
-
-ifneq ($(strip $(EDJE_CC_BIN)),)
-EDJE_CC = $(EDJE_CC_BIN)
-else
-EDJE_CC = edje_cc
-endif
-
-ifneq ($(strip $(MSGFMT_BIN)),)
-MSGFMT = $(MSGFMT_BIN)
-else
-MSGFMT = msgfmt
-endif
-
diff --git a/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/plugin/native_templates/inc/assert.h b/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/plugin/native_templates/inc/assert.h
deleted file mode 100755 (executable)
index 594bf5c..0000000
+++ /dev/null
@@ -1,70 +0,0 @@
-//
-// Copyright (c) 2014 Samsung Electronics Co., Ltd.
-//
-// Licensed under the Apache License, Version 2.0 (the License);
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-//
-#ifndef _ASSERT_H_
-#define _ASSERT_H_
-#include <stdio.h>
-#include <stdlib.h>
-
-#define assert(exp) \
-    if (!(exp)) { \
-        fprintf(stderr, \
-            "\\n[TCT][%s][Line : %d] Assert Fail; Following expression is not true: %s\\n", __FILE__, __LINE__, #exp); \
-        return 1; \
-    }
-
-#define assert_eq(var, ref) \
-    if (var != ref) { \
-        fprintf(stderr, \
-            "\\n[TCT][%s][Line : %d] Assert fail; Values (%s) and (%s) are not equal\\n", __FILE__, __LINE__, #var, #ref); \
-        return 1; \
-    }
-
-#define assert_neq(var, ref) \
-   if (var == ref) { \
-        fprintf(stderr, \
-            "\\n[TCT][%s][Line : %d] Assert fail; Values (%s) and (%s) are equal\\n", __FILE__, __LINE__, #var, #ref); \
-        return 1; \
-    }
-
-#define assert_gt(var, ref) \
-    if (var <= ref) { \
-        fprintf(stderr, \
-            "\\n[TCT][%s][Line : %d] Assert fail; Values (%s) is not greater than (%s)\\n", __FILE__, __LINE__, #var, #ref); \
-        return 1; \
-    }
-
-#define assert_geq(var, ref) \
-    if (var < ref) { \
-        fprintf(stderr, \
-            "\\n[TCT][%s][Line : %d] Assert fail; Values (%s) is not greater than or equal to (%s)\\n", __FILE__, __LINE__, #var, #ref); \
-        return 1; \
-    }
-
-#define assert_lt(var, ref) \
-    if (var >= ref) { \
-        fprintf(stderr, \
-            "\\n[TCT][%s][Line : %d] Assert fail; Values (%s) is not lower than (%s)\\n", __FILE__, __LINE__, #var, #ref); \
-        return 1; \
-    }
-
-#define assert_leq(var, ref) \
-    if (var > ref) { \
-        fprintf(stderr, \
-            "\\n[TCT][%s][Line : %d] Assert fail; Values (%s) is not lower than or equal to (%s)\\n", __FILE__, __LINE__, #var, #ref); \
-        return 1; \
-    }
-
-#endif //  _ASSERT_H_
diff --git a/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/plugin/native_templates/inc/assert_common.h b/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/plugin/native_templates/inc/assert_common.h
deleted file mode 100755 (executable)
index 0a3e388..0000000
+++ /dev/null
@@ -1,83 +0,0 @@
-#ifndef __ASSERT_COMMON_H__
-#define __ASSERT_COMMON_H__
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <app.h>
-
-int utc_result;
-
-#define assert_with_exit(exp) do { \
-               if (!(exp)) { \
-                       fprintf(stderr, \
-                               "Assert fail in %s:%d\n", __FILE__, __LINE__); \
-                       fprintf(stderr, \
-                               "Following expression is not true:\n" \
-                               "%s\n", #exp); \
-                       utc_result = 1; \
-                       ui_app_exit(); \
-                       return 1; \
-               } \
-       } while (0)
-
-#define assert_eq_with_exit(var, ref) do { \
-               if (var != ref) { \
-                       fprintf(stderr, \
-                               "Assert fail in %s:%d\n", __FILE__, __LINE__); \
-                       fprintf(stderr, \
-                               "Values \"%s\" and \"%s\" are not equal:\n" \
-                               "%s == %d, %s == %d\n", \
-                               #var, #ref, #var, (int)var, #ref, (int)ref); \
-                       utc_result = 1; \
-                       ui_app_exit(); \
-                       return 1; \
-               } \
-       } while (0)
-
-#define assert_neq_with_exit(var, ref) do { \
-               if (var == ref) { \
-                       fprintf(stderr, \
-                               "Assert fail in %s:%d\n", __FILE__, __LINE__); \
-                       fprintf(stderr, \
-                               "Values \"%s\" and \"%s\" are equal:\n" \
-                               "%s == %s == %d\n", \
-                               #var, #ref, #var, #ref, (int)ref); \
-                       utc_result = 1; \
-                       ui_app_exit(); \
-                       return 1; \
-               } \
-       } while (0)
-
-#define assert_eq_without_exit(var, ref) do { \
-               if (var != ref) { \
-                       fprintf(stderr, \
-                               "Assert fail in %s:%d\n", __FILE__, __LINE__); \
-                       fprintf(stderr, \
-                               "Values \"%s\" and \"%s\" are not equal:\n" \
-                               "%s == %d, %s == %d\n", \
-                               #var, #ref, #var, (int)var, #ref, (int)ref); \
-                       utc_result = 1; \
-                       return 1; \
-               } \
-       } while (0)
-
-#define assert_neq_without_exit(var, ref) do { \
-               if (var == ref) { \
-                       fprintf(stderr, \
-                               "Assert fail in %s:%d\n", __FILE__, __LINE__); \
-                       fprintf(stderr, \
-                               "Values \"%s\" and \"%s\" are equal:\n" \
-                               "%s == %s == %d\n", \
-                               #var, #ref, #var, #ref, (int)ref); \
-                       utc_result = 1; \
-                       return 1; \
-               } \
-       } while (0)
-
-#define normal_exit(result) do { \
-               utc_result = result; \
-               ui_app_exit(); \
-       } while (0)
-
-
-#endif /* __ASSERT_COMMON_H__ */
diff --git a/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/plugin/native_templates/inc/tct_common.h b/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/plugin/native_templates/inc/tct_common.h
deleted file mode 100755 (executable)
index 85fff6e..0000000
+++ /dev/null
@@ -1,190 +0,0 @@
-//
-// Copyright (c) 2014 Samsung Electronics Co., Ltd.
-//
-// Licensed under the Apache License, Version 2.0 (the License);
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-//
-#ifndef _TCT_COMMON_H_
-#define _TCT_COMMON_H_
-
-#include "assert.h"
-
-#include <malloc.h>
-#include <stdbool.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <unistd.h>
-#include <string.h>
-#include <sys/stat.h>
-#include <system_info.h>
-
-#define DEBUG 1
-#define ERR_LOG "/tmp/tclog"
-#define TC_RESULT "/tmp/tcresult"
-#define UTC_LOG "/tmp/utclog_core"
-#define CONFIGFILE_PATH "/tmp/TC_Config.txt"
-#define CONFIG_LINE_LEN_MAX                    2048
-#define CONFIG_VALUE_LEN_MAX           1024
-
-FILE *g_fpLog;
-FILE *g_fpLogDump;
-
-#define FPRINTF(...) {\
-       g_fpLog = fopen(ERR_LOG, "a");\
-       fprintf(g_fpLog, __VA_ARGS__);\
-       fclose(g_fpLog);\
-}
-
-#define DUMP_UTC_ERRLOG() {\
-       g_fpLogDump = freopen(ERR_LOG, "w", stderr);\
-       fflush(stderr);\
-}
-
-#define CLOSE_UTC_ERRLOG() {\
-       if(g_fpLogDump) \
-       {       fclose(g_fpLogDump); g_fpLogDump = NULL; }\
-}
-
-#define PRINT_UTC_LOG(...) {\
-       g_fpLog = fopen(UTC_LOG, "a");\
-       fprintf(g_fpLog, __VA_ARGS__);\
-       fclose(g_fpLog);\
-}
-
-
-#define PRINT_TC_RESULT(...) {\
-       g_fpLog = fopen(TC_RESULT, "w");\
-       fprintf(g_fpLog, __VA_ARGS__);\
-       fclose(g_fpLog);\
-}
-
-
-#define IS_FEATURE_SUPPORTED(feature_name, featureFlag, ModuleName)\
-{\
-       if ( !(TCTCheckSystemInfoFeatureSupported(feature_name, ModuleName)) )\
-{\
-       featureFlag = false;\
-}\
-       else\
-{\
-       featureFlag = true;\
-}\
-}
-
-#define PRINT_RESULT(eCompare, eRetVal, API, Error) {\
-       if ( eRetVal == eCompare )\
-{\
-       if ( DEBUG )\
-{\
-       FPRINTF("[Line : %d][%s] %s passed\\n", __LINE__, API_NAMESPACE, API);\
-}\
-}\
-       else \
-{\
-       FPRINTF("[Line : %d][%s] %s failed, error returned = %s [%d]\\n", __LINE__, API_NAMESPACE, API, Error, eRetVal);\
-       return 1;\
-}\
-}
-
-#define PRINT_RESULT_NORETURN(eCompare, eRetVal, API, Error) {\
-       if ( eRetVal == eCompare )\
-{\
-       if ( DEBUG )\
-{\
-       FPRINTF("[Line : %d][%s] %s passed\\n", __LINE__, API_NAMESPACE, API);\
-}\
-}\
-       else \
-{\
-       FPRINTF("[Line : %d][%s] %s failed, error returned = %s [%d]\\n", __LINE__, API_NAMESPACE, API, Error, eRetVal);\
-}\
-}
-
-#define PRINT_RESULT_CLEANUP(eCompare, eRetVal, API, Error, FreeResource) {\
-       if ( eRetVal == eCompare )\
-{\
-       if ( DEBUG )\
-{\
-       FPRINTF("[Line : %d][%s] %s passed\\n", __LINE__, API_NAMESPACE, API);\
-}\
-}\
-else \
-{\
-       FPRINTF("[Line : %d][%s] %s failed, error returned = %s [%d]\\n", __LINE__, API_NAMESPACE, API, Error, eRetVal);\
-       FreeResource;\
-       return 1;\
-}\
-}
-
-
-#define PRINT_RESULT(eCompare, eRetVal, API, Error) {\
-       if ( eRetVal == eCompare )\
-{\
-       if ( DEBUG )\
-{\
-       FPRINTF("[Line : %d][%s] %s passed\\n", __LINE__, API_NAMESPACE, API);\
-}\
-}\
-       else \
-{\
-       FPRINTF("[Line : %d][%s] %s failed, error returned = %s [%d]\\n", __LINE__, API_NAMESPACE, API, Error, eRetVal);\
-       return 1;\
-}\
-}
-
-
-#define CHECK_VALUE_STRING(StringVariable, API) {\
-       if ( StringVariable == NULL )\
-{\
-       FPRINTF("[Line : %d][%s] %s failed, error returned = value returned is NULL\\n", __LINE__, API_NAMESPACE, API);\
-       return 1;\
-}\
-       else if ( DEBUG )\
-{\
-       FPRINTF("[Line : %d][%s] value returned = %s\\n", __LINE__, API_NAMESPACE, StringVariable);\
-}\
-       free(StringVariable);\
-       StringVariable = NULL;\
-}
-
-#define CHECK_VALUE_INT(Variable, API) {\
-       if ( Variable == 0 )\
-{\
-       FPRINTF("[Line : %d][%s] %s failed, error returned = value returned is Zero\\n", __LINE__, API_NAMESPACE, API);\
-       return 1;\
-}\
-       else if ( DEBUG )\
-{\
-       FPRINTF("[Line : %d][%s] value returned = %d\\n", __LINE__, API_NAMESPACE, Variable);\
-}\
-}
-
-#define CHECK_HANDLE(Handle, API) {\
-       if ( Handle == NULL )\
-{\
-       FPRINTF("[Line : %d][%s] %s failed, error returned = Handle returned is NULL\\n", __LINE__, API_NAMESPACE, API);\
-       return 1;\
-}\
-}
-
-#define FREE_MEMORY(buffer) {\
-       if ( buffer != NULL )\
-{\
-       free(buffer);\
-       buffer = NULL;\
-}\
-}
-
-bool TCTCheckSystemInfoFeatureSupported(char* pszKey, char* pszModuleName);
-char* TCTSystemInfoGetError(int nRet);
-bool GetValueFromConfigFile(char* pstrKeyString, char* pstrValue, char* pstrModule);
-#endif // _TCT_COMMON_H_
diff --git a/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/plugin/native_templates/inc/testcase.h b/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/plugin/native_templates/inc/testcase.h
deleted file mode 100755 (executable)
index 63584c9..0000000
+++ /dev/null
@@ -1,33 +0,0 @@
-//
-// Copyright (c) 2014 Samsung Electronics Co., Ltd.
-//
-// Licensed under the Apache License, Version 2.0 (the License);
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-//
-#ifndef _TESTCASE_H_
-#define _TESTCASE_H_
-
-/* pointer to startup/cleanup functions */
-typedef void (*void_fun_ptr)(void);
-
-/* pointer to testcase functions */
-typedef int (*tc_fun_ptr)(void);
-
-/* struct describing specific testcase */
-typedef struct testcase_s {
-    const char* name;
-    tc_fun_ptr function;
-    void_fun_ptr startup;
-    void_fun_ptr cleanup;
-} testcase;
-
-#endif // _TESTCASE_H_
diff --git a/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/plugin/native_templates/inc/{TESTSUITE_NAME}.h b/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/plugin/native_templates/inc/{TESTSUITE_NAME}.h
deleted file mode 100755 (executable)
index f88b5ce..0000000
+++ /dev/null
@@ -1,27 +0,0 @@
-//
-// Copyright (c) 2014 Samsung Electronics Co., Ltd.
-//
-// Licensed under the Apache License, Version 2.0 (the License);
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-//
-#ifndef __{TESTSUITE_NAME}_H__
-#define __{TESTSUITE_NAME}_H__
-
-#include "testcase.h"
-#include "tct_common.h"
-
-
-testcase tc_array[] = {
-    {NULL, NULL}
-};
-
-#endif
diff --git a/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/plugin/native_templates/project_def.prop b/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/plugin/native_templates/project_def.prop
deleted file mode 100755 (executable)
index 9156e17..0000000
+++ /dev/null
@@ -1,61 +0,0 @@
-
-# Project Name
-APPNAME = {TESTSUITE_NAME}
-
-# Project Type
-type = app
-
-# Project Profile
-profile = mobile-2.4
-
-# C Sources
-USER_SRCS = src/tct_common.c src/{TESTSUITE_NAME}.c
-
-# EDC Sources
-USER_EDCS =  
-
-# PO Sources
-USER_POS = 
-
-# User Defines
-USER_DEFS = 
-USER_CPP_DEFS = 
-
-# User Undefines
-USER_UNDEFS = 
-USER_CPP_UNDEFS = 
-
-# User Libraries
-USER_LIBS = 
-
-# User Objects
-USER_OBJS = 
-USER_OBJS_ABS = 
-
-# User Includes
-## C Compiler
-USER_INC_DIRS = inc 
-USER_INC_DIRS_ABS = 
-USER_INC_FILES = 
-USER_INC_FILES_ABS = 
-## C++ Compiler
-USER_CPP_INC_DIRS = 
-USER_CPP_INC_DIRS_ABS = 
-USER_CPP_INC_FILES = 
-USER_CPP_INC_FILES_ABS = 
-
-# User Library Path
-USER_LIB_DIRS = 
-USER_LIB_DIRS_ABS = 
-
-# EDC Resource Path
-USER_EDCS_IMAGE_DIRS = 
-USER_EDCS_IMAGE_DIRS_ABS = 
-USER_EDCS_SOUND_DIRS = 
-USER_EDCS_SOUND_DIRS_ABS = 
-USER_EDCS_FONT_DIRS = 
-USER_EDCS_FONT_DIRS_ABS = 
-
-# EDC Flags
-USER_EXT_EDC_KEYS = 
-
diff --git a/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/plugin/native_templates/shared/res/res/org.tizen.helloworld-1.0.0-arm.tpk b/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/plugin/native_templates/shared/res/res/org.tizen.helloworld-1.0.0-arm.tpk
deleted file mode 100755 (executable)
index 502b223..0000000
Binary files a/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/plugin/native_templates/shared/res/res/org.tizen.helloworld-1.0.0-arm.tpk and /dev/null differ
diff --git a/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/plugin/native_templates/shared/res/res/org.tizen.helloworld-1.0.0-i386.tpk b/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/plugin/native_templates/shared/res/res/org.tizen.helloworld-1.0.0-i386.tpk
deleted file mode 100755 (executable)
index 8569cb7..0000000
Binary files a/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/plugin/native_templates/shared/res/res/org.tizen.helloworld-1.0.0-i386.tpk and /dev/null differ
diff --git a/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/plugin/native_templates/shared/res/res/org.tizen.helloworld2-1.0.0-arm.tpk b/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/plugin/native_templates/shared/res/res/org.tizen.helloworld2-1.0.0-arm.tpk
deleted file mode 100755 (executable)
index 757c942..0000000
Binary files a/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/plugin/native_templates/shared/res/res/org.tizen.helloworld2-1.0.0-arm.tpk and /dev/null differ
diff --git a/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/plugin/native_templates/shared/res/res/org.tizen.helloworld2-1.0.0-i386.tpk b/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/plugin/native_templates/shared/res/res/org.tizen.helloworld2-1.0.0-i386.tpk
deleted file mode 100755 (executable)
index 67e98f2..0000000
Binary files a/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/plugin/native_templates/shared/res/res/org.tizen.helloworld2-1.0.0-i386.tpk and /dev/null differ
diff --git a/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/plugin/native_templates/shared/res/{TESTSUITE_NAME}.png b/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/plugin/native_templates/shared/res/{TESTSUITE_NAME}.png
deleted file mode 100755 (executable)
index 9765b1b..0000000
Binary files a/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/plugin/native_templates/shared/res/{TESTSUITE_NAME}.png and /dev/null differ
diff --git a/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/plugin/native_templates/src/tct_common.c b/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/plugin/native_templates/src/tct_common.c
deleted file mode 100755 (executable)
index 51059ae..0000000
+++ /dev/null
@@ -1,140 +0,0 @@
-//
-// Copyright (c) 2014 Samsung Electronics Co., Ltd.
-//
-// Licensed under the Apache License, Version 2.0 (the License);
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-//
-
-#include "tct_common.h"
-
-/**
-* @function            TCTCheckSystemInfoFeatureSupported
-* @description         Check the supported feature for the given key value
-* @parameter           char* pszKey : key value, char* pszModuleName : module name
-* @return                      true if supported else false
-*/
-bool TCTCheckSystemInfoFeatureSupported(char* pszKey, char* pszModuleName)
-{
-       if ( NULL == pszKey )
-       {
-               FPRINTF("[Line : %d][%s] Null key value passed to function : TCTCheckSystemInfoFeatureSupported\\n", __LINE__, pszModuleName);
-               return false;
-       }
-
-       bool bValue = false;
-       int nRet = system_info_get_platform_bool (pszKey, &bValue);
-
-       if ( nRet != SYSTEM_INFO_ERROR_NONE )
-       {
-               FPRINTF("[Line : %d][%s] system_info_get_platform_bool returned (error = %s) for (key = %s)\\n", __LINE__, pszModuleName, TCTSystemInfoGetError(nRet), pszKey);
-               return false;
-       }
-
-       if ( bValue )
-       {
-               FPRINTF("[Line : %d][%s] Feature %s is supported\\n", __LINE__, pszModuleName, pszKey);
-       }
-       else
-       {
-               FPRINTF("[Line : %d][%s] Feature %s is not supported\\n", __LINE__, pszModuleName, pszKey);
-       }
-
-
-       return bValue;
-}
-
-/**
-* @function            TCTSystemInfoGetError
-* @description         Maps error enums to string values
-* @parameter           nRet : error code returned
-* @return                      error string
-*/
-char* TCTSystemInfoGetError(int nRet)
-{
-       char *szErrorVal = NULL;
-
-       switch ( nRet )
-       {
-       case SYSTEM_INFO_ERROR_NONE:                            szErrorVal = "SYSTEM_INFO_ERROR_NONE";                                  break;
-       case SYSTEM_INFO_ERROR_INVALID_PARAMETER:       szErrorVal = "SYSTEM_INFO_ERROR_INVALID_PARAMETER";             break;
-       case SYSTEM_INFO_ERROR_IO_ERROR:                        szErrorVal = "SYSTEM_INFO_ERROR_IO_ERROR";                              break;
-       case SYSTEM_INFO_ERROR_OUT_OF_MEMORY :          szErrorVal = "SYSTEM_INFO_ERROR_OUT_OF_MEMORY";                 break;
-       default :                                                                       szErrorVal = "Unknown error";                                                   break;
-       }
-
-       return szErrorVal;
-}
-
-/**
-* @function            GetValueFromConfigFile
-* @description         Get the corresponding value for a key from config file
-* @parameter           pstrKeyString : Key, pstrValue : Value
-* @return                      true for success, false for failure
-*/ 
-bool GetValueFromConfigFile(char* pstrKeyString, char* pstrValue, char* pstrModule)
-{
-       if ( NULL == pstrKeyString )
-       {
-               FPRINTF("[Line : %d][%s] The key string provided to fetch config file value is null\\n", __LINE__, pstrModule);
-               return false;
-       }
-
-
-       FILE* pfilePtr = fopen(CONFIGFILE_PATH, "r");
-       if ( NULL == pfilePtr )
-       {
-               FPRINTF("[Line : %d][%s] Unable to open configuration file : %s\\n", __LINE__, pstrModule, CONFIGFILE_PATH);
-               return false;
-       }
-
-       char* pszKey = NULL;
-       char* pszValue = NULL;
-       char* pszDelim = "=\n";
-       char szConfigLine[CONFIG_LINE_LEN_MAX] = {0,};
-
-       while ( !feof(pfilePtr) )
-       {
-               if ( fgets(szConfigLine, CONFIG_LINE_LEN_MAX, pfilePtr) != NULL )
-               {
-                       pszKey = strtok(szConfigLine, pszDelim);
-                       pszValue = strtok(NULL, pszDelim);
-
-                       if ( 0 == strcmp(pszKey, pstrKeyString) )
-                       {
-#if DEBUG
-                               FPRINTF("[Line : %d][%s][Key = %s;Config value = %s]\\n", __LINE__, pstrModule, pszKey, pszValue);
-#endif
-                               break;
-                       }
-
-                       pszKey = NULL;
-                       pszValue = NULL;
-               }
-       }
-
-       fclose(pfilePtr);
-       if ( NULL == pszValue )
-       {
-               FPRINTF("[Line : %d][%s][Key = %s;Unable to retrieve config value for this key. Check key at config file location : %s]\\n", __LINE__, pstrModule, pstrKeyString, CONFIGFILE_PATH);
-               return false;
-       }
-
-       if (strlen(pszValue) >= CONFIG_VALUE_LEN_MAX )
-       {
-               FPRINTF("[Line : %d][%s][Key = %s;Config Value should be less than %d characters in length]\\n", __LINE__, pstrModule, pszKey, CONFIG_VALUE_LEN_MAX);
-               return false;
-       }
-
-       memset(pstrValue, 0, CONFIG_VALUE_LEN_MAX);
-       strcpy(pstrValue, pszValue);
-       return true;
-}
diff --git a/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/plugin/native_templates/src/{TESTSUITE_NAME}.c b/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/plugin/native_templates/src/{TESTSUITE_NAME}.c
deleted file mode 100755 (executable)
index 42d5fe3..0000000
+++ /dev/null
@@ -1,122 +0,0 @@
-//
-// Copyright (c) 2014 Samsung Electronics Co., Ltd.
-//
-// Licensed under the Apache License, Version 2.0 (the License);
-// you may not use this g_TCFILE except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-//
-#include <stdio.h>
-#include <string.h>
-#include "{TESTSUITE_NAME}.h"
-#include <malloc.h>
-#include <unistd.h>
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <sys/wait.h>
-#include <glib.h>
-#include <stdbool.h>
-#include "tct_common.h"
-#include <app.h>
-#include <dlog.h>
-#include <errno.h>
-
-#include <Elementary.h>
-#include <efl_extension.h>
-
-typedef struct appdata {
-       Evas_Object *win;
-       Evas_Object *conform;
-       Evas_Object *label;
-} appdata_s;
-
-static bool app_create(void *data)
-{
-       return true;
-}
-
-static void app_control(app_control_h app_control, void *data)
-{
-       char* pszGetTCName = NULL;
-       int i=0, result=0, nRet=0;
-       nRet = app_control_get_extra_data(app_control, "testcase_name", &pszGetTCName);
-       if(nRet != APP_CONTROL_ERROR_NONE)
-       {
-               dlog_print(DLOG_ERROR, "NativeTCT", "[%s:%d] app_control_get_extra_data returns error = %d", __FUNCTION__, __LINE__, nRet);
-               PRINT_UTC_LOG("\\n[%s][Line : %d]Unable to fetch test case name: app_control_get_extra_data API call fails\\n", __FILE__, __LINE__);
-               PRINT_TC_RESULT("%d",1);
-               FREE_MEMORY(pszGetTCName);
-               return;
-       }
-
-       dlog_print(DLOG_INFO, "NativeTCT", "[%s:%d] Executing TC Name = %s", __FUNCTION__, __LINE__, pszGetTCName);
-       for ( i = 0; tc_array[i].name; i++ )
-       {
-               if ( 0 == strncmp(pszGetTCName, tc_array[i].name, strlen(pszGetTCName)) )
-               {
-                       DUMP_UTC_ERRLOG();
-                       if ( tc_array[i].startup )
-                       {
-                               dlog_print(DLOG_INFO, "NativeTCT", "%s : Start up", pszGetTCName);
-                               tc_array[i].startup();
-                       }
-
-                       dlog_print(DLOG_INFO, "NativeTCT", "%s : Body", pszGetTCName);
-                       result = tc_array[i].function();
-                       dlog_print(DLOG_INFO, "NativeTCT", "%s returns value = %d", pszGetTCName, result);
-
-                       if ( tc_array[i].cleanup )
-                       {
-                               dlog_print(DLOG_INFO, "NativeTCT", "%s : Clean up", pszGetTCName);
-                               tc_array[i].cleanup();
-                       }
-
-                       CLOSE_UTC_ERRLOG();
-                       PRINT_TC_RESULT("%d",result);
-                       FREE_MEMORY(pszGetTCName);
-                       return;
-               }
-       }
-
-       dlog_print(DLOG_ERROR, "NativeTCT", "[%s:%d] Unable to execute %s : Unknown Test Case Name", __FUNCTION__, __LINE__, pszGetTCName);
-       PRINT_UTC_LOG("\\n[%s][Line : %d]Unable to execute %s : Unknown Test Case Name\\n", __FILE__, __LINE__, pszGetTCName);
-       PRINT_TC_RESULT("%d",1);
-       FREE_MEMORY(pszGetTCName);
-       return;
-}
-
-static void app_terminate(void *data)
-{
-       dlog_print(DLOG_INFO, "NativeTCT", "[%s:%d] Application Package is now Terminating", __FUNCTION__, __LINE__);
-}
-
-int main(int argc, char *argv[])
-{
-       int ret = 0;
-       appdata_s ad = {0,};
-
-       ui_app_lifecycle_callback_s event_callback = {0,};
-       event_callback.create = app_create;
-       event_callback.terminate = app_terminate;
-       event_callback.app_control = app_control;
-
-       dlog_print(DLOG_INFO, "NativeTCT", "[%s:%d] Application Main Function is Invoked", __FUNCTION__, __LINE__);
-       ret = ui_app_main(argc, argv, &event_callback, &ad);
-       if (ret != APP_ERROR_NONE)
-       {
-               dlog_print(DLOG_ERROR, "NativeTCT", "Application ui_app_main call gets failed. err = %d", ret);
-               PRINT_UTC_LOG("\\n[%s][Line : %d]Application ui_app_main call gets failed. err = %d\\n", __FILE__, __LINE__, ret);
-               PRINT_TC_RESULT("%d",1);
-               return ret;
-       }
-
-       dlog_print(DLOG_INFO, "NativeTCT", "[%s:%d] Application Package is Terminated", __FUNCTION__, __LINE__);
-       return ret;
-}
diff --git a/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/plugin/native_templates/tizen-manifest.xml b/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/plugin/native_templates/tizen-manifest.xml
deleted file mode 100755 (executable)
index 1af5391..0000000
+++ /dev/null
@@ -1,11 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<manifest xmlns="http://tizen.org/ns/packages" api-version="2.4" package="org.tizen.{TESTSUITE_NAME}" version="1.0.0">
-       <profile name="mobile" />
-       <ui-application appid="org.tizen.{TESTSUITE_NAME}" exec="{TESTSUITE_NAME}" type="capp" multiple="false" taskmanage="true" nodisplay="false">
-               <icon>{TESTSUITE_NAME}.png</icon>
-               <label>{TESTSUITE_NAME}</label>
-       </ui-application>
-   <privileges>
-               <privilege></privilege>
-    </privileges>
-</manifest>
diff --git a/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/plugin/web_templates/COPYING b/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/plugin/web_templates/COPYING
deleted file mode 100755 (executable)
index 9485674..0000000
+++ /dev/null
@@ -1,25 +0,0 @@
-Copyright (c) 2015 Samsung Electronics Co.
-
-Redistribution and use in source and binary forms, with or without modification, 
-are permitted provided that the following conditions are met:
-
-* Redistributions of works must retain the original copyright notice, this list 
-  of conditions and the following disclaimer.
-* Redistributions in binary form must reproduce the original copyright notice, 
-  this list of conditions and the following disclaimer in the documentation 
-  and/or other materials provided with the distribution.
-* Neither the name of Intel Corporation nor the names of its contributors 
-  may be used to endorse or promote products derived from this work without 
-  specific prior written permission.
-
-THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS" 
-AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 
-IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 
-ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT, 
-INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, 
-BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 
-DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY 
-OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING 
-NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, 
-EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
diff --git a/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/plugin/web_templates/LICENSE.Apache-2.0 b/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/plugin/web_templates/LICENSE.Apache-2.0
deleted file mode 100755 (executable)
index d645695..0000000
+++ /dev/null
@@ -1,202 +0,0 @@
-
-                                 Apache License
-                           Version 2.0, January 2004
-                        http://www.apache.org/licenses/
-
-   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
-
-   1. Definitions.
-
-      "License" shall mean the terms and conditions for use, reproduction,
-      and distribution as defined by Sections 1 through 9 of this document.
-
-      "Licensor" shall mean the copyright owner or entity authorized by
-      the copyright owner that is granting the License.
-
-      "Legal Entity" shall mean the union of the acting entity and all
-      other entities that control, are controlled by, or are under common
-      control with that entity. For the purposes of this definition,
-      "control" means (i) the power, direct or indirect, to cause the
-      direction or management of such entity, whether by contract or
-      otherwise, or (ii) ownership of fifty percent (50%) or more of the
-      outstanding shares, or (iii) beneficial ownership of such entity.
-
-      "You" (or "Your") shall mean an individual or Legal Entity
-      exercising permissions granted by this License.
-
-      "Source" form shall mean the preferred form for making modifications,
-      including but not limited to software source code, documentation
-      source, and configuration files.
-
-      "Object" form shall mean any form resulting from mechanical
-      transformation or translation of a Source form, including but
-      not limited to compiled object code, generated documentation,
-      and conversions to other media types.
-
-      "Work" shall mean the work of authorship, whether in Source or
-      Object form, made available under the License, as indicated by a
-      copyright notice that is included in or attached to the work
-      (an example is provided in the Appendix below).
-
-      "Derivative Works" shall mean any work, whether in Source or Object
-      form, that is based on (or derived from) the Work and for which the
-      editorial revisions, annotations, elaborations, or other modifications
-      represent, as a whole, an original work of authorship. For the purposes
-      of this License, Derivative Works shall not include works that remain
-      separable from, or merely link (or bind by name) to the interfaces of,
-      the Work and Derivative Works thereof.
-
-      "Contribution" shall mean any work of authorship, including
-      the original version of the Work and any modifications or additions
-      to that Work or Derivative Works thereof, that is intentionally
-      submitted to Licensor for inclusion in the Work by the copyright owner
-      or by an individual or Legal Entity authorized to submit on behalf of
-      the copyright owner. For the purposes of this definition, "submitted"
-      means any form of electronic, verbal, or written communication sent
-      to the Licensor or its representatives, including but not limited to
-      communication on electronic mailing lists, source code control systems,
-      and issue tracking systems that are managed by, or on behalf of, the
-      Licensor for the purpose of discussing and improving the Work, but
-      excluding communication that is conspicuously marked or otherwise
-      designated in writing by the copyright owner as "Not a Contribution."
-
-      "Contributor" shall mean Licensor and any individual or Legal Entity
-      on behalf of whom a Contribution has been received by Licensor and
-      subsequently incorporated within the Work.
-
-   2. Grant of Copyright License. Subject to the terms and conditions of
-      this License, each Contributor hereby grants to You a perpetual,
-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-      copyright license to reproduce, prepare Derivative Works of,
-      publicly display, publicly perform, sublicense, and distribute the
-      Work and such Derivative Works in Source or Object form.
-
-   3. Grant of Patent License. Subject to the terms and conditions of
-      this License, each Contributor hereby grants to You a perpetual,
-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-      (except as stated in this section) patent license to make, have made,
-      use, offer to sell, sell, import, and otherwise transfer the Work,
-      where such license applies only to those patent claims licensable
-      by such Contributor that are necessarily infringed by their
-      Contribution(s) alone or by combination of their Contribution(s)
-      with the Work to which such Contribution(s) was submitted. If You
-      institute patent litigation against any entity (including a
-      cross-claim or counterclaim in a lawsuit) alleging that the Work
-      or a Contribution incorporated within the Work constitutes direct
-      or contributory patent infringement, then any patent licenses
-      granted to You under this License for that Work shall terminate
-      as of the date such litigation is filed.
-
-   4. Redistribution. You may reproduce and distribute copies of the
-      Work or Derivative Works thereof in any medium, with or without
-      modifications, and in Source or Object form, provided that You
-      meet the following conditions:
-
-      (a) You must give any other recipients of the Work or
-          Derivative Works a copy of this License; and
-
-      (b) You must cause any modified files to carry prominent notices
-          stating that You changed the files; and
-
-      (c) You must retain, in the Source form of any Derivative Works
-          that You distribute, all copyright, patent, trademark, and
-          attribution notices from the Source form of the Work,
-          excluding those notices that do not pertain to any part of
-          the Derivative Works; and
-
-      (d) If the Work includes a "NOTICE" text file as part of its
-          distribution, then any Derivative Works that You distribute must
-          include a readable copy of the attribution notices contained
-          within such NOTICE file, excluding those notices that do not
-          pertain to any part of the Derivative Works, in at least one
-          of the following places: within a NOTICE text file distributed
-          as part of the Derivative Works; within the Source form or
-          documentation, if provided along with the Derivative Works; or,
-          within a display generated by the Derivative Works, if and
-          wherever such third-party notices normally appear. The contents
-          of the NOTICE file are for informational purposes only and
-          do not modify the License. You may add Your own attribution
-          notices within Derivative Works that You distribute, alongside
-          or as an addendum to the NOTICE text from the Work, provided
-          that such additional attribution notices cannot be construed
-          as modifying the License.
-
-      You may add Your own copyright statement to Your modifications and
-      may provide additional or different license terms and conditions
-      for use, reproduction, or distribution of Your modifications, or
-      for any such Derivative Works as a whole, provided Your use,
-      reproduction, and distribution of the Work otherwise complies with
-      the conditions stated in this License.
-
-   5. Submission of Contributions. Unless You explicitly state otherwise,
-      any Contribution intentionally submitted for inclusion in the Work
-      by You to the Licensor shall be under the terms and conditions of
-      this License, without any additional terms or conditions.
-      Notwithstanding the above, nothing herein shall supersede or modify
-      the terms of any separate license agreement you may have executed
-      with Licensor regarding such Contributions.
-
-   6. Trademarks. This License does not grant permission to use the trade
-      names, trademarks, service marks, or product names of the Licensor,
-      except as required for reasonable and customary use in describing the
-      origin of the Work and reproducing the content of the NOTICE file.
-
-   7. Disclaimer of Warranty. Unless required by applicable law or
-      agreed to in writing, Licensor provides the Work (and each
-      Contributor provides its Contributions) on an "AS IS" BASIS,
-      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
-      implied, including, without limitation, any warranties or conditions
-      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
-      PARTICULAR PURPOSE. You are solely responsible for determining the
-      appropriateness of using or redistributing the Work and assume any
-      risks associated with Your exercise of permissions under this License.
-
-   8. Limitation of Liability. In no event and under no legal theory,
-      whether in tort (including negligence), contract, or otherwise,
-      unless required by applicable law (such as deliberate and grossly
-      negligent acts) or agreed to in writing, shall any Contributor be
-      liable to You for damages, including any direct, indirect, special,
-      incidental, or consequential damages of any character arising as a
-      result of this License or out of the use or inability to use the
-      Work (including but not limited to damages for loss of goodwill,
-      work stoppage, computer failure or malfunction, or any and all
-      other commercial damages or losses), even if such Contributor
-      has been advised of the possibility of such damages.
-
-   9. Accepting Warranty or Additional Liability. While redistributing
-      the Work or Derivative Works thereof, You may choose to offer,
-      and charge a fee for, acceptance of support, warranty, indemnity,
-      or other liability obligations and/or rights consistent with this
-      License. However, in accepting such obligations, You may act only
-      on Your own behalf and on Your sole responsibility, not on behalf
-      of any other Contributor, and only if You agree to indemnify,
-      defend, and hold each Contributor harmless for any liability
-      incurred by, or claims asserted against, such Contributor by reason
-      of your accepting any such warranty or additional liability.
-
-   END OF TERMS AND CONDITIONS
-
-   APPENDIX: How to apply the Apache License to your work.
-
-      To apply the Apache License to your work, attach the following
-      boilerplate notice, with the fields enclosed by brackets "[]"
-      replaced with your own identifying information. (Don't include
-      the brackets!)  The text should be enclosed in the appropriate
-      comment syntax for the file format. We also recommend that a
-      file or class name and description of purpose be included on the
-      same "printed page" as the copyright notice for easier
-      identification within third-party archives.
-
-   Copyright [yyyy] [name of copyright owner]
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
diff --git a/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/plugin/web_templates/Makefile.am b/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/plugin/web_templates/Makefile.am
deleted file mode 100755 (executable)
index 0062d68..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-commondir = resources webrunner
-SUBDIRS = testcase $(commondir)
-docdir = $(prefix)/opt/{TESTSUITE_NAME}
-dist_doc_DATA = README tests.xml tests.full.xml NOTICE LICENSE.Apache-2.0 COPYING
diff --git a/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/plugin/web_templates/NOTICE b/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/plugin/web_templates/NOTICE
deleted file mode 100755 (executable)
index e6f64da..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-Copyright (c) 2015 Samsung Electronics Co., Ltd. All rights reserved.
-Copyright (c) 2012 Intel Corporation.
-Except as noted, this software is licensed under Apache License, Version 2 or BSD-3-Clause License.
-Please, see the LICENSE.Apache-2.0 file for Apache License, Version 2 terms and conditions
-or the COPYING file for BSD-3-Clause License.
diff --git a/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/plugin/web_templates/README b/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/plugin/web_templates/README
deleted file mode 100755 (executable)
index 564d9fc..0000000
+++ /dev/null
@@ -1,67 +0,0 @@
-----------------------------------------------
-License
-----------------------------------------------
-Copyright (c) 2015 Samsung Electronics Co. 
-
-Redistribution and use in source and binary forms, with or without modification,
-are permitted provided that the following conditions are met:
-
-* Redistributions of works must retain the original copyright notice, this list
-  of conditions and the following disclaimer.
-* Redistributions in binary form must reproduce the original copyright notice,
-  this list of conditions and the following disclaimer in the documentation
-  and/or other materials provided with the distribution.
-* Neither the name of Intel Corporation nor the names of its contributors
-  may be used to endorse or promote products derived from this work without
-  specific prior written permission.
-
-THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
-AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
-ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
-INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
-BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
-OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
-NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
-EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-Authors:
-
-
-----------------------------------------------
-Introduction
-----------------------------------------------
-This test suite is for testing Tizen {API_NAME} API, which covers the following specifications:
-
-
-
-----------------------------------------------
-Test Environment
-----------------------------------------------
-1. Testkit-stub must be installed on target device.
-2. Testkit-lite must be installed on test machine.
-
-
-----------------------------------------------
-Build and Run
-----------------------------------------------
-(Suppose you only get the source code and Testkit-Lite has been set up on your test machine.
- If you have obtained tct-alarm-tizen-tests ZIP packages, you can directly go to step 3 on the test machine;
- if you have not installed Testkit-Lite, you need to install the latest version.)
-
-Steps:
-1. Prepare for building by running the following command:
-   cd {TESTSUITE_NAME}
-
-2. Build ZIP package by running the following command:
-   ./pack.sh
-
-3. Unzip the package on the test machine by running the following command:
-   unzip -o {TESTSUITE_NAME}-<version>.zip -d /opt/usr/media/tct
-
-4. Install the package on the test machine by running the following command:
-   /opt/usr/media/tct/opt/{TESTSUITE_NAME}/inst.sh
-
-5. Run test cases by running the following command on host:
-   testkit-lite -f device:/opt/usr/media/tct/opt/{TESTSUITE_NAME}/tests.xml -e "WRTLauncher" -o {TESTSUITE_NAME}.results.xml
diff --git a/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/plugin/web_templates/autogen b/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/plugin/web_templates/autogen
deleted file mode 100755 (executable)
index c5a7472..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
-#!/bin/sh
-
-autoreconf --install
diff --git a/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/plugin/web_templates/config.xml b/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/plugin/web_templates/config.xml
deleted file mode 100755 (executable)
index 3cdca4e..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<widget id='http://tizen.org/test/{TESTSUITE_NAME}' xmlns='http://www.w3.org/ns/widgets' xmlns:tizen='http://tizen.org/ns/widgets' version='{TIZEN_VERSION}'>
-  <name>{TESTSUITE_NAME}</name>
-  <icon src="icon.png" height="117" width="117"/>
-  <tizen:application id="{APP_ID}" package="{PACK_ID}" required_version="{REQUIRED_VER}"/>
-  <tizen:setting screen-orientation="landscape" />
-  <tizen:setting background-support="enable"/>
-</widget>
diff --git a/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/plugin/web_templates/configure.ac b/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/plugin/web_templates/configure.ac
deleted file mode 100755 (executable)
index 62e72ed..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-AC_INIT([{TESTSUITE_NAME}], [2.4], [kimsamsung@samsung.com])
-AM_INIT_AUTOMAKE([-Wall -Werror foreign])
-
-AC_CONFIG_FILES([Makefile \
-testcase/Makefile \
-resources/Makefile \
-webrunner/Makefile])
-AC_OUTPUT
diff --git a/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/plugin/web_templates/icon.png b/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/plugin/web_templates/icon.png
deleted file mode 100755 (executable)
index aa50240..0000000
Binary files a/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/plugin/web_templates/icon.png and /dev/null differ
diff --git a/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/plugin/web_templates/inst.sh b/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/plugin/web_templates/inst.sh
deleted file mode 100755 (executable)
index b21fb56..0000000
+++ /dev/null
@@ -1,89 +0,0 @@
-#!/bin/bash
-wgt_installer="pkgcmd"
-NAME=$(basename $(cd $(dirname $0);pwd))
-
-#parse params
-USAGE="Usage: ./inst.sh [-i] [-u]
-  -i install wgt and config environment 
-  -u uninstall wgt and remove source file
-[-i] option was set as default."
-
-function installpkg(){
-### install wgt ###
-type $wgt_installer > /dev/null 2>&1
-if [ $? -eq 0 ]; then
-    [ -e /opt/usr/media/tct/opt/$NAME/$NAME.wgt ] && $wgt_installer -i -t wgt -q -p /opt/usr/media/tct/opt/$NAME/$NAME.wgt
-    if [ $? -eq 0 ]; then
-        echo "Install /opt/usr/media/tct/opt/$NAME/$NAME.wgt to /opt/usr/apps/`wrt-launcher -l 2> /dev/null | grep $NAME | tail -n 1 | awk '{ print $(NF-1) }'` done"
-        echo "$(wrt-launcher -l | grep $NAME | awk '{ print $(NF-1) }') sdbd rw" | smackload
-    else
-        echo "Install /opt/$NAME/$NAME.wgt fail ..."
-    fi
-    sync
-fi
-}
-
-function uninstallpkg(){
-### uninstall wgt ###
-type $wgt_installer > /dev/null 2>&1
-if [ $? -eq 0 ]; then
-    package_id=`wrt-launcher -l 2> /dev/null | grep $NAME | tail -n 1 | awk '{ print $(NF-1) }'`
-    if [ -n "$(ps -ef | grep $package_id | grep -v grep | awk '{print $2}')" ]; then
-        for i in $(ps -ef | grep $package_id | grep -v grep | awk '{print $2}')
-        do
-            kill -9 $i
-            if [ "$?" -ne 0 ]; then
-                echo "Kill the processes of $NAME fail ..."
-            else
-                echo "Kill the processes of $NAME done"
-            fi
-        done
-    fi
-    if [ -n "$package_id" ]; then
-        $wgt_installer -u -q -t wgt -n $package_id
-        if [ "$?" -ne 0 ]; then
-                echo "Uninstall $NAME fail ..."
-        else
-                echo "Uninstall $NAME done"
-        fi
-        sync
-    fi
-    for i in testalar00
-    do
-        if [ -n "$(ps -ef | grep $i | grep -v grep | awk '{print $2}')" ]; then
-            kill -9 $(ps -ef | grep $i | grep -v grep | awk '{print $2}')
-            if [ "$?" -ne 0 ]; then
-                echo "Kill the processes of $i fail ..."
-            else
-                echo "Kill the processes of $i done"
-           fi
-        fi
-        INSTALLED=`wrt-launcher -l | awk /$i/' { print $(NF); }'`
-        if [ -n "$INSTALLED" ] ; then
-            $wgt_installer -u -q -t wgt -n $i
-            if [ "$?" -ne 0 ]; then
-                echo "Uninstall $i fail ..."
-            else
-                echo "Uninstall $i done"
-            fi
-        fi
-    done
-fi
-
-### remove source file ###
-if [ -d /opt/usr/media/tct/opt/$NAME ];then
-    rm -rf /opt/usr/media/tct/opt/$NAME
-else
-    echo "Remove source file fail,please check if the source file exist: /opt/usr/media/tct/opt/$NAME ..."
-fi
-}
-
-case "$1" in
-    -h|--help) echo "$USAGE"
-               exit ;;
-    ""|-i) installpkg;;
-    -u) uninstallpkg;;
-    *) echo "Unknown option: $1"
-       echo "$USAGE"
-       exit ;;
-esac
diff --git a/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/plugin/web_templates/manifest.json b/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/plugin/web_templates/manifest.json
deleted file mode 100755 (executable)
index f8b3349..0000000
+++ /dev/null
@@ -1,13 +0,0 @@
-{
-    "version": "{TIZEN_VERSION}",
-    "name": "{TESTSUITE_NAME}",
-    "permissions": ["tabs", "unlimited_storage", "notifications", "http://*/*", "https://*/*"],
-    "description": "{TESTSUITE_NAME}",
-    "webapimanager": true,
-    "file_name": "manifest.json",
-    "app": {
-        "launch": {
-            "local_path": "index.html"
-        }
-    }
-}
diff --git a/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/plugin/web_templates/pack.sh b/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/plugin/web_templates/pack.sh
deleted file mode 100755 (executable)
index 5d069a1..0000000
+++ /dev/null
@@ -1,274 +0,0 @@
-#!/bin/bash
-source $(dirname $0)/$(basename $(pwd)).spec
-
-#parse params
-usage="Usage: ./pack.sh [-t <package type: wgt | apk | crx | xpk>]
-[-t wgt] option was set as default."
-
-if [[ $1 == "-h" || $1 == "--help" ]]; then
-    echo $usage
-    exit 1
-fi
-
-type="wgt"
-while getopts t: o
-do
-    case "$o" in
-    t) type=$OPTARG;;
-    *) echo $usage
-       exit 1;;
-    esac
-done
-
-if [[ $type == "wgt" || $type == "apk" || $type == "crx" || $type == "xpk" ]];then
-    echo "Create package with $type and raw source"
-else 
-    echo "Sorry,$type is not support... >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>"
-    echo "$usage"
-    exit 1
-fi
-
-if [[ -z $name || -z $version || -z $appname ]];then
-    echo "Package name or version not specified in setting file"
-    exit 1
-fi
-
-SRC_ROOT=$PWD
-BUILD_ROOT=/tmp/${name}_pack
-BUILD_DEST=/tmp/${name}
-
-# check precondition
-function check_precondition(){
-    which $1 > /dev/null 2>&1
-    if [ $? -ne 0 ]; then
-        echo "Error: no tool: $1"
-        exit 1
-    fi
-}
-check_precondition autoreconf
-check_precondition gcc
-check_precondition make
-
-# clean
-function clean_workspace(){
-echo "cleaning workspace... >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>"
-rm -rf $BUILD_ROOT $BUILD_DEST
-}
-
-clean_workspace
-mkdir -p $BUILD_ROOT $BUILD_DEST
-
-# copy source code
-rm -rf *.rpm *.tar.bz2 *.tar.gz *.zip
-cp -arf $SRC_ROOT/* $BUILD_ROOT/
-
-# build
-echo "build from workspace... >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>"
-cd  $BUILD_ROOT
-./autogen && ./configure --prefix=/ && make && make install DESTDIR=$BUILD_DEST
-if [ $? -ne 0 ];then
-    echo "build fail,please check Makefile.am and cofigure.ac... >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>"
-    clean_workspace
-    exit 1
-fi
-find $BUILD_DEST -name "Makefile*" -delete
-
-## function for create wgt apk xpk ##
-
-function create_wgt(){
-# create wgt
-cd $BUILD_DEST
-cp -a $BUILD_ROOT/manifest.json   $BUILD_DEST/
-cp -a $BUILD_ROOT/icon.png     $BUILD_DEST/
-cat > index.html << EOF
-<!doctype html>
-<head>
-    <meta http-equiv="Refresh" content="1; url=opt/$name/webrunner/index.html?testsuite=/opt/usr/media/tct/opt/$name/tests.xml">
-</head>
-EOF
-cp -f $BUILD_ROOT/config.xml $BUILD_DEST/config.xml
-zip -rq $BUILD_DEST/opt/$name/$name.wgt *
-if [ $? -ne 0 ];then
-    echo "Create $name.wgt fail.... >>>>>>>>>>>>>>>>>>>>>>>>>"
-    clean_workspace
-    exit 1
-fi
-
-# sign wgt
-if [ $sign -eq 1 ];then
-    # copy signing tool
-    echo "copy signing tool... >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>"
-    cp -arf $SRC_ROOT/../../tools/signing $BUILD_ROOT/signing
-    if [ $? -ne 0 ];then
-        echo "No signing tool found in $SRC_ROOT/../tools.... >>>>>>>>>>>>>>>>>>>>>>>>>"
-        clean_workspace
-        exit 1
-    fi
-    wgt=$(find $BUILD_DEST/opt/$name/ -name *.wgt)
-    for wgt in $(find $BUILD_DEST/opt/$name/ -name *.wgt);do
-        $BUILD_ROOT/signing/sign-widget.sh --dist platform $wgt
-        if [ $? -ne 0 ];then
-            echo "Please check your signature files... >>>>>>>>>>>>>>>>>>>>>>>>>"
-            clean_workspace
-            exit 1
-        fi
-    done
-fi
-}
-
-function create_apk(){
-cd $BUILD_DEST
-cat > index.html << EOF
-<!doctype html>
-<head>
-    <meta http-equiv="Refresh" content="1; url=opt/$name/webrunner/index.html?testsuite=../tests.xml&testprefix=../../..">
-</head>
-EOF
-cp $BUILD_DEST/opt/$name/tests.xml $BUILD_DEST/
-cp -a $BUILD_ROOT/icon.png     $BUILD_DEST/
-cp -r $SRC_ROOT/../tools/xwalk_app_template $BUILD_ROOT/xwalk_app_template
-
-cd $BUILD_ROOT/xwalk_app_template
-python make_apk.py --package=org.xwalk.$appname --name=$appname --app-root=$BUILD_DEST --app-local-path=index.html --icon=$BUILD_DEST/icon.png
-if [ $? -ne 0 ];then
-    echo "Create $name.apk fail.... >>>>>>>>>>>>>>>>>>>>>>>>>"
-    clean_workspace
-    exit 1
-fi
-}
-
-function create_xpk(){
-cp -a $BUILD_ROOT/manifest.json   $BUILD_DEST/
-cp -a $BUILD_ROOT/icon.png     $BUILD_DEST/
-
-cd $BUILD_DEST
-cat > index.html << EOF
-<!doctype html>
-<head>
-    <meta http-equiv="Refresh" content="1; url=opt/$name/webrunner/index.html?testsuite=../tests.xml&testprefix=../../..">
-</head>
-EOF
-
-cp $SRC_ROOT/../tools/xpk_generator $BUILD_ROOT/xpk_generator
-cd $BUILD_ROOT
-./xpk_generator /tmp/$name key
-if [ $? -ne 0 ];then
-    echo "Create $name.xpk fail.... >>>>>>>>>>>>>>>>>>>>>>>>>"
-    clean_workspace
-    exit 1
-fi
-}
-
-function create_crx(){
-echo "crx is not support yet... >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>"
-clean_workspace
-exit 1
-}
-
-## zip function ##
-function zip_for_wgt(){
-cd $BUILD_DEST
-# cp inst.sh script #
-cp -af $BUILD_ROOT/inst.sh $BUILD_DEST/opt/$name/inst.sh
-
-if [ $src_file -eq 0 ];then
-    for file in $(ls opt/$name |grep -v wgt);do
-        if [[ "${whitelist[@]}" =~ $file ]];then
-            echo "$file in whitelist,keep it..."
-        else
-            echo "Remove unnessary file:$file..."
-            rm -rf opt/$name/$file
-        fi
-    done
-fi
-zip -Drq $BUILD_DEST/$name-$version.zip opt/
-if [ $? -ne 0 ];then
-    echo "Create zip package fail... >>>>>>>>>>>>>>>>>>>>>>>>>"
-    clean_workspace
-    exit 1
-fi
-}
-
-function zip_for_apk(){
-cd $BUILD_DEST
-# cp inst.sh script #
-cp -af $BUILD_ROOT/inst.sh.apk $BUILD_DEST/opt/$name/inst.sh
-mv $BUILD_ROOT/xwalk_app_template/$appname.apk $BUILD_DEST/opt/$name/
-
-if [ $src_file -eq 0 ];then
-    for file in $(ls opt/$name |grep -v apk);do
-        if [[ "${whitelist[@]}" =~ $file ]];then
-            echo "$file in whitelist,keep it..."
-        else
-            echo "Remove unnessary file:$file..."
-            rm -rf opt/$name/$file
-        fi
-    done
-fi
-zip -Drq $BUILD_DEST/$name-$version.zip opt/
-if [ $? -ne 0 ];then
-    echo "Create zip package fail... >>>>>>>>>>>>>>>>>>>>>>>>>"
-    clean_workspace
-    exit 1
-fi
-}
-
-function zip_for_xpk(){
-cd $BUILD_DEST
-cp -af $BUILD_ROOT/inst.sh.xpk $BUILD_DEST/opt/$name/inst.sh
-mv $BUILD_ROOT/$name.xpk $BUILD_DEST/opt/$name/
-
-if [ $src_file -eq 0 ];then
-    for file in $(ls opt/$name |grep -v xpk);do
-        if [[ "${whitelist[@]}" =~ $file ]];then
-            echo "$file in whitelist,keep it..."
-        else
-            echo "Remove unnessary file:$file..."
-            rm -rf opt/$name/$file
-        fi
-    done
-fi
-zip -Drq $BUILD_DEST/$name-$version.zip opt/
-if [ $? -ne 0 ];then
-    echo "Create zip package fail... >>>>>>>>>>>>>>>>>>>>>>>>>"
-    clean_workspace
-    exit 1
-fi
-}
-
-function zip_for_crx(){
-echo "zip_for_crx not ready yet... >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>"
-clean_workspace
-exit 1
-}
-
-## create wgt crx apk xpk and zip package ##
-case $type in
-    wgt) create_wgt
-         zip_for_wgt;;
-    apk) create_apk
-         zip_for_apk;;
-    xpk) create_xpk
-         zip_for_xpk;;
-    crx) create_crx
-         zip_for_crx;;
-esac
-
-
-# copy zip file
-echo "copy package from workspace... >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>"
-cp -f $BUILD_DEST/$name-$version.zip $SRC_ROOT/$name-$version.zip
-
-# clean workspace
-clean_workspace
-
-# validate
-echo "checking result... >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>"
-if [ -z "`ls $SRC_ROOT | grep "\.zip"`" ];then
-    echo "------------------------------ FAILED to build $name packages --------------------------"
-    exit 1
-fi
-
-echo "------------------------------ Done to build $name packages --------------------------"
-cd $SRC_ROOT
-ls *.zip 2>/dev/null
diff --git a/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/plugin/web_templates/resources/COPYING b/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/plugin/web_templates/resources/COPYING
deleted file mode 100755 (executable)
index 1866d2d..0000000
+++ /dev/null
@@ -1,12 +0,0 @@
-All test files under this folder except COPYING and Makefile.am come from
-https://github.com/w3c/testharness.js (commit 81649066b179216eed02dfb58f631eb8bb6c7629)
-without any modification besides the necessary adjustment on reference path to test harness
-
-These tests are copyright by W3C and/or the author listed in the test
-file. The tests are dual-licensed under the W3C Test Suite License:
-http://www.w3.org/Consortium/Legal/2008/04-testsuite-license
-and the BSD 3-clause License:
-http://www.w3.org/Consortium/Legal/2008/03-bsd-license
-under W3C's test suite licensing policy:
-http://www.w3.org/Consortium/Legal/2008/04-testsuite-copyright
-
diff --git a/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/plugin/web_templates/resources/Makefile.am b/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/plugin/web_templates/resources/Makefile.am
deleted file mode 100755 (executable)
index 9624e21..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-resources_SCRIPTS = *
-resourcesdir = $(prefix)/opt/{TESTSUITE_NAME}/resources
-EXTRA_DIST = $(resources_SCRIPTS)
-docdir = $(prefix)/opt/{TESTSUITE_NAME}/resources
-dist_doc_DATA = COPYING
diff --git a/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/plugin/web_templates/resources/testharness.css b/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/plugin/web_templates/resources/testharness.css
deleted file mode 100755 (executable)
index 365084f..0000000
+++ /dev/null
@@ -1,92 +0,0 @@
-html {
-    font-family:DejaVu Sans, Bitstream Vera Sans, Arial, Sans;
-}
-
-#log .warning,
-#log .warning a {
-  color: black;
-  background: yellow;
-}
-
-#log .error,
-#log .error a {
-  color: white;
-  background: red;
-}
-
-#log pre {
-  border: 1px solid black;
-  padding: 1em;
-}
-
-section#summary {
-    margin-bottom:1em;
-}
-
-table#results {
-    border-collapse:collapse;
-    table-layout:fixed;
-    width:100%;
-}
-
-table#results th:first-child,
-table#results td:first-child {
-    width:4em;
-}
-
-table#results th:last-child,
-table#results td:last-child {
-    width:50%;
-}
-
-table#results.assertions th:last-child,
-table#results.assertions td:last-child {
-    width:35%;
-}
-
-table#results th {
-    padding:0;
-    padding-bottom:0.5em;
-    border-bottom:medium solid black;
-}
-
-table#results td {
-    padding:1em;
-    padding-bottom:0.5em;
-    border-bottom:thin solid black;
-}
-
-tr.pass > td:first-child {
-    color:green;
-}
-
-tr.fail > td:first-child {
-    color:red;
-}
-
-tr.timeout > td:first-child {
-    color:red;
-}
-
-tr.notrun > td:first-child {
-    color:blue;
-}
-
-.pass > td:first-child, .fail > td:first-child, .timeout > td:first-child, .notrun > td:first-child {
-    font-variant:small-caps;
-}
-
-table#results span {
-    display:block;
-}
-
-table#results span.expected {
-    font-family:DejaVu Sans Mono, Bitstream Vera Sans Mono, Monospace;
-    white-space:pre;
-}
-
-table#results span.actual {
-    font-family:DejaVu Sans Mono, Bitstream Vera Sans Mono, Monospace;
-    white-space:pre;
-}
-
diff --git a/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/plugin/web_templates/resources/testharness.js b/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/plugin/web_templates/resources/testharness.js
deleted file mode 100755 (executable)
index a07de77..0000000
+++ /dev/null
@@ -1,2223 +0,0 @@
-/*
-Distributed under both the W3C Test Suite License [1] and the W3C
-3-clause BSD License [2]. To contribute to a W3C Test Suite, see the
-policies and contribution forms [3].
-
-[1] http://www.w3.org/Consortium/Legal/2008/04-testsuite-license
-[2] http://www.w3.org/Consortium/Legal/2008/03-bsd-license
-[3] http://www.w3.org/2004/10/27-testcases
-*/
-
-/*
- * == Introduction ==
- *
- * This file provides a framework for writing testcases. It is intended to
- * provide a convenient API for making common assertions, and to work both
- * for testing synchronous and asynchronous DOM features in a way that
- * promotes clear, robust, tests.
- *
- * == Basic Usage ==
- *
- * To use this file, import the script and the testharnessreport script into
- * the test document:
- * <script src="/resources/testharness.js"></script>
- * <script src="/resources/testharnessreport.js"></script>
- *
- * Within each file one may define one or more tests. Each test is atomic
- * in the sense that a single test has a single result (pass/fail/timeout).
- * Within each test one may have a number of asserts. The test fails at the
- * first failing assert, and the remainder of the test is (typically) not run.
- *
- * If the file containing the tests is a HTML file with an element of id "log"
- * this will be populated with a table containing the test results after all
- * the tests have run.
- *
- * NOTE: By default tests must be created before the load event fires. For ways
- *       to create tests after the load event, see "Determining when all tests
- *       are complete", below
- *
- * == Synchronous Tests ==
- *
- * To create a synchronous test use the test() function:
- *
- * test(test_function, name, properties)
- *
- * test_function is a function that contains the code to test. For example a
- * trivial passing test would be:
- *
- * test(function() {assert_true(true)}, "assert_true with true")
- *
- * The function passed in is run in the test() call.
- *
- * properties is an object that overrides default test properties. The
- * recognised properties are:
- *    timeout - the test timeout in ms
- *
- * e.g.
- * test(test_function, "Sample test", {timeout:1000})
- *
- * would run test_function with a timeout of 1s.
- *
- * Additionally, test-specific metadata can be passed in the properties. These
- * are used when the individual test has different metadata from that stored 
- * in the <head>.
- * The recognized metadata properties are:
- *
- *    help - The url of the part of the specification being tested
- *
- *    assert - A human readable description of what the test is attempting 
- *             to prove
- *
- *    author - Name and contact information for the author of the test in the
- *             format: "Name <email_addr>" or "Name http://contact/url"
- *
- * == Asynchronous Tests ==
- *
- * Testing asynchronous features is somewhat more complex since the result of
- * a test may depend on one or more events or other callbacks. The API provided
- * for testing these features is indended to be rather low-level but hopefully
- * applicable to many situations.
- *
- * To create a test, one starts by getting a Test object using async_test:
- *
- * async_test(name, properties)
- *
- * e.g.
- * var t = async_test("Simple async test")
- *
- * Assertions can be added to the test by calling the step method of the test
- * object with a function containing the test assertions:
- *
- * t.step(function() {assert_true(true)});
- *
- * When all the steps are complete, the done() method must be called:
- *
- * t.done();
- *
- * As a convenience, async_test can also takes a function as first argument.
- * This function is called with the test object as both its `this` object and
- * first argument. The above example can be rewritten as:
- *
- * async_test(function(t) {
- *     object.some_event = function() {
- *         t.step(function (){assert_true(true); t.done();});
- *     };
- * }, "Simple async test");
- *
- * which avoids cluttering the global scope with references to async
- * tests instances.
- *
- * The properties argument is identical to that for test().
- *
- * In many cases it is convenient to run a step in response to an event or a
- * callback. A convenient method of doing this is through the step_func method
- * which returns a function that, when called runs a test step. For example
- *
- * object.some_event = t.step_func(function(e) {assert_true(e.a)});
- *
- * == Making assertions ==
- *
- * Functions for making assertions start assert_
- * The best way to get a list is to look in this file for functions names
- * matching that pattern. The general signature is
- *
- * assert_something(actual, expected, description)
- *
- * although not all assertions precisely match this pattern e.g. assert_true
- * only takes actual and description as arguments.
- *
- * The description parameter is used to present more useful error messages when
- * a test fails
- *
- * NOTE: All asserts must be located in a test() or a step of an async_test().
- *       asserts outside these places won't be detected correctly by the harness
- *       and may cause a file to stop testing.
- *
- * == Setup ==
- *
- * Sometimes tests require non-trivial setup that may fail. For this purpose
- * there is a setup() function, that may be called with one or two arguments.
- * The two argument version is:
- *
- * setup(func, properties)
- *
- * The one argument versions may omit either argument.
- * func is a function to be run synchronously. setup() becomes a no-op once
- * any tests have returned results. Properties are global properties of the test
- * harness. Currently recognised properties are:
- *
- * timeout - The time in ms after which the harness should stop waiting for
- *           tests to complete (this is different to the per-test timeout
- *           because async tests do not start their timer until .step is called)
- *
- * explicit_done - Wait for an explicit call to done() before declaring all
- *                 tests complete (see below)
- *
- * output_document - The document to which results should be logged. By default
- *                   this is the current document but could be an ancestor
- *                   document in some cases e.g. a SVG test loaded in an HTML
- *                   wrapper
- *
- * explicit_timeout - disable file timeout; only stop waiting for results
- *                    when the timeout() function is called (typically for
- *                    use when integrating with some existing test framework
- *                    that has its own timeout mechanism).
- *
- * == Determining when all tests are complete ==
- *
- * By default the test harness will assume there are no more results to come
- * when:
- * 1) There are no Test objects that have been created but not completed
- * 2) The load event on the document has fired
- *
- * This behaviour can be overridden by setting the explicit_done property to
- * true in a call to setup(). If explicit_done is true, the test harness will
- * not assume it is done until the global done() function is called. Once done()
- * is called, the two conditions above apply like normal.
- *
- * == Generating tests ==
- *
- * NOTE: this functionality may be removed
- *
- * There are scenarios in which is is desirable to create a large number of
- * (synchronous) tests that are internally similar but vary in the parameters
- * used. To make this easier, the generate_tests function allows a single
- * function to be called with each set of parameters in a list:
- *
- * generate_tests(test_function, parameter_lists, properties)
- *
- * For example:
- *
- * generate_tests(assert_equals, [
- *     ["Sum one and one", 1+1, 2],
- *     ["Sum one and zero", 1+0, 1]
- *     ])
- *
- * Is equivalent to:
- *
- * test(function() {assert_equals(1+1, 2)}, "Sum one and one")
- * test(function() {assert_equals(1+0, 1)}, "Sum one and zero")
- *
- * Note that the first item in each parameter list corresponds to the name of
- * the test.
- *
- * The properties argument is identical to that for test(). This may be a 
- * single object (used for all generated tests) or an array.
- *
- * == Callback API ==
- *
- * The framework provides callbacks corresponding to 3 events:
- *
- * start - happens when the first Test is created
- * result - happens when a test result is recieved
- * complete - happens when all results are recieved
- *
- * The page defining the tests may add callbacks for these events by calling
- * the following methods:
- *
- *   add_start_callback(callback) - callback called with no arguments
- *   add_result_callback(callback) - callback called with a test argument
- *   add_completion_callback(callback) - callback called with an array of tests
- *                                       and an status object
- *
- * tests have the following properties:
- *   status: A status code. This can be compared to the PASS, FAIL, TIMEOUT and
- *           NOTRUN properties on the test object
- *   message: A message indicating the reason for failure. In the future this
- *            will always be a string
- *
- *  The status object gives the overall status of the harness. It has the
- *  following properties:
- *    status: Can be compared to the OK, ERROR and TIMEOUT properties
- *    message: An error message set when the status is ERROR
- *
- * == External API ==
- *
- * In order to collect the results of multiple pages containing tests, the test
- * harness will, when loaded in a nested browsing context, attempt to call
- * certain functions in each ancestor and opener browsing context:
- *
- * start - start_callback
- * result - result_callback
- * complete - completion_callback
- *
- * These are given the same arguments as the corresponding internal callbacks
- * described above.
- *
- * == External API through cross-document messaging ==
- *
- * Where supported, the test harness will also send messages using
- * cross-document messaging to each ancestor and opener browsing context. Since
- * it uses the wildcard keyword (*), cross-origin communication is enabled and
- * script on different origins can collect the results.
- *
- * This API follows similar conventions as those described above only slightly
- * modified to accommodate message event API. Each message is sent by the harness
- * is passed a single vanilla object, available as the `data` property of the
- * event object. These objects are structures as follows:
- *
- * start - { type: "start" }
- * result - { type: "result", test: Test }
- * complete - { type: "complete", tests: [Test, ...], status: TestsStatus }
- *
- * == List of assertions ==
- *
- * assert_true(actual, description)
- *   asserts that /actual/ is strictly true
- *
- * assert_false(actual, description)
- *   asserts that /actual/ is strictly false
- *
- * assert_equals(actual, expected, description)
- *   asserts that /actual/ is the same value as /expected/
- *
- * assert_not_equals(actual, expected, description)
- *   asserts that /actual/ is a different value to /expected/. Yes, this means
- *   that "expected" is a misnomer
- *
- * assert_in_array(actual, expected, description)
- *   asserts that /expected/ is an Array, and /actual/ is equal to one of the
- *   members -- expected.indexOf(actual) != -1
- *
- * assert_array_equals(actual, expected, description)
- *   asserts that /actual/ and /expected/ have the same length and the value of
- *   each indexed property in /actual/ is the strictly equal to the corresponding
- *   property value in /expected/
- *
- * assert_approx_equals(actual, expected, epsilon, description)
- *   asserts that /actual/ is a number within +/- /epsilon/ of /expected/
- *
- * assert_less_than(actual, expected, description)
- *   asserts that /actual/ is a number less than /expected/
- *
- * assert_greater_than(actual, expected, description)
- *   asserts that /actual/ is a number greater than /expected/
- *
- * assert_less_than_equal(actual, expected, description)
- *   asserts that /actual/ is a number less than or equal to /expected/
- *
- * assert_greater_than_equal(actual, expected, description)
- *   asserts that /actual/ is a number greater than or equal to /expected/
- *
- * assert_regexp_match(actual, expected, description)
- *   asserts that /actual/ matches the regexp /expected/
- *
- * assert_class_string(object, class_name, description)
- *   asserts that the class string of /object/ as returned in
- *   Object.prototype.toString is equal to /class_name/.
- *
- * assert_own_property(object, property_name, description)
- *   assert that object has own property property_name
- *
- * assert_inherits(object, property_name, description)
- *   assert that object does not have an own property named property_name
- *   but that property_name is present in the prototype chain for object
- *
- * assert_idl_attribute(object, attribute_name, description)
- *   assert that an object that is an instance of some interface has the
- *   attribute attribute_name following the conditions specified by WebIDL
- *
- * assert_readonly(object, property_name, description)
- *   assert that property property_name on object is readonly
- *
- * assert_throws(code, func, description)
- *   code - the expected exception:
- *     o string: the thrown exception must be a DOMException with the given
- *               name, e.g., "TimeoutError" (for compatibility with existing
- *               tests, a constant is also supported, e.g., "TIMEOUT_ERR")
- *     o object: the thrown exception must have a property called "name" that
- *               matches code.name
- *     o null:   allow any exception (in general, one of the options above
- *               should be used)
- *   func - a function that should throw
- *
- * assert_unreached(description)
- *   asserts if called. Used to ensure that some codepath is *not* taken e.g.
- *   an event does not fire.
- *
- * assert_any(assert_func, actual, expected_array, extra_arg_1, ... extra_arg_N)
- *   asserts that one assert_func(actual, expected_array_N, extra_arg1, ..., extra_arg_N)
- *   is true for some expected_array_N in expected_array. This only works for assert_func
- *   with signature assert_func(actual, expected, args_1, ..., args_N). Note that tests
- *   with multiple allowed pass conditions are bad practice unless the spec specifically
- *   allows multiple behaviours. Test authors should not use this method simply to hide 
- *   UA bugs.
- *
- * assert_exists(object, property_name, description)
- *   *** deprecated ***
- *   asserts that object has an own property property_name
- *
- * assert_not_exists(object, property_name, description)
- *   *** deprecated ***
- *   assert that object does not have own property property_name
- */
-
-(function ()
-{
-    var debug = false;
-    // default timeout is 5 seconds, test can override if needed
-    var settings = {
-      output:true,
-      timeout:5000,
-      test_timeout:2000
-    };
-
-    var xhtml_ns = "http://www.w3.org/1999/xhtml";
-
-    // script_prefix is used by Output.prototype.show_results() to figure out
-    // where to get testharness.css from.  It's enclosed in an extra closure to
-    // not pollute the library's namespace with variables like "src".
-    var script_prefix = null;
-    (function ()
-    {
-        var scripts = document.getElementsByTagName("script");
-        for (var i = 0; i < scripts.length; i++)
-        {
-            if (scripts[i].src)
-            {
-                var src = scripts[i].src;
-            }
-            else if (scripts[i].href)
-            {
-                //SVG case
-                var src = scripts[i].href.baseVal;
-            }
-            if (src && src.slice(src.length - "testharness.js".length) === "testharness.js")
-            {
-                script_prefix = src.slice(0, src.length - "testharness.js".length);
-                break;
-            }
-        }
-    })();
-
-    /*
-     * API functions
-     */
-
-    var name_counter = 0;
-    function next_default_name()
-    {
-        //Don't use document.title to work around an Opera bug in XHTML documents
-        var prefix = document.getElementsByTagName("title").length > 0 ?
-                         document.getElementsByTagName("title")[0].firstChild.data :
-                         "Untitled";
-        var suffix = name_counter > 0 ? " " + name_counter : "";
-        name_counter++;
-        return prefix + suffix;
-    }
-
-    function test(func, name, properties)
-    {
-        var test_name = name ? name : next_default_name();
-        properties = properties ? properties : {};
-        var test_obj = new Test(test_name, properties);
-        test_obj.step(func);
-        if (test_obj.status === test_obj.NOTRUN) {
-            test_obj.done();
-        }
-    }
-
-    function async_test(func, name, properties)
-    {
-        if (typeof func !== "function") {
-            properties = name;
-            name = func;
-            func = null;
-        }
-        var test_name = name ? name : next_default_name();
-        properties = properties ? properties : {};
-        var test_obj = new Test(test_name, properties);
-        if (func) {
-            test_obj.step(func, test_obj, test_obj);
-        }
-        return test_obj;
-    }
-
-    function setup(func_or_properties, maybe_properties)
-    {
-        var func = null;
-        var properties = {};
-        if (arguments.length === 2) {
-            func = func_or_properties;
-            properties = maybe_properties;
-        } else if (func_or_properties instanceof Function){
-            func = func_or_properties;
-        } else {
-            properties = func_or_properties;
-        }
-        tests.setup(func, properties);
-        output.setup(properties);
-    }
-
-    function done() {
-        tests.end_wait();
-    }
-
-    function generate_tests(func, args, properties) {
-        forEach(args, function(x, i)
-                {
-                    var name = x[0];
-                    test(function()
-                         {
-                             func.apply(this, x.slice(1));
-                         }, 
-                         name, 
-                         Array.isArray(properties) ? properties[i] : properties);
-                });
-    }
-
-    function on_event(object, event, callback)
-    {
-      object.addEventListener(event, callback, false);
-    }
-
-    expose(test, 'test');
-    expose(async_test, 'async_test');
-    expose(generate_tests, 'generate_tests');
-    expose(setup, 'setup');
-    expose(done, 'done');
-    expose(on_event, 'on_event');
-
-    /*
-     * Return a string truncated to the given length, with ... added at the end
-     * if it was longer.
-     */
-    function truncate(s, len)
-    {
-        if (s.length > len) {
-            return s.substring(0, len - 3) + "...";
-        }
-        return s;
-    }
-
-    /*
-     * Convert a value to a nice, human-readable string
-     */
-    function format_value(val)
-    {
-        if (Array.isArray(val))
-        {
-            return "[" + val.map(format_value).join(", ") + "]";
-        }
-
-        switch (typeof val)
-        {
-        case "string":
-            val = val.replace("\\", "\\\\");
-            for (var i = 0; i < 32; i++)
-            {
-                var replace = "\\";
-                switch (i) {
-                case 0: replace += "0"; break;
-                case 1: replace += "x01"; break;
-                case 2: replace += "x02"; break;
-                case 3: replace += "x03"; break;
-                case 4: replace += "x04"; break;
-                case 5: replace += "x05"; break;
-                case 6: replace += "x06"; break;
-                case 7: replace += "x07"; break;
-                case 8: replace += "b"; break;
-                case 9: replace += "t"; break;
-                case 10: replace += "n"; break;
-                case 11: replace += "v"; break;
-                case 12: replace += "f"; break;
-                case 13: replace += "r"; break;
-                case 14: replace += "x0e"; break;
-                case 15: replace += "x0f"; break;
-                case 16: replace += "x10"; break;
-                case 17: replace += "x11"; break;
-                case 18: replace += "x12"; break;
-                case 19: replace += "x13"; break;
-                case 20: replace += "x14"; break;
-                case 21: replace += "x15"; break;
-                case 22: replace += "x16"; break;
-                case 23: replace += "x17"; break;
-                case 24: replace += "x18"; break;
-                case 25: replace += "x19"; break;
-                case 26: replace += "x1a"; break;
-                case 27: replace += "x1b"; break;
-                case 28: replace += "x1c"; break;
-                case 29: replace += "x1d"; break;
-                case 30: replace += "x1e"; break;
-                case 31: replace += "x1f"; break;
-                }
-                val = val.replace(RegExp(String.fromCharCode(i), "g"), replace);
-            }
-            return '"' + val.replace(/"/g, '\\"') + '"';
-        case "boolean":
-        case "undefined":
-            return String(val);
-        case "number":
-            // In JavaScript, -0 === 0 and String(-0) == "0", so we have to
-            // special-case.
-            if (val === -0 && 1/val === -Infinity)
-            {
-                return "-0";
-            }
-            return String(val);
-        case "object":
-            if (val === null)
-            {
-                return "null";
-            }
-
-            // Special-case Node objects, since those come up a lot in my tests.  I
-            // ignore namespaces.  I use duck-typing instead of instanceof, because
-            // instanceof doesn't work if the node is from another window (like an
-            // iframe's contentWindow):
-            // http://www.w3.org/Bugs/Public/show_bug.cgi?id=12295
-            if ("nodeType" in val
-            && "nodeName" in val
-            && "nodeValue" in val
-            && "childNodes" in val)
-            {
-                switch (val.nodeType)
-                {
-                case Node.ELEMENT_NODE:
-                    var ret = "<" + val.tagName.toLowerCase();
-                    for (var i = 0; i < val.attributes.length; i++)
-                    {
-                        ret += " " + val.attributes[i].name + '="' + val.attributes[i].value + '"';
-                    }
-                    ret += ">" + val.innerHTML + "</" + val.tagName.toLowerCase() + ">";
-                    return "Element node " + truncate(ret, 60);
-                case Node.TEXT_NODE:
-                    return 'Text node "' + truncate(val.data, 60) + '"';
-                case Node.PROCESSING_INSTRUCTION_NODE:
-                    return "ProcessingInstruction node with target " + format_value(truncate(val.target, 60)) + " and data " + format_value(truncate(val.data, 60));
-                case Node.COMMENT_NODE:
-                    return "Comment node <!--" + truncate(val.data, 60) + "-->";
-                case Node.DOCUMENT_NODE:
-                    return "Document node with " + val.childNodes.length + (val.childNodes.length == 1 ? " child" : " children");
-                case Node.DOCUMENT_TYPE_NODE:
-                    return "DocumentType node";
-                case Node.DOCUMENT_FRAGMENT_NODE:
-                    return "DocumentFragment node with " + val.childNodes.length + (val.childNodes.length == 1 ? " child" : " children");
-                default:
-                    return "Node object of unknown type";
-                }
-            }
-
-            // Fall through to default
-        default:
-            return typeof val + ' "' + truncate(String(val), 60) + '"';
-        }
-    }
-    expose(format_value, "format_value");
-
-    /*
-     * Assertions
-     */
-
-    function assert_true(actual, description)
-    {
-        assert(actual === true, "assert_true", description,
-                                "expected true got ${actual}", {actual:actual});
-    };
-    expose(assert_true, "assert_true");
-
-    function assert_false(actual, description)
-    {
-        assert(actual === false, "assert_false", description,
-                                 "expected false got ${actual}", {actual:actual});
-    };
-    expose(assert_false, "assert_false");
-
-    function same_value(x, y) {
-        if (y !== y)
-        {
-            //NaN case
-            return x !== x;
-        }
-        else if (x === 0 && y === 0) {
-            //Distinguish +0 and -0
-            return 1/x === 1/y;
-        }
-        else
-        {
-            //typical case
-            return x === y;
-        }
-    }
-
-    function assert_equals(actual, expected, description)
-    {
-         /*
-          * Test if two primitives are equal or two objects
-          * are the same object
-          */
-        if (typeof actual != typeof expected)
-        {
-            assert(false, "assert_equals", description,
-                          "expected (" + typeof expected + ") ${expected} but got (" + typeof actual + ") ${actual}",
-                          {expected:expected, actual:actual});
-            return;
-        }
-        assert(same_value(actual, expected), "assert_equals", description,
-                                             "expected ${expected} but got ${actual}",
-                                             {expected:expected, actual:actual});
-    };
-    expose(assert_equals, "assert_equals");
-
-    function assert_not_equals(actual, expected, description)
-    {
-         /*
-          * Test if two primitives are unequal or two objects
-          * are different objects
-          */
-        assert(!same_value(actual, expected), "assert_not_equals", description,
-                                              "got disallowed value ${actual}",
-                                              {actual:actual});
-    };
-    expose(assert_not_equals, "assert_not_equals");
-
-    function assert_in_array(actual, expected, description)
-    {
-        assert(expected.indexOf(actual) != -1, "assert_in_array", description,
-                                               "value ${actual} not in array ${expected}",
-                                               {actual:actual, expected:expected});
-    }
-    expose(assert_in_array, "assert_in_array");
-
-    function assert_object_equals(actual, expected, description)
-    {
-         //This needs to be improved a great deal
-         function check_equal(actual, expected, stack)
-         {
-             stack.push(actual);
-
-             var p;
-             for (p in actual)
-             {
-                 assert(expected.hasOwnProperty(p), "assert_object_equals", description,
-                                                    "unexpected property ${p}", {p:p});
-
-                 if (typeof actual[p] === "object" && actual[p] !== null)
-                 {
-                     if (stack.indexOf(actual[p]) === -1)
-                     {
-                         check_equal(actual[p], expected[p], stack);
-                     }
-                 }
-                 else
-                 {
-                     assert(same_value(actual[p], expected[p]), "assert_object_equals", description,
-                                                       "property ${p} expected ${expected} got ${actual}",
-                                                       {p:p, expected:expected, actual:actual});
-                 }
-             }
-             for (p in expected)
-             {
-                 assert(actual.hasOwnProperty(p),
-                        "assert_object_equals", description,
-                        "expected property ${p} missing", {p:p});
-             }
-             stack.pop();
-         }
-         check_equal(actual, expected, []);
-    };
-    expose(assert_object_equals, "assert_object_equals");
-
-    function assert_array_equals(actual, expected, description)
-    {
-        assert(actual.length === expected.length,
-               "assert_array_equals", description,
-               "lengths differ, expected ${expected} got ${actual}",
-               {expected:expected.length, actual:actual.length});
-
-        for (var i=0; i < actual.length; i++)
-        {
-            assert(actual.hasOwnProperty(i) === expected.hasOwnProperty(i),
-                   "assert_array_equals", description,
-                   "property ${i}, property expected to be $expected but was $actual",
-                   {i:i, expected:expected.hasOwnProperty(i) ? "present" : "missing",
-                   actual:actual.hasOwnProperty(i) ? "present" : "missing"});
-            assert(same_value(expected[i], actual[i]),
-                   "assert_array_equals", description,
-                   "property ${i}, expected ${expected} but got ${actual}",
-                   {i:i, expected:expected[i], actual:actual[i]});
-        }
-    }
-    expose(assert_array_equals, "assert_array_equals");
-
-    function assert_approx_equals(actual, expected, epsilon, description)
-    {
-        /*
-         * Test if two primitive numbers are equal withing +/- epsilon
-         */
-        assert(typeof actual === "number",
-               "assert_approx_equals", description,
-               "expected a number but got a ${type_actual}",
-               {type_actual:typeof actual});
-
-        assert(Math.abs(actual - expected) <= epsilon,
-               "assert_approx_equals", description,
-               "expected ${expected} +/- ${epsilon} but got ${actual}",
-               {expected:expected, actual:actual, epsilon:epsilon});
-    };
-    expose(assert_approx_equals, "assert_approx_equals");
-
-    function assert_less_than(actual, expected, description)
-    {
-        /*
-         * Test if a primitive number is less than another
-         */
-        assert(typeof actual === "number",
-               "assert_less_than", description,
-               "expected a number but got a ${type_actual}",
-               {type_actual:typeof actual});
-
-        assert(actual < expected,
-               "assert_less_than", description,
-               "expected a number less than ${expected} but got ${actual}",
-               {expected:expected, actual:actual});
-    };
-    expose(assert_less_than, "assert_less_than");
-
-    function assert_greater_than(actual, expected, description)
-    {
-        /*
-         * Test if a primitive number is greater than another
-         */
-        assert(typeof actual === "number",
-               "assert_greater_than", description,
-               "expected a number but got a ${type_actual}",
-               {type_actual:typeof actual});
-
-        assert(actual > expected,
-               "assert_greater_than", description,
-               "expected a number greater than ${expected} but got ${actual}",
-               {expected:expected, actual:actual});
-    };
-    expose(assert_greater_than, "assert_greater_than");
-
-    function assert_less_than_equal(actual, expected, description)
-    {
-        /*
-         * Test if a primitive number is less than or equal to another
-         */
-        assert(typeof actual === "number",
-               "assert_less_than_equal", description,
-               "expected a number but got a ${type_actual}",
-               {type_actual:typeof actual});
-
-        assert(actual <= expected,
-               "assert_less_than", description,
-               "expected a number less than or equal to ${expected} but got ${actual}",
-               {expected:expected, actual:actual});
-    };
-    expose(assert_less_than_equal, "assert_less_than_equal");
-
-    function assert_greater_than_equal(actual, expected, description)
-    {
-        /*
-         * Test if a primitive number is greater than or equal to another
-         */
-        assert(typeof actual === "number",
-               "assert_greater_than_equal", description,
-               "expected a number but got a ${type_actual}",
-               {type_actual:typeof actual});
-
-        assert(actual >= expected,
-               "assert_greater_than_equal", description,
-               "expected a number greater than or equal to ${expected} but got ${actual}",
-               {expected:expected, actual:actual});
-    };
-    expose(assert_greater_than_equal, "assert_greater_than_equal");
-
-    function assert_regexp_match(actual, expected, description) {
-        /*
-         * Test if a string (actual) matches a regexp (expected)
-         */
-        assert(expected.test(actual),
-               "assert_regexp_match", description,
-               "expected ${expected} but got ${actual}",
-               {expected:expected, actual:actual});
-    }
-    expose(assert_regexp_match, "assert_regexp_match");
-
-    function assert_class_string(object, class_string, description) {
-        assert_equals({}.toString.call(object), "[object " + class_string + "]",
-                      description);
-    }
-    expose(assert_class_string, "assert_class_string");
-
-
-    function _assert_own_property(name) {
-        return function(object, property_name, description)
-        {
-            assert(object.hasOwnProperty(property_name),
-                   name, description,
-                   "expected property ${p} missing", {p:property_name});
-        };
-    }
-    expose(_assert_own_property("assert_exists"), "assert_exists");
-    expose(_assert_own_property("assert_own_property"), "assert_own_property");
-
-    function assert_not_exists(object, property_name, description)
-    {
-        assert(!object.hasOwnProperty(property_name),
-               "assert_not_exists", description,
-               "unexpected property ${p} found", {p:property_name});
-    };
-    expose(assert_not_exists, "assert_not_exists");
-
-    function _assert_inherits(name) {
-        return function (object, property_name, description)
-        {
-            assert(typeof object === "object",
-                   name, description,
-                   "provided value is not an object");
-
-            assert("hasOwnProperty" in object,
-                   name, description,
-                   "provided value is an object but has no hasOwnProperty method");
-
-            assert(!object.hasOwnProperty(property_name),
-                   name, description,
-                   "property ${p} found on object expected in prototype chain",
-                   {p:property_name});
-
-            assert(property_name in object,
-                   name, description,
-                   "property ${p} not found in prototype chain",
-                   {p:property_name});
-        };
-    }
-    expose(_assert_inherits("assert_inherits"), "assert_inherits");
-    expose(_assert_inherits("assert_idl_attribute"), "assert_idl_attribute");
-
-    function assert_readonly(object, property_name, description)
-    {
-         var initial_value = object[property_name];
-         try {
-             //Note that this can have side effects in the case where
-             //the property has PutForwards
-             object[property_name] = initial_value + "a"; //XXX use some other value here?
-             assert(same_value(object[property_name], initial_value),
-                    "assert_readonly", description,
-                    "changing property ${p} succeeded",
-                    {p:property_name});
-         }
-         finally
-         {
-             object[property_name] = initial_value;
-         }
-    };
-    expose(assert_readonly, "assert_readonly");
-
-    function assert_throws(code, func, description)
-    {
-        try
-        {
-            func.call(this);
-            assert(false, "assert_throws", description,
-                   "${func} did not throw", {func:func});
-        }
-        catch(e)
-        {
-            if (e instanceof AssertionError) {
-                throw(e);
-            }
-            if (code === null)
-            {
-                return;
-            }
-            if (typeof code === "object")
-            {
-                assert(typeof e == "object" && "name" in e && e.name == code.name,
-                       "assert_throws", description,
-                       "${func} threw ${actual} (${actual_name}) expected ${expected} (${expected_name})",
-                                    {func:func, actual:e, actual_name:e.name,
-                                     expected:code,
-                                     expected_name:code.name});
-                return;
-            }
-
-            var code_name_map = {
-                INDEX_SIZE_ERR: 'IndexSizeError',
-                HIERARCHY_REQUEST_ERR: 'HierarchyRequestError',
-                WRONG_DOCUMENT_ERR: 'WrongDocumentError',
-                INVALID_CHARACTER_ERR: 'InvalidCharacterError',
-                NO_MODIFICATION_ALLOWED_ERR: 'NoModificationAllowedError',
-                NOT_FOUND_ERR: 'NotFoundError',
-                NOT_SUPPORTED_ERR: 'NotSupportedError',
-                INVALID_STATE_ERR: 'InvalidStateError',
-                SYNTAX_ERR: 'SyntaxError',
-                INVALID_MODIFICATION_ERR: 'InvalidModificationError',
-                NAMESPACE_ERR: 'NamespaceError',
-                INVALID_ACCESS_ERR: 'InvalidAccessError',
-                TYPE_MISMATCH_ERR: 'TypeMismatchError',
-                SECURITY_ERR: 'SecurityError',
-                NETWORK_ERR: 'NetworkError',
-                ABORT_ERR: 'AbortError',
-                URL_MISMATCH_ERR: 'URLMismatchError',
-                QUOTA_EXCEEDED_ERR: 'QuotaExceededError',
-                TIMEOUT_ERR: 'TimeoutError',
-                INVALID_NODE_TYPE_ERR: 'InvalidNodeTypeError',
-                DATA_CLONE_ERR: 'DataCloneError'
-            };
-
-            var name = code in code_name_map ? code_name_map[code] : code;
-
-            var name_code_map = {
-                IndexSizeError: 1,
-                HierarchyRequestError: 3,
-                WrongDocumentError: 4,
-                InvalidCharacterError: 5,
-                NoModificationAllowedError: 7,
-                NotFoundError: 8,
-                NotSupportedError: 9,
-                InvalidStateError: 11,
-                SyntaxError: 12,
-                InvalidModificationError: 13,
-                NamespaceError: 14,
-                InvalidAccessError: 15,
-                TypeMismatchError: 17,
-                SecurityError: 18,
-                NetworkError: 19,
-                AbortError: 20,
-                URLMismatchError: 21,
-                QuotaExceededError: 22,
-                TimeoutError: 23,
-                InvalidNodeTypeError: 24,
-                DataCloneError: 25,
-
-                UnknownError: 0,
-                ConstraintError: 0,
-                DataError: 0,
-                TransactionInactiveError: 0,
-                ReadOnlyError: 0,
-                VersionError: 0
-            };
-
-            if (!(name in name_code_map))
-            {
-                throw new AssertionError('Test bug: unrecognized DOMException code "' + code + '" passed to assert_throws()');
-            }
-
-            var required_props = { code: name_code_map[name] };
-
-            if (required_props.code === 0
-            || ("name" in e && e.name !== e.name.toUpperCase() && e.name !== "DOMException"))
-            {
-                // New style exception: also test the name property.
-                required_props.name = name;
-            }
-
-            //We'd like to test that e instanceof the appropriate interface,
-            //but we can't, because we don't know what window it was created
-            //in.  It might be an instanceof the appropriate interface on some
-            //unknown other window.  TODO: Work around this somehow?
-
-            assert(typeof e == "object",
-                   "assert_throws", description,
-                   "${func} threw ${e} with type ${type}, not an object",
-                   {func:func, e:e, type:typeof e});
-
-            for (var prop in required_props)
-            {
-                assert(typeof e == "object" && prop in e && e[prop] == required_props[prop],
-                       "assert_throws", description,
-                       "${func} threw ${e} that is not a DOMException " + code + ": property ${prop} is equal to ${actual}, expected ${expected}",
-                       {func:func, e:e, prop:prop, actual:e[prop], expected:required_props[prop]});
-            }
-        }
-    }
-    expose(assert_throws, "assert_throws");
-
-    function assert_unreached(description) {
-         assert(false, "assert_unreached", description,
-                "Reached unreachable code");
-    }
-    expose(assert_unreached, "assert_unreached");
-
-    function assert_any(assert_func, actual, expected_array) 
-    {
-        var args = [].slice.call(arguments, 3)
-        var errors = []
-        var passed = false;
-        forEach(expected_array, 
-                function(expected)
-                {
-                    try {
-                        assert_func.apply(this, [actual, expected].concat(args))
-                        passed = true;
-                    } catch(e) {
-                        errors.push(e.message);
-                    }
-                });
-        if (!passed) {
-            throw new AssertionError(errors.join("\n\n"));
-        }
-    }
-    expose(assert_any, "assert_any");
-
-    function Test(name, properties)
-    {
-        this.name = name;
-        this.status = this.NOTRUN;
-        this.timeout_id = null;
-        this.is_done = false;
-
-        this.properties = properties;
-        this.timeout_length = properties.timeout ? properties.timeout : settings.test_timeout;
-
-        this.message = null;
-
-        var this_obj = this;
-        this.steps = [];
-
-        tests.push(this);
-    }
-
-    Test.statuses = {
-        PASS:0,
-        FAIL:1,
-        TIMEOUT:2,
-        NOTRUN:3
-    };
-
-    Test.prototype = merge({}, Test.statuses);
-
-    Test.prototype.structured_clone = function()
-    {
-        if(!this._structured_clone)
-        {
-            var msg = this.message;
-            msg = msg ? String(msg) : msg;
-            this._structured_clone = merge({
-                name:String(this.name),
-                status:this.status,
-                message:msg
-            }, Test.statuses);
-        }
-        return this._structured_clone;
-    };
-
-    Test.prototype.step = function(func, this_obj)
-    {
-        //In case the test has already failed
-        if (this.status !== this.NOTRUN)
-        {
-          return;
-        }
-
-        tests.started = true;
-
-        if (this.timeout_id === null) {
-            this.set_timeout();
-        }
-
-        this.steps.push(func);
-
-        if (arguments.length === 1)
-        {
-            this_obj = this;
-        }
-
-        try
-        {
-            return func.apply(this_obj, Array.prototype.slice.call(arguments, 2));
-        }
-        catch(e)
-        {
-            //This can happen if something called synchronously invoked another
-            //step
-            if (this.status !== this.NOTRUN)
-            {
-                return;
-            }
-            this.status = this.FAIL;
-            this.message = (typeof e === "object" && e !== null) ? e.message : e;
-            if (typeof e.stack != "undefined" && typeof e.message == "string") {
-                //Try to make it more informative for some exceptions, at least
-                //in Gecko and WebKit.  This results in a stack dump instead of
-                //just errors like "Cannot read property 'parentNode' of null"
-                //or "root is null".  Makes it a lot longer, of course.
-                this.message += "(stack: " + e.stack + ")";
-            }
-            this.done();
-            if (debug && e.constructor !== AssertionError) {
-                throw e;
-            }
-        }
-    };
-
-    Test.prototype.step_func = function(func, this_obj)
-    {
-        var test_this = this;
-
-        if (arguments.length === 1)
-        {
-            this_obj = test_this;
-        }
-
-        return function()
-        {
-            test_this.step.apply(test_this, [func, this_obj].concat(
-                Array.prototype.slice.call(arguments)));
-        };
-    };
-
-    Test.prototype.step_func_done = function(func, this_obj)
-    {
-        var test_this = this;
-
-        if (arguments.length === 1)
-        {
-            this_obj = test_this;
-        }
-
-        return function()
-        {
-            test_this.step.apply(test_this, [func, this_obj].concat(
-                Array.prototype.slice.call(arguments)));
-            test_this.done();
-        };
-    };
-
-    Test.prototype.set_timeout = function()
-    {
-        var this_obj = this;
-        this.timeout_id = setTimeout(function()
-                                     {
-                                         this_obj.timeout();
-                                     }, this.timeout_length);
-    };
-
-    Test.prototype.timeout = function()
-    {
-        this.status = this.TIMEOUT;
-        this.timeout_id = null;
-        this.message = "Test timed out";
-        this.done();
-    };
-
-    Test.prototype.done = function()
-    {
-        if (this.is_done) {
-            return;
-        }
-        clearTimeout(this.timeout_id);
-        if (this.status === this.NOTRUN)
-        {
-            this.status = this.PASS;
-        }
-        this.is_done = true;
-        tests.result(this);
-    };
-
-
-    /*
-     * Harness
-     */
-
-    function TestsStatus()
-    {
-        this.status = null;
-        this.message = null;
-    }
-
-    TestsStatus.statuses = {
-        OK:0,
-        ERROR:1,
-        TIMEOUT:2
-    };
-
-    TestsStatus.prototype = merge({}, TestsStatus.statuses);
-
-    TestsStatus.prototype.structured_clone = function()
-    {
-        if(!this._structured_clone)
-        {
-            var msg = this.message;
-            msg = msg ? String(msg) : msg;
-            this._structured_clone = merge({
-                status:this.status,
-                message:msg
-            }, TestsStatus.statuses);
-        }
-        return this._structured_clone;
-    };
-
-    function Tests()
-    {
-        this.tests = [];
-        this.num_pending = 0;
-
-        this.phases = {
-            INITIAL:0,
-            SETUP:1,
-            HAVE_TESTS:2,
-            HAVE_RESULTS:3,
-            COMPLETE:4
-        };
-        this.phase = this.phases.INITIAL;
-
-        this.properties = {};
-
-        //All tests can't be done until the load event fires
-        this.all_loaded = false;
-        this.wait_for_finish = false;
-        this.processing_callbacks = false;
-
-        this.timeout_length = settings.timeout;
-        this.timeout_id = null;
-
-        this.start_callbacks = [];
-        this.test_done_callbacks = [];
-        this.all_done_callbacks = [];
-
-        this.status = new TestsStatus();
-
-        var this_obj = this;
-
-        on_event(window, "load",
-                 function()
-                 {
-                     this_obj.all_loaded = true;
-                     if (this_obj.all_done())
-                     {
-                         this_obj.complete();
-                     }
-                 });
-
-        this.set_timeout();
-    }
-
-    Tests.prototype.setup = function(func, properties)
-    {
-        if (this.phase >= this.phases.HAVE_RESULTS)
-        {
-            return;
-        }
-        if (this.phase < this.phases.SETUP)
-        {
-            this.phase = this.phases.SETUP;
-        }
-
-        for (var p in properties)
-        {
-            if (properties.hasOwnProperty(p))
-            {
-                this.properties[p] = properties[p];
-            }
-        }
-
-        if (properties.timeout)
-        {
-            this.timeout_length = properties.timeout;
-        }
-        if (properties.explicit_done)
-        {
-            this.wait_for_finish = true;
-        }
-        if (properties.explicit_timeout) {
-            this.timeout_length = null;
-        }
-
-        if (func)
-        {
-            try
-            {
-                func();
-            } catch(e)
-            {
-                this.status.status = this.status.ERROR;
-                this.status.message = e;
-            };
-        }
-        this.set_timeout();
-    };
-
-    Tests.prototype.set_timeout = function()
-    {
-        var this_obj = this;
-        clearTimeout(this.timeout_id);
-        if (this.timeout_length !== null)
-        {
-            this.timeout_id = setTimeout(function() {
-                                             this_obj.timeout();
-                                         }, this.timeout_length);
-        }
-    };
-
-    Tests.prototype.timeout = function() {
-        this.status.status = this.status.TIMEOUT;
-        this.complete();
-    };
-
-    Tests.prototype.end_wait = function()
-    {
-        this.wait_for_finish = false;
-        if (this.all_done()) {
-            this.complete();
-        }
-    };
-
-    Tests.prototype.push = function(test)
-    {
-        if (this.phase < this.phases.HAVE_TESTS) {
-            this.start();
-        }
-        this.num_pending++;
-        this.tests.push(test);
-    };
-
-    Tests.prototype.all_done = function() {
-        return (this.all_loaded && this.num_pending === 0 &&
-                !this.wait_for_finish && !this.processing_callbacks);
-    };
-
-    Tests.prototype.start = function() {
-        this.phase = this.phases.HAVE_TESTS;
-        this.notify_start();
-    };
-
-    Tests.prototype.notify_start = function() {
-        var this_obj = this;
-        forEach (this.start_callbacks,
-                 function(callback)
-                 {
-                     callback(this_obj.properties);
-                 });
-        forEach_windows(
-                function(w, is_same_origin)
-                {
-                    if(is_same_origin && w.start_callback)
-                    {
-                        try
-                        {
-                            w.start_callback(this_obj.properties);
-                        }
-                        catch(e)
-                        {
-                            if (debug)
-                            {
-                                throw(e);
-                            }
-                        }
-                    }
-                    if (supports_post_message(w) && w !== self)
-                    {
-                        w.postMessage({
-                            type: "start",
-                            properties: this_obj.properties
-                        }, "*");
-                    }
-                });
-    };
-
-    Tests.prototype.result = function(test)
-    {
-        if (this.phase > this.phases.HAVE_RESULTS)
-        {
-            return;
-        }
-        this.phase = this.phases.HAVE_RESULTS;
-        this.num_pending--;
-        this.notify_result(test);
-    };
-
-    Tests.prototype.notify_result = function(test) {
-        var this_obj = this;
-        this.processing_callbacks = true;
-        forEach(this.test_done_callbacks,
-                function(callback)
-                {
-                    callback(test, this_obj);
-                });
-
-        forEach_windows(
-                function(w, is_same_origin)
-                {
-                    if(is_same_origin && w.result_callback)
-                    {
-                        try
-                        {
-                            w.result_callback(test);
-                        }
-                        catch(e)
-                        {
-                            if(debug) {
-                                throw e;
-                            }
-                        }
-                    }
-                    if (supports_post_message(w) && w !== self)
-                    {
-                        w.postMessage({
-                            type: "result",
-                            test: test.structured_clone()
-                        }, "*");
-                    }
-                });
-        this.processing_callbacks = false;
-        if (this_obj.all_done())
-        {
-            this_obj.complete();
-        }
-    };
-
-    Tests.prototype.complete = function() {
-        if (this.phase === this.phases.COMPLETE) {
-            return;
-        }
-        this.phase = this.phases.COMPLETE;
-        var this_obj = this;
-        this.tests.forEach(
-            function(x)
-            {
-                if(x.status === x.NOTRUN)
-                {
-                    this_obj.notify_result(x);
-                }
-            }
-        );
-        this.notify_complete();
-    };
-
-    Tests.prototype.notify_complete = function()
-    {
-        clearTimeout(this.timeout_id);
-        var this_obj = this;
-        var tests = map(this_obj.tests,
-                        function(test)
-                        {
-                            return test.structured_clone();
-                        });
-        if (this.status.status === null)
-        {
-            this.status.status = this.status.OK;
-        }
-
-        forEach (this.all_done_callbacks,
-                 function(callback)
-                 {
-                     callback(this_obj.tests, this_obj.status);
-                 });
-
-        forEach_windows(
-                function(w, is_same_origin)
-                {
-                    if(is_same_origin && w.completion_callback)
-                    {
-                        try
-                        {
-                            w.completion_callback(this_obj.tests, this_obj.status);
-                        }
-                        catch(e)
-                        {
-                            if (debug)
-                            {
-                                throw e;
-                            }
-                        }
-                    }
-                    if (supports_post_message(w) && w !== self)
-                    {
-                        w.postMessage({
-                            type: "complete",
-                            tests: tests,
-                            status: this_obj.status.structured_clone()
-                        }, "*");
-                    }
-                });
-    };
-
-    var tests = new Tests();
-
-    function timeout() {
-        if (tests.timeout_length === null)
-        {
-            tests.timeout();
-        }
-    }
-    expose(timeout, 'timeout');
-
-    function add_start_callback(callback) {
-        tests.start_callbacks.push(callback);
-    }
-
-    function add_result_callback(callback)
-    {
-        tests.test_done_callbacks.push(callback);
-    }
-
-    function add_completion_callback(callback)
-    {
-       tests.all_done_callbacks.push(callback);
-    }
-
-    expose(add_start_callback, 'add_start_callback');
-    expose(add_result_callback, 'add_result_callback');
-    expose(add_completion_callback, 'add_completion_callback');
-
-    /*
-     * Output listener
-    */
-
-    function Output() {
-      this.output_document = document;
-      this.output_node = null;
-      this.done_count = 0;
-      this.enabled = settings.output;
-      this.phase = this.INITIAL;
-    }
-
-    Output.prototype.INITIAL = 0;
-    Output.prototype.STARTED = 1;
-    Output.prototype.HAVE_RESULTS = 2;
-    Output.prototype.COMPLETE = 3;
-
-    Output.prototype.setup = function(properties) {
-        if (this.phase > this.INITIAL) {
-            return;
-        }
-
-        //If output is disabled in testharnessreport.js the test shouldn't be
-        //able to override that
-        this.enabled = this.enabled && (properties.hasOwnProperty("output") ?
-                                        properties.output : settings.output);
-    };
-
-    Output.prototype.init = function(properties)
-    {
-        if (this.phase >= this.STARTED) {
-            return;
-        }
-        if (properties.output_document) {
-            this.output_document = properties.output_document;
-        } else {
-            this.output_document = document;
-        }
-        this.phase = this.STARTED;
-    };
-
-    Output.prototype.resolve_log = function()
-    {
-        var output_document;
-        if (typeof this.output_document === "function")
-        {
-            output_document = this.output_document.apply(undefined);
-        } else
-        {
-            output_document = this.output_document;
-        }
-        if (!output_document)
-        {
-            return;
-        }
-        var node = output_document.getElementById("log");
-        if (node)
-        {
-            this.output_document = output_document;
-            this.output_node = node;
-        }
-    };
-
-    Output.prototype.show_status = function(test)
-    {
-        if (this.phase < this.STARTED)
-        {
-            this.init();
-        }
-        if (!this.enabled)
-        {
-            return;
-        }
-        if (this.phase < this.HAVE_RESULTS)
-        {
-            this.resolve_log();
-            this.phase = this.HAVE_RESULTS;
-        }
-        this.done_count++;
-        if (this.output_node)
-        {
-            if (this.done_count < 100
-            || (this.done_count < 1000 && this.done_count % 100 == 0)
-            || this.done_count % 1000 == 0) {
-                this.output_node.textContent = "Running, "
-                    + this.done_count + " complete, "
-                    + tests.num_pending + " remain";
-            }
-        }
-    };
-
-    Output.prototype.show_results = function (tests, harness_status)
-    {
-        if (this.phase >= this.COMPLETE) {
-            return;
-        }
-        if (!this.enabled)
-        {
-            return;
-        }
-        if (!this.output_node) {
-            this.resolve_log();
-        }
-        this.phase = this.COMPLETE;
-
-        var log = this.output_node;
-        if (!log)
-        {
-            return;
-        }
-        var output_document = this.output_document;
-
-        while (log.lastChild)
-        {
-            log.removeChild(log.lastChild);
-        }
-
-        if (script_prefix != null) {
-            var stylesheet = output_document.createElementNS(xhtml_ns, "link");
-            stylesheet.setAttribute("rel", "stylesheet");
-            stylesheet.setAttribute("href", script_prefix + "testharness.css");
-            var heads = output_document.getElementsByTagName("head");
-            if (heads.length) {
-                heads[0].appendChild(stylesheet);
-            }
-        }
-
-        var status_text = {};
-        status_text[Test.prototype.PASS] = "Pass";
-        status_text[Test.prototype.FAIL] = "Fail";
-        status_text[Test.prototype.TIMEOUT] = "Timeout";
-        status_text[Test.prototype.NOTRUN] = "Not Run";
-
-        var status_number = {};
-        forEach(tests, function(test) {
-                    var status = status_text[test.status];
-                    if (status_number.hasOwnProperty(status))
-                    {
-                        status_number[status] += 1;
-                    } else {
-                        status_number[status] = 1;
-                    }
-                });
-
-        function status_class(status)
-        {
-            return status.replace(/\s/g, '').toLowerCase();
-        }
-
-        var summary_template = ["section", {"id":"summary"},
-                                ["h2", {}, "Summary"],
-                                ["p", {}, "Found ${num_tests} tests"],
-                                function(vars) {
-                                    var rv = [["div", {}]];
-                                    var i=0;
-                                    while (status_text.hasOwnProperty(i)) {
-                                        if (status_number.hasOwnProperty(status_text[i])) {
-                                            var status = status_text[i];
-                                            rv[0].push(["div", {"class":status_class(status)},
-                                                        ["label", {},
-                                                         ["input", {type:"checkbox", checked:"checked"}],
-                                                         status_number[status] + " " + status]]);
-                                        }
-                                        i++;
-                                    }
-                                    return rv;
-                                }];
-
-        log.appendChild(render(summary_template, {num_tests:tests.length}, output_document));
-
-        forEach(output_document.querySelectorAll("section#summary label"),
-                function(element)
-                {
-                    on_event(element, "click",
-                             function(e)
-                             {
-                                 if (output_document.getElementById("results") === null)
-                                 {
-                                     e.preventDefault();
-                                     return;
-                                 }
-                                 var result_class = element.parentNode.getAttribute("class");
-                                 var style_element = output_document.querySelector("style#hide-" + result_class);
-                                 var input_element = element.querySelector("input");
-                                 if (!style_element && !input_element.checked) {
-                                     style_element = output_document.createElementNS(xhtml_ns, "style");
-                                     style_element.id = "hide-" + result_class;
-                                     style_element.textContent = "table#results > tbody > tr."+result_class+"{display:none}";
-                                     output_document.body.appendChild(style_element);
-                                 } else if (style_element && input_element.checked) {
-                                     style_element.parentNode.removeChild(style_element);
-                                 }
-                             });
-                });
-
-        // This use of innerHTML plus manual escaping is not recommended in
-        // general, but is necessary here for performance.  Using textContent
-        // on each individual <td> adds tens of seconds of execution time for
-        // large test suites (tens of thousands of tests).
-        function escape_html(s)
-        {
-            return s.replace(/\&/g, "&amp;")
-                .replace(/</g, "&lt;")
-                .replace(/"/g, "&quot;")
-                .replace(/'/g, "&#39;");
-        }
-
-        function has_assertions()
-        {
-            for (var i = 0; i < tests.length; i++) {
-                if (tests[i].properties.hasOwnProperty("assert")) {
-                    return true;
-                }
-            }
-            return false;
-        }
-        
-        function get_assertion(test)
-        {
-            if (test.properties.hasOwnProperty("assert")) {
-                if (Array.isArray(test.properties.assert)) {
-                    return test.properties.assert.join(' ');
-                }
-                return test.properties.assert;
-            }
-            return '';
-        }
-        
-        log.appendChild(document.createElementNS(xhtml_ns, "section"));
-        var assertions = has_assertions();
-        var html = "<h2>Details</h2><table id='results' " + (assertions ? "class='assertions'" : "" ) + ">"
-            + "<thead><tr><th>Result</th><th>Test Name</th>"
-            + (assertions ? "<th>Assertion</th>" : "")
-            + "<th>Message</th></tr></thead>"
-            + "<tbody>";
-        for (var i = 0; i < tests.length; i++) {
-            html += '<tr class="'
-                + escape_html(status_class(status_text[tests[i].status]))
-                + '"><td>'
-                + escape_html(status_text[tests[i].status])
-                + "</td><td>"
-                + escape_html(tests[i].name)
-                + "</td><td>"
-                + (assertions ? escape_html(get_assertion(tests[i])) + "</td><td>" : "")
-                + escape_html(tests[i].message ? tests[i].message : " ")
-                + "</td></tr>";
-        }
-        html += "</tbody></table>";
-        try {
-            log.lastChild.innerHTML = html;
-        } catch (e) {
-            log.appendChild(document.createElementNS(xhtml_ns, "p"))
-               .textContent = "Setting innerHTML for the log threw an exception.";
-            log.appendChild(document.createElementNS(xhtml_ns, "pre"))
-               .textContent = html;
-        }
-    };
-
-    var output = new Output();
-    add_start_callback(function (properties) {output.init(properties);});
-    add_result_callback(function (test) {output.show_status(tests);});
-    add_completion_callback(function (tests, harness_status) {output.show_results(tests, harness_status);});
-
-    /*
-     * Template code
-     *
-     * A template is just a javascript structure. An element is represented as:
-     *
-     * [tag_name, {attr_name:attr_value}, child1, child2]
-     *
-     * the children can either be strings (which act like text nodes), other templates or
-     * functions (see below)
-     *
-     * A text node is represented as
-     *
-     * ["{text}", value]
-     *
-     * String values have a simple substitution syntax; ${foo} represents a variable foo.
-     *
-     * It is possible to embed logic in templates by using a function in a place where a
-     * node would usually go. The function must either return part of a template or null.
-     *
-     * In cases where a set of nodes are required as output rather than a single node
-     * with children it is possible to just use a list
-     * [node1, node2, node3]
-     *
-     * Usage:
-     *
-     * render(template, substitutions) - take a template and an object mapping
-     * variable names to parameters and return either a DOM node or a list of DOM nodes
-     *
-     * substitute(template, substitutions) - take a template and variable mapping object,
-     * make the variable substitutions and return the substituted template
-     *
-     */
-
-    function is_single_node(template)
-    {
-        return typeof template[0] === "string";
-    }
-
-    function substitute(template, substitutions)
-    {
-        if (typeof template === "function") {
-            var replacement = template(substitutions);
-            if (replacement)
-            {
-                var rv = substitute(replacement, substitutions);
-                return rv;
-            }
-            else
-            {
-                return null;
-            }
-        }
-        else if (is_single_node(template))
-        {
-            return substitute_single(template, substitutions);
-        }
-        else
-        {
-            return filter(map(template, function(x) {
-                                  return substitute(x, substitutions);
-                              }), function(x) {return x !== null;});
-        }
-    }
-
-    function substitute_single(template, substitutions)
-    {
-        var substitution_re = /\${([^ }]*)}/g;
-
-        function do_substitution(input) {
-            var components = input.split(substitution_re);
-            var rv = [];
-            for (var i=0; i<components.length; i+=2)
-            {
-                rv.push(components[i]);
-                if (components[i+1])
-                {
-                    rv.push(String(substitutions[components[i+1]]));
-                }
-            }
-            return rv;
-        }
-
-        var rv = [];
-        rv.push(do_substitution(String(template[0])).join(""));
-
-        if (template[0] === "{text}") {
-            substitute_children(template.slice(1), rv);
-        } else {
-            substitute_attrs(template[1], rv);
-            substitute_children(template.slice(2), rv);
-        }
-
-        function substitute_attrs(attrs, rv)
-        {
-            rv[1] = {};
-            for (var name in template[1])
-            {
-                if (attrs.hasOwnProperty(name))
-                {
-                    var new_name = do_substitution(name).join("");
-                    var new_value = do_substitution(attrs[name]).join("");
-                    rv[1][new_name] = new_value;
-                };
-            }
-        }
-
-        function substitute_children(children, rv)
-        {
-            for (var i=0; i<children.length; i++)
-            {
-                if (children[i] instanceof Object) {
-                    var replacement = substitute(children[i], substitutions);
-                    if (replacement !== null)
-                    {
-                        if (is_single_node(replacement))
-                        {
-                            rv.push(replacement);
-                        }
-                        else
-                        {
-                            extend(rv, replacement);
-                        }
-                    }
-                }
-                else
-                {
-                    extend(rv, do_substitution(String(children[i])));
-                }
-            }
-            return rv;
-        }
-
-        return rv;
-    }
-
- function make_dom_single(template, doc)
- {
-     var output_document = doc || document;
-     if (template[0] === "{text}")
-     {
-         var element = output_document.createTextNode("");
-         for (var i=1; i<template.length; i++)
-         {
-             element.data += template[i];
-         }
-     }
-     else
-     {
-         var element = output_document.createElementNS(xhtml_ns, template[0]);
-         for (var name in template[1]) {
-             if (template[1].hasOwnProperty(name))
-             {
-                 element.setAttribute(name, template[1][name]);
-             }
-         }
-         for (var i=2; i<template.length; i++)
-         {
-             if (template[i] instanceof Object)
-             {
-                 var sub_element = make_dom(template[i]);
-                 element.appendChild(sub_element);
-             }
-             else
-             {
-                 var text_node = output_document.createTextNode(template[i]);
-                 element.appendChild(text_node);
-             }
-         }
-     }
-
-     return element;
- }
-
-
-
- function make_dom(template, substitutions, output_document)
-    {
-        if (is_single_node(template))
-        {
-            return make_dom_single(template, output_document);
-        }
-        else
-        {
-            return map(template, function(x) {
-                           return make_dom_single(x, output_document);
-                       });
-        }
-    }
-
- function render(template, substitutions, output_document)
-    {
-        return make_dom(substitute(template, substitutions), output_document);
-    }
-
-    /*
-     * Utility funcions
-     */
-    function assert(expected_true, function_name, description, error, substitutions)
-    {
-        if (expected_true !== true)
-        {
-            throw new AssertionError(make_message(function_name, description,
-                                                  error, substitutions));
-        }
-    }
-
-    function AssertionError(message)
-    {
-        this.message = message;
-    }
-
-    function make_message(function_name, description, error, substitutions)
-    {
-        for (var p in substitutions) {
-            if (substitutions.hasOwnProperty(p)) {
-                substitutions[p] = format_value(substitutions[p]);
-            }
-        }
-        var node_form = substitute(["{text}", "${function_name}: ${description}" + error],
-                                   merge({function_name:function_name,
-                                          description:(description?description + " ":"")},
-                                          substitutions));
-        return node_form.slice(1).join("");
-    }
-
-    function filter(array, callable, thisObj) {
-        var rv = [];
-        for (var i=0; i<array.length; i++)
-        {
-            if (array.hasOwnProperty(i))
-            {
-                var pass = callable.call(thisObj, array[i], i, array);
-                if (pass) {
-                    rv.push(array[i]);
-                }
-            }
-        }
-        return rv;
-    }
-
-    function map(array, callable, thisObj)
-    {
-        var rv = [];
-        rv.length = array.length;
-        for (var i=0; i<array.length; i++)
-        {
-            if (array.hasOwnProperty(i))
-            {
-                rv[i] = callable.call(thisObj, array[i], i, array);
-            }
-        }
-        return rv;
-    }
-
-    function extend(array, items)
-    {
-        Array.prototype.push.apply(array, items);
-    }
-
-    function forEach (array, callback, thisObj)
-    {
-        for (var i=0; i<array.length; i++)
-        {
-            if (array.hasOwnProperty(i))
-            {
-                callback.call(thisObj, array[i], i, array);
-            }
-        }
-    }
-
-    function merge(a,b)
-    {
-        var rv = {};
-        var p;
-        for (p in a)
-        {
-            rv[p] = a[p];
-        }
-        for (p in b) {
-            rv[p] = b[p];
-        }
-        return rv;
-    }
-
-    function expose(object, name)
-    {
-        var components = name.split(".");
-        var target = window;
-        for (var i=0; i<components.length - 1; i++)
-        {
-            if (!(components[i] in target))
-            {
-                target[components[i]] = {};
-            }
-            target = target[components[i]];
-        }
-        target[components[components.length - 1]] = object;
-    }
-
-    function forEach_windows(callback) {
-        // Iterate of the the windows [self ... top, opener]. The callback is passed
-        // two objects, the first one is the windows object itself, the second one
-        // is a boolean indicating whether or not its on the same origin as the
-        // current window.
-        var cache = forEach_windows.result_cache;
-        if (!cache) {
-            cache = [[self, true]];
-            var w = self;
-            var i = 0;
-            var so;
-            var origins = location.ancestorOrigins;
-            while (w != w.parent)
-            {
-                w = w.parent;
-                // In WebKit, calls to parent windows' properties that aren't on the same
-                // origin cause an error message to be displayed in the error console but
-                // don't throw an exception. This is a deviation from the current HTML5
-                // spec. See: https://bugs.webkit.org/show_bug.cgi?id=43504
-                // The problem with WebKit's behavior is that it pollutes the error console
-                // with error messages that can't be caught.
-                //
-                // This issue can be mitigated by relying on the (for now) proprietary
-                // `location.ancestorOrigins` property which returns an ordered list of
-                // the origins of enclosing windows. See:
-                // http://trac.webkit.org/changeset/113945.
-                if(origins) {
-                    so = (location.origin == origins[i]);
-                }
-                else
-                {
-                    so = is_same_origin(w);
-                }
-                cache.push([w, so]);
-                i++;
-            }
-            w = window.opener;
-            if(w)
-            {
-                // window.opener isn't included in the `location.ancestorOrigins` prop.
-                // We'll just have to deal with a simple check and an error msg on WebKit
-                // browsers in this case.
-                cache.push([w, is_same_origin(w)]);
-            }
-            forEach_windows.result_cache = cache;
-        }
-
-        forEach(cache,
-                function(a)
-                {
-                    callback.apply(null, a);
-                });
-    }
-
-    function is_same_origin(w) {
-        try {
-            'random_prop' in w;
-            return true;
-        } catch(e) {
-            return false;
-        }
-    }
-
-    function supports_post_message(w)
-    {
-        var supports;
-        var type;
-        // Given IE  implements postMessage across nested iframes but not across
-        // windows or tabs, you can't infer cross-origin communication from the presence
-        // of postMessage on the current window object only.
-        //
-        // Touching the postMessage prop on a window can throw if the window is
-        // not from the same origin AND post message is not supported in that
-        // browser. So just doing an existence test here won't do, you also need
-        // to wrap it in a try..cacth block.
-        try
-        {
-            type = typeof w.postMessage;
-            if (type === "function")
-            {
-                supports = true;
-            }
-            // IE8 supports postMessage, but implements it as a host object which
-            // returns "object" as its `typeof`.
-            else if (type === "object")
-            {
-                supports = true;
-            }
-            // This is the case where postMessage isn't supported AND accessing a
-            // window property across origins does NOT throw (e.g. old Safari browser).
-            else
-            {
-                supports = false;
-            }
-        }
-        catch(e) {
-            // This is the case where postMessage isn't supported AND accessing a
-            // window property across origins throws (e.g. old Firefox browser).
-            supports = false;
-        }
-        return supports;
-    }
-})();
-
-// vim: set expandtab shiftwidth=4 tabstop=4:
diff --git a/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/plugin/web_templates/resources/testharnessreport.js b/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/plugin/web_templates/resources/testharnessreport.js
deleted file mode 100755 (executable)
index fa73347..0000000
+++ /dev/null
@@ -1,380 +0,0 @@
-/*
- * This file is intended for vendors to implement
- * code needed to integrate testharness.js tests with their own test systems.
- *
- * The default implementation extracts metadata from the tests and validates 
- * it against the cached version that should be present in the test source 
- * file. If the cache is not found or is out of sync, source code suitable for
- * caching the metadata is optionally generated.
- *
- * The cached metadata is present for extraction by test processing tools that
- * are unable to execute javascript.
- *
- * Metadata is attached to tests via the properties parameter in the test
- * constructor. See testharness.js for details.
- *
- * Typically test system integration will attach callbacks when each test has
- * run, using add_result_callback(callback(test)), or when the whole test file
- * has completed, using 
- * add_completion_callback(callback(tests, harness_status)).
- *
- * For more documentation about the callback functions and the
- * parameters they are called with see testharness.js
- */
-
-
-
-var metadata_generator = {
-
-    currentMetadata: {},
-    cachedMetadata: false,
-    metadataProperties: ['help', 'assert', 'author'],
-    
-    error: function(message) {
-        var messageElement = document.createElement('p');
-        messageElement.setAttribute('class', 'error');
-        this.appendText(messageElement, message);
-        
-        var summary = document.getElementById('summary');
-        if (summary) {
-            summary.parentNode.insertBefore(messageElement, summary);
-        }
-        else {
-            document.body.appendChild(messageElement);
-        }
-    },
-
-    /**
-     * Ensure property value has contact information
-     */
-    validateContact: function(test, propertyName) {
-        var result = true;
-        var value = test.properties[propertyName];
-        var values = Array.isArray(value) ? value : [value];
-        for (var index = 0; index < values.length; index++) {
-            value = values[index];
-            var re = /(\S+)(\s*)<(.*)>(.*)/;
-            if (! re.test(value)) {
-                re = /(\S+)(\s+)(http[s]?:\/\/)(.*)/
-                if (! re.test(value)) {
-                    this.error('Metadata property "' + propertyName + 
-                        '" for test: "' + test.name +
-                        '" must have name and contact information ' +
-                        '("name <email>" or "name http(s)://")');
-                    result = false;
-                }
-            }
-        }
-        return result;
-    },
-    
-    /**
-     * Extract metadata from test object
-     */
-    extractFromTest: function(test) {
-        var testMetadata = {};
-        // filter out metadata from other properties in test
-        for (var metaIndex = 0; metaIndex < this.metadataProperties.length;
-             metaIndex++) {
-            var meta = this.metadataProperties[metaIndex];
-            if (test.properties.hasOwnProperty(meta)) {
-                if ('author' == meta) {
-                    this.validateContact(test, meta);
-                }
-                testMetadata[meta] = test.properties[meta];
-            }
-        }
-        return testMetadata;
-    },
-    
-    /**
-     * Compare cached metadata to extracted metadata
-     */
-    validateCache: function() {
-        for (var testName in this.currentMetadata) {
-            if (! this.cachedMetadata.hasOwnProperty(testName)) {
-                return false;
-            }
-            var testMetadata = this.currentMetadata[testName];
-            var cachedTestMetadata = this.cachedMetadata[testName];
-            delete this.cachedMetadata[testName];
-            
-            for (var metaIndex = 0; metaIndex < this.metadataProperties.length;
-                 metaIndex++) {
-                var meta = this.metadataProperties[metaIndex];
-                if (cachedTestMetadata.hasOwnProperty(meta) && 
-                    testMetadata.hasOwnProperty(meta)) {
-                    if (Array.isArray(cachedTestMetadata[meta])) {
-                      if (! Array.isArray(testMetadata[meta])) {
-                          return false;
-                      }
-                      if (cachedTestMetadata[meta].length == 
-                          testMetadata[meta].length) {
-                          for (var index = 0; 
-                               index < cachedTestMetadata[meta].length; 
-                               index++) {
-                              if (cachedTestMetadata[meta][index] != 
-                                  testMetadata[meta][index]) {
-                                  return false;
-                              }
-                          }
-                      }
-                      else {
-                          return false;
-                      }
-                    }
-                    else {
-                      if (Array.isArray(testMetadata[meta])) {
-                        return false;
-                      }
-                      if (cachedTestMetadata[meta] != testMetadata[meta]) {
-                        return false;
-                      }
-                    }
-                }
-                else if (cachedTestMetadata.hasOwnProperty(meta) || 
-                         testMetadata.hasOwnProperty(meta)) {
-                    return false;
-                }
-            }
-        }
-        for (var testName in this.cachedMetadata) {
-            return false;
-        }
-        return true;
-    },
-  
-    appendText: function(elemement, text) {
-        elemement.appendChild(document.createTextNode(text));
-    },
-  
-    jsonifyArray: function(arrayValue, indent) {
-        var output = '[';
-
-        if (1 == arrayValue.length) {
-            output += JSON.stringify(arrayValue[0]);
-        }
-        else {
-            for (var index = 0; index < arrayValue.length; index++) {
-                if (0 < index) {
-                    output += ',\n  ' + indent;
-                }
-                output += JSON.stringify(arrayValue[index]);
-            }
-        }
-        output += ']';
-        return output;
-    },
-    
-    jsonifyObject: function(objectValue, indent) {
-        var output = '{';
-        
-        var count = 0;
-        for (var property in objectValue) {
-            ++count;
-            if (Array.isArray(objectValue[property]) || 
-                ('object' == typeof(value))) {
-                ++count;
-            }
-        }
-        if (1 == count) {
-            for (var property in objectValue) {
-                output += ' "' + property + '": '
-                          + JSON.stringify(objectValue[property])
-                          + ' ';
-            }
-        }
-        else {
-            var first = true;
-            for (var property in objectValue) {
-                if (! first) {
-                    output += ',';
-                }
-                first = false;
-                output += '\n  ' + indent + '"' + property + '": ';
-                var value = objectValue[property];
-                if (Array.isArray(value)) {
-                    output += this.jsonifyArray(value, indent + 
-                        '                '.substr(0, 5 + property.length));
-                }
-                else if ('object' == typeof(value)) {
-                    output += this.jsonifyObject(value, indent + '  ');
-                }
-                else {
-                    output += JSON.stringify(value);
-                }
-            }
-            if (1 < output.length) {
-                output += '\n' + indent;
-            }
-        }
-        output += '}';
-        return output;
-    },
-  
-    /**
-     * Generate javascript source code for captured metadata
-     * Metadata is in pretty-printed JSON format
-     */
-    generateSource: function() {
-        var source = 
-            '<script id="metadata_cache">/*\n' + 
-            this.jsonifyObject(this.currentMetadata, '') + '\n' + 
-            '*/</script>\n';
-        return source;
-    },
-    
-    /**
-     * Add element containing metadata source code
-     */
-    addSourceElement: function(event) {
-        var sourceWrapper = document.createElement('div');
-        sourceWrapper.setAttribute('id', 'metadata_source');
-
-        var instructions = document.createElement('p');
-        if (this.cachedMetadata) {
-            this.appendText(instructions, 
-                'Replace the existing <script id="metadata_cache"> element ' + 
-                'in the test\'s <head> with the following:');
-        }
-        else {
-            this.appendText(instructions, 
-                'Copy the following into the <head> element of the test ' +
-                'or the test\'s metadata sidecar file:');
-        }
-        sourceWrapper.appendChild(instructions);
-        
-        var sourceElement = document.createElement('pre');
-        this.appendText(sourceElement, this.generateSource());
-
-        sourceWrapper.appendChild(sourceElement);
-        
-        var messageElement = document.getElementById('metadata_issue');
-        messageElement.parentNode.insertBefore(sourceWrapper, 
-                                               messageElement.nextSibling);
-        messageElement.parentNode.removeChild(messageElement);
-
-        (event.preventDefault) ? event.preventDefault() : 
-                                 event.returnValue = false;
-    },
-    
-    /**
-     * Extract the metadata cache from the cache element if present
-     */
-    getCachedMetadata: function() {
-        var cacheElement = document.getElementById('metadata_cache');
-        
-        if (cacheElement) {
-            var cacheText = cacheElement.firstChild.nodeValue;
-            var openBrace = cacheText.indexOf('{');
-            var closeBrace = cacheText.lastIndexOf('}');
-            if ((-1 < openBrace) && (-1 < closeBrace)) {
-                cacheText = cacheText.slice(openBrace, closeBrace + 1);
-                try {
-                    this.cachedMetadata = JSON.parse(cacheText);
-                }
-                catch (exc) {
-                    this.cachedMetadata = 'Invalid JSON in Cached metadata. ';
-                }
-            }
-            else {
-                this.cachedMetadata = 'Metadata not found in cache element. ';
-            }
-        }
-    },
-    
-    /**
-     * Main entry point, extract metadata from tests, compare to cached version
-     * if present.
-     * If cache not present or differs from extrated metadata, generate an error
-     */
-    process: function(tests, harness_status) {
-        for (var index = 0; index < tests.length; index++) {
-            var test = tests[index];
-            if (this.currentMetadata.hasOwnProperty(test.name)) {
-                this.error('Duplicate test name: ' + test.name);
-            }
-            else {
-                this.currentMetadata[test.name] = this.extractFromTest(test);
-            }
-        }
-
-        this.getCachedMetadata();
-        
-        var message = null;
-        var messageClass = 'warning';
-        var showSource = false;
-        
-        if (0 == tests.length) {
-            if (this.cachedMetadata) {
-                message = 'Cached metadata present but no tests. ';
-            }
-        }
-        else if (1 == tests.length) {
-            if (this.cachedMetadata) {
-                message = 'Single test files should not have cached metadata. ';
-            }
-            else {
-                var testMetadata = this.currentMetadata[tests[0].name];
-                var hasMetadata = false;
-                for (var meta in testMetadata) {
-                    hasMetadata |= testMetadata.hasOwnProperty(meta);
-                }
-                if (hasMetadata) {
-                    message = 'Single tests should not have metadata. ' +
-                              'Move metadata to <head>. ';
-                }
-            }
-        }
-        else {
-            if (this.cachedMetadata) {
-                messageClass = 'error';
-                if ('string' == typeof(this.cachedMetadata)) {
-                    message = this.cachedMetadata;
-                    showSource = true;
-                }
-                else if (! this.validateCache()) {
-                    message = 'Cached metadata out of sync. ';
-                    showSource = true;
-                }
-            }
-        }
-        
-        if (message) {
-            var messageElement = document.createElement('p');
-            messageElement.setAttribute('id', 'metadata_issue');
-            messageElement.setAttribute('class', messageClass);
-            this.appendText(messageElement, message);
-            
-            if (showSource) {
-                var link = document.createElement('a');
-                this.appendText(link, 'Click for source code.');
-                link.setAttribute('href', '#');
-                link.setAttribute('onclick', 
-                                  'metadata_generator.addSourceElement(event)');
-                messageElement.appendChild(link);
-            }
-            
-            var summary = document.getElementById('summary');
-            if (summary) {
-                summary.parentNode.insertBefore(messageElement, summary);
-            }
-            else {
-                var log = document.getElementById('log');
-                if (log) {
-                    log.appendChild(messageElement);
-                }
-            }
-        }
-    },
-
-    setup: function() {
-        add_completion_callback(
-            function (tests, harness_status) { 
-                metadata_generator.process(tests, harness_status)
-            });
-    }
-}
-
-metadata_generator.setup();
-// vim: set expandtab shiftwidth=4 tabstop=4:
diff --git a/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/plugin/web_templates/testcase.xsl b/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/plugin/web_templates/testcase.xsl
deleted file mode 100755 (executable)
index 8623c28..0000000
+++ /dev/null
@@ -1,181 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<xsl:stylesheet version="1.0"
-       xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
-       <xsl:output method="html" version="1.0" encoding="UTF-8"
-               indent="yes" />
-       <xsl:template match="/">
-               <html>
-                       <STYLE type="text/css">
-                               @import "tests.css";
-                       </STYLE>
-
-                       <body>
-                               <div id="testcasepage">
-                                       <div id="title">
-                                               <table>
-                                                       <tr>
-                                                               <td>
-                                                                       <h1>Test Cases</h1>
-                                                               </td>
-                                                       </tr>
-                                               </table>
-                                       </div>
-                                       <div id="suites">
-                                               <table>
-                                                       <tr>
-                                                               <th>Test Suite</th>
-                                                               <th>Total</th>
-                                                               <th>Auto</th>
-                                                               <th>Manual</th>
-                                                       </tr>
-                                                       <tr>
-                                                               <td>
-                                                                       Total
-                                                               </td>
-                                                               <td>
-                                                                       <xsl:value-of select="count(test_definition/suite/set//testcase)" />
-                                                               </td>
-                                                               <td>
-                                                                       <xsl:value-of
-                                                                               select="count(test_definition/suite/set//testcase[@execution_type = 'auto'])" />
-                                                               </td>
-                                                               <td>
-                                                                       <xsl:value-of
-                                                                               select="count(test_definition/suite/set//testcase[@execution_type != 'auto'])" />
-                                                               </td>
-                                                       </tr>
-                                                       <xsl:for-each select="test_definition/suite">
-                                                               <tr>
-                                                                       <td>
-                                                                               <xsl:value-of select="@name" />
-                                                                       </td>
-                                                                       <td>
-                                                                               <xsl:value-of select="count(set//testcase)" />
-                                                                       </td>
-                                                                       <td>
-                                                                               <xsl:value-of select="count(set/testcase[@execution_type = 'auto'])" />
-                                                                       </td>
-                                                                       <td>
-                                                                               <xsl:value-of select="count(set/testcase[@execution_type != 'auto'])" />
-                                                                       </td>
-                                                               </tr>
-                                                       </xsl:for-each>
-                                               </table>
-                                       </div>
-                                       <div id="title">
-                                               <table>
-                                                       <tr>
-                                                               <td class="title">
-                                                                       <h1>Detailed Test Cases</h1>
-                                                               </td>
-                                                       </tr>
-                                               </table>
-                                       </div>
-                                       <div id="cases">
-                                               <xsl:for-each select="test_definition/suite">
-                                                       <xsl:sort select="@name" />
-                                                       <p>
-                                                               Test Suite:
-                                                               <xsl:value-of select="@name" />
-                                                       </p>
-                                                       <table>
-                                                               <tr>
-                                                                       <th>Case_ID</th>
-                                                                       <th>Purpose</th>
-                                                                       <th>Type</th>
-                                                                       <th>Component</th>
-                                                                       <th>Execution Type</th>
-                                                                       <th>Description</th>
-                                                                       <th>Specification</th>
-                                                               </tr>
-                                                               <xsl:for-each select=".//set">
-                                                                       <xsl:sort select="@name" />
-                                                                       <tr>
-                                                                               <td colspan="7">
-                                                                                       Test Set:
-                                                                                       <xsl:value-of select="@name" />
-                                                                               </td>
-                                                                       </tr>
-                                                                       <xsl:for-each select=".//testcase">
-                                                                               <xsl:sort select="@id" />
-                                                                               <tr>
-                                                                                       <td>
-                                                                                               <xsl:value-of select="@id" />
-                                                                                       </td>
-                                                                                       <td>
-                                                                                               <xsl:value-of select="@purpose" />
-                                                                                       </td>
-                                                                                       <td>
-                                                                                               <xsl:value-of select="@type" />
-                                                                                       </td>
-                                                                                       <td>
-                                                                                               <xsl:value-of select="@component" />
-                                                                                       </td>
-                                                                                       <td>
-                                                                                               <xsl:value-of select="@execution_type" />
-                                                                                       </td>
-                                                                                       <td>
-                                                                                               <p>
-                                                                                                       Pre_condition:
-                                                                                                       <xsl:value-of select=".//description/pre_condition" />
-                                                                                               </p>
-                                                                                               <p>
-                                                                                                       Post_condition:
-                                                                                                       <xsl:value-of select=".//description/post_condition" />
-                                                                                               </p>
-                                                                                               <p>
-                                                                                                       Test Script Entry:
-                                                                                                       <xsl:value-of select=".//description/test_script_entry" />
-                                                                                               </p>
-                                                                                               <p>
-                                                                                                       Steps:
-                                                                                                       <p />
-                                                                                                       <xsl:for-each select=".//description/steps/step">
-                                                                                                               <xsl:sort select="@order" />
-                                                                                                               Step
-                                                                                                               <xsl:value-of select="@order" />
-                                                                                                               :
-                                                                                                               <xsl:value-of select="./step_desc" />
-                                                                                                               ;
-                                                                                                               <p />
-                                                                                                               Expected Result:
-                                                                                                               <xsl:value-of select="./expected" />
-                                                                                                               <p />
-                                                                                                       </xsl:for-each>
-                                                                                               </p>
-                                                                                       </td>
-                                                                                       <td>
-                                                                                               <xsl:call-template name="br-replace">
-                                                                                                       <xsl:with-param name="word" select=".//spec" />
-                                                                                               </xsl:call-template>
-                                                                                       </td>
-                                                                               </tr>
-                                                                       </xsl:for-each>
-                                                               </xsl:for-each>
-                                                       </table>
-                                               </xsl:for-each>
-                                       </div>
-                               </div>
-                       </body>
-               </html>
-       </xsl:template>
-       <xsl:template name="br-replace">
-               <xsl:param name="word" />
-               <xsl:variable name="cr">
-                       <xsl:text>
-</xsl:text>
-               </xsl:variable>
-               <xsl:choose>
-                       <xsl:when test="contains($word,$cr)">
-                               <xsl:value-of select="substring-before($word,$cr)" />
-                               <br />
-                               <xsl:call-template name="br-replace">
-                                       <xsl:with-param name="word" select="substring-after($word,$cr)" />
-                               </xsl:call-template>
-                       </xsl:when>
-                       <xsl:otherwise>
-                               <xsl:value-of select="$word" />
-                       </xsl:otherwise>
-               </xsl:choose>
-       </xsl:template>
-</xsl:stylesheet>
\ No newline at end of file
diff --git a/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/plugin/web_templates/testcase/Makefile.am b/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/plugin/web_templates/testcase/Makefile.am
deleted file mode 100755 (executable)
index 4cc5091..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
-testcase_SCRIPTS = *
-testcasedir = $(prefix)/opt/{TESTSUITE_NAME}/testcase
-EXTRA_DIST = $(testcase_SCRIPTS)
diff --git a/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/plugin/web_templates/testresult.xsl b/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/plugin/web_templates/testresult.xsl
deleted file mode 100755 (executable)
index d1ad1b9..0000000
+++ /dev/null
@@ -1,273 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<xsl:stylesheet version="1.0"
-       xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
-       <xsl:output method="html" version="1.0" encoding="UTF-8"
-               indent="yes" />
-       <xsl:template match="/">
-               <html>
-                       <STYLE type="text/css">
-                               @import "tests.css";
-                       </STYLE>
-
-                       <body>
-                               <div id="testcasepage">
-                                       <div id="title">
-                                               <table>
-                                                       <tr>
-                                                               <td>
-                                                                       <h1>Test Report</h1>
-                                                               </td>
-                                                       </tr>
-                                               </table>
-                                       </div>
-                                       <div id="device">
-                                               <table>
-                                                       <tr>
-                                                               <th colspan="2">Device Information</th>
-                                                       </tr>
-                                                       <tr>
-                                                               <td>Device Name</td>
-                                                               <td>
-                                                                       <xsl:value-of select="test_definition/environment/@device_name" />
-                                                               </td>
-                                                       </tr>
-                                                       <tr>
-                                                               <td>Device Model</td>
-                                                               <td>
-                                                                       <xsl:value-of select="test_definition/environment/@device_model" />
-                                                               </td>
-                                                       </tr>
-                                                       <tr>
-                                                               <td>OS Version</td>
-                                                               <td>
-                                                                       <xsl:value-of select="test_definition/environment/@os_version" />
-                                                               </td>
-                                                       </tr>
-                                                       <tr>
-                                                               <td>Device ID</td>
-                                                               <td>
-                                                                       <xsl:value-of select="test_definition/environment/@device_id" />
-                                                               </td>
-                                                       </tr>
-                                                       <tr>
-                                                               <td>Firmware Version</td>
-                                                               <td>
-                                                                       <xsl:value-of select="test_definition/environment/@firmware_version" />
-                                                               </td>
-                                                       </tr>
-                                                       <tr>
-                                                               <td>Screen Size</td>
-                                                               <td>
-                                                                       <xsl:value-of select="test_definition/environment/@screen_size" />
-                                                               </td>
-                                                       </tr>
-                                                       <tr>
-                                                               <td>Resolution</td>
-                                                               <td>
-                                                                       <xsl:value-of select="test_definition/environment/@resolution" />
-                                                               </td>
-                                                       </tr>
-                                                       <tr>
-                                                               <td>Host Info</td>
-                                                               <td>
-                                                                       <xsl:value-of select="test_definition/environment/@host" />
-                                                               </td>
-                                                       </tr>
-                                                       <tr>
-                                                               <td>Others</td>
-                                                               <td>
-                                                                       <xsl:value-of select="test_definition/environment/other" />
-                                                               </td>
-                                                       </tr>
-                                               </table>
-                                       </div>
-
-                                       <div id="summary">
-                                               <table>
-                                                       <tr>
-                                                               <th colspan="2">Test Summary</th>
-                                                       </tr>
-                                                       <tr>
-                                                               <td>Test Plan Name</td>
-                                                               <td>
-                                                                       <xsl:value-of select="test_definition/summary/@test_plan_name" />
-                                                               </td>
-                                                       </tr>
-                                                       <tr>
-                                                               <td>Tests Total</td>
-                                                               <td>
-                                                                       <xsl:value-of select="count(test_definition//suite/set/testcase)" />
-                                                               </td>
-                                                       </tr>
-                                                       <tr>
-                                                               <td>Test Passed</td>
-                                                               <td>
-                                                                       <xsl:value-of
-                                                                               select="count(test_definition//suite/set/testcase[@result = 'PASS'])" />
-                                                               </td>
-                                                       </tr>
-                                                       <tr>
-                                                               <td>Test Failed</td>
-                                                               <td>
-                                                                       <xsl:value-of
-                                                                               select="count(test_definition//suite/set/testcase[@result = 'FAIL'])" />
-                                                               </td>
-                                                       </tr>
-                                                       <tr>
-                                                               <td>Test N/A</td>
-                                                               <td>
-                                                                       <xsl:value-of
-                                                                               select="count(test_definition//suite/set/testcase[@result = 'BLOCK'])" />
-                                                               </td>
-                                                       </tr>
-                                                       <tr>
-                                                               <td>Test Not Run</td>
-                                                               <td>
-                                                                       <xsl:value-of
-                                                                               select="count(test_definition//suite/set/testcase) - count(test_definition//suite/set/testcase[@result = 'PASS']) - count(test_definition//suite/set/testcase[@result = 'FAIL']) - count(test_definition//suite/set/testcase[@result = 'BLOCK'])" />
-                                                               </td>
-                                                       </tr>
-                                                       <tr>
-                                                               <td>Start time</td>
-                                                               <td>
-                                                                       <xsl:value-of select="test_definition/summary/start_at" />
-                                                               </td>
-                                                       </tr>
-                                                       <tr>
-                                                               <td>End time</td>
-                                                               <td>
-                                                                       <xsl:value-of select="test_definition/summary/end_at" />
-                                                               </td>
-                                                       </tr>
-                                               </table>
-                                       </div>
-
-
-                                       <div id="suite_summary">
-                                               <div id="title">
-                                                       <table>
-                                                               <tr>
-                                                                       <td class="title">
-                                                                               <h1>Test Summary by Suite</h1>
-                                                                       </td>
-                                                               </tr>
-                                                       </table>
-                                               </div>
-                                               <table>
-                                                       <tr>
-                                                               <th>Suite</th>
-                                                               <th>Passed</th>
-                                                               <th>Failed</th>
-                                                               <th>N/A</th>
-                                                               <th>Not Run</th>
-                                                               <th>Total</th>
-                                                       </tr>
-                                                       <xsl:for-each select="test_definition/suite">
-                                                               <xsl:sort select="@name" />
-                                                               <tr>
-                                                                       <td>
-                                                                               <xsl:value-of select="@name" />
-                                                                       </td>
-                                                                       <td>
-                                                                               <xsl:value-of select="count(set//testcase[@result = 'PASS'])" />
-                                                                       </td>
-                                                                       <td>
-                                                                               <xsl:value-of select="count(set//testcase[@result = 'FAIL'])" />
-                                                                       </td>
-                                                                       <td>
-                                                                               <xsl:value-of select="count(set//testcase[@result = 'BLOCK'])" />
-                                                                       </td>
-                                                                       <td>
-                                                                               <xsl:value-of
-                                                                                       select="count(set//testcase) - count(set//testcase[@result = 'PASS']) - count(set//testcase[@result = 'FAIL']) - count(set//testcase[@result = 'BLOCK'])" />
-                                                                       </td>
-                                                                       <td>
-                                                                               <xsl:value-of select="count(set//testcase)" />
-                                                                       </td>
-                                                               </tr>
-                                                       </xsl:for-each>
-                                               </table>
-                                       </div>
-
-                                       <div id="cases">
-                                               <div id="title">
-                                                       <table>
-                                                               <tr>
-                                                                       <td class="title">
-                                                                               <h1 align="center">Detailed Test Results</h1>
-                                                                       </td>
-                                                               </tr>
-                                                       </table>
-                                               </div>
-                                               <xsl:for-each select="test_definition/suite">
-                                                       <xsl:sort select="@name" />
-                                                       <p>
-                                                               Test Suite:
-                                                               <xsl:value-of select="@name" />
-                                                       </p>
-                                                       <table>
-                                                               <tr>
-                                                                       <th>Case_ID</th>
-                                                                       <th>Purpose</th>
-                                                                       <th>Result</th>
-                                                                       <th>Stdout</th>
-                                                               </tr>
-                                                               <xsl:for-each select=".//set">
-                                                                       <xsl:sort select="@name" />
-                                                                       <tr>
-                                                                               <td colspan="4">
-                                                                                       Test Set:
-                                                                                       <xsl:value-of select="@name" />
-                                                                               </td>
-                                                                       </tr>
-                                                                       <xsl:for-each select=".//testcase">
-                                                                               <xsl:sort select="@id" />
-                                                                               <tr>
-                                                                                       <td>
-                                                                                               <xsl:value-of select="@id" />
-                                                                                       </td>
-                                                                                       <td>
-                                                                                               <xsl:value-of select="@purpose" />
-                                                                                       </td>
-
-                                                                                       <xsl:choose>
-                                                                                               <xsl:when test="@result">
-                                                                                                       <xsl:if test="@result = 'FAIL'">
-                                                                                                               <td class="red_rate">
-                                                                                                                       <xsl:value-of select="@result" />
-                                                                                                               </td>
-                                                                                                       </xsl:if>
-                                                                                                       <xsl:if test="@result = 'PASS'">
-                                                                                                               <td class="green_rate">
-                                                                                                                       <xsl:value-of select="@result" />
-                                                                                                               </td>
-                                                                                                       </xsl:if>
-                                                                                                       <xsl:if test="@result = 'BLOCK' ">
-                                                                                                               <td>
-                                                                                                                       BLOCK
-                                                                                                               </td>
-                                                                                                       </xsl:if>
-                                                                                               </xsl:when>
-                                                                                               <xsl:otherwise>
-                                                                                                       <td>
-
-                                                                                                       </td>
-                                                                                               </xsl:otherwise>
-                                                                                       </xsl:choose>
-                                                                                       <td>
-                                                                                               <xsl:value-of select=".//result_info/stdout" />
-                                                                                               <xsl:if test=".//result_info/stdout = ''">
-                                                                                                       N/A
-                                                                                               </xsl:if>
-                                                                                       </td>
-                                                                               </tr>
-                                                                       </xsl:for-each>
-                                                               </xsl:for-each>
-                                                       </table>
-                                               </xsl:for-each>
-                                       </div>
-                               </div>
-                       </body>
-               </html>
-       </xsl:template>
-</xsl:stylesheet>
\ No newline at end of file
diff --git a/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/plugin/web_templates/tests.css b/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/plugin/web_templates/tests.css
deleted file mode 100755 (executable)
index 30c3670..0000000
+++ /dev/null
@@ -1,103 +0,0 @@
-@charset "UTF-8";
-/* CSS Document */
-#testcasepage div,#testcasepage h1,#testcasepage p,#testcasepage table,#testcasepage tr,#testcasepage th,#testcasepage td
-       {
-       margin: 0;
-       padding: 0;
-       border: 0;
-       font-weight: inherit;
-       font-style: inherit;
-       font-size: 0.96em;
-       font-family: arial;
-       vertical-align: baseline;
-}
-
-#testcasepage p {
-       text-align: left;
-}
-
-#testcasepage table {
-       border-collapse: separate;
-       border-spacing: 0;
-       margin-bottom: 1.4em;
-       vertical-align: middle;
-}
-
-#testcasepage th,#testcasepage td {
-       text-align: left;
-       font-weight: normal;
-       padding: 4px 10px 4px 5px;
-       vertical-align: middle;
-}
-
-#cases table {
-       width: 101%;
-}
-
-#title table {
-       width: 101%;
-}
-
-#device table {
-       width: 50%;
-}
-
-#summary table {
-       width: 50%;
-}
-
-#testcasepage th {
-       border-bottom: 1px solid #000;
-       background-color: #AAAAAA;
-       border-left: 1px solid #000;
-       border-top: 1px solid #000;
-       color: #000;
-       font-weight: bold;
-       vertical-align: bottom;
-}
-
-#testcasepage th:last-child, #testcasepage td:last-child {
-       border-right: 1px solid #000;
-}
-
-#testcasepage td {
-       border-left: 1px solid;
-       font-weight: normal;
-       border-bottom: 1px solid;
-}
-
-#testcasepage td.yellow_rate {
-       background-color: #ffcc00;
-}
-
-#testcasepage td.green_rate {
-       background-color: #33cc33;
-}
-
-#testcasepage td.dgreen_rate {
-       background-color: #339933;
-}
-
-#testcasepage td.red_rate {
-       background-color: #FF3333;
-}
-
-#title table, #title tr, #title td {
-       border-left: none;
-       border-bottom: none;
-       text-align: center;
-}
-
-#title td:last-child {
-       border-right: none;
-}
-
-#testcasepage h1 {
-       font-size: 2em;
-       font-family: Arial, sans-serif; font-weight : bold;
-       line-height: 1;
-       color: #000;
-       margin-bottom: 0.75em;
-       padding-top: 0.25em;
-       font-weight: bold;
-}
\ No newline at end of file
diff --git a/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/plugin/web_templates/tests.full.xml b/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/plugin/web_templates/tests.full.xml
deleted file mode 100755 (executable)
index 53e541d..0000000
+++ /dev/null
@@ -1,20 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<?xml-stylesheet type="text/xsl"  href="./testcase.xsl"?>
-<test_definition>
-  <suite name="{TESTSUITE_NAME}" launcher="WRTLauncher" category="undefined">
-    <set name="Default">
-      <testcase component="TizenAPI/Application/Default" execution_type="auto"  id="testcase" priority="P1" purpose="" type="" status="approved">
-        <description>
-          <test_script_entry>/opt/{TESTSUITE_NAME}/testcase/{TESTCASE}.html</test_script_entry>
-        </description>
-        <specs>
-          <spec>
-            <spec_assertion element_type="" element_name="" interface="" specification="" section="" category=""/>
-            <spec_url></spec_url>
-            <spec_statement/>
-          </spec>
-        </specs>
-      </testcase>
-    </set>
-  </suite>
-</test_definition>
diff --git a/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/plugin/web_templates/tests.xml b/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/plugin/web_templates/tests.xml
deleted file mode 100755 (executable)
index b8c5326..0000000
+++ /dev/null
@@ -1,13 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<?xml-stylesheet type="text/xsl" href="./testcase.xsl"?>
-<test_definition>
-  <suite name="{TESTSUITE_NAME}" launcher="WRTLauncher" category="undefined">
-    <set name="Default">
-      <testcase component="TizenAPI/Application/Default" execution_type="auto" id="testcase" priority="P1" purpose="">
-        <description>
-          <test_script_entry>/opt/{TESTSUITE_NAME}/testcase/{TESTCASE}.html</test_script_entry>
-        </description>
-      </testcase>
-    </set>
-  </suite>
-</test_definition>
diff --git a/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/plugin/web_templates/webrunner/Makefile.am b/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/plugin/web_templates/webrunner/Makefile.am
deleted file mode 100755 (executable)
index 82b67c5..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
-webrunner_SCRIPTS = *
-webrunnerdir = $(prefix)/opt/{TESTSUITE_NAME}/webrunner
-EXTRA_DIST = $(webrunner_SCRIPTS)
diff --git a/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/plugin/web_templates/webrunner/index.html b/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/plugin/web_templates/webrunner/index.html
deleted file mode 100755 (executable)
index 51e03b2..0000000
+++ /dev/null
@@ -1,141 +0,0 @@
-<!doctype html>
-<!--
-Copyright (c) 2015 Samsung Electronics Co.
-
-Redistribution and use in source and binary forms, with or without modification,
-are permitted provided that the following conditions are met:
-
-* Redistributions of works must retain the original copyright notice, this list
-  of conditions and the following disclaimer.
-* Redistributions in binary form must reproduce the original copyright notice,
-  this list of conditions and the following disclaimer in the documentation
-  and/or other materials provided with the distribution.
-* Neither the name of Intel Corporation nor the names of its contributors
-  may be used to endorse or promote products derived from this work without
-  specific prior written permission.
-
-THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
-AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
-ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
-INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
-BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
-OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
-NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
-EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-Authors:
-
-
--->
-
-<head>
-<meta name="viewport" content="width=device-width">
-<script src="jquery-1.10.2.min.js"></script>
-<style type="text/css">
-html {
-       font-family:DejaVu Sans, Bitstream Vera Sans, Arial, Sans;
-}
-
-body {
-       background-color: white;
-}
-
-table#browse {
-       border-collapse:collapse;
-       table-layout:fixed;width:80%;
-}
-
-table#browse th:first-child,table#browse td:first-child {width:40%;}
-
-table#browse th:last-child,table#browse td:last-child {width:30%;}
-
-table#browse th {
-       padding:0;
-       padding-bottom:0.5em;
-       text-align:left;
-       border-bottom:medium solid black;
-}
-table#browse td {
-       padding:1em;
-       padding-bottom:0.5em;
-       border-bottom:thin solid black;
-}
-div#navbar{
-       box-sizing: border-box;
-       width: 99%;
-       border: 0px;
-       text-align: left;
-       background: slateblue;
-       color: white;
-}
-div#footbar{
-       width: 99%;
-       border: 0px;
-       text-align: left;
-}
-textarea#testinfo{
-       width: 99%;
-       font-size: 0.8em;
-}
-input{
-       font-size: 1.2em;
-       padding-top: 0.1em;
-       padding-bottom: 0.1em;
-}
-
-#btnPrev,#btnNext{
-       width: 8%;
-}
-#btnDone,#btnRun,#btnList,#btnPass,#btnFail,#btnBlock{
-       width: 12%;
-       font-weight: bold;
-}
-
-#btnPass { color: green;}
-#btnFail { color: red;}
-#btnBlock { color: orange;}
-#labBatch{
-       font-size: 0.5em;
-}
-#textTest {
-       width: 60%;
-}
-
-#frmTest {
-       border: none;
-}
-.singlemode { display: none;}
-.short{
-       padding-left: 1em;
-}
-</style>
-</head>
-
-<body>
-<div id="navbar" class="batchmode">
-       <span class="short singlemode"><input type="button" id="btnList" value="List"/></span>
-       <span class="singlemode short">
-               <input type="button" id="btnPrev" value="<"/>
-               <input type="text"  id="textTest" readonly />
-               <input type="button" id="btnNext" value=">"/> 
-       </span>
-       <span class="short listmode"> <input type="button" id="btnDone" value="Done"/></span>
-</div>
-<div id="divSum"> </div>
-<div width="99%" class="singlemode">
-       <textarea class="batchmode" id="testinfo" rows=4 disabled>
-       </textarea>
-</div>
-<div id="footbar" class="batchmode">
-       <span class="short"><input type="button"  id="btnRun" value="Run"/></span>
-       <span class="short singlemode"><input type="button" id="btnPass" value="PASS"/></span>
-       <span class="short singlemode"><input type="button" id="btnFail" value="FAIL"/></span>
-       <span class="short singlemode"><input type="button" id="btnBlock" value="BLOCK"/></span>
-</div>
-<iframe width="100%" id="frmTest" allowFullScreen="true" mozAllowFullScreen="true" webkitAllowFullscreen="true" src="">
-</iframe>
-<script src="testrunner.js"> </script>
-</body>
-</html>
diff --git a/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/plugin/web_templates/webrunner/jquery-1.10.2.min.js b/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/plugin/web_templates/webrunner/jquery-1.10.2.min.js
deleted file mode 100755 (executable)
index da41706..0000000
+++ /dev/null
@@ -1,6 +0,0 @@
-/*! jQuery v1.10.2 | (c) 2005, 2013 jQuery Foundation, Inc. | jquery.org/license
-//@ sourceMappingURL=jquery-1.10.2.min.map
-*/
-(function(e,t){var n,r,i=typeof t,o=e.location,a=e.document,s=a.documentElement,l=e.jQuery,u=e.$,c={},p=[],f="1.10.2",d=p.concat,h=p.push,g=p.slice,m=p.indexOf,y=c.toString,v=c.hasOwnProperty,b=f.trim,x=function(e,t){return new x.fn.init(e,t,r)},w=/[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source,T=/\S+/g,C=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,N=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/,k=/^<(\w+)\s*\/?>(?:<\/\1>|)$/,E=/^[\],:{}\s]*$/,S=/(?:^|:|,)(?:\s*\[)+/g,A=/\\(?:["\\\/bfnrt]|u[\da-fA-F]{4})/g,j=/"[^"\\\r\n]*"|true|false|null|-?(?:\d+\.|)\d+(?:[eE][+-]?\d+|)/g,D=/^-ms-/,L=/-([\da-z])/gi,H=function(e,t){return t.toUpperCase()},q=function(e){(a.addEventListener||"load"===e.type||"complete"===a.readyState)&&(_(),x.ready())},_=function(){a.addEventListener?(a.removeEventListener("DOMContentLoaded",q,!1),e.removeEventListener("load",q,!1)):(a.detachEvent("onreadystatechange",q),e.detachEvent("onload",q))};x.fn=x.prototype={jquery:f,constructor:x,init:function(e,n,r){var i,o;if(!e)return this;if("string"==typeof e){if(i="<"===e.charAt(0)&&">"===e.charAt(e.length-1)&&e.length>=3?[null,e,null]:N.exec(e),!i||!i[1]&&n)return!n||n.jquery?(n||r).find(e):this.constructor(n).find(e);if(i[1]){if(n=n instanceof x?n[0]:n,x.merge(this,x.parseHTML(i[1],n&&n.nodeType?n.ownerDocument||n:a,!0)),k.test(i[1])&&x.isPlainObject(n))for(i in n)x.isFunction(this[i])?this[i](n[i]):this.attr(i,n[i]);return this}if(o=a.getElementById(i[2]),o&&o.parentNode){if(o.id!==i[2])return r.find(e);this.length=1,this[0]=o}return this.context=a,this.selector=e,this}return e.nodeType?(this.context=this[0]=e,this.length=1,this):x.isFunction(e)?r.ready(e):(e.selector!==t&&(this.selector=e.selector,this.context=e.context),x.makeArray(e,this))},selector:"",length:0,toArray:function(){return g.call(this)},get:function(e){return null==e?this.toArray():0>e?this[this.length+e]:this[e]},pushStack:function(e){var t=x.merge(this.constructor(),e);return t.prevObject=this,t.context=this.context,t},each:function(e,t){return x.each(this,e,t)},ready:function(e){return x.ready.promise().done(e),this},slice:function(){return this.pushStack(g.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(e){var t=this.length,n=+e+(0>e?t:0);return this.pushStack(n>=0&&t>n?[this[n]]:[])},map:function(e){return this.pushStack(x.map(this,function(t,n){return e.call(t,n,t)}))},end:function(){return this.prevObject||this.constructor(null)},push:h,sort:[].sort,splice:[].splice},x.fn.init.prototype=x.fn,x.extend=x.fn.extend=function(){var e,n,r,i,o,a,s=arguments[0]||{},l=1,u=arguments.length,c=!1;for("boolean"==typeof s&&(c=s,s=arguments[1]||{},l=2),"object"==typeof s||x.isFunction(s)||(s={}),u===l&&(s=this,--l);u>l;l++)if(null!=(o=arguments[l]))for(i in o)e=s[i],r=o[i],s!==r&&(c&&r&&(x.isPlainObject(r)||(n=x.isArray(r)))?(n?(n=!1,a=e&&x.isArray(e)?e:[]):a=e&&x.isPlainObject(e)?e:{},s[i]=x.extend(c,a,r)):r!==t&&(s[i]=r));return s},x.extend({expando:"jQuery"+(f+Math.random()).replace(/\D/g,""),noConflict:function(t){return e.$===x&&(e.$=u),t&&e.jQuery===x&&(e.jQuery=l),x},isReady:!1,readyWait:1,holdReady:function(e){e?x.readyWait++:x.ready(!0)},ready:function(e){if(e===!0?!--x.readyWait:!x.isReady){if(!a.body)return setTimeout(x.ready);x.isReady=!0,e!==!0&&--x.readyWait>0||(n.resolveWith(a,[x]),x.fn.trigger&&x(a).trigger("ready").off("ready"))}},isFunction:function(e){return"function"===x.type(e)},isArray:Array.isArray||function(e){return"array"===x.type(e)},isWindow:function(e){return null!=e&&e==e.window},isNumeric:function(e){return!isNaN(parseFloat(e))&&isFinite(e)},type:function(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?c[y.call(e)]||"object":typeof e},isPlainObject:function(e){var n;if(!e||"object"!==x.type(e)||e.nodeType||x.isWindow(e))return!1;try{if(e.constructor&&!v.call(e,"constructor")&&!v.call(e.constructor.prototype,"isPrototypeOf"))return!1}catch(r){return!1}if(x.support.ownLast)for(n in e)return v.call(e,n);for(n in e);return n===t||v.call(e,n)},isEmptyObject:function(e){var t;for(t in e)return!1;return!0},error:function(e){throw Error(e)},parseHTML:function(e,t,n){if(!e||"string"!=typeof e)return null;"boolean"==typeof t&&(n=t,t=!1),t=t||a;var r=k.exec(e),i=!n&&[];return r?[t.createElement(r[1])]:(r=x.buildFragment([e],t,i),i&&x(i).remove(),x.merge([],r.childNodes))},parseJSON:function(n){return e.JSON&&e.JSON.parse?e.JSON.parse(n):null===n?n:"string"==typeof n&&(n=x.trim(n),n&&E.test(n.replace(A,"@").replace(j,"]").replace(S,"")))?Function("return "+n)():(x.error("Invalid JSON: "+n),t)},parseXML:function(n){var r,i;if(!n||"string"!=typeof n)return null;try{e.DOMParser?(i=new DOMParser,r=i.parseFromString(n,"text/xml")):(r=new ActiveXObject("Microsoft.XMLDOM"),r.async="false",r.loadXML(n))}catch(o){r=t}return r&&r.documentElement&&!r.getElementsByTagName("parsererror").length||x.error("Invalid XML: "+n),r},noop:function(){},globalEval:function(t){t&&x.trim(t)&&(e.execScript||function(t){e.eval.call(e,t)})(t)},camelCase:function(e){return e.replace(D,"ms-").replace(L,H)},nodeName:function(e,t){return e.nodeName&&e.nodeName.toLowerCase()===t.toLowerCase()},each:function(e,t,n){var r,i=0,o=e.length,a=M(e);if(n){if(a){for(;o>i;i++)if(r=t.apply(e[i],n),r===!1)break}else for(i in e)if(r=t.apply(e[i],n),r===!1)break}else if(a){for(;o>i;i++)if(r=t.call(e[i],i,e[i]),r===!1)break}else for(i in e)if(r=t.call(e[i],i,e[i]),r===!1)break;return e},trim:b&&!b.call("\ufeff\u00a0")?function(e){return null==e?"":b.call(e)}:function(e){return null==e?"":(e+"").replace(C,"")},makeArray:function(e,t){var n=t||[];return null!=e&&(M(Object(e))?x.merge(n,"string"==typeof e?[e]:e):h.call(n,e)),n},inArray:function(e,t,n){var r;if(t){if(m)return m.call(t,e,n);for(r=t.length,n=n?0>n?Math.max(0,r+n):n:0;r>n;n++)if(n in t&&t[n]===e)return n}return-1},merge:function(e,n){var r=n.length,i=e.length,o=0;if("number"==typeof r)for(;r>o;o++)e[i++]=n[o];else while(n[o]!==t)e[i++]=n[o++];return e.length=i,e},grep:function(e,t,n){var r,i=[],o=0,a=e.length;for(n=!!n;a>o;o++)r=!!t(e[o],o),n!==r&&i.push(e[o]);return i},map:function(e,t,n){var r,i=0,o=e.length,a=M(e),s=[];if(a)for(;o>i;i++)r=t(e[i],i,n),null!=r&&(s[s.length]=r);else for(i in e)r=t(e[i],i,n),null!=r&&(s[s.length]=r);return d.apply([],s)},guid:1,proxy:function(e,n){var r,i,o;return"string"==typeof n&&(o=e[n],n=e,e=o),x.isFunction(e)?(r=g.call(arguments,2),i=function(){return e.apply(n||this,r.concat(g.call(arguments)))},i.guid=e.guid=e.guid||x.guid++,i):t},access:function(e,n,r,i,o,a,s){var l=0,u=e.length,c=null==r;if("object"===x.type(r)){o=!0;for(l in r)x.access(e,n,l,r[l],!0,a,s)}else if(i!==t&&(o=!0,x.isFunction(i)||(s=!0),c&&(s?(n.call(e,i),n=null):(c=n,n=function(e,t,n){return c.call(x(e),n)})),n))for(;u>l;l++)n(e[l],r,s?i:i.call(e[l],l,n(e[l],r)));return o?e:c?n.call(e):u?n(e[0],r):a},now:function(){return(new Date).getTime()},swap:function(e,t,n,r){var i,o,a={};for(o in t)a[o]=e.style[o],e.style[o]=t[o];i=n.apply(e,r||[]);for(o in t)e.style[o]=a[o];return i}}),x.ready.promise=function(t){if(!n)if(n=x.Deferred(),"complete"===a.readyState)setTimeout(x.ready);else if(a.addEventListener)a.addEventListener("DOMContentLoaded",q,!1),e.addEventListener("load",q,!1);else{a.attachEvent("onreadystatechange",q),e.attachEvent("onload",q);var r=!1;try{r=null==e.frameElement&&a.documentElement}catch(i){}r&&r.doScroll&&function o(){if(!x.isReady){try{r.doScroll("left")}catch(e){return setTimeout(o,50)}_(),x.ready()}}()}return n.promise(t)},x.each("Boolean Number String Function Array Date RegExp Object Error".split(" "),function(e,t){c["[object "+t+"]"]=t.toLowerCase()});function M(e){var t=e.length,n=x.type(e);return x.isWindow(e)?!1:1===e.nodeType&&t?!0:"array"===n||"function"!==n&&(0===t||"number"==typeof t&&t>0&&t-1 in e)}r=x(a),function(e,t){var n,r,i,o,a,s,l,u,c,p,f,d,h,g,m,y,v,b="sizzle"+-new Date,w=e.document,T=0,C=0,N=st(),k=st(),E=st(),S=!1,A=function(e,t){return e===t?(S=!0,0):0},j=typeof t,D=1<<31,L={}.hasOwnProperty,H=[],q=H.pop,_=H.push,M=H.push,O=H.slice,F=H.indexOf||function(e){var t=0,n=this.length;for(;n>t;t++)if(this[t]===e)return t;return-1},B="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",P="[\\x20\\t\\r\\n\\f]",R="(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+",W=R.replace("w","w#"),$="\\["+P+"*("+R+")"+P+"*(?:([*^$|!~]?=)"+P+"*(?:(['\"])((?:\\\\.|[^\\\\])*?)\\3|("+W+")|)|)"+P+"*\\]",I=":("+R+")(?:\\(((['\"])((?:\\\\.|[^\\\\])*?)\\3|((?:\\\\.|[^\\\\()[\\]]|"+$.replace(3,8)+")*)|.*)\\)|)",z=RegExp("^"+P+"+|((?:^|[^\\\\])(?:\\\\.)*)"+P+"+$","g"),X=RegExp("^"+P+"*,"+P+"*"),U=RegExp("^"+P+"*([>+~]|"+P+")"+P+"*"),V=RegExp(P+"*[+~]"),Y=RegExp("="+P+"*([^\\]'\"]*)"+P+"*\\]","g"),J=RegExp(I),G=RegExp("^"+W+"$"),Q={ID:RegExp("^#("+R+")"),CLASS:RegExp("^\\.("+R+")"),TAG:RegExp("^("+R.replace("w","w*")+")"),ATTR:RegExp("^"+$),PSEUDO:RegExp("^"+I),CHILD:RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+P+"*(even|odd|(([+-]|)(\\d*)n|)"+P+"*(?:([+-]|)"+P+"*(\\d+)|))"+P+"*\\)|)","i"),bool:RegExp("^(?:"+B+")$","i"),needsContext:RegExp("^"+P+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+P+"*((?:-\\d)?\\d*)"+P+"*\\)|)(?=[^-]|$)","i")},K=/^[^{]+\{\s*\[native \w/,Z=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,et=/^(?:input|select|textarea|button)$/i,tt=/^h\d$/i,nt=/'|\\/g,rt=RegExp("\\\\([\\da-f]{1,6}"+P+"?|("+P+")|.)","ig"),it=function(e,t,n){var r="0x"+t-65536;return r!==r||n?t:0>r?String.fromCharCode(r+65536):String.fromCharCode(55296|r>>10,56320|1023&r)};try{M.apply(H=O.call(w.childNodes),w.childNodes),H[w.childNodes.length].nodeType}catch(ot){M={apply:H.length?function(e,t){_.apply(e,O.call(t))}:function(e,t){var n=e.length,r=0;while(e[n++]=t[r++]);e.length=n-1}}}function at(e,t,n,i){var o,a,s,l,u,c,d,m,y,x;if((t?t.ownerDocument||t:w)!==f&&p(t),t=t||f,n=n||[],!e||"string"!=typeof e)return n;if(1!==(l=t.nodeType)&&9!==l)return[];if(h&&!i){if(o=Z.exec(e))if(s=o[1]){if(9===l){if(a=t.getElementById(s),!a||!a.parentNode)return n;if(a.id===s)return n.push(a),n}else if(t.ownerDocument&&(a=t.ownerDocument.getElementById(s))&&v(t,a)&&a.id===s)return n.push(a),n}else{if(o[2])return M.apply(n,t.getElementsByTagName(e)),n;if((s=o[3])&&r.getElementsByClassName&&t.getElementsByClassName)return M.apply(n,t.getElementsByClassName(s)),n}if(r.qsa&&(!g||!g.test(e))){if(m=d=b,y=t,x=9===l&&e,1===l&&"object"!==t.nodeName.toLowerCase()){c=mt(e),(d=t.getAttribute("id"))?m=d.replace(nt,"\\$&"):t.setAttribute("id",m),m="[id='"+m+"'] ",u=c.length;while(u--)c[u]=m+yt(c[u]);y=V.test(e)&&t.parentNode||t,x=c.join(",")}if(x)try{return M.apply(n,y.querySelectorAll(x)),n}catch(T){}finally{d||t.removeAttribute("id")}}}return kt(e.replace(z,"$1"),t,n,i)}function st(){var e=[];function t(n,r){return e.push(n+=" ")>o.cacheLength&&delete t[e.shift()],t[n]=r}return t}function lt(e){return e[b]=!0,e}function ut(e){var t=f.createElement("div");try{return!!e(t)}catch(n){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function ct(e,t){var n=e.split("|"),r=e.length;while(r--)o.attrHandle[n[r]]=t}function pt(e,t){var n=t&&e,r=n&&1===e.nodeType&&1===t.nodeType&&(~t.sourceIndex||D)-(~e.sourceIndex||D);if(r)return r;if(n)while(n=n.nextSibling)if(n===t)return-1;return e?1:-1}function ft(e){return function(t){var n=t.nodeName.toLowerCase();return"input"===n&&t.type===e}}function dt(e){return function(t){var n=t.nodeName.toLowerCase();return("input"===n||"button"===n)&&t.type===e}}function ht(e){return lt(function(t){return t=+t,lt(function(n,r){var i,o=e([],n.length,t),a=o.length;while(a--)n[i=o[a]]&&(n[i]=!(r[i]=n[i]))})})}s=at.isXML=function(e){var t=e&&(e.ownerDocument||e).documentElement;return t?"HTML"!==t.nodeName:!1},r=at.support={},p=at.setDocument=function(e){var n=e?e.ownerDocument||e:w,i=n.defaultView;return n!==f&&9===n.nodeType&&n.documentElement?(f=n,d=n.documentElement,h=!s(n),i&&i.attachEvent&&i!==i.top&&i.attachEvent("onbeforeunload",function(){p()}),r.attributes=ut(function(e){return e.className="i",!e.getAttribute("className")}),r.getElementsByTagName=ut(function(e){return e.appendChild(n.createComment("")),!e.getElementsByTagName("*").length}),r.getElementsByClassName=ut(function(e){return e.innerHTML="<div class='a'></div><div class='a i'></div>",e.firstChild.className="i",2===e.getElementsByClassName("i").length}),r.getById=ut(function(e){return d.appendChild(e).id=b,!n.getElementsByName||!n.getElementsByName(b).length}),r.getById?(o.find.ID=function(e,t){if(typeof t.getElementById!==j&&h){var n=t.getElementById(e);return n&&n.parentNode?[n]:[]}},o.filter.ID=function(e){var t=e.replace(rt,it);return function(e){return e.getAttribute("id")===t}}):(delete o.find.ID,o.filter.ID=function(e){var t=e.replace(rt,it);return function(e){var n=typeof e.getAttributeNode!==j&&e.getAttributeNode("id");return n&&n.value===t}}),o.find.TAG=r.getElementsByTagName?function(e,n){return typeof n.getElementsByTagName!==j?n.getElementsByTagName(e):t}:function(e,t){var n,r=[],i=0,o=t.getElementsByTagName(e);if("*"===e){while(n=o[i++])1===n.nodeType&&r.push(n);return r}return o},o.find.CLASS=r.getElementsByClassName&&function(e,n){return typeof n.getElementsByClassName!==j&&h?n.getElementsByClassName(e):t},m=[],g=[],(r.qsa=K.test(n.querySelectorAll))&&(ut(function(e){e.innerHTML="<select><option selected=''></option></select>",e.querySelectorAll("[selected]").length||g.push("\\["+P+"*(?:value|"+B+")"),e.querySelectorAll(":checked").length||g.push(":checked")}),ut(function(e){var t=n.createElement("input");t.setAttribute("type","hidden"),e.appendChild(t).setAttribute("t",""),e.querySelectorAll("[t^='']").length&&g.push("[*^$]="+P+"*(?:''|\"\")"),e.querySelectorAll(":enabled").length||g.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),g.push(",.*:")})),(r.matchesSelector=K.test(y=d.webkitMatchesSelector||d.mozMatchesSelector||d.oMatchesSelector||d.msMatchesSelector))&&ut(function(e){r.disconnectedMatch=y.call(e,"div"),y.call(e,"[s!='']:x"),m.push("!=",I)}),g=g.length&&RegExp(g.join("|")),m=m.length&&RegExp(m.join("|")),v=K.test(d.contains)||d.compareDocumentPosition?function(e,t){var n=9===e.nodeType?e.documentElement:e,r=t&&t.parentNode;return e===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):e.compareDocumentPosition&&16&e.compareDocumentPosition(r)))}:function(e,t){if(t)while(t=t.parentNode)if(t===e)return!0;return!1},A=d.compareDocumentPosition?function(e,t){if(e===t)return S=!0,0;var i=t.compareDocumentPosition&&e.compareDocumentPosition&&e.compareDocumentPosition(t);return i?1&i||!r.sortDetached&&t.compareDocumentPosition(e)===i?e===n||v(w,e)?-1:t===n||v(w,t)?1:c?F.call(c,e)-F.call(c,t):0:4&i?-1:1:e.compareDocumentPosition?-1:1}:function(e,t){var r,i=0,o=e.parentNode,a=t.parentNode,s=[e],l=[t];if(e===t)return S=!0,0;if(!o||!a)return e===n?-1:t===n?1:o?-1:a?1:c?F.call(c,e)-F.call(c,t):0;if(o===a)return pt(e,t);r=e;while(r=r.parentNode)s.unshift(r);r=t;while(r=r.parentNode)l.unshift(r);while(s[i]===l[i])i++;return i?pt(s[i],l[i]):s[i]===w?-1:l[i]===w?1:0},n):f},at.matches=function(e,t){return at(e,null,null,t)},at.matchesSelector=function(e,t){if((e.ownerDocument||e)!==f&&p(e),t=t.replace(Y,"='$1']"),!(!r.matchesSelector||!h||m&&m.test(t)||g&&g.test(t)))try{var n=y.call(e,t);if(n||r.disconnectedMatch||e.document&&11!==e.document.nodeType)return n}catch(i){}return at(t,f,null,[e]).length>0},at.contains=function(e,t){return(e.ownerDocument||e)!==f&&p(e),v(e,t)},at.attr=function(e,n){(e.ownerDocument||e)!==f&&p(e);var i=o.attrHandle[n.toLowerCase()],a=i&&L.call(o.attrHandle,n.toLowerCase())?i(e,n,!h):t;return a===t?r.attributes||!h?e.getAttribute(n):(a=e.getAttributeNode(n))&&a.specified?a.value:null:a},at.error=function(e){throw Error("Syntax error, unrecognized expression: "+e)},at.uniqueSort=function(e){var t,n=[],i=0,o=0;if(S=!r.detectDuplicates,c=!r.sortStable&&e.slice(0),e.sort(A),S){while(t=e[o++])t===e[o]&&(i=n.push(o));while(i--)e.splice(n[i],1)}return e},a=at.getText=function(e){var t,n="",r=0,i=e.nodeType;if(i){if(1===i||9===i||11===i){if("string"==typeof e.textContent)return e.textContent;for(e=e.firstChild;e;e=e.nextSibling)n+=a(e)}else if(3===i||4===i)return e.nodeValue}else for(;t=e[r];r++)n+=a(t);return n},o=at.selectors={cacheLength:50,createPseudo:lt,match:Q,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(rt,it),e[3]=(e[4]||e[5]||"").replace(rt,it),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||at.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&at.error(e[0]),e},PSEUDO:function(e){var n,r=!e[5]&&e[2];return Q.CHILD.test(e[0])?null:(e[3]&&e[4]!==t?e[2]=e[4]:r&&J.test(r)&&(n=mt(r,!0))&&(n=r.indexOf(")",r.length-n)-r.length)&&(e[0]=e[0].slice(0,n),e[2]=r.slice(0,n)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(rt,it).toLowerCase();return"*"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=N[e+" "];return t||(t=RegExp("(^|"+P+")"+e+"("+P+"|$)"))&&N(e,function(e){return t.test("string"==typeof e.className&&e.className||typeof e.getAttribute!==j&&e.getAttribute("class")||"")})},ATTR:function(e,t,n){return function(r){var i=at.attr(r,e);return null==i?"!="===t:t?(i+="","="===t?i===n:"!="===t?i!==n:"^="===t?n&&0===i.indexOf(n):"*="===t?n&&i.indexOf(n)>-1:"$="===t?n&&i.slice(-n.length)===n:"~="===t?(" "+i+" ").indexOf(n)>-1:"|="===t?i===n||i.slice(0,n.length+1)===n+"-":!1):!0}},CHILD:function(e,t,n,r,i){var o="nth"!==e.slice(0,3),a="last"!==e.slice(-4),s="of-type"===t;return 1===r&&0===i?function(e){return!!e.parentNode}:function(t,n,l){var u,c,p,f,d,h,g=o!==a?"nextSibling":"previousSibling",m=t.parentNode,y=s&&t.nodeName.toLowerCase(),v=!l&&!s;if(m){if(o){while(g){p=t;while(p=p[g])if(s?p.nodeName.toLowerCase()===y:1===p.nodeType)return!1;h=g="only"===e&&!h&&"nextSibling"}return!0}if(h=[a?m.firstChild:m.lastChild],a&&v){c=m[b]||(m[b]={}),u=c[e]||[],d=u[0]===T&&u[1],f=u[0]===T&&u[2],p=d&&m.childNodes[d];while(p=++d&&p&&p[g]||(f=d=0)||h.pop())if(1===p.nodeType&&++f&&p===t){c[e]=[T,d,f];break}}else if(v&&(u=(t[b]||(t[b]={}))[e])&&u[0]===T)f=u[1];else while(p=++d&&p&&p[g]||(f=d=0)||h.pop())if((s?p.nodeName.toLowerCase()===y:1===p.nodeType)&&++f&&(v&&((p[b]||(p[b]={}))[e]=[T,f]),p===t))break;return f-=i,f===r||0===f%r&&f/r>=0}}},PSEUDO:function(e,t){var n,r=o.pseudos[e]||o.setFilters[e.toLowerCase()]||at.error("unsupported pseudo: "+e);return r[b]?r(t):r.length>1?(n=[e,e,"",t],o.setFilters.hasOwnProperty(e.toLowerCase())?lt(function(e,n){var i,o=r(e,t),a=o.length;while(a--)i=F.call(e,o[a]),e[i]=!(n[i]=o[a])}):function(e){return r(e,0,n)}):r}},pseudos:{not:lt(function(e){var t=[],n=[],r=l(e.replace(z,"$1"));return r[b]?lt(function(e,t,n,i){var o,a=r(e,null,i,[]),s=e.length;while(s--)(o=a[s])&&(e[s]=!(t[s]=o))}):function(e,i,o){return t[0]=e,r(t,null,o,n),!n.pop()}}),has:lt(function(e){return function(t){return at(e,t).length>0}}),contains:lt(function(e){return function(t){return(t.textContent||t.innerText||a(t)).indexOf(e)>-1}}),lang:lt(function(e){return G.test(e||"")||at.error("unsupported lang: "+e),e=e.replace(rt,it).toLowerCase(),function(t){var n;do if(n=h?t.lang:t.getAttribute("xml:lang")||t.getAttribute("lang"))return n=n.toLowerCase(),n===e||0===n.indexOf(e+"-");while((t=t.parentNode)&&1===t.nodeType);return!1}}),target:function(t){var n=e.location&&e.location.hash;return n&&n.slice(1)===t.id},root:function(e){return e===d},focus:function(e){return e===f.activeElement&&(!f.hasFocus||f.hasFocus())&&!!(e.type||e.href||~e.tabIndex)},enabled:function(e){return e.disabled===!1},disabled:function(e){return e.disabled===!0},checked:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&!!e.checked||"option"===t&&!!e.selected},selected:function(e){return e.parentNode&&e.parentNode.selectedIndex,e.selected===!0},empty:function(e){for(e=e.firstChild;e;e=e.nextSibling)if(e.nodeName>"@"||3===e.nodeType||4===e.nodeType)return!1;return!0},parent:function(e){return!o.pseudos.empty(e)},header:function(e){return tt.test(e.nodeName)},input:function(e){return et.test(e.nodeName)},button:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&"button"===e.type||"button"===t},text:function(e){var t;return"input"===e.nodeName.toLowerCase()&&"text"===e.type&&(null==(t=e.getAttribute("type"))||t.toLowerCase()===e.type)},first:ht(function(){return[0]}),last:ht(function(e,t){return[t-1]}),eq:ht(function(e,t,n){return[0>n?n+t:n]}),even:ht(function(e,t){var n=0;for(;t>n;n+=2)e.push(n);return e}),odd:ht(function(e,t){var n=1;for(;t>n;n+=2)e.push(n);return e}),lt:ht(function(e,t,n){var r=0>n?n+t:n;for(;--r>=0;)e.push(r);return e}),gt:ht(function(e,t,n){var r=0>n?n+t:n;for(;t>++r;)e.push(r);return e})}},o.pseudos.nth=o.pseudos.eq;for(n in{radio:!0,checkbox:!0,file:!0,password:!0,image:!0})o.pseudos[n]=ft(n);for(n in{submit:!0,reset:!0})o.pseudos[n]=dt(n);function gt(){}gt.prototype=o.filters=o.pseudos,o.setFilters=new gt;function mt(e,t){var n,r,i,a,s,l,u,c=k[e+" "];if(c)return t?0:c.slice(0);s=e,l=[],u=o.preFilter;while(s){(!n||(r=X.exec(s)))&&(r&&(s=s.slice(r[0].length)||s),l.push(i=[])),n=!1,(r=U.exec(s))&&(n=r.shift(),i.push({value:n,type:r[0].replace(z," ")}),s=s.slice(n.length));for(a in o.filter)!(r=Q[a].exec(s))||u[a]&&!(r=u[a](r))||(n=r.shift(),i.push({value:n,type:a,matches:r}),s=s.slice(n.length));if(!n)break}return t?s.length:s?at.error(e):k(e,l).slice(0)}function yt(e){var t=0,n=e.length,r="";for(;n>t;t++)r+=e[t].value;return r}function vt(e,t,n){var r=t.dir,o=n&&"parentNode"===r,a=C++;return t.first?function(t,n,i){while(t=t[r])if(1===t.nodeType||o)return e(t,n,i)}:function(t,n,s){var l,u,c,p=T+" "+a;if(s){while(t=t[r])if((1===t.nodeType||o)&&e(t,n,s))return!0}else while(t=t[r])if(1===t.nodeType||o)if(c=t[b]||(t[b]={}),(u=c[r])&&u[0]===p){if((l=u[1])===!0||l===i)return l===!0}else if(u=c[r]=[p],u[1]=e(t,n,s)||i,u[1]===!0)return!0}}function bt(e){return e.length>1?function(t,n,r){var i=e.length;while(i--)if(!e[i](t,n,r))return!1;return!0}:e[0]}function xt(e,t,n,r,i){var o,a=[],s=0,l=e.length,u=null!=t;for(;l>s;s++)(o=e[s])&&(!n||n(o,r,i))&&(a.push(o),u&&t.push(s));return a}function wt(e,t,n,r,i,o){return r&&!r[b]&&(r=wt(r)),i&&!i[b]&&(i=wt(i,o)),lt(function(o,a,s,l){var u,c,p,f=[],d=[],h=a.length,g=o||Nt(t||"*",s.nodeType?[s]:s,[]),m=!e||!o&&t?g:xt(g,f,e,s,l),y=n?i||(o?e:h||r)?[]:a:m;if(n&&n(m,y,s,l),r){u=xt(y,d),r(u,[],s,l),c=u.length;while(c--)(p=u[c])&&(y[d[c]]=!(m[d[c]]=p))}if(o){if(i||e){if(i){u=[],c=y.length;while(c--)(p=y[c])&&u.push(m[c]=p);i(null,y=[],u,l)}c=y.length;while(c--)(p=y[c])&&(u=i?F.call(o,p):f[c])>-1&&(o[u]=!(a[u]=p))}}else y=xt(y===a?y.splice(h,y.length):y),i?i(null,a,y,l):M.apply(a,y)})}function Tt(e){var t,n,r,i=e.length,a=o.relative[e[0].type],s=a||o.relative[" "],l=a?1:0,c=vt(function(e){return e===t},s,!0),p=vt(function(e){return F.call(t,e)>-1},s,!0),f=[function(e,n,r){return!a&&(r||n!==u)||((t=n).nodeType?c(e,n,r):p(e,n,r))}];for(;i>l;l++)if(n=o.relative[e[l].type])f=[vt(bt(f),n)];else{if(n=o.filter[e[l].type].apply(null,e[l].matches),n[b]){for(r=++l;i>r;r++)if(o.relative[e[r].type])break;return wt(l>1&&bt(f),l>1&&yt(e.slice(0,l-1).concat({value:" "===e[l-2].type?"*":""})).replace(z,"$1"),n,r>l&&Tt(e.slice(l,r)),i>r&&Tt(e=e.slice(r)),i>r&&yt(e))}f.push(n)}return bt(f)}function Ct(e,t){var n=0,r=t.length>0,a=e.length>0,s=function(s,l,c,p,d){var h,g,m,y=[],v=0,b="0",x=s&&[],w=null!=d,C=u,N=s||a&&o.find.TAG("*",d&&l.parentNode||l),k=T+=null==C?1:Math.random()||.1;for(w&&(u=l!==f&&l,i=n);null!=(h=N[b]);b++){if(a&&h){g=0;while(m=e[g++])if(m(h,l,c)){p.push(h);break}w&&(T=k,i=++n)}r&&((h=!m&&h)&&v--,s&&x.push(h))}if(v+=b,r&&b!==v){g=0;while(m=t[g++])m(x,y,l,c);if(s){if(v>0)while(b--)x[b]||y[b]||(y[b]=q.call(p));y=xt(y)}M.apply(p,y),w&&!s&&y.length>0&&v+t.length>1&&at.uniqueSort(p)}return w&&(T=k,u=C),x};return r?lt(s):s}l=at.compile=function(e,t){var n,r=[],i=[],o=E[e+" "];if(!o){t||(t=mt(e)),n=t.length;while(n--)o=Tt(t[n]),o[b]?r.push(o):i.push(o);o=E(e,Ct(i,r))}return o};function Nt(e,t,n){var r=0,i=t.length;for(;i>r;r++)at(e,t[r],n);return n}function kt(e,t,n,i){var a,s,u,c,p,f=mt(e);if(!i&&1===f.length){if(s=f[0]=f[0].slice(0),s.length>2&&"ID"===(u=s[0]).type&&r.getById&&9===t.nodeType&&h&&o.relative[s[1].type]){if(t=(o.find.ID(u.matches[0].replace(rt,it),t)||[])[0],!t)return n;e=e.slice(s.shift().value.length)}a=Q.needsContext.test(e)?0:s.length;while(a--){if(u=s[a],o.relative[c=u.type])break;if((p=o.find[c])&&(i=p(u.matches[0].replace(rt,it),V.test(s[0].type)&&t.parentNode||t))){if(s.splice(a,1),e=i.length&&yt(s),!e)return M.apply(n,i),n;break}}}return l(e,f)(i,t,!h,n,V.test(e)),n}r.sortStable=b.split("").sort(A).join("")===b,r.detectDuplicates=S,p(),r.sortDetached=ut(function(e){return 1&e.compareDocumentPosition(f.createElement("div"))}),ut(function(e){return e.innerHTML="<a href='#'></a>","#"===e.firstChild.getAttribute("href")})||ct("type|href|height|width",function(e,n,r){return r?t:e.getAttribute(n,"type"===n.toLowerCase()?1:2)}),r.attributes&&ut(function(e){return e.innerHTML="<input/>",e.firstChild.setAttribute("value",""),""===e.firstChild.getAttribute("value")})||ct("value",function(e,n,r){return r||"input"!==e.nodeName.toLowerCase()?t:e.defaultValue}),ut(function(e){return null==e.getAttribute("disabled")})||ct(B,function(e,n,r){var i;return r?t:(i=e.getAttributeNode(n))&&i.specified?i.value:e[n]===!0?n.toLowerCase():null}),x.find=at,x.expr=at.selectors,x.expr[":"]=x.expr.pseudos,x.unique=at.uniqueSort,x.text=at.getText,x.isXMLDoc=at.isXML,x.contains=at.contains}(e);var O={};function F(e){var t=O[e]={};return x.each(e.match(T)||[],function(e,n){t[n]=!0}),t}x.Callbacks=function(e){e="string"==typeof e?O[e]||F(e):x.extend({},e);var n,r,i,o,a,s,l=[],u=!e.once&&[],c=function(t){for(r=e.memory&&t,i=!0,a=s||0,s=0,o=l.length,n=!0;l&&o>a;a++)if(l[a].apply(t[0],t[1])===!1&&e.stopOnFalse){r=!1;break}n=!1,l&&(u?u.length&&c(u.shift()):r?l=[]:p.disable())},p={add:function(){if(l){var t=l.length;(function i(t){x.each(t,function(t,n){var r=x.type(n);"function"===r?e.unique&&p.has(n)||l.push(n):n&&n.length&&"string"!==r&&i(n)})})(arguments),n?o=l.length:r&&(s=t,c(r))}return this},remove:function(){return l&&x.each(arguments,function(e,t){var r;while((r=x.inArray(t,l,r))>-1)l.splice(r,1),n&&(o>=r&&o--,a>=r&&a--)}),this},has:function(e){return e?x.inArray(e,l)>-1:!(!l||!l.length)},empty:function(){return l=[],o=0,this},disable:function(){return l=u=r=t,this},disabled:function(){return!l},lock:function(){return u=t,r||p.disable(),this},locked:function(){return!u},fireWith:function(e,t){return!l||i&&!u||(t=t||[],t=[e,t.slice?t.slice():t],n?u.push(t):c(t)),this},fire:function(){return p.fireWith(this,arguments),this},fired:function(){return!!i}};return p},x.extend({Deferred:function(e){var t=[["resolve","done",x.Callbacks("once memory"),"resolved"],["reject","fail",x.Callbacks("once memory"),"rejected"],["notify","progress",x.Callbacks("memory")]],n="pending",r={state:function(){return n},always:function(){return i.done(arguments).fail(arguments),this},then:function(){var e=arguments;return x.Deferred(function(n){x.each(t,function(t,o){var a=o[0],s=x.isFunction(e[t])&&e[t];i[o[1]](function(){var e=s&&s.apply(this,arguments);e&&x.isFunction(e.promise)?e.promise().done(n.resolve).fail(n.reject).progress(n.notify):n[a+"With"](this===r?n.promise():this,s?[e]:arguments)})}),e=null}).promise()},promise:function(e){return null!=e?x.extend(e,r):r}},i={};return r.pipe=r.then,x.each(t,function(e,o){var a=o[2],s=o[3];r[o[1]]=a.add,s&&a.add(function(){n=s},t[1^e][2].disable,t[2][2].lock),i[o[0]]=function(){return i[o[0]+"With"](this===i?r:this,arguments),this},i[o[0]+"With"]=a.fireWith}),r.promise(i),e&&e.call(i,i),i},when:function(e){var t=0,n=g.call(arguments),r=n.length,i=1!==r||e&&x.isFunction(e.promise)?r:0,o=1===i?e:x.Deferred(),a=function(e,t,n){return function(r){t[e]=this,n[e]=arguments.length>1?g.call(arguments):r,n===s?o.notifyWith(t,n):--i||o.resolveWith(t,n)}},s,l,u;if(r>1)for(s=Array(r),l=Array(r),u=Array(r);r>t;t++)n[t]&&x.isFunction(n[t].promise)?n[t].promise().done(a(t,u,n)).fail(o.reject).progress(a(t,l,s)):--i;return i||o.resolveWith(u,n),o.promise()}}),x.support=function(t){var n,r,o,s,l,u,c,p,f,d=a.createElement("div");if(d.setAttribute("className","t"),d.innerHTML="  <link/><table></table><a href='/a'>a</a><input type='checkbox'/>",n=d.getElementsByTagName("*")||[],r=d.getElementsByTagName("a")[0],!r||!r.style||!n.length)return t;s=a.createElement("select"),u=s.appendChild(a.createElement("option")),o=d.getElementsByTagName("input")[0],r.style.cssText="top:1px;float:left;opacity:.5",t.getSetAttribute="t"!==d.className,t.leadingWhitespace=3===d.firstChild.nodeType,t.tbody=!d.getElementsByTagName("tbody").length,t.htmlSerialize=!!d.getElementsByTagName("link").length,t.style=/top/.test(r.getAttribute("style")),t.hrefNormalized="/a"===r.getAttribute("href"),t.opacity=/^0.5/.test(r.style.opacity),t.cssFloat=!!r.style.cssFloat,t.checkOn=!!o.value,t.optSelected=u.selected,t.enctype=!!a.createElement("form").enctype,t.html5Clone="<:nav></:nav>"!==a.createElement("nav").cloneNode(!0).outerHTML,t.inlineBlockNeedsLayout=!1,t.shrinkWrapBlocks=!1,t.pixelPosition=!1,t.deleteExpando=!0,t.noCloneEvent=!0,t.reliableMarginRight=!0,t.boxSizingReliable=!0,o.checked=!0,t.noCloneChecked=o.cloneNode(!0).checked,s.disabled=!0,t.optDisabled=!u.disabled;try{delete d.test}catch(h){t.deleteExpando=!1}o=a.createElement("input"),o.setAttribute("value",""),t.input=""===o.getAttribute("value"),o.value="t",o.setAttribute("type","radio"),t.radioValue="t"===o.value,o.setAttribute("checked","t"),o.setAttribute("name","t"),l=a.createDocumentFragment(),l.appendChild(o),t.appendChecked=o.checked,t.checkClone=l.cloneNode(!0).cloneNode(!0).lastChild.checked,d.attachEvent&&(d.attachEvent("onclick",function(){t.noCloneEvent=!1}),d.cloneNode(!0).click());for(f in{submit:!0,change:!0,focusin:!0})d.setAttribute(c="on"+f,"t"),t[f+"Bubbles"]=c in e||d.attributes[c].expando===!1;d.style.backgroundClip="content-box",d.cloneNode(!0).style.backgroundClip="",t.clearCloneStyle="content-box"===d.style.backgroundClip;for(f in x(t))break;return t.ownLast="0"!==f,x(function(){var n,r,o,s="padding:0;margin:0;border:0;display:block;box-sizing:content-box;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;",l=a.getElementsByTagName("body")[0];l&&(n=a.createElement("div"),n.style.cssText="border:0;width:0;height:0;position:absolute;top:0;left:-9999px;margin-top:1px",l.appendChild(n).appendChild(d),d.innerHTML="<table><tr><td></td><td>t</td></tr></table>",o=d.getElementsByTagName("td"),o[0].style.cssText="padding:0;margin:0;border:0;display:none",p=0===o[0].offsetHeight,o[0].style.display="",o[1].style.display="none",t.reliableHiddenOffsets=p&&0===o[0].offsetHeight,d.innerHTML="",d.style.cssText="box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;padding:1px;border:1px;display:block;width:4px;margin-top:1%;position:absolute;top:1%;",x.swap(l,null!=l.style.zoom?{zoom:1}:{},function(){t.boxSizing=4===d.offsetWidth}),e.getComputedStyle&&(t.pixelPosition="1%"!==(e.getComputedStyle(d,null)||{}).top,t.boxSizingReliable="4px"===(e.getComputedStyle(d,null)||{width:"4px"}).width,r=d.appendChild(a.createElement("div")),r.style.cssText=d.style.cssText=s,r.style.marginRight=r.style.width="0",d.style.width="1px",t.reliableMarginRight=!parseFloat((e.getComputedStyle(r,null)||{}).marginRight)),typeof d.style.zoom!==i&&(d.innerHTML="",d.style.cssText=s+"width:1px;padding:1px;display:inline;zoom:1",t.inlineBlockNeedsLayout=3===d.offsetWidth,d.style.display="block",d.innerHTML="<div></div>",d.firstChild.style.width="5px",t.shrinkWrapBlocks=3!==d.offsetWidth,t.inlineBlockNeedsLayout&&(l.style.zoom=1)),l.removeChild(n),n=d=o=r=null)}),n=s=l=u=r=o=null,t
-}({});var B=/(?:\{[\s\S]*\}|\[[\s\S]*\])$/,P=/([A-Z])/g;function R(e,n,r,i){if(x.acceptData(e)){var o,a,s=x.expando,l=e.nodeType,u=l?x.cache:e,c=l?e[s]:e[s]&&s;if(c&&u[c]&&(i||u[c].data)||r!==t||"string"!=typeof n)return c||(c=l?e[s]=p.pop()||x.guid++:s),u[c]||(u[c]=l?{}:{toJSON:x.noop}),("object"==typeof n||"function"==typeof n)&&(i?u[c]=x.extend(u[c],n):u[c].data=x.extend(u[c].data,n)),a=u[c],i||(a.data||(a.data={}),a=a.data),r!==t&&(a[x.camelCase(n)]=r),"string"==typeof n?(o=a[n],null==o&&(o=a[x.camelCase(n)])):o=a,o}}function W(e,t,n){if(x.acceptData(e)){var r,i,o=e.nodeType,a=o?x.cache:e,s=o?e[x.expando]:x.expando;if(a[s]){if(t&&(r=n?a[s]:a[s].data)){x.isArray(t)?t=t.concat(x.map(t,x.camelCase)):t in r?t=[t]:(t=x.camelCase(t),t=t in r?[t]:t.split(" ")),i=t.length;while(i--)delete r[t[i]];if(n?!I(r):!x.isEmptyObject(r))return}(n||(delete a[s].data,I(a[s])))&&(o?x.cleanData([e],!0):x.support.deleteExpando||a!=a.window?delete a[s]:a[s]=null)}}}x.extend({cache:{},noData:{applet:!0,embed:!0,object:"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"},hasData:function(e){return e=e.nodeType?x.cache[e[x.expando]]:e[x.expando],!!e&&!I(e)},data:function(e,t,n){return R(e,t,n)},removeData:function(e,t){return W(e,t)},_data:function(e,t,n){return R(e,t,n,!0)},_removeData:function(e,t){return W(e,t,!0)},acceptData:function(e){if(e.nodeType&&1!==e.nodeType&&9!==e.nodeType)return!1;var t=e.nodeName&&x.noData[e.nodeName.toLowerCase()];return!t||t!==!0&&e.getAttribute("classid")===t}}),x.fn.extend({data:function(e,n){var r,i,o=null,a=0,s=this[0];if(e===t){if(this.length&&(o=x.data(s),1===s.nodeType&&!x._data(s,"parsedAttrs"))){for(r=s.attributes;r.length>a;a++)i=r[a].name,0===i.indexOf("data-")&&(i=x.camelCase(i.slice(5)),$(s,i,o[i]));x._data(s,"parsedAttrs",!0)}return o}return"object"==typeof e?this.each(function(){x.data(this,e)}):arguments.length>1?this.each(function(){x.data(this,e,n)}):s?$(s,e,x.data(s,e)):null},removeData:function(e){return this.each(function(){x.removeData(this,e)})}});function $(e,n,r){if(r===t&&1===e.nodeType){var i="data-"+n.replace(P,"-$1").toLowerCase();if(r=e.getAttribute(i),"string"==typeof r){try{r="true"===r?!0:"false"===r?!1:"null"===r?null:+r+""===r?+r:B.test(r)?x.parseJSON(r):r}catch(o){}x.data(e,n,r)}else r=t}return r}function I(e){var t;for(t in e)if(("data"!==t||!x.isEmptyObject(e[t]))&&"toJSON"!==t)return!1;return!0}x.extend({queue:function(e,n,r){var i;return e?(n=(n||"fx")+"queue",i=x._data(e,n),r&&(!i||x.isArray(r)?i=x._data(e,n,x.makeArray(r)):i.push(r)),i||[]):t},dequeue:function(e,t){t=t||"fx";var n=x.queue(e,t),r=n.length,i=n.shift(),o=x._queueHooks(e,t),a=function(){x.dequeue(e,t)};"inprogress"===i&&(i=n.shift(),r--),i&&("fx"===t&&n.unshift("inprogress"),delete o.stop,i.call(e,a,o)),!r&&o&&o.empty.fire()},_queueHooks:function(e,t){var n=t+"queueHooks";return x._data(e,n)||x._data(e,n,{empty:x.Callbacks("once memory").add(function(){x._removeData(e,t+"queue"),x._removeData(e,n)})})}}),x.fn.extend({queue:function(e,n){var r=2;return"string"!=typeof e&&(n=e,e="fx",r--),r>arguments.length?x.queue(this[0],e):n===t?this:this.each(function(){var t=x.queue(this,e,n);x._queueHooks(this,e),"fx"===e&&"inprogress"!==t[0]&&x.dequeue(this,e)})},dequeue:function(e){return this.each(function(){x.dequeue(this,e)})},delay:function(e,t){return e=x.fx?x.fx.speeds[e]||e:e,t=t||"fx",this.queue(t,function(t,n){var r=setTimeout(t,e);n.stop=function(){clearTimeout(r)}})},clearQueue:function(e){return this.queue(e||"fx",[])},promise:function(e,n){var r,i=1,o=x.Deferred(),a=this,s=this.length,l=function(){--i||o.resolveWith(a,[a])};"string"!=typeof e&&(n=e,e=t),e=e||"fx";while(s--)r=x._data(a[s],e+"queueHooks"),r&&r.empty&&(i++,r.empty.add(l));return l(),o.promise(n)}});var z,X,U=/[\t\r\n\f]/g,V=/\r/g,Y=/^(?:input|select|textarea|button|object)$/i,J=/^(?:a|area)$/i,G=/^(?:checked|selected)$/i,Q=x.support.getSetAttribute,K=x.support.input;x.fn.extend({attr:function(e,t){return x.access(this,x.attr,e,t,arguments.length>1)},removeAttr:function(e){return this.each(function(){x.removeAttr(this,e)})},prop:function(e,t){return x.access(this,x.prop,e,t,arguments.length>1)},removeProp:function(e){return e=x.propFix[e]||e,this.each(function(){try{this[e]=t,delete this[e]}catch(n){}})},addClass:function(e){var t,n,r,i,o,a=0,s=this.length,l="string"==typeof e&&e;if(x.isFunction(e))return this.each(function(t){x(this).addClass(e.call(this,t,this.className))});if(l)for(t=(e||"").match(T)||[];s>a;a++)if(n=this[a],r=1===n.nodeType&&(n.className?(" "+n.className+" ").replace(U," "):" ")){o=0;while(i=t[o++])0>r.indexOf(" "+i+" ")&&(r+=i+" ");n.className=x.trim(r)}return this},removeClass:function(e){var t,n,r,i,o,a=0,s=this.length,l=0===arguments.length||"string"==typeof e&&e;if(x.isFunction(e))return this.each(function(t){x(this).removeClass(e.call(this,t,this.className))});if(l)for(t=(e||"").match(T)||[];s>a;a++)if(n=this[a],r=1===n.nodeType&&(n.className?(" "+n.className+" ").replace(U," "):"")){o=0;while(i=t[o++])while(r.indexOf(" "+i+" ")>=0)r=r.replace(" "+i+" "," ");n.className=e?x.trim(r):""}return this},toggleClass:function(e,t){var n=typeof e;return"boolean"==typeof t&&"string"===n?t?this.addClass(e):this.removeClass(e):x.isFunction(e)?this.each(function(n){x(this).toggleClass(e.call(this,n,this.className,t),t)}):this.each(function(){if("string"===n){var t,r=0,o=x(this),a=e.match(T)||[];while(t=a[r++])o.hasClass(t)?o.removeClass(t):o.addClass(t)}else(n===i||"boolean"===n)&&(this.className&&x._data(this,"__className__",this.className),this.className=this.className||e===!1?"":x._data(this,"__className__")||"")})},hasClass:function(e){var t=" "+e+" ",n=0,r=this.length;for(;r>n;n++)if(1===this[n].nodeType&&(" "+this[n].className+" ").replace(U," ").indexOf(t)>=0)return!0;return!1},val:function(e){var n,r,i,o=this[0];{if(arguments.length)return i=x.isFunction(e),this.each(function(n){var o;1===this.nodeType&&(o=i?e.call(this,n,x(this).val()):e,null==o?o="":"number"==typeof o?o+="":x.isArray(o)&&(o=x.map(o,function(e){return null==e?"":e+""})),r=x.valHooks[this.type]||x.valHooks[this.nodeName.toLowerCase()],r&&"set"in r&&r.set(this,o,"value")!==t||(this.value=o))});if(o)return r=x.valHooks[o.type]||x.valHooks[o.nodeName.toLowerCase()],r&&"get"in r&&(n=r.get(o,"value"))!==t?n:(n=o.value,"string"==typeof n?n.replace(V,""):null==n?"":n)}}}),x.extend({valHooks:{option:{get:function(e){var t=x.find.attr(e,"value");return null!=t?t:e.text}},select:{get:function(e){var t,n,r=e.options,i=e.selectedIndex,o="select-one"===e.type||0>i,a=o?null:[],s=o?i+1:r.length,l=0>i?s:o?i:0;for(;s>l;l++)if(n=r[l],!(!n.selected&&l!==i||(x.support.optDisabled?n.disabled:null!==n.getAttribute("disabled"))||n.parentNode.disabled&&x.nodeName(n.parentNode,"optgroup"))){if(t=x(n).val(),o)return t;a.push(t)}return a},set:function(e,t){var n,r,i=e.options,o=x.makeArray(t),a=i.length;while(a--)r=i[a],(r.selected=x.inArray(x(r).val(),o)>=0)&&(n=!0);return n||(e.selectedIndex=-1),o}}},attr:function(e,n,r){var o,a,s=e.nodeType;if(e&&3!==s&&8!==s&&2!==s)return typeof e.getAttribute===i?x.prop(e,n,r):(1===s&&x.isXMLDoc(e)||(n=n.toLowerCase(),o=x.attrHooks[n]||(x.expr.match.bool.test(n)?X:z)),r===t?o&&"get"in o&&null!==(a=o.get(e,n))?a:(a=x.find.attr(e,n),null==a?t:a):null!==r?o&&"set"in o&&(a=o.set(e,r,n))!==t?a:(e.setAttribute(n,r+""),r):(x.removeAttr(e,n),t))},removeAttr:function(e,t){var n,r,i=0,o=t&&t.match(T);if(o&&1===e.nodeType)while(n=o[i++])r=x.propFix[n]||n,x.expr.match.bool.test(n)?K&&Q||!G.test(n)?e[r]=!1:e[x.camelCase("default-"+n)]=e[r]=!1:x.attr(e,n,""),e.removeAttribute(Q?n:r)},attrHooks:{type:{set:function(e,t){if(!x.support.radioValue&&"radio"===t&&x.nodeName(e,"input")){var n=e.value;return e.setAttribute("type",t),n&&(e.value=n),t}}}},propFix:{"for":"htmlFor","class":"className"},prop:function(e,n,r){var i,o,a,s=e.nodeType;if(e&&3!==s&&8!==s&&2!==s)return a=1!==s||!x.isXMLDoc(e),a&&(n=x.propFix[n]||n,o=x.propHooks[n]),r!==t?o&&"set"in o&&(i=o.set(e,r,n))!==t?i:e[n]=r:o&&"get"in o&&null!==(i=o.get(e,n))?i:e[n]},propHooks:{tabIndex:{get:function(e){var t=x.find.attr(e,"tabindex");return t?parseInt(t,10):Y.test(e.nodeName)||J.test(e.nodeName)&&e.href?0:-1}}}}),X={set:function(e,t,n){return t===!1?x.removeAttr(e,n):K&&Q||!G.test(n)?e.setAttribute(!Q&&x.propFix[n]||n,n):e[x.camelCase("default-"+n)]=e[n]=!0,n}},x.each(x.expr.match.bool.source.match(/\w+/g),function(e,n){var r=x.expr.attrHandle[n]||x.find.attr;x.expr.attrHandle[n]=K&&Q||!G.test(n)?function(e,n,i){var o=x.expr.attrHandle[n],a=i?t:(x.expr.attrHandle[n]=t)!=r(e,n,i)?n.toLowerCase():null;return x.expr.attrHandle[n]=o,a}:function(e,n,r){return r?t:e[x.camelCase("default-"+n)]?n.toLowerCase():null}}),K&&Q||(x.attrHooks.value={set:function(e,n,r){return x.nodeName(e,"input")?(e.defaultValue=n,t):z&&z.set(e,n,r)}}),Q||(z={set:function(e,n,r){var i=e.getAttributeNode(r);return i||e.setAttributeNode(i=e.ownerDocument.createAttribute(r)),i.value=n+="","value"===r||n===e.getAttribute(r)?n:t}},x.expr.attrHandle.id=x.expr.attrHandle.name=x.expr.attrHandle.coords=function(e,n,r){var i;return r?t:(i=e.getAttributeNode(n))&&""!==i.value?i.value:null},x.valHooks.button={get:function(e,n){var r=e.getAttributeNode(n);return r&&r.specified?r.value:t},set:z.set},x.attrHooks.contenteditable={set:function(e,t,n){z.set(e,""===t?!1:t,n)}},x.each(["width","height"],function(e,n){x.attrHooks[n]={set:function(e,r){return""===r?(e.setAttribute(n,"auto"),r):t}}})),x.support.hrefNormalized||x.each(["href","src"],function(e,t){x.propHooks[t]={get:function(e){return e.getAttribute(t,4)}}}),x.support.style||(x.attrHooks.style={get:function(e){return e.style.cssText||t},set:function(e,t){return e.style.cssText=t+""}}),x.support.optSelected||(x.propHooks.selected={get:function(e){var t=e.parentNode;return t&&(t.selectedIndex,t.parentNode&&t.parentNode.selectedIndex),null}}),x.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],function(){x.propFix[this.toLowerCase()]=this}),x.support.enctype||(x.propFix.enctype="encoding"),x.each(["radio","checkbox"],function(){x.valHooks[this]={set:function(e,n){return x.isArray(n)?e.checked=x.inArray(x(e).val(),n)>=0:t}},x.support.checkOn||(x.valHooks[this].get=function(e){return null===e.getAttribute("value")?"on":e.value})});var Z=/^(?:input|select|textarea)$/i,et=/^key/,tt=/^(?:mouse|contextmenu)|click/,nt=/^(?:focusinfocus|focusoutblur)$/,rt=/^([^.]*)(?:\.(.+)|)$/;function it(){return!0}function ot(){return!1}function at(){try{return a.activeElement}catch(e){}}x.event={global:{},add:function(e,n,r,o,a){var s,l,u,c,p,f,d,h,g,m,y,v=x._data(e);if(v){r.handler&&(c=r,r=c.handler,a=c.selector),r.guid||(r.guid=x.guid++),(l=v.events)||(l=v.events={}),(f=v.handle)||(f=v.handle=function(e){return typeof x===i||e&&x.event.triggered===e.type?t:x.event.dispatch.apply(f.elem,arguments)},f.elem=e),n=(n||"").match(T)||[""],u=n.length;while(u--)s=rt.exec(n[u])||[],g=y=s[1],m=(s[2]||"").split(".").sort(),g&&(p=x.event.special[g]||{},g=(a?p.delegateType:p.bindType)||g,p=x.event.special[g]||{},d=x.extend({type:g,origType:y,data:o,handler:r,guid:r.guid,selector:a,needsContext:a&&x.expr.match.needsContext.test(a),namespace:m.join(".")},c),(h=l[g])||(h=l[g]=[],h.delegateCount=0,p.setup&&p.setup.call(e,o,m,f)!==!1||(e.addEventListener?e.addEventListener(g,f,!1):e.attachEvent&&e.attachEvent("on"+g,f))),p.add&&(p.add.call(e,d),d.handler.guid||(d.handler.guid=r.guid)),a?h.splice(h.delegateCount++,0,d):h.push(d),x.event.global[g]=!0);e=null}},remove:function(e,t,n,r,i){var o,a,s,l,u,c,p,f,d,h,g,m=x.hasData(e)&&x._data(e);if(m&&(c=m.events)){t=(t||"").match(T)||[""],u=t.length;while(u--)if(s=rt.exec(t[u])||[],d=g=s[1],h=(s[2]||"").split(".").sort(),d){p=x.event.special[d]||{},d=(r?p.delegateType:p.bindType)||d,f=c[d]||[],s=s[2]&&RegExp("(^|\\.)"+h.join("\\.(?:.*\\.|)")+"(\\.|$)"),l=o=f.length;while(o--)a=f[o],!i&&g!==a.origType||n&&n.guid!==a.guid||s&&!s.test(a.namespace)||r&&r!==a.selector&&("**"!==r||!a.selector)||(f.splice(o,1),a.selector&&f.delegateCount--,p.remove&&p.remove.call(e,a));l&&!f.length&&(p.teardown&&p.teardown.call(e,h,m.handle)!==!1||x.removeEvent(e,d,m.handle),delete c[d])}else for(d in c)x.event.remove(e,d+t[u],n,r,!0);x.isEmptyObject(c)&&(delete m.handle,x._removeData(e,"events"))}},trigger:function(n,r,i,o){var s,l,u,c,p,f,d,h=[i||a],g=v.call(n,"type")?n.type:n,m=v.call(n,"namespace")?n.namespace.split("."):[];if(u=f=i=i||a,3!==i.nodeType&&8!==i.nodeType&&!nt.test(g+x.event.triggered)&&(g.indexOf(".")>=0&&(m=g.split("."),g=m.shift(),m.sort()),l=0>g.indexOf(":")&&"on"+g,n=n[x.expando]?n:new x.Event(g,"object"==typeof n&&n),n.isTrigger=o?2:3,n.namespace=m.join("."),n.namespace_re=n.namespace?RegExp("(^|\\.)"+m.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,n.result=t,n.target||(n.target=i),r=null==r?[n]:x.makeArray(r,[n]),p=x.event.special[g]||{},o||!p.trigger||p.trigger.apply(i,r)!==!1)){if(!o&&!p.noBubble&&!x.isWindow(i)){for(c=p.delegateType||g,nt.test(c+g)||(u=u.parentNode);u;u=u.parentNode)h.push(u),f=u;f===(i.ownerDocument||a)&&h.push(f.defaultView||f.parentWindow||e)}d=0;while((u=h[d++])&&!n.isPropagationStopped())n.type=d>1?c:p.bindType||g,s=(x._data(u,"events")||{})[n.type]&&x._data(u,"handle"),s&&s.apply(u,r),s=l&&u[l],s&&x.acceptData(u)&&s.apply&&s.apply(u,r)===!1&&n.preventDefault();if(n.type=g,!o&&!n.isDefaultPrevented()&&(!p._default||p._default.apply(h.pop(),r)===!1)&&x.acceptData(i)&&l&&i[g]&&!x.isWindow(i)){f=i[l],f&&(i[l]=null),x.event.triggered=g;try{i[g]()}catch(y){}x.event.triggered=t,f&&(i[l]=f)}return n.result}},dispatch:function(e){e=x.event.fix(e);var n,r,i,o,a,s=[],l=g.call(arguments),u=(x._data(this,"events")||{})[e.type]||[],c=x.event.special[e.type]||{};if(l[0]=e,e.delegateTarget=this,!c.preDispatch||c.preDispatch.call(this,e)!==!1){s=x.event.handlers.call(this,e,u),n=0;while((o=s[n++])&&!e.isPropagationStopped()){e.currentTarget=o.elem,a=0;while((i=o.handlers[a++])&&!e.isImmediatePropagationStopped())(!e.namespace_re||e.namespace_re.test(i.namespace))&&(e.handleObj=i,e.data=i.data,r=((x.event.special[i.origType]||{}).handle||i.handler).apply(o.elem,l),r!==t&&(e.result=r)===!1&&(e.preventDefault(),e.stopPropagation()))}return c.postDispatch&&c.postDispatch.call(this,e),e.result}},handlers:function(e,n){var r,i,o,a,s=[],l=n.delegateCount,u=e.target;if(l&&u.nodeType&&(!e.button||"click"!==e.type))for(;u!=this;u=u.parentNode||this)if(1===u.nodeType&&(u.disabled!==!0||"click"!==e.type)){for(o=[],a=0;l>a;a++)i=n[a],r=i.selector+" ",o[r]===t&&(o[r]=i.needsContext?x(r,this).index(u)>=0:x.find(r,this,null,[u]).length),o[r]&&o.push(i);o.length&&s.push({elem:u,handlers:o})}return n.length>l&&s.push({elem:this,handlers:n.slice(l)}),s},fix:function(e){if(e[x.expando])return e;var t,n,r,i=e.type,o=e,s=this.fixHooks[i];s||(this.fixHooks[i]=s=tt.test(i)?this.mouseHooks:et.test(i)?this.keyHooks:{}),r=s.props?this.props.concat(s.props):this.props,e=new x.Event(o),t=r.length;while(t--)n=r[t],e[n]=o[n];return e.target||(e.target=o.srcElement||a),3===e.target.nodeType&&(e.target=e.target.parentNode),e.metaKey=!!e.metaKey,s.filter?s.filter(e,o):e},props:"altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "),fixHooks:{},keyHooks:{props:"char charCode key keyCode".split(" "),filter:function(e,t){return null==e.which&&(e.which=null!=t.charCode?t.charCode:t.keyCode),e}},mouseHooks:{props:"button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement".split(" "),filter:function(e,n){var r,i,o,s=n.button,l=n.fromElement;return null==e.pageX&&null!=n.clientX&&(i=e.target.ownerDocument||a,o=i.documentElement,r=i.body,e.pageX=n.clientX+(o&&o.scrollLeft||r&&r.scrollLeft||0)-(o&&o.clientLeft||r&&r.clientLeft||0),e.pageY=n.clientY+(o&&o.scrollTop||r&&r.scrollTop||0)-(o&&o.clientTop||r&&r.clientTop||0)),!e.relatedTarget&&l&&(e.relatedTarget=l===e.target?n.toElement:l),e.which||s===t||(e.which=1&s?1:2&s?3:4&s?2:0),e}},special:{load:{noBubble:!0},focus:{trigger:function(){if(this!==at()&&this.focus)try{return this.focus(),!1}catch(e){}},delegateType:"focusin"},blur:{trigger:function(){return this===at()&&this.blur?(this.blur(),!1):t},delegateType:"focusout"},click:{trigger:function(){return x.nodeName(this,"input")&&"checkbox"===this.type&&this.click?(this.click(),!1):t},_default:function(e){return x.nodeName(e.target,"a")}},beforeunload:{postDispatch:function(e){e.result!==t&&(e.originalEvent.returnValue=e.result)}}},simulate:function(e,t,n,r){var i=x.extend(new x.Event,n,{type:e,isSimulated:!0,originalEvent:{}});r?x.event.trigger(i,null,t):x.event.dispatch.call(t,i),i.isDefaultPrevented()&&n.preventDefault()}},x.removeEvent=a.removeEventListener?function(e,t,n){e.removeEventListener&&e.removeEventListener(t,n,!1)}:function(e,t,n){var r="on"+t;e.detachEvent&&(typeof e[r]===i&&(e[r]=null),e.detachEvent(r,n))},x.Event=function(e,n){return this instanceof x.Event?(e&&e.type?(this.originalEvent=e,this.type=e.type,this.isDefaultPrevented=e.defaultPrevented||e.returnValue===!1||e.getPreventDefault&&e.getPreventDefault()?it:ot):this.type=e,n&&x.extend(this,n),this.timeStamp=e&&e.timeStamp||x.now(),this[x.expando]=!0,t):new x.Event(e,n)},x.Event.prototype={isDefaultPrevented:ot,isPropagationStopped:ot,isImmediatePropagationStopped:ot,preventDefault:function(){var e=this.originalEvent;this.isDefaultPrevented=it,e&&(e.preventDefault?e.preventDefault():e.returnValue=!1)},stopPropagation:function(){var e=this.originalEvent;this.isPropagationStopped=it,e&&(e.stopPropagation&&e.stopPropagation(),e.cancelBubble=!0)},stopImmediatePropagation:function(){this.isImmediatePropagationStopped=it,this.stopPropagation()}},x.each({mouseenter:"mouseover",mouseleave:"mouseout"},function(e,t){x.event.special[e]={delegateType:t,bindType:t,handle:function(e){var n,r=this,i=e.relatedTarget,o=e.handleObj;return(!i||i!==r&&!x.contains(r,i))&&(e.type=o.origType,n=o.handler.apply(this,arguments),e.type=t),n}}}),x.support.submitBubbles||(x.event.special.submit={setup:function(){return x.nodeName(this,"form")?!1:(x.event.add(this,"click._submit keypress._submit",function(e){var n=e.target,r=x.nodeName(n,"input")||x.nodeName(n,"button")?n.form:t;r&&!x._data(r,"submitBubbles")&&(x.event.add(r,"submit._submit",function(e){e._submit_bubble=!0}),x._data(r,"submitBubbles",!0))}),t)},postDispatch:function(e){e._submit_bubble&&(delete e._submit_bubble,this.parentNode&&!e.isTrigger&&x.event.simulate("submit",this.parentNode,e,!0))},teardown:function(){return x.nodeName(this,"form")?!1:(x.event.remove(this,"._submit"),t)}}),x.support.changeBubbles||(x.event.special.change={setup:function(){return Z.test(this.nodeName)?(("checkbox"===this.type||"radio"===this.type)&&(x.event.add(this,"propertychange._change",function(e){"checked"===e.originalEvent.propertyName&&(this._just_changed=!0)}),x.event.add(this,"click._change",function(e){this._just_changed&&!e.isTrigger&&(this._just_changed=!1),x.event.simulate("change",this,e,!0)})),!1):(x.event.add(this,"beforeactivate._change",function(e){var t=e.target;Z.test(t.nodeName)&&!x._data(t,"changeBubbles")&&(x.event.add(t,"change._change",function(e){!this.parentNode||e.isSimulated||e.isTrigger||x.event.simulate("change",this.parentNode,e,!0)}),x._data(t,"changeBubbles",!0))}),t)},handle:function(e){var n=e.target;return this!==n||e.isSimulated||e.isTrigger||"radio"!==n.type&&"checkbox"!==n.type?e.handleObj.handler.apply(this,arguments):t},teardown:function(){return x.event.remove(this,"._change"),!Z.test(this.nodeName)}}),x.support.focusinBubbles||x.each({focus:"focusin",blur:"focusout"},function(e,t){var n=0,r=function(e){x.event.simulate(t,e.target,x.event.fix(e),!0)};x.event.special[t]={setup:function(){0===n++&&a.addEventListener(e,r,!0)},teardown:function(){0===--n&&a.removeEventListener(e,r,!0)}}}),x.fn.extend({on:function(e,n,r,i,o){var a,s;if("object"==typeof e){"string"!=typeof n&&(r=r||n,n=t);for(a in e)this.on(a,n,r,e[a],o);return this}if(null==r&&null==i?(i=n,r=n=t):null==i&&("string"==typeof n?(i=r,r=t):(i=r,r=n,n=t)),i===!1)i=ot;else if(!i)return this;return 1===o&&(s=i,i=function(e){return x().off(e),s.apply(this,arguments)},i.guid=s.guid||(s.guid=x.guid++)),this.each(function(){x.event.add(this,e,i,r,n)})},one:function(e,t,n,r){return this.on(e,t,n,r,1)},off:function(e,n,r){var i,o;if(e&&e.preventDefault&&e.handleObj)return i=e.handleObj,x(e.delegateTarget).off(i.namespace?i.origType+"."+i.namespace:i.origType,i.selector,i.handler),this;if("object"==typeof e){for(o in e)this.off(o,n,e[o]);return this}return(n===!1||"function"==typeof n)&&(r=n,n=t),r===!1&&(r=ot),this.each(function(){x.event.remove(this,e,r,n)})},trigger:function(e,t){return this.each(function(){x.event.trigger(e,t,this)})},triggerHandler:function(e,n){var r=this[0];return r?x.event.trigger(e,n,r,!0):t}});var st=/^.[^:#\[\.,]*$/,lt=/^(?:parents|prev(?:Until|All))/,ut=x.expr.match.needsContext,ct={children:!0,contents:!0,next:!0,prev:!0};x.fn.extend({find:function(e){var t,n=[],r=this,i=r.length;if("string"!=typeof e)return this.pushStack(x(e).filter(function(){for(t=0;i>t;t++)if(x.contains(r[t],this))return!0}));for(t=0;i>t;t++)x.find(e,r[t],n);return n=this.pushStack(i>1?x.unique(n):n),n.selector=this.selector?this.selector+" "+e:e,n},has:function(e){var t,n=x(e,this),r=n.length;return this.filter(function(){for(t=0;r>t;t++)if(x.contains(this,n[t]))return!0})},not:function(e){return this.pushStack(ft(this,e||[],!0))},filter:function(e){return this.pushStack(ft(this,e||[],!1))},is:function(e){return!!ft(this,"string"==typeof e&&ut.test(e)?x(e):e||[],!1).length},closest:function(e,t){var n,r=0,i=this.length,o=[],a=ut.test(e)||"string"!=typeof e?x(e,t||this.context):0;for(;i>r;r++)for(n=this[r];n&&n!==t;n=n.parentNode)if(11>n.nodeType&&(a?a.index(n)>-1:1===n.nodeType&&x.find.matchesSelector(n,e))){n=o.push(n);break}return this.pushStack(o.length>1?x.unique(o):o)},index:function(e){return e?"string"==typeof e?x.inArray(this[0],x(e)):x.inArray(e.jquery?e[0]:e,this):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(e,t){var n="string"==typeof e?x(e,t):x.makeArray(e&&e.nodeType?[e]:e),r=x.merge(this.get(),n);return this.pushStack(x.unique(r))},addBack:function(e){return this.add(null==e?this.prevObject:this.prevObject.filter(e))}});function pt(e,t){do e=e[t];while(e&&1!==e.nodeType);return e}x.each({parent:function(e){var t=e.parentNode;return t&&11!==t.nodeType?t:null},parents:function(e){return x.dir(e,"parentNode")},parentsUntil:function(e,t,n){return x.dir(e,"parentNode",n)},next:function(e){return pt(e,"nextSibling")},prev:function(e){return pt(e,"previousSibling")},nextAll:function(e){return x.dir(e,"nextSibling")},prevAll:function(e){return x.dir(e,"previousSibling")},nextUntil:function(e,t,n){return x.dir(e,"nextSibling",n)},prevUntil:function(e,t,n){return x.dir(e,"previousSibling",n)},siblings:function(e){return x.sibling((e.parentNode||{}).firstChild,e)},children:function(e){return x.sibling(e.firstChild)},contents:function(e){return x.nodeName(e,"iframe")?e.contentDocument||e.contentWindow.document:x.merge([],e.childNodes)}},function(e,t){x.fn[e]=function(n,r){var i=x.map(this,t,n);return"Until"!==e.slice(-5)&&(r=n),r&&"string"==typeof r&&(i=x.filter(r,i)),this.length>1&&(ct[e]||(i=x.unique(i)),lt.test(e)&&(i=i.reverse())),this.pushStack(i)}}),x.extend({filter:function(e,t,n){var r=t[0];return n&&(e=":not("+e+")"),1===t.length&&1===r.nodeType?x.find.matchesSelector(r,e)?[r]:[]:x.find.matches(e,x.grep(t,function(e){return 1===e.nodeType}))},dir:function(e,n,r){var i=[],o=e[n];while(o&&9!==o.nodeType&&(r===t||1!==o.nodeType||!x(o).is(r)))1===o.nodeType&&i.push(o),o=o[n];return i},sibling:function(e,t){var n=[];for(;e;e=e.nextSibling)1===e.nodeType&&e!==t&&n.push(e);return n}});function ft(e,t,n){if(x.isFunction(t))return x.grep(e,function(e,r){return!!t.call(e,r,e)!==n});if(t.nodeType)return x.grep(e,function(e){return e===t!==n});if("string"==typeof t){if(st.test(t))return x.filter(t,e,n);t=x.filter(t,e)}return x.grep(e,function(e){return x.inArray(e,t)>=0!==n})}function dt(e){var t=ht.split("|"),n=e.createDocumentFragment();if(n.createElement)while(t.length)n.createElement(t.pop());return n}var ht="abbr|article|aside|audio|bdi|canvas|data|datalist|details|figcaption|figure|footer|header|hgroup|mark|meter|nav|output|progress|section|summary|time|video",gt=/ jQuery\d+="(?:null|\d+)"/g,mt=RegExp("<(?:"+ht+")[\\s/>]","i"),yt=/^\s+/,vt=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi,bt=/<([\w:]+)/,xt=/<tbody/i,wt=/<|&#?\w+;/,Tt=/<(?:script|style|link)/i,Ct=/^(?:checkbox|radio)$/i,Nt=/checked\s*(?:[^=]|=\s*.checked.)/i,kt=/^$|\/(?:java|ecma)script/i,Et=/^true\/(.*)/,St=/^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g,At={option:[1,"<select multiple='multiple'>","</select>"],legend:[1,"<fieldset>","</fieldset>"],area:[1,"<map>","</map>"],param:[1,"<object>","</object>"],thead:[1,"<table>","</table>"],tr:[2,"<table><tbody>","</tbody></table>"],col:[2,"<table><tbody></tbody><colgroup>","</colgroup></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],_default:x.support.htmlSerialize?[0,"",""]:[1,"X<div>","</div>"]},jt=dt(a),Dt=jt.appendChild(a.createElement("div"));At.optgroup=At.option,At.tbody=At.tfoot=At.colgroup=At.caption=At.thead,At.th=At.td,x.fn.extend({text:function(e){return x.access(this,function(e){return e===t?x.text(this):this.empty().append((this[0]&&this[0].ownerDocument||a).createTextNode(e))},null,e,arguments.length)},append:function(){return this.domManip(arguments,function(e){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var t=Lt(this,e);t.appendChild(e)}})},prepend:function(){return this.domManip(arguments,function(e){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var t=Lt(this,e);t.insertBefore(e,t.firstChild)}})},before:function(){return this.domManip(arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this)})},after:function(){return this.domManip(arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this.nextSibling)})},remove:function(e,t){var n,r=e?x.filter(e,this):this,i=0;for(;null!=(n=r[i]);i++)t||1!==n.nodeType||x.cleanData(Ft(n)),n.parentNode&&(t&&x.contains(n.ownerDocument,n)&&_t(Ft(n,"script")),n.parentNode.removeChild(n));return this},empty:function(){var e,t=0;for(;null!=(e=this[t]);t++){1===e.nodeType&&x.cleanData(Ft(e,!1));while(e.firstChild)e.removeChild(e.firstChild);e.options&&x.nodeName(e,"select")&&(e.options.length=0)}return this},clone:function(e,t){return e=null==e?!1:e,t=null==t?e:t,this.map(function(){return x.clone(this,e,t)})},html:function(e){return x.access(this,function(e){var n=this[0]||{},r=0,i=this.length;if(e===t)return 1===n.nodeType?n.innerHTML.replace(gt,""):t;if(!("string"!=typeof e||Tt.test(e)||!x.support.htmlSerialize&&mt.test(e)||!x.support.leadingWhitespace&&yt.test(e)||At[(bt.exec(e)||["",""])[1].toLowerCase()])){e=e.replace(vt,"<$1></$2>");try{for(;i>r;r++)n=this[r]||{},1===n.nodeType&&(x.cleanData(Ft(n,!1)),n.innerHTML=e);n=0}catch(o){}}n&&this.empty().append(e)},null,e,arguments.length)},replaceWith:function(){var e=x.map(this,function(e){return[e.nextSibling,e.parentNode]}),t=0;return this.domManip(arguments,function(n){var r=e[t++],i=e[t++];i&&(r&&r.parentNode!==i&&(r=this.nextSibling),x(this).remove(),i.insertBefore(n,r))},!0),t?this:this.remove()},detach:function(e){return this.remove(e,!0)},domManip:function(e,t,n){e=d.apply([],e);var r,i,o,a,s,l,u=0,c=this.length,p=this,f=c-1,h=e[0],g=x.isFunction(h);if(g||!(1>=c||"string"!=typeof h||x.support.checkClone)&&Nt.test(h))return this.each(function(r){var i=p.eq(r);g&&(e[0]=h.call(this,r,i.html())),i.domManip(e,t,n)});if(c&&(l=x.buildFragment(e,this[0].ownerDocument,!1,!n&&this),r=l.firstChild,1===l.childNodes.length&&(l=r),r)){for(a=x.map(Ft(l,"script"),Ht),o=a.length;c>u;u++)i=l,u!==f&&(i=x.clone(i,!0,!0),o&&x.merge(a,Ft(i,"script"))),t.call(this[u],i,u);if(o)for(s=a[a.length-1].ownerDocument,x.map(a,qt),u=0;o>u;u++)i=a[u],kt.test(i.type||"")&&!x._data(i,"globalEval")&&x.contains(s,i)&&(i.src?x._evalUrl(i.src):x.globalEval((i.text||i.textContent||i.innerHTML||"").replace(St,"")));l=r=null}return this}});function Lt(e,t){return x.nodeName(e,"table")&&x.nodeName(1===t.nodeType?t:t.firstChild,"tr")?e.getElementsByTagName("tbody")[0]||e.appendChild(e.ownerDocument.createElement("tbody")):e}function Ht(e){return e.type=(null!==x.find.attr(e,"type"))+"/"+e.type,e}function qt(e){var t=Et.exec(e.type);return t?e.type=t[1]:e.removeAttribute("type"),e}function _t(e,t){var n,r=0;for(;null!=(n=e[r]);r++)x._data(n,"globalEval",!t||x._data(t[r],"globalEval"))}function Mt(e,t){if(1===t.nodeType&&x.hasData(e)){var n,r,i,o=x._data(e),a=x._data(t,o),s=o.events;if(s){delete a.handle,a.events={};for(n in s)for(r=0,i=s[n].length;i>r;r++)x.event.add(t,n,s[n][r])}a.data&&(a.data=x.extend({},a.data))}}function Ot(e,t){var n,r,i;if(1===t.nodeType){if(n=t.nodeName.toLowerCase(),!x.support.noCloneEvent&&t[x.expando]){i=x._data(t);for(r in i.events)x.removeEvent(t,r,i.handle);t.removeAttribute(x.expando)}"script"===n&&t.text!==e.text?(Ht(t).text=e.text,qt(t)):"object"===n?(t.parentNode&&(t.outerHTML=e.outerHTML),x.support.html5Clone&&e.innerHTML&&!x.trim(t.innerHTML)&&(t.innerHTML=e.innerHTML)):"input"===n&&Ct.test(e.type)?(t.defaultChecked=t.checked=e.checked,t.value!==e.value&&(t.value=e.value)):"option"===n?t.defaultSelected=t.selected=e.defaultSelected:("input"===n||"textarea"===n)&&(t.defaultValue=e.defaultValue)}}x.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(e,t){x.fn[e]=function(e){var n,r=0,i=[],o=x(e),a=o.length-1;for(;a>=r;r++)n=r===a?this:this.clone(!0),x(o[r])[t](n),h.apply(i,n.get());return this.pushStack(i)}});function Ft(e,n){var r,o,a=0,s=typeof e.getElementsByTagName!==i?e.getElementsByTagName(n||"*"):typeof e.querySelectorAll!==i?e.querySelectorAll(n||"*"):t;if(!s)for(s=[],r=e.childNodes||e;null!=(o=r[a]);a++)!n||x.nodeName(o,n)?s.push(o):x.merge(s,Ft(o,n));return n===t||n&&x.nodeName(e,n)?x.merge([e],s):s}function Bt(e){Ct.test(e.type)&&(e.defaultChecked=e.checked)}x.extend({clone:function(e,t,n){var r,i,o,a,s,l=x.contains(e.ownerDocument,e);if(x.support.html5Clone||x.isXMLDoc(e)||!mt.test("<"+e.nodeName+">")?o=e.cloneNode(!0):(Dt.innerHTML=e.outerHTML,Dt.removeChild(o=Dt.firstChild)),!(x.support.noCloneEvent&&x.support.noCloneChecked||1!==e.nodeType&&11!==e.nodeType||x.isXMLDoc(e)))for(r=Ft(o),s=Ft(e),a=0;null!=(i=s[a]);++a)r[a]&&Ot(i,r[a]);if(t)if(n)for(s=s||Ft(e),r=r||Ft(o),a=0;null!=(i=s[a]);a++)Mt(i,r[a]);else Mt(e,o);return r=Ft(o,"script"),r.length>0&&_t(r,!l&&Ft(e,"script")),r=s=i=null,o},buildFragment:function(e,t,n,r){var i,o,a,s,l,u,c,p=e.length,f=dt(t),d=[],h=0;for(;p>h;h++)if(o=e[h],o||0===o)if("object"===x.type(o))x.merge(d,o.nodeType?[o]:o);else if(wt.test(o)){s=s||f.appendChild(t.createElement("div")),l=(bt.exec(o)||["",""])[1].toLowerCase(),c=At[l]||At._default,s.innerHTML=c[1]+o.replace(vt,"<$1></$2>")+c[2],i=c[0];while(i--)s=s.lastChild;if(!x.support.leadingWhitespace&&yt.test(o)&&d.push(t.createTextNode(yt.exec(o)[0])),!x.support.tbody){o="table"!==l||xt.test(o)?"<table>"!==c[1]||xt.test(o)?0:s:s.firstChild,i=o&&o.childNodes.length;while(i--)x.nodeName(u=o.childNodes[i],"tbody")&&!u.childNodes.length&&o.removeChild(u)}x.merge(d,s.childNodes),s.textContent="";while(s.firstChild)s.removeChild(s.firstChild);s=f.lastChild}else d.push(t.createTextNode(o));s&&f.removeChild(s),x.support.appendChecked||x.grep(Ft(d,"input"),Bt),h=0;while(o=d[h++])if((!r||-1===x.inArray(o,r))&&(a=x.contains(o.ownerDocument,o),s=Ft(f.appendChild(o),"script"),a&&_t(s),n)){i=0;while(o=s[i++])kt.test(o.type||"")&&n.push(o)}return s=null,f},cleanData:function(e,t){var n,r,o,a,s=0,l=x.expando,u=x.cache,c=x.support.deleteExpando,f=x.event.special;for(;null!=(n=e[s]);s++)if((t||x.acceptData(n))&&(o=n[l],a=o&&u[o])){if(a.events)for(r in a.events)f[r]?x.event.remove(n,r):x.removeEvent(n,r,a.handle);
-u[o]&&(delete u[o],c?delete n[l]:typeof n.removeAttribute!==i?n.removeAttribute(l):n[l]=null,p.push(o))}},_evalUrl:function(e){return x.ajax({url:e,type:"GET",dataType:"script",async:!1,global:!1,"throws":!0})}}),x.fn.extend({wrapAll:function(e){if(x.isFunction(e))return this.each(function(t){x(this).wrapAll(e.call(this,t))});if(this[0]){var t=x(e,this[0].ownerDocument).eq(0).clone(!0);this[0].parentNode&&t.insertBefore(this[0]),t.map(function(){var e=this;while(e.firstChild&&1===e.firstChild.nodeType)e=e.firstChild;return e}).append(this)}return this},wrapInner:function(e){return x.isFunction(e)?this.each(function(t){x(this).wrapInner(e.call(this,t))}):this.each(function(){var t=x(this),n=t.contents();n.length?n.wrapAll(e):t.append(e)})},wrap:function(e){var t=x.isFunction(e);return this.each(function(n){x(this).wrapAll(t?e.call(this,n):e)})},unwrap:function(){return this.parent().each(function(){x.nodeName(this,"body")||x(this).replaceWith(this.childNodes)}).end()}});var Pt,Rt,Wt,$t=/alpha\([^)]*\)/i,It=/opacity\s*=\s*([^)]*)/,zt=/^(top|right|bottom|left)$/,Xt=/^(none|table(?!-c[ea]).+)/,Ut=/^margin/,Vt=RegExp("^("+w+")(.*)$","i"),Yt=RegExp("^("+w+")(?!px)[a-z%]+$","i"),Jt=RegExp("^([+-])=("+w+")","i"),Gt={BODY:"block"},Qt={position:"absolute",visibility:"hidden",display:"block"},Kt={letterSpacing:0,fontWeight:400},Zt=["Top","Right","Bottom","Left"],en=["Webkit","O","Moz","ms"];function tn(e,t){if(t in e)return t;var n=t.charAt(0).toUpperCase()+t.slice(1),r=t,i=en.length;while(i--)if(t=en[i]+n,t in e)return t;return r}function nn(e,t){return e=t||e,"none"===x.css(e,"display")||!x.contains(e.ownerDocument,e)}function rn(e,t){var n,r,i,o=[],a=0,s=e.length;for(;s>a;a++)r=e[a],r.style&&(o[a]=x._data(r,"olddisplay"),n=r.style.display,t?(o[a]||"none"!==n||(r.style.display=""),""===r.style.display&&nn(r)&&(o[a]=x._data(r,"olddisplay",ln(r.nodeName)))):o[a]||(i=nn(r),(n&&"none"!==n||!i)&&x._data(r,"olddisplay",i?n:x.css(r,"display"))));for(a=0;s>a;a++)r=e[a],r.style&&(t&&"none"!==r.style.display&&""!==r.style.display||(r.style.display=t?o[a]||"":"none"));return e}x.fn.extend({css:function(e,n){return x.access(this,function(e,n,r){var i,o,a={},s=0;if(x.isArray(n)){for(o=Rt(e),i=n.length;i>s;s++)a[n[s]]=x.css(e,n[s],!1,o);return a}return r!==t?x.style(e,n,r):x.css(e,n)},e,n,arguments.length>1)},show:function(){return rn(this,!0)},hide:function(){return rn(this)},toggle:function(e){return"boolean"==typeof e?e?this.show():this.hide():this.each(function(){nn(this)?x(this).show():x(this).hide()})}}),x.extend({cssHooks:{opacity:{get:function(e,t){if(t){var n=Wt(e,"opacity");return""===n?"1":n}}}},cssNumber:{columnCount:!0,fillOpacity:!0,fontWeight:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{"float":x.support.cssFloat?"cssFloat":"styleFloat"},style:function(e,n,r,i){if(e&&3!==e.nodeType&&8!==e.nodeType&&e.style){var o,a,s,l=x.camelCase(n),u=e.style;if(n=x.cssProps[l]||(x.cssProps[l]=tn(u,l)),s=x.cssHooks[n]||x.cssHooks[l],r===t)return s&&"get"in s&&(o=s.get(e,!1,i))!==t?o:u[n];if(a=typeof r,"string"===a&&(o=Jt.exec(r))&&(r=(o[1]+1)*o[2]+parseFloat(x.css(e,n)),a="number"),!(null==r||"number"===a&&isNaN(r)||("number"!==a||x.cssNumber[l]||(r+="px"),x.support.clearCloneStyle||""!==r||0!==n.indexOf("background")||(u[n]="inherit"),s&&"set"in s&&(r=s.set(e,r,i))===t)))try{u[n]=r}catch(c){}}},css:function(e,n,r,i){var o,a,s,l=x.camelCase(n);return n=x.cssProps[l]||(x.cssProps[l]=tn(e.style,l)),s=x.cssHooks[n]||x.cssHooks[l],s&&"get"in s&&(a=s.get(e,!0,r)),a===t&&(a=Wt(e,n,i)),"normal"===a&&n in Kt&&(a=Kt[n]),""===r||r?(o=parseFloat(a),r===!0||x.isNumeric(o)?o||0:a):a}}),e.getComputedStyle?(Rt=function(t){return e.getComputedStyle(t,null)},Wt=function(e,n,r){var i,o,a,s=r||Rt(e),l=s?s.getPropertyValue(n)||s[n]:t,u=e.style;return s&&(""!==l||x.contains(e.ownerDocument,e)||(l=x.style(e,n)),Yt.test(l)&&Ut.test(n)&&(i=u.width,o=u.minWidth,a=u.maxWidth,u.minWidth=u.maxWidth=u.width=l,l=s.width,u.width=i,u.minWidth=o,u.maxWidth=a)),l}):a.documentElement.currentStyle&&(Rt=function(e){return e.currentStyle},Wt=function(e,n,r){var i,o,a,s=r||Rt(e),l=s?s[n]:t,u=e.style;return null==l&&u&&u[n]&&(l=u[n]),Yt.test(l)&&!zt.test(n)&&(i=u.left,o=e.runtimeStyle,a=o&&o.left,a&&(o.left=e.currentStyle.left),u.left="fontSize"===n?"1em":l,l=u.pixelLeft+"px",u.left=i,a&&(o.left=a)),""===l?"auto":l});function on(e,t,n){var r=Vt.exec(t);return r?Math.max(0,r[1]-(n||0))+(r[2]||"px"):t}function an(e,t,n,r,i){var o=n===(r?"border":"content")?4:"width"===t?1:0,a=0;for(;4>o;o+=2)"margin"===n&&(a+=x.css(e,n+Zt[o],!0,i)),r?("content"===n&&(a-=x.css(e,"padding"+Zt[o],!0,i)),"margin"!==n&&(a-=x.css(e,"border"+Zt[o]+"Width",!0,i))):(a+=x.css(e,"padding"+Zt[o],!0,i),"padding"!==n&&(a+=x.css(e,"border"+Zt[o]+"Width",!0,i)));return a}function sn(e,t,n){var r=!0,i="width"===t?e.offsetWidth:e.offsetHeight,o=Rt(e),a=x.support.boxSizing&&"border-box"===x.css(e,"boxSizing",!1,o);if(0>=i||null==i){if(i=Wt(e,t,o),(0>i||null==i)&&(i=e.style[t]),Yt.test(i))return i;r=a&&(x.support.boxSizingReliable||i===e.style[t]),i=parseFloat(i)||0}return i+an(e,t,n||(a?"border":"content"),r,o)+"px"}function ln(e){var t=a,n=Gt[e];return n||(n=un(e,t),"none"!==n&&n||(Pt=(Pt||x("<iframe frameborder='0' width='0' height='0'/>").css("cssText","display:block !important")).appendTo(t.documentElement),t=(Pt[0].contentWindow||Pt[0].contentDocument).document,t.write("<!doctype html><html><body>"),t.close(),n=un(e,t),Pt.detach()),Gt[e]=n),n}function un(e,t){var n=x(t.createElement(e)).appendTo(t.body),r=x.css(n[0],"display");return n.remove(),r}x.each(["height","width"],function(e,n){x.cssHooks[n]={get:function(e,r,i){return r?0===e.offsetWidth&&Xt.test(x.css(e,"display"))?x.swap(e,Qt,function(){return sn(e,n,i)}):sn(e,n,i):t},set:function(e,t,r){var i=r&&Rt(e);return on(e,t,r?an(e,n,r,x.support.boxSizing&&"border-box"===x.css(e,"boxSizing",!1,i),i):0)}}}),x.support.opacity||(x.cssHooks.opacity={get:function(e,t){return It.test((t&&e.currentStyle?e.currentStyle.filter:e.style.filter)||"")?.01*parseFloat(RegExp.$1)+"":t?"1":""},set:function(e,t){var n=e.style,r=e.currentStyle,i=x.isNumeric(t)?"alpha(opacity="+100*t+")":"",o=r&&r.filter||n.filter||"";n.zoom=1,(t>=1||""===t)&&""===x.trim(o.replace($t,""))&&n.removeAttribute&&(n.removeAttribute("filter"),""===t||r&&!r.filter)||(n.filter=$t.test(o)?o.replace($t,i):o+" "+i)}}),x(function(){x.support.reliableMarginRight||(x.cssHooks.marginRight={get:function(e,n){return n?x.swap(e,{display:"inline-block"},Wt,[e,"marginRight"]):t}}),!x.support.pixelPosition&&x.fn.position&&x.each(["top","left"],function(e,n){x.cssHooks[n]={get:function(e,r){return r?(r=Wt(e,n),Yt.test(r)?x(e).position()[n]+"px":r):t}}})}),x.expr&&x.expr.filters&&(x.expr.filters.hidden=function(e){return 0>=e.offsetWidth&&0>=e.offsetHeight||!x.support.reliableHiddenOffsets&&"none"===(e.style&&e.style.display||x.css(e,"display"))},x.expr.filters.visible=function(e){return!x.expr.filters.hidden(e)}),x.each({margin:"",padding:"",border:"Width"},function(e,t){x.cssHooks[e+t]={expand:function(n){var r=0,i={},o="string"==typeof n?n.split(" "):[n];for(;4>r;r++)i[e+Zt[r]+t]=o[r]||o[r-2]||o[0];return i}},Ut.test(e)||(x.cssHooks[e+t].set=on)});var cn=/%20/g,pn=/\[\]$/,fn=/\r?\n/g,dn=/^(?:submit|button|image|reset|file)$/i,hn=/^(?:input|select|textarea|keygen)/i;x.fn.extend({serialize:function(){return x.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var e=x.prop(this,"elements");return e?x.makeArray(e):this}).filter(function(){var e=this.type;return this.name&&!x(this).is(":disabled")&&hn.test(this.nodeName)&&!dn.test(e)&&(this.checked||!Ct.test(e))}).map(function(e,t){var n=x(this).val();return null==n?null:x.isArray(n)?x.map(n,function(e){return{name:t.name,value:e.replace(fn,"\r\n")}}):{name:t.name,value:n.replace(fn,"\r\n")}}).get()}}),x.param=function(e,n){var r,i=[],o=function(e,t){t=x.isFunction(t)?t():null==t?"":t,i[i.length]=encodeURIComponent(e)+"="+encodeURIComponent(t)};if(n===t&&(n=x.ajaxSettings&&x.ajaxSettings.traditional),x.isArray(e)||e.jquery&&!x.isPlainObject(e))x.each(e,function(){o(this.name,this.value)});else for(r in e)gn(r,e[r],n,o);return i.join("&").replace(cn,"+")};function gn(e,t,n,r){var i;if(x.isArray(t))x.each(t,function(t,i){n||pn.test(e)?r(e,i):gn(e+"["+("object"==typeof i?t:"")+"]",i,n,r)});else if(n||"object"!==x.type(t))r(e,t);else for(i in t)gn(e+"["+i+"]",t[i],n,r)}x.each("blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error contextmenu".split(" "),function(e,t){x.fn[t]=function(e,n){return arguments.length>0?this.on(t,null,e,n):this.trigger(t)}}),x.fn.extend({hover:function(e,t){return this.mouseenter(e).mouseleave(t||e)},bind:function(e,t,n){return this.on(e,null,t,n)},unbind:function(e,t){return this.off(e,null,t)},delegate:function(e,t,n,r){return this.on(t,e,n,r)},undelegate:function(e,t,n){return 1===arguments.length?this.off(e,"**"):this.off(t,e||"**",n)}});var mn,yn,vn=x.now(),bn=/\?/,xn=/#.*$/,wn=/([?&])_=[^&]*/,Tn=/^(.*?):[ \t]*([^\r\n]*)\r?$/gm,Cn=/^(?:about|app|app-storage|.+-extension|file|res|widget):$/,Nn=/^(?:GET|HEAD)$/,kn=/^\/\//,En=/^([\w.+-]+:)(?:\/\/([^\/?#:]*)(?::(\d+)|)|)/,Sn=x.fn.load,An={},jn={},Dn="*/".concat("*");try{yn=o.href}catch(Ln){yn=a.createElement("a"),yn.href="",yn=yn.href}mn=En.exec(yn.toLowerCase())||[];function Hn(e){return function(t,n){"string"!=typeof t&&(n=t,t="*");var r,i=0,o=t.toLowerCase().match(T)||[];if(x.isFunction(n))while(r=o[i++])"+"===r[0]?(r=r.slice(1)||"*",(e[r]=e[r]||[]).unshift(n)):(e[r]=e[r]||[]).push(n)}}function qn(e,n,r,i){var o={},a=e===jn;function s(l){var u;return o[l]=!0,x.each(e[l]||[],function(e,l){var c=l(n,r,i);return"string"!=typeof c||a||o[c]?a?!(u=c):t:(n.dataTypes.unshift(c),s(c),!1)}),u}return s(n.dataTypes[0])||!o["*"]&&s("*")}function _n(e,n){var r,i,o=x.ajaxSettings.flatOptions||{};for(i in n)n[i]!==t&&((o[i]?e:r||(r={}))[i]=n[i]);return r&&x.extend(!0,e,r),e}x.fn.load=function(e,n,r){if("string"!=typeof e&&Sn)return Sn.apply(this,arguments);var i,o,a,s=this,l=e.indexOf(" ");return l>=0&&(i=e.slice(l,e.length),e=e.slice(0,l)),x.isFunction(n)?(r=n,n=t):n&&"object"==typeof n&&(a="POST"),s.length>0&&x.ajax({url:e,type:a,dataType:"html",data:n}).done(function(e){o=arguments,s.html(i?x("<div>").append(x.parseHTML(e)).find(i):e)}).complete(r&&function(e,t){s.each(r,o||[e.responseText,t,e])}),this},x.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(e,t){x.fn[t]=function(e){return this.on(t,e)}}),x.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:yn,type:"GET",isLocal:Cn.test(mn[1]),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":Dn,text:"text/plain",html:"text/html",xml:"application/xml, text/xml",json:"application/json, text/javascript"},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText",json:"responseJSON"},converters:{"* text":String,"text html":!0,"text json":x.parseJSON,"text xml":x.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(e,t){return t?_n(_n(e,x.ajaxSettings),t):_n(x.ajaxSettings,e)},ajaxPrefilter:Hn(An),ajaxTransport:Hn(jn),ajax:function(e,n){"object"==typeof e&&(n=e,e=t),n=n||{};var r,i,o,a,s,l,u,c,p=x.ajaxSetup({},n),f=p.context||p,d=p.context&&(f.nodeType||f.jquery)?x(f):x.event,h=x.Deferred(),g=x.Callbacks("once memory"),m=p.statusCode||{},y={},v={},b=0,w="canceled",C={readyState:0,getResponseHeader:function(e){var t;if(2===b){if(!c){c={};while(t=Tn.exec(a))c[t[1].toLowerCase()]=t[2]}t=c[e.toLowerCase()]}return null==t?null:t},getAllResponseHeaders:function(){return 2===b?a:null},setRequestHeader:function(e,t){var n=e.toLowerCase();return b||(e=v[n]=v[n]||e,y[e]=t),this},overrideMimeType:function(e){return b||(p.mimeType=e),this},statusCode:function(e){var t;if(e)if(2>b)for(t in e)m[t]=[m[t],e[t]];else C.always(e[C.status]);return this},abort:function(e){var t=e||w;return u&&u.abort(t),k(0,t),this}};if(h.promise(C).complete=g.add,C.success=C.done,C.error=C.fail,p.url=((e||p.url||yn)+"").replace(xn,"").replace(kn,mn[1]+"//"),p.type=n.method||n.type||p.method||p.type,p.dataTypes=x.trim(p.dataType||"*").toLowerCase().match(T)||[""],null==p.crossDomain&&(r=En.exec(p.url.toLowerCase()),p.crossDomain=!(!r||r[1]===mn[1]&&r[2]===mn[2]&&(r[3]||("http:"===r[1]?"80":"443"))===(mn[3]||("http:"===mn[1]?"80":"443")))),p.data&&p.processData&&"string"!=typeof p.data&&(p.data=x.param(p.data,p.traditional)),qn(An,p,n,C),2===b)return C;l=p.global,l&&0===x.active++&&x.event.trigger("ajaxStart"),p.type=p.type.toUpperCase(),p.hasContent=!Nn.test(p.type),o=p.url,p.hasContent||(p.data&&(o=p.url+=(bn.test(o)?"&":"?")+p.data,delete p.data),p.cache===!1&&(p.url=wn.test(o)?o.replace(wn,"$1_="+vn++):o+(bn.test(o)?"&":"?")+"_="+vn++)),p.ifModified&&(x.lastModified[o]&&C.setRequestHeader("If-Modified-Since",x.lastModified[o]),x.etag[o]&&C.setRequestHeader("If-None-Match",x.etag[o])),(p.data&&p.hasContent&&p.contentType!==!1||n.contentType)&&C.setRequestHeader("Content-Type",p.contentType),C.setRequestHeader("Accept",p.dataTypes[0]&&p.accepts[p.dataTypes[0]]?p.accepts[p.dataTypes[0]]+("*"!==p.dataTypes[0]?", "+Dn+"; q=0.01":""):p.accepts["*"]);for(i in p.headers)C.setRequestHeader(i,p.headers[i]);if(p.beforeSend&&(p.beforeSend.call(f,C,p)===!1||2===b))return C.abort();w="abort";for(i in{success:1,error:1,complete:1})C[i](p[i]);if(u=qn(jn,p,n,C)){C.readyState=1,l&&d.trigger("ajaxSend",[C,p]),p.async&&p.timeout>0&&(s=setTimeout(function(){C.abort("timeout")},p.timeout));try{b=1,u.send(y,k)}catch(N){if(!(2>b))throw N;k(-1,N)}}else k(-1,"No Transport");function k(e,n,r,i){var c,y,v,w,T,N=n;2!==b&&(b=2,s&&clearTimeout(s),u=t,a=i||"",C.readyState=e>0?4:0,c=e>=200&&300>e||304===e,r&&(w=Mn(p,C,r)),w=On(p,w,C,c),c?(p.ifModified&&(T=C.getResponseHeader("Last-Modified"),T&&(x.lastModified[o]=T),T=C.getResponseHeader("etag"),T&&(x.etag[o]=T)),204===e||"HEAD"===p.type?N="nocontent":304===e?N="notmodified":(N=w.state,y=w.data,v=w.error,c=!v)):(v=N,(e||!N)&&(N="error",0>e&&(e=0))),C.status=e,C.statusText=(n||N)+"",c?h.resolveWith(f,[y,N,C]):h.rejectWith(f,[C,N,v]),C.statusCode(m),m=t,l&&d.trigger(c?"ajaxSuccess":"ajaxError",[C,p,c?y:v]),g.fireWith(f,[C,N]),l&&(d.trigger("ajaxComplete",[C,p]),--x.active||x.event.trigger("ajaxStop")))}return C},getJSON:function(e,t,n){return x.get(e,t,n,"json")},getScript:function(e,n){return x.get(e,t,n,"script")}}),x.each(["get","post"],function(e,n){x[n]=function(e,r,i,o){return x.isFunction(r)&&(o=o||i,i=r,r=t),x.ajax({url:e,type:n,dataType:o,data:r,success:i})}});function Mn(e,n,r){var i,o,a,s,l=e.contents,u=e.dataTypes;while("*"===u[0])u.shift(),o===t&&(o=e.mimeType||n.getResponseHeader("Content-Type"));if(o)for(s in l)if(l[s]&&l[s].test(o)){u.unshift(s);break}if(u[0]in r)a=u[0];else{for(s in r){if(!u[0]||e.converters[s+" "+u[0]]){a=s;break}i||(i=s)}a=a||i}return a?(a!==u[0]&&u.unshift(a),r[a]):t}function On(e,t,n,r){var i,o,a,s,l,u={},c=e.dataTypes.slice();if(c[1])for(a in e.converters)u[a.toLowerCase()]=e.converters[a];o=c.shift();while(o)if(e.responseFields[o]&&(n[e.responseFields[o]]=t),!l&&r&&e.dataFilter&&(t=e.dataFilter(t,e.dataType)),l=o,o=c.shift())if("*"===o)o=l;else if("*"!==l&&l!==o){if(a=u[l+" "+o]||u["* "+o],!a)for(i in u)if(s=i.split(" "),s[1]===o&&(a=u[l+" "+s[0]]||u["* "+s[0]])){a===!0?a=u[i]:u[i]!==!0&&(o=s[0],c.unshift(s[1]));break}if(a!==!0)if(a&&e["throws"])t=a(t);else try{t=a(t)}catch(p){return{state:"parsererror",error:a?p:"No conversion from "+l+" to "+o}}}return{state:"success",data:t}}x.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/(?:java|ecma)script/},converters:{"text script":function(e){return x.globalEval(e),e}}}),x.ajaxPrefilter("script",function(e){e.cache===t&&(e.cache=!1),e.crossDomain&&(e.type="GET",e.global=!1)}),x.ajaxTransport("script",function(e){if(e.crossDomain){var n,r=a.head||x("head")[0]||a.documentElement;return{send:function(t,i){n=a.createElement("script"),n.async=!0,e.scriptCharset&&(n.charset=e.scriptCharset),n.src=e.url,n.onload=n.onreadystatechange=function(e,t){(t||!n.readyState||/loaded|complete/.test(n.readyState))&&(n.onload=n.onreadystatechange=null,n.parentNode&&n.parentNode.removeChild(n),n=null,t||i(200,"success"))},r.insertBefore(n,r.firstChild)},abort:function(){n&&n.onload(t,!0)}}}});var Fn=[],Bn=/(=)\?(?=&|$)|\?\?/;x.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var e=Fn.pop()||x.expando+"_"+vn++;return this[e]=!0,e}}),x.ajaxPrefilter("json jsonp",function(n,r,i){var o,a,s,l=n.jsonp!==!1&&(Bn.test(n.url)?"url":"string"==typeof n.data&&!(n.contentType||"").indexOf("application/x-www-form-urlencoded")&&Bn.test(n.data)&&"data");return l||"jsonp"===n.dataTypes[0]?(o=n.jsonpCallback=x.isFunction(n.jsonpCallback)?n.jsonpCallback():n.jsonpCallback,l?n[l]=n[l].replace(Bn,"$1"+o):n.jsonp!==!1&&(n.url+=(bn.test(n.url)?"&":"?")+n.jsonp+"="+o),n.converters["script json"]=function(){return s||x.error(o+" was not called"),s[0]},n.dataTypes[0]="json",a=e[o],e[o]=function(){s=arguments},i.always(function(){e[o]=a,n[o]&&(n.jsonpCallback=r.jsonpCallback,Fn.push(o)),s&&x.isFunction(a)&&a(s[0]),s=a=t}),"script"):t});var Pn,Rn,Wn=0,$n=e.ActiveXObject&&function(){var e;for(e in Pn)Pn[e](t,!0)};function In(){try{return new e.XMLHttpRequest}catch(t){}}function zn(){try{return new e.ActiveXObject("Microsoft.XMLHTTP")}catch(t){}}x.ajaxSettings.xhr=e.ActiveXObject?function(){return!this.isLocal&&In()||zn()}:In,Rn=x.ajaxSettings.xhr(),x.support.cors=!!Rn&&"withCredentials"in Rn,Rn=x.support.ajax=!!Rn,Rn&&x.ajaxTransport(function(n){if(!n.crossDomain||x.support.cors){var r;return{send:function(i,o){var a,s,l=n.xhr();if(n.username?l.open(n.type,n.url,n.async,n.username,n.password):l.open(n.type,n.url,n.async),n.xhrFields)for(s in n.xhrFields)l[s]=n.xhrFields[s];n.mimeType&&l.overrideMimeType&&l.overrideMimeType(n.mimeType),n.crossDomain||i["X-Requested-With"]||(i["X-Requested-With"]="XMLHttpRequest");try{for(s in i)l.setRequestHeader(s,i[s])}catch(u){}l.send(n.hasContent&&n.data||null),r=function(e,i){var s,u,c,p;try{if(r&&(i||4===l.readyState))if(r=t,a&&(l.onreadystatechange=x.noop,$n&&delete Pn[a]),i)4!==l.readyState&&l.abort();else{p={},s=l.status,u=l.getAllResponseHeaders(),"string"==typeof l.responseText&&(p.text=l.responseText);try{c=l.statusText}catch(f){c=""}s||!n.isLocal||n.crossDomain?1223===s&&(s=204):s=p.text?200:404}}catch(d){i||o(-1,d)}p&&o(s,c,p,u)},n.async?4===l.readyState?setTimeout(r):(a=++Wn,$n&&(Pn||(Pn={},x(e).unload($n)),Pn[a]=r),l.onreadystatechange=r):r()},abort:function(){r&&r(t,!0)}}}});var Xn,Un,Vn=/^(?:toggle|show|hide)$/,Yn=RegExp("^(?:([+-])=|)("+w+")([a-z%]*)$","i"),Jn=/queueHooks$/,Gn=[nr],Qn={"*":[function(e,t){var n=this.createTween(e,t),r=n.cur(),i=Yn.exec(t),o=i&&i[3]||(x.cssNumber[e]?"":"px"),a=(x.cssNumber[e]||"px"!==o&&+r)&&Yn.exec(x.css(n.elem,e)),s=1,l=20;if(a&&a[3]!==o){o=o||a[3],i=i||[],a=+r||1;do s=s||".5",a/=s,x.style(n.elem,e,a+o);while(s!==(s=n.cur()/r)&&1!==s&&--l)}return i&&(a=n.start=+a||+r||0,n.unit=o,n.end=i[1]?a+(i[1]+1)*i[2]:+i[2]),n}]};function Kn(){return setTimeout(function(){Xn=t}),Xn=x.now()}function Zn(e,t,n){var r,i=(Qn[t]||[]).concat(Qn["*"]),o=0,a=i.length;for(;a>o;o++)if(r=i[o].call(n,t,e))return r}function er(e,t,n){var r,i,o=0,a=Gn.length,s=x.Deferred().always(function(){delete l.elem}),l=function(){if(i)return!1;var t=Xn||Kn(),n=Math.max(0,u.startTime+u.duration-t),r=n/u.duration||0,o=1-r,a=0,l=u.tweens.length;for(;l>a;a++)u.tweens[a].run(o);return s.notifyWith(e,[u,o,n]),1>o&&l?n:(s.resolveWith(e,[u]),!1)},u=s.promise({elem:e,props:x.extend({},t),opts:x.extend(!0,{specialEasing:{}},n),originalProperties:t,originalOptions:n,startTime:Xn||Kn(),duration:n.duration,tweens:[],createTween:function(t,n){var r=x.Tween(e,u.opts,t,n,u.opts.specialEasing[t]||u.opts.easing);return u.tweens.push(r),r},stop:function(t){var n=0,r=t?u.tweens.length:0;if(i)return this;for(i=!0;r>n;n++)u.tweens[n].run(1);return t?s.resolveWith(e,[u,t]):s.rejectWith(e,[u,t]),this}}),c=u.props;for(tr(c,u.opts.specialEasing);a>o;o++)if(r=Gn[o].call(u,e,c,u.opts))return r;return x.map(c,Zn,u),x.isFunction(u.opts.start)&&u.opts.start.call(e,u),x.fx.timer(x.extend(l,{elem:e,anim:u,queue:u.opts.queue})),u.progress(u.opts.progress).done(u.opts.done,u.opts.complete).fail(u.opts.fail).always(u.opts.always)}function tr(e,t){var n,r,i,o,a;for(n in e)if(r=x.camelCase(n),i=t[r],o=e[n],x.isArray(o)&&(i=o[1],o=e[n]=o[0]),n!==r&&(e[r]=o,delete e[n]),a=x.cssHooks[r],a&&"expand"in a){o=a.expand(o),delete e[r];for(n in o)n in e||(e[n]=o[n],t[n]=i)}else t[r]=i}x.Animation=x.extend(er,{tweener:function(e,t){x.isFunction(e)?(t=e,e=["*"]):e=e.split(" ");var n,r=0,i=e.length;for(;i>r;r++)n=e[r],Qn[n]=Qn[n]||[],Qn[n].unshift(t)},prefilter:function(e,t){t?Gn.unshift(e):Gn.push(e)}});function nr(e,t,n){var r,i,o,a,s,l,u=this,c={},p=e.style,f=e.nodeType&&nn(e),d=x._data(e,"fxshow");n.queue||(s=x._queueHooks(e,"fx"),null==s.unqueued&&(s.unqueued=0,l=s.empty.fire,s.empty.fire=function(){s.unqueued||l()}),s.unqueued++,u.always(function(){u.always(function(){s.unqueued--,x.queue(e,"fx").length||s.empty.fire()})})),1===e.nodeType&&("height"in t||"width"in t)&&(n.overflow=[p.overflow,p.overflowX,p.overflowY],"inline"===x.css(e,"display")&&"none"===x.css(e,"float")&&(x.support.inlineBlockNeedsLayout&&"inline"!==ln(e.nodeName)?p.zoom=1:p.display="inline-block")),n.overflow&&(p.overflow="hidden",x.support.shrinkWrapBlocks||u.always(function(){p.overflow=n.overflow[0],p.overflowX=n.overflow[1],p.overflowY=n.overflow[2]}));for(r in t)if(i=t[r],Vn.exec(i)){if(delete t[r],o=o||"toggle"===i,i===(f?"hide":"show"))continue;c[r]=d&&d[r]||x.style(e,r)}if(!x.isEmptyObject(c)){d?"hidden"in d&&(f=d.hidden):d=x._data(e,"fxshow",{}),o&&(d.hidden=!f),f?x(e).show():u.done(function(){x(e).hide()}),u.done(function(){var t;x._removeData(e,"fxshow");for(t in c)x.style(e,t,c[t])});for(r in c)a=Zn(f?d[r]:0,r,u),r in d||(d[r]=a.start,f&&(a.end=a.start,a.start="width"===r||"height"===r?1:0))}}function rr(e,t,n,r,i){return new rr.prototype.init(e,t,n,r,i)}x.Tween=rr,rr.prototype={constructor:rr,init:function(e,t,n,r,i,o){this.elem=e,this.prop=n,this.easing=i||"swing",this.options=t,this.start=this.now=this.cur(),this.end=r,this.unit=o||(x.cssNumber[n]?"":"px")},cur:function(){var e=rr.propHooks[this.prop];return e&&e.get?e.get(this):rr.propHooks._default.get(this)},run:function(e){var t,n=rr.propHooks[this.prop];return this.pos=t=this.options.duration?x.easing[this.easing](e,this.options.duration*e,0,1,this.options.duration):e,this.now=(this.end-this.start)*t+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),n&&n.set?n.set(this):rr.propHooks._default.set(this),this}},rr.prototype.init.prototype=rr.prototype,rr.propHooks={_default:{get:function(e){var t;return null==e.elem[e.prop]||e.elem.style&&null!=e.elem.style[e.prop]?(t=x.css(e.elem,e.prop,""),t&&"auto"!==t?t:0):e.elem[e.prop]},set:function(e){x.fx.step[e.prop]?x.fx.step[e.prop](e):e.elem.style&&(null!=e.elem.style[x.cssProps[e.prop]]||x.cssHooks[e.prop])?x.style(e.elem,e.prop,e.now+e.unit):e.elem[e.prop]=e.now}}},rr.propHooks.scrollTop=rr.propHooks.scrollLeft={set:function(e){e.elem.nodeType&&e.elem.parentNode&&(e.elem[e.prop]=e.now)}},x.each(["toggle","show","hide"],function(e,t){var n=x.fn[t];x.fn[t]=function(e,r,i){return null==e||"boolean"==typeof e?n.apply(this,arguments):this.animate(ir(t,!0),e,r,i)}}),x.fn.extend({fadeTo:function(e,t,n,r){return this.filter(nn).css("opacity",0).show().end().animate({opacity:t},e,n,r)},animate:function(e,t,n,r){var i=x.isEmptyObject(e),o=x.speed(t,n,r),a=function(){var t=er(this,x.extend({},e),o);(i||x._data(this,"finish"))&&t.stop(!0)};return a.finish=a,i||o.queue===!1?this.each(a):this.queue(o.queue,a)},stop:function(e,n,r){var i=function(e){var t=e.stop;delete e.stop,t(r)};return"string"!=typeof e&&(r=n,n=e,e=t),n&&e!==!1&&this.queue(e||"fx",[]),this.each(function(){var t=!0,n=null!=e&&e+"queueHooks",o=x.timers,a=x._data(this);if(n)a[n]&&a[n].stop&&i(a[n]);else for(n in a)a[n]&&a[n].stop&&Jn.test(n)&&i(a[n]);for(n=o.length;n--;)o[n].elem!==this||null!=e&&o[n].queue!==e||(o[n].anim.stop(r),t=!1,o.splice(n,1));(t||!r)&&x.dequeue(this,e)})},finish:function(e){return e!==!1&&(e=e||"fx"),this.each(function(){var t,n=x._data(this),r=n[e+"queue"],i=n[e+"queueHooks"],o=x.timers,a=r?r.length:0;for(n.finish=!0,x.queue(this,e,[]),i&&i.stop&&i.stop.call(this,!0),t=o.length;t--;)o[t].elem===this&&o[t].queue===e&&(o[t].anim.stop(!0),o.splice(t,1));for(t=0;a>t;t++)r[t]&&r[t].finish&&r[t].finish.call(this);delete n.finish})}});function ir(e,t){var n,r={height:e},i=0;for(t=t?1:0;4>i;i+=2-t)n=Zt[i],r["margin"+n]=r["padding"+n]=e;return t&&(r.opacity=r.width=e),r}x.each({slideDown:ir("show"),slideUp:ir("hide"),slideToggle:ir("toggle"),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(e,t){x.fn[e]=function(e,n,r){return this.animate(t,e,n,r)}}),x.speed=function(e,t,n){var r=e&&"object"==typeof e?x.extend({},e):{complete:n||!n&&t||x.isFunction(e)&&e,duration:e,easing:n&&t||t&&!x.isFunction(t)&&t};return r.duration=x.fx.off?0:"number"==typeof r.duration?r.duration:r.duration in x.fx.speeds?x.fx.speeds[r.duration]:x.fx.speeds._default,(null==r.queue||r.queue===!0)&&(r.queue="fx"),r.old=r.complete,r.complete=function(){x.isFunction(r.old)&&r.old.call(this),r.queue&&x.dequeue(this,r.queue)},r},x.easing={linear:function(e){return e},swing:function(e){return.5-Math.cos(e*Math.PI)/2}},x.timers=[],x.fx=rr.prototype.init,x.fx.tick=function(){var e,n=x.timers,r=0;for(Xn=x.now();n.length>r;r++)e=n[r],e()||n[r]!==e||n.splice(r--,1);n.length||x.fx.stop(),Xn=t},x.fx.timer=function(e){e()&&x.timers.push(e)&&x.fx.start()},x.fx.interval=13,x.fx.start=function(){Un||(Un=setInterval(x.fx.tick,x.fx.interval))},x.fx.stop=function(){clearInterval(Un),Un=null},x.fx.speeds={slow:600,fast:200,_default:400},x.fx.step={},x.expr&&x.expr.filters&&(x.expr.filters.animated=function(e){return x.grep(x.timers,function(t){return e===t.elem}).length}),x.fn.offset=function(e){if(arguments.length)return e===t?this:this.each(function(t){x.offset.setOffset(this,e,t)});var n,r,o={top:0,left:0},a=this[0],s=a&&a.ownerDocument;if(s)return n=s.documentElement,x.contains(n,a)?(typeof a.getBoundingClientRect!==i&&(o=a.getBoundingClientRect()),r=or(s),{top:o.top+(r.pageYOffset||n.scrollTop)-(n.clientTop||0),left:o.left+(r.pageXOffset||n.scrollLeft)-(n.clientLeft||0)}):o},x.offset={setOffset:function(e,t,n){var r=x.css(e,"position");"static"===r&&(e.style.position="relative");var i=x(e),o=i.offset(),a=x.css(e,"top"),s=x.css(e,"left"),l=("absolute"===r||"fixed"===r)&&x.inArray("auto",[a,s])>-1,u={},c={},p,f;l?(c=i.position(),p=c.top,f=c.left):(p=parseFloat(a)||0,f=parseFloat(s)||0),x.isFunction(t)&&(t=t.call(e,n,o)),null!=t.top&&(u.top=t.top-o.top+p),null!=t.left&&(u.left=t.left-o.left+f),"using"in t?t.using.call(e,u):i.css(u)}},x.fn.extend({position:function(){if(this[0]){var e,t,n={top:0,left:0},r=this[0];return"fixed"===x.css(r,"position")?t=r.getBoundingClientRect():(e=this.offsetParent(),t=this.offset(),x.nodeName(e[0],"html")||(n=e.offset()),n.top+=x.css(e[0],"borderTopWidth",!0),n.left+=x.css(e[0],"borderLeftWidth",!0)),{top:t.top-n.top-x.css(r,"marginTop",!0),left:t.left-n.left-x.css(r,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var e=this.offsetParent||s;while(e&&!x.nodeName(e,"html")&&"static"===x.css(e,"position"))e=e.offsetParent;return e||s})}}),x.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(e,n){var r=/Y/.test(n);x.fn[e]=function(i){return x.access(this,function(e,i,o){var a=or(e);return o===t?a?n in a?a[n]:a.document.documentElement[i]:e[i]:(a?a.scrollTo(r?x(a).scrollLeft():o,r?o:x(a).scrollTop()):e[i]=o,t)},e,i,arguments.length,null)}});function or(e){return x.isWindow(e)?e:9===e.nodeType?e.defaultView||e.parentWindow:!1}x.each({Height:"height",Width:"width"},function(e,n){x.each({padding:"inner"+e,content:n,"":"outer"+e},function(r,i){x.fn[i]=function(i,o){var a=arguments.length&&(r||"boolean"!=typeof i),s=r||(i===!0||o===!0?"margin":"border");return x.access(this,function(n,r,i){var o;return x.isWindow(n)?n.document.documentElement["client"+e]:9===n.nodeType?(o=n.documentElement,Math.max(n.body["scroll"+e],o["scroll"+e],n.body["offset"+e],o["offset"+e],o["client"+e])):i===t?x.css(n,r,s):x.style(n,r,i,s)},n,a?i:t,a,null)}})}),x.fn.size=function(){return this.length},x.fn.andSelf=x.fn.addBack,"object"==typeof module&&module&&"object"==typeof module.exports?module.exports=x:(e.jQuery=e.$=x,"function"==typeof define&&define.amd&&define("jquery",[],function(){return x}))})(window);
diff --git a/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/plugin/web_templates/webrunner/testrunner.js b/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/plugin/web_templates/webrunner/testrunner.js
deleted file mode 100755 (executable)
index 9b2e69f..0000000
+++ /dev/null
@@ -1,792 +0,0 @@
-/*
-Copyright (c) 2015 Samsung Electronics Co.
-
-Redistribution and use in source and binary forms, with or without modification,
-are permitted provided that the following conditions are met:
-
-* Redistributions of works must retain the original copyright notice, this list
-  of conditions and the following disclaimer.
-* Redistributions in binary form must reproduce the original copyright notice,
-  this list of conditions and the following disclaimer in the documentation
-  and/or other materials provided with the distribution.
-* Neither the name of Intel Corporation nor the names of its contributors
-  may be used to endorse or promote products derived from this work without
-  specific prior written permission.
-
-THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
-AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
-ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
-INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
-BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
-OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
-NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
-EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-Authors:
-
-*/
-var STUB_PORT = "";
-var RESOURCE_DIR = "/opt/usr/media";
-$.ajax({
-  url:RESOURCE_DIR + "/tct/portconfigure.json",
-  dataType:"json",
-  data:{},
-  async:false,
-  success:function(data){
-    STUB_PORT = data[0]["STUB_PORT"];
-  }
-});
-
-$(function(){
- try {
-     // Checks if a device supports bluetooth API or not
-     var shape = tizen.systeminfo.getCapability("http://tizen.org/feature/screen.shape");
-    console.log("Shape = " + shape);
-     //alert(" Shape = " + shape);
- } catch (error) {
-    // alert("Error name: " + error.name + ", message: " + error.message);
-    console.log("Error name: " + error.name + ", message: " + error.message);
- }
-
-    if(shape=="circle"){
-       $('body').css('max-width', '100%');
-       $('body').css('max-height', '100%');
-       $('body').css('background-color', 'white');
-       $('body').css('margin-top', '20%');
-       $('body').css('margin-bottom', '20%');
-       $('body').css('margin-left', '20%');
-       $('body').css('margin-right', '20%');
-       }
-});
-(function (window){
-       function TestRunner() {
-               this.start = null;
-               this.ui = null;
-               this.submitResult = null;
-               this.report = function (result, message) {};
-               this.doTest = function () {};
-       }
-
-       TestRunner.prototype = (function () {
-               var index = -1;
-               var Tests = [];
-               var Sets =  {};
-               function newSummary() {
-                       return {"TOTAL": 0,
-                               "PASS" : 0,
-                               "FAIL" : 0,
-                               "BLOCK" : 0,
-                               "NOTRUN" : 0};
-               }
-               function newTestContext() {
-                       return {start_time: null,
-                               prev_uri: "",
-                               uri: "",
-                               sub_index: 0,
-                               onload_delay: 0
-                       };
-               }
-               function getParms () {
-                       var parms = {};
-                       var items = location.search.substring(1).split('&');
-                       for ( var i = 0, max = items.length; i < max; i++) {
-                               var pos = items[i].indexOf('=');
-                               if (pos > 0) {
-                                       var key = items[i].substring(0, pos);
-                                       var val = items[i].substring(pos + 1);
-                                       if (!parms[key]) {
-                                               var rawVal = decodeURI(val);
-                                               if (rawVal.indexOf(',') < 0)
-                                                       parms[key] = rawVal;
-                                               else
-                                                       parms[key] = rawVal.split(',');
-                                       }
-                               } else
-                                  parms[items[i]] = 1;
-                       }
-                       if (!parms.testsuite)
-                               parms.testsuite = 'tests.xml';
-                       return parms;
-               }
-               var parms = getParms();
-               var sum = newSummary();
-               var testContext =  newTestContext();
-               return { 
-                       constructor: TestRunner,
-                       options:  parms,
-                       getTestContext: function (field) {
-                               return testContext[field];
-                       },
-
-                       goNext: function () {
-                               if (Tests.length === 0) return false;
-                               if (index >= Tests.length) {
-                                       index = -1;
-                                       return false;
-                               }
-                               index++;
-                               return true;
-                       },
-       
-                       goPrev: function () {
-                               if (Tests.length === 0) return false;
-                               if (index < 0) {
-                                       index = Tests.length;
-                                       return false;
-                               }
-                               index--;
-                               return true;
-                       },
-
-                       runAll: function () {
-                               testContext = newTestContext();
-                               this.ui.updateView(VIEWFLAGS.add("batch"));
-                               this.ui.updateView(VIEWFLAGS.del("list"));
-                               this.testIndex(-1);     
-                               this.doTest();
-                       },
-       
-                       cleanTests: function () {
-                               Tests = [];
-                       },
-
-                       testIndex: function (ind) {
-                               if (typeof ind === "undefined")
-                                       return index;
-                               index = ind;
-                       },
-
-                       getTest: function (ind) {
-                               if (typeof ind === "undefined")
-                                       ind = index;
-                               return Tests[ind];
-                       },
-
-                       addTest: function (test) {
-                               if (test instanceof Array)
-                                       Tests = Tests.concat(test);
-                               else
-                                       Tests.push(test);
-                       },
-
-                       sumInit: function (num) {
-                               if (typeof num === "undefined")
-                                       num = Tests.length;
-                               sum.TOTAL = sum.NOTRUN = num;
-                               sum.PASS = sum.FAIL = sum.BLOCK = 0;
-                       },
-                       
-                       sumUpdate: function (oldRes, newRes, set) {
-                               if (oldRes !== null) {
-                                       sum[oldRes]--;
-                                       if (set !== null) Sets[set][oldRes]--;
-                               }
-                               if (newRes !== null) {
-                                       sum[newRes]++;
-                                       if (set != null) Sets[set][newRes]++;
-                               }
-                       },
-
-                       checkResult: function (oTestDoc) {
-                               var message = "";
-                               // Handle sub-index test
-                               if (testContext.sub_index > 0) {
-                                       var oRes = $(oTestDoc).find("table#results");
-                                       if (oRes.length == 0)
-                                               return false;
-                                       var ind = testContext.sub_index - 1;
-                                       var $n = $(oRes).find('tbody > tr').eq(ind);
-                                       if ($n.length == 0)
-                                               return false
-                                       var result = $n.children("td:eq(0)").text();
-                                       message = $n.children("td:eq(2)").text();
-                                       this.report(result.toUpperCase(), message);
-                                       return true;
-                               }
-
-                               var oPass = $(oTestDoc).find(".pass");
-                               var oFail = $(oTestDoc).find(".fail");
-                               // All tests pass
-                               if (oPass.length > 0 && oFail.length == 0) {
-                                       this.report('PASS', message);
-                                       return true;
-                               }
-                               // Handle failed tests
-                               if (oFail.length > 0) {
-                                       var oRes = $(oTestDoc).find("table#results");
-                                       $(oRes).find('tr.fail').each(function() {
-                                               message += " *" + $(this).children("td:eq(1)").text() + ": ";
-                                               message += $(this).children("td:eq(2)").text();
-                                       });
-                                       this.report('FAIL', message);
-                                       return true;
-                               }
-                               return false;
-                       },
-
-                       testInfo: function (ind) {
-                               var info = "";
-                               var tc = this.getTest();
-                               if (!tc) return info;
-                               info += "Test   : (" + (index + 1) + "/" + sum.TOTAL + ") ";
-                               info += tc.test_script_entry;
-                               info += "\nPurpose: " +  tc.purpose;
-                               if (tc.pre_condition)
-                                       info += "\nPrecondition: " + tc.pre_condition;
-                               if (tc.steps)
-                                       info += "\n" + tc.steps;
-                               return info;
-                       },
-
-                       getTestCaseUrl: function () {
-                               function getUriField(uri, param) {
-                                       var querys = uri.split("?")
-                                       if (querys.length <= 1)
-                                               return "";
-                                       uri = querys[1];
-                                       var start = uri.indexOf(param);
-                                       if (start == -1)
-                                               return "";
-                                       start += param.length + 1;
-                                       var end = uri.indexOf("&", start);
-                                       if (end == -1)
-                                               return uri.substring(start);
-                                       return uri.substring(start, end);
-                               }
-                               var tc = this.getTest();
-                               if (!tc) return null;
-                               var delay = tc.onload_delay;
-                               if (delay)
-                                       testContext.onload_delay = parseInt(delay) * 1000;
-                               else
-                                       testContext.onload_delay = 5000;
-
-                               var uri = tc.test_script_entry;
-                               if (typeof this.options.testprefix !== "undefined") {
-                                       var pos = uri.indexOf('http://');
-                                       if (pos !== 0)
-                                               uri = this.options.testprefix + uri
-                               }
-                               var val = getUriField(uri, "value");
-                               if (val && tc.execution_type == "auto" && VIEWFLAGS.has("batch")) { // Need sub index in TC
-                                       testContext.sub_index = parseInt(val);
-                                       testContext.uri = uri.split("?")[0];
-                                       if (testContext.uri == testContext.prev_uri)
-                                               return "";
-                               } else {
-                                       testContext.uri = uri;
-                                       testContext.sub_index = 0;
-                               }
-                               testContext.prev_uri = testContext.uri;
-                               testContext.start_time = new Date();
-                               return testContext.uri;
-                       },
-
-                       loadReady: function () {
-                               if (!VIEWFLAGS.has("batch"))
-                                       return;
-                               if (!this.ui.testComplete()){
-                                       if (testContext.onload_delay > 0){
-                                               var tval = 500;
-                                               var self = this;
-                                               setTimeout(function() {self.loadReady();}, tval);
-                                               testContext.onload_delay -= tval;
-                                               return
-                                       }
-                                       this.report("BLOCK", "Timeout");
-                               }
-                               this.doTest();
-                       },
-
-                       getTestSum: function (include_set) {
-                               var sumdata = "<section><h3>Total:" + sum.TOTAL
-                                               + " Pass:<span style='color:green;'>" + sum.PASS
-                                               + "</span> Fail:<span style='color:red;'>" + sum.FAIL
-                                               + "</span> Block:<span style='color:orange;'>" + sum.BLOCK
-                                               + "</span> NotRun:<span style='color:black;'>" + sum.NOTRUN
-                                               + "</span></h3></section>";
-                               if (VIEWFLAGS.has("batch")) {
-                                       var tc = this.getTest();
-                                       if (tc) sumdata += "<h4><span style='background-color: wheat'>(#" + index + ") " + tc.id + "</span></h4>";
-                               }
-
-                               if (include_set) {
-                                       sumdata += "<p><table id='browse'><tr><th>TestSet</th>";
-                                       sumdata += "<th>Total</th><th>Pass</th><th>Fail</th><th>Block</th></tr>";
-                                       $.each(Sets, function (key, val){
-                                               sumdata += "<tr><td>" + key+ "</td>";
-                                               sumdata += "<td style='color:black;'>" + val.TOTAL + "</td>";
-                                               sumdata += "<td style='color:green;'>" + val.PASS + "</td>";
-                                               sumdata += "<td style='color:red;'>" + val.FAIL + "</td>";
-                                               sumdata += "<td style='color:orange;'>" + val.BLOCK + "</td></tr>";
-                                       });
-                                       sumdata += "</table>";
-                               }
-                               return sumdata;
-                       },
-
-                       getBrowseInfo: function () {
-                               var failList = passList = blockList = notrunList = "";
-                               function createTestList(tc, color, ind) {
-                                       var mtag = (tc.execution_type === "manual") ? "(M)" : ""; 
-                                       return "<li>" + mtag + "<a rel='" + ind + "' href='' style ='color:" + color + ";'>" + tc.id + "</a>" + "</li>";
-                               }
-                               Sets = {};
-                               $.each(Tests, function (ind ,val) {
-                                       if (this.set === null)
-                                               this.set = "default";
-                                       if (typeof Sets[this.set] === "undefined")
-                                               Sets[this.set] = newSummary(); 
-                                       Sets[this.set][this.result]++;
-                                       Sets[this.set]["TOTAL"]++;
-                                       if (this.result == "FAIL")
-                                               failList += createTestList(this, "red", ind);
-                                       if (this.result == "PASS")
-                                               passList += createTestList(this, "green", ind);
-                                       if (this.result == "BLOCK")
-                                               blockList += createTestList(this, "orange", ind);
-                                       if (this.result == "NOTRUN")
-                                               notrunList += createTestList(this, "black", ind);
-                               });
-                               var data = "<html><head><style>ul li {padding-bottom:0.8em;font-size: 1.3em;}";
-                               data += "html{font-family:DejaVu Sans, Bitstream Vera Sans, Arial, Sans;}</style></head><body>";
-                               if (notrunList)
-                                       data += "<section><h3>Notruns</h3><ul>" + notrunList + "</ul></section>";
-                               if (failList)
-                                       data += "<section><h3 style='color: red;'>Fails</h3><ul>" + failList + "</ul></section>";
-                               if (blockList)
-                                       data += "<section><h3 style='color: orange;'>Blocks</h3><ul>" + blockList + "</ul></section>";
-                               if (passList)
-                                       data += "<section><h3 style='color: green'>Passes</h3><ul>" + passList + "</ul></section>";
-                               data += "</body></html>";
-                               return data;
-                       },
-
-                       TestCase: function () {
-                               return {
-                                       id: null,
-                                       test_script_entry: null,
-                                       execution_type: "manual",
-                                       result: "NOTRUN",
-                                       purpose: "",
-                                       set: null,
-                                       pre_condition: "",
-                                       onload_delay: 0,
-                                       steps: "",
-                                       data: null};
-                       }
-               };
-          }());
-       // Standalone test runner
-       var master_runner = new TestRunner();
-       master_runner.start = function (ui) {
-               function filter(xml, self) {
-                       var set_ind = 0;
-                       var manuals = [];
-                       $(xml).find("set").each(function () {
-                               var setname = $(this).attr("name");
-                               if (!setname)
-                                       setname = "set" + set_ind;
-                               $(this).find("testcase").each(function () {
-                                       var v = $(this).attr('execution_type');
-                                       if (self.options.execution_type && v != self.options.execution_type
-                                                       && $.inArray(v, self.options.execution_type) < 0) {
-                                               $(this).remove();
-                                               return;
-                                       }
-                                       v = $(this).attr('priority');
-                                       if (self.options.priority && v != self.options.priority
-                                                       && $.inArray(v, self.options.priority) < 0){
-                                               $(this).remove();
-                                               return;
-                                       }
-                                       var test = self.TestCase();
-                                       test.id = $(this).attr("id");
-                                       test.execution_type = $(this).attr("execution_type");
-                                       test.test_script_entry = $(this).find("test_script_entry").text();
-                                       test.purpose = $(this).attr("purpose");
-                                       test.pre_condition = $(this).find("pre_condition").text();
-                                       test.onload_delay = $(this).attr("onload_delay");
-                                       test.result = "NOTRUN";
-                                       test.set = setname;
-                                       test.data = this;
-                                       if (test.execution_type === "auto")
-                                               self.addTest(test);
-                                       else
-                                               manuals.push(test);
-                               });
-                               set_ind++;
-                       });
-                       self.addTest(manuals);
-               }
-
-               var self = this;
-               ui.bind(self);
-               $.get(self.options.testsuite, null, function (xml) {
-                       self.internal.xmldoc = xml;
-                       filter(xml, self);
-                       self.sumInit();
-                       setTimeout(function () {
-                               self.ui.browse();
-                               setTimeout(function () {
-                                       if (self.options.autorun)
-                                               self.runAll();
-                               }, 2000);
-                       }, 100);
-               }, "xml");
-       };
-
-       master_runner.doTest = function () {
-               var self = this, tc = null;
-               while (self.goNext()) {
-                       tc = self.getTest();
-                       if (!tc || tc.execution_type === "manual")
-                               break;
-                       self.ui.updateTestInfo(self.testInfo(), null, null);
-                       self.ui.runTest(self.getTestCaseUrl());
-                       return;
-               }
-               if (self.options.autorun) {
-                       self.submitResult();
-                       close_window();
-                       return;
-               }
-               this.ui.updateView(VIEWFLAGS.del("batch"));
-               if (!tc) {
-                       setTimeout(function () {self.ui.browse();}, 500);
-                       return;
-               }
-               this.ui.updateTest();   
-       };
-
-       master_runner.report = function (result, log) {
-               var tc = this.getTest();
-               if (!tc) return;
-               var oldresult = tc.result;
-               this.sumUpdate(oldresult, result, tc.set);
-               tc.result = result;
-               $(tc.data).find('result_info').remove();
-               $(tc.data).attr('result', result);
-               var doc = $.parseXML("<result_info><actual_result>" + result +
-                                  "</actual_result><start>" + this.getTestContext("start_time") +
-                                  "</start><end>" + new Date() + "</end><stdout>" +
-                                  escape_html(log) + "</stdout></result_info>");
-               $(tc.data).append(doc.documentElement);
-               if (VIEWFLAGS.has("batch")) result = null;
-               this.ui.updateTestInfo(null, this.getTestSum(false), result);
-       };
-
-       master_runner.submitResult = function () {
-               var xmldoc = this.internal.xmldoc;
-               var contents = (new XMLSerializer()).serializeToString(xmldoc);
-               if (window.opener) window.opener.postMessage(contents, "*");
-       };
-
-       master_runner.internal = {xmldoc: null};
-
-       // Controlled test runner
-       var slave_runner = new TestRunner();
-       slave_runner.start = function (ui) {
-               function sync_session_id() {
-                       $.get(SERVER + "/init_session_id?session_id="
-                                         + self.internal.session_id);
-               }
-               var self = this;
-               self.internal.session_id = Math.round(Math.random() * 10000);
-               sync_session_id();
-               var next_step = self.internal.get_json("ask_next_step");
-               if (!next_step || next_step.step != "continue")
-                        return false;
-               ui.bind(self);
-               var f = function () {
-                       var p = self.internal.get_json("check_execution_progress");
-                       if (p) self.sumInit(parseInt(p.total));
-                       self.doTest();
-               };
-               self.ui.updateView(VIEWFLAGS.add("batch"));
-               self.ui.updateView(VIEWFLAGS.del("list"));
-               setTimeout(f, 1000);
-               return true;
-       };
-
-       slave_runner.doTest = function () {
-               var self = this;
-               if (self.internal.stage > 0) {
-                       self.ui.updateView(VIEWFLAGS.del("batch"));
-                       self.goNext();
-                       self.ui.updateTest();
-                       return;
-               }
-               var next_step = self.internal.get_json("ask_next_step");
-               if (next_step && next_step.step == "continue") {
-                       var task = self.internal.get_json("auto_test_task");
-                       if (task === null) {
-                               print_error("ask_test_task", "Fail get task");
-                       } else if (task.invalid === 0) {
-                               print_error("ask_test_task", "Invalid session");
-                       } else if (task.stop === 0) {
-                               print_error("ask_test_task", "close window");
-                       } else if (task.none !== 0) { //handle auto test
-                               var test = self.TestCase();
-                               test.id = task.case_id;
-                               test.onload_delay = task.onload_delay;
-                               test.test_script_entry = task.entry;
-                               test.execution_type = "auto";
-                               test.purpose = task.purpose;
-                               test.pre_condition = task.pre_condition;
-                               self.addTest(test);
-                               self.goNext();
-                               self.ui.updateTestInfo(self.testInfo(), null, null);
-                               self.ui.runTest(self.getTestCaseUrl());
-                               return;
-                       } else {  //handle manual test
-                               self.ui.updateView(VIEWFLAGS.del("batch"));
-                               self.internal.stage = 1;
-                               var mtask = self.internal.get_json("manual_cases");
-                               if (mtask && mtask.none != 0) {
-                                       self.cleanTests();
-                                       for (var i = 0, max = mtask.length; i < max; i++) {
-                                               var test = self.TestCase();
-                                               test.id = mtask[i].case_id;
-                                               test.test_script_entry = mtask[i].entry;
-                                               test.purpose = mtask[i].purpose;
-                                               test.pre_condition = mtask[i].pre_condition;
-                                               test.result = "NOTRUN";
-                                               test.execution_type = "manual";
-                                               test.index = i;
-                                               var steps = "";
-                                               $(mtask[i].steps).each(function () {
-                                                       steps += "Step-" + this.order + "\t: " + this.step_desc + "\n";
-                                                       steps += "Expect\t: " + this.expected + "\n";
-                                               });
-                                               test.steps = steps;
-                                               self.addTest(test);
-                                       }
-                                       self.ui.updateTest(-1);
-                                       self.sumInit();
-                                       self.ui.browse();
-                               } else
-                                       close_window();
-                               return;
-                       }
-               }
-               close_window();
-       };
-
-       slave_runner.report = function(result, log) {
-               var tc = this.getTest();
-               var oldresult;
-               if (this.internal.stage > 0) {
-                       this.internal.post_json("commit_manual_result",
-                               {"case_id": tc.id, "result": result});
-                       oldresult = tc.result
-                       tc.result = result;
-               } else {
-                       this.internal.post_json("commit_result",
-                               { "case_id" : tc.id,
-                                 "result" : result,
-                                 "msg" : "[Message]" + log,
-                                 "session_id" : this.internal.session_id});
-                       oldresult = "NOTRUN";
-               }
-               this.sumUpdate(oldresult, result, null);
-               if (VIEWFLAGS.has("batch")) result = null;
-               this.ui.updateTestInfo(null, this.getTestSum(false), result);
-       };
-
-       slave_runner.submitResult = function () {
-               $.get(SERVER + "/generate_xml");
-       };
-
-       slave_runner.internal = {
-               session_id: null,
-               stage: 0,
-               get_json: function (name) {
-                       var jsondata = null;
-                       $.getJSON(SERVER + "/" + name + "?session_id="
-                                + this.session_id, function(data) {
-                                        jsondata = data;});
-                       return jsondata; },
-               post_json: function (name, d) {
-                  $.post(SERVER + "/" + name, d, null, "json");
-               }
-       };
-
-       var i_ui = (function () {
-               var testinfo = $("#testinfo").get(0);
-               var frmTest = $("#frmTest").get(0);
-               var textTest  = $("#textTest").get(0);
-               var btnPass = $("#btnPass").get(0);
-               var btnFail = $("#btnFail").get(0);
-               var btnBlock = $("#btnBlock").get(0);
-               var btnDone = $("#btnDone").get(0);
-               var btnNext = $("#btnNext").get(0);
-               var btnPrev = $("#btnPrev").get(0);
-               var btnRun      = $("#btnRun").get(0);
-               var divSum = $("#divSum").get(0);
-               var btnList = $("#btnList").get(0);
-               var runner = null;
-               var listmode = null;
-               var nextTest = function () {
-                       runner.goNext();
-                       selectTest();
-               };
-
-               var prevTest = function() {
-                       runner.goPrev();
-                       selectTest();
-               };
-
-               var selectResult = function() {
-                       runner.report(this.value, "");
-               };
-
-               var selectTest = function () {
-                       frmTest.src = "";
-                       var tc = runner.getTest();
-                       if (!tc) {
-                               if (runner.testIndex() === -1)
-                                       textTest.value = "---Begin---";
-                               else
-                                       textTest.value = "---End---";
-                               changeColor("NOTRUN");
-                               return;
-                       }
-                       testinfo.value = runner.testInfo();
-                       $(divSum).html(runner.getTestSum(false));
-                       textTest.value = ((tc.execution_type === "manual") ? "(M)" : "") + tc.id;
-                       changeColor(tc.result);
-               };
-
-               function changeColor(result) {
-                       if (result === "PASS")
-                               $(textTest).css("backgroundColor", "lightgreen");
-                       else if (result === "FAIL")
-                               $(textTest).css("backgroundColor", "tomato");
-                       else if (result === "BLOCK")
-                               $(textTest).css("backgroundColor", "yellow");
-                       else
-                               $(textTest).css("backgroundColor", "white");
-               }
-
-               return {
-                       bind: function (r) {
-                               var self = this;
-                               r.ui = self;
-                               runner = r;
-                               $(btnPass).on("click", selectResult);
-                               $(btnFail).on("click", selectResult);
-                               $(btnBlock).on("click", selectResult);
-                               $(btnNext).on("click", nextTest);
-                               $(btnPrev).on("click", prevTest);
-                               $(btnRun).on("click",  function () {
-                                       if (VIEWFLAGS.has("list")) {
-                                               runner.runAll();
-                                       } else 
-                                               self.runTest(runner.getTestCaseUrl());
-                               });
-                               $(frmTest).on("load",  function () {runner.loadReady();});
-                               $(btnDone).on("click", function () {
-                                       runner.submitResult();
-                                       close_window();
-                               });
-                               $(btnList).on("click", function () {
-                                       frmTest.src = "";
-                                       //self.updateTest(-1);
-                                       setTimeout(function () {self.browse();}, 300);
-                               });
-                               frmTest.height = $(window).height();
-                       },
-               
-                       browse: function () {
-                               var tdoc = frmTest.contentWindow.document;
-                               tdoc.open("text/html", "replace");
-                               tdoc.writeln(runner.getBrowseInfo());
-                               var self = this;
-                               $(tdoc).find("section ul li>a").on("click", function (e) {
-                                       var ind = parseInt($(this).attr("rel"));
-                                       self.updateView(VIEWFLAGS.del("list")); 
-                                       self.updateTest(ind);
-                                       window.scrollTo(0, 0);
-                                       e.preventDefault();
-                               });
-                               $(divSum).html(runner.getTestSum(true));
-                               self.updateView(VIEWFLAGS.add("list")); 
-                       },
-       
-                       updateTest: function (ind) {
-                               if (typeof ind !== "undefined") runner.testIndex(ind);
-                               selectTest();
-                       },
-
-                       updateView: function (flags) {
-                               if (flags & VIEWFLAGS.flags.list) {
-                                       $(".listmode").show();
-                                       $(".singlemode").hide();
-                               } else {
-                                       $(".listmode").hide();
-                                       $(".singlemode").show();
-                               }
-                               if (flags & VIEWFLAGS.flags.batch)
-                                       $(".batchmode").hide();
-                               else
-                                       $(".batchmode").show();
-                       },
-
-                       testComplete: function () {
-                               return runner.checkResult(frmTest.contentWindow.document);
-                       },
-                       runTest: function (uri) {
-                               if (uri === null) return;
-                               if (uri)
-                                       frmTest.src = uri;
-                               else
-                                       runner.loadReady();
-                               
-                       },
-
-                       updateTestInfo: function (info, sum, result) {
-                               if (info !== null)
-                                       testinfo.value = info;
-                               if (sum !== null)
-                                       $(divSum).html(sum);
-                               if (result !== null)
-                                       changeColor(result);
-                       },
-          };
-       } ());
-
-       function escape_html(s) {
-               return s.replace(/\&/g, "&amp;").replace(/</g, "&lt;").replace(/"/g,
-                       "&quot;").replace(/'/g, "&#39;");
-       }
-
-       function print_error(command, message) {
-               console.warn("Command -" + command + ": " + message);
-       }
-
-       function close_window() {
-               setTimeout("window.open('','_self','');window.close()", 1000);
-       }
-
-       function pre_init() {
-               var runner_ok = false;
-               $.get(SERVER + "/check_server", function () {
-                       runner_ok = slave_runner.start(i_ui);
-               });
-               if (!runner_ok)
-                       master_runner.start(i_ui);
-       }
-       var SERVER = "http://127.0.0.1:"+STUB_PORT;
-       var VIEWFLAGS = { val: 0,
-               flags: {list: 1, batch: 2},
-               add: function (f) { this.val |= this.flags[f]; return this.val},
-               del: function (f) { this.val &= ~this.flags[f]; return this.val},
-               has: function (f) { return this.val & this.flags[f];},
-       };
-       $.ajaxSetup({ async: false});
-       $(window).on("ready", pre_init);
-})(window);
diff --git a/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/plugin/web_templates/{TESTSUITE_NAME}.spec b/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/plugin/web_templates/{TESTSUITE_NAME}.spec
deleted file mode 100755 (executable)
index 9da7f3a..0000000
+++ /dev/null
@@ -1,22 +0,0 @@
-name=$(basename $(pwd))
-main_version="2.4"
-release=""
-version="$main_version"
-appname=$(echo $name|sed 's/-/_/g')
-
-# set value "1" if this suite need to sign,otherwise set "0" #
-sign="1"
-
-# set value "1" if this suite need to keep src_file,otherwise set "0" #
-src_file="0"
-
-# specified files to be kept in whitelist #
-whitelist="
-inst.sh
-tests.xml
-tests.full.xml
-COPYING
-LICENSE.Apache-2.0
-LICENSE.CC-BY-3.0
-NOTICE
-mediasrc"
diff --git a/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/sdb/sdb-32 b/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/sdb/sdb-32
deleted file mode 100755 (executable)
index a3f6c27..0000000
Binary files a/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/sdb/sdb-32 and /dev/null differ
diff --git a/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/sdb/sdb-32.exe b/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/sdb/sdb-32.exe
deleted file mode 100755 (executable)
index b522f56..0000000
Binary files a/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/sdb/sdb-32.exe and /dev/null differ
diff --git a/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/sdb/sdb-64 b/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/sdb/sdb-64
deleted file mode 100755 (executable)
index 5ae10e3..0000000
Binary files a/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/sdb/sdb-64 and /dev/null differ
diff --git a/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/sdb/sdb-64.exe b/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/sdb/sdb-64.exe
deleted file mode 100755 (executable)
index b522f56..0000000
Binary files a/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/sdb/sdb-64.exe and /dev/null differ
diff --git a/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/shell/CONFIG b/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/shell/CONFIG
deleted file mode 100755 (executable)
index 3ec9518..0000000
+++ /dev/null
@@ -1,26 +0,0 @@
-[TCTSHELL]
-WRT_LAUNCHR_CMD = WRTLauncher
-TCT_SHELL_HOME  = /opt/tools/shell/
-TCT_PLAN_FOLDER = /opt/tools/shell/plan/
-
-[DISTRIBUTE_MODE]
-DEVICE_EXCEPTIONS =
-#Devices to ignore for distribute mode.
-#example: 
-#       example_device1
-#      example_device2
-       DEVICE1
-       DEVICE2
-#      0000d81400006200
-
-[Device]
-DEVICE_TMP_FOLDER = /tmp/
-DEVICE_TESTS_FILE = /opt/usr/media/tct/opt/%s/tests.xml
-DEVICE_CAPABILITY_PATH = /opt/usr/media/Documents/tct/capability.xml
-DEVICE_BUILD_INFO_PATH = /opt/usr/media/Documents/tct/buildinfo.xml
-DEVICE_DEFAULT_CONF_PATH = /opt/usr/media/tct/opt/tct-testconfig/tct-testconfig.ini
-DEVICE_DEFAULT_ISON_CONF_PATH = /opt/usr/media/tct/preconfigure.json
-DEVICE_PORT_JSON_CONF_PATH = /opt/usr/media/tct/portconfigure.json
-DEVICE_PRECONFIGURE_FILE_PATH = /opt/usr/media/Documents/tct/pre_configure.conf
-
-
diff --git a/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/shell/LICENSE b/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/shell/LICENSE
deleted file mode 100755 (executable)
index 6d45519..0000000
+++ /dev/null
@@ -1,340 +0,0 @@
-                   GNU GENERAL PUBLIC LICENSE
-                      Version 2, June 1991
-
- Copyright (C) 1989, 1991 Free Software Foundation, Inc.
-                       51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
-                           Preamble
-
-  The licenses for most software are designed to take away your
-freedom to share and change it.  By contrast, the GNU General Public
-License is intended to guarantee your freedom to share and change free
-software--to make sure the software is free for all its users.  This
-General Public License applies to most of the Free Software
-Foundation's software and to any other program whose authors commit to
-using it.  (Some other Free Software Foundation software is covered by
-the GNU Library General Public License instead.)  You can apply it to
-your programs, too.
-
-  When we speak of free software, we are referring to freedom, not
-price.  Our General Public Licenses are designed to make sure that you
-have the freedom to distribute copies of free software (and charge for
-this service if you wish), that you receive source code or can get it
-if you want it, that you can change the software or use pieces of it
-in new free programs; and that you know you can do these things.
-
-  To protect your rights, we need to make restrictions that forbid
-anyone to deny you these rights or to ask you to surrender the rights.
-These restrictions translate to certain responsibilities for you if you
-distribute copies of the software, or if you modify it.
-
-  For example, if you distribute copies of such a program, whether
-gratis or for a fee, you must give the recipients all the rights that
-you have.  You must make sure that they, too, receive or can get the
-source code.  And you must show them these terms so they know their
-rights.
-
-  We protect your rights with two steps: (1) copyright the software, and
-(2) offer you this license which gives you legal permission to copy,
-distribute and/or modify the software.
-
-  Also, for each author's protection and ours, we want to make certain
-that everyone understands that there is no warranty for this free
-software.  If the software is modified by someone else and passed on, we
-want its recipients to know that what they have is not the original, so
-that any problems introduced by others will not reflect on the original
-authors' reputations.
-
-  Finally, any free program is threatened constantly by software
-patents.  We wish to avoid the danger that redistributors of a free
-program will individually obtain patent licenses, in effect making the
-program proprietary.  To prevent this, we have made it clear that any
-patent must be licensed for everyone's free use or not licensed at all.
-
-  The precise terms and conditions for copying, distribution and
-modification follow.
-
-                   GNU GENERAL PUBLIC LICENSE
-   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
-
-  0. This License applies to any program or other work which contains
-a notice placed by the copyright holder saying it may be distributed
-under the terms of this General Public License.  The "Program", below,
-refers to any such program or work, and a "work based on the Program"
-means either the Program or any derivative work under copyright law:
-that is to say, a work containing the Program or a portion of it,
-either verbatim or with modifications and/or translated into another
-language.  (Hereinafter, translation is included without limitation in
-the term "modification".)  Each licensee is addressed as "you".
-
-Activities other than copying, distribution and modification are not
-covered by this License; they are outside its scope.  The act of
-running the Program is not restricted, and the output from the Program
-is covered only if its contents constitute a work based on the
-Program (independent of having been made by running the Program).
-Whether that is true depends on what the Program does.
-
-  1. You may copy and distribute verbatim copies of the Program's
-source code as you receive it, in any medium, provided that you
-conspicuously and appropriately publish on each copy an appropriate
-copyright notice and disclaimer of warranty; keep intact all the
-notices that refer to this License and to the absence of any warranty;
-and give any other recipients of the Program a copy of this License
-along with the Program.
-
-You may charge a fee for the physical act of transferring a copy, and
-you may at your option offer warranty protection in exchange for a fee.
-
-  2. You may modify your copy or copies of the Program or any portion
-of it, thus forming a work based on the Program, and copy and
-distribute such modifications or work under the terms of Section 1
-above, provided that you also meet all of these conditions:
-
-    a) You must cause the modified files to carry prominent notices
-    stating that you changed the files and the date of any change.
-
-    b) You must cause any work that you distribute or publish, that in
-    whole or in part contains or is derived from the Program or any
-    part thereof, to be licensed as a whole at no charge to all third
-    parties under the terms of this License.
-
-    c) If the modified program normally reads commands interactively
-    when run, you must cause it, when started running for such
-    interactive use in the most ordinary way, to print or display an
-    announcement including an appropriate copyright notice and a
-    notice that there is no warranty (or else, saying that you provide
-    a warranty) and that users may redistribute the program under
-    these conditions, and telling the user how to view a copy of this
-    License.  (Exception: if the Program itself is interactive but
-    does not normally print such an announcement, your work based on
-    the Program is not required to print an announcement.)
-
-These requirements apply to the modified work as a whole.  If
-identifiable sections of that work are not derived from the Program,
-and can be reasonably considered independent and separate works in
-themselves, then this License, and its terms, do not apply to those
-sections when you distribute them as separate works.  But when you
-distribute the same sections as part of a whole which is a work based
-on the Program, the distribution of the whole must be on the terms of
-this License, whose permissions for other licensees extend to the
-entire whole, and thus to each and every part regardless of who wrote it.
-
-Thus, it is not the intent of this section to claim rights or contest
-your rights to work written entirely by you; rather, the intent is to
-exercise the right to control the distribution of derivative or
-collective works based on the Program.
-
-In addition, mere aggregation of another work not based on the Program
-with the Program (or with a work based on the Program) on a volume of
-a storage or distribution medium does not bring the other work under
-the scope of this License.
-
-  3. You may copy and distribute the Program (or a work based on it,
-under Section 2) in object code or executable form under the terms of
-Sections 1 and 2 above provided that you also do one of the following:
-
-    a) Accompany it with the complete corresponding machine-readable
-    source code, which must be distributed under the terms of Sections
-    1 and 2 above on a medium customarily used for software interchange; or,
-
-    b) Accompany it with a written offer, valid for at least three
-    years, to give any third party, for a charge no more than your
-    cost of physically performing source distribution, a complete
-    machine-readable copy of the corresponding source code, to be
-    distributed under the terms of Sections 1 and 2 above on a medium
-    customarily used for software interchange; or,
-
-    c) Accompany it with the information you received as to the offer
-    to distribute corresponding source code.  (This alternative is
-    allowed only for noncommercial distribution and only if you
-    received the program in object code or executable form with such
-    an offer, in accord with Subsection b above.)
-
-The source code for a work means the preferred form of the work for
-making modifications to it.  For an executable work, complete source
-code means all the source code for all modules it contains, plus any
-associated interface definition files, plus the scripts used to
-control compilation and installation of the executable.  However, as a
-special exception, the source code distributed need not include
-anything that is normally distributed (in either source or binary
-form) with the major components (compiler, kernel, and so on) of the
-operating system on which the executable runs, unless that component
-itself accompanies the executable.
-
-If distribution of executable or object code is made by offering
-access to copy from a designated place, then offering equivalent
-access to copy the source code from the same place counts as
-distribution of the source code, even though third parties are not
-compelled to copy the source along with the object code.
-
-  4. You may not copy, modify, sublicense, or distribute the Program
-except as expressly provided under this License.  Any attempt
-otherwise to copy, modify, sublicense or distribute the Program is
-void, and will automatically terminate your rights under this License.
-However, parties who have received copies, or rights, from you under
-this License will not have their licenses terminated so long as such
-parties remain in full compliance.
-
-  5. You are not required to accept this License, since you have not
-signed it.  However, nothing else grants you permission to modify or
-distribute the Program or its derivative works.  These actions are
-prohibited by law if you do not accept this License.  Therefore, by
-modifying or distributing the Program (or any work based on the
-Program), you indicate your acceptance of this License to do so, and
-all its terms and conditions for copying, distributing or modifying
-the Program or works based on it.
-
-  6. Each time you redistribute the Program (or any work based on the
-Program), the recipient automatically receives a license from the
-original licensor to copy, distribute or modify the Program subject to
-these terms and conditions.  You may not impose any further
-restrictions on the recipients' exercise of the rights granted herein.
-You are not responsible for enforcing compliance by third parties to
-this License.
-
-  7. If, as a consequence of a court judgment or allegation of patent
-infringement or for any other reason (not limited to patent issues),
-conditions are imposed on you (whether by court order, agreement or
-otherwise) that contradict the conditions of this License, they do not
-excuse you from the conditions of this License.  If you cannot
-distribute so as to satisfy simultaneously your obligations under this
-License and any other pertinent obligations, then as a consequence you
-may not distribute the Program at all.  For example, if a patent
-license would not permit royalty-free redistribution of the Program by
-all those who receive copies directly or indirectly through you, then
-the only way you could satisfy both it and this License would be to
-refrain entirely from distribution of the Program.
-
-If any portion of this section is held invalid or unenforceable under
-any particular circumstance, the balance of the section is intended to
-apply and the section as a whole is intended to apply in other
-circumstances.
-
-It is not the purpose of this section to induce you to infringe any
-patents or other property right claims or to contest validity of any
-such claims; this section has the sole purpose of protecting the
-integrity of the free software distribution system, which is
-implemented by public license practices.  Many people have made
-generous contributions to the wide range of software distributed
-through that system in reliance on consistent application of that
-system; it is up to the author/donor to decide if he or she is willing
-to distribute software through any other system and a licensee cannot
-impose that choice.
-
-This section is intended to make thoroughly clear what is believed to
-be a consequence of the rest of this License.
-
-  8. If the distribution and/or use of the Program is restricted in
-certain countries either by patents or by copyrighted interfaces, the
-original copyright holder who places the Program under this License
-may add an explicit geographical distribution limitation excluding
-those countries, so that distribution is permitted only in or among
-countries not thus excluded.  In such case, this License incorporates
-the limitation as if written in the body of this License.
-
-  9. The Free Software Foundation may publish revised and/or new versions
-of the General Public License from time to time.  Such new versions will
-be similar in spirit to the present version, but may differ in detail to
-address new problems or concerns.
-
-Each version is given a distinguishing version number.  If the Program
-specifies a version number of this License which applies to it and "any
-later version", you have the option of following the terms and conditions
-either of that version or of any later version published by the Free
-Software Foundation.  If the Program does not specify a version number of
-this License, you may choose any version ever published by the Free Software
-Foundation.
-
-  10. If you wish to incorporate parts of the Program into other free
-programs whose distribution conditions are different, write to the author
-to ask for permission.  For software which is copyrighted by the Free
-Software Foundation, write to the Free Software Foundation; we sometimes
-make exceptions for this.  Our decision will be guided by the two goals
-of preserving the free status of all derivatives of our free software and
-of promoting the sharing and reuse of software generally.
-
-                           NO WARRANTY
-
-  11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
-FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW.  EXCEPT WHEN
-OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
-PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
-OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
-MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.  THE ENTIRE RISK AS
-TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.  SHOULD THE
-PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
-REPAIR OR CORRECTION.
-
-  12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
-WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
-REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
-INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
-OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
-TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
-YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
-PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
-POSSIBILITY OF SUCH DAMAGES.
-
-                    END OF TERMS AND CONDITIONS
-
-           How to Apply These Terms to Your New Programs
-
-  If you develop a new program, and you want it to be of the greatest
-possible use to the public, the best way to achieve this is to make it
-free software which everyone can redistribute and change under these terms.
-
-  To do so, attach the following notices to the program.  It is safest
-to attach them to the start of each source file to most effectively
-convey the exclusion of warranty; and each file should have at least
-the "copyright" line and a pointer to where the full notice is found.
-
-    <one line to give the program's name and a brief idea of what it does.>
-    Copyright (C) <year>  <name of author>
-
-    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 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License
-    along with this program; if not, write to the Free Software
-    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
-
-
-Also add information on how to contact you by electronic and paper mail.
-
-If the program is interactive, make it output a short notice like this
-when it starts in an interactive mode:
-
-    Gnomovision version 69, Copyright (C) year name of author
-    Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
-    This is free software, and you are welcome to redistribute it
-    under certain conditions; type `show c' for details.
-
-The hypothetical commands `show w' and `show c' should show the appropriate
-parts of the General Public License.  Of course, the commands you use may
-be called something other than `show w' and `show c'; they could even be
-mouse-clicks or menu items--whatever suits your program.
-
-You should also get your employer (if you work as a programmer) or your
-school, if any, to sign a "copyright disclaimer" for the program, if
-necessary.  Here is a sample; alter the names:
-
-  Yoyodyne, Inc., hereby disclaims all copyright interest in the program
-  `Gnomovision' (which makes passes at compilers) written by James Hacker.
-
-  <signature of Ty Coon>, 1 April 1989
-  Ty Coon, President of Vice
-
-This General Public License does not permit incorporating your program into
-proprietary programs.  If your program is a subroutine library, you may
-consider it more useful to permit linking proprietary applications with the
-library.  If this is what you want to do, use the GNU Library General
-Public License instead of this License.
diff --git a/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/shell/README b/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/shell/README
deleted file mode 100755 (executable)
index e845566..0000000
+++ /dev/null
@@ -1 +0,0 @@
-README
diff --git a/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/shell/VERSION b/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/shell/VERSION
deleted file mode 100755 (executable)
index 9a77768..0000000
+++ /dev/null
@@ -1,6 +0,0 @@
-[public_version]
-version=TCT_2.4
-[internal_version]
-version=TCT_2.4
-[public_shell_version]
-version=TCTSHELL_3.1.0-20160418
diff --git a/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/shell/debian/changelog b/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/shell/debian/changelog
deleted file mode 100755 (executable)
index 2d20c21..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-tct-shell (1.0.16) unstable; urgency=low
-
-  * Packaged for Ubuntu
-
- -- Ed Bartosh <eduard.bartosh@intel.com>  Mon, 06 May 2013 14:37:15 +0300
diff --git a/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/shell/debian/compat b/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/shell/debian/compat
deleted file mode 100755 (executable)
index 45a4fb7..0000000
+++ /dev/null
@@ -1 +0,0 @@
-8
diff --git a/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/shell/debian/control b/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/shell/debian/control
deleted file mode 100755 (executable)
index 7f37172..0000000
+++ /dev/null
@@ -1,13 +0,0 @@
-Source: tct-shell
-Section: utils
-Priority: standard
-Maintainer: Lei Yang <lei.a.yang@intel.com>
-Build-Depends: debhelper (>= 8.0.0), python-setuptools
-Standards-Version: 3.9.4
-Package: tct-shell
-Architecture: all
-Depends: ${shlibs:Depends}, ${misc:Depends}, ${python:Depends}
-Description: Console tool for Tizen Compliance Test
- This tool provides an alternative way to execute TCT with testkit-lite
- when testkit-manager is not available
diff --git a/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/shell/debian/copyright b/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/shell/debian/copyright
deleted file mode 100755 (executable)
index 1af0f16..0000000
+++ /dev/null
@@ -1,26 +0,0 @@
-Format: http://dep.debian.net/deps/dep5
-Source: https://github.com/testkit/testkit-manager
-
-Files: *
-Copyright: 2012-2013 Intel Corp. 
-License: GPL-2.0
-
-Files: debian/*
-Copyright: 2012-2013 Intel Corp.
-License: GPL-2.0
-
-License: GPL-2.0
- 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 of the License
- .
- This package is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- GNU General Public License for more details.
- .
- You should have received a copy of the GNU General Public License
- along with this program. If not, see <http://www.gnu.org/licenses/>.
- .
- On Debian systems, the complete text of the GNU General
- Public License version 3 can be found in "/usr/share/common-licenses/GPL-3".
diff --git a/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/shell/debian/docs b/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/shell/debian/docs
deleted file mode 100755 (executable)
index 8ffb463..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-README
-CONFIG
diff --git a/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/shell/debian/files b/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/shell/debian/files
deleted file mode 100755 (executable)
index 7441a9c..0000000
+++ /dev/null
@@ -1 +0,0 @@
-tct-shell_1.0.16_all.deb utils standard
diff --git a/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/shell/debian/postinst b/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/shell/debian/postinst
deleted file mode 100755 (executable)
index cb17476..0000000
+++ /dev/null
@@ -1,6 +0,0 @@
-#!/bin/sh
-
-# Set permissions
-chmod -R ugo+rwx /opt/tools/shell
-
-#DEBHELPER#
diff --git a/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/shell/debian/rules b/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/shell/debian/rules
deleted file mode 100755 (executable)
index 2d33f6a..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-#!/usr/bin/make -f
-
-%:
-       dh $@
diff --git a/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/shell/packaging/Makefile b/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/shell/packaging/Makefile
deleted file mode 100755 (executable)
index f0ec281..0000000
+++ /dev/null
@@ -1,20 +0,0 @@
-PKG_NAME := tct-shell
-SPECFILE = $(addsuffix .spec, $(PKG_NAME))
-PKG_VERSION := $(shell grep '^Version: ' $(SPECFILE)|awk '{print $$2}')
-
-TARBALL := $(PKG_NAME)_$(PKG_VERSION).tar.gz
-
-dsc: tarball
-       $(eval MD5=$(shell md5sum $(TARBALL) | sed "s/  / $(shell stat -c '%s' $(TARBALL)) /"))
-       @sed  -i 's/^Version:.*/Version: $(PKG_VERSION)/' $(PKG_NAME).dsc
-       @sed  -i 's/ [a-f0-9]\+ [0-9]\+ $(PKG_NAME).*tar.*/ $(MD5)/' $(PKG_NAME).dsc
-
-tarball:
-       @cd "$$(git rev-parse --show-toplevel)" \
-               && git archive --prefix $(PKG_NAME)-$(PKG_VERSION)/ HEAD \
-               | gzip > "$(CURDIR)/$(TARBALL)"
-
-clean:
-       @rm -f $(PKG_NAME)*.tar.gz
-
-all: clean tarball dsc
diff --git a/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/shell/packaging/tct-shell.dsc b/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/shell/packaging/tct-shell.dsc
deleted file mode 100755 (executable)
index b57a386..0000000
+++ /dev/null
@@ -1,11 +0,0 @@
-Source: tct-shell
-Section: utils
-Priority: standard
-Maintainer: Shaofeng <shaofeng.tang@intel.com>
-Build-Depends: debhelper (>= 8.0.0), python-setuptools, python-support, tree
-Standards-Version: 3.9.2
-Homepage: https://github.com/testkit/
-Version: 1.0.1
-Files:
- f64f26693160cf59cdae21e8961cf986 15593 tct-shell_1.0.1.tar.gz
-
diff --git a/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/shell/packaging/tct-shell.spec b/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/shell/packaging/tct-shell.spec
deleted file mode 100755 (executable)
index 6aa483f..0000000
+++ /dev/null
@@ -1,49 +0,0 @@
-Summary: TCT-Shell
-Name: tct-shell
-Version: 1.0.15
-Release: 1
-License: GPLv2
-Group: Applications/System
-Source: %name-%version.tar.gz
-BuildRoot: %_tmppath/%name-%version-buildroot
-Requires: python
-
-
-%description
-TCT-Shell is a wrapper pf testkit-lite. provide an alternative way to execute TCT with testkit-lite when testkit-manager is not available
-Provide the following functions:
-1. List available test packages. 
-2. Install/remove test packages on target device according to user's option 
-3. Trigger testing in 3 ways: through test plan, through package, rerun failed test cases. 
-4. Show test result summary in visual way.
-
-%prep
-%setup -q
-
-%build
-./autogen
-./configure
-make
-
-%install
-[ "\$RPM_BUILD_ROOT" != "/" ] && rm -rf "\$RPM_BUILD_ROOT"
-make install DESTDIR=$RPM_BUILD_ROOT
-
-%clean
-
-%post
-# Set permissions
-chmod ugo+rwx /opt/tools/shell
-
-%files
-/usr/lib/python2.7/dist-packages/tctshell/*
-/opt/tools/shell
-/opt/tools/shell/plan
-/opt/tools/shell/style
-/opt/tools/tct-shell
-/opt/tools/tct-plan-generator
-
-%post
-chmod -R 777 /opt/tools/shell
-
-%changelog
diff --git a/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/shell/plan/CSharp_Full_mobile_3.0.xml b/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/shell/plan/CSharp_Full_mobile_3.0.xml
deleted file mode 100755 (executable)
index 7f7e69f..0000000
+++ /dev/null
@@ -1,245 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>\r
-<ns3:testplan xmlns:ns3="http://www.example.org/plan/" xmlns="" name="CSharp_Full_mobile_3.0" profile="mobile">\r
-  <execute_type>Auto</execute_type>\r
-  <suite name="Tizen.Applications.Manual.Tests" category="C# Device APIs">\r
-    <auto_tcn>0</auto_tcn>\r
-    <manual_tcn>24</manual_tcn>\r
-    <total_tcn>24</total_tcn>\r
-    <pkg_name>mobile/Tizen.Applications.Manual.Tests-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="Tizen.Applications.Tests" category="C# Device APIs">\r
-    <auto_tcn>129</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>129</total_tcn>\r
-    <pkg_name>mobile/Tizen.Applications.Tests-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="Tizen.Badge.Tests" category="C# Device APIs">\r
-    <auto_tcn>21</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>21</total_tcn>\r
-    <pkg_name>mobile/Tizen.Badge.Tests-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="Tizen.Bluetooth.Manual.Tests" category="C# Device APIs">\r
-    <auto_tcn>0</auto_tcn>\r
-    <manual_tcn>120</manual_tcn>\r
-    <total_tcn>120</total_tcn>\r
-    <pkg_name>mobile/Tizen.Bluetooth.Manual.Tests-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="Tizen.Bluetooth.Tests" category="C# Device APIs">\r
-    <auto_tcn>120</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>120</total_tcn>\r
-    <pkg_name>mobile/Tizen.Bluetooth.Tests-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="Tizen.Device.Manual.Tests" category="C# Device APIs">\r
-    <auto_tcn>0</auto_tcn>\r
-    <manual_tcn>16</manual_tcn>\r
-    <total_tcn>16</total_tcn>\r
-    <pkg_name>mobile/Tizen.Device.Manual.Tests-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="Tizen.Device.Tests" category="C# Device APIs">\r
-    <auto_tcn>22</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>22</total_tcn>\r
-    <pkg_name>mobile/Tizen.Device.Tests-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="Tizen.Download.Manual.Tests" category="C# Device APIs">\r
-    <auto_tcn>0</auto_tcn>\r
-    <manual_tcn>1</manual_tcn>\r
-    <total_tcn>1</total_tcn>\r
-    <pkg_name>mobile/Tizen.Download.Manual.Tests-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="Tizen.Download.Tests" category="C# Device APIs">\r
-    <auto_tcn>53</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>53</total_tcn>\r
-    <pkg_name>mobile/Tizen.Download.Tests-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="Tizen.Feedback.Tests" category="C# Device APIs">\r
-    <auto_tcn>6</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>6</total_tcn>\r
-    <pkg_name>mobile/Tizen.Feedback.Tests-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="Tizen.Location.Manual.Tests" category="C# Device APIs">\r
-    <auto_tcn>0</auto_tcn>\r
-    <manual_tcn>2</manual_tcn>\r
-    <total_tcn>2</total_tcn>\r
-    <pkg_name>mobile/Tizen.Location.Manual.Tests-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="Tizen.Location.Tests" category="C# Device APIs">\r
-    <auto_tcn>102</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>102</total_tcn>\r
-    <pkg_name>mobile/Tizen.Location.Tests-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="Tizen.Mediacontent.Manual.Tests" category="C# Device APIs">\r
-    <auto_tcn>0</auto_tcn>\r
-    <manual_tcn>1</manual_tcn>\r
-    <total_tcn>1</total_tcn>\r
-    <pkg_name>mobile/Tizen.Mediacontent.Manual.Tests-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="Tizen.Mediacontent.Tests" category="C# Device APIs">\r
-    <auto_tcn>228</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>228</total_tcn>\r
-    <pkg_name>mobile/Tizen.Mediacontent.Tests-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="Tizen.Mime.Tests" category="C# Device APIs">\r
-    <auto_tcn>4</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>4</total_tcn>\r
-    <pkg_name>mobile/Tizen.Mime.Tests-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="Tizen.Multimedia.Manual.Tests" category="C# Device APIs">\r
-    <auto_tcn>0</auto_tcn>\r
-    <manual_tcn>50</manual_tcn>\r
-    <total_tcn>50</total_tcn>\r
-    <pkg_name>mobile/Tizen.Multimedia.Manual.Tests-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="Tizen.Multimedia.Tests" category="C# Device APIs">\r
-    <auto_tcn>257</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>257</total_tcn>\r
-    <pkg_name>mobile/Tizen.Multimedia.Tests-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="Tizen.Network.Tests" category="C# Device APIs">\r
-    <auto_tcn>106</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>106</total_tcn>\r
-    <pkg_name>mobile/Tizen.Network.Tests-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="Tizen.Nfc.Tests" category="C# Device APIs">\r
-    <auto_tcn>50</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>50</total_tcn>\r
-    <pkg_name>mobile/Tizen.Nfc.Tests-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="Tizen.Notifications.Manual.Tests" category="C# Device APIs">\r
-    <auto_tcn>0</auto_tcn>\r
-    <manual_tcn>32</manual_tcn>\r
-    <total_tcn>32</total_tcn>\r
-    <pkg_name>mobile/Tizen.Notifications.Manual.Tests-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="Tizen.Notifications.Tests" category="C# Device APIs">\r
-    <auto_tcn>74</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>74</total_tcn>\r
-    <pkg_name>mobile/Tizen.Notifications.Tests-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="Tizen.Packagemanager.Tests" category="C# Device APIs">\r
-    <auto_tcn>59</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>59</total_tcn>\r
-    <pkg_name>mobile/Tizen.Packagemanager.Tests-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="Tizen.Privilege.Tests" category="C# Device APIs">\r
-    <auto_tcn>19</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>19</total_tcn>\r
-    <pkg_name>mobile/Tizen.Privilege.Tests-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="Tizen.Push.Tests" category="C# Device APIs">\r
-    <auto_tcn>22</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>22</total_tcn>\r
-    <pkg_name>mobile/Tizen.Push.Tests-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="Tizen.Runtimeinformation.Manual.Tests" category="C# Device APIs">\r
-    <auto_tcn>0</auto_tcn>\r
-    <manual_tcn>33</manual_tcn>\r
-    <total_tcn>33</total_tcn>\r
-    <pkg_name>mobile/Tizen.Runtimeinformation.Manual.Tests-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="Tizen.Runtimeinformation.Tests" category="C# Device APIs">\r
-    <auto_tcn>45</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>45</total_tcn>\r
-    <pkg_name>mobile/Tizen.Runtimeinformation.Tests-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="Tizen.Sample.Manual.Tests" category="C# Device APIs">\r
-    <auto_tcn>0</auto_tcn>\r
-    <manual_tcn>8</manual_tcn>\r
-    <total_tcn>8</total_tcn>\r
-    <pkg_name>mobile/Tizen.Sample.Manual.Tests-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="Tizen.Sensor.Manual.Tests" category="C# Device APIs">\r
-    <auto_tcn>0</auto_tcn>\r
-    <manual_tcn>90</manual_tcn>\r
-    <total_tcn>90</total_tcn>\r
-    <pkg_name>mobile/Tizen.Sensor.Manual.Tests-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="Tizen.Sensor.Tests" category="C# Device APIs">\r
-    <auto_tcn>276</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>276</total_tcn>\r
-    <pkg_name>mobile/Tizen.Sensor.Tests-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="Tizen.Smartcard.Tests" category="C# Device APIs">\r
-    <auto_tcn>11</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>11</total_tcn>\r
-    <pkg_name>mobile/Tizen.Smartcard.Tests-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="Tizen.System.Manual.Tests" category="C# Device APIs">\r
-    <auto_tcn>0</auto_tcn>\r
-    <manual_tcn>1</manual_tcn>\r
-    <total_tcn>1</total_tcn>\r
-    <pkg_name>mobile/Tizen.System.Manual.Tests-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="Tizen.System.Tests" category="C# Device APIs">\r
-    <auto_tcn>29</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>29</total_tcn>\r
-    <pkg_name>mobile/Tizen.System.Tests-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="Tizen.Systemsettings.Manual.Tests" category="C# Device APIs">\r
-    <auto_tcn>0</auto_tcn>\r
-    <manual_tcn>26</manual_tcn>\r
-    <total_tcn>26</total_tcn>\r
-    <pkg_name>mobile/Tizen.Systemsettings.Manual.Tests-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="Tizen.Systemsettings.Tests" category="C# Device APIs">\r
-    <auto_tcn>114</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>114</total_tcn>\r
-    <pkg_name>mobile/Tizen.Systemsettings.Tests-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="Tizen.Tizen.Manual.Tests" category="C# Device APIs">\r
-    <auto_tcn>0</auto_tcn>\r
-    <manual_tcn>6</manual_tcn>\r
-    <total_tcn>6</total_tcn>\r
-    <pkg_name>mobile/Tizen.Tizen.Manual.Tests-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="Tizen.Tizen.Tests" category="C# Device APIs">\r
-    <auto_tcn>0</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>0</total_tcn>\r
-    <pkg_name>mobile/Tizen.Tizen.Tests-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="Tizen.Tracer.Tests" category="C# Device APIs">\r
-    <auto_tcn>5</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>5</total_tcn>\r
-    <pkg_name>mobile/Tizen.Tracer.Tests-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="Tizen.UI.Manual.Tests" category="C# Device APIs">\r
-    <auto_tcn>0</auto_tcn>\r
-    <manual_tcn>324</manual_tcn>\r
-    <total_tcn>324</total_tcn>\r
-    <pkg_name>mobile/Tizen.UI.Manual.Tests-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="Tizen.UI.Tests" category="C# Device APIs">\r
-    <auto_tcn>1019</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>1019</total_tcn>\r
-    <pkg_name>mobile/Tizen.UI.Tests-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="Tizen.WidgetControl.Tests" category="C# Device APIs">\r
-    <auto_tcn>8</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>8</total_tcn>\r
-    <pkg_name>mobile/Tizen.WidgetControl.Tests-3.0.zip</pkg_name>\r
-  </suite>\r
-</ns3:testplan>\r
-\r
diff --git a/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/shell/plan/Native_Full_mobile_2.4.xml b/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/shell/plan/Native_Full_mobile_2.4.xml
deleted file mode 100755 (executable)
index 23e1367..0000000
+++ /dev/null
@@ -1,1163 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>\r
-<ns3:testplan xmlns:ns3="http://www.example.org/plan/" xmlns="" name="Native_Full_mobile_2.4" profile="mobile">\r
-  <execute_type>Auto</execute_type>\r
-  <suite name="tct-connection-native-utc" category=" UnitTestCases ">\r
-    <auto_tcn>172</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>172</total_tcn>\r
-    <pkg_name>mobile/tct-connection-native-utc-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-webkit2-native-utc" category=" UnitTestCases ">\r
-    <auto_tcn>255</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>255</total_tcn>\r
-    <pkg_name>mobile/tct-webkit2-native-utc-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-privilege-info-native-utc" category=" UnitTestCases ">\r
-    <auto_tcn>14</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>14</total_tcn>\r
-    <pkg_name>mobile/tct-privilege-info-native-utc-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-dali-adaptor-native-utc" category=" UnitTestCases ">\r
-    <auto_tcn>98</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>98</total_tcn>\r
-    <pkg_name>mobile/tct-dali-adaptor-native-utc-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-wav-player-native-itc" category=" IntegrationTestCases ">\r
-    <auto_tcn>1</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>1</total_tcn>\r
-    <pkg_name>mobile/tct-wav-player-native-itc-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-native-common-native-itc" category=" IntegrationTestCases ">\r
-    <auto_tcn>2</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>2</total_tcn>\r
-    <pkg_name>mobile/tct-native-common-native-itc-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-widget_viewer_evas-native-utc" category=" UnitTestCases ">\r
-    <auto_tcn>49</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>49</total_tcn>\r
-    <pkg_name>mobile/tct-widget_viewer_evas-native-utc-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-capi-ui-inputmethod-manager-native-utc" category=" UnitTestCases ">\r
-    <auto_tcn>7</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>7</total_tcn>\r
-    <pkg_name>mobile/tct-capi-ui-inputmethod-manager-native-utc-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-filesystem-permission-native-ctc" category=" CompatibilityTestCases ">\r
-    <auto_tcn>32</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>32</total_tcn>\r
-    <pkg_name>mobile/tct-filesystem-permission-native-ctc-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-messages-native-itc" category=" IntegrationTestCases ">\r
-    <auto_tcn>18</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>18</total_tcn>\r
-    <pkg_name>mobile/tct-messages-native-itc-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-badge-native-utc" category=" UnitTestCases ">\r
-    <auto_tcn>25</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>25</total_tcn>\r
-    <pkg_name>mobile/tct-badge-native-utc-2.4.zip</pkg_name>\r
-  </suite>\r
-  <!--\r
-  <suite name="tct-wifi-direct-native-utc" category=" UnitTestCases ">\r
-    <auto_tcn>140</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>140</total_tcn>\r
-    <pkg_name>mobile/tct-wifi-direct-native-utc-2.4.zip</pkg_name>\r
-  </suite>\r
-  -->\r
-  <suite name="tct-widget_viewer_evas-native-itc" category=" IntegrationTestCases ">\r
-    <auto_tcn>23</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>23</total_tcn>\r
-    <pkg_name>mobile/tct-widget_viewer_evas-native-itc-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-capi-message-port-native-itc" category=" IntegrationTestCases ">\r
-    <auto_tcn>6</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>6</total_tcn>\r
-    <pkg_name>mobile/tct-capi-message-port-native-itc-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-system-settings-native-itc" category=" IntegrationTestCases ">\r
-    <auto_tcn>4</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>4</total_tcn>\r
-    <pkg_name>mobile/tct-system-settings-native-itc-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-messages-native-utc" category=" UnitTestCases ">\r
-    <auto_tcn>85</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>85</total_tcn>\r
-    <pkg_name>mobile/tct-messages-native-utc-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-capi-media-tool-native-utc" category=" UnitTestCases ">\r
-    <auto_tcn>109</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>109</total_tcn>\r
-    <pkg_name>mobile/tct-capi-media-tool-native-utc-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-push-native-itc" category=" IntegrationTestCases ">\r
-    <auto_tcn>12</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>12</total_tcn>\r
-    <pkg_name>mobile/tct-push-native-itc-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-sensor-native-ctc" category=" CompatibilityTestCases ">\r
-    <auto_tcn>9</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>9</total_tcn>\r
-    <pkg_name>mobile/tct-sensor-native-ctc-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-appcore-agent-native-itc" category=" IntegrationTestCases ">\r
-    <auto_tcn>2</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>2</total_tcn>\r
-    <pkg_name>mobile/tct-appcore-agent-native-itc-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-radio-native-utc" category=" UnitTestCases ">\r
-    <auto_tcn>40</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>40</total_tcn>\r
-    <pkg_name>mobile/tct-radio-native-utc-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-location-manager-native-utc" category=" UnitTestCases ">\r
-    <auto_tcn>129</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>129</total_tcn>\r
-    <pkg_name>mobile/tct-location-manager-native-utc-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-camera-native-utc" category=" UnitTestCases ">\r
-    <auto_tcn>348</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>348</total_tcn>\r
-    <pkg_name>mobile/tct-camera-native-utc-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-thumbnail-util-native-itc" category=" IntegrationTestCases ">\r
-    <auto_tcn>6</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>6</total_tcn>\r
-    <pkg_name>mobile/tct-thumbnail-util-native-itc-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-cairo-native-utc" category=" UnitTestCases ">\r
-    <auto_tcn>24</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>24</total_tcn>\r
-    <pkg_name>mobile/tct-cairo-native-utc-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-tbm-native-utc" category=" UnitTestCases ">\r
-    <auto_tcn>17</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>17</total_tcn>\r
-    <pkg_name>mobile/tct-tbm-native-utc-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-libstorage-native-ctc" category=" CompatibilityTestCases ">\r
-    <auto_tcn>2</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>2</total_tcn>\r
-    <pkg_name>mobile/tct-libstorage-native-ctc-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-accounts-svc-native-itc" category=" IntegrationTestCases ">\r
-    <auto_tcn>48</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>48</total_tcn>\r
-    <pkg_name>mobile/tct-accounts-svc-native-itc-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-telephony-native-utc" category=" UnitTestCases ">\r
-    <auto_tcn>159</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>159</total_tcn>\r
-    <pkg_name>mobile/tct-telephony-native-utc-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-phonenumber-utils-native-utc" category=" UnitTestCases ">\r
-    <auto_tcn>4</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>4</total_tcn>\r
-    <pkg_name>mobile/tct-phonenumber-utils-native-utc-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-native-common-native-utc" category=" UnitTestCases ">\r
-    <auto_tcn>5</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>5</total_tcn>\r
-    <pkg_name>mobile/tct-native-common-native-utc-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-capi-media-vision-native-utc" category=" UnitTestCases ">\r
-    <auto_tcn>55</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>55</total_tcn>\r
-    <pkg_name>mobile/tct-capi-media-vision-native-utc-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-base-utils-native-itc" category=" IntegrationTestCases ">\r
-    <auto_tcn>288</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>288</total_tcn>\r
-    <pkg_name>mobile/tct-base-utils-native-itc-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-appcore-widget-native-itc" category=" IntegrationTestCases ">\r
-    <auto_tcn>4</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>4</total_tcn>\r
-    <pkg_name>mobile/tct-appcore-widget-native-itc-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-metadata-editor-native-utc" category=" UnitTestCases ">\r
-    <auto_tcn>18</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>18</total_tcn>\r
-    <pkg_name>mobile/tct-metadata-editor-native-utc-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-mediacodec-native-utc" category=" UnitTestCases ">\r
-    <auto_tcn>49</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>49</total_tcn>\r
-    <pkg_name>mobile/tct-mediacodec-native-utc-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-calendar-service2-native-itc" category=" IntegrationTestCases ">\r
-    <auto_tcn>58</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>58</total_tcn>\r
-    <pkg_name>mobile/tct-calendar-service2-native-itc-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-capi-maps-service-native-utc" category=" UnitTestCases ">\r
-    <auto_tcn>296</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>296</total_tcn>\r
-    <pkg_name>mobile/tct-capi-maps-service-native-utc-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-mediacodec-native-itc" category=" IntegrationTestCases ">\r
-    <auto_tcn>17</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>17</total_tcn>\r
-    <pkg_name>mobile/tct-mediacodec-native-itc-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-key-manager-native-utc" category=" UnitTestCases ">\r
-    <auto_tcn>103</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>103</total_tcn>\r
-    <pkg_name>mobile/tct-key-manager-native-utc-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-media-content-native-utc" category=" UnitTestCases ">\r
-    <auto_tcn>475</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>475</total_tcn>\r
-    <pkg_name>mobile/tct-media-content-native-utc-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-opengl-native-ctc" category=" CompatibilityTestCases ">\r
-    <auto_tcn>3</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>3</total_tcn>\r
-    <pkg_name>mobile/tct-opengl-native-ctc-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-sound-manager-native-itc" category=" IntegrationTestCases ">\r
-    <auto_tcn>21</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>21</total_tcn>\r
-    <pkg_name>mobile/tct-sound-manager-native-itc-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-tone-player-native-utc" category=" UnitTestCases ">\r
-    <auto_tcn>5</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>5</total_tcn>\r
-    <pkg_name>mobile/tct-tone-player-native-utc-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-media-controller-native-utc" category=" UnitTestCases ">\r
-    <auto_tcn>85</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>85</total_tcn>\r
-    <pkg_name>mobile/tct-media-controller-native-utc-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-service-adaptor-client-native-utc" category=" UnitTestCases ">\r
-    <auto_tcn>127</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>127</total_tcn>\r
-    <pkg_name>mobile/tct-service-adaptor-client-native-utc-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-appcore-widget-native-utc" category=" UnitTestCases ">\r
-    <auto_tcn>20</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>20</total_tcn>\r
-    <pkg_name>mobile/tct-appcore-widget-native-utc-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-voice-control-elm-native-itc" category=" IntegrationTestCases ">\r
-    <auto_tcn>13</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>13</total_tcn>\r
-    <pkg_name>mobile/tct-voice-control-elm-native-itc-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-efl-ext-native-itc" category=" IntegrationTestCases ">\r
-    <auto_tcn>4</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>4</total_tcn>\r
-    <pkg_name>mobile/tct-efl-ext-native-itc-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-metadata-extractor-native-utc" category=" UnitTestCases ">\r
-    <auto_tcn>23</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>23</total_tcn>\r
-    <pkg_name>mobile/tct-metadata-extractor-native-utc-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-camera-native-itc" category=" IntegrationTestCases ">\r
-    <auto_tcn>78</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>78</total_tcn>\r
-    <pkg_name>mobile/tct-camera-native-itc-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-motion-native-itc" category=" IntegrationTestCases ">\r
-    <auto_tcn>8</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>8</total_tcn>\r
-    <pkg_name>mobile/tct-motion-native-itc-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-screen-mirroring-native-itc" category=" IntegrationTestCases ">\r
-    <auto_tcn>5</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>5</total_tcn>\r
-    <pkg_name>mobile/tct-screen-mirroring-native-itc-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-video-util-native-itc" category=" IntegrationTestCases ">\r
-    <auto_tcn>14</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>14</total_tcn>\r
-    <pkg_name>mobile/tct-video-util-native-itc-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-push-native-utc" category=" UnitTestCases ">\r
-    <auto_tcn>28</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>28</total_tcn>\r
-    <pkg_name>mobile/tct-push-native-utc-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-dlog-native-utc" category=" UnitTestCases ">\r
-    <auto_tcn>4</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>4</total_tcn>\r
-    <pkg_name>mobile/tct-dlog-native-utc-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-geofence-manager-native-itc" category=" IntegrationTestCases ">\r
-    <auto_tcn>25</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>25</total_tcn>\r
-    <pkg_name>mobile/tct-geofence-manager-native-itc-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-app-manager-native-itc" category=" IntegrationTestCases ">\r
-    <auto_tcn>38</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>38</total_tcn>\r
-    <pkg_name>mobile/tct-app-manager-native-itc-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-audio-io-native-utc" category=" UnitTestCases ">\r
-    <auto_tcn>72</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>72</total_tcn>\r
-    <pkg_name>mobile/tct-audio-io-native-utc-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-package-manager-native-utc" category=" UnitTestCases ">\r
-    <auto_tcn>96</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>96</total_tcn>\r
-    <pkg_name>mobile/tct-package-manager-native-utc-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-capi-maps-service-native-itc" category=" IntegrationTestCases ">\r
-    <auto_tcn>57</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>57</total_tcn>\r
-    <pkg_name>mobile/tct-capi-maps-service-native-itc-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-player-native-ctc" category=" CompatibilityTestCases ">\r
-    <auto_tcn>4</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>4</total_tcn>\r
-    <pkg_name>mobile/tct-player-native-ctc-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-dali-core-native-itc" category=" IntegrationTestCases ">\r
-    <auto_tcn>864</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>864</total_tcn>\r
-    <pkg_name>mobile/tct-dali-core-native-itc-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-sync-manager-native-utc" category=" UnitTestCases ">\r
-    <auto_tcn>28</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>28</total_tcn>\r
-    <pkg_name>mobile/tct-sync-manager-native-utc-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-efl-util-native-itc" category=" IntegrationTestCases ">\r
-    <auto_tcn>5</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>5</total_tcn>\r
-    <pkg_name>mobile/tct-efl-util-native-itc-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-efl-ext-native-utc" category=" UnitTestCases ">\r
-    <auto_tcn>24</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>24</total_tcn>\r
-    <pkg_name>mobile/tct-efl-ext-native-utc-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-wifi-native-utc" category=" UnitTestCases ">\r
-    <auto_tcn>202</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>202</total_tcn>\r
-    <pkg_name>mobile/tct-wifi-native-utc-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-sensor-native-utc" category=" UnitTestCases ">\r
-    <auto_tcn>60</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>60</total_tcn>\r
-    <pkg_name>mobile/tct-sensor-native-utc-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-video-util-native-ctc" category=" CompatibilityTestCases ">\r
-    <auto_tcn>6</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>6</total_tcn>\r
-    <pkg_name>mobile/tct-video-util-native-ctc-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-bundle-native-utc" category=" UnitTestCases ">\r
-    <auto_tcn>53</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>53</total_tcn>\r
-    <pkg_name>mobile/tct-bundle-native-utc-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-bundle-native-itc" category=" IntegrationTestCases ">\r
-    <auto_tcn>9</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>9</total_tcn>\r
-    <pkg_name>mobile/tct-bundle-native-itc-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-libstorage-native-utc" category=" UnitTestCases ">\r
-    <auto_tcn>31</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>31</total_tcn>\r
-    <pkg_name>mobile/tct-libstorage-native-utc-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-widget_service-native-utc" category=" UnitTestCases ">\r
-    <auto_tcn>46</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>46</total_tcn>\r
-    <pkg_name>mobile/tct-widget_service-native-utc-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-mime-type-native-utc" category=" UnitTestCases ">\r
-    <auto_tcn>15</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>15</total_tcn>\r
-    <pkg_name>mobile/tct-mime-type-native-utc-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-url-download-native-itc" category=" IntegrationTestCases ">\r
-    <auto_tcn>27</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>27</total_tcn>\r
-    <pkg_name>mobile/tct-url-download-native-itc-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-capi-ui-inputmethod-native-utc" category=" UnitTestCases ">\r
-    <auto_tcn>99</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>99</total_tcn>\r
-    <pkg_name>mobile/tct-capi-ui-inputmethod-native-utc-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-eom-native-itc" category=" IntegrationTestCases ">\r
-    <auto_tcn>13</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>13</total_tcn>\r
-    <pkg_name>mobile/tct-eom-native-itc-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-contacts-service2-native-utc" category=" UnitTestCases ">\r
-    <auto_tcn>198</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>198</total_tcn>\r
-    <pkg_name>mobile/tct-contacts-service2-native-utc-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-application-native-itc" category=" IntegrationTestCases ">\r
-    <auto_tcn>55</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>55</total_tcn>\r
-    <pkg_name>mobile/tct-application-native-itc-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-camera-native-ctc" category=" CompatibilityTestCases ">\r
-    <auto_tcn>1</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>1</total_tcn>\r
-    <pkg_name>mobile/tct-camera-native-ctc-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-player-native-utc" category=" UnitTestCases ">\r
-    <auto_tcn>191</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>191</total_tcn>\r
-    <pkg_name>mobile/tct-player-native-utc-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-minicontrol-native-utc" category=" UnitTestCases ">\r
-    <auto_tcn>11</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>11</total_tcn>\r
-    <pkg_name>mobile/tct-minicontrol-native-utc-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-voice-control-elm-native-utc" category=" UnitTestCases ">\r
-    <auto_tcn>71</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>71</total_tcn>\r
-    <pkg_name>mobile/tct-voice-control-elm-native-utc-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-appcore-agent-native-utc" category=" UnitTestCases ">\r
-    <auto_tcn>11</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>11</total_tcn>\r
-    <pkg_name>mobile/tct-appcore-agent-native-utc-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-system-info-native-utc" category=" UnitTestCases ">\r
-    <auto_tcn>12</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>12</total_tcn>\r
-    <pkg_name>mobile/tct-system-info-native-utc-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-device-native-ctc" category=" CompatibilityTestCases ">\r
-    <auto_tcn>1</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>1</total_tcn>\r
-    <pkg_name>mobile/tct-device-native-ctc-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-context-native-utc" category=" UnitTestCases ">\r
-    <auto_tcn>82</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>82</total_tcn>\r
-    <pkg_name>mobile/tct-context-native-utc-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-application-native-utc" category=" UnitTestCases ">\r
-    <auto_tcn>269</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>269</total_tcn>\r
-    <pkg_name>mobile/tct-application-native-utc-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-radio-native-itc" category=" IntegrationTestCases ">\r
-    <auto_tcn>12</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>12</total_tcn>\r
-    <pkg_name>mobile/tct-radio-native-itc-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-data-control-native-utc" category=" UnitTestCases ">\r
-    <auto_tcn>89</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>89</total_tcn>\r
-    <pkg_name>mobile/tct-data-control-native-utc-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-email-native-utc" category=" UnitTestCases ">\r
-    <auto_tcn>24</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>24</total_tcn>\r
-    <pkg_name>mobile/tct-email-native-utc-2.4.zip</pkg_name>\r
-  </suite>\r
-  <!--\r
-  <suite name="tct-wifi-direct-native-itc" category=" IntegrationTestCases ">\r
-    <auto_tcn>38</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>38</total_tcn>\r
-    <pkg_name>mobile/tct-wifi-direct-native-itc-2.4.zip</pkg_name>\r
-  </suite>\r
-  -->\r
-  <suite name="tct-tts-native-utc" category=" UnitTestCases ">\r
-    <auto_tcn>104</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>104</total_tcn>\r
-    <pkg_name>mobile/tct-tts-native-utc-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-system-settings-native-utc" category=" UnitTestCases ">\r
-    <auto_tcn>78</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>78</total_tcn>\r
-    <pkg_name>mobile/tct-system-settings-native-utc-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-metadata-extractor-native-itc" category=" IntegrationTestCases ">\r
-    <auto_tcn>8</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>8</total_tcn>\r
-    <pkg_name>mobile/tct-metadata-extractor-native-itc-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-device-native-utc" category=" UnitTestCases ">\r
-    <auto_tcn>59</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>59</total_tcn>\r
-    <pkg_name>mobile/tct-device-native-utc-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-capi-message-port-native-utc" category=" UnitTestCases ">\r
-    <auto_tcn>52</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>52</total_tcn>\r
-    <pkg_name>mobile/tct-capi-message-port-native-utc-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-video-util-native-utc" category=" UnitTestCases ">\r
-    <auto_tcn>43</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>43</total_tcn>\r
-    <pkg_name>mobile/tct-video-util-native-utc-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-service-adaptor-client-native-itc" category=" IntegrationTestCases ">\r
-    <auto_tcn>24</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>24</total_tcn>\r
-    <pkg_name>mobile/tct-service-adaptor-client-native-itc-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-sound-manager-native-ctc" category=" CompatibilityTestCases ">\r
-    <auto_tcn>1</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>1</total_tcn>\r
-    <pkg_name>mobile/tct-sound-manager-native-ctc-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-cairo-native-itc" category=" IntegrationTestCases ">\r
-    <auto_tcn>9</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>9</total_tcn>\r
-    <pkg_name>mobile/tct-cairo-native-itc-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-image-util-native-utc" category=" UnitTestCases ">\r
-    <auto_tcn>95</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>95</total_tcn>\r
-    <pkg_name>mobile/tct-image-util-native-utc-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-calendar-service2-native-utc" category=" UnitTestCases ">\r
-    <auto_tcn>149</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>149</total_tcn>\r
-    <pkg_name>mobile/tct-calendar-service2-native-utc-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-capi-ui-inputmethod-manager-native-itc" category=" IntegrationTestCases ">\r
-    <auto_tcn>2</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>2</total_tcn>\r
-    <pkg_name>mobile/tct-capi-ui-inputmethod-manager-native-itc-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-shortcut-native-itc" category=" IntegrationTestCases ">\r
-    <auto_tcn>4</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>4</total_tcn>\r
-    <pkg_name>mobile/tct-shortcut-native-itc-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-geofence-manager-native-utc" category=" UnitTestCases ">\r
-    <auto_tcn>134</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>134</total_tcn>\r
-    <pkg_name>mobile/tct-geofence-manager-native-utc-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-media-key-native-itc" category=" IntegrationTestCases ">\r
-    <auto_tcn>1</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>1</total_tcn>\r
-    <pkg_name>mobile/tct-media-key-native-itc-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-trace-native-utc" category=" UnitTestCases ">\r
-    <auto_tcn>5</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>5</total_tcn>\r
-    <pkg_name>mobile/tct-trace-native-utc-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-nfc-native-utc" category=" UnitTestCases ">\r
-    <auto_tcn>157</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>157</total_tcn>\r
-    <pkg_name>mobile/tct-nfc-native-utc-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-dlog-native-itc" category=" IntegrationTestCases ">\r
-    <auto_tcn>2</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>2</total_tcn>\r
-    <pkg_name>mobile/tct-dlog-native-itc-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-platform-permission-native-ctc" category=" CompatibilityTestCases ">\r
-    <auto_tcn>36</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>36</total_tcn>\r
-    <pkg_name>mobile/tct-platform-permission-native-ctc-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-metadata-editor-native-itc" category=" IntegrationTestCases ">\r
-    <auto_tcn>7</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>7</total_tcn>\r
-    <pkg_name>mobile/tct-metadata-editor-native-itc-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-runtime-info-native-itc" category=" IntegrationTestCases ">\r
-    <auto_tcn>7</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>7</total_tcn>\r
-    <pkg_name>mobile/tct-runtime-info-native-itc-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-libstorage64-native-utc" category=" UnitTestCases ">\r
-    <auto_tcn>31</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>31</total_tcn>\r
-    <pkg_name>mobile/tct-libstorage64-native-utc-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-efl-util-native-utc" category=" UnitTestCases ">\r
-    <auto_tcn>45</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>45</total_tcn>\r
-    <pkg_name>mobile/tct-efl-util-native-utc-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-dali-toolkit-native-itc" category=" IntegrationTestCases ">\r
-    <auto_tcn>231</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>231</total_tcn>\r
-    <pkg_name>mobile/tct-dali-toolkit-native-itc-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-minicontrol-native-itc" category=" IntegrationTestCases ">\r
-    <auto_tcn>5</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>5</total_tcn>\r
-    <pkg_name>mobile/tct-minicontrol-native-itc-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-audio-io-native-ctc" category=" CompatibilityTestCases ">\r
-    <auto_tcn>1</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>1</total_tcn>\r
-    <pkg_name>mobile/tct-audio-io-native-ctc-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-device-native-itc" category=" IntegrationTestCases ">\r
-    <auto_tcn>16</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>16</total_tcn>\r
-    <pkg_name>mobile/tct-device-native-itc-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-base-utils-native-utc" category=" UnitTestCases ">\r
-    <auto_tcn>885</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>885</total_tcn>\r
-    <pkg_name>mobile/tct-base-utils-native-utc-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-oauth2-native-itc" category=" IntegrationTestCases ">\r
-    <auto_tcn>18</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>18</total_tcn>\r
-    <pkg_name>mobile/tct-oauth2-native-itc-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-dali-toolkit-native-utc" category=" UnitTestCases ">\r
-    <auto_tcn>414</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>414</total_tcn>\r
-    <pkg_name>mobile/tct-dali-toolkit-native-utc-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-recorder-native-itc" category=" IntegrationTestCases ">\r
-    <auto_tcn>33</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>33</total_tcn>\r
-    <pkg_name>mobile/tct-recorder-native-itc-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-mediacodec-native-ctc" category=" CompatibilityTestCases ">\r
-    <auto_tcn>1</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>1</total_tcn>\r
-    <pkg_name>mobile/tct-mediacodec-native-ctc-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-player-native-itc" category=" IntegrationTestCases ">\r
-    <auto_tcn>54</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>54</total_tcn>\r
-    <pkg_name>mobile/tct-player-native-itc-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-media-controller-native-itc" category=" IntegrationTestCases ">\r
-    <auto_tcn>28</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>28</total_tcn>\r
-    <pkg_name>mobile/tct-media-controller-native-itc-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-mime-type-native-itc" category=" IntegrationTestCases ">\r
-    <auto_tcn>2</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>2</total_tcn>\r
-    <pkg_name>mobile/tct-mime-type-native-itc-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-system-info-native-ctc" category=" CompatibilityTestCases ">\r
-    <auto_tcn>4</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>4</total_tcn>\r
-    <pkg_name>mobile/tct-system-info-native-ctc-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-thumbnail-util-native-utc" category=" UnitTestCases ">\r
-    <auto_tcn>14</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>14</total_tcn>\r
-    <pkg_name>mobile/tct-thumbnail-util-native-utc-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-key-manager-native-itc" category=" IntegrationTestCases ">\r
-    <auto_tcn>34</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>34</total_tcn>\r
-    <pkg_name>mobile/tct-key-manager-native-itc-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-connection-native-ctc" category=" CompatibilityTestCases ">\r
-    <auto_tcn>1</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>1</total_tcn>\r
-    <pkg_name>mobile/tct-connection-native-ctc-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-runtime-info-native-ctc" category=" CompatibilityTestCases ">\r
-    <auto_tcn>15</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>15</total_tcn>\r
-    <pkg_name>mobile/tct-runtime-info-native-ctc-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-smartcard-native-utc" category=" UnitTestCases ">\r
-    <auto_tcn>33</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>33</total_tcn>\r
-    <pkg_name>mobile/tct-smartcard-native-utc-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-tts-native-itc" category=" IntegrationTestCases ">\r
-    <auto_tcn>14</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>14</total_tcn>\r
-    <pkg_name>mobile/tct-tts-native-itc-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-badge-native-itc" category=" IntegrationTestCases ">\r
-    <auto_tcn>6</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>6</total_tcn>\r
-    <pkg_name>mobile/tct-badge-native-itc-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-smartcard-native-itc" category=" IntegrationTestCases ">\r
-    <auto_tcn>8</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>8</total_tcn>\r
-    <pkg_name>mobile/tct-smartcard-native-itc-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-wifi-native-itc" category=" IntegrationTestCases ">\r
-    <auto_tcn>60</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>60</total_tcn>\r
-    <pkg_name>mobile/tct-wifi-native-itc-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-oauth2-native-utc" category=" UnitTestCases ">\r
-    <auto_tcn>89</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>89</total_tcn>\r
-    <pkg_name>mobile/tct-oauth2-native-utc-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-sync-manager-native-itc" category=" IntegrationTestCases ">\r
-    <auto_tcn>5</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>5</total_tcn>\r
-    <pkg_name>mobile/tct-sync-manager-native-itc-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-accounts-svc-native-utc" category=" UnitTestCases ">\r
-    <auto_tcn>147</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>147</total_tcn>\r
-    <pkg_name>mobile/tct-accounts-svc-native-utc-2.4.zip</pkg_name>\r
-  </suite>\r
-  <!--\r
-  <suite name="tct-wifi-direct-native-ctc" category=" CompatibilityTestCases ">\r
-    <auto_tcn>1</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>1</total_tcn>\r
-    <pkg_name>mobile/tct-wifi-direct-native-ctc-2.4.zip</pkg_name>\r
-  </suite>\r
-  -->\r
-  <suite name="tct-libstorage-native-itc" category=" IntegrationTestCases ">\r
-    <auto_tcn>10</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>10</total_tcn>\r
-    <pkg_name>mobile/tct-libstorage-native-itc-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-url-download-native-utc" category=" UnitTestCases ">\r
-    <auto_tcn>121</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>121</total_tcn>\r
-    <pkg_name>mobile/tct-url-download-native-utc-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-stt-native-utc" category=" UnitTestCases ">\r
-    <auto_tcn>88</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>88</total_tcn>\r
-    <pkg_name>mobile/tct-stt-native-utc-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-stt-native-itc" category=" IntegrationTestCases ">\r
-    <auto_tcn>20</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>20</total_tcn>\r
-    <pkg_name>mobile/tct-stt-native-itc-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-recorder-native-utc" category=" UnitTestCases ">\r
-    <auto_tcn>151</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>151</total_tcn>\r
-    <pkg_name>mobile/tct-recorder-native-utc-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-attach-panel-native-utc" category=" UnitTestCases ">\r
-    <auto_tcn>24</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>24</total_tcn>\r
-    <pkg_name>mobile/tct-attach-panel-native-utc-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-voice-control-native-itc" category=" IntegrationTestCases ">\r
-    <auto_tcn>22</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>22</total_tcn>\r
-    <pkg_name>mobile/tct-voice-control-native-itc-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-context-native-itc" category=" IntegrationTestCases ">\r
-    <auto_tcn>29</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>29</total_tcn>\r
-    <pkg_name>mobile/tct-context-native-itc-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-runtime-info-native-utc" category=" UnitTestCases ">\r
-    <auto_tcn>126</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>126</total_tcn>\r
-    <pkg_name>mobile/tct-runtime-info-native-utc-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-bluetooth-native-utc" category=" UnitTestCases ">\r
-    <auto_tcn>338</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>338</total_tcn>\r
-    <pkg_name>mobile/tct-bluetooth-native-utc-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-dali-core-native-utc" category=" UnitTestCases ">\r
-    <auto_tcn>1600</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>1600</total_tcn>\r
-    <pkg_name>mobile/tct-dali-core-native-utc-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-email-native-itc" category=" IntegrationTestCases ">\r
-    <auto_tcn>9</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>9</total_tcn>\r
-    <pkg_name>mobile/tct-email-native-itc-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-capi-media-tool-native-itc" category=" IntegrationTestCases ">\r
-    <auto_tcn>44</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>44</total_tcn>\r
-    <pkg_name>mobile/tct-capi-media-tool-native-itc-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-location-manager-native-ctc" category=" CompatibilityTestCases ">\r
-    <auto_tcn>1</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>1</total_tcn>\r
-    <pkg_name>mobile/tct-location-manager-native-ctc-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-package-manager-native-itc" category=" IntegrationTestCases ">\r
-    <auto_tcn>38</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>38</total_tcn>\r
-    <pkg_name>mobile/tct-package-manager-native-itc-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-telephony-native-ctc" category=" CompatibilityTestCases ">\r
-    <auto_tcn>1</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>1</total_tcn>\r
-    <pkg_name>mobile/tct-telephony-native-ctc-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-dali-adaptor-native-itc" category=" IntegrationTestCases ">\r
-    <auto_tcn>16</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>16</total_tcn>\r
-    <pkg_name>mobile/tct-dali-adaptor-native-itc-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-media-content-native-itc" category=" IntegrationTestCases ">\r
-    <auto_tcn>181</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>181</total_tcn>\r
-    <pkg_name>mobile/tct-media-content-native-itc-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-tbm-native-itc" category=" IntegrationTestCases ">\r
-    <auto_tcn>7</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>7</total_tcn>\r
-    <pkg_name>mobile/tct-tbm-native-itc-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-libfeedback-native-utc" category=" UnitTestCases ">\r
-    <auto_tcn>13</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>13</total_tcn>\r
-    <pkg_name>mobile/tct-libfeedback-native-utc-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-webkit2-native-itc" category=" IntegrationTestCases ">\r
-    <auto_tcn>103</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>103</total_tcn>\r
-    <pkg_name>mobile/tct-webkit2-native-itc-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-notification-native-utc" category=" UnitTestCases ">\r
-    <auto_tcn>229</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>229</total_tcn>\r
-    <pkg_name>mobile/tct-notification-native-utc-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-sound-manager-native-utc" category=" UnitTestCases ">\r
-    <auto_tcn>71</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>71</total_tcn>\r
-    <pkg_name>mobile/tct-sound-manager-native-utc-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-notification-native-itc" category=" IntegrationTestCases ">\r
-    <auto_tcn>30</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>30</total_tcn>\r
-    <pkg_name>mobile/tct-notification-native-itc-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-voice-control-native-utc" category=" UnitTestCases ">\r
-    <auto_tcn>97</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>97</total_tcn>\r
-    <pkg_name>mobile/tct-voice-control-native-utc-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-eom-native-utc" category=" UnitTestCases ">\r
-    <auto_tcn>42</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>42</total_tcn>\r
-    <pkg_name>mobile/tct-eom-native-utc-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-widget_service-native-itc" category=" IntegrationTestCases ">\r
-    <auto_tcn>18</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>18</total_tcn>\r
-    <pkg_name>mobile/tct-widget_service-native-itc-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-contacts-service2-native-itc" category=" IntegrationTestCases ">\r
-    <auto_tcn>77</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>77</total_tcn>\r
-    <pkg_name>mobile/tct-contacts-service2-native-itc-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-telephony-native-itc" category=" IntegrationTestCases ">\r
-    <auto_tcn>38</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>38</total_tcn>\r
-    <pkg_name>mobile/tct-telephony-native-itc-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-shortcut-native-utc" category=" UnitTestCases ">\r
-    <auto_tcn>8</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>8</total_tcn>\r
-    <pkg_name>mobile/tct-shortcut-native-utc-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-audio-io-native-itc" category=" IntegrationTestCases ">\r
-    <auto_tcn>26</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>26</total_tcn>\r
-    <pkg_name>mobile/tct-audio-io-native-itc-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-location-manager-native-itc" category=" IntegrationTestCases ">\r
-    <auto_tcn>41</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>41</total_tcn>\r
-    <pkg_name>mobile/tct-location-manager-native-itc-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-tone-player-native-itc" category=" IntegrationTestCases ">\r
-    <auto_tcn>1</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>1</total_tcn>\r
-    <pkg_name>mobile/tct-tone-player-native-itc-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-app-manager-native-utc" category=" UnitTestCases ">\r
-    <auto_tcn>121</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>121</total_tcn>\r
-    <pkg_name>mobile/tct-app-manager-native-utc-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-screen-mirroring-native-utc" category=" UnitTestCases ">\r
-    <auto_tcn>55</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>55</total_tcn>\r
-    <pkg_name>mobile/tct-screen-mirroring-native-utc-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-image-util-native-ctc" category=" CompatibilityTestCases ">\r
-    <auto_tcn>2</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>2</total_tcn>\r
-    <pkg_name>mobile/tct-image-util-native-ctc-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-media-vision-native-itc" category=" IntegrationTestCases ">\r
-    <auto_tcn>17</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>17</total_tcn>\r
-    <pkg_name>mobile/tct-media-vision-native-itc-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-privilege-info-native-itc" category=" IntegrationTestCases ">\r
-    <auto_tcn>4</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>4</total_tcn>\r
-    <pkg_name>mobile/tct-privilege-info-native-itc-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-image-util-native-itc" category=" IntegrationTestCases ">\r
-    <auto_tcn>14</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>14</total_tcn>\r
-    <pkg_name>mobile/tct-image-util-native-itc-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-connection-native-itc" category=" IntegrationTestCases ">\r
-    <auto_tcn>61</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>61</total_tcn>\r
-    <pkg_name>mobile/tct-connection-native-itc-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-nfc-native-itc" category=" IntegrationTestCases ">\r
-    <auto_tcn>40</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>40</total_tcn>\r
-    <pkg_name>mobile/tct-nfc-native-itc-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-ttrace-native-itc" category=" IntegrationTestCases ">\r
-    <auto_tcn>3</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>3</total_tcn>\r
-    <pkg_name>mobile/tct-ttrace-native-itc-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-media-key-native-utc" category=" UnitTestCases ">\r
-    <auto_tcn>3</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>3</total_tcn>\r
-    <pkg_name>mobile/tct-media-key-native-utc-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-wav-player-native-utc" category=" UnitTestCases ">\r
-    <auto_tcn>9</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>9</total_tcn>\r
-    <pkg_name>mobile/tct-wav-player-native-utc-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-libfeedback-native-itc" category=" IntegrationTestCases ">\r
-    <auto_tcn>4</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>4</total_tcn>\r
-    <pkg_name>mobile/tct-libfeedback-native-itc-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-phonenumber-utils-native-itc" category=" IntegrationTestCases ">\r
-    <auto_tcn>2</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>2</total_tcn>\r
-    <pkg_name>mobile/tct-phonenumber-utils-native-itc-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-motion-native-utc" category=" UnitTestCases ">\r
-    <auto_tcn>23</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>23</total_tcn>\r
-    <pkg_name>mobile/tct-motion-native-utc-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-bluetooth-native-itc" category=" IntegrationTestCases ">\r
-    <auto_tcn>45</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>45</total_tcn>\r
-    <pkg_name>mobile/tct-bluetooth-native-itc-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-system-info-native-itc" category=" IntegrationTestCases ">\r
-    <auto_tcn>4</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>4</total_tcn>\r
-    <pkg_name>mobile/tct-system-info-native-itc-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-sensor-native-itc" category=" IntegrationTestCases ">\r
-    <auto_tcn>25</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>25</total_tcn>\r
-    <pkg_name>mobile/tct-sensor-native-itc-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-data-control-native-itc" category=" IntegrationTestCases ">\r
-    <auto_tcn>33</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>33</total_tcn>\r
-    <pkg_name>mobile/tct-data-control-native-itc-2.4.zip</pkg_name>\r
-  </suite>\r
-</ns3:testplan>\r
-\r
diff --git a/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/shell/plan/Native_Full_mobile_3.0.xml b/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/shell/plan/Native_Full_mobile_3.0.xml
deleted file mode 100755 (executable)
index 22ac02d..0000000
+++ /dev/null
@@ -1,1235 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>\r
-<ns3:testplan xmlns:ns3="http://www.example.org/plan/" xmlns="" name="Native_Full_mobile_3.0" profile="mobile">\r
-  <execute_type>Auto</execute_type>\r
-  <suite name="tct-dali-adaptor-native-utc" category=" UnitTestCases ">\r
-    <auto_tcn>96</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>96</total_tcn>\r
-    <pkg_name>mobile/tct-dali-adaptor-native-utc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-mtp-native-itc" category=" IntegrationTestCases ">\r
-    <auto_tcn>1</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>1</total_tcn>\r
-    <pkg_name>mobile/tct-mtp-native-itc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-wav-player-native-itc" category=" IntegrationTestCases ">\r
-    <auto_tcn>2</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>2</total_tcn>\r
-    <pkg_name>mobile/tct-wav-player-native-itc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-messages-native-itc" category=" IntegrationTestCases ">\r
-    <auto_tcn>18</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>18</total_tcn>\r
-    <pkg_name>mobile/tct-messages-native-itc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-badge-native-utc" category=" UnitTestCases ">\r
-    <auto_tcn>25</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>25</total_tcn>\r
-    <pkg_name>mobile/tct-badge-native-utc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-mediademuxer-native-utc" category=" UnitTestCases ">\r
-    <auto_tcn>36</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>36</total_tcn>\r
-    <pkg_name>mobile/tct-mediademuxer-native-utc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-system-settings-native-itc" category=" IntegrationTestCases ">\r
-    <auto_tcn>4</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>4</total_tcn>\r
-    <pkg_name>mobile/tct-system-settings-native-itc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-thumbnail-util-native-itc" category=" IntegrationTestCases ">\r
-    <auto_tcn>6</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>6</total_tcn>\r
-    <pkg_name>mobile/tct-thumbnail-util-native-itc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-tbm-native-utc" category=" UnitTestCases ">\r
-    <auto_tcn>17</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>17</total_tcn>\r
-    <pkg_name>mobile/tct-tbm-native-utc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-accounts-svc-native-itc" category=" IntegrationTestCases ">\r
-    <auto_tcn>48</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>48</total_tcn>\r
-    <pkg_name>mobile/tct-accounts-svc-native-itc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-telephony-native-utc" category=" UnitTestCases ">\r
-    <auto_tcn>159</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>159</total_tcn>\r
-    <pkg_name>mobile/tct-telephony-native-utc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-capi-media-vision-native-utc" category=" UnitTestCases ">\r
-    <auto_tcn>155</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>155</total_tcn>\r
-    <pkg_name>mobile/tct-capi-media-vision-native-utc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-phonenumber-utils-native-utc" category=" UnitTestCases ">\r
-    <auto_tcn>12</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>12</total_tcn>\r
-    <pkg_name>mobile/tct-phonenumber-utils-native-utc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-fido-client-native-utc" category=" UnitTestCases ">\r
-    <auto_tcn>24</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>24</total_tcn>\r
-    <pkg_name>mobile/tct-fido-client-native-utc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-appcore-widget-native-itc" category=" IntegrationTestCases ">\r
-    <auto_tcn>5</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>5</total_tcn>\r
-    <pkg_name>mobile/tct-appcore-widget-native-itc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-base-utils-native-itc" category=" IntegrationTestCases ">\r
-    <auto_tcn>288</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>288</total_tcn>\r
-    <pkg_name>mobile/tct-base-utils-native-itc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-mediacodec-native-utc" category=" UnitTestCases ">\r
-    <auto_tcn>49</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>49</total_tcn>\r
-    <pkg_name>mobile/tct-mediacodec-native-utc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-calendar-service2-native-itc" category=" IntegrationTestCases ">\r
-    <auto_tcn>58</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>58</total_tcn>\r
-    <pkg_name>mobile/tct-calendar-service2-native-itc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-capi-media-streamer-native-utc" category=" UnitTestCases ">\r
-    <auto_tcn>82</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>82</total_tcn>\r
-    <pkg_name>mobile/tct-capi-media-streamer-native-utc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-media-content-native-utc" category=" UnitTestCases ">\r
-    <auto_tcn>526</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>526</total_tcn>\r
-    <pkg_name>mobile/tct-media-content-native-utc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-sound-manager-native-itc" category=" IntegrationTestCases ">\r
-    <auto_tcn>28</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>28</total_tcn>\r
-    <pkg_name>mobile/tct-sound-manager-native-itc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-opengl-native-ctc" category=" CompatibilityTestCases ">\r
-    <auto_tcn>3</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>3</total_tcn>\r
-    <pkg_name>mobile/tct-opengl-native-ctc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-media-controller-native-utc" category=" UnitTestCases ">\r
-    <auto_tcn>85</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>85</total_tcn>\r
-    <pkg_name>mobile/tct-media-controller-native-utc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-tone-player-native-utc" category=" UnitTestCases ">\r
-    <auto_tcn>9</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>9</total_tcn>\r
-    <pkg_name>mobile/tct-tone-player-native-utc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-voice-control-elm-native-itc" category=" IntegrationTestCases ">\r
-    <auto_tcn>13</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>13</total_tcn>\r
-    <pkg_name>mobile/tct-voice-control-elm-native-itc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-appcore-widget-native-utc" category=" UnitTestCases ">\r
-    <auto_tcn>20</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>20</total_tcn>\r
-    <pkg_name>mobile/tct-appcore-widget-native-utc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-screen-mirroring-native-itc" category=" IntegrationTestCases ">\r
-    <auto_tcn>5</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>5</total_tcn>\r
-    <pkg_name>mobile/tct-screen-mirroring-native-itc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-motion-native-itc" category=" IntegrationTestCases ">\r
-    <auto_tcn>8</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>8</total_tcn>\r
-    <pkg_name>mobile/tct-motion-native-itc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-camera-native-itc" category=" IntegrationTestCases ">\r
-    <auto_tcn>82</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>82</total_tcn>\r
-    <pkg_name>mobile/tct-camera-native-itc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-video-util-native-itc" category=" IntegrationTestCases ">\r
-    <auto_tcn>14</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>14</total_tcn>\r
-    <pkg_name>mobile/tct-video-util-native-itc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-push-native-utc" category=" UnitTestCases ">\r
-    <auto_tcn>28</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>28</total_tcn>\r
-    <pkg_name>mobile/tct-push-native-utc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-geofence-manager-native-itc" category=" IntegrationTestCases ">\r
-    <auto_tcn>26</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>26</total_tcn>\r
-    <pkg_name>mobile/tct-geofence-manager-native-itc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-app-manager-native-itc" category=" IntegrationTestCases ">\r
-    <auto_tcn>42</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>42</total_tcn>\r
-    <pkg_name>mobile/tct-app-manager-native-itc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-audio-io-native-utc" category=" UnitTestCases ">\r
-    <auto_tcn>94</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>94</total_tcn>\r
-    <pkg_name>mobile/tct-audio-io-native-utc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-player-native-ctc" category=" CompatibilityTestCases ">\r
-    <auto_tcn>4</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>4</total_tcn>\r
-    <pkg_name>mobile/tct-player-native-ctc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-dali-core-native-itc" category=" IntegrationTestCases ">\r
-    <auto_tcn>864</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>864</total_tcn>\r
-    <pkg_name>mobile/tct-dali-core-native-itc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-mediatool-native-utc" category=" UnitTestCases ">\r
-    <auto_tcn>133</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>133</total_tcn>\r
-    <pkg_name>mobile/tct-mediatool-native-utc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-sync-manager-native-utc" category=" UnitTestCases ">\r
-    <auto_tcn>28</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>28</total_tcn>\r
-    <pkg_name>mobile/tct-sync-manager-native-utc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-efl-util-native-itc" category=" IntegrationTestCases ">\r
-    <auto_tcn>5</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>5</total_tcn>\r
-    <pkg_name>mobile/tct-efl-util-native-itc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-efl-ext-native-utc" category=" UnitTestCases ">\r
-    <auto_tcn>26</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>26</total_tcn>\r
-    <pkg_name>mobile/tct-efl-ext-native-utc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-wifi-native-utc" category=" UnitTestCases ">\r
-    <auto_tcn>208</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>208</total_tcn>\r
-    <pkg_name>mobile/tct-wifi-native-utc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-bundle-native-itc" category=" IntegrationTestCases ">\r
-    <auto_tcn>9</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>9</total_tcn>\r
-    <pkg_name>mobile/tct-bundle-native-itc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-bundle-native-utc" category=" UnitTestCases ">\r
-    <auto_tcn>53</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>53</total_tcn>\r
-    <pkg_name>mobile/tct-bundle-native-utc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-libstorage-native-utc" category=" UnitTestCases ">\r
-    <auto_tcn>31</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>31</total_tcn>\r
-    <pkg_name>mobile/tct-libstorage-native-utc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-url-download-native-itc" category=" IntegrationTestCases ">\r
-    <auto_tcn>27</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>27</total_tcn>\r
-    <pkg_name>mobile/tct-url-download-native-itc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-capi-ui-inputmethod-native-utc" category=" UnitTestCases ">\r
-    <auto_tcn>99</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>99</total_tcn>\r
-    <pkg_name>mobile/tct-capi-ui-inputmethod-native-utc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-application-native-itc" category=" IntegrationTestCases ">\r
-    <auto_tcn>55</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>55</total_tcn>\r
-    <pkg_name>mobile/tct-application-native-itc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-contacts-service2-native-utc" category=" UnitTestCases ">\r
-    <auto_tcn>200</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>200</total_tcn>\r
-    <pkg_name>mobile/tct-contacts-service2-native-utc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-minicontrol-native-utc" category=" UnitTestCases ">\r
-    <auto_tcn>11</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>11</total_tcn>\r
-    <pkg_name>mobile/tct-minicontrol-native-utc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-player-native-utc" category=" UnitTestCases ">\r
-    <auto_tcn>191</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>191</total_tcn>\r
-    <pkg_name>mobile/tct-player-native-utc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-voice-control-elm-native-utc" category=" UnitTestCases ">\r
-    <auto_tcn>71</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>71</total_tcn>\r
-    <pkg_name>mobile/tct-voice-control-elm-native-utc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-appcore-agent-native-utc" category=" UnitTestCases ">\r
-    <auto_tcn>11</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>11</total_tcn>\r
-    <pkg_name>mobile/tct-appcore-agent-native-utc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-device-native-ctc" category=" CompatibilityTestCases ">\r
-    <auto_tcn>1</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>1</total_tcn>\r
-    <pkg_name>mobile/tct-device-native-ctc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-system-info-native-utc" category=" UnitTestCases ">\r
-    <auto_tcn>12</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>12</total_tcn>\r
-    <pkg_name>mobile/tct-system-info-native-utc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-application-native-utc" category=" UnitTestCases ">\r
-    <auto_tcn>268</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>268</total_tcn>\r
-    <pkg_name>mobile/tct-application-native-utc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-data-control-native-utc" category=" UnitTestCases ">\r
-    <auto_tcn>89</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>89</total_tcn>\r
-    <pkg_name>mobile/tct-data-control-native-utc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-wifi-direct-native-itc" category=" IntegrationTestCases ">\r
-    <auto_tcn>38</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>38</total_tcn>\r
-    <pkg_name>mobile/tct-wifi-direct-native-itc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-email-native-utc" category=" UnitTestCases ">\r
-    <auto_tcn>24</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>24</total_tcn>\r
-    <pkg_name>mobile/tct-email-native-utc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-tts-native-utc" category=" UnitTestCases ">\r
-    <auto_tcn>104</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>104</total_tcn>\r
-    <pkg_name>mobile/tct-tts-native-utc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-device-native-utc" category=" UnitTestCases ">\r
-    <auto_tcn>59</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>59</total_tcn>\r
-    <pkg_name>mobile/tct-device-native-utc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-sound-manager-native-ctc" category=" CompatibilityTestCases ">\r
-    <auto_tcn>1</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>1</total_tcn>\r
-    <pkg_name>mobile/tct-sound-manager-native-ctc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-image-util-native-utc" category=" UnitTestCases ">\r
-    <auto_tcn>215</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>215</total_tcn>\r
-    <pkg_name>mobile/tct-image-util-native-utc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-nfc-native-utc" category=" UnitTestCases ">\r
-    <auto_tcn>157</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>157</total_tcn>\r
-    <pkg_name>mobile/tct-nfc-native-utc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-runtime-info-native-itc" category=" IntegrationTestCases ">\r
-    <auto_tcn>8</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>8</total_tcn>\r
-    <pkg_name>mobile/tct-runtime-info-native-itc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-metadata-editor-native-itc" category=" IntegrationTestCases ">\r
-    <auto_tcn>7</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>7</total_tcn>\r
-    <pkg_name>mobile/tct-metadata-editor-native-itc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-dali-toolkit-native-itc" category=" IntegrationTestCases ">\r
-    <auto_tcn>238</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>238</total_tcn>\r
-    <pkg_name>mobile/tct-dali-toolkit-native-itc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-efl-util-native-utc" category=" UnitTestCases ">\r
-    <auto_tcn>45</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>45</total_tcn>\r
-    <pkg_name>mobile/tct-efl-util-native-utc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-libstorage64-native-utc" category=" UnitTestCases ">\r
-    <auto_tcn>31</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>31</total_tcn>\r
-    <pkg_name>mobile/tct-libstorage64-native-utc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-device-native-itc" category=" IntegrationTestCases ">\r
-    <auto_tcn>16</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>16</total_tcn>\r
-    <pkg_name>mobile/tct-device-native-itc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-recorder-native-itc" category=" IntegrationTestCases ">\r
-    <auto_tcn>33</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>33</total_tcn>\r
-    <pkg_name>mobile/tct-recorder-native-itc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-dali-toolkit-native-utc" category=" UnitTestCases ">\r
-    <auto_tcn>435</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>435</total_tcn>\r
-    <pkg_name>mobile/tct-dali-toolkit-native-utc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-mediacodec-native-ctc" category=" CompatibilityTestCases ">\r
-    <auto_tcn>1</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>1</total_tcn>\r
-    <pkg_name>mobile/tct-mediacodec-native-ctc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-player-native-itc" category=" IntegrationTestCases ">\r
-    <auto_tcn>55</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>55</total_tcn>\r
-    <pkg_name>mobile/tct-player-native-itc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-mime-type-native-itc" category=" IntegrationTestCases ">\r
-    <auto_tcn>2</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>2</total_tcn>\r
-    <pkg_name>mobile/tct-mime-type-native-itc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-tts-native-itc" category=" IntegrationTestCases ">\r
-    <auto_tcn>14</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>14</total_tcn>\r
-    <pkg_name>mobile/tct-tts-native-itc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-badge-native-itc" category=" IntegrationTestCases ">\r
-    <auto_tcn>6</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>6</total_tcn>\r
-    <pkg_name>mobile/tct-badge-native-itc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-wifi-native-itc" category=" IntegrationTestCases ">\r
-    <auto_tcn>60</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>60</total_tcn>\r
-    <pkg_name>mobile/tct-wifi-native-itc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-iotcon-native-utc" category=" UnitTestCases ">\r
-    <auto_tcn>346</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>346</total_tcn>\r
-    <pkg_name>mobile/tct-iotcon-native-utc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-sync-manager-native-itc" category=" IntegrationTestCases ">\r
-    <auto_tcn>5</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>5</total_tcn>\r
-    <pkg_name>mobile/tct-sync-manager-native-itc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-libstorage-native-itc" category=" IntegrationTestCases ">\r
-    <auto_tcn>10</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>10</total_tcn>\r
-    <pkg_name>mobile/tct-libstorage-native-itc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-url-download-native-utc" category=" UnitTestCases ">\r
-    <auto_tcn>121</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>121</total_tcn>\r
-    <pkg_name>mobile/tct-url-download-native-utc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-stt-native-itc" category=" IntegrationTestCases ">\r
-    <auto_tcn>20</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>20</total_tcn>\r
-    <pkg_name>mobile/tct-stt-native-itc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-stt-native-utc" category=" UnitTestCases ">\r
-    <auto_tcn>88</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>88</total_tcn>\r
-    <pkg_name>mobile/tct-stt-native-utc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-recorder-native-utc" category=" UnitTestCases ">\r
-    <auto_tcn>151</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>151</total_tcn>\r
-    <pkg_name>mobile/tct-recorder-native-utc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-context-native-itc" category=" IntegrationTestCases ">\r
-    <auto_tcn>29</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>29</total_tcn>\r
-    <pkg_name>mobile/tct-context-native-itc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-mediastreamrecorder-native-itc" category=" IntegrationTestCases ">\r
-    <auto_tcn>29</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>29</total_tcn>\r
-    <pkg_name>mobile/tct-mediastreamrecorder-native-itc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-runtime-info-native-utc" category=" UnitTestCases ">\r
-    <auto_tcn>126</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>126</total_tcn>\r
-    <pkg_name>mobile/tct-runtime-info-native-utc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-bluetooth-native-utc" category=" UnitTestCases ">\r
-    <auto_tcn>346</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>346</total_tcn>\r
-    <pkg_name>mobile/tct-bluetooth-native-utc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-location-manager-native-ctc" category=" CompatibilityTestCases ">\r
-    <auto_tcn>1</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>1</total_tcn>\r
-    <pkg_name>mobile/tct-location-manager-native-ctc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-telephony-native-ctc" category=" CompatibilityTestCases ">\r
-    <auto_tcn>1</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>1</total_tcn>\r
-    <pkg_name>mobile/tct-telephony-native-ctc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-dali-adaptor-native-itc" category=" IntegrationTestCases ">\r
-    <auto_tcn>16</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>16</total_tcn>\r
-    <pkg_name>mobile/tct-dali-adaptor-native-itc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-tbm-native-itc" category=" IntegrationTestCases ">\r
-    <auto_tcn>7</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>7</total_tcn>\r
-    <pkg_name>mobile/tct-tbm-native-itc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-media-content-native-itc" category=" IntegrationTestCases ">\r
-    <auto_tcn>200</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>200</total_tcn>\r
-    <pkg_name>mobile/tct-media-content-native-itc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-libfeedback-native-utc" category=" UnitTestCases ">\r
-    <auto_tcn>13</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>13</total_tcn>\r
-    <pkg_name>mobile/tct-libfeedback-native-utc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-capi-media-streamer-native-itc" category=" IntegrationTestCases ">\r
-    <auto_tcn>14</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>14</total_tcn>\r
-    <pkg_name>mobile/tct-capi-media-streamer-native-itc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-notification-native-itc" category=" IntegrationTestCases ">\r
-    <auto_tcn>30</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>30</total_tcn>\r
-    <pkg_name>mobile/tct-notification-native-itc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-contacts-service2-native-itc" category=" IntegrationTestCases ">\r
-    <auto_tcn>81</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>81</total_tcn>\r
-    <pkg_name>mobile/tct-contacts-service2-native-itc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-widget_service-native-itc" category=" IntegrationTestCases ">\r
-    <auto_tcn>18</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>18</total_tcn>\r
-    <pkg_name>mobile/tct-widget_service-native-itc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-location-manager-native-itc" category=" IntegrationTestCases ">\r
-    <auto_tcn>43</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>43</total_tcn>\r
-    <pkg_name>mobile/tct-location-manager-native-itc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-image-util-native-ctc" category=" CompatibilityTestCases ">\r
-    <auto_tcn>2</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>2</total_tcn>\r
-    <pkg_name>mobile/tct-image-util-native-ctc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-service-adaptor-native-itc" category=" IntegrationTestCases ">\r
-    <auto_tcn>24</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>24</total_tcn>\r
-    <pkg_name>mobile/tct-service-adaptor-native-itc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-privilege-info-native-itc" category=" IntegrationTestCases ">\r
-    <auto_tcn>4</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>4</total_tcn>\r
-    <pkg_name>mobile/tct-privilege-info-native-itc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-media-vision-native-itc" category=" IntegrationTestCases ">\r
-    <auto_tcn>37</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>37</total_tcn>\r
-    <pkg_name>mobile/tct-media-vision-native-itc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-vpn-native-utc" category=" UnitTestCases ">\r
-    <auto_tcn>30</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>30</total_tcn>\r
-    <pkg_name>mobile/tct-vpn-native-utc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-image-util-native-itc" category=" IntegrationTestCases ">\r
-    <auto_tcn>33</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>33</total_tcn>\r
-    <pkg_name>mobile/tct-image-util-native-itc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-connection-native-itc" category=" IntegrationTestCases ">\r
-    <auto_tcn>61</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>61</total_tcn>\r
-    <pkg_name>mobile/tct-connection-native-itc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-nfc-native-itc" category=" IntegrationTestCases ">\r
-    <auto_tcn>40</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>40</total_tcn>\r
-    <pkg_name>mobile/tct-nfc-native-itc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-ttrace-native-itc" category=" IntegrationTestCases ">\r
-    <auto_tcn>3</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>3</total_tcn>\r
-    <pkg_name>mobile/tct-ttrace-native-itc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-phonenumber-utils-native-itc" category=" IntegrationTestCases ">\r
-    <auto_tcn>4</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>4</total_tcn>\r
-    <pkg_name>mobile/tct-phonenumber-utils-native-itc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-bluetooth-native-itc" category=" IntegrationTestCases ">\r
-    <auto_tcn>45</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>45</total_tcn>\r
-    <pkg_name>mobile/tct-bluetooth-native-itc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-motion-native-utc" category=" UnitTestCases ">\r
-    <auto_tcn>23</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>23</total_tcn>\r
-    <pkg_name>mobile/tct-motion-native-utc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-system-info-native-itc" category=" IntegrationTestCases ">\r
-    <auto_tcn>4</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>4</total_tcn>\r
-    <pkg_name>mobile/tct-system-info-native-itc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-connection-native-utc" category=" UnitTestCases ">\r
-    <auto_tcn>172</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>172</total_tcn>\r
-    <pkg_name>mobile/tct-connection-native-utc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-webkit2-native-utc" category=" UnitTestCases ">\r
-    <auto_tcn>249</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>249</total_tcn>\r
-    <pkg_name>mobile/tct-webkit2-native-utc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-privilege-info-native-utc" category=" UnitTestCases ">\r
-    <auto_tcn>14</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>14</total_tcn>\r
-    <pkg_name>mobile/tct-privilege-info-native-utc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-native-common-native-itc" category=" IntegrationTestCases ">\r
-    <auto_tcn>2</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>2</total_tcn>\r
-    <pkg_name>mobile/tct-native-common-native-itc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-widget_viewer_evas-native-utc" category=" UnitTestCases ">\r
-    <auto_tcn>49</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>49</total_tcn>\r
-    <pkg_name>mobile/tct-widget_viewer_evas-native-utc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-filesystem-permission-native-ctc" category=" CompatibilityTestCases ">\r
-    <auto_tcn>32</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>32</total_tcn>\r
-    <pkg_name>mobile/tct-filesystem-permission-native-ctc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-capi-ui-inputmethod-manager-native-utc" category=" UnitTestCases ">\r
-    <auto_tcn>7</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>7</total_tcn>\r
-    <pkg_name>mobile/tct-capi-ui-inputmethod-manager-native-utc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-wifi-direct-native-utc" category=" UnitTestCases ">\r
-    <auto_tcn>140</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>140</total_tcn>\r
-    <pkg_name>mobile/tct-wifi-direct-native-utc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-widget_viewer_evas-native-itc" category=" IntegrationTestCases ">\r
-    <auto_tcn>23</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>23</total_tcn>\r
-    <pkg_name>mobile/tct-widget_viewer_evas-native-itc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-capi-message-port-native-itc" category=" IntegrationTestCases ">\r
-    <auto_tcn>6</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>6</total_tcn>\r
-    <pkg_name>mobile/tct-capi-message-port-native-itc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-messages-native-utc" category=" UnitTestCases ">\r
-    <auto_tcn>85</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>85</total_tcn>\r
-    <pkg_name>mobile/tct-messages-native-utc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-push-native-itc" category=" IntegrationTestCases ">\r
-    <auto_tcn>12</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>12</total_tcn>\r
-    <pkg_name>mobile/tct-push-native-itc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-sensor-native-ctc" category=" CompatibilityTestCases ">\r
-    <auto_tcn>9</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>9</total_tcn>\r
-    <pkg_name>mobile/tct-sensor-native-ctc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-appcore-agent-native-itc" category=" IntegrationTestCases ">\r
-    <auto_tcn>2</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>2</total_tcn>\r
-    <pkg_name>mobile/tct-appcore-agent-native-itc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-location-manager-native-utc" category=" UnitTestCases ">\r
-    <auto_tcn>143</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>143</total_tcn>\r
-    <pkg_name>mobile/tct-location-manager-native-utc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-camera-native-utc" category=" UnitTestCases ">\r
-    <auto_tcn>351</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>351</total_tcn>\r
-    <pkg_name>mobile/tct-camera-native-utc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-cairo-native-utc" category=" UnitTestCases ">\r
-    <auto_tcn>18</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>18</total_tcn>\r
-    <pkg_name>mobile/tct-cairo-native-utc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-streamrecorder-native-utc" category=" UnitTestCases ">\r
-    <auto_tcn>125</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>125</total_tcn>\r
-    <pkg_name>mobile/tct-streamrecorder-native-utc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-libstorage-native-ctc" category=" CompatibilityTestCases ">\r
-    <auto_tcn>2</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>2</total_tcn>\r
-    <pkg_name>mobile/tct-libstorage-native-ctc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-native-common-native-utc" category=" UnitTestCases ">\r
-    <auto_tcn>5</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>5</total_tcn>\r
-    <pkg_name>mobile/tct-native-common-native-utc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-metadata-editor-native-utc" category=" UnitTestCases ">\r
-    <auto_tcn>18</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>18</total_tcn>\r
-    <pkg_name>mobile/tct-metadata-editor-native-utc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-capi-maps-service-native-utc" category=" UnitTestCases ">\r
-    <auto_tcn>339</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>339</total_tcn>\r
-    <pkg_name>mobile/tct-capi-maps-service-native-utc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-mediacodec-native-itc" category=" IntegrationTestCases ">\r
-    <auto_tcn>17</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>17</total_tcn>\r
-    <pkg_name>mobile/tct-mediacodec-native-itc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-key-manager-native-utc" category=" UnitTestCases ">\r
-    <auto_tcn>127</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>127</total_tcn>\r
-    <pkg_name>mobile/tct-key-manager-native-utc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-efl-ext-native-itc" category=" IntegrationTestCases ">\r
-    <auto_tcn>4</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>4</total_tcn>\r
-    <pkg_name>mobile/tct-efl-ext-native-itc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-service-adaptor-native-utc" category=" UnitTestCases ">\r
-    <auto_tcn>125</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>125</total_tcn>\r
-    <pkg_name>mobile/tct-service-adaptor-native-utc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-metadata-extractor-native-utc" category=" UnitTestCases ">\r
-    <auto_tcn>23</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>23</total_tcn>\r
-    <pkg_name>mobile/tct-metadata-extractor-native-utc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-dlog-native-utc" category=" UnitTestCases ">\r
-    <auto_tcn>4</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>4</total_tcn>\r
-    <pkg_name>mobile/tct-dlog-native-utc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-capi-maps-service-native-itc" category=" IntegrationTestCases ">\r
-    <auto_tcn>70</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>70</total_tcn>\r
-    <pkg_name>mobile/tct-capi-maps-service-native-itc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-package-manager-native-utc" category=" UnitTestCases ">\r
-    <auto_tcn>92</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>92</total_tcn>\r
-    <pkg_name>mobile/tct-package-manager-native-utc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-sensor-native-utc" category=" UnitTestCases ">\r
-    <auto_tcn>62</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>62</total_tcn>\r
-    <pkg_name>mobile/tct-sensor-native-utc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-capi-mediamuxer-native-itc" category=" IntegrationTestCases ">\r
-    <auto_tcn>9</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>9</total_tcn>\r
-    <pkg_name>mobile/tct-capi-mediamuxer-native-itc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-video-util-native-ctc" category=" CompatibilityTestCases ">\r
-    <auto_tcn>6</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>6</total_tcn>\r
-    <pkg_name>mobile/tct-video-util-native-ctc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-widget_service-native-utc" category=" UnitTestCases ">\r
-    <auto_tcn>46</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>46</total_tcn>\r
-    <pkg_name>mobile/tct-widget_service-native-utc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-mime-type-native-utc" category=" UnitTestCases ">\r
-    <auto_tcn>15</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>15</total_tcn>\r
-    <pkg_name>mobile/tct-mime-type-native-utc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-eom-native-itc" category=" IntegrationTestCases ">\r
-    <auto_tcn>13</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>13</total_tcn>\r
-    <pkg_name>mobile/tct-eom-native-itc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-camera-native-ctc" category=" CompatibilityTestCases ">\r
-    <auto_tcn>1</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>1</total_tcn>\r
-    <pkg_name>mobile/tct-camera-native-ctc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-context-native-utc" category=" UnitTestCases ">\r
-    <auto_tcn>82</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>82</total_tcn>\r
-    <pkg_name>mobile/tct-context-native-utc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-radio-native-itc" category=" IntegrationTestCases ">\r
-    <auto_tcn>12</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>12</total_tcn>\r
-    <pkg_name>mobile/tct-radio-native-itc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-system-settings-native-utc" category=" UnitTestCases ">\r
-    <auto_tcn>78</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>78</total_tcn>\r
-    <pkg_name>mobile/tct-system-settings-native-utc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-metadata-extractor-native-itc" category=" IntegrationTestCases ">\r
-    <auto_tcn>8</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>8</total_tcn>\r
-    <pkg_name>mobile/tct-metadata-extractor-native-itc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-capi-message-port-native-utc" category=" UnitTestCases ">\r
-    <auto_tcn>53</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>53</total_tcn>\r
-    <pkg_name>mobile/tct-capi-message-port-native-utc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-video-util-native-utc" category=" UnitTestCases ">\r
-    <auto_tcn>43</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>43</total_tcn>\r
-    <pkg_name>mobile/tct-video-util-native-utc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-cairo-native-itc" category=" IntegrationTestCases ">\r
-    <auto_tcn>9</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>9</total_tcn>\r
-    <pkg_name>mobile/tct-cairo-native-itc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-calendar-service2-native-utc" category=" UnitTestCases ">\r
-    <auto_tcn>149</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>149</total_tcn>\r
-    <pkg_name>mobile/tct-calendar-service2-native-utc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-capi-ui-inputmethod-manager-native-itc" category=" IntegrationTestCases ">\r
-    <auto_tcn>2</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>2</total_tcn>\r
-    <pkg_name>mobile/tct-capi-ui-inputmethod-manager-native-itc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-shortcut-native-itc" category=" IntegrationTestCases ">\r
-    <auto_tcn>4</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>4</total_tcn>\r
-    <pkg_name>mobile/tct-shortcut-native-itc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-media-key-native-itc" category=" IntegrationTestCases ">\r
-    <auto_tcn>1</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>1</total_tcn>\r
-    <pkg_name>mobile/tct-media-key-native-itc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-geofence-manager-native-utc" category=" UnitTestCases ">\r
-    <auto_tcn>139</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>139</total_tcn>\r
-    <pkg_name>mobile/tct-geofence-manager-native-utc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-trace-native-utc" category=" UnitTestCases ">\r
-    <auto_tcn>5</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>5</total_tcn>\r
-    <pkg_name>mobile/tct-trace-native-utc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-platform-permission-native-ctc" category=" CompatibilityTestCases ">\r
-    <auto_tcn>54</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>54</total_tcn>\r
-    <pkg_name>mobile/tct-platform-permission-native-ctc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-dlog-native-itc" category=" IntegrationTestCases ">\r
-    <auto_tcn>2</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>2</total_tcn>\r
-    <pkg_name>mobile/tct-dlog-native-itc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-minicontrol-native-itc" category=" IntegrationTestCases ">\r
-    <auto_tcn>5</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>5</total_tcn>\r
-    <pkg_name>mobile/tct-minicontrol-native-itc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-audio-io-native-ctc" category=" CompatibilityTestCases ">\r
-    <auto_tcn>1</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>1</total_tcn>\r
-    <pkg_name>mobile/tct-audio-io-native-ctc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-oauth2-native-itc" category=" IntegrationTestCases ">\r
-    <auto_tcn>18</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>18</total_tcn>\r
-    <pkg_name>mobile/tct-oauth2-native-itc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-base-utils-native-utc" category=" UnitTestCases ">\r
-    <auto_tcn>884</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>884</total_tcn>\r
-    <pkg_name>mobile/tct-base-utils-native-utc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-media-controller-native-itc" category=" IntegrationTestCases ">\r
-    <auto_tcn>28</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>28</total_tcn>\r
-    <pkg_name>mobile/tct-media-controller-native-itc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-system-info-native-ctc" category=" CompatibilityTestCases ">\r
-    <auto_tcn>4</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>4</total_tcn>\r
-    <pkg_name>mobile/tct-system-info-native-ctc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-key-manager-native-itc" category=" IntegrationTestCases ">\r
-    <auto_tcn>40</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>40</total_tcn>\r
-    <pkg_name>mobile/tct-key-manager-native-itc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-thumbnail-util-native-utc" category=" UnitTestCases ">\r
-    <auto_tcn>14</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>14</total_tcn>\r
-    <pkg_name>mobile/tct-thumbnail-util-native-utc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-connection-native-ctc" category=" CompatibilityTestCases ">\r
-    <auto_tcn>1</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>1</total_tcn>\r
-    <pkg_name>mobile/tct-connection-native-ctc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-runtime-info-native-ctc" category=" CompatibilityTestCases ">\r
-    <auto_tcn>15</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>15</total_tcn>\r
-    <pkg_name>mobile/tct-runtime-info-native-ctc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-smartcard-native-utc" category=" UnitTestCases ">\r
-    <auto_tcn>33</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>33</total_tcn>\r
-    <pkg_name>mobile/tct-smartcard-native-utc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-smartcard-native-itc" category=" IntegrationTestCases ">\r
-    <auto_tcn>8</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>8</total_tcn>\r
-    <pkg_name>mobile/tct-smartcard-native-itc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-mtp-native-utc" category=" UnitTestCases ">\r
-    <auto_tcn>37</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>37</total_tcn>\r
-    <pkg_name>mobile/tct-mtp-native-utc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-fido-client-native-itc" category=" IntegrationTestCases ">\r
-    <auto_tcn>20</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>20</total_tcn>\r
-    <pkg_name>mobile/tct-fido-client-native-itc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-oauth2-native-utc" category=" UnitTestCases ">\r
-    <auto_tcn>89</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>89</total_tcn>\r
-    <pkg_name>mobile/tct-oauth2-native-utc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-wifi-direct-native-ctc" category=" CompatibilityTestCases ">\r
-    <auto_tcn>1</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>1</total_tcn>\r
-    <pkg_name>mobile/tct-wifi-direct-native-ctc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-accounts-svc-native-utc" category=" UnitTestCases ">\r
-    <auto_tcn>147</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>147</total_tcn>\r
-    <pkg_name>mobile/tct-accounts-svc-native-utc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-attach-panel-native-utc" category=" UnitTestCases ">\r
-    <auto_tcn>24</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>24</total_tcn>\r
-    <pkg_name>mobile/tct-attach-panel-native-utc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-voice-control-native-itc" category=" IntegrationTestCases ">\r
-    <auto_tcn>22</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>22</total_tcn>\r
-    <pkg_name>mobile/tct-voice-control-native-itc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-capi-mediademuxer-native-itc" category=" IntegrationTestCases ">\r
-    <auto_tcn>12</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>12</total_tcn>\r
-    <pkg_name>mobile/tct-capi-mediademuxer-native-itc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-dali-core-native-utc" category=" UnitTestCases ">\r
-    <auto_tcn>1645</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>1645</total_tcn>\r
-    <pkg_name>mobile/tct-dali-core-native-utc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-package-manager-native-itc" category=" IntegrationTestCases ">\r
-    <auto_tcn>38</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>38</total_tcn>\r
-    <pkg_name>mobile/tct-package-manager-native-itc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-email-native-itc" category=" IntegrationTestCases ">\r
-    <auto_tcn>9</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>9</total_tcn>\r
-    <pkg_name>mobile/tct-email-native-itc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-capi-media-tool-native-itc" category=" IntegrationTestCases ">\r
-    <auto_tcn>51</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>51</total_tcn>\r
-    <pkg_name>mobile/tct-capi-media-tool-native-itc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-webkit2-native-itc" category=" IntegrationTestCases ">\r
-    <auto_tcn>103</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>103</total_tcn>\r
-    <pkg_name>mobile/tct-webkit2-native-itc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-notification-native-utc" category=" UnitTestCases ">\r
-    <auto_tcn>229</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>229</total_tcn>\r
-    <pkg_name>mobile/tct-notification-native-utc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-sound-manager-native-utc" category=" UnitTestCases ">\r
-    <auto_tcn>101</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>101</total_tcn>\r
-    <pkg_name>mobile/tct-sound-manager-native-utc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-voice-control-native-utc" category=" UnitTestCases ">\r
-    <auto_tcn>97</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>97</total_tcn>\r
-    <pkg_name>mobile/tct-voice-control-native-utc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-telephony-native-itc" category=" IntegrationTestCases ">\r
-    <auto_tcn>38</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>38</total_tcn>\r
-    <pkg_name>mobile/tct-telephony-native-itc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-eom-native-utc" category=" UnitTestCases ">\r
-    <auto_tcn>42</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>42</total_tcn>\r
-    <pkg_name>mobile/tct-eom-native-utc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-audio-io-native-itc" category=" IntegrationTestCases ">\r
-    <auto_tcn>32</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>32</total_tcn>\r
-    <pkg_name>mobile/tct-audio-io-native-itc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-shortcut-native-utc" category=" UnitTestCases ">\r
-    <auto_tcn>8</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>8</total_tcn>\r
-    <pkg_name>mobile/tct-shortcut-native-utc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-tone-player-native-itc" category=" IntegrationTestCases ">\r
-    <auto_tcn>2</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>2</total_tcn>\r
-    <pkg_name>mobile/tct-tone-player-native-itc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-app-manager-native-utc" category=" UnitTestCases ">\r
-    <auto_tcn>130</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>130</total_tcn>\r
-    <pkg_name>mobile/tct-app-manager-native-utc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-screen-mirroring-native-utc" category=" UnitTestCases ">\r
-    <auto_tcn>55</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>55</total_tcn>\r
-    <pkg_name>mobile/tct-screen-mirroring-native-utc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-mediamuxer-native-utc" category=" UnitTestCases ">\r
-    <auto_tcn>30</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>30</total_tcn>\r
-    <pkg_name>mobile/tct-mediamuxer-native-utc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-media-key-native-utc" category=" UnitTestCases ">\r
-    <auto_tcn>3</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>3</total_tcn>\r
-    <pkg_name>mobile/tct-media-key-native-utc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-wav-player-native-utc" category=" UnitTestCases ">\r
-    <auto_tcn>13</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>13</total_tcn>\r
-    <pkg_name>mobile/tct-wav-player-native-utc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-libfeedback-native-itc" category=" IntegrationTestCases ">\r
-    <auto_tcn>4</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>4</total_tcn>\r
-    <pkg_name>mobile/tct-libfeedback-native-itc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-sensor-native-itc" category=" IntegrationTestCases ">\r
-    <auto_tcn>25</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>25</total_tcn>\r
-    <pkg_name>mobile/tct-sensor-native-itc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-data-control-native-itc" category=" IntegrationTestCases ">\r
-    <auto_tcn>33</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>33</total_tcn>\r
-    <pkg_name>mobile/tct-data-control-native-itc-3.0.zip</pkg_name>\r
-  </suite>\r
-</ns3:testplan>\r
-\r
diff --git a/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/shell/plan/Native_Full_tv_2.4.xml b/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/shell/plan/Native_Full_tv_2.4.xml
deleted file mode 100755 (executable)
index d8fe1df..0000000
+++ /dev/null
@@ -1,543 +0,0 @@
-<ns3:testplan name="Native_Full_tv_2.4" profile="tv" xmlns="" xmlns:ns3="http://www.example.org/plan/">
-  <execute_type>All</execute_type>
-  <suite launcher="WRTLauncher" name="tct-capi-media-tool-native-utc">
-    <auto_tcn>110</auto_tcn>
-    <manual_tcn>0</manual_tcn>
-    <total_tcn>110</total_tcn>
-    <pkg_name>tv/tct-capi-media-tool-native-utc-2.4.zip</pkg_name>
-  </suite>
-  <suite launcher="WRTLauncher" name="tct-appcore-agent-native-itc">
-    <auto_tcn>2</auto_tcn>
-    <manual_tcn>0</manual_tcn>
-    <total_tcn>2</total_tcn>
-    <pkg_name>tv/tct-appcore-agent-native-itc-2.4.zip</pkg_name>
-  </suite>
-  <suite launcher="WRTLauncher" name="tct-libstorage-native-ctc">
-    <auto_tcn>2</auto_tcn>
-    <manual_tcn>0</manual_tcn>
-    <total_tcn>2</total_tcn>
-    <pkg_name>tv/tct-libstorage-native-ctc-2.4.zip</pkg_name>
-  </suite>
-  <suite launcher="WRTLauncher" name="tct-metadata-extractor-native-itc">
-    <auto_tcn>8</auto_tcn>
-    <manual_tcn>0</manual_tcn>
-    <total_tcn>8</total_tcn>
-    <pkg_name>tv/tct-metadata-extractor-native-itc-2.4.zip</pkg_name>
-  </suite>
-  <suite launcher="WRTLauncher" name="tct-thumbnail-util-native-itc">
-    <auto_tcn>6</auto_tcn>
-    <manual_tcn>0</manual_tcn>
-    <total_tcn>6</total_tcn>
-    <pkg_name>tv/tct-thumbnail-util-native-itc-2.4.zip</pkg_name>
-  </suite>
-  <suite launcher="WRTLauncher" name="tct-media-content-native-itc">
-    <auto_tcn>181</auto_tcn>
-    <manual_tcn>0</manual_tcn>
-    <total_tcn>181</total_tcn>
-    <pkg_name>tv/tct-media-content-native-itc-2.4.zip</pkg_name>
-  </suite>
-  <suite launcher="WRTLauncher" name="tct-package-manager-native-itc">
-    <auto_tcn>38</auto_tcn>
-    <manual_tcn>0</manual_tcn>
-    <total_tcn>38</total_tcn>
-    <pkg_name>tv/tct-package-manager-native-itc-2.4.zip</pkg_name>
-  </suite>
-  <suite launcher="WRTLauncher" name="tct-bundle-native-itc">
-    <auto_tcn>9</auto_tcn>
-    <manual_tcn>0</manual_tcn>
-    <total_tcn>9</total_tcn>
-    <pkg_name>tv/tct-bundle-native-itc-2.4.zip</pkg_name>
-  </suite>
-  <suite launcher="WRTLauncher" name="tct-system-info-native-ctc">
-    <auto_tcn>4</auto_tcn>
-    <manual_tcn>0</manual_tcn>
-    <total_tcn>4</total_tcn>
-    <pkg_name>tv/tct-system-info-native-ctc-2.4.zip</pkg_name>
-  </suite>
-  <suite launcher="WRTLauncher" name="tct-mime-type-native-utc">
-    <auto_tcn>15</auto_tcn>
-    <manual_tcn>0</manual_tcn>
-    <total_tcn>15</total_tcn>
-    <pkg_name>tv/tct-mime-type-native-utc-2.4.zip</pkg_name>
-  </suite>
-  <suite launcher="WRTLauncher" name="tct-dlog-native-utc">
-    <auto_tcn>4</auto_tcn>
-    <manual_tcn>0</manual_tcn>
-    <total_tcn>4</total_tcn>
-    <pkg_name>tv/tct-dlog-native-utc-2.4.zip</pkg_name>
-  </suite>
-  <suite launcher="WRTLauncher" name="tct-media-content-native-utc">
-    <auto_tcn>475</auto_tcn>
-    <manual_tcn>0</manual_tcn>
-    <total_tcn>475</total_tcn>
-    <pkg_name>tv/tct-media-content-native-utc-2.4.zip</pkg_name>
-  </suite>
-  <suite launcher="WRTLauncher" name="tct-metadata-editor-native-utc">
-    <auto_tcn>18</auto_tcn>
-    <manual_tcn>0</manual_tcn>
-    <total_tcn>18</total_tcn>
-    <pkg_name>tv/tct-metadata-editor-native-utc-2.4.zip</pkg_name>
-  </suite>
-  <suite launcher="WRTLauncher" name="tct-audio-io-native-utc">
-    <auto_tcn>72</auto_tcn>
-    <manual_tcn>0</manual_tcn>
-    <total_tcn>72</total_tcn>
-    <pkg_name>tv/tct-audio-io-native-utc-2.4.zip</pkg_name>
-  </suite>
-  <suite launcher="WRTLauncher" name="tct-media-controller-native-utc">
-    <auto_tcn>85</auto_tcn>
-    <manual_tcn>0</manual_tcn>
-    <total_tcn>85</total_tcn>
-    <pkg_name>tv/tct-media-controller-native-utc-2.4.zip</pkg_name>
-  </suite>
-  <suite launcher="WRTLauncher" name="tct-opengl-native-ctc">
-    <auto_tcn>3</auto_tcn>
-    <manual_tcn>0</manual_tcn>
-    <total_tcn>3</total_tcn>
-    <pkg_name>tv/tct-opengl-native-ctc-2.4.zip</pkg_name>
-  </suite>
-  <suite launcher="WRTLauncher" name="tct-capi-message-port-native-utc">
-    <auto_tcn>52</auto_tcn>
-    <manual_tcn>0</manual_tcn>
-    <total_tcn>52</total_tcn>
-    <pkg_name>tv/tct-capi-message-port-native-utc-2.4.zip</pkg_name>
-  </suite>
-  <suite launcher="WRTLauncher" name="tct-wav-player-native-itc">
-    <auto_tcn>1</auto_tcn>
-    <manual_tcn>0</manual_tcn>
-    <total_tcn>1</total_tcn>
-    <pkg_name>tv/tct-wav-player-native-itc-2.4.zip</pkg_name>
-  </suite>
-  <suite launcher="WRTLauncher" name="tct-package-manager-native-utc">
-    <auto_tcn>102</auto_tcn>
-    <manual_tcn>0</manual_tcn>
-    <total_tcn>102</total_tcn>
-    <pkg_name>tv/tct-package-manager-native-utc-2.4.zip</pkg_name>
-  </suite>
-  <suite launcher="WRTLauncher" name="tct-key-manager-native-utc">
-    <auto_tcn>103</auto_tcn>
-    <manual_tcn>0</manual_tcn>
-    <total_tcn>103</total_tcn>
-    <pkg_name>tv/tct-key-manager-native-utc-2.4.zip</pkg_name>
-  </suite>
-  <suite launcher="WRTLauncher" name="tct-tone-player-native-utc">
-    <auto_tcn>4</auto_tcn>
-    <manual_tcn>0</manual_tcn>
-    <total_tcn>4</total_tcn>
-    <pkg_name>tv/tct-tone-player-native-utc-2.4.zip</pkg_name>
-  </suite>
-  <suite launcher="WRTLauncher" name="tct-bluetooth-native-utc">
-    <auto_tcn>169</auto_tcn>
-    <manual_tcn>0</manual_tcn>
-    <total_tcn>169</total_tcn>
-    <pkg_name>tv/tct-bluetooth-native-utc-2.4.zip</pkg_name>
-  </suite>
-  <suite launcher="WRTLauncher" name="tct-media-key-native-itc">
-    <auto_tcn>1</auto_tcn>
-    <manual_tcn>0</manual_tcn>
-    <total_tcn>1</total_tcn>
-    <pkg_name>tv/tct-media-key-native-itc-2.4.zip</pkg_name>
-  </suite>
-  <suite launcher="WRTLauncher" name="tct-app-manager-native-utc">
-    <auto_tcn>121</auto_tcn>
-    <manual_tcn>0</manual_tcn>
-    <total_tcn>121</total_tcn>
-    <pkg_name>tv/tct-app-manager-native-utc-2.4.zip</pkg_name>
-  </suite>
-  <suite launcher="WRTLauncher" name="tct-bundle-native-utc">
-    <auto_tcn>53</auto_tcn>
-    <manual_tcn>0</manual_tcn>
-    <total_tcn>53</total_tcn>
-    <pkg_name>tv/tct-bundle-native-utc-2.4.zip</pkg_name>
-  </suite>
-  <suite launcher="WRTLauncher" name="tct-mime-type-native-itc">
-    <auto_tcn>2</auto_tcn>
-    <manual_tcn>0</manual_tcn>
-    <total_tcn>2</total_tcn>
-    <pkg_name>tv/tct-mime-type-native-itc-2.4.zip</pkg_name>
-  </suite>
-  <suite launcher="WRTLauncher" name="tct-webkit2-native-utc">
-    <auto_tcn>184</auto_tcn>
-    <manual_tcn>0</manual_tcn>
-    <total_tcn>184</total_tcn>
-    <pkg_name>tv/tct-webkit2-native-utc-2.4.zip</pkg_name>
-  </suite>
-  <suite launcher="WRTLauncher" name="tct-image-util-native-ctc">
-    <auto_tcn>2</auto_tcn>
-    <manual_tcn>0</manual_tcn>
-    <total_tcn>2</total_tcn>
-    <pkg_name>tv/tct-image-util-native-ctc-2.4.zip</pkg_name>
-  </suite>
-  <suite launcher="WRTLauncher" name="tct-libstorage64-native-utc">
-    <auto_tcn>31</auto_tcn>
-    <manual_tcn>0</manual_tcn>
-    <total_tcn>31</total_tcn>
-    <pkg_name>tv/tct-libstorage64-native-utc-2.4.zip</pkg_name>
-  </suite>
-  <suite launcher="WRTLauncher" name="tct-tts-native-itc">
-    <auto_tcn>14</auto_tcn>
-    <manual_tcn>0</manual_tcn>
-    <total_tcn>14</total_tcn>
-    <pkg_name>tv/tct-tts-native-itc-2.4.zip</pkg_name>
-  </suite>
-  <suite launcher="WRTLauncher" name="tct-wav-player-native-utc">
-    <auto_tcn>9</auto_tcn>
-    <manual_tcn>0</manual_tcn>
-    <total_tcn>9</total_tcn>
-    <pkg_name>tv/tct-wav-player-native-utc-2.4.zip</pkg_name>
-  </suite>
-  <suite launcher="WRTLauncher" name="tct-tts-native-utc">
-    <auto_tcn>104</auto_tcn>
-    <manual_tcn>0</manual_tcn>
-    <total_tcn>104</total_tcn>
-    <pkg_name>tv/tct-tts-native-utc-2.4.zip</pkg_name>
-  </suite>
-  <suite launcher="WRTLauncher" name="tct-screen-mirroring-native-itc">
-    <auto_tcn>5</auto_tcn>
-    <manual_tcn>0</manual_tcn>
-    <total_tcn>5</total_tcn>
-    <pkg_name>tv/tct-screen-mirroring-native-itc-2.4.zip</pkg_name>
-  </suite>
-  <suite launcher="WRTLauncher" name="tct-screen-mirroring-native-utc">
-    <auto_tcn>33</auto_tcn>
-    <manual_tcn>0</manual_tcn>
-    <total_tcn>33</total_tcn>
-    <pkg_name>tv/tct-screen-mirroring-native-utc-2.4.zip</pkg_name>
-  </suite>
-  <suite launcher="WRTLauncher" name="tct-tbm-native-utc">
-    <auto_tcn>17</auto_tcn>
-    <manual_tcn>0</manual_tcn>
-    <total_tcn>17</total_tcn>
-    <pkg_name>tv/tct-tbm-native-utc-2.4.zip</pkg_name>
-  </suite>
-  <suite launcher="WRTLauncher" name="tct-tone-player-native-itc">
-    <auto_tcn>1</auto_tcn>
-    <manual_tcn>0</manual_tcn>
-    <total_tcn>1</total_tcn>
-    <pkg_name>tv/tct-tone-player-native-itc-2.4.zip</pkg_name>
-  </suite>
-  <suite launcher="WRTLauncher" name="tct-system-info-native-utc">
-    <auto_tcn>12</auto_tcn>
-    <manual_tcn>0</manual_tcn>
-    <total_tcn>12</total_tcn>
-    <pkg_name>tv/tct-system-info-native-utc-2.4.zip</pkg_name>
-  </suite>
-  <suite launcher="WRTLauncher" name="tct-thumbnail-util-native-utc">
-    <auto_tcn>14</auto_tcn>
-    <manual_tcn>0</manual_tcn>
-    <total_tcn>14</total_tcn>
-    <pkg_name>tv/tct-thumbnail-util-native-utc-2.4.zip</pkg_name>
-  </suite>
-  <suite launcher="WRTLauncher" name="tct-dlog-native-itc">
-    <auto_tcn>2</auto_tcn>
-    <manual_tcn>0</manual_tcn>
-    <total_tcn>2</total_tcn>
-    <pkg_name>tv/tct-dlog-native-itc-2.4.zip</pkg_name>
-  </suite>
-  <suite launcher="WRTLauncher" name="tct-voice-control-native-utc">
-    <auto_tcn>74</auto_tcn>
-    <manual_tcn>0</manual_tcn>
-    <total_tcn>74</total_tcn>
-    <pkg_name>tv/tct-voice-control-native-utc-2.4.zip</pkg_name>
-  </suite>
-  <suite launcher="WRTLauncher" name="tct-bluetooth-native-itc">
-    <auto_tcn>23</auto_tcn>
-    <manual_tcn>0</manual_tcn>
-    <total_tcn>23</total_tcn>
-    <pkg_name>tv/tct-bluetooth-native-itc-2.4.zip</pkg_name>
-  </suite>
-  <suite launcher="WRTLauncher" name="tct-native-common-native-utc">
-    <auto_tcn>5</auto_tcn>
-    <manual_tcn>0</manual_tcn>
-    <total_tcn>5</total_tcn>
-    <pkg_name>tv/tct-native-common-native-utc-2.4.zip</pkg_name>
-  </suite>
-  <suite launcher="WRTLauncher" name="tct-application-native-utc">
-    <auto_tcn>269</auto_tcn>
-    <manual_tcn>0</manual_tcn>
-    <total_tcn>269</total_tcn>
-    <pkg_name>tv/tct-application-native-utc-2.4.zip</pkg_name>
-  </suite>
-  <suite launcher="WRTLauncher" name="tct-wifi-native-utc">
-    <auto_tcn>154</auto_tcn>
-    <manual_tcn>0</manual_tcn>
-    <total_tcn>154</total_tcn>
-    <pkg_name>tv/tct-wifi-native-utc-2.4.zip</pkg_name>
-  </suite>
-  <suite launcher="WRTLauncher" name="tct-metadata-extractor-native-utc">
-    <auto_tcn>23</auto_tcn>
-    <manual_tcn>0</manual_tcn>
-    <total_tcn>23</total_tcn>
-    <pkg_name>tv/tct-metadata-extractor-native-utc-2.4.zip</pkg_name>
-  </suite>
-  <suite launcher="WRTLauncher" name="tct-sound-manager-native-itc">
-    <auto_tcn>21</auto_tcn>
-    <manual_tcn>0</manual_tcn>
-    <total_tcn>21</total_tcn>
-    <pkg_name>tv/tct-sound-manager-native-itc-2.4.zip</pkg_name>
-  </suite>
-  <suite launcher="WRTLauncher" name="tct-runtime-info-native-ctc">
-    <auto_tcn>15</auto_tcn>
-    <manual_tcn>0</manual_tcn>
-    <total_tcn>15</total_tcn>
-    <pkg_name>tv/tct-runtime-info-native-ctc-2.4.zip</pkg_name>
-  </suite>
-  <suite launcher="WRTLauncher" name="tct-camera-native-utc">
-    <auto_tcn>323</auto_tcn>
-    <manual_tcn>0</manual_tcn>
-    <total_tcn>323</total_tcn>
-    <pkg_name>tv/tct-camera-native-utc-2.4.zip</pkg_name>
-  </suite>
-  <suite launcher="WRTLauncher" name="tct-voice-control-elm-native-utc">
-    <auto_tcn>72</auto_tcn>
-    <manual_tcn>0</manual_tcn>
-    <total_tcn>72</total_tcn>
-    <pkg_name>tv/tct-voice-control-elm-native-utc-2.4.zip</pkg_name>
-  </suite>
-  <suite launcher="WRTLauncher" name="tct-url-download-native-utc">
-    <auto_tcn>121</auto_tcn>
-    <manual_tcn>0</manual_tcn>
-    <total_tcn>121</total_tcn>
-    <pkg_name>tv/tct-url-download-native-utc-2.4.zip</pkg_name>
-  </suite>
-  <suite launcher="WRTLauncher" name="tct-camera-native-itc">
-    <auto_tcn>78</auto_tcn>
-    <manual_tcn>0</manual_tcn>
-    <total_tcn>78</total_tcn>
-    <pkg_name>tv/tct-camera-native-itc-2.4.zip</pkg_name>
-  </suite>
-  <suite launcher="WRTLauncher" name="tct-runtime-info-native-utc">
-    <auto_tcn>126</auto_tcn>
-    <manual_tcn>0</manual_tcn>
-    <total_tcn>126</total_tcn>
-    <pkg_name>tv/tct-runtime-info-native-utc-2.4.zip</pkg_name>
-  </suite>
-  <suite launcher="WRTLauncher" name="tct-app-manager-native-itc">
-    <auto_tcn>38</auto_tcn>
-    <manual_tcn>0</manual_tcn>
-    <total_tcn>38</total_tcn>
-    <pkg_name>tv/tct-app-manager-native-itc-2.4.zip</pkg_name>
-  </suite>
-  <suite launcher="WRTLauncher" name="tct-appcore-agent-native-utc">
-    <auto_tcn>11</auto_tcn>
-    <manual_tcn>0</manual_tcn>
-    <total_tcn>11</total_tcn>
-    <pkg_name>tv/tct-appcore-agent-native-utc-2.4.zip</pkg_name>
-  </suite>
-  <suite launcher="WRTLauncher" name="tct-runtime-info-native-itc">
-    <auto_tcn>7</auto_tcn>
-    <manual_tcn>0</manual_tcn>
-    <total_tcn>7</total_tcn>
-    <pkg_name>tv/tct-runtime-info-native-itc-2.4.zip</pkg_name>
-  </suite>
-  <suite launcher="WRTLauncher" name="tct-connection-native-utc">
-    <auto_tcn>172</auto_tcn>
-    <manual_tcn>0</manual_tcn>
-    <total_tcn>172</total_tcn>
-    <pkg_name>tv/tct-connection-native-utc-2.4.zip</pkg_name>
-  </suite>
-  <suite launcher="WRTLauncher" name="tct-image-util-native-utc">
-    <auto_tcn>95</auto_tcn>
-    <manual_tcn>0</manual_tcn>
-    <total_tcn>95</total_tcn>
-    <pkg_name>tv/tct-image-util-native-utc-2.4.zip</pkg_name>
-  </suite>
-  <suite launcher="WRTLauncher" name="tct-application-native-itc">
-    <auto_tcn>55</auto_tcn>
-    <manual_tcn>0</manual_tcn>
-    <total_tcn>55</total_tcn>
-    <pkg_name>tv/tct-application-native-itc-2.4.zip</pkg_name>
-  </suite>
-  <suite launcher="WRTLauncher" name="tct-recorder-native-utc">
-    <auto_tcn>114</auto_tcn>
-    <manual_tcn>0</manual_tcn>
-    <total_tcn>114</total_tcn>
-    <pkg_name>tv/tct-recorder-native-utc-2.4.zip</pkg_name>
-  </suite>
-  <suite launcher="WRTLauncher" name="tct-native-common-native-itc">
-    <auto_tcn>2</auto_tcn>
-    <manual_tcn>0</manual_tcn>
-    <total_tcn>2</total_tcn>
-    <pkg_name>tv/tct-native-common-native-itc-2.4.zip</pkg_name>
-  </suite>
-  <suite launcher="WRTLauncher" name="tct-media-key-native-utc">
-    <auto_tcn>3</auto_tcn>
-    <manual_tcn>0</manual_tcn>
-    <total_tcn>3</total_tcn>
-    <pkg_name>tv/tct-media-key-native-utc-2.4.zip</pkg_name>
-  </suite>
-  <suite launcher="WRTLauncher" name="tct-data-control-native-utc">
-    <auto_tcn>89</auto_tcn>
-    <manual_tcn>0</manual_tcn>
-    <total_tcn>89</total_tcn>
-    <pkg_name>tv/tct-data-control-native-utc-2.4.zip</pkg_name>
-  </suite>
-  <suite launcher="WRTLauncher" name="tct-audio-io-native-itc">
-    <auto_tcn>26</auto_tcn>
-    <manual_tcn>0</manual_tcn>
-    <total_tcn>26</total_tcn>
-    <pkg_name>tv/tct-audio-io-native-itc-2.4.zip</pkg_name>
-  </suite>
-  <suite launcher="WRTLauncher" name="tct-metadata-editor-native-itc">
-    <auto_tcn>7</auto_tcn>
-    <manual_tcn>0</manual_tcn>
-    <total_tcn>7</total_tcn>
-    <pkg_name>tv/tct-metadata-editor-native-itc-2.4.zip</pkg_name>
-  </suite>
-  <suite launcher="WRTLauncher" name="tct-sound-manager-native-ctc">
-    <auto_tcn>1</auto_tcn>
-    <manual_tcn>0</manual_tcn>
-    <total_tcn>1</total_tcn>
-    <pkg_name>tv/tct-sound-manager-native-ctc-2.4.zip</pkg_name>
-  </suite>
-  <suite launcher="WRTLauncher" name="tct-connection-native-ctc">
-    <auto_tcn>1</auto_tcn>
-    <manual_tcn>0</manual_tcn>
-    <total_tcn>1</total_tcn>
-    <pkg_name>tv/tct-connection-native-ctc-2.4.zip</pkg_name>
-  </suite>
-  <suite launcher="WRTLauncher" name="tct-libstorage-native-itc">
-    <auto_tcn>10</auto_tcn>
-    <manual_tcn>0</manual_tcn>
-    <total_tcn>10</total_tcn>
-    <pkg_name>tv/tct-libstorage-native-itc-2.4.zip</pkg_name>
-  </suite>
-  <suite launcher="WRTLauncher" name="tct-webkit2-native-itc">
-    <auto_tcn>82</auto_tcn>
-    <manual_tcn>0</manual_tcn>
-    <total_tcn>82</total_tcn>
-    <pkg_name>tv/tct-webkit2-native-itc-2.4.zip</pkg_name>
-  </suite>
-  <suite launcher="WRTLauncher" name="tct-key-manager-native-itc">
-    <auto_tcn>34</auto_tcn>
-    <manual_tcn>0</manual_tcn>
-    <total_tcn>34</total_tcn>
-    <pkg_name>tv/tct-key-manager-native-itc-2.4.zip</pkg_name>
-  </suite>
-  <suite launcher="WRTLauncher" name="tct-voice-control-native-itc">
-    <auto_tcn>22</auto_tcn>
-    <manual_tcn>0</manual_tcn>
-    <total_tcn>22</total_tcn>
-    <pkg_name>tv/tct-voice-control-native-itc-2.4.zip</pkg_name>
-  </suite>
-  <suite launcher="WRTLauncher" name="tct-system-info-native-itc">
-    <auto_tcn>4</auto_tcn>
-    <manual_tcn>0</manual_tcn>
-    <total_tcn>4</total_tcn>
-    <pkg_name>tv/tct-system-info-native-itc-2.4.zip</pkg_name>
-  </suite>
-  <suite launcher="WRTLauncher" name="tct-capi-media-tool-native-itc">
-    <auto_tcn>44</auto_tcn>
-    <manual_tcn>0</manual_tcn>
-    <total_tcn>44</total_tcn>
-    <pkg_name>tv/tct-capi-media-tool-native-itc-2.4.zip</pkg_name>
-  </suite>
-  <suite launcher="WRTLauncher" name="tct-libstorage-native-utc">
-    <auto_tcn>31</auto_tcn>
-    <manual_tcn>0</manual_tcn>
-    <total_tcn>31</total_tcn>
-    <pkg_name>tv/tct-libstorage-native-utc-2.4.zip</pkg_name>
-  </suite>
-  <suite launcher="WRTLauncher" name="tct-libfeedback-native-utc">
-    <auto_tcn>13</auto_tcn>
-    <manual_tcn>0</manual_tcn>
-    <total_tcn>13</total_tcn>
-    <pkg_name>tv/tct-libfeedback-native-utc-2.4.zip</pkg_name>
-  </suite>
-  <suite launcher="WRTLauncher" name="tct-efl-util-native-utc">
-    <auto_tcn>27</auto_tcn>
-    <manual_tcn>0</manual_tcn>
-    <total_tcn>27</total_tcn>
-    <pkg_name>tv/tct-efl-util-native-utc-2.4.zip</pkg_name>
-  </suite>
-  <suite launcher="WRTLauncher" name="tct-trace-native-utc">
-    <auto_tcn>5</auto_tcn>
-    <manual_tcn>0</manual_tcn>
-    <total_tcn>5</total_tcn>
-    <pkg_name>tv/tct-trace-native-utc-2.4.zip</pkg_name>
-  </suite>
-  <suite launcher="WRTLauncher" name="tct-libfeedback-native-itc">
-    <auto_tcn>4</auto_tcn>
-    <manual_tcn>0</manual_tcn>
-    <total_tcn>4</total_tcn>
-    <pkg_name>tv/tct-libfeedback-native-itc-2.4.zip</pkg_name>
-  </suite>
-  <suite launcher="WRTLauncher" name="tct-service-adaptor-client-native-itc">
-    <auto_tcn>24</auto_tcn>
-    <manual_tcn>0</manual_tcn>
-    <total_tcn>24</total_tcn>
-    <pkg_name>tv/tct-service-adaptor-client-native-itc-2.4.zip</pkg_name>
-  </suite>
-  <suite launcher="WRTLauncher" name="tct-connection-native-itc">
-    <auto_tcn>61</auto_tcn>
-    <manual_tcn>0</manual_tcn>
-    <total_tcn>61</total_tcn>
-    <pkg_name>tv/tct-connection-native-itc-2.4.zip</pkg_name>
-  </suite>
-  <suite launcher="WRTLauncher" name="tct-capi-message-port-native-itc">
-    <auto_tcn>6</auto_tcn>
-    <manual_tcn>0</manual_tcn>
-    <total_tcn>6</total_tcn>
-    <pkg_name>tv/tct-capi-message-port-native-itc-2.4.zip</pkg_name>
-  </suite>
-  <suite launcher="WRTLauncher" name="tct-image-util-native-itc">
-    <auto_tcn>14</auto_tcn>
-    <manual_tcn>0</manual_tcn>
-    <total_tcn>14</total_tcn>
-    <pkg_name>tv/tct-image-util-native-itc-2.4.zip</pkg_name>
-  </suite>
-  <suite launcher="WRTLauncher" name="tct-audio-io-native-ctc">
-    <auto_tcn>1</auto_tcn>
-    <manual_tcn>0</manual_tcn>
-    <total_tcn>1</total_tcn>
-    <pkg_name>tv/tct-audio-io-native-ctc-2.4.zip</pkg_name>
-  </suite>
-  <suite launcher="WRTLauncher" name="tct-media-controller-native-itc">
-    <auto_tcn>28</auto_tcn>
-    <manual_tcn>0</manual_tcn>
-    <total_tcn>28</total_tcn>
-    <pkg_name>tv/tct-media-controller-native-itc-2.4.zip</pkg_name>
-  </suite>
-  <suite launcher="WRTLauncher" name="tct-tbm-native-itc">
-    <auto_tcn>7</auto_tcn>
-    <manual_tcn>0</manual_tcn>
-    <total_tcn>7</total_tcn>
-    <pkg_name>tv/tct-tbm-native-itc-2.4.zip</pkg_name>
-  </suite>
-  <suite launcher="WRTLauncher" name="tct-recorder-native-itc">
-    <auto_tcn>33</auto_tcn>
-    <manual_tcn>0</manual_tcn>
-    <total_tcn>33</total_tcn>
-    <pkg_name>tv/tct-recorder-native-itc-2.4.zip</pkg_name>
-  </suite>
-  <suite launcher="WRTLauncher" name="tct-sound-manager-native-utc">
-    <auto_tcn>71</auto_tcn>
-    <manual_tcn>0</manual_tcn>
-    <total_tcn>71</total_tcn>
-    <pkg_name>tv/tct-sound-manager-native-utc-2.4.zip</pkg_name>
-  </suite>
-  <suite launcher="WRTLauncher" name="tct-service-adaptor-client-native-utc">
-    <auto_tcn>127</auto_tcn>
-    <manual_tcn>0</manual_tcn>
-    <total_tcn>127</total_tcn>
-    <pkg_name>tv/tct-service-adaptor-client-native-utc-2.4.zip</pkg_name>
-  </suite>
-  <suite launcher="WRTLauncher" name="tct-efl-util-native-itc">
-    <auto_tcn>3</auto_tcn>
-    <manual_tcn>0</manual_tcn>
-    <total_tcn>3</total_tcn>
-    <pkg_name>tv/tct-efl-util-native-itc-2.4.zip</pkg_name>
-  </suite>
-  <suite launcher="WRTLauncher" name="tct-url-download-native-itc">
-    <auto_tcn>27</auto_tcn>
-    <manual_tcn>0</manual_tcn>
-    <total_tcn>27</total_tcn>
-    <pkg_name>tv/tct-url-download-native-itc-2.4.zip</pkg_name>
-  </suite>
-  <suite launcher="WRTLauncher" name="tct-data-control-native-itc">
-    <auto_tcn>33</auto_tcn>
-    <manual_tcn>0</manual_tcn>
-    <total_tcn>33</total_tcn>
-    <pkg_name>tv/tct-data-control-native-itc-2.4.zip</pkg_name>
-  </suite>
-</ns3:testplan>
diff --git a/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/shell/plan/Native_Full_tv_3.0.xml b/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/shell/plan/Native_Full_tv_3.0.xml
deleted file mode 100755 (executable)
index 0b5d475..0000000
+++ /dev/null
@@ -1,803 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>\r
-<ns3:testplan xmlns:ns3="http://www.example.org/plan/" xmlns="" name="Native_Full_tv_3.0" profile="tv">\r
-  <execute_type>Auto</execute_type>\r
-  <suite name="tct-connection-native-utc" category=" UnitTestCases ">\r
-    <auto_tcn>172</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>172</total_tcn>\r
-    <pkg_name>tv/tct-connection-native-utc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-webkit2-native-utc" category=" UnitTestCases ">\r
-    <auto_tcn>206</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>206</total_tcn>\r
-    <pkg_name>tv/tct-webkit2-native-utc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-privilege-info-native-utc" category=" UnitTestCases ">\r
-    <auto_tcn>14</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>14</total_tcn>\r
-    <pkg_name>tv/tct-privilege-info-native-utc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-dali-adaptor-native-utc" category=" UnitTestCases ">\r
-    <auto_tcn>96</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>96</total_tcn>\r
-    <pkg_name>tv/tct-dali-adaptor-native-utc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-mtp-native-itc" category=" IntegrationTestCases ">\r
-    <auto_tcn>1</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>1</total_tcn>\r
-    <pkg_name>tv/tct-mtp-native-itc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-native-common-native-itc" category=" IntegrationTestCases ">\r
-    <auto_tcn>2</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>2</total_tcn>\r
-    <pkg_name>tv/tct-native-common-native-itc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-wav-player-native-itc" category=" IntegrationTestCases ">\r
-    <auto_tcn>2</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>2</total_tcn>\r
-    <pkg_name>tv/tct-wav-player-native-itc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-capi-ui-inputmethod-manager-native-utc" category=" UnitTestCases ">\r
-    <auto_tcn>7</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>7</total_tcn>\r
-    <pkg_name>tv/tct-capi-ui-inputmethod-manager-native-utc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-wifi-direct-native-utc" category=" UnitTestCases ">\r
-    <auto_tcn>140</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>140</total_tcn>\r
-    <pkg_name>tv/tct-wifi-direct-native-utc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-mediademuxer-native-utc" category=" UnitTestCases ">\r
-    <auto_tcn>36</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>36</total_tcn>\r
-    <pkg_name>tv/tct-mediademuxer-native-utc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-capi-message-port-native-itc" category=" IntegrationTestCases ">\r
-    <auto_tcn>6</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>6</total_tcn>\r
-    <pkg_name>tv/tct-capi-message-port-native-itc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-push-native-itc" category=" IntegrationTestCases ">\r
-    <auto_tcn>12</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>12</total_tcn>\r
-    <pkg_name>tv/tct-push-native-itc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-appcore-agent-native-itc" category=" IntegrationTestCases ">\r
-    <auto_tcn>2</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>2</total_tcn>\r
-    <pkg_name>tv/tct-appcore-agent-native-itc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-camera-native-utc" category=" UnitTestCases ">\r
-    <auto_tcn>348</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>348</total_tcn>\r
-    <pkg_name>tv/tct-camera-native-utc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-thumbnail-util-native-itc" category=" IntegrationTestCases ">\r
-    <auto_tcn>6</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>6</total_tcn>\r
-    <pkg_name>tv/tct-thumbnail-util-native-itc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-tbm-native-utc" category=" UnitTestCases ">\r
-    <auto_tcn>17</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>17</total_tcn>\r
-    <pkg_name>tv/tct-tbm-native-utc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-libstorage-native-ctc" category=" CompatibilityTestCases ">\r
-    <auto_tcn>2</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>2</total_tcn>\r
-    <pkg_name>tv/tct-libstorage-native-ctc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-accounts-svc-native-itc" category=" IntegrationTestCases ">\r
-    <auto_tcn>48</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>48</total_tcn>\r
-    <pkg_name>tv/tct-accounts-svc-native-itc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-phonenumber-utils-native-utc" category=" UnitTestCases ">\r
-    <auto_tcn>11</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>11</total_tcn>\r
-    <pkg_name>tv/tct-phonenumber-utils-native-utc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-native-common-native-utc" category=" UnitTestCases ">\r
-    <auto_tcn>5</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>5</total_tcn>\r
-    <pkg_name>tv/tct-native-common-native-utc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-metadata-editor-native-utc" category=" UnitTestCases ">\r
-    <auto_tcn>18</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>18</total_tcn>\r
-    <pkg_name>tv/tct-metadata-editor-native-utc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-mediacodec-native-utc" category=" UnitTestCases ">\r
-    <auto_tcn>49</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>49</total_tcn>\r
-    <pkg_name>tv/tct-mediacodec-native-utc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-calendar-service2-native-itc" category=" IntegrationTestCases ">\r
-    <auto_tcn>58</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>58</total_tcn>\r
-    <pkg_name>tv/tct-calendar-service2-native-itc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-mediacodec-native-itc" category=" IntegrationTestCases ">\r
-    <auto_tcn>17</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>17</total_tcn>\r
-    <pkg_name>tv/tct-mediacodec-native-itc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-capi-media-streamer-native-utc" category=" UnitTestCases ">\r
-    <auto_tcn>82</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>82</total_tcn>\r
-    <pkg_name>tv/tct-capi-media-streamer-native-utc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-key-manager-native-utc" category=" UnitTestCases ">\r
-    <auto_tcn>127</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>127</total_tcn>\r
-    <pkg_name>tv/tct-key-manager-native-utc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-media-content-native-utc" category=" UnitTestCases ">\r
-    <auto_tcn>526</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>526</total_tcn>\r
-    <pkg_name>tv/tct-media-content-native-utc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-opengl-native-ctc" category=" CompatibilityTestCases ">\r
-    <auto_tcn>3</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>3</total_tcn>\r
-    <pkg_name>tv/tct-opengl-native-ctc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-sound-manager-native-itc" category=" IntegrationTestCases ">\r
-    <auto_tcn>23</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>23</total_tcn>\r
-    <pkg_name>tv/tct-sound-manager-native-itc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-media-controller-native-utc" category=" UnitTestCases ">\r
-    <auto_tcn>85</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>85</total_tcn>\r
-    <pkg_name>tv/tct-media-controller-native-utc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-efl-ext-native-itc" category=" IntegrationTestCases ">\r
-    <auto_tcn>1</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>1</total_tcn>\r
-    <pkg_name>tv/tct-efl-ext-native-itc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-voice-control-elm-native-itc" category=" IntegrationTestCases ">\r
-    <auto_tcn>13</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>13</total_tcn>\r
-    <pkg_name>tv/tct-voice-control-elm-native-itc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-metadata-extractor-native-utc" category=" UnitTestCases ">\r
-    <auto_tcn>23</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>23</total_tcn>\r
-    <pkg_name>tv/tct-metadata-extractor-native-utc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-camera-native-itc" category=" IntegrationTestCases ">\r
-    <auto_tcn>82</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>82</total_tcn>\r
-    <pkg_name>tv/tct-camera-native-itc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-screen-mirroring-native-itc" category=" IntegrationTestCases ">\r
-    <auto_tcn>5</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>5</total_tcn>\r
-    <pkg_name>tv/tct-screen-mirroring-native-itc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-video-util-native-itc" category=" IntegrationTestCases ">\r
-    <auto_tcn>14</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>14</total_tcn>\r
-    <pkg_name>tv/tct-video-util-native-itc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-push-native-utc" category=" UnitTestCases ">\r
-    <auto_tcn>28</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>28</total_tcn>\r
-    <pkg_name>tv/tct-push-native-utc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-dlog-native-utc" category=" UnitTestCases ">\r
-    <auto_tcn>4</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>4</total_tcn>\r
-    <pkg_name>tv/tct-dlog-native-utc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-app-manager-native-itc" category=" IntegrationTestCases ">\r
-    <auto_tcn>42</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>42</total_tcn>\r
-    <pkg_name>tv/tct-app-manager-native-itc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-audio-io-native-utc" category=" UnitTestCases ">\r
-    <auto_tcn>94</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>94</total_tcn>\r
-    <pkg_name>tv/tct-audio-io-native-utc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-package-manager-native-utc" category=" UnitTestCases ">\r
-    <auto_tcn>92</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>92</total_tcn>\r
-    <pkg_name>tv/tct-package-manager-native-utc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-player-native-ctc" category=" CompatibilityTestCases ">\r
-    <auto_tcn>4</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>4</total_tcn>\r
-    <pkg_name>tv/tct-player-native-ctc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-mediatool-native-utc" category=" UnitTestCases ">\r
-    <auto_tcn>133</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>133</total_tcn>\r
-    <pkg_name>tv/tct-mediatool-native-utc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-dali-core-native-itc" category=" IntegrationTestCases ">\r
-    <auto_tcn>864</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>864</total_tcn>\r
-    <pkg_name>tv/tct-dali-core-native-itc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-sync-manager-native-utc" category=" UnitTestCases ">\r
-    <auto_tcn>28</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>28</total_tcn>\r
-    <pkg_name>tv/tct-sync-manager-native-utc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-efl-util-native-itc" category=" IntegrationTestCases ">\r
-    <auto_tcn>5</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>5</total_tcn>\r
-    <pkg_name>tv/tct-efl-util-native-itc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-efl-ext-native-utc" category=" UnitTestCases ">\r
-    <auto_tcn>14</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>14</total_tcn>\r
-    <pkg_name>tv/tct-efl-ext-native-utc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-wifi-native-utc" category=" UnitTestCases ">\r
-    <auto_tcn>208</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>208</total_tcn>\r
-    <pkg_name>tv/tct-wifi-native-utc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-capi-mediamuxer-native-itc" category=" IntegrationTestCases ">\r
-    <auto_tcn>9</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>9</total_tcn>\r
-    <pkg_name>tv/tct-capi-mediamuxer-native-itc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-video-util-native-ctc" category=" CompatibilityTestCases ">\r
-    <auto_tcn>6</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>6</total_tcn>\r
-    <pkg_name>tv/tct-video-util-native-ctc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-bundle-native-itc" category=" IntegrationTestCases ">\r
-    <auto_tcn>9</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>9</total_tcn>\r
-    <pkg_name>tv/tct-bundle-native-itc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-bundle-native-utc" category=" UnitTestCases ">\r
-    <auto_tcn>53</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>53</total_tcn>\r
-    <pkg_name>tv/tct-bundle-native-utc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-libstorage-native-utc" category=" UnitTestCases ">\r
-    <auto_tcn>31</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>31</total_tcn>\r
-    <pkg_name>tv/tct-libstorage-native-utc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-mime-type-native-utc" category=" UnitTestCases ">\r
-    <auto_tcn>15</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>15</total_tcn>\r
-    <pkg_name>tv/tct-mime-type-native-utc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-url-download-native-itc" category=" IntegrationTestCases ">\r
-    <auto_tcn>27</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>27</total_tcn>\r
-    <pkg_name>tv/tct-url-download-native-itc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-capi-ui-inputmethod-native-utc" category=" UnitTestCases ">\r
-    <auto_tcn>99</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>99</total_tcn>\r
-    <pkg_name>tv/tct-capi-ui-inputmethod-native-utc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-application-native-itc" category=" IntegrationTestCases ">\r
-    <auto_tcn>55</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>55</total_tcn>\r
-    <pkg_name>tv/tct-application-native-itc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-contacts-service2-native-utc" category=" UnitTestCases ">\r
-    <auto_tcn>198</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>198</total_tcn>\r
-    <pkg_name>tv/tct-contacts-service2-native-utc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-player-native-utc" category=" UnitTestCases ">\r
-    <auto_tcn>191</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>191</total_tcn>\r
-    <pkg_name>tv/tct-player-native-utc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-voice-control-elm-native-utc" category=" UnitTestCases ">\r
-    <auto_tcn>71</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>71</total_tcn>\r
-    <pkg_name>tv/tct-voice-control-elm-native-utc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-appcore-agent-native-utc" category=" UnitTestCases ">\r
-    <auto_tcn>11</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>11</total_tcn>\r
-    <pkg_name>tv/tct-appcore-agent-native-utc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-system-info-native-utc" category=" UnitTestCases ">\r
-    <auto_tcn>12</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>12</total_tcn>\r
-    <pkg_name>tv/tct-system-info-native-utc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-context-native-utc" category=" UnitTestCases ">\r
-    <auto_tcn>82</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>82</total_tcn>\r
-    <pkg_name>tv/tct-context-native-utc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-application-native-utc" category=" UnitTestCases ">\r
-    <auto_tcn>268</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>268</total_tcn>\r
-    <pkg_name>tv/tct-application-native-utc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-data-control-native-utc" category=" UnitTestCases ">\r
-    <auto_tcn>89</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>89</total_tcn>\r
-    <pkg_name>tv/tct-data-control-native-utc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-wifi-direct-native-itc" category=" IntegrationTestCases ">\r
-    <auto_tcn>38</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>38</total_tcn>\r
-    <pkg_name>tv/tct-wifi-direct-native-itc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-tts-native-utc" category=" UnitTestCases ">\r
-    <auto_tcn>104</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>104</total_tcn>\r
-    <pkg_name>tv/tct-tts-native-utc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-metadata-extractor-native-itc" category=" IntegrationTestCases ">\r
-    <auto_tcn>8</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>8</total_tcn>\r
-    <pkg_name>tv/tct-metadata-extractor-native-itc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-capi-message-port-native-utc" category=" UnitTestCases ">\r
-    <auto_tcn>52</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>52</total_tcn>\r
-    <pkg_name>tv/tct-capi-message-port-native-utc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-video-util-native-utc" category=" UnitTestCases ">\r
-    <auto_tcn>43</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>43</total_tcn>\r
-    <pkg_name>tv/tct-video-util-native-utc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-sound-manager-native-ctc" category=" CompatibilityTestCases ">\r
-    <auto_tcn>1</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>1</total_tcn>\r
-    <pkg_name>tv/tct-sound-manager-native-ctc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-calendar-service2-native-utc" category=" UnitTestCases ">\r
-    <auto_tcn>149</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>149</total_tcn>\r
-    <pkg_name>tv/tct-calendar-service2-native-utc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-image-util-native-utc" category=" UnitTestCases ">\r
-    <auto_tcn>206</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>206</total_tcn>\r
-    <pkg_name>tv/tct-image-util-native-utc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-capi-ui-inputmethod-manager-native-itc" category=" IntegrationTestCases ">\r
-    <auto_tcn>2</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>2</total_tcn>\r
-    <pkg_name>tv/tct-capi-ui-inputmethod-manager-native-itc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-media-key-native-itc" category=" IntegrationTestCases ">\r
-    <auto_tcn>1</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>1</total_tcn>\r
-    <pkg_name>tv/tct-media-key-native-itc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-metadata-editor-native-itc" category=" IntegrationTestCases ">\r
-    <auto_tcn>7</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>7</total_tcn>\r
-    <pkg_name>tv/tct-metadata-editor-native-itc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-dlog-native-itc" category=" IntegrationTestCases ">\r
-    <auto_tcn>2</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>2</total_tcn>\r
-    <pkg_name>tv/tct-dlog-native-itc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-runtime-info-native-itc" category=" IntegrationTestCases ">\r
-    <auto_tcn>8</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>8</total_tcn>\r
-    <pkg_name>tv/tct-runtime-info-native-itc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-dali-toolkit-native-itc" category=" IntegrationTestCases ">\r
-    <auto_tcn>238</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>238</total_tcn>\r
-    <pkg_name>tv/tct-dali-toolkit-native-itc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-efl-util-native-utc" category=" UnitTestCases ">\r
-    <auto_tcn>45</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>45</total_tcn>\r
-    <pkg_name>tv/tct-efl-util-native-utc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-audio-io-native-ctc" category=" CompatibilityTestCases ">\r
-    <auto_tcn>1</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>1</total_tcn>\r
-    <pkg_name>tv/tct-audio-io-native-ctc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-oauth2-native-itc" category=" IntegrationTestCases ">\r
-    <auto_tcn>18</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>18</total_tcn>\r
-    <pkg_name>tv/tct-oauth2-native-itc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-recorder-native-itc" category=" IntegrationTestCases ">\r
-    <auto_tcn>33</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>33</total_tcn>\r
-    <pkg_name>tv/tct-recorder-native-itc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-dali-toolkit-native-utc" category=" UnitTestCases ">\r
-    <auto_tcn>435</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>435</total_tcn>\r
-    <pkg_name>tv/tct-dali-toolkit-native-utc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-mediacodec-native-ctc" category=" CompatibilityTestCases ">\r
-    <auto_tcn>1</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>1</total_tcn>\r
-    <pkg_name>tv/tct-mediacodec-native-ctc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-player-native-itc" category=" IntegrationTestCases ">\r
-    <auto_tcn>47</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>47</total_tcn>\r
-    <pkg_name>tv/tct-player-native-itc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-mime-type-native-itc" category=" IntegrationTestCases ">\r
-    <auto_tcn>2</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>2</total_tcn>\r
-    <pkg_name>tv/tct-mime-type-native-itc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-media-controller-native-itc" category=" IntegrationTestCases ">\r
-    <auto_tcn>28</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>28</total_tcn>\r
-    <pkg_name>tv/tct-media-controller-native-itc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-system-info-native-ctc" category=" CompatibilityTestCases ">\r
-    <auto_tcn>4</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>4</total_tcn>\r
-    <pkg_name>tv/tct-system-info-native-ctc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-thumbnail-util-native-utc" category=" UnitTestCases ">\r
-    <auto_tcn>14</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>14</total_tcn>\r
-    <pkg_name>tv/tct-thumbnail-util-native-utc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-key-manager-native-itc" category=" IntegrationTestCases ">\r
-    <auto_tcn>40</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>40</total_tcn>\r
-    <pkg_name>tv/tct-key-manager-native-itc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-connection-native-ctc" category=" CompatibilityTestCases ">\r
-    <auto_tcn>1</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>1</total_tcn>\r
-    <pkg_name>tv/tct-connection-native-ctc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-runtime-info-native-ctc" category=" CompatibilityTestCases ">\r
-    <auto_tcn>15</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>15</total_tcn>\r
-    <pkg_name>tv/tct-runtime-info-native-ctc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-tts-native-itc" category=" IntegrationTestCases ">\r
-    <auto_tcn>14</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>14</total_tcn>\r
-    <pkg_name>tv/tct-tts-native-itc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-wifi-native-itc" category=" IntegrationTestCases ">\r
-    <auto_tcn>45</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>45</total_tcn>\r
-    <pkg_name>tv/tct-wifi-native-itc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-oauth2-native-utc" category=" UnitTestCases ">\r
-    <auto_tcn>89</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>89</total_tcn>\r
-    <pkg_name>tv/tct-oauth2-native-utc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-sync-manager-native-itc" category=" IntegrationTestCases ">\r
-    <auto_tcn>5</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>5</total_tcn>\r
-    <pkg_name>tv/tct-sync-manager-native-itc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-libstorage-native-itc" category=" IntegrationTestCases ">\r
-    <auto_tcn>10</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>10</total_tcn>\r
-    <pkg_name>tv/tct-libstorage-native-itc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-wifi-direct-native-ctc" category=" CompatibilityTestCases ">\r
-    <auto_tcn>1</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>1</total_tcn>\r
-    <pkg_name>tv/tct-wifi-direct-native-ctc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-accounts-svc-native-utc" category=" UnitTestCases ">\r
-    <auto_tcn>144</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>144</total_tcn>\r
-    <pkg_name>tv/tct-accounts-svc-native-utc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-url-download-native-utc" category=" UnitTestCases ">\r
-    <auto_tcn>121</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>121</total_tcn>\r
-    <pkg_name>tv/tct-url-download-native-utc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-stt-native-utc" category=" UnitTestCases ">\r
-    <auto_tcn>88</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>88</total_tcn>\r
-    <pkg_name>tv/tct-stt-native-utc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-stt-native-itc" category=" IntegrationTestCases ">\r
-    <auto_tcn>20</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>20</total_tcn>\r
-    <pkg_name>tv/tct-stt-native-itc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-recorder-native-utc" category=" UnitTestCases ">\r
-    <auto_tcn>151</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>151</total_tcn>\r
-    <pkg_name>tv/tct-recorder-native-utc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-voice-control-native-itc" category=" IntegrationTestCases ">\r
-    <auto_tcn>22</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>22</total_tcn>\r
-    <pkg_name>tv/tct-voice-control-native-itc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-context-native-itc" category=" IntegrationTestCases ">\r
-    <auto_tcn>29</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>29</total_tcn>\r
-    <pkg_name>tv/tct-context-native-itc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-runtime-info-native-utc" category=" UnitTestCases ">\r
-    <auto_tcn>126</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>126</total_tcn>\r
-    <pkg_name>tv/tct-runtime-info-native-utc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-capi-mediademuxer-native-itc" category=" IntegrationTestCases ">\r
-    <auto_tcn>12</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>12</total_tcn>\r
-    <pkg_name>tv/tct-capi-mediademuxer-native-itc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-bluetooth-native-utc" category=" UnitTestCases ">\r
-    <auto_tcn>169</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>169</total_tcn>\r
-    <pkg_name>tv/tct-bluetooth-native-utc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-dali-core-native-utc" category=" UnitTestCases ">\r
-    <auto_tcn>1645</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>1645</total_tcn>\r
-    <pkg_name>tv/tct-dali-core-native-utc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-capi-media-tool-native-itc" category=" IntegrationTestCases ">\r
-    <auto_tcn>51</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>51</total_tcn>\r
-    <pkg_name>tv/tct-capi-media-tool-native-itc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-package-manager-native-itc" category=" IntegrationTestCases ">\r
-    <auto_tcn>38</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>38</total_tcn>\r
-    <pkg_name>tv/tct-package-manager-native-itc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-dali-adaptor-native-itc" category=" IntegrationTestCases ">\r
-    <auto_tcn>16</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>16</total_tcn>\r
-    <pkg_name>tv/tct-dali-adaptor-native-itc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-media-content-native-itc" category=" IntegrationTestCases ">\r
-    <auto_tcn>200</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>200</total_tcn>\r
-    <pkg_name>tv/tct-media-content-native-itc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-tbm-native-itc" category=" IntegrationTestCases ">\r
-    <auto_tcn>7</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>7</total_tcn>\r
-    <pkg_name>tv/tct-tbm-native-itc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-webkit2-native-itc" category=" IntegrationTestCases ">\r
-    <auto_tcn>86</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>86</total_tcn>\r
-    <pkg_name>tv/tct-webkit2-native-itc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-capi-media-streamer-native-itc" category=" IntegrationTestCases ">\r
-    <auto_tcn>14</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>14</total_tcn>\r
-    <pkg_name>tv/tct-capi-media-streamer-native-itc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-sound-manager-native-utc" category=" UnitTestCases ">\r
-    <auto_tcn>101</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>101</total_tcn>\r
-    <pkg_name>tv/tct-sound-manager-native-utc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-voice-control-native-utc" category=" UnitTestCases ">\r
-    <auto_tcn>97</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>97</total_tcn>\r
-    <pkg_name>tv/tct-voice-control-native-utc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-contacts-service2-native-itc" category=" IntegrationTestCases ">\r
-    <auto_tcn>81</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>81</total_tcn>\r
-    <pkg_name>tv/tct-contacts-service2-native-itc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-audio-io-native-itc" category=" IntegrationTestCases ">\r
-    <auto_tcn>32</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>32</total_tcn>\r
-    <pkg_name>tv/tct-audio-io-native-itc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-app-manager-native-utc" category=" UnitTestCases ">\r
-    <auto_tcn>121</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>121</total_tcn>\r
-    <pkg_name>tv/tct-app-manager-native-utc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-screen-mirroring-native-utc" category=" UnitTestCases ">\r
-    <auto_tcn>55</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>55</total_tcn>\r
-    <pkg_name>tv/tct-screen-mirroring-native-utc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-image-util-native-ctc" category=" CompatibilityTestCases ">\r
-    <auto_tcn>2</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>2</total_tcn>\r
-    <pkg_name>tv/tct-image-util-native-ctc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-privilege-info-native-itc" category=" IntegrationTestCases ">\r
-    <auto_tcn>4</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>4</total_tcn>\r
-    <pkg_name>tv/tct-privilege-info-native-itc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-image-util-native-itc" category=" IntegrationTestCases ">\r
-    <auto_tcn>32</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>32</total_tcn>\r
-    <pkg_name>tv/tct-image-util-native-itc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-mediamuxer-native-utc" category=" UnitTestCases ">\r
-    <auto_tcn>30</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>30</total_tcn>\r
-    <pkg_name>tv/tct-mediamuxer-native-utc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-media-key-native-utc" category=" UnitTestCases ">\r
-    <auto_tcn>3</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>3</total_tcn>\r
-    <pkg_name>tv/tct-media-key-native-utc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-wav-player-native-utc" category=" UnitTestCases ">\r
-    <auto_tcn>13</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>13</total_tcn>\r
-    <pkg_name>tv/tct-wav-player-native-utc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-phonenumber-utils-native-itc" category=" IntegrationTestCases ">\r
-    <auto_tcn>4</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>4</total_tcn>\r
-    <pkg_name>tv/tct-phonenumber-utils-native-itc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-bluetooth-native-itc" category=" IntegrationTestCases ">\r
-    <auto_tcn>20</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>20</total_tcn>\r
-    <pkg_name>tv/tct-bluetooth-native-itc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-system-info-native-itc" category=" IntegrationTestCases ">\r
-    <auto_tcn>4</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>4</total_tcn>\r
-    <pkg_name>tv/tct-system-info-native-itc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-data-control-native-itc" category=" IntegrationTestCases ">\r
-    <auto_tcn>33</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>33</total_tcn>\r
-    <pkg_name>tv/tct-data-control-native-itc-3.0.zip</pkg_name>\r
-  </suite>\r
-</ns3:testplan>\r
-\r
diff --git a/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/shell/plan/Native_Full_wearable_2.3.2.xml b/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/shell/plan/Native_Full_wearable_2.3.2.xml
deleted file mode 100755 (executable)
index 8dd1ab3..0000000
+++ /dev/null
@@ -1,773 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>\r
-<ns3:testplan xmlns:ns3="http://www.example.org/plan/" xmlns="" name="Native_Full_wearable_2.3.2" profile="wearable">\r
-  <execute_type>Auto</execute_type>\r
-  <suite name="tct-connection-native-utc" category=" UnitTestCases ">\r
-    <auto_tcn>162</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>162</total_tcn>\r
-    <pkg_name>wearable/tct-connection-native-utc-2.3.2.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-webkit2-native-utc" category=" UnitTestCases ">\r
-    <auto_tcn>175</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>175</total_tcn>\r
-    <pkg_name>wearable/tct-webkit2-native-utc-2.3.2.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-privilege-info-native-utc" category=" UnitTestCases ">\r
-    <auto_tcn>14</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>14</total_tcn>\r
-    <pkg_name>wearable/tct-privilege-info-native-utc-2.3.2.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-native-common-native-itc" category=" IntegrationTestCases ">\r
-    <auto_tcn>2</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>2</total_tcn>\r
-    <pkg_name>wearable/tct-native-common-native-itc-2.3.2.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-wav-player-native-itc" category=" IntegrationTestCases ">\r
-    <auto_tcn>1</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>1</total_tcn>\r
-    <pkg_name>wearable/tct-wav-player-native-itc-2.3.2.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-messages-native-itc" category=" IntegrationTestCases ">\r
-    <auto_tcn>18</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>18</total_tcn>\r
-    <pkg_name>wearable/tct-messages-native-itc-2.3.2.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-filesystem-permission-native-ctc" category=" CompatibilityTestCases ">\r
-    <auto_tcn>32</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>32</total_tcn>\r
-    <pkg_name>wearable/tct-filesystem-permission-native-ctc-2.3.2.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-badge-native-utc" category=" UnitTestCases ">\r
-    <auto_tcn>14</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>14</total_tcn>\r
-    <pkg_name>wearable/tct-badge-native-utc-2.3.2.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-capi-message-port-native-itc" category=" IntegrationTestCases ">\r
-    <auto_tcn>8</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>8</total_tcn>\r
-    <pkg_name>wearable/tct-capi-message-port-native-itc-2.3.2.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-system-settings-native-itc" category=" IntegrationTestCases ">\r
-    <auto_tcn>4</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>4</total_tcn>\r
-    <pkg_name>wearable/tct-system-settings-native-itc-2.3.2.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-messages-native-utc" category=" UnitTestCases ">\r
-    <auto_tcn>85</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>85</total_tcn>\r
-    <pkg_name>wearable/tct-messages-native-utc-2.3.2.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-push-native-itc" category=" IntegrationTestCases ">\r
-    <auto_tcn>12</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>12</total_tcn>\r
-    <pkg_name>wearable/tct-push-native-itc-2.3.2.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-capi-media-tool-native-utc" category=" UnitTestCases ">\r
-    <auto_tcn>94</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>94</total_tcn>\r
-    <pkg_name>wearable/tct-capi-media-tool-native-utc-2.3.2.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-widget-viewer-evas-native-utc" category=" UnitTestCases ">\r
-    <auto_tcn>50</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>50</total_tcn>\r
-    <pkg_name>wearable/tct-widget-viewer-evas-native-utc-2.3.2.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-sensor-native-ctc" category=" CompatibilityTestCases ">\r
-    <auto_tcn>9</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>9</total_tcn>\r
-    <pkg_name>wearable/tct-sensor-native-ctc-2.3.2.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-appcore-agent-native-itc" category=" IntegrationTestCases ">\r
-    <auto_tcn>2</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>2</total_tcn>\r
-    <pkg_name>wearable/tct-appcore-agent-native-itc-2.3.2.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-appcore-watch-native-utc" category=" UnitTestCases ">\r
-    <auto_tcn>37</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>37</total_tcn>\r
-    <pkg_name>wearable/tct-appcore-watch-native-utc-2.3.2.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-radio-native-utc" category=" UnitTestCases ">\r
-    <auto_tcn>36</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>36</total_tcn>\r
-    <pkg_name>wearable/tct-radio-native-utc-2.3.2.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-location-manager-native-utc" category=" UnitTestCases ">\r
-    <auto_tcn>194</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>194</total_tcn>\r
-    <pkg_name>wearable/tct-location-manager-native-utc-2.3.2.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-camera-native-utc" category=" UnitTestCases ">\r
-    <auto_tcn>320</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>320</total_tcn>\r
-    <pkg_name>wearable/tct-camera-native-utc-2.3.2.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-cairo-native-utc" category=" UnitTestCases ">\r
-    <auto_tcn>24</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>24</total_tcn>\r
-    <pkg_name>wearable/tct-cairo-native-utc-2.3.2.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-tbm-native-utc" category=" UnitTestCases ">\r
-    <auto_tcn>17</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>17</total_tcn>\r
-    <pkg_name>wearable/tct-tbm-native-utc-2.3.2.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-libstorage-native-ctc" category=" CompatibilityTestCases ">\r
-    <auto_tcn>2</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>2</total_tcn>\r
-    <pkg_name>wearable/tct-libstorage-native-ctc-2.3.2.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-telephony-native-utc" category=" UnitTestCases ">\r
-    <auto_tcn>67</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>67</total_tcn>\r
-    <pkg_name>wearable/tct-telephony-native-utc-2.3.2.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-native-common-native-utc" category=" UnitTestCases ">\r
-    <auto_tcn>5</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>5</total_tcn>\r
-    <pkg_name>wearable/tct-native-common-native-utc-2.3.2.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-appcore-widget-native-itc" category=" IntegrationTestCases ">\r
-    <auto_tcn>3</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>3</total_tcn>\r
-    <pkg_name>wearable/tct-appcore-widget-native-itc-2.3.2.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-base-utils-native-itc" category=" IntegrationTestCases ">\r
-    <auto_tcn>284</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>284</total_tcn>\r
-    <pkg_name>wearable/tct-base-utils-native-itc-2.3.2.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-context-manager-native-itc" category=" IntegrationTestCases ">\r
-    <auto_tcn>8</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>8</total_tcn>\r
-    <pkg_name>wearable/tct-context-manager-native-itc-2.3.2.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-mediacodec-native-utc" category=" UnitTestCases ">\r
-    <auto_tcn>39</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>39</total_tcn>\r
-    <pkg_name>wearable/tct-mediacodec-native-utc-2.3.2.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-mediacodec-native-itc" category=" IntegrationTestCases ">\r
-    <auto_tcn>13</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>13</total_tcn>\r
-    <pkg_name>wearable/tct-mediacodec-native-itc-2.3.2.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-key-manager-native-utc" category=" UnitTestCases ">\r
-    <auto_tcn>47</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>47</total_tcn>\r
-    <pkg_name>wearable/tct-key-manager-native-utc-2.3.2.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-media-content-native-utc" category=" UnitTestCases ">\r
-    <auto_tcn>418</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>418</total_tcn>\r
-    <pkg_name>wearable/tct-media-content-native-utc-2.3.2.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-opengl-native-ctc" category=" CompatibilityTestCases ">\r
-    <auto_tcn>3</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>3</total_tcn>\r
-    <pkg_name>wearable/tct-opengl-native-ctc-2.3.2.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-sound-manager-native-itc" category=" IntegrationTestCases ">\r
-    <auto_tcn>20</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>20</total_tcn>\r
-    <pkg_name>wearable/tct-sound-manager-native-itc-2.3.2.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-tone-player-native-utc" category=" UnitTestCases ">\r
-    <auto_tcn>4</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>4</total_tcn>\r
-    <pkg_name>wearable/tct-tone-player-native-utc-2.3.2.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-efl-ext-native-itc" category=" IntegrationTestCases ">\r
-    <auto_tcn>61</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>61</total_tcn>\r
-    <pkg_name>wearable/tct-efl-ext-native-itc-2.3.2.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-appcore-widget-native-utc" category=" UnitTestCases ">\r
-    <auto_tcn>20</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>20</total_tcn>\r
-    <pkg_name>wearable/tct-appcore-widget-native-utc-2.3.2.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-metadata-extractor-native-utc" category=" UnitTestCases ">\r
-    <auto_tcn>23</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>23</total_tcn>\r
-    <pkg_name>wearable/tct-metadata-extractor-native-utc-2.3.2.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-camera-native-itc" category=" IntegrationTestCases ">\r
-    <auto_tcn>78</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>78</total_tcn>\r
-    <pkg_name>wearable/tct-camera-native-itc-2.3.2.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-push-native-utc" category=" UnitTestCases ">\r
-    <auto_tcn>27</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>27</total_tcn>\r
-    <pkg_name>wearable/tct-push-native-utc-2.3.2.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-dlog-native-utc" category=" UnitTestCases ">\r
-    <auto_tcn>4</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>4</total_tcn>\r
-    <pkg_name>wearable/tct-dlog-native-utc-2.3.2.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-app-manager-native-itc" category=" IntegrationTestCases ">\r
-    <auto_tcn>36</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>36</total_tcn>\r
-    <pkg_name>wearable/tct-app-manager-native-itc-2.3.2.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-audio-io-native-utc" category=" UnitTestCases ">\r
-    <auto_tcn>66</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>66</total_tcn>\r
-    <pkg_name>wearable/tct-audio-io-native-utc-2.3.2.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-package-manager-native-utc" category=" UnitTestCases ">\r
-    <auto_tcn>72</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>72</total_tcn>\r
-    <pkg_name>wearable/tct-package-manager-native-utc-2.3.2.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-player-native-ctc" category=" CompatibilityTestCases ">\r
-    <auto_tcn>4</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>4</total_tcn>\r
-    <pkg_name>wearable/tct-player-native-ctc-2.3.2.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-efl-util-native-itc" category=" IntegrationTestCases ">\r
-    <auto_tcn>2</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>2</total_tcn>\r
-    <pkg_name>wearable/tct-efl-util-native-itc-2.3.2.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-efl-ext-native-utc" category=" UnitTestCases ">\r
-    <auto_tcn>192</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>192</total_tcn>\r
-    <pkg_name>wearable/tct-efl-ext-native-utc-2.3.2.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-wifi-native-utc" category=" UnitTestCases ">\r
-    <auto_tcn>148</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>148</total_tcn>\r
-    <pkg_name>wearable/tct-wifi-native-utc-2.3.2.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-sensor-native-utc" category=" UnitTestCases ">\r
-    <auto_tcn>96</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>96</total_tcn>\r
-    <pkg_name>wearable/tct-sensor-native-utc-2.3.2.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-bundle-native-itc" category=" IntegrationTestCases ">\r
-    <auto_tcn>8</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>8</total_tcn>\r
-    <pkg_name>wearable/tct-bundle-native-itc-2.3.2.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-bundle-native-utc" category=" UnitTestCases ">\r
-    <auto_tcn>50</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>50</total_tcn>\r
-    <pkg_name>wearable/tct-bundle-native-utc-2.3.2.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-libstorage-native-utc" category=" UnitTestCases ">\r
-    <auto_tcn>31</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>31</total_tcn>\r
-    <pkg_name>wearable/tct-libstorage-native-utc-2.3.2.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-mime-type-native-utc" category=" UnitTestCases ">\r
-    <auto_tcn>15</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>15</total_tcn>\r
-    <pkg_name>wearable/tct-mime-type-native-utc-2.3.2.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-application-native-itc" category=" IntegrationTestCases ">\r
-    <auto_tcn>47</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>47</total_tcn>\r
-    <pkg_name>wearable/tct-application-native-itc-2.3.2.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-camera-native-ctc" category=" CompatibilityTestCases ">\r
-    <auto_tcn>1</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>1</total_tcn>\r
-    <pkg_name>wearable/tct-camera-native-ctc-2.3.2.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-player-native-utc" category=" UnitTestCases ">\r
-    <auto_tcn>136</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>136</total_tcn>\r
-    <pkg_name>wearable/tct-player-native-utc-2.3.2.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-appcore-agent-native-utc" category=" UnitTestCases ">\r
-    <auto_tcn>8</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>8</total_tcn>\r
-    <pkg_name>wearable/tct-appcore-agent-native-utc-2.3.2.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-system-info-native-utc" category=" UnitTestCases ">\r
-    <auto_tcn>12</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>12</total_tcn>\r
-    <pkg_name>wearable/tct-system-info-native-utc-2.3.2.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-device-native-ctc" category=" CompatibilityTestCases ">\r
-    <auto_tcn>1</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>1</total_tcn>\r
-    <pkg_name>wearable/tct-device-native-ctc-2.3.2.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-radio-native-itc" category=" IntegrationTestCases ">\r
-    <auto_tcn>10</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>10</total_tcn>\r
-    <pkg_name>wearable/tct-radio-native-itc-2.3.2.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-application-native-utc" category=" UnitTestCases ">\r
-    <auto_tcn>186</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>186</total_tcn>\r
-    <pkg_name>wearable/tct-application-native-utc-2.3.2.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-context-manager-native-utc" category=" UnitTestCases ">\r
-    <auto_tcn>23</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>23</total_tcn>\r
-    <pkg_name>wearable/tct-context-manager-native-utc-2.3.2.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-data-control-native-utc" category=" UnitTestCases ">\r
-    <auto_tcn>60</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>60</total_tcn>\r
-    <pkg_name>wearable/tct-data-control-native-utc-2.3.2.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-tts-native-utc" category=" UnitTestCases ">\r
-    <auto_tcn>50</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>50</total_tcn>\r
-    <pkg_name>wearable/tct-tts-native-utc-2.3.2.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-system-settings-native-utc" category=" UnitTestCases ">\r
-    <auto_tcn>11</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>11</total_tcn>\r
-    <pkg_name>wearable/tct-system-settings-native-utc-2.3.2.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-metadata-extractor-native-itc" category=" IntegrationTestCases ">\r
-    <auto_tcn>8</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>8</total_tcn>\r
-    <pkg_name>wearable/tct-metadata-extractor-native-itc-2.3.2.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-capi-message-port-native-utc" category=" UnitTestCases ">\r
-    <auto_tcn>40</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>40</total_tcn>\r
-    <pkg_name>wearable/tct-capi-message-port-native-utc-2.3.2.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-device-native-utc" category=" UnitTestCases ">\r
-    <auto_tcn>59</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>59</total_tcn>\r
-    <pkg_name>wearable/tct-device-native-utc-2.3.2.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-sound-manager-native-ctc" category=" CompatibilityTestCases ">\r
-    <auto_tcn>1</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>1</total_tcn>\r
-    <pkg_name>wearable/tct-sound-manager-native-ctc-2.3.2.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-widget-viewer-evas-native-itc" category=" IntegrationTestCases ">\r
-    <auto_tcn>23</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>23</total_tcn>\r
-    <pkg_name>wearable/tct-widget-viewer-evas-native-itc-2.3.2.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-cairo-native-itc" category=" IntegrationTestCases ">\r
-    <auto_tcn>4</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>4</total_tcn>\r
-    <pkg_name>wearable/tct-cairo-native-itc-2.3.2.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-image-util-native-utc" category=" UnitTestCases ">\r
-    <auto_tcn>57</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>57</total_tcn>\r
-    <pkg_name>wearable/tct-image-util-native-utc-2.3.2.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-media-key-native-itc" category=" IntegrationTestCases ">\r
-    <auto_tcn>1</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>1</total_tcn>\r
-    <pkg_name>wearable/tct-media-key-native-itc-2.3.2.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-nfc-native-utc" category=" UnitTestCases ">\r
-    <auto_tcn>157</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>157</total_tcn>\r
-    <pkg_name>wearable/tct-nfc-native-utc-2.3.2.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-dlog-native-itc" category=" IntegrationTestCases ">\r
-    <auto_tcn>2</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>2</total_tcn>\r
-    <pkg_name>wearable/tct-dlog-native-itc-2.3.2.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-platform-permission-native-ctc" category=" CompatibilityTestCases ">\r
-    <auto_tcn>141</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>141</total_tcn>\r
-    <pkg_name>wearable/tct-platform-permission-native-ctc-2.3.2.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-runtime-info-native-itc" category=" IntegrationTestCases ">\r
-    <auto_tcn>4</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>4</total_tcn>\r
-    <pkg_name>wearable/tct-runtime-info-native-itc-2.3.2.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-efl-util-native-utc" category=" UnitTestCases ">\r
-    <auto_tcn>13</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>13</total_tcn>\r
-    <pkg_name>wearable/tct-efl-util-native-utc-2.3.2.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-audio-io-native-ctc" category=" CompatibilityTestCases ">\r
-    <auto_tcn>1</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>1</total_tcn>\r
-    <pkg_name>wearable/tct-audio-io-native-ctc-2.3.2.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-device-native-itc" category=" IntegrationTestCases ">\r
-    <auto_tcn>16</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>16</total_tcn>\r
-    <pkg_name>wearable/tct-device-native-itc-2.3.2.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-base-utils-native-utc" category=" UnitTestCases ">\r
-    <auto_tcn>645</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>645</total_tcn>\r
-    <pkg_name>wearable/tct-base-utils-native-utc-2.3.2.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-recorder-native-itc" category=" IntegrationTestCases ">\r
-    <auto_tcn>33</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>33</total_tcn>\r
-    <pkg_name>wearable/tct-recorder-native-itc-2.3.2.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-player-native-itc" category=" IntegrationTestCases ">\r
-    <auto_tcn>43</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>43</total_tcn>\r
-    <pkg_name>wearable/tct-player-native-itc-2.3.2.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-mime-type-native-itc" category=" IntegrationTestCases ">\r
-    <auto_tcn>2</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>2</total_tcn>\r
-    <pkg_name>wearable/tct-mime-type-native-itc-2.3.2.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-system-info-native-ctc" category=" CompatibilityTestCases ">\r
-    <auto_tcn>3</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>3</total_tcn>\r
-    <pkg_name>wearable/tct-system-info-native-ctc-2.3.2.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-key-manager-native-itc" category=" IntegrationTestCases ">\r
-    <auto_tcn>26</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>26</total_tcn>\r
-    <pkg_name>wearable/tct-key-manager-native-itc-2.3.2.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-connection-native-ctc" category=" CompatibilityTestCases ">\r
-    <auto_tcn>1</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>1</total_tcn>\r
-    <pkg_name>wearable/tct-connection-native-ctc-2.3.2.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-widget-service-native-itc" category=" IntegrationTestCases ">\r
-    <auto_tcn>18</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>18</total_tcn>\r
-    <pkg_name>wearable/tct-widget-service-native-itc-2.3.2.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-runtime-info-native-ctc" category=" CompatibilityTestCases ">\r
-    <auto_tcn>15</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>15</total_tcn>\r
-    <pkg_name>wearable/tct-runtime-info-native-ctc-2.3.2.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-smartcard-native-utc" category=" UnitTestCases ">\r
-    <auto_tcn>33</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>33</total_tcn>\r
-    <pkg_name>wearable/tct-smartcard-native-utc-2.3.2.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-tts-native-itc" category=" IntegrationTestCases ">\r
-    <auto_tcn>14</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>14</total_tcn>\r
-    <pkg_name>wearable/tct-tts-native-itc-2.3.2.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-badge-native-itc" category=" IntegrationTestCases ">\r
-    <auto_tcn>3</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>3</total_tcn>\r
-    <pkg_name>wearable/tct-badge-native-itc-2.3.2.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-appcore-watch-native-itc" category=" IntegrationTestCases ">\r
-    <auto_tcn>14</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>14</total_tcn>\r
-    <pkg_name>wearable/tct-appcore-watch-native-itc-2.3.2.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-smartcard-native-itc" category=" IntegrationTestCases ">\r
-    <auto_tcn>8</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>8</total_tcn>\r
-    <pkg_name>wearable/tct-smartcard-native-itc-2.3.2.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-wifi-native-itc" category=" IntegrationTestCases ">\r
-    <auto_tcn>46</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>46</total_tcn>\r
-    <pkg_name>wearable/tct-wifi-native-itc-2.3.2.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-libstorage-native-itc" category=" IntegrationTestCases ">\r
-    <auto_tcn>10</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>10</total_tcn>\r
-    <pkg_name>wearable/tct-libstorage-native-itc-2.3.2.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-stt-native-utc" category=" UnitTestCases ">\r
-    <auto_tcn>58</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>58</total_tcn>\r
-    <pkg_name>wearable/tct-stt-native-utc-2.3.2.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-stt-native-itc" category=" IntegrationTestCases ">\r
-    <auto_tcn>20</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>20</total_tcn>\r
-    <pkg_name>wearable/tct-stt-native-itc-2.3.2.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-recorder-native-utc" category=" UnitTestCases ">\r
-    <auto_tcn>114</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>114</total_tcn>\r
-    <pkg_name>wearable/tct-recorder-native-utc-2.3.2.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-runtime-info-native-utc" category=" UnitTestCases ">\r
-    <auto_tcn>114</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>114</total_tcn>\r
-    <pkg_name>wearable/tct-runtime-info-native-utc-2.3.2.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-bluetooth-native-utc" category=" UnitTestCases ">\r
-    <auto_tcn>263</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>263</total_tcn>\r
-    <pkg_name>wearable/tct-bluetooth-native-utc-2.3.2.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-capi-media-tool-native-itc" category=" IntegrationTestCases ">\r
-    <auto_tcn>37</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>37</total_tcn>\r
-    <pkg_name>wearable/tct-capi-media-tool-native-itc-2.3.2.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-location-manager-native-ctc" category=" CompatibilityTestCases ">\r
-    <auto_tcn>1</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>1</total_tcn>\r
-    <pkg_name>wearable/tct-location-manager-native-ctc-2.3.2.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-package-manager-native-itc" category=" IntegrationTestCases ">\r
-    <auto_tcn>30</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>30</total_tcn>\r
-    <pkg_name>wearable/tct-package-manager-native-itc-2.3.2.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-telephony-native-ctc" category=" CompatibilityTestCases ">\r
-    <auto_tcn>1</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>1</total_tcn>\r
-    <pkg_name>wearable/tct-telephony-native-ctc-2.3.2.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-media-content-native-itc" category=" IntegrationTestCases ">\r
-    <auto_tcn>142</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>142</total_tcn>\r
-    <pkg_name>wearable/tct-media-content-native-itc-2.3.2.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-tbm-native-itc" category=" IntegrationTestCases ">\r
-    <auto_tcn>7</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>7</total_tcn>\r
-    <pkg_name>wearable/tct-tbm-native-itc-2.3.2.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-webkit2-native-itc" category=" IntegrationTestCases ">\r
-    <auto_tcn>72</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>72</total_tcn>\r
-    <pkg_name>wearable/tct-webkit2-native-itc-2.3.2.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-notification-native-utc" category=" UnitTestCases ">\r
-    <auto_tcn>98</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>98</total_tcn>\r
-    <pkg_name>wearable/tct-notification-native-utc-2.3.2.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-sound-manager-native-utc" category=" UnitTestCases ">\r
-    <auto_tcn>64</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>64</total_tcn>\r
-    <pkg_name>wearable/tct-sound-manager-native-utc-2.3.2.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-notification-native-itc" category=" IntegrationTestCases ">\r
-    <auto_tcn>41</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>41</total_tcn>\r
-    <pkg_name>wearable/tct-notification-native-itc-2.3.2.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-telephony-native-itc" category=" IntegrationTestCases ">\r
-    <auto_tcn>21</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>21</total_tcn>\r
-    <pkg_name>wearable/tct-telephony-native-itc-2.3.2.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-audio-io-native-itc" category=" IntegrationTestCases ">\r
-    <auto_tcn>21</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>21</total_tcn>\r
-    <pkg_name>wearable/tct-audio-io-native-itc-2.3.2.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-location-manager-native-itc" category=" IntegrationTestCases ">\r
-    <auto_tcn>35</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>35</total_tcn>\r
-    <pkg_name>wearable/tct-location-manager-native-itc-2.3.2.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-tone-player-native-itc" category=" IntegrationTestCases ">\r
-    <auto_tcn>1</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>1</total_tcn>\r
-    <pkg_name>wearable/tct-tone-player-native-itc-2.3.2.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-app-manager-native-utc" category=" UnitTestCases ">\r
-    <auto_tcn>108</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>108</total_tcn>\r
-    <pkg_name>wearable/tct-app-manager-native-utc-2.3.2.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-image-util-native-ctc" category=" CompatibilityTestCases ">\r
-    <auto_tcn>2</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>2</total_tcn>\r
-    <pkg_name>wearable/tct-image-util-native-ctc-2.3.2.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-privilege-info-native-itc" category=" IntegrationTestCases ">\r
-    <auto_tcn>4</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>4</total_tcn>\r
-    <pkg_name>wearable/tct-privilege-info-native-itc-2.3.2.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-image-util-native-itc" category=" IntegrationTestCases ">\r
-    <auto_tcn>12</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>12</total_tcn>\r
-    <pkg_name>wearable/tct-image-util-native-itc-2.3.2.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-connection-native-itc" category=" IntegrationTestCases ">\r
-    <auto_tcn>57</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>57</total_tcn>\r
-    <pkg_name>wearable/tct-connection-native-itc-2.3.2.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-nfc-native-itc" category=" IntegrationTestCases ">\r
-    <auto_tcn>39</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>39</total_tcn>\r
-    <pkg_name>wearable/tct-nfc-native-itc-2.3.2.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-media-key-native-utc" category=" UnitTestCases ">\r
-    <auto_tcn>3</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>3</total_tcn>\r
-    <pkg_name>wearable/tct-media-key-native-utc-2.3.2.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-widget-service-native-utc" category=" UnitTestCases ">\r
-    <auto_tcn>46</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>46</total_tcn>\r
-    <pkg_name>wearable/tct-widget-service-native-utc-2.3.2.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-wav-player-native-utc" category=" UnitTestCases ">\r
-    <auto_tcn>9</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>9</total_tcn>\r
-    <pkg_name>wearable/tct-wav-player-native-utc-2.3.2.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-bluetooth-native-itc" category=" IntegrationTestCases ">\r
-    <auto_tcn>43</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>43</total_tcn>\r
-    <pkg_name>wearable/tct-bluetooth-native-itc-2.3.2.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-system-info-native-itc" category=" IntegrationTestCases ">\r
-    <auto_tcn>4</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>4</total_tcn>\r
-    <pkg_name>wearable/tct-system-info-native-itc-2.3.2.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-sensor-native-itc" category=" IntegrationTestCases ">\r
-    <auto_tcn>25</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>25</total_tcn>\r
-    <pkg_name>wearable/tct-sensor-native-itc-2.3.2.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-data-control-native-itc" category=" IntegrationTestCases ">\r
-    <auto_tcn>33</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>33</total_tcn>\r
-    <pkg_name>wearable/tct-data-control-native-itc-2.3.2.zip</pkg_name>\r
-  </suite>\r
-</ns3:testplan>\r
-\r
diff --git a/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/shell/plan/Native_Full_wearable_3.0.xml b/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/shell/plan/Native_Full_wearable_3.0.xml
deleted file mode 100755 (executable)
index c1e9f25..0000000
+++ /dev/null
@@ -1,1133 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>\r
-<ns3:testplan xmlns:ns3="http://www.example.org/plan/" xmlns="" name="Native_Full_wearable_3.0" profile="wearable">\r
-  <execute_type>Auto</execute_type>\r
-  <suite name="tct-connection-native-utc" category=" UnitTestCases ">\r
-    <auto_tcn>172</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>172</total_tcn>\r
-    <pkg_name>wearable/tct-connection-native-utc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-webkit2-native-utc" category=" UnitTestCases ">\r
-    <auto_tcn>183</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>183</total_tcn>\r
-    <pkg_name>wearable/tct-webkit2-native-utc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-vpn-service-native-itc" category=" IntegrationTestCases ">\r
-    <auto_tcn>11</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>11</total_tcn>\r
-    <pkg_name>wearable/tct-vpn-service-native-itc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-privilege-info-native-utc" category=" UnitTestCases ">\r
-    <auto_tcn>14</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>14</total_tcn>\r
-    <pkg_name>wearable/tct-privilege-info-native-utc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-dali-adaptor-native-utc" category=" UnitTestCases ">\r
-    <auto_tcn>96</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>96</total_tcn>\r
-    <pkg_name>wearable/tct-dali-adaptor-native-utc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-mtp-native-itc" category=" IntegrationTestCases ">\r
-    <auto_tcn>1</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>1</total_tcn>\r
-    <pkg_name>wearable/tct-mtp-native-itc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-wav-player-native-itc" category=" IntegrationTestCases ">\r
-    <auto_tcn>2</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>2</total_tcn>\r
-    <pkg_name>wearable/tct-wav-player-native-itc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-native-common-native-itc" category=" IntegrationTestCases ">\r
-    <auto_tcn>2</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>2</total_tcn>\r
-    <pkg_name>wearable/tct-native-common-native-itc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-widget_viewer_evas-native-utc" category=" UnitTestCases ">\r
-    <auto_tcn>49</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>49</total_tcn>\r
-    <pkg_name>wearable/tct-widget_viewer_evas-native-utc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-capi-ui-inputmethod-manager-native-utc" category=" UnitTestCases ">\r
-    <auto_tcn>8</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>8</total_tcn>\r
-    <pkg_name>wearable/tct-capi-ui-inputmethod-manager-native-utc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-filesystem-permission-native-ctc" category=" CompatibilityTestCases ">\r
-    <auto_tcn>32</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>32</total_tcn>\r
-    <pkg_name>wearable/tct-filesystem-permission-native-ctc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-messages-native-itc" category=" IntegrationTestCases ">\r
-    <auto_tcn>18</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>18</total_tcn>\r
-    <pkg_name>wearable/tct-messages-native-itc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-badge-native-utc" category=" UnitTestCases ">\r
-    <auto_tcn>25</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>25</total_tcn>\r
-    <pkg_name>wearable/tct-badge-native-utc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-widget_viewer_evas-native-itc" category=" IntegrationTestCases ">\r
-    <auto_tcn>23</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>23</total_tcn>\r
-    <pkg_name>wearable/tct-widget_viewer_evas-native-itc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-mediademuxer-native-utc" category=" UnitTestCases ">\r
-    <auto_tcn>36</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>36</total_tcn>\r
-    <pkg_name>wearable/tct-mediademuxer-native-utc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-capi-message-port-native-itc" category=" IntegrationTestCases ">\r
-    <auto_tcn>6</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>6</total_tcn>\r
-    <pkg_name>wearable/tct-capi-message-port-native-itc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-system-settings-native-itc" category=" IntegrationTestCases ">\r
-    <auto_tcn>4</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>4</total_tcn>\r
-    <pkg_name>wearable/tct-system-settings-native-itc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-messages-native-utc" category=" UnitTestCases ">\r
-    <auto_tcn>85</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>85</total_tcn>\r
-    <pkg_name>wearable/tct-messages-native-utc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-push-native-itc" category=" IntegrationTestCases ">\r
-    <auto_tcn>12</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>12</total_tcn>\r
-    <pkg_name>wearable/tct-push-native-itc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-sensor-native-ctc" category=" CompatibilityTestCases ">\r
-    <auto_tcn>9</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>9</total_tcn>\r
-    <pkg_name>wearable/tct-sensor-native-ctc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-appcore-agent-native-itc" category=" IntegrationTestCases ">\r
-    <auto_tcn>2</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>2</total_tcn>\r
-    <pkg_name>wearable/tct-appcore-agent-native-itc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-appcore-watch-native-utc" category=" UnitTestCases ">\r
-    <auto_tcn>37</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>37</total_tcn>\r
-    <pkg_name>wearable/tct-appcore-watch-native-utc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-radio-native-utc" category=" UnitTestCases ">\r
-    <auto_tcn>40</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>40</total_tcn>\r
-    <pkg_name>wearable/tct-radio-native-utc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-location-manager-native-utc" category=" UnitTestCases ">\r
-    <auto_tcn>143</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>143</total_tcn>\r
-    <pkg_name>wearable/tct-location-manager-native-utc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-camera-native-utc" category=" UnitTestCases ">\r
-    <auto_tcn>362</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>362</total_tcn>\r
-    <pkg_name>wearable/tct-camera-native-utc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-thumbnail-util-native-itc" category=" IntegrationTestCases ">\r
-    <auto_tcn>6</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>6</total_tcn>\r
-    <pkg_name>wearable/tct-thumbnail-util-native-itc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-cairo-native-utc" category=" UnitTestCases ">\r
-    <auto_tcn>18</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>18</total_tcn>\r
-    <pkg_name>wearable/tct-cairo-native-utc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-tbm-native-utc" category=" UnitTestCases ">\r
-    <auto_tcn>17</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>17</total_tcn>\r
-    <pkg_name>wearable/tct-tbm-native-utc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-streamrecorder-native-utc" category=" UnitTestCases ">\r
-    <auto_tcn>125</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>125</total_tcn>\r
-    <pkg_name>wearable/tct-streamrecorder-native-utc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-libstorage-native-ctc" category=" CompatibilityTestCases ">\r
-    <auto_tcn>2</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>2</total_tcn>\r
-    <pkg_name>wearable/tct-libstorage-native-ctc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-accounts-svc-native-itc" category=" IntegrationTestCases ">\r
-    <auto_tcn>48</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>48</total_tcn>\r
-    <pkg_name>wearable/tct-accounts-svc-native-itc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-telephony-native-utc" category=" UnitTestCases ">\r
-    <auto_tcn>208</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>208</total_tcn>\r
-    <pkg_name>wearable/tct-telephony-native-utc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-phonenumber-utils-native-utc" category=" UnitTestCases ">\r
-    <auto_tcn>13</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>13</total_tcn>\r
-    <pkg_name>wearable/tct-phonenumber-utils-native-utc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-native-common-native-utc" category=" UnitTestCases ">\r
-    <auto_tcn>5</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>5</total_tcn>\r
-    <pkg_name>wearable/tct-native-common-native-utc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-capi-media-vision-native-utc" category=" UnitTestCases ">\r
-    <auto_tcn>155</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>155</total_tcn>\r
-    <pkg_name>wearable/tct-capi-media-vision-native-utc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-fido-client-native-utc" category=" UnitTestCases ">\r
-    <auto_tcn>24</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>24</total_tcn>\r
-    <pkg_name>wearable/tct-fido-client-native-utc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-base-utils-native-itc" category=" IntegrationTestCases ">\r
-    <auto_tcn>287</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>287</total_tcn>\r
-    <pkg_name>wearable/tct-base-utils-native-itc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-appcore-widget-native-itc" category=" IntegrationTestCases ">\r
-    <auto_tcn>5</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>5</total_tcn>\r
-    <pkg_name>wearable/tct-appcore-widget-native-itc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-metadata-editor-native-utc" category=" UnitTestCases ">\r
-    <auto_tcn>18</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>18</total_tcn>\r
-    <pkg_name>wearable/tct-metadata-editor-native-utc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-mediacodec-native-utc" category=" UnitTestCases ">\r
-    <auto_tcn>49</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>49</total_tcn>\r
-    <pkg_name>wearable/tct-mediacodec-native-utc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-capi-maps-service-native-utc" category=" UnitTestCases ">\r
-    <auto_tcn>337</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>337</total_tcn>\r
-    <pkg_name>wearable/tct-capi-maps-service-native-utc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-nsd-native-utc" category=" UnitTestCases ">\r
-    <auto_tcn>71</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>71</total_tcn>\r
-    <pkg_name>wearable/tct-nsd-native-utc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-capi-media-streamer-native-utc" category=" UnitTestCases ">\r
-    <auto_tcn>102</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>102</total_tcn>\r
-    <pkg_name>wearable/tct-capi-media-streamer-native-utc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-mediacodec-native-itc" category=" IntegrationTestCases ">\r
-    <auto_tcn>17</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>17</total_tcn>\r
-    <pkg_name>wearable/tct-mediacodec-native-itc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-key-manager-native-utc" category=" UnitTestCases ">\r
-    <auto_tcn>127</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>127</total_tcn>\r
-    <pkg_name>wearable/tct-key-manager-native-utc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-media-content-native-utc" category=" UnitTestCases ">\r
-    <auto_tcn>504</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>504</total_tcn>\r
-    <pkg_name>wearable/tct-media-content-native-utc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-opengl-native-ctc" category=" CompatibilityTestCases ">\r
-    <auto_tcn>3</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>3</total_tcn>\r
-    <pkg_name>wearable/tct-opengl-native-ctc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-sound-manager-native-itc" category=" IntegrationTestCases ">\r
-    <auto_tcn>28</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>28</total_tcn>\r
-    <pkg_name>wearable/tct-sound-manager-native-itc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-tone-player-native-utc" category=" UnitTestCases ">\r
-    <auto_tcn>9</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>9</total_tcn>\r
-    <pkg_name>wearable/tct-tone-player-native-utc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-media-controller-native-utc" category=" UnitTestCases ">\r
-    <auto_tcn>85</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>85</total_tcn>\r
-    <pkg_name>wearable/tct-media-controller-native-utc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-appcore-widget-native-utc" category=" UnitTestCases ">\r
-    <auto_tcn>20</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>20</total_tcn>\r
-    <pkg_name>wearable/tct-appcore-widget-native-utc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-efl-ext-native-itc" category=" IntegrationTestCases ">\r
-    <auto_tcn>59</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>59</total_tcn>\r
-    <pkg_name>wearable/tct-efl-ext-native-itc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-voice-control-elm-native-itc" category=" IntegrationTestCases ">\r
-    <auto_tcn>13</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>13</total_tcn>\r
-    <pkg_name>wearable/tct-voice-control-elm-native-itc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-metadata-extractor-native-utc" category=" UnitTestCases ">\r
-    <auto_tcn>23</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>23</total_tcn>\r
-    <pkg_name>wearable/tct-metadata-extractor-native-utc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-camera-native-itc" category=" IntegrationTestCases ">\r
-    <auto_tcn>82</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>82</total_tcn>\r
-    <pkg_name>wearable/tct-camera-native-itc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-motion-native-itc" category=" IntegrationTestCases ">\r
-    <auto_tcn>8</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>8</total_tcn>\r
-    <pkg_name>wearable/tct-motion-native-itc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-push-native-utc" category=" UnitTestCases ">\r
-    <auto_tcn>28</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>28</total_tcn>\r
-    <pkg_name>wearable/tct-push-native-utc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-dlog-native-utc" category=" UnitTestCases ">\r
-    <auto_tcn>4</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>4</total_tcn>\r
-    <pkg_name>wearable/tct-dlog-native-utc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-app-manager-native-itc" category=" IntegrationTestCases ">\r
-    <auto_tcn>42</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>42</total_tcn>\r
-    <pkg_name>wearable/tct-app-manager-native-itc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-audio-io-native-utc" category=" UnitTestCases ">\r
-    <auto_tcn>94</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>94</total_tcn>\r
-    <pkg_name>wearable/tct-audio-io-native-utc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-package-manager-native-utc" category=" UnitTestCases ">\r
-    <auto_tcn>92</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>92</total_tcn>\r
-    <pkg_name>wearable/tct-package-manager-native-utc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-capi-maps-service-native-itc" category=" IntegrationTestCases ">\r
-    <auto_tcn>72</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>72</total_tcn>\r
-    <pkg_name>wearable/tct-capi-maps-service-native-itc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-player-native-ctc" category=" CompatibilityTestCases ">\r
-    <auto_tcn>4</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>4</total_tcn>\r
-    <pkg_name>wearable/tct-player-native-ctc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-mediatool-native-utc" category=" UnitTestCases ">\r
-    <auto_tcn>133</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>133</total_tcn>\r
-    <pkg_name>wearable/tct-mediatool-native-utc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-dali-core-native-itc" category=" IntegrationTestCases ">\r
-    <auto_tcn>801</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>801</total_tcn>\r
-    <pkg_name>wearable/tct-dali-core-native-itc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-sync-manager-native-utc" category=" UnitTestCases ">\r
-    <auto_tcn>28</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>28</total_tcn>\r
-    <pkg_name>wearable/tct-sync-manager-native-utc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-efl-util-native-itc" category=" IntegrationTestCases ">\r
-    <auto_tcn>5</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>5</total_tcn>\r
-    <pkg_name>wearable/tct-efl-util-native-itc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-efl-ext-native-utc" category=" UnitTestCases ">\r
-    <auto_tcn>151</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>151</total_tcn>\r
-    <pkg_name>wearable/tct-efl-ext-native-utc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-wifi-native-utc" category=" UnitTestCases ">\r
-    <auto_tcn>208</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>208</total_tcn>\r
-    <pkg_name>wearable/tct-wifi-native-utc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-sensor-native-utc" category=" UnitTestCases ">\r
-    <auto_tcn>66</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>66</total_tcn>\r
-    <pkg_name>wearable/tct-sensor-native-utc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-capi-mediamuxer-native-itc" category=" IntegrationTestCases ">\r
-    <auto_tcn>9</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>9</total_tcn>\r
-    <pkg_name>wearable/tct-capi-mediamuxer-native-itc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-bundle-native-utc" category=" UnitTestCases ">\r
-    <auto_tcn>53</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>53</total_tcn>\r
-    <pkg_name>wearable/tct-bundle-native-utc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-bundle-native-itc" category=" IntegrationTestCases ">\r
-    <auto_tcn>9</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>9</total_tcn>\r
-    <pkg_name>wearable/tct-bundle-native-itc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-libstorage-native-utc" category=" UnitTestCases ">\r
-    <auto_tcn>31</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>31</total_tcn>\r
-    <pkg_name>wearable/tct-libstorage-native-utc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-widget_service-native-utc" category=" UnitTestCases ">\r
-    <auto_tcn>46</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>46</total_tcn>\r
-    <pkg_name>wearable/tct-widget_service-native-utc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-mime-type-native-utc" category=" UnitTestCases ">\r
-    <auto_tcn>15</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>15</total_tcn>\r
-    <pkg_name>wearable/tct-mime-type-native-utc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-url-download-native-itc" category=" IntegrationTestCases ">\r
-    <auto_tcn>27</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>27</total_tcn>\r
-    <pkg_name>wearable/tct-url-download-native-itc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-capi-ui-inputmethod-native-utc" category=" UnitTestCases ">\r
-    <auto_tcn>99</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>99</total_tcn>\r
-    <pkg_name>wearable/tct-capi-ui-inputmethod-native-utc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-eom-native-itc" category=" IntegrationTestCases ">\r
-    <auto_tcn>13</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>13</total_tcn>\r
-    <pkg_name>wearable/tct-eom-native-itc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-contacts-service2-native-utc" category=" UnitTestCases ">\r
-    <auto_tcn>206</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>206</total_tcn>\r
-    <pkg_name>wearable/tct-contacts-service2-native-utc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-application-native-itc" category=" IntegrationTestCases ">\r
-    <auto_tcn>55</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>55</total_tcn>\r
-    <pkg_name>wearable/tct-application-native-itc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-camera-native-ctc" category=" CompatibilityTestCases ">\r
-    <auto_tcn>1</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>1</total_tcn>\r
-    <pkg_name>wearable/tct-camera-native-ctc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-player-native-utc" category=" UnitTestCases ">\r
-    <auto_tcn>191</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>191</total_tcn>\r
-    <pkg_name>wearable/tct-player-native-utc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-voice-control-elm-native-utc" category=" UnitTestCases ">\r
-    <auto_tcn>71</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>71</total_tcn>\r
-    <pkg_name>wearable/tct-voice-control-elm-native-utc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-appcore-agent-native-utc" category=" UnitTestCases ">\r
-    <auto_tcn>11</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>11</total_tcn>\r
-    <pkg_name>wearable/tct-appcore-agent-native-utc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-system-info-native-utc" category=" UnitTestCases ">\r
-    <auto_tcn>12</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>12</total_tcn>\r
-    <pkg_name>wearable/tct-system-info-native-utc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-device-native-ctc" category=" CompatibilityTestCases ">\r
-    <auto_tcn>1</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>1</total_tcn>\r
-    <pkg_name>wearable/tct-device-native-ctc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-application-native-utc" category=" UnitTestCases ">\r
-    <auto_tcn>268</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>268</total_tcn>\r
-    <pkg_name>wearable/tct-application-native-utc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-radio-native-itc" category=" IntegrationTestCases ">\r
-    <auto_tcn>12</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>12</total_tcn>\r
-    <pkg_name>wearable/tct-radio-native-itc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-data-control-native-utc" category=" UnitTestCases ">\r
-    <auto_tcn>89</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>89</total_tcn>\r
-    <pkg_name>wearable/tct-data-control-native-utc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-nsd-native-itc" category=" IntegrationTestCases ">\r
-    <auto_tcn>18</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>18</total_tcn>\r
-    <pkg_name>wearable/tct-nsd-native-itc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-tts-native-utc" category=" UnitTestCases ">\r
-    <auto_tcn>104</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>104</total_tcn>\r
-    <pkg_name>wearable/tct-tts-native-utc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-system-settings-native-utc" category=" UnitTestCases ">\r
-    <auto_tcn>78</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>78</total_tcn>\r
-    <pkg_name>wearable/tct-system-settings-native-utc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-metadata-extractor-native-itc" category=" IntegrationTestCases ">\r
-    <auto_tcn>8</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>8</total_tcn>\r
-    <pkg_name>wearable/tct-metadata-extractor-native-itc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-device-native-utc" category=" UnitTestCases ">\r
-    <auto_tcn>64</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>64</total_tcn>\r
-    <pkg_name>wearable/tct-device-native-utc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-capi-message-port-native-utc" category=" UnitTestCases ">\r
-    <auto_tcn>53</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>53</total_tcn>\r
-    <pkg_name>wearable/tct-capi-message-port-native-utc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-sound-manager-native-ctc" category=" CompatibilityTestCases ">\r
-    <auto_tcn>1</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>1</total_tcn>\r
-    <pkg_name>wearable/tct-sound-manager-native-ctc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-cairo-native-itc" category=" IntegrationTestCases ">\r
-    <auto_tcn>9</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>9</total_tcn>\r
-    <pkg_name>wearable/tct-cairo-native-itc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-image-util-native-utc" category=" UnitTestCases ">\r
-    <auto_tcn>214</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>214</total_tcn>\r
-    <pkg_name>wearable/tct-image-util-native-utc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-capi-ui-inputmethod-manager-native-itc" category=" IntegrationTestCases ">\r
-    <auto_tcn>2</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>2</total_tcn>\r
-    <pkg_name>wearable/tct-capi-ui-inputmethod-manager-native-itc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-media-key-native-itc" category=" IntegrationTestCases ">\r
-    <auto_tcn>1</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>1</total_tcn>\r
-    <pkg_name>wearable/tct-media-key-native-itc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-trace-native-utc" category=" UnitTestCases ">\r
-    <auto_tcn>5</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>5</total_tcn>\r
-    <pkg_name>wearable/tct-trace-native-utc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-nfc-native-utc" category=" UnitTestCases ">\r
-    <auto_tcn>160</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>160</total_tcn>\r
-    <pkg_name>wearable/tct-nfc-native-utc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-dlog-native-itc" category=" IntegrationTestCases ">\r
-    <auto_tcn>2</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>2</total_tcn>\r
-    <pkg_name>wearable/tct-dlog-native-itc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-platform-permission-native-ctc" category=" CompatibilityTestCases ">\r
-    <auto_tcn>46</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>46</total_tcn>\r
-    <pkg_name>wearable/tct-platform-permission-native-ctc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-metadata-editor-native-itc" category=" IntegrationTestCases ">\r
-    <auto_tcn>7</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>7</total_tcn>\r
-    <pkg_name>wearable/tct-metadata-editor-native-itc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-runtime-info-native-itc" category=" IntegrationTestCases ">\r
-    <auto_tcn>11</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>11</total_tcn>\r
-    <pkg_name>wearable/tct-runtime-info-native-itc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-libstorage64-native-utc" category=" UnitTestCases ">\r
-    <auto_tcn>31</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>31</total_tcn>\r
-    <pkg_name>wearable/tct-libstorage64-native-utc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-efl-util-native-utc" category=" UnitTestCases ">\r
-    <auto_tcn>45</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>45</total_tcn>\r
-    <pkg_name>wearable/tct-efl-util-native-utc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-dali-toolkit-native-itc" category=" IntegrationTestCases ">\r
-    <auto_tcn>234</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>234</total_tcn>\r
-    <pkg_name>wearable/tct-dali-toolkit-native-itc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-audio-io-native-ctc" category=" CompatibilityTestCases ">\r
-    <auto_tcn>1</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>1</total_tcn>\r
-    <pkg_name>wearable/tct-audio-io-native-ctc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-device-native-itc" category=" IntegrationTestCases ">\r
-    <auto_tcn>16</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>16</total_tcn>\r
-    <pkg_name>wearable/tct-device-native-itc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-base-utils-native-utc" category=" UnitTestCases ">\r
-    <auto_tcn>877</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>877</total_tcn>\r
-    <pkg_name>wearable/tct-base-utils-native-utc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-oauth2-native-itc" category=" IntegrationTestCases ">\r
-    <auto_tcn>18</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>18</total_tcn>\r
-    <pkg_name>wearable/tct-oauth2-native-itc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-dali-toolkit-native-utc" category=" UnitTestCases ">\r
-    <auto_tcn>435</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>435</total_tcn>\r
-    <pkg_name>wearable/tct-dali-toolkit-native-utc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-recorder-native-itc" category=" IntegrationTestCases ">\r
-    <auto_tcn>33</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>33</total_tcn>\r
-    <pkg_name>wearable/tct-recorder-native-itc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-mediacodec-native-ctc" category=" CompatibilityTestCases ">\r
-    <auto_tcn>1</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>1</total_tcn>\r
-    <pkg_name>wearable/tct-mediacodec-native-ctc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-player-native-itc" category=" IntegrationTestCases ">\r
-    <auto_tcn>55</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>55</total_tcn>\r
-    <pkg_name>wearable/tct-player-native-itc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-media-controller-native-itc" category=" IntegrationTestCases ">\r
-    <auto_tcn>28</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>28</total_tcn>\r
-    <pkg_name>wearable/tct-media-controller-native-itc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-mime-type-native-itc" category=" IntegrationTestCases ">\r
-    <auto_tcn>2</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>2</total_tcn>\r
-    <pkg_name>wearable/tct-mime-type-native-itc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-system-info-native-ctc" category=" CompatibilityTestCases ">\r
-    <auto_tcn>4</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>4</total_tcn>\r
-    <pkg_name>wearable/tct-system-info-native-ctc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-thumbnail-util-native-utc" category=" UnitTestCases ">\r
-    <auto_tcn>14</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>14</total_tcn>\r
-    <pkg_name>wearable/tct-thumbnail-util-native-utc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-key-manager-native-itc" category=" IntegrationTestCases ">\r
-    <auto_tcn>40</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>40</total_tcn>\r
-    <pkg_name>wearable/tct-key-manager-native-itc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-connection-native-ctc" category=" CompatibilityTestCases ">\r
-    <auto_tcn>1</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>1</total_tcn>\r
-    <pkg_name>wearable/tct-connection-native-ctc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-runtime-info-native-ctc" category=" CompatibilityTestCases ">\r
-    <auto_tcn>15</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>15</total_tcn>\r
-    <pkg_name>wearable/tct-runtime-info-native-ctc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-smartcard-native-utc" category=" UnitTestCases ">\r
-    <auto_tcn>33</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>33</total_tcn>\r
-    <pkg_name>wearable/tct-smartcard-native-utc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-tts-native-itc" category=" IntegrationTestCases ">\r
-    <auto_tcn>14</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>14</total_tcn>\r
-    <pkg_name>wearable/tct-tts-native-itc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-badge-native-itc" category=" IntegrationTestCases ">\r
-    <auto_tcn>6</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>6</total_tcn>\r
-    <pkg_name>wearable/tct-badge-native-itc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-mtp-native-utc" category=" UnitTestCases ">\r
-    <auto_tcn>37</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>37</total_tcn>\r
-    <pkg_name>wearable/tct-mtp-native-utc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-appcore-watch-native-itc" category=" IntegrationTestCases ">\r
-    <auto_tcn>14</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>14</total_tcn>\r
-    <pkg_name>wearable/tct-appcore-watch-native-itc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-smartcard-native-itc" category=" IntegrationTestCases ">\r
-    <auto_tcn>8</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>8</total_tcn>\r
-    <pkg_name>wearable/tct-smartcard-native-itc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-iotcon-native-utc" category=" UnitTestCases ">\r
-    <auto_tcn>346</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>346</total_tcn>\r
-    <pkg_name>wearable/tct-iotcon-native-utc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-wifi-native-itc" category=" IntegrationTestCases ">\r
-    <auto_tcn>60</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>60</total_tcn>\r
-    <pkg_name>wearable/tct-wifi-native-itc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-fido-client-native-itc" category=" IntegrationTestCases ">\r
-    <auto_tcn>19</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>19</total_tcn>\r
-    <pkg_name>wearable/tct-fido-client-native-itc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-oauth2-native-utc" category=" UnitTestCases ">\r
-    <auto_tcn>89</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>89</total_tcn>\r
-    <pkg_name>wearable/tct-oauth2-native-utc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-sync-manager-native-itc" category=" IntegrationTestCases ">\r
-    <auto_tcn>5</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>5</total_tcn>\r
-    <pkg_name>wearable/tct-sync-manager-native-itc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-accounts-svc-native-utc" category=" UnitTestCases ">\r
-    <auto_tcn>144</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>144</total_tcn>\r
-    <pkg_name>wearable/tct-accounts-svc-native-utc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-libstorage-native-itc" category=" IntegrationTestCases ">\r
-    <auto_tcn>10</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>10</total_tcn>\r
-    <pkg_name>wearable/tct-libstorage-native-itc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-url-download-native-utc" category=" UnitTestCases ">\r
-    <auto_tcn>121</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>121</total_tcn>\r
-    <pkg_name>wearable/tct-url-download-native-utc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-stt-native-utc" category=" UnitTestCases ">\r
-    <auto_tcn>88</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>88</total_tcn>\r
-    <pkg_name>wearable/tct-stt-native-utc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-stt-native-itc" category=" IntegrationTestCases ">\r
-    <auto_tcn>20</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>20</total_tcn>\r
-    <pkg_name>wearable/tct-stt-native-itc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-recorder-native-utc" category=" UnitTestCases ">\r
-    <auto_tcn>143</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>143</total_tcn>\r
-    <pkg_name>wearable/tct-recorder-native-utc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-voice-control-native-itc" category=" IntegrationTestCases ">\r
-    <auto_tcn>22</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>22</total_tcn>\r
-    <pkg_name>wearable/tct-voice-control-native-itc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-mediastreamrecorder-native-itc" category=" IntegrationTestCases ">\r
-    <auto_tcn>29</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>29</total_tcn>\r
-    <pkg_name>wearable/tct-mediastreamrecorder-native-itc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-runtime-info-native-utc" category=" UnitTestCases ">\r
-    <auto_tcn>134</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>134</total_tcn>\r
-    <pkg_name>wearable/tct-runtime-info-native-utc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-bluetooth-native-utc" category=" UnitTestCases ">\r
-    <auto_tcn>302</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>302</total_tcn>\r
-    <pkg_name>wearable/tct-bluetooth-native-utc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-capi-mediademuxer-native-itc" category=" IntegrationTestCases ">\r
-    <auto_tcn>12</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>12</total_tcn>\r
-    <pkg_name>wearable/tct-capi-mediademuxer-native-itc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-dali-core-native-utc" category=" UnitTestCases ">\r
-    <auto_tcn>1645</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>1645</total_tcn>\r
-    <pkg_name>wearable/tct-dali-core-native-utc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-capi-media-tool-native-itc" category=" IntegrationTestCases ">\r
-    <auto_tcn>51</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>51</total_tcn>\r
-    <pkg_name>wearable/tct-capi-media-tool-native-itc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-location-manager-native-ctc" category=" CompatibilityTestCases ">\r
-    <auto_tcn>1</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>1</total_tcn>\r
-    <pkg_name>wearable/tct-location-manager-native-ctc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-package-manager-native-itc" category=" IntegrationTestCases ">\r
-    <auto_tcn>38</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>38</total_tcn>\r
-    <pkg_name>wearable/tct-package-manager-native-itc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-telephony-native-ctc" category=" CompatibilityTestCases ">\r
-    <auto_tcn>1</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>1</total_tcn>\r
-    <pkg_name>wearable/tct-telephony-native-ctc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-dali-adaptor-native-itc" category=" IntegrationTestCases ">\r
-    <auto_tcn>16</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>16</total_tcn>\r
-    <pkg_name>wearable/tct-dali-adaptor-native-itc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-media-content-native-itc" category=" IntegrationTestCases ">\r
-    <auto_tcn>189</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>189</total_tcn>\r
-    <pkg_name>wearable/tct-media-content-native-itc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-tbm-native-itc" category=" IntegrationTestCases ">\r
-    <auto_tcn>7</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>7</total_tcn>\r
-    <pkg_name>wearable/tct-tbm-native-itc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-libfeedback-native-utc" category=" UnitTestCases ">\r
-    <auto_tcn>13</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>13</total_tcn>\r
-    <pkg_name>wearable/tct-libfeedback-native-utc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-webkit2-native-itc" category=" IntegrationTestCases ">\r
-    <auto_tcn>75</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>75</total_tcn>\r
-    <pkg_name>wearable/tct-webkit2-native-itc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-capi-media-streamer-native-itc" category=" IntegrationTestCases ">\r
-    <auto_tcn>14</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>14</total_tcn>\r
-    <pkg_name>wearable/tct-capi-media-streamer-native-itc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-notification-native-utc" category=" UnitTestCases ">\r
-    <auto_tcn>229</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>229</total_tcn>\r
-    <pkg_name>wearable/tct-notification-native-utc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-sound-manager-native-utc" category=" UnitTestCases ">\r
-    <auto_tcn>101</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>101</total_tcn>\r
-    <pkg_name>wearable/tct-sound-manager-native-utc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-notification-native-itc" category=" IntegrationTestCases ">\r
-    <auto_tcn>30</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>30</total_tcn>\r
-    <pkg_name>wearable/tct-notification-native-itc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-voice-control-native-utc" category=" UnitTestCases ">\r
-    <auto_tcn>97</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>97</total_tcn>\r
-    <pkg_name>wearable/tct-voice-control-native-utc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-eom-native-utc" category=" UnitTestCases ">\r
-    <auto_tcn>42</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>42</total_tcn>\r
-    <pkg_name>wearable/tct-eom-native-utc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-widget_service-native-itc" category=" IntegrationTestCases ">\r
-    <auto_tcn>18</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>18</total_tcn>\r
-    <pkg_name>wearable/tct-widget_service-native-itc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-contacts-service2-native-itc" category=" IntegrationTestCases ">\r
-    <auto_tcn>82</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>82</total_tcn>\r
-    <pkg_name>wearable/tct-contacts-service2-native-itc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-telephony-native-itc" category=" IntegrationTestCases ">\r
-    <auto_tcn>49</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>49</total_tcn>\r
-    <pkg_name>wearable/tct-telephony-native-itc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-audio-io-native-itc" category=" IntegrationTestCases ">\r
-    <auto_tcn>32</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>32</total_tcn>\r
-    <pkg_name>wearable/tct-audio-io-native-itc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-location-manager-native-itc" category=" IntegrationTestCases ">\r
-    <auto_tcn>43</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>43</total_tcn>\r
-    <pkg_name>wearable/tct-location-manager-native-itc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-tone-player-native-itc" category=" IntegrationTestCases ">\r
-    <auto_tcn>2</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>2</total_tcn>\r
-    <pkg_name>wearable/tct-tone-player-native-itc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-app-manager-native-utc" category=" UnitTestCases ">\r
-    <auto_tcn>130</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>130</total_tcn>\r
-    <pkg_name>wearable/tct-app-manager-native-utc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-image-util-native-ctc" category=" CompatibilityTestCases ">\r
-    <auto_tcn>2</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>2</total_tcn>\r
-    <pkg_name>wearable/tct-image-util-native-ctc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-media-vision-native-itc" category=" IntegrationTestCases ">\r
-    <auto_tcn>37</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>37</total_tcn>\r
-    <pkg_name>wearable/tct-media-vision-native-itc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-privilege-info-native-itc" category=" IntegrationTestCases ">\r
-    <auto_tcn>4</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>4</total_tcn>\r
-    <pkg_name>wearable/tct-privilege-info-native-itc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-vpn-native-utc" category=" UnitTestCases ">\r
-    <auto_tcn>26</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>26</total_tcn>\r
-    <pkg_name>wearable/tct-vpn-native-utc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-image-util-native-itc" category=" IntegrationTestCases ">\r
-    <auto_tcn>32</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>32</total_tcn>\r
-    <pkg_name>wearable/tct-image-util-native-itc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-connection-native-itc" category=" IntegrationTestCases ">\r
-    <auto_tcn>61</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>61</total_tcn>\r
-    <pkg_name>wearable/tct-connection-native-itc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-nfc-native-itc" category=" IntegrationTestCases ">\r
-    <auto_tcn>40</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>40</total_tcn>\r
-    <pkg_name>wearable/tct-nfc-native-itc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-ttrace-native-itc" category=" IntegrationTestCases ">\r
-    <auto_tcn>3</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>3</total_tcn>\r
-    <pkg_name>wearable/tct-ttrace-native-itc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-mediamuxer-native-utc" category=" UnitTestCases ">\r
-    <auto_tcn>30</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>30</total_tcn>\r
-    <pkg_name>wearable/tct-mediamuxer-native-utc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-media-key-native-utc" category=" UnitTestCases ">\r
-    <auto_tcn>3</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>3</total_tcn>\r
-    <pkg_name>wearable/tct-media-key-native-utc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-wav-player-native-utc" category=" UnitTestCases ">\r
-    <auto_tcn>14</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>14</total_tcn>\r
-    <pkg_name>wearable/tct-wav-player-native-utc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-libfeedback-native-itc" category=" IntegrationTestCases ">\r
-    <auto_tcn>4</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>4</total_tcn>\r
-    <pkg_name>wearable/tct-libfeedback-native-itc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-phonenumber-utils-native-itc" category=" IntegrationTestCases ">\r
-    <auto_tcn>4</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>4</total_tcn>\r
-    <pkg_name>wearable/tct-phonenumber-utils-native-itc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-motion-native-utc" category=" UnitTestCases ">\r
-    <auto_tcn>23</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>23</total_tcn>\r
-    <pkg_name>wearable/tct-motion-native-utc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-bluetooth-native-itc" category=" IntegrationTestCases ">\r
-    <auto_tcn>45</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>45</total_tcn>\r
-    <pkg_name>wearable/tct-bluetooth-native-itc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-system-info-native-itc" category=" IntegrationTestCases ">\r
-    <auto_tcn>4</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>4</total_tcn>\r
-    <pkg_name>wearable/tct-system-info-native-itc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-sensor-native-itc" category=" IntegrationTestCases ">\r
-    <auto_tcn>26</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>26</total_tcn>\r
-    <pkg_name>wearable/tct-sensor-native-itc-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-data-control-native-itc" category=" IntegrationTestCases ">\r
-    <auto_tcn>33</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>33</total_tcn>\r
-    <pkg_name>wearable/tct-data-control-native-itc-3.0.zip</pkg_name>\r
-  </suite>\r
-</ns3:testplan>\r
-\r
diff --git a/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/shell/plan/Web_Full_mobile_2.4.xml b/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/shell/plan/Web_Full_mobile_2.4.xml
deleted file mode 100755 (executable)
index f226113..0000000
+++ /dev/null
@@ -1,715 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>\r
-<ns3:testplan xmlns:ns3="http://www.example.org/plan/" xmlns="" name="Web_Full_mobile_2.4" profile="mobile">\r
-  <execute_type>Auto</execute_type>\r
-  <suite name="tct-webdatabase-w3c-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
-    <auto_tcn>247</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>247</total_tcn>\r
-    <pkg_name>mobile/tct-webdatabase-w3c-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-jsenhance-html5-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
-    <auto_tcn>49</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>49</total_tcn>\r
-    <pkg_name>common/tct-jsenhance-html5-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-messaging-mms-tizen-tests" launcher="WRTLauncher" category="Tizen Web Device APIs">\r
-    <auto_tcn>123</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>123</total_tcn>\r
-    <pkg_name>mobile/tct-messaging-mms-tizen-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-multicolumn-css3-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
-    <auto_tcn>141</auto_tcn>\r
-    <manual_tcn>18</manual_tcn>\r
-    <total_tcn>159</total_tcn>\r
-    <pkg_name>mobile/tct-multicolumn-css3-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-workers-w3c-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
-    <auto_tcn>85</auto_tcn>\r
-    <manual_tcn>1</manual_tcn>\r
-    <total_tcn>86</total_tcn>\r
-    <pkg_name>mobile/tct-workers-w3c-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-namespace-tizen-tests" launcher="WRTLauncher" category="Tizen Web Device APIs">\r
-    <auto_tcn>23</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>23</total_tcn>\r
-    <pkg_name>common/tct-namespace-tizen-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-transitions-css3-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
-    <auto_tcn>26</auto_tcn>\r
-    <manual_tcn>5</manual_tcn>\r
-    <total_tcn>31</total_tcn>\r
-    <pkg_name>common/tct-transitions-css3-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-messaging-email-tizen-tests" launcher="WRTLauncher" category="Tizen Web Device APIs">\r
-    <auto_tcn>308</auto_tcn>\r
-    <manual_tcn>1</manual_tcn>\r
-    <total_tcn>309</total_tcn>\r
-    <pkg_name>mobile/tct-messaging-email-tizen-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-2dtransforms-css3-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
-    <auto_tcn>34</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>34</total_tcn>\r
-    <pkg_name>common/tct-2dtransforms-css3-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-time-tizen-tests" launcher="WRTLauncher" category="Tizen Web Device APIs">\r
-    <auto_tcn>470</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>470</total_tcn>\r
-    <pkg_name>mobile/tct-time-tizen-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-forms-html5-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
-    <auto_tcn>151</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>151</total_tcn>\r
-    <pkg_name>mobile/tct-forms-html5-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-capability-tests" launcher="WRTLauncher" category="Compliance">\r
-    <auto_tcn>15</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>15</total_tcn>\r
-    <pkg_name>common/tct-capability-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-fileapi-w3c-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
-    <auto_tcn>98</auto_tcn>\r
-    <manual_tcn>3</manual_tcn>\r
-    <total_tcn>101</total_tcn>\r
-    <pkg_name>mobile/tct-fileapi-w3c-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-ext01-wrt-tests" launcher="WRTLauncher -iu" category="Web Runtime">\r
-    <auto_tcn>3</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>3</total_tcn>\r
-    <pkg_name>mobile/tct-ext01-wrt-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-mediacapture-w3c-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
-    <auto_tcn>7</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>7</total_tcn>\r
-    <pkg_name>common/tct-mediacapture-w3c-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-exif-tizen-tests" launcher="WRTLauncher" category="Tizen Web Device APIs">\r
-    <auto_tcn>64</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>64</total_tcn>\r
-    <pkg_name>common/tct-exif-tizen-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-csp-w3c-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
-    <auto_tcn>133</auto_tcn>\r
-    <manual_tcn>78</manual_tcn>\r
-    <total_tcn>211</total_tcn>\r
-    <pkg_name>mobile/tct-csp-w3c-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-privilege-wrt-tests" category="Web Runtime">\r
-    <auto_tcn>155</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>155</total_tcn>\r
-    <pkg_name>mobile/tct-privilege-wrt-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-mediakey-tizen-tests" launcher="WRTLauncher" category="Tizen Web Device APIs">\r
-    <auto_tcn>11</auto_tcn>\r
-    <manual_tcn>4</manual_tcn>\r
-    <total_tcn>15</total_tcn>\r
-    <pkg_name>mobile/tct-mediakey-tizen-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-deviceorientation-w3c-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
-    <auto_tcn>37</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>37</total_tcn>\r
-    <pkg_name>mobile/tct-deviceorientation-w3c-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-webmessaging-w3c-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
-    <auto_tcn>176</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>176</total_tcn>\r
-    <pkg_name>mobile/tct-webmessaging-w3c-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-package-tizen-tests" launcher="WRTLauncher" category="Tizen Web Device APIs">\r
-    <auto_tcn>54</auto_tcn>\r
-    <manual_tcn>12</manual_tcn>\r
-    <total_tcn>66</total_tcn>\r
-    <pkg_name>common/tct-package-tizen-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-notification-tizen-tests" launcher="WRTLauncher" category="Tizen Web Device APIs">\r
-    <auto_tcn>93</auto_tcn>\r
-    <manual_tcn>1</manual_tcn>\r
-    <total_tcn>94</total_tcn>\r
-    <pkg_name>mobile/tct-notification-tizen-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-fmradio-tizen-tests" launcher="WRTLauncher" category="Tizen Web Device APIs">\r
-    <auto_tcn>67</auto_tcn>\r
-    <manual_tcn>7</manual_tcn>\r
-    <total_tcn>74</total_tcn>\r
-    <pkg_name>mobile/tct-fmradio-tizen-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-rt01-wrt-tests" launcher="WRTLauncher -iu" category="Web Runtime">\r
-    <auto_tcn>12</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>12</total_tcn>\r
-    <pkg_name>common/tct-rt01-wrt-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-appcache-html5-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
-    <auto_tcn>36</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>36</total_tcn>\r
-    <pkg_name>mobile/tct-appcache-html5-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-filesystemapi-w3c-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
-    <auto_tcn>208</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>208</total_tcn>\r
-    <pkg_name>mobile/tct-filesystemapi-w3c-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-svg-html5-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
-    <auto_tcn>3</auto_tcn>\r
-    <manual_tcn>9</manual_tcn>\r
-    <total_tcn>12</total_tcn>\r
-    <pkg_name>common/tct-svg-html5-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-websocket-w3c-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
-    <auto_tcn>270</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>270</total_tcn>\r
-    <pkg_name>mobile/tct-websocket-w3c-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-flexiblebox-css3-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
-    <auto_tcn>25</auto_tcn>\r
-    <manual_tcn>28</manual_tcn>\r
-    <total_tcn>53</total_tcn>\r
-    <pkg_name>common/tct-flexiblebox-css3-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-dnd-html5-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
-    <auto_tcn>6</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>6</total_tcn>\r
-    <pkg_name>mobile/tct-dnd-html5-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-extra-html5-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
-    <auto_tcn>548</auto_tcn>\r
-    <manual_tcn>25</manual_tcn>\r
-    <total_tcn>573</total_tcn>\r
-    <pkg_name>mobile/tct-extra-html5-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-fullscreen-nonw3c-tests" launcher="WRTLauncher" category="Supplementary APIs">\r
-    <auto_tcn>16</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>16</total_tcn>\r
-    <pkg_name>mobile/tct-fullscreen-nonw3c-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-colors-css3-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
-    <auto_tcn>46</auto_tcn>\r
-    <manual_tcn>29</manual_tcn>\r
-    <total_tcn>75</total_tcn>\r
-    <pkg_name>common/tct-colors-css3-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-indexeddb-w3c-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
-    <auto_tcn>400</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>400</total_tcn>\r
-    <pkg_name>mobile/tct-indexeddb-w3c-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-sandbox-html5-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
-    <auto_tcn>72</auto_tcn>\r
-    <manual_tcn>1</manual_tcn>\r
-    <total_tcn>73</total_tcn>\r
-    <pkg_name>common/tct-sandbox-html5-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-networkbearerselection-tizen-tests" launcher="WRTLauncher" category="Tizen Web Device APIs">\r
-    <auto_tcn>24</auto_tcn>\r
-    <manual_tcn>1</manual_tcn>\r
-    <total_tcn>25</total_tcn>\r
-    <pkg_name>mobile/tct-networkbearerselection-tizen-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-push-tizen-tests" launcher="WRTLauncher" category="Tizen Web Device APIs">\r
-    <auto_tcn>41</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>41</total_tcn>\r
-    <pkg_name>common/tct-push-tizen-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-messageport-tizen-tests" launcher="WRTLauncher" category="Tizen Web Device APIs">\r
-    <auto_tcn>48</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>48</total_tcn>\r
-    <pkg_name>common/tct-messageport-tizen-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-browserstate-html5-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
-    <auto_tcn>3</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>3</total_tcn>\r
-    <pkg_name>mobile/tct-browserstate-html5-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-cors-w3c-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
-    <auto_tcn>10</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>10</total_tcn>\r
-    <pkg_name>common/tct-cors-w3c-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-xmlhttprequest-w3c-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
-    <auto_tcn>262</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>262</total_tcn>\r
-    <pkg_name>mobile/tct-xmlhttprequest-w3c-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-navigationtiming-w3c-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
-    <auto_tcn>45</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>45</total_tcn>\r
-    <pkg_name>mobile/tct-navigationtiming-w3c-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-typedarrays-nonw3c-tests" launcher="WRTLauncher" category="Supplementary APIs">\r
-    <auto_tcn>80</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>80</total_tcn>\r
-    <pkg_name>common/tct-typedarrays-nonw3c-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-animations-css3-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
-    <auto_tcn>24</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>24</total_tcn>\r
-    <pkg_name>common/tct-animations-css3-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-badge-tizen-tests" launcher="WRTLauncher" category="Tizen Web Device APIs">\r
-    <auto_tcn>26</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>26</total_tcn>\r
-    <pkg_name>mobile/tct-badge-tizen-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-nfc-tizen-tests" launcher="WRTLauncher" category="Tizen Web Device APIs">\r
-    <auto_tcn>195</auto_tcn>\r
-    <manual_tcn>35</manual_tcn>\r
-    <total_tcn>230</total_tcn>\r
-    <pkg_name>mobile/tct-nfc-tizen-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-pagevisibility-w3c-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
-    <auto_tcn>18</auto_tcn>\r
-    <manual_tcn>2</manual_tcn>\r
-    <total_tcn>20</total_tcn>\r
-    <pkg_name>mobile/tct-pagevisibility-w3c-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-contact-tizen-tests" launcher="WRTLauncher" category="Tizen Web Device APIs">\r
-    <auto_tcn>441</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>441</total_tcn>\r
-    <pkg_name>mobile/tct-contact-tizen-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-content-tizen-tests" launcher="WRTLauncher" category="Tizen Web Device APIs">\r
-    <auto_tcn>245</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>245</total_tcn>\r
-    <pkg_name>common/tct-content-tizen-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-gumallow-w3c-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
-    <auto_tcn>6</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>6</total_tcn>\r
-    <pkg_name>common/tct-gumallow-w3c-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-notification-w3c-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
-    <auto_tcn>14</auto_tcn>\r
-    <manual_tcn>3</manual_tcn>\r
-    <total_tcn>17</total_tcn>\r
-    <pkg_name>mobile/tct-notification-w3c-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-sp01-wrt-tests" launcher="WRTLauncher -iu" category="Web Runtime">\r
-    <auto_tcn>4</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>4</total_tcn>\r
-    <pkg_name>common/tct-sp01-wrt-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-widget02-w3c-tests" category="W3C/HTML5 APIs">\r
-    <auto_tcn>68</auto_tcn>\r
-    <manual_tcn>82</manual_tcn>\r
-    <total_tcn>150</total_tcn>\r
-    <pkg_name>mobile/tct-widget02-w3c-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-websetting-tizen-tests" launcher="WRTLauncher" category="Tizen Web Device APIs">\r
-    <auto_tcn>22</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>22</total_tcn>\r
-    <pkg_name>mobile/tct-websetting-tizen-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-audio-html5-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
-    <auto_tcn>333</auto_tcn>\r
-    <manual_tcn>1</manual_tcn>\r
-    <total_tcn>334</total_tcn>\r
-    <pkg_name>mobile/tct-audio-html5-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-screenorientation-w3c-tests" launcher="xwalk" category="W3C/HTML5 APIs">\r
-    <auto_tcn>17</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>17</total_tcn>\r
-    <pkg_name>mobile/tct-screenorientation-w3c-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-sp02-wrt-tests" category="Web Runtime">\r
-    <auto_tcn>1</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>1</total_tcn>\r
-    <pkg_name>common/tct-sp02-wrt-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-rt02-wrt-tests" category="Web Runtime">\r
-    <auto_tcn>3</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>3</total_tcn>\r
-    <pkg_name>common/tct-rt02-wrt-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-sound-tizen-tests" launcher="WRTLauncher" category="Tizen Web Device APIs">\r
-    <auto_tcn>52</auto_tcn>\r
-    <manual_tcn>8</manual_tcn>\r
-    <total_tcn>60</total_tcn>\r
-    <pkg_name>mobile/tct-sound-tizen-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-ext02-wrt-tests" category="Web Runtime">\r
-    <auto_tcn>8</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>8</total_tcn>\r
-    <pkg_name>common/tct-ext02-wrt-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-application-tizen-tests" launcher="WRTLauncher" category="Tizen Web Device APIs">\r
-    <auto_tcn>184</auto_tcn>\r
-    <manual_tcn>8</manual_tcn>\r
-    <total_tcn>192</total_tcn>\r
-    <pkg_name>mobile/tct-application-tizen-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-bluetooth-tizen-tests" launcher="WRTLauncher" category="Tizen Web Device APIs">\r
-    <auto_tcn>257</auto_tcn>\r
-    <manual_tcn>142</manual_tcn>\r
-    <total_tcn>399</total_tcn>\r
-    <pkg_name>mobile/tct-bluetooth-tizen-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-humanactivitymonitor-tizen-tests" launcher="WRTLauncher" category="Tizen Web Device APIs">\r
-    <auto_tcn>61</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>61</total_tcn>\r
-    <pkg_name>mobile/tct-humanactivitymonitor-tizen-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-fonts-css3-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
-    <auto_tcn>11</auto_tcn>\r
-    <manual_tcn>131</manual_tcn>\r
-    <total_tcn>142</total_tcn>\r
-    <pkg_name>common/tct-fonts-css3-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-security-tcs-tests" launcher="WRTLauncher" category="Compliance">\r
-    <auto_tcn>3</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>3</total_tcn>\r
-    <pkg_name>common/tct-security-tcs-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-speech-w3c-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
-    <auto_tcn>40</auto_tcn>\r
-    <manual_tcn>1</manual_tcn>\r
-    <total_tcn>41</total_tcn>\r
-    <pkg_name>common/tct-speech-w3c-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-ui01-wrt-tests" launcher="WRTLauncher -iu" category="Web Runtime">\r
-    <auto_tcn>30</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>30</total_tcn>\r
-    <pkg_name>mobile/tct-ui01-wrt-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-animationtiming-w3c-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
-    <auto_tcn>11</auto_tcn>\r
-    <manual_tcn>7</manual_tcn>\r
-    <total_tcn>18</total_tcn>\r
-    <pkg_name>common/tct-animationtiming-w3c-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-selectorslevel2-w3c-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
-    <auto_tcn>30</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>30</total_tcn>\r
-    <pkg_name>common/tct-selectorslevel2-w3c-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-wgtapi01-w3c-tests" launcher="WRTLauncher -iu" category="W3C/HTML5 APIs">\r
-    <auto_tcn>107</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>107</total_tcn>\r
-    <pkg_name>common/tct-wgtapi01-w3c-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-inputdevice-tizen-tests" launcher="WRTLauncher" category="Tizen Web Device APIs">\r
-    <auto_tcn>30</auto_tcn>\r
-    <manual_tcn>3</manual_tcn>\r
-    <total_tcn>33</total_tcn>\r
-    <pkg_name>mobile/tct-inputdevice-tizen-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-webaudio-w3c-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
-    <auto_tcn>422</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>422</total_tcn>\r
-    <pkg_name>mobile/tct-webaudio-w3c-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-filewriterapi-w3c-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
-    <auto_tcn>106</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>106</total_tcn>\r
-    <pkg_name>mobile/tct-filewriterapi-w3c-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-sensor-tizen-tests" launcher="WRTLauncher" category="Tizen Web Device APIs">\r
-    <auto_tcn>119</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>119</total_tcn>\r
-    <pkg_name>mobile/tct-sensor-tizen-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-secureelement-tizen-tests" launcher="WRTLauncher" category="Tizen Web Device APIs">\r
-    <auto_tcn>71</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>71</total_tcn>\r
-    <pkg_name>mobile/tct-secureelement-tizen-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-power-tizen-tests" launcher="WRTLauncher" category="Tizen Web Device APIs">\r
-    <auto_tcn>50</auto_tcn>\r
-    <manual_tcn>6</manual_tcn>\r
-    <total_tcn>56</total_tcn>\r
-    <pkg_name>mobile/tct-power-tizen-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-appwgt-wrt-tests" category="Web Runtime">\r
-    <auto_tcn>7</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>7</total_tcn>\r
-    <pkg_name>common/tct-appwgt-wrt-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-privilege-tizen-tests" launcher="WRTLauncher" category="Tizen Web Device APIs">\r
-    <auto_tcn>65</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>65</total_tcn>\r
-    <pkg_name>common/tct-privilege-tizen-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-alarm-tizen-tests" launcher="WRTLauncher" category="Tizen Web Device APIs">\r
-    <auto_tcn>60</auto_tcn>\r
-    <manual_tcn>1</manual_tcn>\r
-    <total_tcn>61</total_tcn>\r
-    <pkg_name>common/tct-alarm-tizen-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-touchevent-w3c-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
-    <auto_tcn>16</auto_tcn>\r
-    <manual_tcn>7</manual_tcn>\r
-    <total_tcn>23</total_tcn>\r
-    <pkg_name>mobile/tct-touchevent-w3c-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <!--\r
-  <suite name="tct-wgtapi02-w3c-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
-    <auto_tcn>0</auto_tcn>\r
-    <manual_tcn>34</manual_tcn>\r
-    <total_tcn>34</total_tcn>\r
-    <pkg_name>common/tct-wgtapi02-w3c-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  -->\r
-  <suite name="tct-archive-tizen-tests" launcher="WRTLauncher" category="Tizen Web Device APIs">\r
-    <auto_tcn>106</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>106</total_tcn>\r
-    <pkg_name>common/tct-archive-tizen-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-account-tizen-tests" launcher="WRTLauncher" category="Tizen Web Device APIs">\r
-    <auto_tcn>89</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>89</total_tcn>\r
-    <pkg_name>mobile/tct-account-tizen-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-tizen-tizen-tests" launcher="WRTLauncher" category="Tizen Web Device APIs">\r
-    <auto_tcn>81</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>81</total_tcn>\r
-    <pkg_name>common/tct-tizen-tizen-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-widget01-w3c-tests" launcher="WRTLauncher -iu" category="W3C/HTML5 APIs">\r
-    <auto_tcn>155</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>155</total_tcn>\r
-    <pkg_name>mobile/tct-widget01-w3c-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-bookmark-tizen-tests" launcher="WRTLauncher" category="Tizen Web Device APIs">\r
-    <auto_tcn>36</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>36</total_tcn>\r
-    <pkg_name>mobile/tct-bookmark-tizen-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-3dtransforms-css3-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
-    <auto_tcn>32</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>32</total_tcn>\r
-    <pkg_name>common/tct-3dtransforms-css3-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-calendar-tizen-tests" launcher="WRTLauncher" category="Tizen Web Device APIs">\r
-    <auto_tcn>354</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>354</total_tcn>\r
-    <pkg_name>mobile/tct-calendar-tizen-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <!--\r
-  <suite name="tct-geoallow-w3c-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
-    <auto_tcn>208</auto_tcn>\r
-    <manual_tcn>3</manual_tcn>\r
-    <total_tcn>211</total_tcn>\r
-    <pkg_name>mobile/tct-geoallow-w3c-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  -->\r
-  <suite name="tct-sessionhistory-html5-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
-    <auto_tcn>148</auto_tcn>\r
-    <manual_tcn>1</manual_tcn>\r
-    <total_tcn>149</total_tcn>\r
-    <pkg_name>common/tct-sessionhistory-html5-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-datacontrol-tizen-tests" launcher="WRTLauncher" category="Tizen Web Device APIs">\r
-    <auto_tcn>113</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>113</total_tcn>\r
-    <pkg_name>mobile/tct-datacontrol-tizen-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-appcontrol-tizen-tests" launcher="WRTLauncher" category="Tizen Web Device APIs">\r
-    <auto_tcn>5</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>5</total_tcn>\r
-    <pkg_name>mobile/tct-appcontrol-tizen-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-callhistory-tizen-tests" launcher="WRTLauncher" category="Tizen Web Device APIs">\r
-    <auto_tcn>80</auto_tcn>\r
-    <manual_tcn>27</manual_tcn>\r
-    <total_tcn>107</total_tcn>\r
-    <pkg_name>mobile/tct-callhistory-tizen-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <!--\r
-  <suite name="tct-geodeny-w3c-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
-    <auto_tcn>0</auto_tcn>\r
-    <manual_tcn>3</manual_tcn>\r
-    <total_tcn>3</total_tcn>\r
-    <pkg_name>mobile/tct-geodeny-w3c-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  -->\r
-  <suite name="tct-canvas-html5-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
-    <auto_tcn>845</auto_tcn>\r
-    <manual_tcn>19</manual_tcn>\r
-    <total_tcn>864</total_tcn>\r
-    <pkg_name>common/tct-canvas-html5-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-ui-css3-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
-    <auto_tcn>43</auto_tcn>\r
-    <manual_tcn>1</manual_tcn>\r
-    <total_tcn>44</total_tcn>\r
-    <pkg_name>common/tct-ui-css3-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-selectorslevel1-w3c-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
-    <auto_tcn>78</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>78</total_tcn>\r
-    <pkg_name>common/tct-selectorslevel1-w3c-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-sse-w3c-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
-    <auto_tcn>68</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>68</total_tcn>\r
-    <pkg_name>mobile/tct-sse-w3c-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <!--\r
-  <suite name="tct-widgetpolicy-w3c-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
-    <auto_tcn>0</auto_tcn>\r
-    <manual_tcn>33</manual_tcn>\r
-    <total_tcn>33</total_tcn>\r
-    <pkg_name>common/tct-widgetpolicy-w3c-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  -->\r
-  <suite name="tct-batterystatus-w3c-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
-    <auto_tcn>23</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>23</total_tcn>\r
-    <pkg_name>mobile/tct-batterystatus-w3c-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-mediacontroller-tizen-tests" launcher="WRTLauncher" category="Tizen Web Device APIs">\r
-    <auto_tcn>162</auto_tcn>\r
-    <manual_tcn>3</manual_tcn>\r
-    <total_tcn>165</total_tcn>\r
-    <pkg_name>mobile/tct-mediacontroller-tizen-tests-2.4.zip</pkg_name>\r
-  </suite>\r
- <suite name="tct-maxLength-wrt-tests" launcher="WRTLauncher -iu" category="Web Runtime">\r
-    <auto_tcn>14</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>14</total_tcn>\r
-    <pkg_name>common/tct-maxLength-wrt-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-systeminfo-tizen-tests" launcher="WRTLauncher" category="Tizen Web Device APIs">\r
-    <auto_tcn>304</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>304</total_tcn>\r
-    <pkg_name>mobile/tct-systeminfo-tizen-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-filesystem-tizen-tests" launcher="WRTLauncher" category="Tizen Web Device APIs">\r
-    <auto_tcn>289</auto_tcn>\r
-    <manual_tcn>3</manual_tcn>\r
-    <total_tcn>292</total_tcn>\r
-    <pkg_name>mobile/tct-filesystem-tizen-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-messaging-sms-tizen-tests" launcher="WRTLauncher" category="Tizen Web Device APIs">\r
-    <auto_tcn>184</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>184</total_tcn>\r
-    <pkg_name>mobile/tct-messaging-sms-tizen-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-vibration-w3c-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
-    <auto_tcn>2</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>2</total_tcn>\r
-    <pkg_name>mobile/tct-vibration-w3c-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-stab-wrt-tests" category="Web Runtime">\r
-    <auto_tcn>1</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>1</total_tcn>\r
-    <pkg_name>common/tct-stab-wrt-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-text-css3-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
-    <auto_tcn>27</auto_tcn>\r
-    <manual_tcn>15</manual_tcn>\r
-    <total_tcn>42</total_tcn>\r
-    <pkg_name>common/tct-text-css3-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-webstorage-w3c-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
-    <auto_tcn>177</auto_tcn>\r
-    <manual_tcn>4</manual_tcn>\r
-    <total_tcn>181</total_tcn>\r
-    <pkg_name>common/tct-webstorage-w3c-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-download-tizen-tests" launcher="WRTLauncher" category="Tizen Web Device APIs">\r
-    <auto_tcn>62</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>62</total_tcn>\r
-    <pkg_name>common/tct-download-tizen-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-mediaqueries-css3-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
-    <auto_tcn>49</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>49</total_tcn>\r
-    <pkg_name>mobile/tct-mediaqueries-css3-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-systemsetting-tizen-tests" launcher="WRTLauncher" category="Tizen Web Device APIs">\r
-    <auto_tcn>33</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>33</total_tcn>\r
-    <pkg_name>mobile/tct-systemsetting-tizen-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-backgrounds-css3-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
-    <auto_tcn>541</auto_tcn>\r
-    <manual_tcn>74</manual_tcn>\r
-    <total_tcn>615</total_tcn>\r
-    <pkg_name>mobile/tct-backgrounds-css3-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-video-html5-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
-    <auto_tcn>361</auto_tcn>\r
-    <manual_tcn>4</manual_tcn>\r
-    <total_tcn>365</total_tcn>\r
-    <pkg_name>mobile/tct-video-html5-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-pm-wrt-tests" category="Web Runtime">\r
-    <auto_tcn>24</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>24</total_tcn>\r
-    <pkg_name>common/tct-pm-wrt-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-webgl-nonw3c-tests" launcher="WRTLauncher" category="Supplementary APIs">\r
-    <auto_tcn>889</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>889</total_tcn>\r
-    <pkg_name>common/tct-webgl-nonw3c-tests-2.4.zip</pkg_name>\r
-  </suite>\r
-</ns3:testplan>\r
-\r
diff --git a/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/shell/plan/Web_Full_mobile_3.0.xml b/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/shell/plan/Web_Full_mobile_3.0.xml
deleted file mode 100755 (executable)
index e63876c..0000000
+++ /dev/null
@@ -1,797 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>\r
-<ns3:testplan xmlns:ns3="http://www.example.org/plan/" xmlns="" name="Web_Full_mobile_3.0" profile="mobile">\r
-  <execute_type>Auto</execute_type>\r
-  <suite name="tct-jsenhance-html5-tests" category="W3C/HTML5 APIs">\r
-    <auto_tcn>7</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>7</total_tcn>\r
-    <pkg_name>common/tct-jsenhance-html5-tests-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-multicolumn-css3-tests" category="W3C/HTML5 APIs">\r
-    <auto_tcn>136</auto_tcn>\r
-    <manual_tcn>18</manual_tcn>\r
-    <total_tcn>154</total_tcn>\r
-    <pkg_name>common/tct-multicolumn-css3-tests-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-messaging-mms-tizen-tests" category="Tizen Web Device APIs">\r
-    <auto_tcn>123</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>123</total_tcn>\r
-    <pkg_name>mobile/tct-messaging-mms-tizen-tests-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-devicemotion-cordova-tests" category="Cordova Plugin APIs">\r
-    <auto_tcn>18</auto_tcn>\r
-    <manual_tcn>1</manual_tcn>\r
-    <total_tcn>19</total_tcn>\r
-    <pkg_name>common/tct-devicemotion-cordova-tests-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-workers-w3c-tests" category="W3C/HTML5 APIs">\r
-    <auto_tcn>77</auto_tcn>\r
-    <manual_tcn>1</manual_tcn>\r
-    <total_tcn>78</total_tcn>\r
-    <pkg_name>common/tct-workers-w3c-tests-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-transitions-css3-tests" category="W3C/HTML5 APIs">\r
-    <auto_tcn>9</auto_tcn>\r
-    <manual_tcn>6</manual_tcn>\r
-    <total_tcn>15</total_tcn>\r
-    <pkg_name>common/tct-transitions-css3-tests-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-namespace-tizen-tests" category="Tizen Web Device APIs">\r
-    <auto_tcn>33</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>33</total_tcn>\r
-    <pkg_name>mobile/tct-namespace-tizen-tests-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-messaging-email-tizen-tests" category="Tizen Web Device APIs">\r
-    <auto_tcn>307</auto_tcn>\r
-    <manual_tcn>1</manual_tcn>\r
-    <total_tcn>308</total_tcn>\r
-    <pkg_name>mobile/tct-messaging-email-tizen-tests-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-network-information-cordova-tests" category="Cordova Plugin APIs">\r
-    <auto_tcn>10</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>10</total_tcn>\r
-    <pkg_name>common/tct-network-information-cordova-tests-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-crypto-w3c-tests" category="W3C/HTML5 APIs">\r
-    <auto_tcn>78</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>78</total_tcn>\r
-    <pkg_name>common/tct-crypto-w3c-tests-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-2dtransforms-css3-tests" category="W3C/HTML5 APIs">\r
-    <auto_tcn>36</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>36</total_tcn>\r
-    <pkg_name>common/tct-2dtransforms-css3-tests-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-dialogs-cordova-tests" category="Cordova Plugin APIs">\r
-    <auto_tcn>13</auto_tcn>\r
-    <manual_tcn>9</manual_tcn>\r
-    <total_tcn>22</total_tcn>\r
-    <pkg_name>common/tct-dialogs-cordova-tests-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-time-tizen-tests" category="Tizen Web Device APIs">\r
-    <auto_tcn>470</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>470</total_tcn>\r
-    <pkg_name>mobile/tct-time-tizen-tests-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-forms-html5-tests" category="W3C/HTML5 APIs">\r
-    <auto_tcn>49</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>49</total_tcn>\r
-    <pkg_name>common/tct-forms-html5-tests-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-capability-tests" category="Compliance">\r
-    <auto_tcn>15</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>15</total_tcn>\r
-    <pkg_name>common/tct-capability-tests-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-fileapi-w3c-tests" category="W3C/HTML5 APIs">\r
-    <auto_tcn>33</auto_tcn>\r
-    <manual_tcn>5</manual_tcn>\r
-    <total_tcn>38</total_tcn>\r
-    <pkg_name>common/tct-fileapi-w3c-tests-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-mediacapture-w3c-tests" category="W3C/HTML5 APIs">\r
-    <auto_tcn>6</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>6</total_tcn>\r
-    <pkg_name>common/tct-mediacapture-w3c-tests-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-ext01-wrt-tests" category="Tizen WRT Core Spec">\r
-    <auto_tcn>3</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>3</total_tcn>\r
-    <pkg_name>mobile/tct-ext01-wrt-tests-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-exif-tizen-tests" category="Tizen Web Device APIs">\r
-    <auto_tcn>64</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>64</total_tcn>\r
-    <pkg_name>common/tct-exif-tizen-tests-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-csp-w3c-tests" category="W3C/HTML5 APIs">\r
-    <auto_tcn>137</auto_tcn>\r
-    <manual_tcn>83</manual_tcn>\r
-    <total_tcn>220</total_tcn>\r
-    <pkg_name>common/tct-csp-w3c-tests-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-privilege-wrt-tests" category="Tizen WRT Core Spec">\r
-    <auto_tcn>209</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>209</total_tcn>\r
-    <pkg_name>mobile/tct-privilege-wrt-tests-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-mediakey-tizen-tests" category="Tizen Web Device APIs">\r
-    <auto_tcn>11</auto_tcn>\r
-    <manual_tcn>4</manual_tcn>\r
-    <total_tcn>15</total_tcn>\r
-    <pkg_name>mobile/tct-mediakey-tizen-tests-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-media-cordova-tests" category="Cordova Plugin APIs">\r
-    <auto_tcn>52</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>52</total_tcn>\r
-    <pkg_name>common/tct-media-cordova-tests-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-deviceorientation-w3c-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
-    <auto_tcn>37</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>37</total_tcn>\r
-    <pkg_name>mobile/tct-deviceorientation-w3c-tests-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-webmessaging-w3c-tests" category="W3C/HTML5 APIs">\r
-    <auto_tcn>175</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>175</total_tcn>\r
-    <pkg_name>common/tct-webmessaging-w3c-tests-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-file-cordova-tests" category="Cordova Plugin APIs">\r
-    <auto_tcn>172</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>172</total_tcn>\r
-    <pkg_name>common/tct-file-cordova-tests-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-package-tizen-tests" category="Tizen Web Device APIs">\r
-    <auto_tcn>54</auto_tcn>\r
-    <manual_tcn>12</manual_tcn>\r
-    <total_tcn>66</total_tcn>\r
-    <pkg_name>common/tct-package-tizen-tests-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-template-w3c-tests" category="W3C/HTML5 APIs">\r
-    <auto_tcn>1</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>1</total_tcn>\r
-    <pkg_name>common/tct-template-w3c-tests-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-notification-tizen-tests" category="Tizen Web Device APIs">\r
-    <auto_tcn>96</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>96</total_tcn>\r
-    <pkg_name>common/tct-notification-tizen-tests-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-fmradio-tizen-tests" category="Tizen Web Device APIs">\r
-    <auto_tcn>68</auto_tcn>\r
-    <manual_tcn>7</manual_tcn>\r
-    <total_tcn>75</total_tcn>\r
-    <pkg_name>mobile/tct-fmradio-tizen-tests-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-rt01-wrt-tests" category="Tizen WRT Core Spec">\r
-    <auto_tcn>12</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>12</total_tcn>\r
-    <pkg_name>common/tct-rt01-wrt-tests-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-appcache-html5-tests" category="W3C/HTML5 APIs">\r
-    <auto_tcn>26</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>26</total_tcn>\r
-    <pkg_name>common/tct-appcache-html5-tests-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-svg-html5-tests" category="W3C/HTML5 APIs">\r
-    <auto_tcn>43</auto_tcn>\r
-    <manual_tcn>14</manual_tcn>\r
-    <total_tcn>57</total_tcn>\r
-    <pkg_name>common/tct-svg-html5-tests-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-websocket-w3c-tests" category="W3C/HTML5 APIs">\r
-    <auto_tcn>266</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>266</total_tcn>\r
-    <pkg_name>common/tct-websocket-w3c-tests-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-flexiblebox-css3-tests" category="W3C/HTML5 APIs">\r
-    <auto_tcn>14</auto_tcn>\r
-    <manual_tcn>14</manual_tcn>\r
-    <total_tcn>28</total_tcn>\r
-    <pkg_name>common/tct-flexiblebox-css3-tests-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-dnd-html5-tests" category="W3C/HTML5 APIs">\r
-    <auto_tcn>6</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>6</total_tcn>\r
-    <pkg_name>common/tct-dnd-html5-tests-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-extra-html5-tests" category="W3C/HTML5 APIs">\r
-    <auto_tcn>548</auto_tcn>\r
-    <manual_tcn>25</manual_tcn>\r
-    <total_tcn>573</total_tcn>\r
-    <pkg_name>common/tct-extra-html5-tests-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-fullscreen-nonw3c-tests" category="Supplementary APIs">\r
-    <auto_tcn>20</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>20</total_tcn>\r
-    <pkg_name>common/tct-fullscreen-nonw3c-tests-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-colors-css3-tests" category="W3C/HTML5 APIs">\r
-    <auto_tcn>46</auto_tcn>\r
-    <manual_tcn>29</manual_tcn>\r
-    <total_tcn>75</total_tcn>\r
-    <pkg_name>common/tct-colors-css3-tests-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-indexeddb-w3c-tests" category="W3C/HTML5 APIs">\r
-    <auto_tcn>343</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>343</total_tcn>\r
-    <pkg_name>common/tct-indexeddb-w3c-tests-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-sandbox-html5-tests" category="W3C/HTML5 APIs">\r
-    <auto_tcn>45</auto_tcn>\r
-    <manual_tcn>1</manual_tcn>\r
-    <total_tcn>46</total_tcn>\r
-    <pkg_name>common/tct-sandbox-html5-tests-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-networkbearerselection-tizen-tests" category="Tizen Web Device APIs">\r
-    <auto_tcn>24</auto_tcn>\r
-    <manual_tcn>1</manual_tcn>\r
-    <total_tcn>25</total_tcn>\r
-    <pkg_name>mobile/tct-networkbearerselection-tizen-tests-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-messageport-tizen-tests" category="Tizen Web Device APIs">\r
-    <auto_tcn>51</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>51</total_tcn>\r
-    <pkg_name>common/tct-messageport-tizen-tests-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-push-tizen-tests" category="Tizen Web Device APIs">\r
-    <auto_tcn>45</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>45</total_tcn>\r
-    <pkg_name>mobile/tct-push-tizen-tests-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-browserstate-html5-tests" category="W3C/HTML5 APIs">\r
-    <auto_tcn>3</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>3</total_tcn>\r
-    <pkg_name>common/tct-browserstate-html5-tests-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-cors-w3c-tests" category="W3C/HTML5 APIs">\r
-    <auto_tcn>10</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>10</total_tcn>\r
-    <pkg_name>common/tct-cors-w3c-tests-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-xmlhttprequest-w3c-tests" category="W3C/HTML5 APIs">\r
-    <auto_tcn>212</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>212</total_tcn>\r
-    <pkg_name>common/tct-xmlhttprequest-w3c-tests-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-navigationtiming-w3c-tests" category="W3C/HTML5 APIs">\r
-    <auto_tcn>82</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>82</total_tcn>\r
-    <pkg_name>common/tct-navigationtiming-w3c-tests-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-typedarrays-nonw3c-tests" category="Supplementary APIs">\r
-    <auto_tcn>446</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>446</total_tcn>\r
-    <pkg_name>common/tct-typedarrays-nonw3c-tests-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-animations-css3-tests" category="W3C/HTML5 APIs">\r
-    <auto_tcn>25</auto_tcn>\r
-    <manual_tcn>1</manual_tcn>\r
-    <total_tcn>26</total_tcn>\r
-    <pkg_name>common/tct-animations-css3-tests-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-badge-tizen-tests" category="Tizen Web Device APIs">\r
-    <auto_tcn>26</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>26</total_tcn>\r
-    <pkg_name>mobile/tct-badge-tizen-tests-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-nfc-tizen-tests" category="Tizen Web Device APIs">\r
-    <auto_tcn>218</auto_tcn>\r
-    <manual_tcn>37</manual_tcn>\r
-    <total_tcn>255</total_tcn>\r
-    <pkg_name>mobile/tct-nfc-tizen-tests-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-pagevisibility-w3c-tests" category="W3C/HTML5 APIs">\r
-    <auto_tcn>18</auto_tcn>\r
-    <manual_tcn>2</manual_tcn>\r
-    <total_tcn>20</total_tcn>\r
-    <pkg_name>common/tct-pagevisibility-w3c-tests-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-ResponsiveImage-w3c-tests" category="Tizen W3C APIs">\r
-    <auto_tcn>32</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>32</total_tcn>\r
-    <pkg_name>common/tct-ResponsiveImage-w3c-tests-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-content-tizen-tests" category="Tizen Web Device APIs">\r
-    <auto_tcn>245</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>245</total_tcn>\r
-    <pkg_name>common/tct-content-tizen-tests-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-contact-tizen-tests" category="Tizen Web Device APIs">\r
-    <auto_tcn>479</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>479</total_tcn>\r
-    <pkg_name>mobile/tct-contact-tizen-tests-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-gumallow-w3c-tests" category="W3C/HTML5 APIs">\r
-    <auto_tcn>6</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>6</total_tcn>\r
-    <pkg_name>common/tct-gumallow-w3c-tests-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-notification-w3c-tests" category="W3C/HTML5 APIs">\r
-    <auto_tcn>39</auto_tcn>\r
-    <manual_tcn>3</manual_tcn>\r
-    <total_tcn>42</total_tcn>\r
-    <pkg_name>mobile/tct-notification-w3c-tests-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-serviceworkers-w3c-tests" category="W3C/HTML5 APIs">\r
-    <auto_tcn>107</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>107</total_tcn>\r
-    <pkg_name>common/tct-serviceworkers-w3c-tests-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-preference-tizen-tests" category="Tizen Web Device APIs">\r
-    <auto_tcn>45</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>45</total_tcn>\r
-    <pkg_name>mobile/tct-preference-tizen-tests-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-globalization-cordova-tests" category="Cordova Plugin APIs">\r
-    <auto_tcn>106</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>106</total_tcn>\r
-    <pkg_name>common/tct-globalization-cordova-tests-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-sp01-wrt-tests" category="Tizen WRT Core Spec">\r
-    <auto_tcn>4</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>4</total_tcn>\r
-    <pkg_name>common/tct-sp01-wrt-tests-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-widget02-w3c-tests" category="W3C/HTML5 APIs">\r
-    <auto_tcn>68</auto_tcn>\r
-    <manual_tcn>75</manual_tcn>\r
-    <total_tcn>143</total_tcn>\r
-    <pkg_name>mobile/tct-widget02-w3c-tests-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-websetting-tizen-tests" category="Tizen Web Device APIs">\r
-    <auto_tcn>22</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>22</total_tcn>\r
-    <pkg_name>mobile/tct-websetting-tizen-tests-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-audio-html5-tests" category="W3C/HTML5 APIs">\r
-    <auto_tcn>152</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>152</total_tcn>\r
-    <pkg_name>common/tct-audio-html5-tests-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-import-w3c-tests" category="W3C/HTML5 APIs">\r
-    <auto_tcn>1</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>1</total_tcn>\r
-    <pkg_name>common/tct-import-w3c-tests-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-screenorientation-w3c-tests" category="W3C/HTML5 APIs">\r
-    <auto_tcn>14</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>14</total_tcn>\r
-    <pkg_name>common/tct-screenorientation-w3c-tests-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-rt02-wrt-tests" category="Tizen WRT Core Spec">\r
-    <auto_tcn>3</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>3</total_tcn>\r
-    <pkg_name>common/tct-rt02-wrt-tests-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-sp02-wrt-tests" category="Tizen WRT Core Spec">\r
-    <auto_tcn>1</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>1</total_tcn>\r
-    <pkg_name>common/tct-sp02-wrt-tests-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-sound-tizen-tests" category="Tizen Web Device APIs">\r
-    <auto_tcn>52</auto_tcn>\r
-    <manual_tcn>8</manual_tcn>\r
-    <total_tcn>60</total_tcn>\r
-    <pkg_name>mobile/tct-sound-tizen-tests-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-ext02-wrt-tests" category="Tizen WRT Core Spec">\r
-    <auto_tcn>8</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>8</total_tcn>\r
-    <pkg_name>common/tct-ext02-wrt-tests-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-application-tizen-tests" category="Tizen Web Device APIs">\r
-    <auto_tcn>193</auto_tcn>\r
-    <manual_tcn>6</manual_tcn>\r
-    <total_tcn>199</total_tcn>\r
-    <pkg_name>mobile/tct-application-tizen-tests-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-humanactivitymonitor-tizen-tests" category="Tizen Web Device APIs">\r
-    <auto_tcn>87</auto_tcn>\r
-    <manual_tcn>15</manual_tcn>\r
-    <total_tcn>102</total_tcn>\r
-    <pkg_name>common/tct-humanactivitymonitor-tizen-tests-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-bluetooth-tizen-tests" category="Tizen Web Device APIs">\r
-    <auto_tcn>255</auto_tcn>\r
-    <manual_tcn>147</manual_tcn>\r
-    <total_tcn>402</total_tcn>\r
-    <pkg_name>mobile/tct-bluetooth-tizen-tests-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-fonts-css3-tests" category="W3C/HTML5 APIs">\r
-    <auto_tcn>12</auto_tcn>\r
-    <manual_tcn>131</manual_tcn>\r
-    <total_tcn>143</total_tcn>\r
-    <pkg_name>common/tct-fonts-css3-tests-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-speech-w3c-tests" category="W3C/HTML5 APIs">\r
-    <auto_tcn>87</auto_tcn>\r
-    <manual_tcn>4</manual_tcn>\r
-    <total_tcn>91</total_tcn>\r
-    <pkg_name>common/tct-speech-w3c-tests-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-security-tcs-tests" launcher="WRTLauncher" category="Compliance">\r
-    <auto_tcn>3</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>3</total_tcn>\r
-    <pkg_name>common/tct-security-tcs-tests-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-ui01-wrt-tests" category="Tizen WRT Core Spec">\r
-    <auto_tcn>30</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>30</total_tcn>\r
-    <pkg_name>mobile/tct-ui01-wrt-tests-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-animationtiming-w3c-tests" category="W3C/HTML5 APIs">\r
-    <auto_tcn>11</auto_tcn>\r
-    <manual_tcn>7</manual_tcn>\r
-    <total_tcn>18</total_tcn>\r
-    <pkg_name>common/tct-animationtiming-w3c-tests-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-selectorslevel2-w3c-tests" category="W3C/HTML5 APIs">\r
-    <auto_tcn>22</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>22</total_tcn>\r
-    <pkg_name>common/tct-selectorslevel2-w3c-tests-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-wgtapi01-w3c-tests" category="W3C/HTML5 APIs">\r
-    <auto_tcn>107</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>107</total_tcn>\r
-    <pkg_name>common/tct-wgtapi01-w3c-tests-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-webaudio-w3c-tests" category="W3C/HTML5 APIs">\r
-    <auto_tcn>257</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>257</total_tcn>\r
-    <pkg_name>common/tct-webaudio-w3c-tests-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-inputdevice-tizen-tests" category="Tizen Web Device APIs">\r
-    <auto_tcn>39</auto_tcn>\r
-    <manual_tcn>3</manual_tcn>\r
-    <total_tcn>42</total_tcn>\r
-    <pkg_name>mobile/tct-inputdevice-tizen-tests-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-secureelement-tizen-tests" category="Tizen Web Device APIs">\r
-    <auto_tcn>102</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>102</total_tcn>\r
-    <pkg_name>mobile/tct-secureelement-tizen-tests-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-sensor-tizen-tests" category="Tizen Web Device APIs">\r
-    <auto_tcn>166</auto_tcn>\r
-    <manual_tcn>21</manual_tcn>\r
-    <total_tcn>187</total_tcn>\r
-    <pkg_name>mobile/tct-sensor-tizen-tests-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-power-tizen-tests" category="Tizen Web Device APIs">\r
-    <auto_tcn>50</auto_tcn>\r
-    <manual_tcn>6</manual_tcn>\r
-    <total_tcn>56</total_tcn>\r
-    <pkg_name>mobile/tct-power-tizen-tests-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-privilege-tizen-tests" category="Tizen Web Device APIs">\r
-    <auto_tcn>71</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>71</total_tcn>\r
-    <pkg_name>common/tct-privilege-tizen-tests-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-alarm-tizen-tests" category="Tizen Web Device APIs">\r
-    <auto_tcn>60</auto_tcn>\r
-    <manual_tcn>1</manual_tcn>\r
-    <total_tcn>61</total_tcn>\r
-    <pkg_name>common/tct-alarm-tizen-tests-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-touchevent-w3c-tests" category="W3C/HTML5 APIs">\r
-    <auto_tcn>12</auto_tcn>\r
-    <manual_tcn>7</manual_tcn>\r
-    <total_tcn>19</total_tcn>\r
-    <pkg_name>common/tct-touchevent-w3c-tests-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-woff-w3c-tests" category="W3C/HTML5 APIs">\r
-    <auto_tcn>0</auto_tcn>\r
-    <manual_tcn>22</manual_tcn>\r
-    <total_tcn>22</total_tcn>\r
-    <pkg_name>common/tct-woff-w3c-tests-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-wgtapi02-w3c-tests" category="W3C/HTML5 APIs">\r
-    <auto_tcn>0</auto_tcn>\r
-    <manual_tcn>34</manual_tcn>\r
-    <total_tcn>34</total_tcn>\r
-    <pkg_name>common/tct-wgtapi02-w3c-tests-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-archive-tizen-tests" category="Tizen Web Device APIs">\r
-    <auto_tcn>106</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>106</total_tcn>\r
-    <pkg_name>common/tct-archive-tizen-tests-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-account-tizen-tests" category="Tizen Web Device APIs">\r
-    <auto_tcn>90</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>90</total_tcn>\r
-    <pkg_name>mobile/tct-account-tizen-tests-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-tizen-tizen-tests" category="Tizen Web Device APIs">\r
-    <auto_tcn>81</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>81</total_tcn>\r
-    <pkg_name>common/tct-tizen-tizen-tests-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-widget01-w3c-tests" category="W3C/HTML5 APIs">\r
-    <auto_tcn>155</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>155</total_tcn>\r
-    <pkg_name>common/tct-widget01-w3c-tests-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-bookmark-tizen-tests" category="Tizen Web Device APIs">\r
-    <auto_tcn>36</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>36</total_tcn>\r
-    <pkg_name>mobile/tct-bookmark-tizen-tests-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-3dtransforms-css3-tests" category="W3C/HTML5 APIs">\r
-    <auto_tcn>32</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>32</total_tcn>\r
-    <pkg_name>common/tct-3dtransforms-css3-tests-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-calendar-tizen-tests" launcher="WRTLauncher" category="Tizen Web Device APIs">\r
-    <auto_tcn>355</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>355</total_tcn>\r
-    <pkg_name>mobile/tct-calendar-tizen-tests-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-geoallow-w3c-tests" category="W3C/HTML5 APIs">\r
-    <auto_tcn>209</auto_tcn>\r
-    <manual_tcn>3</manual_tcn>\r
-    <total_tcn>212</total_tcn>\r
-    <pkg_name>common/tct-geoallow-w3c-tests-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-sessionhistory-html5-tests" category="W3C/HTML5 APIs">\r
-    <auto_tcn>117</auto_tcn>\r
-    <manual_tcn>2</manual_tcn>\r
-    <total_tcn>119</total_tcn>\r
-    <pkg_name>common/tct-sessionhistory-html5-tests-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-datacontrol-tizen-tests" category="Tizen Web Device APIs">\r
-    <auto_tcn>115</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>115</total_tcn>\r
-    <pkg_name>common/tct-datacontrol-tizen-tests-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-callhistory-tizen-tests" category="Tizen Web Device APIs">\r
-    <auto_tcn>80</auto_tcn>\r
-    <manual_tcn>27</manual_tcn>\r
-    <total_tcn>107</total_tcn>\r
-    <pkg_name>mobile/tct-callhistory-tizen-tests-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-appcontrol-tizen-tests" category="Tizen Web Device APIs">\r
-    <auto_tcn>5</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>5</total_tcn>\r
-    <pkg_name>mobile/tct-appcontrol-tizen-tests-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-events-cordova-tests" category="Cordova Plugin APIs">\r
-    <auto_tcn>1</auto_tcn>\r
-    <manual_tcn>6</manual_tcn>\r
-    <total_tcn>7</total_tcn>\r
-    <pkg_name>common/tct-events-cordova-tests-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-geodeny-w3c-tests" category="W3C/HTML5 APIs">\r
-    <auto_tcn>0</auto_tcn>\r
-    <manual_tcn>3</manual_tcn>\r
-    <total_tcn>3</total_tcn>\r
-    <pkg_name>common/tct-geodeny-w3c-tests-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-ui-css3-tests" category="W3C/HTML5 APIs">\r
-    <auto_tcn>40</auto_tcn>\r
-    <manual_tcn>1</manual_tcn>\r
-    <total_tcn>41</total_tcn>\r
-    <pkg_name>common/tct-ui-css3-tests-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-canvas-html5-tests" category="W3C/HTML5 APIs">\r
-    <auto_tcn>848</auto_tcn>\r
-    <manual_tcn>20</manual_tcn>\r
-    <total_tcn>868</total_tcn>\r
-    <pkg_name>common/tct-canvas-html5-tests-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-keymanager-tizen-tests" category="Tizen Web Device APIs">\r
-    <auto_tcn>39</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>39</total_tcn>\r
-    <pkg_name>common/tct-keymanager-tizen-tests-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-selectorslevel1-w3c-tests" category="W3C/HTML5 APIs">\r
-    <auto_tcn>24</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>24</total_tcn>\r
-    <pkg_name>common/tct-selectorslevel1-w3c-tests-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-sse-w3c-tests" category="W3C/HTML5 APIs">\r
-    <auto_tcn>66</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>66</total_tcn>\r
-    <pkg_name>common/tct-sse-w3c-tests-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-widgetpolicy-w3c-tests" category="W3C/HTML5 APIs">\r
-    <auto_tcn>0</auto_tcn>\r
-    <manual_tcn>22</manual_tcn>\r
-    <total_tcn>22</total_tcn>\r
-    <pkg_name>common/tct-widgetpolicy-w3c-tests-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-batterystatus-w3c-tests" category="W3C/HTML5 APIs">\r
-    <auto_tcn>25</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>25</total_tcn>\r
-    <pkg_name>common/tct-batterystatus-w3c-tests-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-mediacontroller-tizen-tests" category="Tizen Web Device APIs">\r
-    <auto_tcn>162</auto_tcn>\r
-    <manual_tcn>3</manual_tcn>\r
-    <total_tcn>165</total_tcn>\r
-    <pkg_name>common/tct-mediacontroller-tizen-tests-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-filesystem-tizen-tests" category="Tizen Web Device APIs">\r
-    <auto_tcn>289</auto_tcn>\r
-    <manual_tcn>3</manual_tcn>\r
-    <total_tcn>292</total_tcn>\r
-    <pkg_name>mobile/tct-filesystem-tizen-tests-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-systeminfo-tizen-tests" category="Tizen Web Device APIs">\r
-    <auto_tcn>382</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>382</total_tcn>\r
-    <pkg_name>mobile/tct-systeminfo-tizen-tests-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-feedback-tizen-tests" category="Tizen Web Device APIs">\r
-    <auto_tcn>15</auto_tcn>\r
-    <manual_tcn>3</manual_tcn>\r
-    <total_tcn>18</total_tcn>\r
-    <pkg_name>mobile/tct-feedback-tizen-tests-3.0.zip</pkg_name>\r
-  </suite>  \r
-  <suite name="tct-file-transfer-cordova-tests" category="Cordova Plugin APIs">\r
-    <auto_tcn>23</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>23</total_tcn>\r
-    <pkg_name>common/tct-file-transfer-cordova-tests-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-customelement-w3c-tests" category="W3C/HTML5 APIs">\r
-    <auto_tcn>10</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>10</total_tcn>\r
-    <pkg_name>common/tct-customelement-w3c-tests-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-device-cordova-tests" category="Cordova Plugin APIs">\r
-    <auto_tcn>7</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>7</total_tcn>\r
-    <pkg_name>common/tct-device-cordova-tests-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-beacon-w3c-tests" category="W3C/HTML5 APIs">\r
-    <auto_tcn>4</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>4</total_tcn>\r
-    <pkg_name>common/tct-beacon-w3c-tests-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-vibration-w3c-tests" category="W3C/HTML5 APIs">\r
-    <auto_tcn>1</auto_tcn>\r
-    <manual_tcn>1</manual_tcn>\r
-    <total_tcn>2</total_tcn>\r
-    <pkg_name>common/tct-vibration-w3c-tests-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-messaging-sms-tizen-tests" category="Tizen Web Device APIs">\r
-    <auto_tcn>184</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>184</total_tcn>\r
-    <pkg_name>mobile/tct-messaging-sms-tizen-tests-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-text-css3-tests" category="W3C/HTML5 APIs">\r
-    <auto_tcn>34</auto_tcn>\r
-    <manual_tcn>3</manual_tcn>\r
-    <total_tcn>37</total_tcn>\r
-    <pkg_name>common/tct-text-css3-tests-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-stab-wrt-tests" category="Tizen WRT Core Spec">\r
-    <auto_tcn>1</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>1</total_tcn>\r
-    <pkg_name>common/tct-stab-wrt-tests-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-webstorage-w3c-tests" category="W3C/HTML5 APIs">\r
-    <auto_tcn>195</auto_tcn>\r
-    <manual_tcn>5</manual_tcn>\r
-    <total_tcn>200</total_tcn>\r
-    <pkg_name>common/tct-webstorage-w3c-tests-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-download-tizen-tests" category="Tizen Web Device APIs">\r
-    <auto_tcn>62</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>62</total_tcn>\r
-    <pkg_name>common/tct-download-tizen-tests-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-mediaqueries-css3-tests" category="W3C/HTML5 APIs">\r
-    <auto_tcn>63</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>63</total_tcn>\r
-    <pkg_name>common/tct-mediaqueries-css3-tests-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-systemsetting-tizen-tests" category="Tizen Web Device APIs">\r
-    <auto_tcn>33</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>33</total_tcn>\r
-    <pkg_name>mobile/tct-systemsetting-tizen-tests-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-video-html5-tests" category="W3C/HTML5 APIs">\r
-    <auto_tcn>197</auto_tcn>\r
-    <manual_tcn>3</manual_tcn>\r
-    <total_tcn>200</total_tcn>\r
-    <pkg_name>common/tct-video-html5-tests-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-backgrounds-css3-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
-    <auto_tcn>541</auto_tcn>\r
-    <manual_tcn>74</manual_tcn>\r
-    <total_tcn>615</total_tcn>\r
-    <pkg_name>common/tct-backgrounds-css3-tests-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-pm-wrt-tests" category="Tizen WRT Core Spec">\r
-    <auto_tcn>24</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>24</total_tcn>\r
-    <pkg_name>common/tct-pm-wrt-tests-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-webgl-nonw3c-tests" category="Supplementary APIs">\r
-    <auto_tcn>910</auto_tcn>\r
-    <manual_tcn>1</manual_tcn>\r
-    <total_tcn>911</total_tcn>\r
-    <pkg_name>common/tct-webgl-nonw3c-tests-3.0.zip</pkg_name>\r
-  </suite>\r
-</ns3:testplan>\r
-\r
diff --git a/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/shell/plan/Web_Full_tv_2.4.xml b/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/shell/plan/Web_Full_tv_2.4.xml
deleted file mode 100755 (executable)
index 9714fcf..0000000
+++ /dev/null
@@ -1,501 +0,0 @@
-<ns3:testplan name="Web_Full_tv_2.4" profile="tv" xmlns="" xmlns:ns3="http://www.example.org/plan/">
-  <execute_type>Auto</execute_type>
-  <suite launcher="WRTLauncher" name="tct-animationtiming-w3c-tests">
-    <auto_tcn>11</auto_tcn>
-    <manual_tcn>7</manual_tcn>
-    <total_tcn>18</total_tcn>
-    <pkg_name>common/tct-animationtiming-w3c-tests-2.4.zip</pkg_name>
-  </suite>
-  <suite launcher="WRTLauncher" name="tct-indexeddb-w3c-tests">
-    <auto_tcn>391</auto_tcn>
-    <manual_tcn>0</manual_tcn>
-    <total_tcn>391</total_tcn>
-    <pkg_name>tv/tct-indexeddb-w3c-tests-2.4.zip</pkg_name>
-  </suite>
-  <suite launcher="WRTLauncher" name="tct-ext02-wrt-tests">
-    <auto_tcn>8</auto_tcn>
-    <manual_tcn>0</manual_tcn>
-    <total_tcn>8</total_tcn>
-    <pkg_name>common/tct-ext02-wrt-tests-2.4.zip</pkg_name>
-  </suite>
-  <suite launcher="WRTLauncher" name="tct-pagevisibility-w3c-tests">
-    <auto_tcn>18</auto_tcn>
-    <manual_tcn>2</manual_tcn>
-    <total_tcn>20</total_tcn>
-    <pkg_name>tv/tct-pagevisibility-w3c-tests-2.4.zip</pkg_name>
-  </suite>
-  <suite launcher="WRTLauncher" name="tct-ext01-wrt-tests">
-    <auto_tcn>2</auto_tcn>
-    <manual_tcn>0</manual_tcn>
-    <total_tcn>2</total_tcn>
-    <pkg_name>tv/tct-ext01-wrt-tests-2.4.zip</pkg_name>
-  </suite>
-  <suite launcher="WRTLauncher" name="tct-websocket-w3c-tests">
-    <auto_tcn>268</auto_tcn>
-    <manual_tcn>0</manual_tcn>
-    <total_tcn>268</total_tcn>
-    <pkg_name>tv/tct-websocket-w3c-tests-2.4.zip</pkg_name>
-  </suite>
-  <suite launcher="WRTLauncher" name="tct-content-tizen-tests">
-    <auto_tcn>245</auto_tcn>
-    <manual_tcn>0</manual_tcn>
-    <total_tcn>245</total_tcn>
-    <pkg_name>common/tct-content-tizen-tests-2.4.zip</pkg_name>
-  </suite>
-  <suite launcher="WRTLauncher" name="tct-flexiblebox-css3-tests">
-    <auto_tcn>25</auto_tcn>
-    <manual_tcn>28</manual_tcn>
-    <total_tcn>53</total_tcn>
-    <pkg_name>common/tct-flexiblebox-css3-tests-2.4.zip</pkg_name>
-  </suite>
-  <suite launcher="WRTLauncher" name="tct-tv-channel-tizen-tests">
-    <auto_tcn>166</auto_tcn>
-    <manual_tcn>3</manual_tcn>
-    <total_tcn>169</total_tcn>
-    <pkg_name>tv/tct-tv-channel-tizen-tests-2.4.zip</pkg_name>
-  </suite>
-  <suite launcher="WRTLauncher" name="tct-rt01-wrt-tests">
-    <auto_tcn>12</auto_tcn>
-    <manual_tcn>0</manual_tcn>
-    <total_tcn>12</total_tcn>
-    <pkg_name>common/tct-rt01-wrt-tests-2.4.zip</pkg_name>
-  </suite>
-  <suite launcher="WRTLauncher" name="tct-multicolumn-css3-tests">
-    <auto_tcn>141</auto_tcn>
-    <manual_tcn>18</manual_tcn>
-    <total_tcn>159</total_tcn>
-    <pkg_name>tv/tct-multicolumn-css3-tests-2.4.zip</pkg_name>
-  </suite>
-  <suite launcher="WRTLauncher" name="tct-appwgt-wrt-tests">
-    <auto_tcn>7</auto_tcn>
-    <manual_tcn>0</manual_tcn>
-    <total_tcn>7</total_tcn>
-    <pkg_name>common/tct-appwgt-wrt-tests-2.4.zip</pkg_name>
-  </suite>
-  <suite launcher="WRTLauncher" name="tct-archive-tizen-tests">
-    <auto_tcn>106</auto_tcn>
-    <manual_tcn>0</manual_tcn>
-    <total_tcn>106</total_tcn>
-    <pkg_name>common/tct-archive-tizen-tests-2.4.zip</pkg_name>
-  </suite>
-  <suite launcher="WRTLauncher" name="tct-gumallow-w3c-tests">
-    <auto_tcn>6</auto_tcn>
-    <manual_tcn>0</manual_tcn>
-    <total_tcn>6</total_tcn>
-    <pkg_name>common/tct-gumallow-w3c-tests-2.4.zip</pkg_name>
-  </suite>
-  <suite launcher="WRTLauncher" name="tct-fullscreen-nonw3c-tests">
-    <auto_tcn>16</auto_tcn>
-    <manual_tcn>0</manual_tcn>
-    <total_tcn>16</total_tcn>
-    <pkg_name>tv/tct-fullscreen-nonw3c-tests-2.4.zip</pkg_name>
-  </suite>
-  <suite launcher="WRTLauncher" name="tct-mediacapture-w3c-tests">
-    <auto_tcn>7</auto_tcn>
-    <manual_tcn>0</manual_tcn>
-    <total_tcn>7</total_tcn>
-    <pkg_name>common/tct-mediacapture-w3c-tests-2.4.zip</pkg_name>
-  </suite>
-  <suite launcher="WRTLauncher" name="tct-jsenhance-html5-tests">
-    <auto_tcn>49</auto_tcn>
-    <manual_tcn>0</manual_tcn>
-    <total_tcn>49</total_tcn>
-    <pkg_name>common/tct-jsenhance-html5-tests-2.4.zip</pkg_name>
-  </suite>
-  <suite launcher="WRTLauncher" name="tct-pm-wrt-tests">
-    <auto_tcn>24</auto_tcn>
-    <manual_tcn>0</manual_tcn>
-    <total_tcn>24</total_tcn>
-    <pkg_name>common/tct-pm-wrt-tests-2.4.zip</pkg_name>
-  </suite>
-  <suite launcher="WRTLauncher" name="tct-wgtapi02-w3c-tests">
-    <auto_tcn>0</auto_tcn>
-    <manual_tcn>34</manual_tcn>
-    <total_tcn>34</total_tcn>
-    <pkg_name>common/tct-wgtapi02-w3c-tests-2.4.zip</pkg_name>
-  </suite>
-  <suite launcher="WRTLauncher" name="tct-widgetpolicy-w3c-tests">
-    <auto_tcn>0</auto_tcn>
-    <manual_tcn>33</manual_tcn>
-    <total_tcn>33</total_tcn>
-    <pkg_name>common/tct-widgetpolicy-w3c-tests-2.4.zip</pkg_name>
-  </suite>
-  <suite launcher="WRTLauncher" name="tct-mediaqueries-css3-tests">
-    <auto_tcn>52</auto_tcn>
-    <manual_tcn>0</manual_tcn>
-    <total_tcn>52</total_tcn>
-    <pkg_name>tv/tct-mediaqueries-css3-tests-2.4.zip</pkg_name>
-  </suite>
-  <suite launcher="WRTLauncher" name="tct-typedarrays-nonw3c-tests">
-    <auto_tcn>80</auto_tcn>
-    <manual_tcn>0</manual_tcn>
-    <total_tcn>80</total_tcn>
-    <pkg_name>common/tct-typedarrays-nonw3c-tests-2.4.zip</pkg_name>
-  </suite>
-  <suite launcher="WRTLauncher" name="tct-webaudio-w3c-tests">
-    <auto_tcn>422</auto_tcn>
-    <manual_tcn>0</manual_tcn>
-    <total_tcn>422</total_tcn>
-    <pkg_name>tv/tct-webaudio-w3c-tests-2.4.zip</pkg_name>
-  </suite>
-  <suite launcher="WRTLauncher" name="tct-widget02-w3c-tests">
-    <auto_tcn>68</auto_tcn>
-    <manual_tcn>49</manual_tcn>
-    <total_tcn>117</total_tcn>
-    <pkg_name>tv/tct-widget02-w3c-tests-2.4.zip</pkg_name>
-  </suite>
-  <suite launcher="WRTLauncher" name="tct-filesystem-tizen-tests">
-    <auto_tcn>291</auto_tcn>
-    <manual_tcn>3</manual_tcn>
-    <total_tcn>294</total_tcn>
-    <pkg_name>tv/tct-filesystem-tizen-tests-2.4.zip</pkg_name>
-  </suite>
-  <suite launcher="WRTLauncher" name="tct-keymanager-tizen-tests">
-    <auto_tcn>39</auto_tcn>
-    <manual_tcn>0</manual_tcn>
-    <total_tcn>39</total_tcn>
-    <pkg_name>tv/tct-keymanager-tizen-tests-2.4.zip</pkg_name>
-  </suite>
-  <suite launcher="WRTLauncher" name="tct-webgl-nonw3c-tests">
-    <auto_tcn>889</auto_tcn>
-    <manual_tcn>0</manual_tcn>
-    <total_tcn>889</total_tcn>
-    <pkg_name>common/tct-webgl-nonw3c-tests-2.4.zip</pkg_name>
-  </suite>
-  <suite launcher="WRTLauncher" name="tct-download-tizen-tests">
-    <auto_tcn>62</auto_tcn>
-    <manual_tcn>0</manual_tcn>
-    <total_tcn>62</total_tcn>
-    <pkg_name>common/tct-download-tizen-tests-2.4.zip</pkg_name>
-  </suite>
-  <suite launcher="WRTLauncher" name="tct-selectorslevel2-w3c-tests">
-    <auto_tcn>30</auto_tcn>
-    <manual_tcn>0</manual_tcn>
-    <total_tcn>30</total_tcn>
-    <pkg_name>common/tct-selectorslevel2-w3c-tests-2.4.zip</pkg_name>
-  </suite>
-  <suite launcher="WRTLauncher" name="tct-tv-displaycontrol-tizen-tests">
-    <auto_tcn>20</auto_tcn>
-    <manual_tcn>0</manual_tcn>
-    <total_tcn>20</total_tcn>
-    <pkg_name>tv/tct-tv-displaycontrol-tizen-tests-2.4.zip</pkg_name>
-  </suite>
-  <suite launcher="WRTLauncher" name="tct-alarm-tizen-tests">
-    <auto_tcn>60</auto_tcn>
-    <manual_tcn>1</manual_tcn>
-    <total_tcn>61</total_tcn>
-    <pkg_name>common/tct-alarm-tizen-tests-2.4.zip</pkg_name>
-  </suite>
-  <suite launcher="WRTLauncher" name="tct-inputdevice-tizen-tests">
-    <auto_tcn>30</auto_tcn>
-    <manual_tcn>3</manual_tcn>
-    <total_tcn>33</total_tcn>
-    <pkg_name>tv/tct-inputdevice-tizen-tests-2.4.zip</pkg_name>
-  </suite>
-  <suite launcher="WRTLauncher" name="tct-websetting-tizen-tests">
-    <auto_tcn>22</auto_tcn>
-    <manual_tcn>0</manual_tcn>
-    <total_tcn>22</total_tcn>
-    <pkg_name>tv/tct-websetting-tizen-tests-2.4.zip</pkg_name>
-  </suite>
-  <suite launcher="WRTLauncher" name="tct-messageport-tizen-tests">
-    <auto_tcn>48</auto_tcn>
-    <manual_tcn>0</manual_tcn>
-    <total_tcn>48</total_tcn>
-    <pkg_name>common/tct-messageport-tizen-tests-2.4.zip</pkg_name>
-  </suite>
-  <suite launcher="WRTLauncher" name="tct-privilege-tizen-tests">
-    <auto_tcn>65</auto_tcn>
-    <manual_tcn>0</manual_tcn>
-    <total_tcn>65</total_tcn>
-    <pkg_name>common/tct-privilege-tizen-tests-2.4.zip</pkg_name>
-  </suite>
-  <suite launcher="WRTLauncher" name="tct-sse-w3c-tests">
-    <auto_tcn>68</auto_tcn>
-    <manual_tcn>0</manual_tcn>
-    <total_tcn>68</total_tcn>
-    <pkg_name>tv/tct-sse-w3c-tests-2.4.zip</pkg_name>
-  </suite>
-  <suite launcher="WRTLauncher" name="tct-namespace-tizen-tests">
-    <auto_tcn>23</auto_tcn>
-    <manual_tcn>0</manual_tcn>
-    <total_tcn>23</total_tcn>
-    <pkg_name>common/tct-namespace-tizen-tests-2.4.zip</pkg_name>
-  </suite>
-  <suite launcher="WRTLauncher" name="tct-tv-window-tizen-tests">
-    <auto_tcn>81</auto_tcn>
-    <manual_tcn>4</manual_tcn>
-    <total_tcn>85</total_tcn>
-    <pkg_name>tv/tct-tv-window-tizen-tests-2.4.zip</pkg_name>
-  </suite>
-  <suite launcher="WRTLauncher" name="tct-maxLength-wrt-tests">
-    <auto_tcn>14</auto_tcn>
-    <manual_tcn>0</manual_tcn>
-    <total_tcn>14</total_tcn>
-    <pkg_name>common/tct-maxLength-wrt-tests-2.4.zip</pkg_name>
-  </suite>
-  <suite launcher="WRTLauncher" name="tct-tv-audiocontrol-tizen-tests">
-    <auto_tcn>61</auto_tcn>
-    <manual_tcn>0</manual_tcn>
-    <total_tcn>61</total_tcn>
-    <pkg_name>tv/tct-tv-audiocontrol-tizen-tests-2.4.zip</pkg_name>
-  </suite>
-  <suite launcher="WRTLauncher" name="tct-xmlhttprequest-w3c-tests">
-    <auto_tcn>202</auto_tcn>
-    <manual_tcn>0</manual_tcn>
-    <total_tcn>202</total_tcn>
-    <pkg_name>tv/tct-xmlhttprequest-w3c-tests-2.4.zip</pkg_name>
-  </suite>
-  <suite launcher="WRTLauncher" name="tct-security-tcs-tests">
-    <auto_tcn>3</auto_tcn>
-    <manual_tcn>0</manual_tcn>
-    <total_tcn>3</total_tcn>
-    <pkg_name>common/tct-security-tcs-tests-2.4.zip</pkg_name>
-  </suite>
-  <suite launcher="WRTLauncher" name="tct-backgrounds-css3-tests">
-    <auto_tcn>541</auto_tcn>
-    <manual_tcn>74</manual_tcn>
-    <total_tcn>615</total_tcn>
-    <pkg_name>tv/tct-backgrounds-css3-tests-2.4.zip</pkg_name>
-  </suite>
-  <suite launcher="WRTLauncher" name="tct-webstorage-w3c-tests">
-    <auto_tcn>177</auto_tcn>
-    <manual_tcn>4</manual_tcn>
-    <total_tcn>181</total_tcn>
-    <pkg_name>common/tct-webstorage-w3c-tests-2.4.zip</pkg_name>
-  </suite>
-  <suite launcher="WRTLauncher" name="tct-package-tizen-tests">
-    <auto_tcn>54</auto_tcn>
-    <manual_tcn>12</manual_tcn>
-    <total_tcn>66</total_tcn>
-    <pkg_name>common/tct-package-tizen-tests-2.4.zip</pkg_name>
-  </suite>
-  <suite launcher="WRTLauncher" name="tct-text-css3-tests">
-    <auto_tcn>27</auto_tcn>
-    <manual_tcn>15</manual_tcn>
-    <total_tcn>42</total_tcn>
-    <pkg_name>common/tct-text-css3-tests-2.4.zip</pkg_name>
-  </suite>
-  <suite launcher="WRTLauncher" name="tct-systeminfo-tizen-tests">
-    <auto_tcn>296</auto_tcn>
-    <manual_tcn>0</manual_tcn>
-    <total_tcn>296</total_tcn>
-    <pkg_name>tv/tct-systeminfo-tizen-tests-2.4.zip</pkg_name>
-  </suite>
-  <suite launcher="WRTLauncher" name="tct-sandbox-html5-tests">
-    <auto_tcn>72</auto_tcn>
-    <manual_tcn>1</manual_tcn>
-    <total_tcn>73</total_tcn>
-    <pkg_name>common/tct-sandbox-html5-tests-2.4.zip</pkg_name>
-  </suite>
-  <suite launcher="WRTLauncher" name="tct-sp02-wrt-tests">
-    <auto_tcn>1</auto_tcn>
-    <manual_tcn>0</manual_tcn>
-    <total_tcn>1</total_tcn>
-    <pkg_name>common/tct-sp02-wrt-tests-2.4.zip</pkg_name>
-  </suite>
-  <suite launcher="WRTLauncher" name="tct-selectorslevel1-w3c-tests">
-    <auto_tcn>78</auto_tcn>
-    <manual_tcn>0</manual_tcn>
-    <total_tcn>78</total_tcn>
-    <pkg_name>common/tct-selectorslevel1-w3c-tests-2.4.zip</pkg_name>
-  </suite>
-  <suite launcher="WRTLauncher" name="tct-csp-w3c-tests">
-    <auto_tcn>133</auto_tcn>
-    <manual_tcn>78</manual_tcn>
-    <total_tcn>211</total_tcn>
-    <pkg_name>tv/tct-csp-w3c-tests-2.4.zip</pkg_name>
-  </suite>
-  <suite launcher="WRTLauncher" name="tct-colors-css3-tests">
-    <auto_tcn>46</auto_tcn>
-    <manual_tcn>29</manual_tcn>
-    <total_tcn>75</total_tcn>
-    <pkg_name>common/tct-colors-css3-tests-2.4.zip</pkg_name>
-  </suite>
-  <suite launcher="WRTLauncher" name="tct-tv-info-tizen-tests">
-    <auto_tcn>23</auto_tcn>
-    <manual_tcn>3</manual_tcn>
-    <total_tcn>26</total_tcn>
-    <pkg_name>tv/tct-tv-info-tizen-tests-2.4.zip</pkg_name>
-  </suite>
-  <suite launcher="WRTLauncher" name="tct-2dtransforms-css3-tests">
-    <auto_tcn>34</auto_tcn>
-    <manual_tcn>0</manual_tcn>
-    <total_tcn>34</total_tcn>
-    <pkg_name>common/tct-2dtransforms-css3-tests-2.4.zip</pkg_name>
-  </suite>
-  <suite launcher="WRTLauncher" name="tct-application-tizen-tests">
-    <auto_tcn>183</auto_tcn>
-    <manual_tcn>6</manual_tcn>
-    <total_tcn>189</total_tcn>
-    <pkg_name>tv/tct-application-tizen-tests-2.4.zip</pkg_name>
-  </suite>
-  <suite launcher="WRTLauncher" name="tct-forms-html5-tests">
-    <auto_tcn>146</auto_tcn>
-    <manual_tcn>0</manual_tcn>
-    <total_tcn>146</total_tcn>
-    <pkg_name>tv/tct-forms-html5-tests-2.4.zip</pkg_name>
-  </suite>
-  <suite launcher="WRTLauncher" name="tct-tizen-tizen-tests">
-    <auto_tcn>81</auto_tcn>
-    <manual_tcn>0</manual_tcn>
-    <total_tcn>81</total_tcn>
-    <pkg_name>common/tct-tizen-tizen-tests-2.4.zip</pkg_name>
-  </suite>
-  <suite launcher="WRTLauncher" name="tct-cors-w3c-tests">
-    <auto_tcn>10</auto_tcn>
-    <manual_tcn>0</manual_tcn>
-    <total_tcn>10</total_tcn>
-    <pkg_name>common/tct-cors-w3c-tests-2.4.zip</pkg_name>
-  </suite>
-  <suite launcher="WRTLauncher" name="tct-exif-tizen-tests">
-    <auto_tcn>64</auto_tcn>
-    <manual_tcn>0</manual_tcn>
-    <total_tcn>64</total_tcn>
-    <pkg_name>common/tct-exif-tizen-tests-2.4.zip</pkg_name>
-  </suite>
-  <suite launcher="WRTLauncher" name="tct-capability-tests">
-    <auto_tcn>15</auto_tcn>
-    <manual_tcn>0</manual_tcn>
-    <total_tcn>15</total_tcn>
-    <pkg_name>common/tct-capability-tests-2.4.zip</pkg_name>
-  </suite>
-  <suite launcher="WRTLauncher" name="tct-fileapi-w3c-tests">
-    <auto_tcn>97</auto_tcn>
-    <manual_tcn>0</manual_tcn>
-    <total_tcn>97</total_tcn>
-    <pkg_name>tv/tct-fileapi-w3c-tests-2.4.zip</pkg_name>
-  </suite>
-  <suite launcher="WRTLauncher" name="tct-browserstate-html5-tests">
-    <auto_tcn>3</auto_tcn>
-    <manual_tcn>0</manual_tcn>
-    <total_tcn>3</total_tcn>
-    <pkg_name>tv/tct-browserstate-html5-tests-2.4.zip</pkg_name>
-  </suite>
-  <suite launcher="WRTLauncher" name="tct-canvas-html5-tests">
-    <auto_tcn>846</auto_tcn>
-    <manual_tcn>18</manual_tcn>
-    <total_tcn>864</total_tcn>
-    <pkg_name>common/tct-canvas-html5-tests-2.4.zip</pkg_name>
-  </suite>
-  <suite launcher="WRTLauncher" name="tct-widget01-w3c-tests">
-    <auto_tcn>73</auto_tcn>
-    <manual_tcn>0</manual_tcn>
-    <total_tcn>73</total_tcn>
-    <pkg_name>tv/tct-widget01-w3c-tests-2.4.zip</pkg_name>
-  </suite>
-  <suite launcher="WRTLauncher" name="tct-time-tizen-tests">
-    <auto_tcn>459</auto_tcn>
-    <manual_tcn>0</manual_tcn>
-    <total_tcn>459</total_tcn>
-    <pkg_name>tv/tct-time-tizen-tests-2.4.zip</pkg_name>
-  </suite>
-  <suite launcher="WRTLauncher" name="tct-ui01-wrt-tests">
-    <auto_tcn>11</auto_tcn>
-    <manual_tcn>0</manual_tcn>
-    <total_tcn>11</total_tcn>
-    <pkg_name>tv/tct-ui01-wrt-tests-2.4.zip</pkg_name>
-  </suite>
-  <suite launcher="WRTLauncher" name="tct-appcache-html5-tests">
-    <auto_tcn>36</auto_tcn>
-    <manual_tcn>0</manual_tcn>
-    <total_tcn>36</total_tcn>
-    <pkg_name>tv/tct-appcache-html5-tests-2.4.zip</pkg_name>
-  </suite>
-  <suite launcher="WRTLauncher" name="tct-screenorientation-w3c-tests">
-    <auto_tcn>17</auto_tcn>
-    <manual_tcn>0</manual_tcn>
-    <total_tcn>17</total_tcn>
-    <pkg_name>tv/tct-screenorientation-w3c-tests-2.4.zip</pkg_name>
-  </suite>
-  <suite launcher="WRTLauncher" name="tct-rt02-wrt-tests">
-    <auto_tcn>3</auto_tcn>
-    <manual_tcn>0</manual_tcn>
-    <total_tcn>3</total_tcn>
-    <pkg_name>common/tct-rt02-wrt-tests-2.4.zip</pkg_name>
-  </suite>
-  <suite launcher="WRTLauncher" name="tct-sp01-wrt-tests">
-    <auto_tcn>4</auto_tcn>
-    <manual_tcn>0</manual_tcn>
-    <total_tcn>4</total_tcn>
-    <pkg_name>common/tct-sp01-wrt-tests-2.4.zip</pkg_name>
-  </suite>
-  <suite launcher="WRTLauncher" name="tct-svg-html5-tests">
-    <auto_tcn>3</auto_tcn>
-    <manual_tcn>9</manual_tcn>
-    <total_tcn>12</total_tcn>
-    <pkg_name>common/tct-svg-html5-tests-2.4.zip</pkg_name>
-  </suite>
-  <suite launcher="WRTLauncher" name="tct-sessionhistory-html5-tests">
-    <auto_tcn>148</auto_tcn>
-    <manual_tcn>1</manual_tcn>
-    <total_tcn>149</total_tcn>
-    <pkg_name>common/tct-sessionhistory-html5-tests-2.4.zip</pkg_name>
-  </suite>
-  <suite launcher="WRTLauncher" name="tct-workers-w3c-tests">
-    <auto_tcn>84</auto_tcn>
-    <manual_tcn>1</manual_tcn>
-    <total_tcn>85</total_tcn>
-    <pkg_name>tv/tct-workers-w3c-tests-2.4.zip</pkg_name>
-  </suite>
-  <suite launcher="WRTLauncher" name="tct-wgtapi01-w3c-tests">
-    <auto_tcn>107</auto_tcn>
-    <manual_tcn>0</manual_tcn>
-    <total_tcn>107</total_tcn>
-    <pkg_name>common/tct-wgtapi01-w3c-tests-2.4.zip</pkg_name>
-  </suite>
-  <suite launcher="WRTLauncher" name="tct-3dtransforms-css3-tests">
-    <auto_tcn>32</auto_tcn>
-    <manual_tcn>0</manual_tcn>
-    <total_tcn>32</total_tcn>
-    <pkg_name>common/tct-3dtransforms-css3-tests-2.4.zip</pkg_name>
-  </suite>
-  <suite launcher="WRTLauncher" name="tct-transitions-css3-tests">
-    <auto_tcn>26</auto_tcn>
-    <manual_tcn>5</manual_tcn>
-    <total_tcn>31</total_tcn>
-    <pkg_name>common/tct-transitions-css3-tests-2.4.zip</pkg_name>
-  </suite>
-  <suite launcher="WRTLauncher" name="tct-stab-wrt-tests">
-    <auto_tcn>1</auto_tcn>
-    <manual_tcn>0</manual_tcn>
-    <total_tcn>1</total_tcn>
-    <pkg_name>common/tct-stab-wrt-tests-2.4.zip</pkg_name>
-  </suite>
-  <suite launcher="WRTLauncher" name="tct-animations-css3-tests">
-    <auto_tcn>24</auto_tcn>
-    <manual_tcn>0</manual_tcn>
-    <total_tcn>24</total_tcn>
-    <pkg_name>common/tct-animations-css3-tests-2.4.zip</pkg_name>
-  </suite>
-  <suite launcher="WRTLauncher" name="tct-fonts-css3-tests">
-    <auto_tcn>11</auto_tcn>
-    <manual_tcn>131</manual_tcn>
-    <total_tcn>142</total_tcn>
-    <pkg_name>common/tct-fonts-css3-tests-2.4.zip</pkg_name>
-  </suite>
-  <suite launcher="WRTLauncher" name="tct-navigationtiming-w3c-tests">
-    <auto_tcn>45</auto_tcn>
-    <manual_tcn>0</manual_tcn>
-    <total_tcn>45</total_tcn>
-    <pkg_name>tv/tct-navigationtiming-w3c-tests-2.4.zip</pkg_name>
-  </suite>
-  <suite launcher="WRTLauncher" name="tct-ui-css3-tests">
-    <auto_tcn>43</auto_tcn>
-    <manual_tcn>1</manual_tcn>
-    <total_tcn>44</total_tcn>
-    <pkg_name>common/tct-ui-css3-tests-2.4.zip</pkg_name>
-  </suite>
-  <suite launcher="WRTLauncher" name="tct-extra-html5-tests">
-    <auto_tcn>544</auto_tcn>
-    <manual_tcn>25</manual_tcn>
-    <total_tcn>569</total_tcn>
-    <pkg_name>tv/tct-extra-html5-tests-2.4.zip</pkg_name>
-  </suite>
-  <suite launcher="WRTLauncher" name="tct-webmessaging-w3c-tests">
-    <auto_tcn>175</auto_tcn>
-    <manual_tcn>0</manual_tcn>
-    <total_tcn>175</total_tcn>
-    <pkg_name>tv/tct-webmessaging-w3c-tests-2.4.zip</pkg_name>
-  </suite>
-</ns3:testplan>
diff --git a/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/shell/plan/Web_Full_tv_3.0.xml b/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/shell/plan/Web_Full_tv_3.0.xml
deleted file mode 100755 (executable)
index de3d204..0000000
+++ /dev/null
@@ -1,647 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>\r
-<ns3:testplan xmlns:ns3="http://www.example.org/plan/" xmlns="" name="Web_Full_tv_3.0" profile="tv">\r
-  <execute_type>Auto</execute_type>\r
-  <suite name="tct-jsenhance-html5-tests" category="W3C/HTML5 APIs">\r
-    <auto_tcn>7</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>7</total_tcn>\r
-    <pkg_name>common/tct-jsenhance-html5-tests-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-multicolumn-css3-tests" category="W3C/HTML5 APIs">\r
-    <auto_tcn>136</auto_tcn>\r
-    <manual_tcn>18</manual_tcn>\r
-    <total_tcn>154</total_tcn>\r
-    <pkg_name>common/tct-multicolumn-css3-tests-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-devicemotion-cordova-tests" category="Cordova Plugin APIs">\r
-    <auto_tcn>18</auto_tcn>\r
-    <manual_tcn>1</manual_tcn>\r
-    <total_tcn>19</total_tcn>\r
-    <pkg_name>common/tct-devicemotion-cordova-tests-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-workers-w3c-tests" category="W3C/HTML5 APIs">\r
-    <auto_tcn>77</auto_tcn>\r
-    <manual_tcn>1</manual_tcn>\r
-    <total_tcn>78</total_tcn>\r
-    <pkg_name>common/tct-workers-w3c-tests-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-namespace-tizen-tests" category="Tizen Web Device APIs">\r
-    <auto_tcn>30</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>30</total_tcn>\r
-    <pkg_name>tv/tct-namespace-tizen-tests-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-transitions-css3-tests" category="W3C/HTML5 APIs">\r
-    <auto_tcn>9</auto_tcn>\r
-    <manual_tcn>6</manual_tcn>\r
-    <total_tcn>15</total_tcn>\r
-    <pkg_name>common/tct-transitions-css3-tests-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-network-information-cordova-tests" category="Cordova Plugin APIs">\r
-    <auto_tcn>10</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>10</total_tcn>\r
-    <pkg_name>common/tct-network-information-cordova-tests-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-crypto-w3c-tests" category="W3C/HTML5 APIs">\r
-    <auto_tcn>78</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>78</total_tcn>\r
-    <pkg_name>common/tct-crypto-w3c-tests-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-2dtransforms-css3-tests" category="W3C/HTML5 APIs">\r
-    <auto_tcn>36</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>36</total_tcn>\r
-    <pkg_name>common/tct-2dtransforms-css3-tests-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-dialogs-cordova-tests" category="Cordova Plugin APIs">\r
-    <auto_tcn>13</auto_tcn>\r
-    <manual_tcn>9</manual_tcn>\r
-    <total_tcn>22</total_tcn>\r
-    <pkg_name>common/tct-dialogs-cordova-tests-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-time-tizen-tests" category="Tizen Web Device APIs">\r
-    <auto_tcn>454</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>454</total_tcn>\r
-    <pkg_name>tv/tct-time-tizen-tests-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-forms-html5-tests" category="W3C/HTML5 APIs">\r
-    <auto_tcn>49</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>49</total_tcn>\r
-    <pkg_name>common/tct-forms-html5-tests-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-capability-tests" category="Compliance">\r
-    <auto_tcn>35</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>35</total_tcn>\r
-    <pkg_name>common/tct-capability-tests-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-fileapi-w3c-tests" category="W3C/HTML5 APIs">\r
-    <auto_tcn>33</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>33</total_tcn>\r
-    <pkg_name>common/tct-fileapi-w3c-tests-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-ext01-wrt-tests" category="Tizen WRT Core Spec">\r
-    <auto_tcn>2</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>2</total_tcn>\r
-    <pkg_name>tv/tct-ext01-wrt-tests-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-mediacapture-w3c-tests" category="W3C/HTML5 APIs">\r
-    <auto_tcn>6</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>6</total_tcn>\r
-    <pkg_name>common/tct-mediacapture-w3c-tests-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-exif-tizen-tests" category="Tizen Web Device APIs">\r
-    <auto_tcn>64</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>64</total_tcn>\r
-    <pkg_name>common/tct-exif-tizen-tests-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-csp-w3c-tests" category="W3C/HTML5 APIs">\r
-    <auto_tcn>137</auto_tcn>\r
-    <manual_tcn>83</manual_tcn>\r
-    <total_tcn>220</total_tcn>\r
-    <pkg_name>common/tct-csp-w3c-tests-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-privilege-wrt-tests" category="Tizen WRT Core Spec">\r
-    <auto_tcn>95</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>95</total_tcn>\r
-    <pkg_name>tv/tct-privilege-wrt-tests-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-mse-w3c-tests" category="W3C/HTML5 APIs">\r
-    <auto_tcn>95</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>95</total_tcn>\r
-    <pkg_name>tv/tct-mse-w3c-tests-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-media-cordova-tests" category="Cordova Plugin APIs">\r
-    <auto_tcn>57</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>57</total_tcn>\r
-    <pkg_name>common/tct-media-cordova-tests-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-webmessaging-w3c-tests" category="W3C/HTML5 APIs">\r
-    <auto_tcn>175</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>175</total_tcn>\r
-    <pkg_name>common/tct-webmessaging-w3c-tests-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-package-tizen-tests" category="Tizen Web Device APIs">\r
-    <auto_tcn>54</auto_tcn>\r
-    <manual_tcn>12</manual_tcn>\r
-    <total_tcn>66</total_tcn>\r
-    <pkg_name>common/tct-package-tizen-tests-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-file-cordova-tests" category="Cordova Plugin APIs">\r
-    <auto_tcn>172</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>172</total_tcn>\r
-    <pkg_name>common/tct-file-cordova-tests-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-notification-tizen-tests" category="Tizen Web Device APIs">\r
-    <auto_tcn>96</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>96</total_tcn>\r
-    <pkg_name>common/tct-notification-tizen-tests-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-template-w3c-tests" category="W3C/HTML5 APIs">\r
-    <auto_tcn>1</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>1</total_tcn>\r
-    <pkg_name>common/tct-template-w3c-tests-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-rt01-wrt-tests" category="Tizen WRT Core Spec">\r
-    <auto_tcn>12</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>12</total_tcn>\r
-    <pkg_name>common/tct-rt01-wrt-tests-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-appcache-html5-tests" category="W3C/HTML5 APIs">\r
-    <auto_tcn>26</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>26</total_tcn>\r
-    <pkg_name>common/tct-appcache-html5-tests-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-svg-html5-tests" category="W3C/HTML5 APIs">\r
-    <auto_tcn>43</auto_tcn>\r
-    <manual_tcn>14</manual_tcn>\r
-    <total_tcn>57</total_tcn>\r
-    <pkg_name>common/tct-svg-html5-tests-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-websocket-w3c-tests" category="W3C/HTML5 APIs">\r
-    <auto_tcn>266</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>266</total_tcn>\r
-    <pkg_name>common/tct-websocket-w3c-tests-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-flexiblebox-css3-tests" category="W3C/HTML5 APIs">\r
-    <auto_tcn>14</auto_tcn>\r
-    <manual_tcn>14</manual_tcn>\r
-    <total_tcn>28</total_tcn>\r
-    <pkg_name>common/tct-flexiblebox-css3-tests-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-dnd-html5-tests" category="W3C/HTML5 APIs">\r
-    <auto_tcn>6</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>6</total_tcn>\r
-    <pkg_name>common/tct-dnd-html5-tests-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-extra-html5-tests" category="W3C/HTML5 APIs">\r
-    <auto_tcn>548</auto_tcn>\r
-    <manual_tcn>25</manual_tcn>\r
-    <total_tcn>573</total_tcn>\r
-    <pkg_name>common/tct-extra-html5-tests-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-fullscreen-nonw3c-tests" category="Supplementary APIs">\r
-    <auto_tcn>20</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>20</total_tcn>\r
-    <pkg_name>common/tct-fullscreen-nonw3c-tests-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-colors-css3-tests" category="W3C/HTML5 APIs">\r
-    <auto_tcn>46</auto_tcn>\r
-    <manual_tcn>29</manual_tcn>\r
-    <total_tcn>75</total_tcn>\r
-    <pkg_name>common/tct-colors-css3-tests-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-indexeddb-w3c-tests" category="W3C/HTML5 APIs">\r
-    <auto_tcn>343</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>343</total_tcn>\r
-    <pkg_name>common/tct-indexeddb-w3c-tests-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-sandbox-html5-tests" category="W3C/HTML5 APIs">\r
-    <auto_tcn>45</auto_tcn>\r
-    <manual_tcn>1</manual_tcn>\r
-    <total_tcn>46</total_tcn>\r
-    <pkg_name>common/tct-sandbox-html5-tests-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-messageport-tizen-tests" category="Tizen Web Device APIs">\r
-    <auto_tcn>51</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>51</total_tcn>\r
-    <pkg_name>common/tct-messageport-tizen-tests-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-browserstate-html5-tests" category="W3C/HTML5 APIs">\r
-    <auto_tcn>3</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>3</total_tcn>\r
-    <pkg_name>common/tct-browserstate-html5-tests-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-cors-w3c-tests" category="W3C/HTML5 APIs">\r
-    <auto_tcn>10</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>10</total_tcn>\r
-    <pkg_name>common/tct-cors-w3c-tests-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-xmlhttprequest-w3c-tests" category="W3C/HTML5 APIs">\r
-    <auto_tcn>212</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>212</total_tcn>\r
-    <pkg_name>common/tct-xmlhttprequest-w3c-tests-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-navigationtiming-w3c-tests" category="W3C/HTML5 APIs">\r
-    <auto_tcn>82</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>82</total_tcn>\r
-    <pkg_name>common/tct-navigationtiming-w3c-tests-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-typedarrays-nonw3c-tests" category="Supplementary APIs">\r
-    <auto_tcn>446</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>446</total_tcn>\r
-    <pkg_name>common/tct-typedarrays-nonw3c-tests-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-animations-css3-tests" category="W3C/HTML5 APIs">\r
-    <auto_tcn>25</auto_tcn>\r
-    <manual_tcn>1</manual_tcn>\r
-    <total_tcn>26</total_tcn>\r
-    <pkg_name>common/tct-animations-css3-tests-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-pagevisibility-w3c-tests" category="W3C/HTML5 APIs">\r
-    <auto_tcn>18</auto_tcn>\r
-    <manual_tcn>2</manual_tcn>\r
-    <total_tcn>20</total_tcn>\r
-    <pkg_name>common/tct-pagevisibility-w3c-tests-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-ResponsiveImage-w3c-tests" category="Tizen W3C APIs">\r
-    <auto_tcn>32</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>32</total_tcn>\r
-    <pkg_name>common/tct-ResponsiveImage-w3c-tests-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-content-tizen-tests" category="Tizen Web Device APIs">\r
-    <auto_tcn>245</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>245</total_tcn>\r
-    <pkg_name>common/tct-content-tizen-tests-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-gumallow-w3c-tests" category="W3C/HTML5 APIs">\r
-    <auto_tcn>6</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>6</total_tcn>\r
-    <pkg_name>common/tct-gumallow-w3c-tests-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-serviceworkers-w3c-tests" category="W3C/HTML5 APIs">\r
-    <auto_tcn>107</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>107</total_tcn>\r
-    <pkg_name>common/tct-serviceworkers-w3c-tests-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-globalization-cordova-tests" category="Cordova Plugin APIs">\r
-    <auto_tcn>116</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>116</total_tcn>\r
-    <pkg_name>common/tct-globalization-cordova-tests-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-sp01-wrt-tests" category="Tizen WRT Core Spec">\r
-    <auto_tcn>4</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>4</total_tcn>\r
-    <pkg_name>common/tct-sp01-wrt-tests-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-widget02-w3c-tests" category="W3C/HTML5 APIs">\r
-    <auto_tcn>68</auto_tcn>\r
-    <manual_tcn>45</manual_tcn>\r
-    <total_tcn>113</total_tcn>\r
-    <pkg_name>tv/tct-widget02-w3c-tests-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-websetting-tizen-tests" category="Tizen Web Device APIs">\r
-    <auto_tcn>22</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>22</total_tcn>\r
-    <pkg_name>tv/tct-websetting-tizen-tests-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-audio-html5-tests" category="W3C/HTML5 APIs">\r
-    <auto_tcn>152</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>152</total_tcn>\r
-    <pkg_name>common/tct-audio-html5-tests-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-import-w3c-tests" category="W3C/HTML5 APIs">\r
-    <auto_tcn>1</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>1</total_tcn>\r
-    <pkg_name>common/tct-import-w3c-tests-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-screenorientation-w3c-tests" category="W3C/HTML5 APIs">\r
-    <auto_tcn>14</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>14</total_tcn>\r
-    <pkg_name>common/tct-screenorientation-w3c-tests-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-rt02-wrt-tests" category="Tizen WRT Core Spec">\r
-    <auto_tcn>3</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>3</total_tcn>\r
-    <pkg_name>common/tct-rt02-wrt-tests-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-sp02-wrt-tests" category="Tizen WRT Core Spec">\r
-    <auto_tcn>1</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>1</total_tcn>\r
-    <pkg_name>common/tct-sp02-wrt-tests-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-ext02-wrt-tests" category="Tizen WRT Core Spec">\r
-    <auto_tcn>8</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>8</total_tcn>\r
-    <pkg_name>common/tct-ext02-wrt-tests-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-application-tizen-tests" category="Tizen Web Device APIs">\r
-    <auto_tcn>159</auto_tcn>\r
-    <manual_tcn>6</manual_tcn>\r
-    <total_tcn>165</total_tcn>\r
-    <pkg_name>tv/tct-application-tizen-tests-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-humanactivitymonitor-tizen-tests" category="Tizen Web Device APIs">\r
-    <auto_tcn>87</auto_tcn>\r
-    <manual_tcn>15</manual_tcn>\r
-    <total_tcn>102</total_tcn>\r
-    <pkg_name>common/tct-humanactivitymonitor-tizen-tests-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-fonts-css3-tests" category="W3C/HTML5 APIs">\r
-    <auto_tcn>12</auto_tcn>\r
-    <manual_tcn>131</manual_tcn>\r
-    <total_tcn>143</total_tcn>\r
-    <pkg_name>common/tct-fonts-css3-tests-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-security-tcs-tests" launcher="WRTLauncher" category="Compliance">\r
-    <auto_tcn>3</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>3</total_tcn>\r
-    <pkg_name>common/tct-security-tcs-tests-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-speech-w3c-tests" category="W3C/HTML5 APIs">\r
-    <auto_tcn>86</auto_tcn>\r
-    <manual_tcn>5</manual_tcn>\r
-    <total_tcn>91</total_tcn>\r
-    <pkg_name>common/tct-speech-w3c-tests-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-ui01-wrt-tests" category="Tizen WRT Core Spec">\r
-    <auto_tcn>20</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>20</total_tcn>\r
-    <pkg_name>tv/tct-ui01-wrt-tests-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-animationtiming-w3c-tests" category="W3C/HTML5 APIs">\r
-    <auto_tcn>11</auto_tcn>\r
-    <manual_tcn>7</manual_tcn>\r
-    <total_tcn>18</total_tcn>\r
-    <pkg_name>common/tct-animationtiming-w3c-tests-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-selectorslevel2-w3c-tests" category="W3C/HTML5 APIs">\r
-    <auto_tcn>22</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>22</total_tcn>\r
-    <pkg_name>common/tct-selectorslevel2-w3c-tests-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-wgtapi01-w3c-tests" category="W3C/HTML5 APIs">\r
-    <auto_tcn>107</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>107</total_tcn>\r
-    <pkg_name>common/tct-wgtapi01-w3c-tests-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-webaudio-w3c-tests" category="W3C/HTML5 APIs">\r
-    <auto_tcn>257</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>257</total_tcn>\r
-    <pkg_name>common/tct-webaudio-w3c-tests-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-tv-inputdevice-tizen-tests" category="Tizen Web Device APIs">\r
-    <auto_tcn>23</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>23</total_tcn>\r
-    <pkg_name>tv/tct-tv-inputdevice-tizen-tests-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-privilege-tizen-tests" category="Tizen Web Device APIs">\r
-    <auto_tcn>71</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>71</total_tcn>\r
-    <pkg_name>common/tct-privilege-tizen-tests-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-alarm-tizen-tests" category="Tizen Web Device APIs">\r
-    <auto_tcn>60</auto_tcn>\r
-    <manual_tcn>1</manual_tcn>\r
-    <total_tcn>61</total_tcn>\r
-    <pkg_name>common/tct-alarm-tizen-tests-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-touchevent-w3c-tests" category="W3C/HTML5 APIs">\r
-    <auto_tcn>12</auto_tcn>\r
-    <manual_tcn>7</manual_tcn>\r
-    <total_tcn>19</total_tcn>\r
-    <pkg_name>common/tct-touchevent-w3c-tests-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-woff-w3c-tests" category="W3C/HTML5 APIs">\r
-    <auto_tcn>0</auto_tcn>\r
-    <manual_tcn>22</manual_tcn>\r
-    <total_tcn>22</total_tcn>\r
-    <pkg_name>common/tct-woff-w3c-tests-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-wgtapi02-w3c-tests" category="W3C/HTML5 APIs">\r
-    <auto_tcn>0</auto_tcn>\r
-    <manual_tcn>34</manual_tcn>\r
-    <total_tcn>34</total_tcn>\r
-    <pkg_name>common/tct-wgtapi02-w3c-tests-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-archive-tizen-tests" category="Tizen Web Device APIs">\r
-    <auto_tcn>106</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>106</total_tcn>\r
-    <pkg_name>common/tct-archive-tizen-tests-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-tizen-tizen-tests" category="Tizen Web Device APIs">\r
-    <auto_tcn>81</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>81</total_tcn>\r
-    <pkg_name>common/tct-tizen-tizen-tests-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-widget01-w3c-tests" category="W3C/HTML5 APIs">\r
-    <auto_tcn>155</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>155</total_tcn>\r
-    <pkg_name>common/tct-widget01-w3c-tests-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-3dtransforms-css3-tests" category="W3C/HTML5 APIs">\r
-    <auto_tcn>32</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>32</total_tcn>\r
-    <pkg_name>common/tct-3dtransforms-css3-tests-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-geoallow-w3c-tests" category="W3C/HTML5 APIs">\r
-    <auto_tcn>209</auto_tcn>\r
-    <manual_tcn>3</manual_tcn>\r
-    <total_tcn>212</total_tcn>\r
-    <pkg_name>common/tct-geoallow-w3c-tests-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-sessionhistory-html5-tests" category="W3C/HTML5 APIs">\r
-    <auto_tcn>117</auto_tcn>\r
-    <manual_tcn>2</manual_tcn>\r
-    <total_tcn>119</total_tcn>\r
-    <pkg_name>common/tct-sessionhistory-html5-tests-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-datacontrol-tizen-tests" category="Tizen Web Device APIs">\r
-    <auto_tcn>115</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>115</total_tcn>\r
-    <pkg_name>common/tct-datacontrol-tizen-tests-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-events-cordova-tests" category="Cordova Plugin APIs">\r
-    <auto_tcn>8</auto_tcn>\r
-    <manual_tcn>6</manual_tcn>\r
-    <total_tcn>14</total_tcn>\r
-    <pkg_name>common/tct-events-cordova-tests-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-geodeny-w3c-tests" category="W3C/HTML5 APIs">\r
-    <auto_tcn>0</auto_tcn>\r
-    <manual_tcn>3</manual_tcn>\r
-    <total_tcn>3</total_tcn>\r
-    <pkg_name>common/tct-geodeny-w3c-tests-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-canvas-html5-tests" category="W3C/HTML5 APIs">\r
-    <auto_tcn>848</auto_tcn>\r
-    <manual_tcn>20</manual_tcn>\r
-    <total_tcn>868</total_tcn>\r
-    <pkg_name>common/tct-canvas-html5-tests-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-ui-css3-tests" category="W3C/HTML5 APIs">\r
-    <auto_tcn>40</auto_tcn>\r
-    <manual_tcn>1</manual_tcn>\r
-    <total_tcn>41</total_tcn>\r
-    <pkg_name>common/tct-ui-css3-tests-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-keymanager-tizen-tests" category="Tizen Web Device APIs">\r
-    <auto_tcn>39</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>39</total_tcn>\r
-    <pkg_name>common/tct-keymanager-tizen-tests-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-selectorslevel1-w3c-tests" category="W3C/HTML5 APIs">\r
-    <auto_tcn>24</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>24</total_tcn>\r
-    <pkg_name>common/tct-selectorslevel1-w3c-tests-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-sse-w3c-tests" category="W3C/HTML5 APIs">\r
-    <auto_tcn>66</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>66</total_tcn>\r
-    <pkg_name>common/tct-sse-w3c-tests-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-widgetpolicy-w3c-tests" category="W3C/HTML5 APIs">\r
-    <auto_tcn>0</auto_tcn>\r
-    <manual_tcn>22</manual_tcn>\r
-    <total_tcn>22</total_tcn>\r
-    <pkg_name>common/tct-widgetpolicy-w3c-tests-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-batterystatus-w3c-tests" category="W3C/HTML5 APIs">\r
-    <auto_tcn>25</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>25</total_tcn>\r
-    <pkg_name>common/tct-batterystatus-w3c-tests-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-systeminfo-tizen-tests" category="Tizen Web Device APIs">\r
-    <auto_tcn>279</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>279</total_tcn>\r
-    <pkg_name>tv/tct-systeminfo-tizen-tests-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-filesystem-tizen-tests" category="Tizen Web Device APIs">\r
-    <auto_tcn>287</auto_tcn>\r
-    <manual_tcn>3</manual_tcn>\r
-    <total_tcn>290</total_tcn>\r
-    <pkg_name>tv/tct-filesystem-tizen-tests-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-file-transfer-cordova-tests" category="Cordova Plugin APIs">\r
-    <auto_tcn>23</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>23</total_tcn>\r
-    <pkg_name>common/tct-file-transfer-cordova-tests-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-customelement-w3c-tests" category="W3C/HTML5 APIs">\r
-    <auto_tcn>10</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>10</total_tcn>\r
-    <pkg_name>common/tct-customelement-w3c-tests-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-device-cordova-tests" category="Cordova Plugin APIs">\r
-    <auto_tcn>7</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>7</total_tcn>\r
-    <pkg_name>common/tct-device-cordova-tests-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-beacon-w3c-tests" category="W3C/HTML5 APIs">\r
-    <auto_tcn>4</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>4</total_tcn>\r
-    <pkg_name>common/tct-beacon-w3c-tests-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-vibration-w3c-tests" category="W3C/HTML5 APIs">\r
-    <auto_tcn>1</auto_tcn>\r
-    <manual_tcn>1</manual_tcn>\r
-    <total_tcn>2</total_tcn>\r
-    <pkg_name>common/tct-vibration-w3c-tests-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-stab-wrt-tests" category="Tizen WRT Core Spec">\r
-    <auto_tcn>1</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>1</total_tcn>\r
-    <pkg_name>common/tct-stab-wrt-tests-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-text-css3-tests" category="W3C/HTML5 APIs">\r
-    <auto_tcn>34</auto_tcn>\r
-    <manual_tcn>3</manual_tcn>\r
-    <total_tcn>37</total_tcn>\r
-    <pkg_name>common/tct-text-css3-tests-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-webstorage-w3c-tests" category="W3C/HTML5 APIs">\r
-    <auto_tcn>195</auto_tcn>\r
-    <manual_tcn>5</manual_tcn>\r
-    <total_tcn>200</total_tcn>\r
-    <pkg_name>common/tct-webstorage-w3c-tests-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-download-tizen-tests" category="Tizen Web Device APIs">\r
-    <auto_tcn>62</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>62</total_tcn>\r
-    <pkg_name>common/tct-download-tizen-tests-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-mediaqueries-css3-tests" category="W3C/HTML5 APIs">\r
-    <auto_tcn>63</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>63</total_tcn>\r
-    <pkg_name>common/tct-mediaqueries-css3-tests-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-backgrounds-css3-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
-    <auto_tcn>541</auto_tcn>\r
-    <manual_tcn>74</manual_tcn>\r
-    <total_tcn>615</total_tcn>\r
-    <pkg_name>common/tct-backgrounds-css3-tests-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-video-html5-tests" category="W3C/HTML5 APIs">\r
-    <auto_tcn>197</auto_tcn>\r
-    <manual_tcn>3</manual_tcn>\r
-    <total_tcn>200</total_tcn>\r
-    <pkg_name>common/tct-video-html5-tests-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-pm-wrt-tests" category="Tizen WRT Core Spec">\r
-    <auto_tcn>24</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>24</total_tcn>\r
-    <pkg_name>common/tct-pm-wrt-tests-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-webgl-nonw3c-tests" category="Supplementary APIs">\r
-    <auto_tcn>910</auto_tcn>\r
-    <manual_tcn>1</manual_tcn>\r
-    <total_tcn>911</total_tcn>\r
-    <pkg_name>common/tct-webgl-nonw3c-tests-3.0.zip</pkg_name>\r
-  </suite>\r
-</ns3:testplan>\r
-\r
diff --git a/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/shell/plan/Web_Full_wearable_2.3.2.xml b/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/shell/plan/Web_Full_wearable_2.3.2.xml
deleted file mode 100755 (executable)
index a27c519..0000000
+++ /dev/null
@@ -1,569 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>\r
-<ns3:testplan xmlns:ns3="http://www.example.org/plan/" xmlns="" name="Web_Full_wearable_2.3.2" profile="wearable">\r
-  <execute_type>Auto</execute_type>\r
-  <suite name="tct-preference-tizen-tests" launcher="WRTLauncher" category="Tizen Web Device APIs">\r
-    <auto_tcn>43</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>43</total_tcn>\r
-    <pkg_name>wearable/tct-preference-tizen-tests-2.3.1.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-sp01-wrt-tests" launcher="WRTLauncher -iu" category="Web Runtime">\r
-    <auto_tcn>4</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>4</total_tcn>\r
-    <pkg_name>common/tct-sp01-wrt-tests-2.3.1.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-widget02-w3c-tests" category="W3C/HTML5 APIs">\r
-    <auto_tcn>68</auto_tcn>\r
-    <manual_tcn>63</manual_tcn>\r
-    <total_tcn>131</total_tcn>\r
-    <pkg_name>wearable/tct-widget02-w3c-tests-2.3.1.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-jsenhance-html5-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
-    <auto_tcn>49</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>49</total_tcn>\r
-    <pkg_name>common/tct-jsenhance-html5-tests-2.3.1.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-audio-html5-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
-    <auto_tcn>333</auto_tcn>\r
-    <manual_tcn>1</manual_tcn>\r
-    <total_tcn>334</total_tcn>\r
-    <pkg_name>common/tct-audio-html5-tests-2.3.1.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-sp02-wrt-tests" category="Web Runtime">\r
-    <auto_tcn>1</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>1</total_tcn>\r
-    <pkg_name>common/tct-sp02-wrt-tests-2.3.1.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-rt02-wrt-tests" category="Web Runtime">\r
-    <auto_tcn>3</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>3</total_tcn>\r
-    <pkg_name>common/tct-rt02-wrt-tests-2.3.1.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-sound-tizen-tests" launcher="WRTLauncher" category="Tizen Web Device APIs">\r
-    <auto_tcn>52</auto_tcn>\r
-    <manual_tcn>8</manual_tcn>\r
-    <total_tcn>60</total_tcn>\r
-    <pkg_name>common/tct-sound-tizen-tests-2.3.1.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-workers-w3c-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
-    <auto_tcn>85</auto_tcn>\r
-    <manual_tcn>1</manual_tcn>\r
-    <total_tcn>86</total_tcn>\r
-    <pkg_name>wearable/tct-workers-w3c-tests-2.3.1.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-ext02-wrt-tests" category="Web Runtime">\r
-    <auto_tcn>8</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>8</total_tcn>\r
-    <pkg_name>common/tct-ext02-wrt-tests-2.3.1.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-transitions-css3-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
-    <auto_tcn>26</auto_tcn>\r
-    <manual_tcn>5</manual_tcn>\r
-    <total_tcn>31</total_tcn>\r
-    <pkg_name>common/tct-transitions-css3-tests-2.3.1.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-namespace-tizen-tests" launcher="WRTLauncher" category="Tizen Web Device APIs">\r
-    <auto_tcn>22</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>22</total_tcn>\r
-    <pkg_name>wearable/tct-namespace-tizen-tests-2.3.1.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-application-tizen-tests" launcher="WRTLauncher" category="Tizen Web Device APIs">\r
-    <auto_tcn>162</auto_tcn>\r
-    <manual_tcn>6</manual_tcn>\r
-    <total_tcn>168</total_tcn>\r
-    <pkg_name>common/tct-application-tizen-tests-2.3.1.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-humanactivitymonitor-tizen-tests" launcher="WRTLauncher" category="Tizen Web Device APIs">\r
-    <auto_tcn>87</auto_tcn>\r
-    <manual_tcn>15</manual_tcn>\r
-    <total_tcn>102</total_tcn>\r
-    <pkg_name>common/tct-humanactivitymonitor-tizen-tests-2.3.1.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-bluetooth-tizen-tests" launcher="WRTLauncher" category="Tizen Web Device APIs">\r
-    <auto_tcn>257</auto_tcn>\r
-    <manual_tcn>142</manual_tcn>\r
-    <total_tcn>399</total_tcn>\r
-    <pkg_name>common/tct-bluetooth-tizen-tests-2.3.1.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-fonts-css3-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
-    <auto_tcn>11</auto_tcn>\r
-    <manual_tcn>131</manual_tcn>\r
-    <total_tcn>142</total_tcn>\r
-    <pkg_name>common/tct-fonts-css3-tests-2.3.1.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-speech-w3c-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
-    <auto_tcn>40</auto_tcn>\r
-    <manual_tcn>1</manual_tcn>\r
-    <total_tcn>41</total_tcn>\r
-    <pkg_name>common/tct-speech-w3c-tests-2.3.1.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-security-tcs-tests" launcher="WRTLauncher" category="Compliance">\r
-    <auto_tcn>3</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>3</total_tcn>\r
-    <pkg_name>common/tct-security-tcs-tests-2.3.1.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-ui01-wrt-tests" launcher="WRTLauncher -iu" category="Web Runtime">\r
-    <auto_tcn>11</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>11</total_tcn>\r
-    <pkg_name>wearable/tct-ui01-wrt-tests-2.3.1.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-animationtiming-w3c-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
-    <auto_tcn>11</auto_tcn>\r
-    <manual_tcn>7</manual_tcn>\r
-    <total_tcn>18</total_tcn>\r
-    <pkg_name>common/tct-animationtiming-w3c-tests-2.3.1.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-selectorslevel2-w3c-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
-    <auto_tcn>30</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>30</total_tcn>\r
-    <pkg_name>common/tct-selectorslevel2-w3c-tests-2.3.1.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-2dtransforms-css3-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
-    <auto_tcn>34</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>34</total_tcn>\r
-    <pkg_name>common/tct-2dtransforms-css3-tests-2.3.1.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-forms-html5-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
-    <auto_tcn>146</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>146</total_tcn>\r
-    <pkg_name>wearable/tct-forms-html5-tests-2.3.1.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-time-tizen-tests" launcher="WRTLauncher" category="Tizen Web Device APIs">\r
-    <auto_tcn>470</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>470</total_tcn>\r
-    <pkg_name>common/tct-time-tizen-tests-2.3.1.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-wgtapi01-w3c-tests" launcher="WRTLauncher -iu" category="W3C/HTML5 APIs">\r
-    <auto_tcn>107</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>107</total_tcn>\r
-    <pkg_name>common/tct-wgtapi01-w3c-tests-2.3.1.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-capability-tests" launcher="WRTLauncher" category="Compliance">\r
-    <auto_tcn>40</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>40</total_tcn>\r
-    <pkg_name>common/tct-capability-tests-2.3.1.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-fileapi-w3c-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
-    <auto_tcn>97</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>97</total_tcn>\r
-    <pkg_name>wearable/tct-fileapi-w3c-tests-2.3.1.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-ext01-wrt-tests" launcher="WRTLauncher -iu" category="Web Runtime">\r
-    <auto_tcn>2</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>2</total_tcn>\r
-    <pkg_name>wearable/tct-ext01-wrt-tests-2.3.1.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-mediacapture-w3c-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
-    <auto_tcn>7</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>7</total_tcn>\r
-    <pkg_name>common/tct-mediacapture-w3c-tests-2.3.1.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-exif-tizen-tests" launcher="WRTLauncher" category="Tizen Web Device APIs">\r
-    <auto_tcn>64</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>64</total_tcn>\r
-    <pkg_name>common/tct-exif-tizen-tests-2.3.1.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-csp-w3c-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
-    <auto_tcn>133</auto_tcn>\r
-    <manual_tcn>78</manual_tcn>\r
-    <total_tcn>211</total_tcn>\r
-    <pkg_name>common/tct-csp-w3c-tests-2.3.1.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-secureelement-tizen-tests" launcher="WRTLauncher" category="Tizen Web Device APIs">\r
-    <auto_tcn>71</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>71</total_tcn>\r
-    <pkg_name>common/tct-secureelement-tizen-tests-2.3.1.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-sensor-tizen-tests" launcher="WRTLauncher" category="Tizen Web Device APIs">\r
-    <auto_tcn>146</auto_tcn>\r
-    <manual_tcn>21</manual_tcn>\r
-    <total_tcn>167</total_tcn>\r
-    <pkg_name>common/tct-sensor-tizen-tests-2.3.1.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-privilege-wrt-tests" category="Web Runtime">\r
-    <auto_tcn>190</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>190</total_tcn>\r
-    <pkg_name>wearable/tct-privilege-wrt-tests-2.3.1.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-power-tizen-tests" launcher="WRTLauncher" category="Tizen Web Device APIs">\r
-    <auto_tcn>50</auto_tcn>\r
-    <manual_tcn>6</manual_tcn>\r
-    <total_tcn>56</total_tcn>\r
-    <pkg_name>common/tct-power-tizen-tests-2.3.1.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-appwgt-wrt-tests" category="Web Runtime">\r
-    <auto_tcn>7</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>7</total_tcn>\r
-    <pkg_name>common/tct-appwgt-wrt-tests-2.3.1.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-privilege-tizen-tests" launcher="WRTLauncher" category="Tizen Web Device APIs">\r
-    <auto_tcn>51</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>51</total_tcn>\r
-    <pkg_name>wearable/tct-privilege-tizen-tests-2.3.1.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-mediakey-tizen-tests" launcher="WRTLauncher" category="Tizen Web Device APIs">\r
-    <auto_tcn>11</auto_tcn>\r
-    <manual_tcn>4</manual_tcn>\r
-    <total_tcn>15</total_tcn>\r
-    <pkg_name>common/tct-mediakey-tizen-tests-2.3.1.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-alarm-tizen-tests" launcher="WRTLauncher" category="Tizen Web Device APIs">\r
-    <auto_tcn>61</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>61</total_tcn>\r
-    <pkg_name>common/tct-alarm-tizen-tests-2.3.1.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-touchevent-w3c-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
-    <auto_tcn>16</auto_tcn>\r
-    <manual_tcn>7</manual_tcn>\r
-    <total_tcn>23</total_tcn>\r
-    <pkg_name>common/tct-touchevent-w3c-tests-2.3.1.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-wgtapi02-w3c-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
-    <auto_tcn>0</auto_tcn>\r
-    <manual_tcn>34</manual_tcn>\r
-    <total_tcn>34</total_tcn>\r
-    <pkg_name>common/tct-wgtapi02-w3c-tests-2.3.1.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-deviceorientation-w3c-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
-    <auto_tcn>37</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>37</total_tcn>\r
-    <pkg_name>common/tct-deviceorientation-w3c-tests-2.3.1.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-archive-tizen-tests" launcher="WRTLauncher" category="Tizen Web Device APIs">\r
-    <auto_tcn>106</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>106</total_tcn>\r
-    <pkg_name>common/tct-archive-tizen-tests-2.3.1.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-webmessaging-w3c-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
-    <auto_tcn>175</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>175</total_tcn>\r
-    <pkg_name>wearable/tct-webmessaging-w3c-tests-2.3.1.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-package-tizen-tests" launcher="WRTLauncher" category="Tizen Web Device APIs">\r
-    <auto_tcn>54</auto_tcn>\r
-    <manual_tcn>12</manual_tcn>\r
-    <total_tcn>66</total_tcn>\r
-    <pkg_name>common/tct-package-tizen-tests-2.3.1.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-notification-tizen-tests" launcher="WRTLauncher" category="Tizen Web Device APIs">\r
-    <auto_tcn>85</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>85</total_tcn>\r
-    <pkg_name>common/tct-notification-tizen-tests-2.3.1.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-tizen-tizen-tests" launcher="WRTLauncher" category="Tizen Web Device APIs">\r
-    <auto_tcn>81</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>81</total_tcn>\r
-    <pkg_name>common/tct-tizen-tizen-tests-2.3.1.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-rt01-wrt-tests" launcher="WRTLauncher -iu" category="Web Runtime">\r
-    <auto_tcn>12</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>12</total_tcn>\r
-    <pkg_name>common/tct-rt01-wrt-tests-2.3.1.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-widget01-w3c-tests" launcher="WRTLauncher -iu" category="W3C/HTML5 APIs">\r
-    <auto_tcn>155</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>155</total_tcn>\r
-    <pkg_name>wearable/tct-widget01-w3c-tests-2.3.1.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-svg-html5-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
-    <auto_tcn>3</auto_tcn>\r
-    <manual_tcn>9</manual_tcn>\r
-    <total_tcn>12</total_tcn>\r
-    <pkg_name>common/tct-svg-html5-tests-2.3.1.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-3dtransforms-css3-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
-    <auto_tcn>32</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>32</total_tcn>\r
-    <pkg_name>common/tct-3dtransforms-css3-tests-2.3.1.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-geoallow-w3c-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
-    <auto_tcn>208</auto_tcn>\r
-    <manual_tcn>3</manual_tcn>\r
-    <total_tcn>211</total_tcn>\r
-    <pkg_name>common/tct-geoallow-w3c-tests-2.3.1.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-sessionhistory-html5-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
-    <auto_tcn>148</auto_tcn>\r
-    <manual_tcn>1</manual_tcn>\r
-    <total_tcn>149</total_tcn>\r
-    <pkg_name>common/tct-sessionhistory-html5-tests-2.3.1.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-websocket-w3c-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
-    <auto_tcn>268</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>268</total_tcn>\r
-    <pkg_name>wearable/tct-websocket-w3c-tests-2.3.1.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-flexiblebox-css3-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
-    <auto_tcn>25</auto_tcn>\r
-    <manual_tcn>28</manual_tcn>\r
-    <total_tcn>53</total_tcn>\r
-    <pkg_name>common/tct-flexiblebox-css3-tests-2.3.1.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-datacontrol-tizen-tests" launcher="WRTLauncher" category="Tizen Web Device APIs">\r
-    <auto_tcn>113</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>113</total_tcn>\r
-    <pkg_name>common/tct-datacontrol-tizen-tests-2.3.1.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-dnd-html5-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
-    <auto_tcn>6</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>6</total_tcn>\r
-    <pkg_name>common/tct-dnd-html5-tests-2.3.1.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-extra-html5-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
-    <auto_tcn>544</auto_tcn>\r
-    <manual_tcn>25</manual_tcn>\r
-    <total_tcn>569</total_tcn>\r
-    <pkg_name>wearable/tct-extra-html5-tests-2.3.1.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-geodeny-w3c-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
-    <auto_tcn>0</auto_tcn>\r
-    <manual_tcn>3</manual_tcn>\r
-    <total_tcn>3</total_tcn>\r
-    <pkg_name>common/tct-geodeny-w3c-tests-2.3.1.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-colors-css3-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
-    <auto_tcn>46</auto_tcn>\r
-    <manual_tcn>29</manual_tcn>\r
-    <total_tcn>75</total_tcn>\r
-    <pkg_name>common/tct-colors-css3-tests-2.3.1.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-indexeddb-w3c-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
-    <auto_tcn>391</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>391</total_tcn>\r
-    <pkg_name>wearable/tct-indexeddb-w3c-tests-2.3.1.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-sandbox-html5-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
-    <auto_tcn>72</auto_tcn>\r
-    <manual_tcn>1</manual_tcn>\r
-    <total_tcn>73</total_tcn>\r
-    <pkg_name>common/tct-sandbox-html5-tests-2.3.1.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-camera-nonw3c-tests" launcher="WRTLauncher" category="Supplementary APIs">\r
-    <auto_tcn>83</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>83</total_tcn>\r
-    <pkg_name>wearable/tct-camera-nonw3c-tests-2.3.1.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-ui-css3-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
-    <auto_tcn>43</auto_tcn>\r
-    <manual_tcn>1</manual_tcn>\r
-    <total_tcn>44</total_tcn>\r
-    <pkg_name>common/tct-ui-css3-tests-2.3.1.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-canvas-html5-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
-    <auto_tcn>846</auto_tcn>\r
-    <manual_tcn>19</manual_tcn>\r
-    <total_tcn>865</total_tcn>\r
-    <pkg_name>common/tct-canvas-html5-tests-2.3.1.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-messageport-tizen-tests" launcher="WRTLauncher" category="Tizen Web Device APIs">\r
-    <auto_tcn>48</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>48</total_tcn>\r
-    <pkg_name>common/tct-messageport-tizen-tests-2.3.1.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-push-tizen-tests" launcher="WRTLauncher" category="Tizen Web Device APIs">\r
-    <auto_tcn>41</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>41</total_tcn>\r
-    <pkg_name>common/tct-push-tizen-tests-2.3.1.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-selectorslevel1-w3c-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
-    <auto_tcn>78</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>78</total_tcn>\r
-    <pkg_name>common/tct-selectorslevel1-w3c-tests-2.3.1.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-widgetpolicy-w3c-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
-    <auto_tcn>0</auto_tcn>\r
-    <manual_tcn>34</manual_tcn>\r
-    <total_tcn>34</total_tcn>\r
-    <pkg_name>common/tct-widgetpolicy-w3c-tests-2.3.1.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-batterystatus-w3c-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
-    <auto_tcn>23</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>23</total_tcn>\r
-    <pkg_name>common/tct-batterystatus-w3c-tests-2.3.1.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-cors-w3c-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
-    <auto_tcn>10</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>10</total_tcn>\r
-    <pkg_name>common/tct-cors-w3c-tests-2.3.1.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-xmlhttprequest-w3c-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
-    <auto_tcn>202</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>202</total_tcn>\r
-    <pkg_name>wearable/tct-xmlhttprequest-w3c-tests-2.3.1.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-maxLength-wrt-tests" launcher="WRTLauncher -iu" category="Web Runtime">\r
-    <auto_tcn>14</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>14</total_tcn>\r
-    <pkg_name>common/tct-maxLength-wrt-tests-2.3.1.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-filesystem-tizen-tests" launcher="WRTLauncher" category="Tizen Web Device APIs">\r
-    <auto_tcn>301</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>301</total_tcn>\r
-    <pkg_name>wearable/tct-filesystem-tizen-tests-2.3.1.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-systeminfo-tizen-tests" launcher="WRTLauncher" category="Tizen Web Device APIs">\r
-    <auto_tcn>289</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>289</total_tcn>\r
-    <pkg_name>wearable/tct-systeminfo-tizen-tests-2.3.1.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-typedarrays-nonw3c-tests" launcher="WRTLauncher" category="Supplementary APIs">\r
-    <auto_tcn>80</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>80</total_tcn>\r
-    <pkg_name>common/tct-typedarrays-nonw3c-tests-2.3.1.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-animations-css3-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
-    <auto_tcn>24</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>24</total_tcn>\r
-    <pkg_name>common/tct-animations-css3-tests-2.3.1.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-badge-tizen-tests" launcher="WRTLauncher" category="Tizen Web Device APIs">\r
-    <auto_tcn>26</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>26</total_tcn>\r
-    <pkg_name>common/tct-badge-tizen-tests-2.3.1.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-nfc-tizen-tests" launcher="WRTLauncher" category="Tizen Web Device APIs">\r
-    <auto_tcn>194</auto_tcn>\r
-    <manual_tcn>36</manual_tcn>\r
-    <total_tcn>230</total_tcn>\r
-    <pkg_name>common/tct-nfc-tizen-tests-2.3.1.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-vibration-w3c-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
-    <auto_tcn>2</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>2</total_tcn>\r
-    <pkg_name>common/tct-vibration-w3c-tests-2.3.1.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-pagevisibility-w3c-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
-    <auto_tcn>18</auto_tcn>\r
-    <manual_tcn>2</manual_tcn>\r
-    <total_tcn>20</total_tcn>\r
-    <pkg_name>wearable/tct-pagevisibility-w3c-tests-2.3.1.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-stab-wrt-tests" category="Web Runtime">\r
-    <auto_tcn>1</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>1</total_tcn>\r
-    <pkg_name>common/tct-stab-wrt-tests-2.3.1.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-text-css3-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
-    <auto_tcn>27</auto_tcn>\r
-    <manual_tcn>15</manual_tcn>\r
-    <total_tcn>42</total_tcn>\r
-    <pkg_name>common/tct-text-css3-tests-2.3.1.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-webstorage-w3c-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
-    <auto_tcn>177</auto_tcn>\r
-    <manual_tcn>4</manual_tcn>\r
-    <total_tcn>181</total_tcn>\r
-    <pkg_name>common/tct-webstorage-w3c-tests-2.3.1.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-webuifw-tests" category="Web UI Framework">\r
-    <auto_tcn>524</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>524</total_tcn>\r
-    <pkg_name>wearable/tct-webuifw-tests-2.3.1.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-download-tizen-tests" launcher="WRTLauncher" category="Tizen Web Device APIs">\r
-    <auto_tcn>62</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>62</total_tcn>\r
-    <pkg_name>common/tct-download-tizen-tests-2.3.1.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-mediaqueries-css3-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
-    <auto_tcn>52</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>52</total_tcn>\r
-    <pkg_name>wearable/tct-mediaqueries-css3-tests-2.3.1.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-content-tizen-tests" launcher="WRTLauncher" category="Tizen Web Device APIs">\r
-    <auto_tcn>230</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>230</total_tcn>\r
-    <pkg_name>common/tct-content-tizen-tests-2.3.1.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-gumallow-w3c-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
-    <auto_tcn>6</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>6</total_tcn>\r
-    <pkg_name>common/tct-gumallow-w3c-tests-2.3.1.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-systemsetting-tizen-tests" launcher="WRTLauncher" category="Tizen Web Device APIs">\r
-    <auto_tcn>33</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>33</total_tcn>\r
-    <pkg_name>common/tct-systemsetting-tizen-tests-2.3.1.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-video-html5-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
-    <auto_tcn>361</auto_tcn>\r
-    <manual_tcn>4</manual_tcn>\r
-    <total_tcn>365</total_tcn>\r
-    <pkg_name>wearable/tct-video-html5-tests-2.3.1.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-backgrounds-css3-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
-    <auto_tcn>541</auto_tcn>\r
-    <manual_tcn>74</manual_tcn>\r
-    <total_tcn>615</total_tcn>\r
-    <pkg_name>wearable/tct-backgrounds-css3-tests-2.3.1.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-pm-wrt-tests" category="Web Runtime">\r
-    <auto_tcn>24</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>24</total_tcn>\r
-    <pkg_name>common/tct-pm-wrt-tests-2.3.1.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-webgl-nonw3c-tests" launcher="WRTLauncher" category="Supplementary APIs">\r
-    <auto_tcn>889</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>889</total_tcn>\r
-    <pkg_name>common/tct-webgl-nonw3c-tests-2.3.1.zip</pkg_name>\r
-  </suite>\r
-</ns3:testplan>\r
-\r
diff --git a/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/shell/plan/Web_Full_wearable_3.0.xml b/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/shell/plan/Web_Full_wearable_3.0.xml
deleted file mode 100755 (executable)
index 47d2985..0000000
+++ /dev/null
@@ -1,724 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>\r
-<ns3:testplan xmlns:ns3="http://www.example.org/plan/" xmlns="" name="Web_Full_wearable_3.0" profile="wearable">\r
-  <execute_type>Auto</execute_type>\r
-  <suite name="tct-jsenhance-html5-tests" category="W3C/HTML5 APIs">\r
-    <auto_tcn>7</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>7</total_tcn>\r
-    <pkg_name>common/tct-jsenhance-html5-tests-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-multicolumn-css3-tests" category="W3C/HTML5 APIs">\r
-    <auto_tcn>136</auto_tcn>\r
-    <manual_tcn>18</manual_tcn>\r
-    <total_tcn>154</total_tcn>\r
-    <pkg_name>common/tct-multicolumn-css3-tests-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-devicemotion-cordova-tests" category="Cordova Plugin APIs">\r
-    <auto_tcn>18</auto_tcn>\r
-    <manual_tcn>1</manual_tcn>\r
-    <total_tcn>19</total_tcn>\r
-    <pkg_name>common/tct-devicemotion-cordova-tests-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-workers-w3c-tests" category="W3C/HTML5 APIs">\r
-    <auto_tcn>77</auto_tcn>\r
-    <manual_tcn>1</manual_tcn>\r
-    <total_tcn>78</total_tcn>\r
-    <pkg_name>common/tct-workers-w3c-tests-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-transitions-css3-tests" category="W3C/HTML5 APIs">\r
-    <auto_tcn>9</auto_tcn>\r
-    <manual_tcn>6</manual_tcn>\r
-    <total_tcn>15</total_tcn>\r
-    <pkg_name>common/tct-transitions-css3-tests-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-namespace-tizen-tests" category="Tizen Web Device APIs">\r
-    <auto_tcn>33</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>33</total_tcn>\r
-    <pkg_name>wearable/tct-namespace-tizen-tests-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-network-information-cordova-tests" category="Cordova Plugin APIs">\r
-    <auto_tcn>10</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>10</total_tcn>\r
-    <pkg_name>common/tct-network-information-cordova-tests-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-crypto-w3c-tests" category="W3C/HTML5 APIs">\r
-    <auto_tcn>78</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>78</total_tcn>\r
-    <pkg_name>common/tct-crypto-w3c-tests-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-2dtransforms-css3-tests" category="W3C/HTML5 APIs">\r
-    <auto_tcn>36</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>36</total_tcn>\r
-    <pkg_name>common/tct-2dtransforms-css3-tests-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-dialogs-cordova-tests" category="Cordova Plugin APIs">\r
-    <auto_tcn>13</auto_tcn>\r
-    <manual_tcn>9</manual_tcn>\r
-    <total_tcn>22</total_tcn>\r
-    <pkg_name>common/tct-dialogs-cordova-tests-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-time-tizen-tests" category="Tizen Web Device APIs">\r
-    <auto_tcn>470</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>470</total_tcn>\r
-    <pkg_name>wearable/tct-time-tizen-tests-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-forms-html5-tests" category="W3C/HTML5 APIs">\r
-    <auto_tcn>49</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>49</total_tcn>\r
-    <pkg_name>common/tct-forms-html5-tests-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-capability-tests" category="Compliance">\r
-    <auto_tcn>15</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>15</total_tcn>\r
-    <pkg_name>common/tct-capability-tests-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-fileapi-w3c-tests" category="W3C/HTML5 APIs">\r
-    <auto_tcn>33</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>33</total_tcn>\r
-    <pkg_name>common/tct-fileapi-w3c-tests-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-ext01-wrt-tests" category="Tizen WRT Core Spec">\r
-    <auto_tcn>3</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>3</total_tcn>\r
-    <pkg_name>wearable/tct-ext01-wrt-tests-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-mediacapture-w3c-tests" category="W3C/HTML5 APIs">\r
-    <auto_tcn>6</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>6</total_tcn>\r
-    <pkg_name>common/tct-mediacapture-w3c-tests-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-exif-tizen-tests" category="Tizen Web Device APIs">\r
-    <auto_tcn>64</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>64</total_tcn>\r
-    <pkg_name>common/tct-exif-tizen-tests-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-csp-w3c-tests" category="W3C/HTML5 APIs">\r
-    <auto_tcn>137</auto_tcn>\r
-    <manual_tcn>83</manual_tcn>\r
-    <total_tcn>220</total_tcn>\r
-    <pkg_name>common/tct-csp-w3c-tests-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-privilege-wrt-tests" category="Tizen WRT Core Spec">\r
-    <auto_tcn>188</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>188</total_tcn>\r
-    <pkg_name>wearable/tct-privilege-wrt-tests-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-mediakey-tizen-tests" category="Tizen Web Device APIs">\r
-    <auto_tcn>11</auto_tcn>\r
-    <manual_tcn>4</manual_tcn>\r
-    <total_tcn>15</total_tcn>\r
-    <pkg_name>wearable/tct-mediakey-tizen-tests-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-media-cordova-tests" category="Cordova Plugin APIs">\r
-    <auto_tcn>52</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>52</total_tcn>\r
-    <pkg_name>common/tct-media-cordova-tests-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-deviceorientation-w3c-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
-    <auto_tcn>37</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>37</total_tcn>\r
-    <pkg_name>wearable/tct-deviceorientation-w3c-tests-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-webmessaging-w3c-tests" category="W3C/HTML5 APIs">\r
-    <auto_tcn>175</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>175</total_tcn>\r
-    <pkg_name>common/tct-webmessaging-w3c-tests-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-package-tizen-tests" category="Tizen Web Device APIs">\r
-    <auto_tcn>54</auto_tcn>\r
-    <manual_tcn>12</manual_tcn>\r
-    <total_tcn>66</total_tcn>\r
-    <pkg_name>common/tct-package-tizen-tests-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-file-cordova-tests" category="Cordova Plugin APIs">\r
-    <auto_tcn>172</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>172</total_tcn>\r
-    <pkg_name>common/tct-file-cordova-tests-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-template-w3c-tests" category="W3C/HTML5 APIs">\r
-    <auto_tcn>1</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>1</total_tcn>\r
-    <pkg_name>common/tct-template-w3c-tests-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-notification-tizen-tests" category="Tizen Web Device APIs">\r
-    <auto_tcn>96</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>96</total_tcn>\r
-    <pkg_name>common/tct-notification-tizen-tests-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-rt01-wrt-tests" category="Tizen WRT Core Spec">\r
-    <auto_tcn>12</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>12</total_tcn>\r
-    <pkg_name>common/tct-rt01-wrt-tests-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-appcache-html5-tests" category="W3C/HTML5 APIs">\r
-    <auto_tcn>26</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>26</total_tcn>\r
-    <pkg_name>common/tct-appcache-html5-tests-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-svg-html5-tests" category="W3C/HTML5 APIs">\r
-    <auto_tcn>43</auto_tcn>\r
-    <manual_tcn>14</manual_tcn>\r
-    <total_tcn>57</total_tcn>\r
-    <pkg_name>common/tct-svg-html5-tests-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-websocket-w3c-tests" category="W3C/HTML5 APIs">\r
-    <auto_tcn>266</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>266</total_tcn>\r
-    <pkg_name>common/tct-websocket-w3c-tests-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-flexiblebox-css3-tests" category="W3C/HTML5 APIs">\r
-    <auto_tcn>14</auto_tcn>\r
-    <manual_tcn>14</manual_tcn>\r
-    <total_tcn>28</total_tcn>\r
-    <pkg_name>common/tct-flexiblebox-css3-tests-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-dnd-html5-tests" category="W3C/HTML5 APIs">\r
-    <auto_tcn>6</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>6</total_tcn>\r
-    <pkg_name>common/tct-dnd-html5-tests-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-extra-html5-tests" category="W3C/HTML5 APIs">\r
-    <auto_tcn>548</auto_tcn>\r
-    <manual_tcn>25</manual_tcn>\r
-    <total_tcn>573</total_tcn>\r
-    <pkg_name>common/tct-extra-html5-tests-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-fullscreen-nonw3c-tests" category="Supplementary APIs">\r
-    <auto_tcn>20</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>20</total_tcn>\r
-    <pkg_name>common/tct-fullscreen-nonw3c-tests-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-colors-css3-tests" category="W3C/HTML5 APIs">\r
-    <auto_tcn>46</auto_tcn>\r
-    <manual_tcn>29</manual_tcn>\r
-    <total_tcn>75</total_tcn>\r
-    <pkg_name>common/tct-colors-css3-tests-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-indexeddb-w3c-tests" category="W3C/HTML5 APIs">\r
-    <auto_tcn>343</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>343</total_tcn>\r
-    <pkg_name>common/tct-indexeddb-w3c-tests-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-sandbox-html5-tests" category="W3C/HTML5 APIs">\r
-    <auto_tcn>45</auto_tcn>\r
-    <manual_tcn>1</manual_tcn>\r
-    <total_tcn>46</total_tcn>\r
-    <pkg_name>common/tct-sandbox-html5-tests-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-messageport-tizen-tests" category="Tizen Web Device APIs">\r
-    <auto_tcn>51</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>51</total_tcn>\r
-    <pkg_name>common/tct-messageport-tizen-tests-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-push-tizen-tests" category="Tizen Web Device APIs">\r
-    <auto_tcn>45</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>45</total_tcn>\r
-    <pkg_name>wearable/tct-push-tizen-tests-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-browserstate-html5-tests" category="W3C/HTML5 APIs">\r
-    <auto_tcn>3</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>3</total_tcn>\r
-    <pkg_name>common/tct-browserstate-html5-tests-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-cors-w3c-tests" category="W3C/HTML5 APIs">\r
-    <auto_tcn>10</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>10</total_tcn>\r
-    <pkg_name>common/tct-cors-w3c-tests-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-xmlhttprequest-w3c-tests" category="W3C/HTML5 APIs">\r
-    <auto_tcn>212</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>212</total_tcn>\r
-    <pkg_name>common/tct-xmlhttprequest-w3c-tests-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-navigationtiming-w3c-tests" category="W3C/HTML5 APIs">\r
-    <auto_tcn>82</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>82</total_tcn>\r
-    <pkg_name>common/tct-navigationtiming-w3c-tests-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-typedarrays-nonw3c-tests" category="Supplementary APIs">\r
-    <auto_tcn>446</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>446</total_tcn>\r
-    <pkg_name>common/tct-typedarrays-nonw3c-tests-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-animations-css3-tests" category="W3C/HTML5 APIs">\r
-    <auto_tcn>25</auto_tcn>\r
-    <manual_tcn>1</manual_tcn>\r
-    <total_tcn>26</total_tcn>\r
-    <pkg_name>common/tct-animations-css3-tests-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-badge-tizen-tests" category="Tizen Web Device APIs">\r
-    <auto_tcn>26</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>26</total_tcn>\r
-    <pkg_name>wearable/tct-badge-tizen-tests-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-nfc-tizen-tests" launcher="WRTLauncher" category="Tizen Web Device APIs">\r
-    <auto_tcn>195</auto_tcn>\r
-    <manual_tcn>35</manual_tcn>\r
-    <total_tcn>230</total_tcn>\r
-    <pkg_name>wearable/tct-nfc-tizen-tests-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-pagevisibility-w3c-tests" category="W3C/HTML5 APIs">\r
-    <auto_tcn>18</auto_tcn>\r
-    <manual_tcn>2</manual_tcn>\r
-    <total_tcn>20</total_tcn>\r
-    <pkg_name>common/tct-pagevisibility-w3c-tests-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-ResponsiveImage-w3c-tests" category="Tizen W3C APIs">\r
-    <auto_tcn>32</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>32</total_tcn>\r
-    <pkg_name>common/tct-ResponsiveImage-w3c-tests-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-content-tizen-tests" category="Tizen Web Device APIs">\r
-    <auto_tcn>245</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>245</total_tcn>\r
-    <pkg_name>common/tct-content-tizen-tests-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-gumallow-w3c-tests" category="W3C/HTML5 APIs">\r
-    <auto_tcn>6</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>6</total_tcn>\r
-    <pkg_name>common/tct-gumallow-w3c-tests-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-notification-w3c-tests" category="W3C/HTML5 APIs">\r
-    <auto_tcn>39</auto_tcn>\r
-    <manual_tcn>3</manual_tcn>\r
-    <total_tcn>42</total_tcn>\r
-    <pkg_name>wearable/tct-notification-w3c-tests-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-serviceworkers-w3c-tests" category="W3C/HTML5 APIs">\r
-    <auto_tcn>107</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>107</total_tcn>\r
-    <pkg_name>common/tct-serviceworkers-w3c-tests-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-preference-tizen-tests" category="Tizen Web Device APIs">\r
-    <auto_tcn>45</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>45</total_tcn>\r
-    <pkg_name>wearable/tct-preference-tizen-tests-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-globalization-cordova-tests" category="Cordova Plugin APIs">\r
-    <auto_tcn>106</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>106</total_tcn>\r
-    <pkg_name>common/tct-globalization-cordova-tests-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-sp01-wrt-tests" category="Tizen WRT Core Spec">\r
-    <auto_tcn>4</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>4</total_tcn>\r
-    <pkg_name>common/tct-sp01-wrt-tests-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-widget02-w3c-tests" category="W3C/HTML5 APIs">\r
-    <auto_tcn>68</auto_tcn>\r
-    <manual_tcn>75</manual_tcn>\r
-    <total_tcn>143</total_tcn>\r
-    <pkg_name>wearable/tct-widget02-w3c-tests-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-audio-html5-tests" category="W3C/HTML5 APIs">\r
-    <auto_tcn>152</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>152</total_tcn>\r
-    <pkg_name>common/tct-audio-html5-tests-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-import-w3c-tests" category="W3C/HTML5 APIs">\r
-    <auto_tcn>1</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>1</total_tcn>\r
-    <pkg_name>common/tct-import-w3c-tests-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-screenorientation-w3c-tests" category="W3C/HTML5 APIs">\r
-    <auto_tcn>14</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>14</total_tcn>\r
-    <pkg_name>common/tct-screenorientation-w3c-tests-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-rt02-wrt-tests" category="Tizen WRT Core Spec">\r
-    <auto_tcn>3</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>3</total_tcn>\r
-    <pkg_name>common/tct-rt02-wrt-tests-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-sp02-wrt-tests" category="Tizen WRT Core Spec">\r
-    <auto_tcn>1</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>1</total_tcn>\r
-    <pkg_name>common/tct-sp02-wrt-tests-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-sound-tizen-tests" category="Tizen Web Device APIs">\r
-    <auto_tcn>52</auto_tcn>\r
-    <manual_tcn>8</manual_tcn>\r
-    <total_tcn>60</total_tcn>\r
-    <pkg_name>wearable/tct-sound-tizen-tests-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-ext02-wrt-tests" category="Tizen WRT Core Spec">\r
-    <auto_tcn>8</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>8</total_tcn>\r
-    <pkg_name>common/tct-ext02-wrt-tests-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-application-tizen-tests" category="Tizen Web Device APIs">\r
-    <auto_tcn>159</auto_tcn>\r
-    <manual_tcn>6</manual_tcn>\r
-    <total_tcn>165</total_tcn>\r
-    <pkg_name>wearable/tct-application-tizen-tests-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-humanactivitymonitor-tizen-tests" category="Tizen Web Device APIs">\r
-    <auto_tcn>87</auto_tcn>\r
-    <manual_tcn>15</manual_tcn>\r
-    <total_tcn>102</total_tcn>\r
-    <pkg_name>common/tct-humanactivitymonitor-tizen-tests-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-bluetooth-tizen-tests" category="Tizen Web Device APIs">\r
-    <auto_tcn>255</auto_tcn>\r
-    <manual_tcn>145</manual_tcn>\r
-    <total_tcn>400</total_tcn>\r
-    <pkg_name>wearable/tct-bluetooth-tizen-tests-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-fonts-css3-tests" category="W3C/HTML5 APIs">\r
-    <auto_tcn>12</auto_tcn>\r
-    <manual_tcn>131</manual_tcn>\r
-    <total_tcn>143</total_tcn>\r
-    <pkg_name>common/tct-fonts-css3-tests-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-speech-w3c-tests" category="W3C/HTML5 APIs">\r
-    <auto_tcn>87</auto_tcn>\r
-    <manual_tcn>4</manual_tcn>\r
-    <total_tcn>91</total_tcn>\r
-    <pkg_name>common/tct-speech-w3c-tests-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-security-tcs-tests" launcher="WRTLauncher" category="Compliance">\r
-    <auto_tcn>3</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>3</total_tcn>\r
-    <pkg_name>common/tct-security-tcs-tests-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-ui01-wrt-tests" category="Tizen WRT Core Spec">\r
-    <auto_tcn>11</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>11</total_tcn>\r
-    <pkg_name>wearable/tct-ui01-wrt-tests-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-animationtiming-w3c-tests" category="W3C/HTML5 APIs">\r
-    <auto_tcn>11</auto_tcn>\r
-    <manual_tcn>7</manual_tcn>\r
-    <total_tcn>18</total_tcn>\r
-    <pkg_name>common/tct-animationtiming-w3c-tests-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-selectorslevel2-w3c-tests" category="W3C/HTML5 APIs">\r
-    <auto_tcn>22</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>22</total_tcn>\r
-    <pkg_name>common/tct-selectorslevel2-w3c-tests-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-wgtapi01-w3c-tests" category="W3C/HTML5 APIs">\r
-    <auto_tcn>107</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>107</total_tcn>\r
-    <pkg_name>common/tct-wgtapi01-w3c-tests-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-webaudio-w3c-tests" category="W3C/HTML5 APIs">\r
-    <auto_tcn>257</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>257</total_tcn>\r
-    <pkg_name>common/tct-webaudio-w3c-tests-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-inputdevice-tizen-tests" category="Tizen Web Device APIs">\r
-    <auto_tcn>30</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>30</total_tcn>\r
-    <pkg_name>wearable/tct-inputdevice-tizen-tests-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-secureelement-tizen-tests" category="Tizen Web Device APIs">\r
-    <auto_tcn>101</auto_tcn>\r
-    <manual_tcn>1</manual_tcn>\r
-    <total_tcn>102</total_tcn>\r
-    <pkg_name>wearable/tct-secureelement-tizen-tests-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-sensor-tizen-tests" category="Tizen Web Device APIs">\r
-    <auto_tcn>166</auto_tcn>\r
-    <manual_tcn>21</manual_tcn>\r
-    <total_tcn>187</total_tcn>\r
-    <pkg_name>wearable/tct-sensor-tizen-tests-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-power-tizen-tests" category="Tizen Web Device APIs">\r
-    <auto_tcn>50</auto_tcn>\r
-    <manual_tcn>6</manual_tcn>\r
-    <total_tcn>56</total_tcn>\r
-    <pkg_name>wearable/tct-power-tizen-tests-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-privilege-tizen-tests" category="Tizen Web Device APIs">\r
-    <auto_tcn>71</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>71</total_tcn>\r
-    <pkg_name>common/tct-privilege-tizen-tests-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-alarm-tizen-tests" category="Tizen Web Device APIs">\r
-    <auto_tcn>60</auto_tcn>\r
-    <manual_tcn>1</manual_tcn>\r
-    <total_tcn>61</total_tcn>\r
-    <pkg_name>common/tct-alarm-tizen-tests-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-touchevent-w3c-tests" category="W3C/HTML5 APIs">\r
-    <auto_tcn>12</auto_tcn>\r
-    <manual_tcn>7</manual_tcn>\r
-    <total_tcn>19</total_tcn>\r
-    <pkg_name>common/tct-touchevent-w3c-tests-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-woff-w3c-tests" category="W3C/HTML5 APIs">\r
-    <auto_tcn>0</auto_tcn>\r
-    <manual_tcn>22</manual_tcn>\r
-    <total_tcn>22</total_tcn>\r
-    <pkg_name>common/tct-woff-w3c-tests-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-wgtapi02-w3c-tests" category="W3C/HTML5 APIs">\r
-    <auto_tcn>0</auto_tcn>\r
-    <manual_tcn>34</manual_tcn>\r
-    <total_tcn>34</total_tcn>\r
-    <pkg_name>common/tct-wgtapi02-w3c-tests-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-archive-tizen-tests" category="Tizen Web Device APIs">\r
-    <auto_tcn>106</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>106</total_tcn>\r
-    <pkg_name>common/tct-archive-tizen-tests-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-tizen-tizen-tests" category="Tizen Web Device APIs">\r
-    <auto_tcn>81</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>81</total_tcn>\r
-    <pkg_name>common/tct-tizen-tizen-tests-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-widget01-w3c-tests" category="W3C/HTML5 APIs">\r
-    <auto_tcn>155</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>155</total_tcn>\r
-    <pkg_name>common/tct-widget01-w3c-tests-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-3dtransforms-css3-tests" category="W3C/HTML5 APIs">\r
-    <auto_tcn>32</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>32</total_tcn>\r
-    <pkg_name>common/tct-3dtransforms-css3-tests-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-geoallow-w3c-tests" category="W3C/HTML5 APIs">\r
-    <auto_tcn>209</auto_tcn>\r
-    <manual_tcn>3</manual_tcn>\r
-    <total_tcn>212</total_tcn>\r
-    <pkg_name>common/tct-geoallow-w3c-tests-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-sessionhistory-html5-tests" category="W3C/HTML5 APIs">\r
-    <auto_tcn>117</auto_tcn>\r
-    <manual_tcn>2</manual_tcn>\r
-    <total_tcn>119</total_tcn>\r
-    <pkg_name>common/tct-sessionhistory-html5-tests-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-datacontrol-tizen-tests" category="Tizen Web Device APIs">\r
-    <auto_tcn>115</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>115</total_tcn>\r
-    <pkg_name>common/tct-datacontrol-tizen-tests-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-events-cordova-tests" category="Cordova Plugin APIs">\r
-    <auto_tcn>1</auto_tcn>\r
-    <manual_tcn>6</manual_tcn>\r
-    <total_tcn>7</total_tcn>\r
-    <pkg_name>common/tct-events-cordova-tests-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-geodeny-w3c-tests" category="W3C/HTML5 APIs">\r
-    <auto_tcn>0</auto_tcn>\r
-    <manual_tcn>3</manual_tcn>\r
-    <total_tcn>3</total_tcn>\r
-    <pkg_name>common/tct-geodeny-w3c-tests-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-ui-css3-tests" category="W3C/HTML5 APIs">\r
-    <auto_tcn>40</auto_tcn>\r
-    <manual_tcn>1</manual_tcn>\r
-    <total_tcn>41</total_tcn>\r
-    <pkg_name>common/tct-ui-css3-tests-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-canvas-html5-tests" category="W3C/HTML5 APIs">\r
-    <auto_tcn>848</auto_tcn>\r
-    <manual_tcn>20</manual_tcn>\r
-    <total_tcn>868</total_tcn>\r
-    <pkg_name>common/tct-canvas-html5-tests-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-keymanager-tizen-tests" category="Tizen Web Device APIs">\r
-    <auto_tcn>39</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>39</total_tcn>\r
-    <pkg_name>common/tct-keymanager-tizen-tests-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-selectorslevel1-w3c-tests" category="W3C/HTML5 APIs">\r
-    <auto_tcn>24</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>24</total_tcn>\r
-    <pkg_name>common/tct-selectorslevel1-w3c-tests-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-sse-w3c-tests" category="W3C/HTML5 APIs">\r
-    <auto_tcn>66</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>66</total_tcn>\r
-    <pkg_name>common/tct-sse-w3c-tests-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-widgetpolicy-w3c-tests" category="W3C/HTML5 APIs">\r
-    <auto_tcn>0</auto_tcn>\r
-    <manual_tcn>22</manual_tcn>\r
-    <total_tcn>22</total_tcn>\r
-    <pkg_name>common/tct-widgetpolicy-w3c-tests-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-batterystatus-w3c-tests" category="W3C/HTML5 APIs">\r
-    <auto_tcn>25</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>25</total_tcn>\r
-    <pkg_name>common/tct-batterystatus-w3c-tests-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-mediacontroller-tizen-tests" category="Tizen Web Device APIs">\r
-    <auto_tcn>162</auto_tcn>\r
-    <manual_tcn>3</manual_tcn>\r
-    <total_tcn>165</total_tcn>\r
-    <pkg_name>wearable/tct-mediacontroller-tizen-tests-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-filesystem-tizen-tests" category="Tizen Web Device APIs">\r
-    <auto_tcn>289</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>289</total_tcn>\r
-    <pkg_name>wearable/tct-filesystem-tizen-tests-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-systeminfo-tizen-tests" category="Tizen Web Device APIs">\r
-    <auto_tcn>293</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>293</total_tcn>\r
-    <pkg_name>wearable/tct-systeminfo-tizen-tests-3.0.zip</pkg_name>\r
-  </suite>\r
- <suite name="tct-feedback-tizen-tests" category="Tizen Web Device APIs">\r
-    <auto_tcn>15</auto_tcn>\r
-    <manual_tcn>3</manual_tcn>\r
-    <total_tcn>18</total_tcn>\r
-    <pkg_name>wearable/tct-feedback-tizen-tests-3.0.zip</pkg_name>\r
-  </suite>  <suite name="tct-file-transfer-cordova-tests" category="Cordova Plugin APIs">\r
-    <auto_tcn>23</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>23</total_tcn>\r
-    <pkg_name>common/tct-file-transfer-cordova-tests-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-customelement-w3c-tests" category="W3C/HTML5 APIs">\r
-    <auto_tcn>10</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>10</total_tcn>\r
-    <pkg_name>common/tct-customelement-w3c-tests-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-device-cordova-tests" category="Cordova Plugin APIs">\r
-    <auto_tcn>7</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>7</total_tcn>\r
-    <pkg_name>common/tct-device-cordova-tests-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-beacon-w3c-tests" category="W3C/HTML5 APIs">\r
-    <auto_tcn>4</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>4</total_tcn>\r
-    <pkg_name>common/tct-beacon-w3c-tests-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-vibration-w3c-tests" category="W3C/HTML5 APIs">\r
-    <auto_tcn>1</auto_tcn>\r
-    <manual_tcn>1</manual_tcn>\r
-    <total_tcn>2</total_tcn>\r
-    <pkg_name>common/tct-vibration-w3c-tests-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-text-css3-tests" category="W3C/HTML5 APIs">\r
-    <auto_tcn>34</auto_tcn>\r
-    <manual_tcn>3</manual_tcn>\r
-    <total_tcn>37</total_tcn>\r
-    <pkg_name>common/tct-text-css3-tests-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-stab-wrt-tests" category="Tizen WRT Core Spec">\r
-    <auto_tcn>1</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>1</total_tcn>\r
-    <pkg_name>common/tct-stab-wrt-tests-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-webstorage-w3c-tests" category="W3C/HTML5 APIs">\r
-    <auto_tcn>195</auto_tcn>\r
-    <manual_tcn>5</manual_tcn>\r
-    <total_tcn>200</total_tcn>\r
-    <pkg_name>common/tct-webstorage-w3c-tests-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-download-tizen-tests" category="Tizen Web Device APIs">\r
-    <auto_tcn>62</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>62</total_tcn>\r
-    <pkg_name>common/tct-download-tizen-tests-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-mediaqueries-css3-tests" category="W3C/HTML5 APIs">\r
-    <auto_tcn>63</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>63</total_tcn>\r
-    <pkg_name>common/tct-mediaqueries-css3-tests-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-systemsetting-tizen-tests" category="Tizen Web Device APIs">\r
-    <auto_tcn>33</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>33</total_tcn>\r
-    <pkg_name>wearable/tct-systemsetting-tizen-tests-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-video-html5-tests" category="W3C/HTML5 APIs">\r
-    <auto_tcn>197</auto_tcn>\r
-    <manual_tcn>3</manual_tcn>\r
-    <total_tcn>200</total_tcn>\r
-    <pkg_name>common/tct-video-html5-tests-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-backgrounds-css3-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
-    <auto_tcn>541</auto_tcn>\r
-    <manual_tcn>74</manual_tcn>\r
-    <total_tcn>615</total_tcn>\r
-    <pkg_name>common/tct-backgrounds-css3-tests-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-pm-wrt-tests" category="Tizen WRT Core Spec">\r
-    <auto_tcn>24</auto_tcn>\r
-    <manual_tcn>0</manual_tcn>\r
-    <total_tcn>24</total_tcn>\r
-    <pkg_name>common/tct-pm-wrt-tests-3.0.zip</pkg_name>\r
-  </suite>\r
-  <suite name="tct-webgl-nonw3c-tests" category="Supplementary APIs">\r
-    <auto_tcn>910</auto_tcn>\r
-    <manual_tcn>1</manual_tcn>\r
-    <total_tcn>911</total_tcn>\r
-    <pkg_name>common/tct-webgl-nonw3c-tests-3.0.zip</pkg_name>\r
-  </suite>\r
-</ns3:testplan>\r
-\r
diff --git a/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/shell/setup.py b/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/shell/setup.py
deleted file mode 100755 (executable)
index 46752a8..0000000
+++ /dev/null
@@ -1,19 +0,0 @@
-#!/usr/bin/python
-
-from glob import glob
-
-from setuptools import setup, find_packages
-
-setup(
-    name = "tct-shell",
-    description = "Console tool for Tizen Compliance Test",
-    author = "Cathy Shen",
-    author_email = "daniel.tao@intel.com",
-    version = "1.0.16",
-    include_package_data = True,
-    data_files = [('/opt/tools/shell/plan', glob('plan/*')),
-                  ('/opt/tools/shell/', ['CONFIG', 'LICENSE', 'VERSION']),
-                  ('/opt/tools/shell/style', glob('style/*')),
-                  ('/opt/tools/', ['tct-shell', 'tct-plan-generator'])],
-    packages = find_packages(),
-)
diff --git a/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/shell/sltLeader21.properties b/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/shell/sltLeader21.properties
deleted file mode 100755 (executable)
index 43251a0..0000000
+++ /dev/null
@@ -1,116 +0,0 @@
-globals = com.arne.GlobalLogics$ServerLifeCycle\r
-\r
-server.host = 182.254.132.122\r
-server.port = 8080\r
-\r
-platform.imgUrlPattern = http://182.254.132.122/imgStorage/%s\r
-platform.servlet.imgStorage = {"class":"com.arne.basedevss.base.sfs.local.LocalSFS", "args":{"dir":"/home/leader21/sltLeader21/leader21/imgStorage"}}\r
-platform.bookUrlPattern = http://182.254.132.122/bookStorage/%s\r
-platform.servlet.bookStorage = {"class":"com.arne.basedevss.base.sfs.local.LocalSFS", "args":{"dir":"/home/leader21/sltLeader21/leader21/bookStorage"}}\r
-platform.bookImgUrlPattern = http://182.254.132.122/bookImgStorage/%s\r
-platform.servlet.bookImgStorage = {"class":"com.arne.basedevss.base.sfs.local.LocalSFS", "args":{"dir":"/home/leader21/sltLeader21/leader21/bookImgStorage"}}\r
-platform.appUrlPattern = http://182.254.132.122/appStorage/%s\r
-platform.servlet.appStorage = {"class":"com.arne.basedevss.base.sfs.local.LocalSFS", "args":{"dir":"/home/leader21/sltLeader21/leader21/appStorage"}}\r
-platform.appTestUrlPattern = http://182.254.132.122/appTestStorage/%s\r
-platform.servlet.appTestStorage = {"class":"com.arne.basedevss.base.sfs.local.LocalSFS", "args":{"dir":"/home/leader21/sltLeader21/leader21/appTestStorage"}}\r
-platform.docUrlPattern = http://182.254.132.122/docStorage/%s\r
-platform.servlet.docStorage = {"class":"com.arne.basedevss.base.sfs.local.LocalSFS", "args":{"dir":"/home/leader21/sltLeader21/leader21/docStorage"}}\r
-\r
-platform.ysbookImgUrlPattern = http://182.254.132.122/bookImgStorage/%s\r
-platform.servlet.ysbookImgStorage = {"class":"com.arne.basedevss.base.sfs.local.LocalSFS", "args":{"dir":"/home/leader21/sltLeader21/leader21/bookImgStorage"}}\r
-\r
-platform.servlet.xmlStorage = {"class":"com.arne.basedevss.base.sfs.local.LocalSFS", "args":{"dir":"/home/leader21/sltLeader21/leader21/xml/"}}\r
-platform.attachmentPattern = http://182.254.132.122/Attachments/%s\r
-\r
-platform.ysbookImgUrlPattern.small.flag = 0\r
-platform.ysbookImgUrlPattern.small.width=110\r
-platform.ysbookImgUrlPattern.small = http://182.254.132.122/bookImgStorage/small/%s\r
-platform.servlet.ysbookImgStorage.small = {"class":"com.arne.basedevss.base.sfs.local.LocalSFS", "args":{"dir":"/home/leader21/sltLeader21/leader21/bookImgStorage/small"}}\r
-\r
-platform.servlet.qrCodeStorage = {"class":"com.arne.basedevss.base.sfs.local.LocalSFS", "args":{"dir":"/home/leader21/sltLeader21/leader21/qrCode/"}}\r
-platform.servlet.qrCodeStr = /home/leader21/sltLeader21/leader21/qrCode/\r
-platform.qrCodePattern = http://182.254.132.122/qrCode/%s\r
-platform.servlet.qrCode.width = 300\r
-platform.servlet.qrCode.height = 300\r
-\r
-platform.xmlStr = /home/leader21/sltLeader21/leader21/xml/\r
-platform.appStr = /home/leader21/sltLeader21/leader21/appStorage/\r
-\r
-platform.test.device.ids = /home/leader21/sltLeader21/leader21/device/ids.txt\r
-\r
-platform.join_act_count = 10\r
-platform.act_fillgolden.join_begin = 2014-02-10 00:00:00\r
-platform.act_fillgolden.join_end = 2014-02-28 23:59:59\r
-\r
-YL.merchantName = LEADER21\r
-YL.merchantId = 802310048992658\r
-YL.password = 61dear86420\r
-YL.private.p12 = /home/leader21/sltLeader21/leader21/PAY.YL/up_61dear_p12.p12\r
-YL.head.cer = /home/leader21/sltLeader21/leader21/PAY.YL/yl8001.cer\r
-YL.merchant_public_cer = /home/leader21/sltLeader21/leader21/PAY.YL/up_61dear_cer.cer\r
-YL.sendUrl = http://mobilepay.unionpaysecure.com/qzjy/MerOrderAction/deal.action\r
-YL.backEndUrl = http://182.254.132.122:8080/order/yl_back\r
-\r
-\r
-ZFB.partner = 2088701185025742\r
-ZFB.private_key = MIICdwIBADANBgkqhkiG9w0BAQEFAASCAmEwggJdAgEAAoGBAMym9J2yZ1K1/Lq+9V4UqDylZ7JygEk24d9vtFmPbNCGywU5JiQddfif8/lN8XcdpgvoNl1ujiXzpT6w5n2GYEKycg3B8zHcdoU8tWzWVL6GGbeZ/4dLY2U2XMPWtBJ+256ZP9qxN0iyBP8/qex57Ua43goWBRML5TPa/wQaCE2HAgMBAAECgYEAkiYAtsV7CBQy4eIRNBiodHbi8QrYFnD9KSWKtBK68MfyIE7JsCzh3KXOA5HoCNrBg+tXN64GEZBHx9dpIuddwbzZwoKv4DBWKRaIZDgfCyhWfopAYpxcGODngREIsdaBL7MSpElxfl2opMTESTIGSfXi4ZJFNb1kys7NlxjKEfECQQDo1kN+ka1s/Tk/oZHFysaM653oqdi6hTjpqSZJqlK7VAShQoKlR6aDy2phB3HWI2Qc5NJbNbEwqZ0+ISyhldATAkEA4QLmeWj2ZKcMwNitwq9i6Y9h4TZ0jG70B/+JgaayPFplwIjOiLn5rlLF+GRUsDJya/GQGCeAYsMIHUkbJDSDPQJBAOHCh1Uc+VQ5P54kEgz/bX9MIiNrNFq+PA3L1fUNcgRzFb4qmDScAae+v5nvNwCT9klR0Wlg6Tqu62lHj1fpxAMCQHY79OlVGyuWj+ABu4RybnI18oPJ/oIQh1BwmUu0UTHfeloqSQSVXLqaKga0ib+wMmnAHCxlDVRYETp6QLXMli0CQAOaSMnMfTrWwgdSSZVz9YKMqtCa1hzkUekTBQWFryNCLl+z54BMMhBSrj8XcGXkyD9ROzR+8HtS2ofuMn69XC8=\r
-ZFB.seller_id = 2088701185025742\r
-ZFB.log_path = /home/leader21/sltLeader21/leader21/\r
-ZFB.it_b_pay = 30 m\r
-ZFB.show_url = http://182.254.132.122/\r
-ZFB.backEndUrl = http://182.254.132.122:8080/order/zfb_back\r
-ZFB.ali_public_key = MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCnxj/9qwVfgoUh/y2W89L6BkRAFljhNhgPdyPuBV64bfQNN1PjbCzkIM6qRdKBoLPXmKKMiFYnkd6rAoprih3/PrQEB/VsW8OoM8fxn67UDYuyBTqA23MML9q1+ilIZwBC2AQ2UBVOrFXfFl75p6/B5KsiNG9zpgmLCUYuLkxpLQIDAQAB\r
-\r
-YB.pay_urlprefix=https://ok.yeepay.com/payapi\r
-YB.paytest_merchantaccount = YB01000000675\r
-YB.paytest_merchant_publickey = MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCPGXEFfLsmUVlBzb/4LjH+512G4fjVX9exKfM6ZET+JYNpGoNGTx6Qa1Q9vT4wMKR+fWTyGtjzP2T8AjTbAX4MuhzjxEfoWGzSz4On24F6cdYbcl9ZW92Ejic3w6B9QNkQ6QccOBviBjWlfm59jlfnDzxvibhMjuG/K+MJzfnLZwIDAQAB\r
-YB.paytest_merchant_privatekey = MIICdgIBADANBgkqhkiG9w0BAQEFAASCAmAwggJcAgEAAoGBAI8ZcQV8uyZRWUHNv/guMf7nXYbh+NVf17Ep8zpkRP4lg2kag0ZPHpBrVD29PjAwpH59ZPIa2PM/ZPwCNNsBfgy6HOPER+hYbNLPg6fbgXpx1htyX1lb3YSOJzfDoH1A2RDpBxw4G+IGNaV+bn2OV+cPPG+JuEyO4b8r4wnN+ctnAgMBAAECgYA8fB92l0svnhDhLIto5nXBbZ/tpFQeNH2h575kPv+egNKzuT4lmMmtd4BK/FNt4RGWWYAyiUCMSI5xqqkWrOHO8yrECuG3HOJOJuDFIZ6IA+4deVujzKGGuShV93Stm0Kkgz4L6Gy3FTiDzSV2Sb4WdSlObbtol8jvYHvdK1if6QJBAMza32yMWd2UzJ8kZLnBZTqO27zxpW523NRC7kP/osJqHqjaa3eTlPSUwHIE79kUtajLnnjSB4ZNNqQBp1OfUtUCQQCy04OOSaeTCMqdw9Z+b9eImkols/b//fH5wm8miK1SYGux4vghIObneOgHA0hZL3z3SRwK1E0Uw9IgZo77t+tLAkAVJvhw7eENlyK1v/1CjOyV6lBYJx9s04sjw7F0hf3ZUznNN5hnJW74/i8M1uOpJ5FGV5gKY61xOaHNt3n+kXHtAkEAqL8ljlh8tCgAot1Rg+BgP/xwaaGoPCrTcz8CChfBjlGEbsliIkjc+6LBORTk6ZwBTYyE1Mc/sY+TspV06Z3FfwJAKQA7ilH5VL7i7hwBF2q83pT5dco/vND1/RanOFgHMmuMrgWckvmWNs0wJh7nqomQVFkoxNRqWngH9/+qGHoD1w==\r
-YB.paytest_yibao_publickey = MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDD/yQOpBS2bulX2a+sHLXJPkAfMhF5dgmpc9+wGxOWqzvuxCgjy1Kyb9SwXVqHJtl1S+PA6ZSXdOosRgjVBhKonYU+7CLj0gvDk50mfhzFEM5bSEeM7Vu9G2gwy4yVJKV7lKg6KvGDzwdJpodvT8DS04OaBwcp6zvf6heqYNDyTQIDAQAB\r
-YB.user_id_card = 355533056614185\r
-YB.server_mac_addr = 14-DA-E9-F0-7C-47\r
-YB.server_ip_addr = 210.73.207.184\r
-YB.userua = bkb\r
-YB.callbackurl = http://182.254.132.122:8080/order/yb_back\r
-YB.fcallbackurl = http://182.254.132.122/close.html\r
-\r
-Exam.question.count = 7\r
-platform.servlet.questionStorage = {"class":"com.arne.basedevss.base.sfs.local.LocalSFS", "args":{"dir":"/home/leader21/sltLeader21/leader21/"}}\r
-platform.questionPattern = http://182.254.132.122/%s\r
-platform.questionPatternStr = http://182.254.132.122/\r
-\r
-platform.activity.db = mysql/127.0.0.1/leader21/root/ledi!@#qwe\r
-platform.admin.db = mysql/127.0.0.1/leader21/root/ledi!@#qwe\r
-platform.apps.db = mysql/127.0.0.1/leader21/root/ledi!@#qwe\r
-platform.books.db = mysql/127.0.0.1/leader21/root/ledi!@#qwe\r
-platform.examinations.db = mysql/127.0.0.1/leader21/root/ledi!@#qwe\r
-platform.history.db = mysql/127.0.0.1/leader21/root/ledi!@#qwe\r
-platform.user.db = mysql/127.0.0.1/leader21/root/ledi!@#qwe\r
-platform.user_books.db = mysql/127.0.0.1/leader21/root/ledi!@#qwe\r
-platform.user_increase.db = mysql/127.0.0.1/leader21/root/ledi!@#qwe\r
-platform.user_wealth.db = mysql/127.0.0.1/leader21/root/ledi!@#qwe\r
-platform.api.db = mysql/127.0.0.1/leader21/root/ledi!@#qwe\r
-\r
-servlet.activity.class =com.arne.platform.activity.ActivityServlet\r
-servlet.activity.path = /activity/*\r
-servlet.admin.class =com.arne.platform.admin.AdminServlet\r
-servlet.admin.path = /admin/*\r
-servlet.apps.class =com.arne.platform.apps.AppsServlet\r
-servlet.apps.path = /apps/*,/a/*\r
-servlet.books.class =com.arne.platform.books.BooksServlet\r
-servlet.books.path = /books/*\r
-servlet.history.class =com.arne.platform.history.HistoryServlet\r
-servlet.history.path = /history/*\r
-servlet.user.class =com.arne.platform.user.UserServlet\r
-servlet.user.path = /user/*\r
-servlet.userbooks.class =com.arne.platform.user_books.User_booksServlet\r
-servlet.userbooks.path = /userbooks/*\r
-servlet.user_increase.class =com.arne.platform.user_increase.User_increaseServlet\r
-servlet.user_increase.path = /user_increase/*\r
-servlet.userwealth.class =com.arne.platform.user_wealth.User_wealthServlet\r
-servlet.userwealth.path = /userwealth/*\r
-servlet.solutionapi.class =com.arne.platform.solutionapi.SolutionApiServlet\r
-servlet.solutionapi.path = /solutionapi/*\r
-servlet.exam.class =com.arne.platform.exam.ExamServlet\r
-servlet.exam.path = /exam/*\r
-servlet.order.class =com.arne.platform.order.OrderServlet\r
-servlet.order.path = /order/*\r
diff --git a/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/shell/style/application.js b/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/shell/style/application.js
deleted file mode 100755 (executable)
index 147094f..0000000
+++ /dev/null
@@ -1,194 +0,0 @@
-function getScrollTop() {
-       return f_scrollTop();
-}
-
-function f_scrollTop() {
-       return f_filterResults($(window) ? $(window).scrollTop() : 0,
-                       document.documentElement ? document.documentElement.scrollTop : 0,
-                       document.body ? document.body.scrollTop : 0);
-}
-function f_filterResults(n_win, n_docel, n_body) {
-       var n_result = n_win ? n_win : 0;
-       if (n_docel && (!n_result || (n_result > n_docel)))
-               n_result = n_docel;
-       return n_body && (!n_result || (n_result > n_body)) ? n_body : n_result;
-}
-
-function setScrollTop() {
-       $(window) ? $(window).scrollTop(0) : 0;
-       document.documentElement ? document.documentElement.scrollTop = 0 : 0;
-       document.body ? document.body.scrollTop = 0 : 0;
-}
-
-function goTopEx() {
-       $node = $('#goTopBtn');
-       if (getScrollTop() > 0) {
-               $node.show();
-       } else {
-               $node.hide();
-       }
-
-       $(window).scroll(function() {
-               if (getScrollTop() > 0) {
-                       $node.show();
-               } else {
-                       $node.hide();
-               }
-       });
-
-       $node.click(function() {
-               setScrollTop();
-       });
-}
-
-function drawRatio() {
-       $('.suite_item').each(function(i, node) {
-               drawSuiteRatio(node)
-       });
-}
-
-$(".see_all").click(function(){
-       $("#see_all").show();
-    $("#see_fail").hide();
-    $("#see_block").hide();
-    $("#see_na").hide();
-    updateToggles();
-    return false;
-});
-
-$(".see_failed").click(function(){
-       $("#see_all").hide();
-    $("#see_fail").show();
-    $("#see_block").hide();
-    $("#see_na").hide();
-    updateToggles();
-    return false;
-});
-
-$(".see_blocked").click(function(){
-       $("#see_all").hide();
-    $("#see_fail").hide();
-    $("#see_block").show();
-    $("#see_na").hide();
-    updateToggles();
-    return false;
-});
-
-$(".see_na").click(function(){
-       $("#see_all").hide();
-    $("#see_fail").hide();
-    $("#see_block").hide();
-    $("#see_na").show();
-    updateToggles();
-    return false;
-});
-
-$("a.test_case_popup").click(function(){
-       var $this = $(this);
-       Popup.show($this.attr('id'));
-    return false;
-});
-
-$(".see_capabilities").click(function(){
-       if ($('#capability_table').css('display') == 'none') {
-               $("#capability_table").show();
-       }else{
-               $("#capability_table").hide();
-       }
-    return false;
-});
-
-function drawSuiteRatio(node) {
-       arrTitle = new Array("Passed", "Failed", "Blocked", "Not Executed");
-       var $node = $(node);
-       var $total = $node.find('.total');
-       var $pass = $node.find('.pass');
-       var $fail = $node.find('.fail');
-       var $block = $node.find('.block');
-       var $na = $node.find('.na');
-       var $div = $node.find('.RatioGraphic');
-
-       var total_int = parseInt($total.text());
-       var pass_int = parseInt($pass.text());
-       var fail_int = parseInt($fail.text());
-       var block_int = parseInt($block.text());
-       var na_int = parseInt($na.text());
-
-       var pass_rate = pass_int * 100 / total_int;
-       var fail_rate = fail_int * 100 / total_int;
-       var block_rate = block_int * 100 / total_int;
-       var na_rate = na_int * 100 / total_int;
-
-       var areaWidth = 380;
-
-       var pass_width = areaWidth * pass_rate / 100;
-       var fail_width = areaWidth * fail_rate / 100;
-       var block_width = areaWidth * block_rate / 100;
-       var na_width = areaWidth * na_rate / 100;
-       
-       pass_rate = pass_rate.toFixed(2);
-       fail_rate = fail_rate.toFixed(2);
-       block_rate = block_rate.toFixed(2);
-       na_rate = na_rate.toFixed(2);
-
-       var pass_style = "padding:3px 0px 0px 0px;font-size:9pt;height:17px;text-align:center;color:white;font-weight:bold;background:url(&quot;./style/blue.jpg&quot;);"
-       var fail_style = "padding:3px 0px 0px 0px;font-size:9pt;height:17px;text-align:center;color:white;font-weight:bold;background:url(&quot;./style/red.jpg&quot;);"
-       var block_style = "padding:3px 0px 0px 0px;font-size:9pt;height:17px;text-align:center;color:white;font-weight:bold;background:url(&quot;./style/orange.jpg&quot;);"
-       var na_style = "padding:3px 0px 0px 0px;font-size:9pt;height:17px;text-align:center;color:white;font-weight:bold;background:url(&quot;./style/gray.jpg&quot;);"
-
-       var html = "<table width=\"380.68\" align=\"center\"><tbody><tr>";
-       if (pass_width > 0){
-           html += "<td width=\""
-                       + pass_width
-                       + "\" style=\""
-                       + pass_style
-                       + "\" title=\"Passed :"
-                       + pass_rate
-                       + "%\">";
-           if (pass_width > 20){
-               html += pass_rate + "%"
-           }
-           html +=  "</td>";
-       }
-       if (fail_width > 0){
-               html += "<td width=\""
-                       + fail_width
-                       + "\" style=\""
-                       + fail_style
-                       + "\" title=\"Failed :"
-                       + fail_rate
-                       + "%\">";
-           if (fail_width > 20){
-               html += fail_rate + "%"
-           }
-           html +=  "</td>";
-       }
-       if (block_width > 0){
-               html += "<td width=\""
-                       + block_width
-                       + "\" style=\""
-                       + block_style
-                       + "\" title=\"Blocked :"
-                       + block_rate
-                       + "%\">";
-           if (block_width > 20){
-               html += block_rate + "%"
-           }
-           html +=  "</td>";
-       }
-       if (na_width > 0){
-               html += "<td width=\""
-                       + na_width
-                       + "\" style=\""
-                       + na_style
-                       + "\" title=\"Blocked :"
-                       + na_rate
-                       + "%\">";
-           if (na_width > 20){
-               html += na_rate + "%"
-           }
-           html +=  "</td>";
-       }
-       html += "</tr></tbody></table>";
-       $div.html(html);
-}
diff --git a/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/shell/style/back_top.png b/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/shell/style/back_top.png
deleted file mode 100755 (executable)
index 19cbd76..0000000
Binary files a/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/shell/style/back_top.png and /dev/null differ
diff --git a/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/shell/style/blue.jpg b/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/shell/style/blue.jpg
deleted file mode 100755 (executable)
index d1db8f7..0000000
Binary files a/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/shell/style/blue.jpg and /dev/null differ
diff --git a/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/shell/style/gray.jpg b/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/shell/style/gray.jpg
deleted file mode 100755 (executable)
index f1acfdb..0000000
Binary files a/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/shell/style/gray.jpg and /dev/null differ
diff --git a/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/shell/style/jquery.min.js b/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/shell/style/jquery.min.js
deleted file mode 100755 (executable)
index 198b3ff..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-/*! jQuery v1.7.1 jquery.com | jquery.org/license */
-(function(a,b){function cy(a){return f.isWindow(a)?a:a.nodeType===9?a.defaultView||a.parentWindow:!1}function cv(a){if(!ck[a]){var b=c.body,d=f("<"+a+">").appendTo(b),e=d.css("display");d.remove();if(e==="none"||e===""){cl||(cl=c.createElement("iframe"),cl.frameBorder=cl.width=cl.height=0),b.appendChild(cl);if(!cm||!cl.createElement)cm=(cl.contentWindow||cl.contentDocument).document,cm.write((c.compatMode==="CSS1Compat"?"<!doctype html>":"")+"<html><body>"),cm.close();d=cm.createElement(a),cm.body.appendChild(d),e=f.css(d,"display"),b.removeChild(cl)}ck[a]=e}return ck[a]}function cu(a,b){var c={};f.each(cq.concat.apply([],cq.slice(0,b)),function(){c[this]=a});return c}function ct(){cr=b}function cs(){setTimeout(ct,0);return cr=f.now()}function cj(){try{return new a.ActiveXObject("Microsoft.XMLHTTP")}catch(b){}}function ci(){try{return new a.XMLHttpRequest}catch(b){}}function cc(a,c){a.dataFilter&&(c=a.dataFilter(c,a.dataType));var d=a.dataTypes,e={},g,h,i=d.length,j,k=d[0],l,m,n,o,p;for(g=1;g<i;g++){if(g===1)for(h in a.converters)typeof h=="string"&&(e[h.toLowerCase()]=a.converters[h]);l=k,k=d[g];if(k==="*")k=l;else if(l!=="*"&&l!==k){m=l+" "+k,n=e[m]||e["* "+k];if(!n){p=b;for(o in e){j=o.split(" ");if(j[0]===l||j[0]==="*"){p=e[j[1]+" "+k];if(p){o=e[o],o===!0?n=p:p===!0&&(n=o);break}}}}!n&&!p&&f.error("No conversion from "+m.replace(" "," to ")),n!==!0&&(c=n?n(c):p(o(c)))}}return c}function cb(a,c,d){var e=a.contents,f=a.dataTypes,g=a.responseFields,h,i,j,k;for(i in g)i in d&&(c[g[i]]=d[i]);while(f[0]==="*")f.shift(),h===b&&(h=a.mimeType||c.getResponseHeader("content-type"));if(h)for(i in e)if(e[i]&&e[i].test(h)){f.unshift(i);break}if(f[0]in d)j=f[0];else{for(i in d){if(!f[0]||a.converters[i+" "+f[0]]){j=i;break}k||(k=i)}j=j||k}if(j){j!==f[0]&&f.unshift(j);return d[j]}}function ca(a,b,c,d){if(f.isArray(b))f.each(b,function(b,e){c||bE.test(a)?d(a,e):ca(a+"["+(typeof e=="object"||f.isArray(e)?b:"")+"]",e,c,d)});else if(!c&&b!=null&&typeof b=="object")for(var e in b)ca(a+"["+e+"]",b[e],c,d);else d(a,b)}function b_(a,c){var d,e,g=f.ajaxSettings.flatOptions||{};for(d in c)c[d]!==b&&((g[d]?a:e||(e={}))[d]=c[d]);e&&f.extend(!0,a,e)}function b$(a,c,d,e,f,g){f=f||c.dataTypes[0],g=g||{},g[f]=!0;var h=a[f],i=0,j=h?h.length:0,k=a===bT,l;for(;i<j&&(k||!l);i++)l=h[i](c,d,e),typeof l=="string"&&(!k||g[l]?l=b:(c.dataTypes.unshift(l),l=b$(a,c,d,e,l,g)));(k||!l)&&!g["*"]&&(l=b$(a,c,d,e,"*",g));return l}function bZ(a){return function(b,c){typeof b!="string"&&(c=b,b="*");if(f.isFunction(c)){var d=b.toLowerCase().split(bP),e=0,g=d.length,h,i,j;for(;e<g;e++)h=d[e],j=/^\+/.test(h),j&&(h=h.substr(1)||"*"),i=a[h]=a[h]||[],i[j?"unshift":"push"](c)}}}function bC(a,b,c){var d=b==="width"?a.offsetWidth:a.offsetHeight,e=b==="width"?bx:by,g=0,h=e.length;if(d>0){if(c!=="border")for(;g<h;g++)c||(d-=parseFloat(f.css(a,"padding"+e[g]))||0),c==="margin"?d+=parseFloat(f.css(a,c+e[g]))||0:d-=parseFloat(f.css(a,"border"+e[g]+"Width"))||0;return d+"px"}d=bz(a,b,b);if(d<0||d==null)d=a.style[b]||0;d=parseFloat(d)||0;if(c)for(;g<h;g++)d+=parseFloat(f.css(a,"padding"+e[g]))||0,c!=="padding"&&(d+=parseFloat(f.css(a,"border"+e[g]+"Width"))||0),c==="margin"&&(d+=parseFloat(f.css(a,c+e[g]))||0);return d+"px"}function bp(a,b){b.src?f.ajax({url:b.src,async:!1,dataType:"script"}):f.globalEval((b.text||b.textContent||b.innerHTML||"").replace(bf,"/*$0*/")),b.parentNode&&b.parentNode.removeChild(b)}function bo(a){var b=c.createElement("div");bh.appendChild(b),b.innerHTML=a.outerHTML;return b.firstChild}function bn(a){var b=(a.nodeName||"").toLowerCase();b==="input"?bm(a):b!=="script"&&typeof a.getElementsByTagName!="undefined"&&f.grep(a.getElementsByTagName("input"),bm)}function bm(a){if(a.type==="checkbox"||a.type==="radio")a.defaultChecked=a.checked}function bl(a){return typeof a.getElementsByTagName!="undefined"?a.getElementsByTagName("*"):typeof a.querySelectorAll!="undefined"?a.querySelectorAll("*"):[]}function bk(a,b){var c;if(b.nodeType===1){b.clearAttributes&&b.clearAttributes(),b.mergeAttributes&&b.mergeAttributes(a),c=b.nodeName.toLowerCase();if(c==="object")b.outerHTML=a.outerHTML;else if(c!=="input"||a.type!=="checkbox"&&a.type!=="radio"){if(c==="option")b.selected=a.defaultSelected;else if(c==="input"||c==="textarea")b.defaultValue=a.defaultValue}else a.checked&&(b.defaultChecked=b.checked=a.checked),b.value!==a.value&&(b.value=a.value);b.removeAttribute(f.expando)}}function bj(a,b){if(b.nodeType===1&&!!f.hasData(a)){var c,d,e,g=f._data(a),h=f._data(b,g),i=g.events;if(i){delete h.handle,h.events={};for(c in i)for(d=0,e=i[c].length;d<e;d++)f.event.add(b,c+(i[c][d].namespace?".":"")+i[c][d].namespace,i[c][d],i[c][d].data)}h.data&&(h.data=f.extend({},h.data))}}function bi(a,b){return f.nodeName(a,"table")?a.getElementsByTagName("tbody")[0]||a.appendChild(a.ownerDocument.createElement("tbody")):a}function U(a){var b=V.split("|"),c=a.createDocumentFragment();if(c.createElement)while(b.length)c.createElement(b.pop());return c}function T(a,b,c){b=b||0;if(f.isFunction(b))return f.grep(a,function(a,d){var e=!!b.call(a,d,a);return e===c});if(b.nodeType)return f.grep(a,function(a,d){return a===b===c});if(typeof b=="string"){var d=f.grep(a,function(a){return a.nodeType===1});if(O.test(b))return f.filter(b,d,!c);b=f.filter(b,d)}return f.grep(a,function(a,d){return f.inArray(a,b)>=0===c})}function S(a){return!a||!a.parentNode||a.parentNode.nodeType===11}function K(){return!0}function J(){return!1}function n(a,b,c){var d=b+"defer",e=b+"queue",g=b+"mark",h=f._data(a,d);h&&(c==="queue"||!f._data(a,e))&&(c==="mark"||!f._data(a,g))&&setTimeout(function(){!f._data(a,e)&&!f._data(a,g)&&(f.removeData(a,d,!0),h.fire())},0)}function m(a){for(var b in a){if(b==="data"&&f.isEmptyObject(a[b]))continue;if(b!=="toJSON")return!1}return!0}function l(a,c,d){if(d===b&&a.nodeType===1){var e="data-"+c.replace(k,"-$1").toLowerCase();d=a.getAttribute(e);if(typeof d=="string"){try{d=d==="true"?!0:d==="false"?!1:d==="null"?null:f.isNumeric(d)?parseFloat(d):j.test(d)?f.parseJSON(d):d}catch(g){}f.data(a,c,d)}else d=b}return d}function h(a){var b=g[a]={},c,d;a=a.split(/\s+/);for(c=0,d=a.length;c<d;c++)b[a[c]]=!0;return b}var c=a.document,d=a.navigator,e=a.location,f=function(){function J(){if(!e.isReady){try{c.documentElement.doScroll("left")}catch(a){setTimeout(J,1);return}e.ready()}}var e=function(a,b){return new e.fn.init(a,b,h)},f=a.jQuery,g=a.$,h,i=/^(?:[^#<]*(<[\w\W]+>)[^>]*$|#([\w\-]*)$)/,j=/\S/,k=/^\s+/,l=/\s+$/,m=/^<(\w+)\s*\/?>(?:<\/\1>)?$/,n=/^[\],:{}\s]*$/,o=/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,p=/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,q=/(?:^|:|,)(?:\s*\[)+/g,r=/(webkit)[ \/]([\w.]+)/,s=/(opera)(?:.*version)?[ \/]([\w.]+)/,t=/(msie) ([\w.]+)/,u=/(mozilla)(?:.*? rv:([\w.]+))?/,v=/-([a-z]|[0-9])/ig,w=/^-ms-/,x=function(a,b){return(b+"").toUpperCase()},y=d.userAgent,z,A,B,C=Object.prototype.toString,D=Object.prototype.hasOwnProperty,E=Array.prototype.push,F=Array.prototype.slice,G=String.prototype.trim,H=Array.prototype.indexOf,I={};e.fn=e.prototype={constructor:e,init:function(a,d,f){var g,h,j,k;if(!a)return this;if(a.nodeType){this.context=this[0]=a,this.length=1;return this}if(a==="body"&&!d&&c.body){this.context=c,this[0]=c.body,this.selector=a,this.length=1;return this}if(typeof a=="string"){a.charAt(0)!=="<"||a.charAt(a.length-1)!==">"||a.length<3?g=i.exec(a):g=[null,a,null];if(g&&(g[1]||!d)){if(g[1]){d=d instanceof e?d[0]:d,k=d?d.ownerDocument||d:c,j=m.exec(a),j?e.isPlainObject(d)?(a=[c.createElement(j[1])],e.fn.attr.call(a,d,!0)):a=[k.createElement(j[1])]:(j=e.buildFragment([g[1]],[k]),a=(j.cacheable?e.clone(j.fragment):j.fragment).childNodes);return e.merge(this,a)}h=c.getElementById(g[2]);if(h&&h.parentNode){if(h.id!==g[2])return f.find(a);this.length=1,this[0]=h}this.context=c,this.selector=a;return this}return!d||d.jquery?(d||f).find(a):this.constructor(d).find(a)}if(e.isFunction(a))return f.ready(a);a.selector!==b&&(this.selector=a.selector,this.context=a.context);return e.makeArray(a,this)},selector:"",jquery:"1.7.1",length:0,size:function(){return this.length},toArray:function(){return F.call(this,0)},get:function(a){return a==null?this.toArray():a<0?this[this.length+a]:this[a]},pushStack:function(a,b,c){var d=this.constructor();e.isArray(a)?E.apply(d,a):e.merge(d,a),d.prevObject=this,d.context=this.context,b==="find"?d.selector=this.selector+(this.selector?" ":"")+c:b&&(d.selector=this.selector+"."+b+"("+c+")");return d},each:function(a,b){return e.each(this,a,b)},ready:function(a){e.bindReady(),A.add(a);return this},eq:function(a){a=+a;return a===-1?this.slice(a):this.slice(a,a+1)},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},slice:function(){return this.pushStack(F.apply(this,arguments),"slice",F.call(arguments).join(","))},map:function(a){return this.pushStack(e.map(this,function(b,c){return a.call(b,c,b)}))},end:function(){return this.prevObject||this.constructor(null)},push:E,sort:[].sort,splice:[].splice},e.fn.init.prototype=e.fn,e.extend=e.fn.extend=function(){var a,c,d,f,g,h,i=arguments[0]||{},j=1,k=arguments.length,l=!1;typeof i=="boolean"&&(l=i,i=arguments[1]||{},j=2),typeof i!="object"&&!e.isFunction(i)&&(i={}),k===j&&(i=this,--j);for(;j<k;j++)if((a=arguments[j])!=null)for(c in a){d=i[c],f=a[c];if(i===f)continue;l&&f&&(e.isPlainObject(f)||(g=e.isArray(f)))?(g?(g=!1,h=d&&e.isArray(d)?d:[]):h=d&&e.isPlainObject(d)?d:{},i[c]=e.extend(l,h,f)):f!==b&&(i[c]=f)}return i},e.extend({noConflict:function(b){a.$===e&&(a.$=g),b&&a.jQuery===e&&(a.jQuery=f);return e},isReady:!1,readyWait:1,holdReady:function(a){a?e.readyWait++:e.ready(!0)},ready:function(a){if(a===!0&&!--e.readyWait||a!==!0&&!e.isReady){if(!c.body)return setTimeout(e.ready,1);e.isReady=!0;if(a!==!0&&--e.readyWait>0)return;A.fireWith(c,[e]),e.fn.trigger&&e(c).trigger("ready").off("ready")}},bindReady:function(){if(!A){A=e.Callbacks("once memory");if(c.readyState==="complete")return setTimeout(e.ready,1);if(c.addEventListener)c.addEventListener("DOMContentLoaded",B,!1),a.addEventListener("load",e.ready,!1);else if(c.attachEvent){c.attachEvent("onreadystatechange",B),a.attachEvent("onload",e.ready);var b=!1;try{b=a.frameElement==null}catch(d){}c.documentElement.doScroll&&b&&J()}}},isFunction:function(a){return e.type(a)==="function"},isArray:Array.isArray||function(a){return e.type(a)==="array"},isWindow:function(a){return a&&typeof a=="object"&&"setInterval"in a},isNumeric:function(a){return!isNaN(parseFloat(a))&&isFinite(a)},type:function(a){return a==null?String(a):I[C.call(a)]||"object"},isPlainObject:function(a){if(!a||e.type(a)!=="object"||a.nodeType||e.isWindow(a))return!1;try{if(a.constructor&&!D.call(a,"constructor")&&!D.call(a.constructor.prototype,"isPrototypeOf"))return!1}catch(c){return!1}var d;for(d in a);return d===b||D.call(a,d)},isEmptyObject:function(a){for(var b in a)return!1;return!0},error:function(a){throw new Error(a)},parseJSON:function(b){if(typeof b!="string"||!b)return null;b=e.trim(b);if(a.JSON&&a.JSON.parse)return a.JSON.parse(b);if(n.test(b.replace(o,"@").replace(p,"]").replace(q,"")))return(new Function("return "+b))();e.error("Invalid JSON: "+b)},parseXML:function(c){var d,f;try{a.DOMParser?(f=new DOMParser,d=f.parseFromString(c,"text/xml")):(d=new ActiveXObject("Microsoft.XMLDOM"),d.async="false",d.loadXML(c))}catch(g){d=b}(!d||!d.documentElement||d.getElementsByTagName("parsererror").length)&&e.error("Invalid XML: "+c);return d},noop:function(){},globalEval:function(b){b&&j.test(b)&&(a.execScript||function(b){a.eval.call(a,b)})(b)},camelCase:function(a){return a.replace(w,"ms-").replace(v,x)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toUpperCase()===b.toUpperCase()},each:function(a,c,d){var f,g=0,h=a.length,i=h===b||e.isFunction(a);if(d){if(i){for(f in a)if(c.apply(a[f],d)===!1)break}else for(;g<h;)if(c.apply(a[g++],d)===!1)break}else if(i){for(f in a)if(c.call(a[f],f,a[f])===!1)break}else for(;g<h;)if(c.call(a[g],g,a[g++])===!1)break;return a},trim:G?function(a){return a==null?"":G.call(a)}:function(a){return a==null?"":(a+"").replace(k,"").replace(l,"")},makeArray:function(a,b){var c=b||[];if(a!=null){var d=e.type(a);a.length==null||d==="string"||d==="function"||d==="regexp"||e.isWindow(a)?E.call(c,a):e.merge(c,a)}return c},inArray:function(a,b,c){var d;if(b){if(H)return H.call(b,a,c);d=b.length,c=c?c<0?Math.max(0,d+c):c:0;for(;c<d;c++)if(c in b&&b[c]===a)return c}return-1},merge:function(a,c){var d=a.length,e=0;if(typeof c.length=="number")for(var f=c.length;e<f;e++)a[d++]=c[e];else while(c[e]!==b)a[d++]=c[e++];a.length=d;return a},grep:function(a,b,c){var d=[],e;c=!!c;for(var f=0,g=a.length;f<g;f++)e=!!b(a[f],f),c!==e&&d.push(a[f]);return d},map:function(a,c,d){var f,g,h=[],i=0,j=a.length,k=a instanceof e||j!==b&&typeof j=="number"&&(j>0&&a[0]&&a[j-1]||j===0||e.isArray(a));if(k)for(;i<j;i++)f=c(a[i],i,d),f!=null&&(h[h.length]=f);else for(g in a)f=c(a[g],g,d),f!=null&&(h[h.length]=f);return h.concat.apply([],h)},guid:1,proxy:function(a,c){if(typeof c=="string"){var d=a[c];c=a,a=d}if(!e.isFunction(a))return b;var f=F.call(arguments,2),g=function(){return a.apply(c,f.concat(F.call(arguments)))};g.guid=a.guid=a.guid||g.guid||e.guid++;return g},access:function(a,c,d,f,g,h){var i=a.length;if(typeof c=="object"){for(var j in c)e.access(a,j,c[j],f,g,d);return a}if(d!==b){f=!h&&f&&e.isFunction(d);for(var k=0;k<i;k++)g(a[k],c,f?d.call(a[k],k,g(a[k],c)):d,h);return a}return i?g(a[0],c):b},now:function(){return(new Date).getTime()},uaMatch:function(a){a=a.toLowerCase();var b=r.exec(a)||s.exec(a)||t.exec(a)||a.indexOf("compatible")<0&&u.exec(a)||[];return{browser:b[1]||"",version:b[2]||"0"}},sub:function(){function a(b,c){return new a.fn.init(b,c)}e.extend(!0,a,this),a.superclass=this,a.fn=a.prototype=this(),a.fn.constructor=a,a.sub=this.sub,a.fn.init=function(d,f){f&&f instanceof e&&!(f instanceof a)&&(f=a(f));return e.fn.init.call(this,d,f,b)},a.fn.init.prototype=a.fn;var b=a(c);return a},browser:{}}),e.each("Boolean Number String Function Array Date RegExp Object".split(" "),function(a,b){I["[object "+b+"]"]=b.toLowerCase()}),z=e.uaMatch(y),z.browser&&(e.browser[z.browser]=!0,e.browser.version=z.version),e.browser.webkit&&(e.browser.safari=!0),j.test(" ")&&(k=/^[\s\xA0]+/,l=/[\s\xA0]+$/),h=e(c),c.addEventListener?B=function(){c.removeEventListener("DOMContentLoaded",B,!1),e.ready()}:c.attachEvent&&(B=function(){c.readyState==="complete"&&(c.detachEvent("onreadystatechange",B),e.ready())});return e}(),g={};f.Callbacks=function(a){a=a?g[a]||h(a):{};var c=[],d=[],e,i,j,k,l,m=function(b){var d,e,g,h,i;for(d=0,e=b.length;d<e;d++)g=b[d],h=f.type(g),h==="array"?m(g):h==="function"&&(!a.unique||!o.has(g))&&c.push(g)},n=function(b,f){f=f||[],e=!a.memory||[b,f],i=!0,l=j||0,j=0,k=c.length;for(;c&&l<k;l++)if(c[l].apply(b,f)===!1&&a.stopOnFalse){e=!0;break}i=!1,c&&(a.once?e===!0?o.disable():c=[]:d&&d.length&&(e=d.shift(),o.fireWith(e[0],e[1])))},o={add:function(){if(c){var a=c.length;m(arguments),i?k=c.length:e&&e!==!0&&(j=a,n(e[0],e[1]))}return this},remove:function(){if(c){var b=arguments,d=0,e=b.length;for(;d<e;d++)for(var f=0;f<c.length;f++)if(b[d]===c[f]){i&&f<=k&&(k--,f<=l&&l--),c.splice(f--,1);if(a.unique)break}}return this},has:function(a){if(c){var b=0,d=c.length;for(;b<d;b++)if(a===c[b])return!0}return!1},empty:function(){c=[];return this},disable:function(){c=d=e=b;return this},disabled:function(){return!c},lock:function(){d=b,(!e||e===!0)&&o.disable();return this},locked:function(){return!d},fireWith:function(b,c){d&&(i?a.once||d.push([b,c]):(!a.once||!e)&&n(b,c));return this},fire:function(){o.fireWith(this,arguments);return this},fired:function(){return!!e}};return o};var i=[].slice;f.extend({Deferred:function(a){var b=f.Callbacks("once memory"),c=f.Callbacks("once memory"),d=f.Callbacks("memory"),e="pending",g={resolve:b,reject:c,notify:d},h={done:b.add,fail:c.add,progress:d.add,state:function(){return e},isResolved:b.fired,isRejected:c.fired,then:function(a,b,c){i.done(a).fail(b).progress(c);return this},always:function(){i.done.apply(i,arguments).fail.apply(i,arguments);return this},pipe:function(a,b,c){return f.Deferred(function(d){f.each({done:[a,"resolve"],fail:[b,"reject"],progress:[c,"notify"]},function(a,b){var c=b[0],e=b[1],g;f.isFunction(c)?i[a](function(){g=c.apply(this,arguments),g&&f.isFunction(g.promise)?g.promise().then(d.resolve,d.reject,d.notify):d[e+"With"](this===i?d:this,[g])}):i[a](d[e])})}).promise()},promise:function(a){if(a==null)a=h;else for(var b in h)a[b]=h[b];return a}},i=h.promise({}),j;for(j in g)i[j]=g[j].fire,i[j+"With"]=g[j].fireWith;i.done(function(){e="resolved"},c.disable,d.lock).fail(function(){e="rejected"},b.disable,d.lock),a&&a.call(i,i);return i},when:function(a){function m(a){return function(b){e[a]=arguments.length>1?i.call(arguments,0):b,j.notifyWith(k,e)}}function l(a){return function(c){b[a]=arguments.length>1?i.call(arguments,0):c,--g||j.resolveWith(j,b)}}var b=i.call(arguments,0),c=0,d=b.length,e=Array(d),g=d,h=d,j=d<=1&&a&&f.isFunction(a.promise)?a:f.Deferred(),k=j.promise();if(d>1){for(;c<d;c++)b[c]&&b[c].promise&&f.isFunction(b[c].promise)?b[c].promise().then(l(c),j.reject,m(c)):--g;g||j.resolveWith(j,b)}else j!==a&&j.resolveWith(j,d?[a]:[]);return k}}),f.support=function(){var b,d,e,g,h,i,j,k,l,m,n,o,p,q=c.createElement("div"),r=c.documentElement;q.setAttribute("className","t"),q.innerHTML="   <link/><table></table><a href='/a' style='top:1px;float:left;opacity:.55;'>a</a><input type='checkbox'/>",d=q.getElementsByTagName("*"),e=q.getElementsByTagName("a")[0];if(!d||!d.length||!e)return{};g=c.createElement("select"),h=g.appendChild(c.createElement("option")),i=q.getElementsByTagName("input")[0],b={leadingWhitespace:q.firstChild.nodeType===3,tbody:!q.getElementsByTagName("tbody").length,htmlSerialize:!!q.getElementsByTagName("link").length,style:/top/.test(e.getAttribute("style")),hrefNormalized:e.getAttribute("href")==="/a",opacity:/^0.55/.test(e.style.opacity),cssFloat:!!e.style.cssFloat,checkOn:i.value==="on",optSelected:h.selected,getSetAttribute:q.className!=="t",enctype:!!c.createElement("form").enctype,html5Clone:c.createElement("nav").cloneNode(!0).outerHTML!=="<:nav></:nav>",submitBubbles:!0,changeBubbles:!0,focusinBubbles:!1,deleteExpando:!0,noCloneEvent:!0,inlineBlockNeedsLayout:!1,shrinkWrapBlocks:!1,reliableMarginRight:!0},i.checked=!0,b.noCloneChecked=i.cloneNode(!0).checked,g.disabled=!0,b.optDisabled=!h.disabled;try{delete q.test}catch(s){b.deleteExpando=!1}!q.addEventListener&&q.attachEvent&&q.fireEvent&&(q.attachEvent("onclick",function(){b.noCloneEvent=!1}),q.cloneNode(!0).fireEvent("onclick")),i=c.createElement("input"),i.value="t",i.setAttribute("type","radio"),b.radioValue=i.value==="t",i.setAttribute("checked","checked"),q.appendChild(i),k=c.createDocumentFragment(),k.appendChild(q.lastChild),b.checkClone=k.cloneNode(!0).cloneNode(!0).lastChild.checked,b.appendChecked=i.checked,k.removeChild(i),k.appendChild(q),q.innerHTML="",a.getComputedStyle&&(j=c.createElement("div"),j.style.width="0",j.style.marginRight="0",q.style.width="2px",q.appendChild(j),b.reliableMarginRight=(parseInt((a.getComputedStyle(j,null)||{marginRight:0}).marginRight,10)||0)===0);if(q.attachEvent)for(o in{submit:1,change:1,focusin:1})n="on"+o,p=n in q,p||(q.setAttribute(n,"return;"),p=typeof q[n]=="function"),b[o+"Bubbles"]=p;k.removeChild(q),k=g=h=j=q=i=null,f(function(){var a,d,e,g,h,i,j,k,m,n,o,r=c.getElementsByTagName("body")[0];!r||(j=1,k="position:absolute;top:0;left:0;width:1px;height:1px;margin:0;",m="visibility:hidden;border:0;",n="style='"+k+"border:5px solid #000;padding:0;'",o="<div "+n+"><div></div></div>"+"<table "+n+" cellpadding='0' cellspacing='0'>"+"<tr><td></td></tr></table>",a=c.createElement("div"),a.style.cssText=m+"width:0;height:0;position:static;top:0;margin-top:"+j+"px",r.insertBefore(a,r.firstChild),q=c.createElement("div"),a.appendChild(q),q.innerHTML="<table><tr><td style='padding:0;border:0;display:none'></td><td>t</td></tr></table>",l=q.getElementsByTagName("td"),p=l[0].offsetHeight===0,l[0].style.display="",l[1].style.display="none",b.reliableHiddenOffsets=p&&l[0].offsetHeight===0,q.innerHTML="",q.style.width=q.style.paddingLeft="1px",f.boxModel=b.boxModel=q.offsetWidth===2,typeof q.style.zoom!="undefined"&&(q.style.display="inline",q.style.zoom=1,b.inlineBlockNeedsLayout=q.offsetWidth===2,q.style.display="",q.innerHTML="<div style='width:4px;'></div>",b.shrinkWrapBlocks=q.offsetWidth!==2),q.style.cssText=k+m,q.innerHTML=o,d=q.firstChild,e=d.firstChild,h=d.nextSibling.firstChild.firstChild,i={doesNotAddBorder:e.offsetTop!==5,doesAddBorderForTableAndCells:h.offsetTop===5},e.style.position="fixed",e.style.top="20px",i.fixedPosition=e.offsetTop===20||e.offsetTop===15,e.style.position=e.style.top="",d.style.overflow="hidden",d.style.position="relative",i.subtractsBorderForOverflowNotVisible=e.offsetTop===-5,i.doesNotIncludeMarginInBodyOffset=r.offsetTop!==j,r.removeChild(a),q=a=null,f.extend(b,i))});return b}();var j=/^(?:\{.*\}|\[.*\])$/,k=/([A-Z])/g;f.extend({cache:{},uuid:0,expando:"jQuery"+(f.fn.jquery+Math.random()).replace(/\D/g,""),noData:{embed:!0,object:"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000",applet:!0},hasData:function(a){a=a.nodeType?f.cache[a[f.expando]]:a[f.expando];return!!a&&!m(a)},data:function(a,c,d,e){if(!!f.acceptData(a)){var g,h,i,j=f.expando,k=typeof c=="string",l=a.nodeType,m=l?f.cache:a,n=l?a[j]:a[j]&&j,o=c==="events";if((!n||!m[n]||!o&&!e&&!m[n].data)&&k&&d===b)return;n||(l?a[j]=n=++f.uuid:n=j),m[n]||(m[n]={},l||(m[n].toJSON=f.noop));if(typeof c=="object"||typeof c=="function")e?m[n]=f.extend(m[n],c):m[n].data=f.extend(m[n].data,c);g=h=m[n],e||(h.data||(h.data={}),h=h.data),d!==b&&(h[f.camelCase(c)]=d);if(o&&!h[c])return g.events;k?(i=h[c],i==null&&(i=h[f.camelCase(c)])):i=h;return i}},removeData:function(a,b,c){if(!!f.acceptData(a)){var d,e,g,h=f.expando,i=a.nodeType,j=i?f.cache:a,k=i?a[h]:h;if(!j[k])return;if(b){d=c?j[k]:j[k].data;if(d){f.isArray(b)||(b in d?b=[b]:(b=f.camelCase(b),b in d?b=[b]:b=b.split(" ")));for(e=0,g=b.length;e<g;e++)delete d[b[e]];if(!(c?m:f.isEmptyObject)(d))return}}if(!c){delete j[k].data;if(!m(j[k]))return}f.support.deleteExpando||!j.setInterval?delete j[k]:j[k]=null,i&&(f.support.deleteExpando?delete a[h]:a.removeAttribute?a.removeAttribute(h):a[h]=null)}},_data:function(a,b,c){return f.data(a,b,c,!0)},acceptData:function(a){if(a.nodeName){var b=f.noData[a.nodeName.toLowerCase()];if(b)return b!==!0&&a.getAttribute("classid")===b}return!0}}),f.fn.extend({data:function(a,c){var d,e,g,h=null;if(typeof a=="undefined"){if(this.length){h=f.data(this[0]);if(this[0].nodeType===1&&!f._data(this[0],"parsedAttrs")){e=this[0].attributes;for(var i=0,j=e.length;i<j;i++)g=e[i].name,g.indexOf("data-")===0&&(g=f.camelCase(g.substring(5)),l(this[0],g,h[g]));f._data(this[0],"parsedAttrs",!0)}}return h}if(typeof a=="object")return this.each(function(){f.data(this,a)});d=a.split("."),d[1]=d[1]?"."+d[1]:"";if(c===b){h=this.triggerHandler("getData"+d[1]+"!",[d[0]]),h===b&&this.length&&(h=f.data(this[0],a),h=l(this[0],a,h));return h===b&&d[1]?this.data(d[0]):h}return this.each(function(){var b=f(this),e=[d[0],c];b.triggerHandler("setData"+d[1]+"!",e),f.data(this,a,c),b.triggerHandler("changeData"+d[1]+"!",e)})},removeData:function(a){return this.each(function(){f.removeData(this,a)})}}),f.extend({_mark:function(a,b){a&&(b=(b||"fx")+"mark",f._data(a,b,(f._data(a,b)||0)+1))},_unmark:function(a,b,c){a!==!0&&(c=b,b=a,a=!1);if(b){c=c||"fx";var d=c+"mark",e=a?0:(f._data(b,d)||1)-1;e?f._data(b,d,e):(f.removeData(b,d,!0),n(b,c,"mark"))}},queue:function(a,b,c){var d;if(a){b=(b||"fx")+"queue",d=f._data(a,b),c&&(!d||f.isArray(c)?d=f._data(a,b,f.makeArray(c)):d.push(c));return d||[]}},dequeue:function(a,b){b=b||"fx";var c=f.queue(a,b),d=c.shift(),e={};d==="inprogress"&&(d=c.shift()),d&&(b==="fx"&&c.unshift("inprogress"),f._data(a,b+".run",e),d.call(a,function(){f.dequeue(a,b)},e)),c.length||(f.removeData(a,b+"queue "+b+".run",!0),n(a,b,"queue"))}}),f.fn.extend({queue:function(a,c){typeof a!="string"&&(c=a,a="fx");if(c===b)return f.queue(this[0],a);return this.each(function(){var b=f.queue(this,a,c);a==="fx"&&b[0]!=="inprogress"&&f.dequeue(this,a)})},dequeue:function(a){return this.each(function(){f.dequeue(this,a)})},delay:function(a,b){a=f.fx?f.fx.speeds[a]||a:a,b=b||"fx";return this.queue(b,function(b,c){var d=setTimeout(b,a);c.stop=function(){clearTimeout(d)}})},clearQueue:function(a){return this.queue(a||"fx",[])},promise:function(a,c){function m(){--h||d.resolveWith(e,[e])}typeof a!="string"&&(c=a,a=b),a=a||"fx";var d=f.Deferred(),e=this,g=e.length,h=1,i=a+"defer",j=a+"queue",k=a+"mark",l;while(g--)if(l=f.data(e[g],i,b,!0)||(f.data(e[g],j,b,!0)||f.data(e[g],k,b,!0))&&f.data(e[g],i,f.Callbacks("once memory"),!0))h++,l.add(m);m();return d.promise()}});var o=/[\n\t\r]/g,p=/\s+/,q=/\r/g,r=/^(?:button|input)$/i,s=/^(?:button|input|object|select|textarea)$/i,t=/^a(?:rea)?$/i,u=/^(?:autofocus|autoplay|async|checked|controls|defer|disabled|hidden|loop|multiple|open|readonly|required|scoped|selected)$/i,v=f.support.getSetAttribute,w,x,y;f.fn.extend({attr:function(a,b){return f.access(this,a,b,!0,f.attr)},removeAttr:function(a){return this.each(function(){f.removeAttr(this,a)})},prop:function(a,b){return f.access(this,a,b,!0,f.prop)},removeProp:function(a){a=f.propFix[a]||a;return this.each(function(){try{this[a]=b,delete this[a]}catch(c){}})},addClass:function(a){var b,c,d,e,g,h,i;if(f.isFunction(a))return this.each(function(b){f(this).addClass(a.call(this,b,this.className))});if(a&&typeof a=="string"){b=a.split(p);for(c=0,d=this.length;c<d;c++){e=this[c];if(e.nodeType===1)if(!e.className&&b.length===1)e.className=a;else{g=" "+e.className+" ";for(h=0,i=b.length;h<i;h++)~g.indexOf(" "+b[h]+" ")||(g+=b[h]+" ");e.className=f.trim(g)}}}return this},removeClass:function(a){var c,d,e,g,h,i,j;if(f.isFunction(a))return this.each(function(b){f(this).removeClass(a.call(this,b,this.className))});if(a&&typeof a=="string"||a===b){c=(a||"").split(p);for(d=0,e=this.length;d<e;d++){g=this[d];if(g.nodeType===1&&g.className)if(a){h=(" "+g.className+" ").replace(o," ");for(i=0,j=c.length;i<j;i++)h=h.replace(" "+c[i]+" "," ");g.className=f.trim(h)}else g.className=""}}return this},toggleClass:function(a,b){var c=typeof a,d=typeof b=="boolean";if(f.isFunction(a))return this.each(function(c){f(this).toggleClass(a.call(this,c,this.className,b),b)});return this.each(function(){if(c==="string"){var e,g=0,h=f(this),i=b,j=a.split(p);while(e=j[g++])i=d?i:!h.hasClass(e),h[i?"addClass":"removeClass"](e)}else if(c==="undefined"||c==="boolean")this.className&&f._data(this,"__className__",this.className),this.className=this.className||a===!1?"":f._data(this,"__className__")||""})},hasClass:function(a){var b=" "+a+" ",c=0,d=this.length;for(;c<d;c++)if(this[c].nodeType===1&&(" "+this[c].className+" ").replace(o," ").indexOf(b)>-1)return!0;return!1},val:function(a){var c,d,e,g=this[0];{if(!!arguments.length){e=f.isFunction(a);return this.each(function(d){var g=f(this),h;if(this.nodeType===1){e?h=a.call(this,d,g.val()):h=a,h==null?h="":typeof h=="number"?h+="":f.isArray(h)&&(h=f.map(h,function(a){return a==null?"":a+""})),c=f.valHooks[this.nodeName.toLowerCase()]||f.valHooks[this.type];if(!c||!("set"in c)||c.set(this,h,"value")===b)this.value=h}})}if(g){c=f.valHooks[g.nodeName.toLowerCase()]||f.valHooks[g.type];if(c&&"get"in c&&(d=c.get(g,"value"))!==b)return d;d=g.value;return typeof d=="string"?d.replace(q,""):d==null?"":d}}}}),f.extend({valHooks:{option:{get:function(a){var b=a.attributes.value;return!b||b.specified?a.value:a.text}},select:{get:function(a){var b,c,d,e,g=a.selectedIndex,h=[],i=a.options,j=a.type==="select-one";if(g<0)return null;c=j?g:0,d=j?g+1:i.length;for(;c<d;c++){e=i[c];if(e.selected&&(f.support.optDisabled?!e.disabled:e.getAttribute("disabled")===null)&&(!e.parentNode.disabled||!f.nodeName(e.parentNode,"optgroup"))){b=f(e).val();if(j)return b;h.push(b)}}if(j&&!h.length&&i.length)return f(i[g]).val();return h},set:function(a,b){var c=f.makeArray(b);f(a).find("option").each(function(){this.selected=f.inArray(f(this).val(),c)>=0}),c.length||(a.selectedIndex=-1);return c}}},attrFn:{val:!0,css:!0,html:!0,text:!0,data:!0,width:!0,height:!0,offset:!0},attr:function(a,c,d,e){var g,h,i,j=a.nodeType;if(!!a&&j!==3&&j!==8&&j!==2){if(e&&c in f.attrFn)return f(a)[c](d);if(typeof a.getAttribute=="undefined")return f.prop(a,c,d);i=j!==1||!f.isXMLDoc(a),i&&(c=c.toLowerCase(),h=f.attrHooks[c]||(u.test(c)?x:w));if(d!==b){if(d===null){f.removeAttr(a,c);return}if(h&&"set"in h&&i&&(g=h.set(a,d,c))!==b)return g;a.setAttribute(c,""+d);return d}if(h&&"get"in h&&i&&(g=h.get(a,c))!==null)return g;g=a.getAttribute(c);return g===null?b:g}},removeAttr:function(a,b){var c,d,e,g,h=0;if(b&&a.nodeType===1){d=b.toLowerCase().split(p),g=d.length;for(;h<g;h++)e=d[h],e&&(c=f.propFix[e]||e,f.attr(a,e,""),a.removeAttribute(v?e:c),u.test(e)&&c in a&&(a[c]=!1))}},attrHooks:{type:{set:function(a,b){if(r.test(a.nodeName)&&a.parentNode)f.error("type property can't be changed");else if(!f.support.radioValue&&b==="radio"&&f.nodeName(a,"input")){var c=a.value;a.setAttribute("type",b),c&&(a.value=c);return b}}},value:{get:function(a,b){if(w&&f.nodeName(a,"button"))return w.get(a,b);return b in a?a.value:null},set:function(a,b,c){if(w&&f.nodeName(a,"button"))return w.set(a,b,c);a.value=b}}},propFix:{tabindex:"tabIndex",readonly:"readOnly","for":"htmlFor","class":"className",maxlength:"maxLength",cellspacing:"cellSpacing",cellpadding:"cellPadding",rowspan:"rowSpan",colspan:"colSpan",usemap:"useMap",frameborder:"frameBorder",contenteditable:"contentEditable"},prop:function(a,c,d){var e,g,h,i=a.nodeType;if(!!a&&i!==3&&i!==8&&i!==2){h=i!==1||!f.isXMLDoc(a),h&&(c=f.propFix[c]||c,g=f.propHooks[c]);return d!==b?g&&"set"in g&&(e=g.set(a,d,c))!==b?e:a[c]=d:g&&"get"in g&&(e=g.get(a,c))!==null?e:a[c]}},propHooks:{tabIndex:{get:function(a){var c=a.getAttributeNode("tabindex");return c&&c.specified?parseInt(c.value,10):s.test(a.nodeName)||t.test(a.nodeName)&&a.href?0:b}}}}),f.attrHooks.tabindex=f.propHooks.tabIndex,x={get:function(a,c){var d,e=f.prop(a,c);return e===!0||typeof e!="boolean"&&(d=a.getAttributeNode(c))&&d.nodeValue!==!1?c.toLowerCase():b},set:function(a,b,c){var d;b===!1?f.removeAttr(a,c):(d=f.propFix[c]||c,d in a&&(a[d]=!0),a.setAttribute(c,c.toLowerCase()));return c}},v||(y={name:!0,id:!0},w=f.valHooks.button={get:function(a,c){var d;d=a.getAttributeNode(c);return d&&(y[c]?d.nodeValue!=="":d.specified)?d.nodeValue:b},set:function(a,b,d){var e=a.getAttributeNode(d);e||(e=c.createAttribute(d),a.setAttributeNode(e));return e.nodeValue=b+""}},f.attrHooks.tabindex.set=w.set,f.each(["width","height"],function(a,b){f.attrHooks[b]=f.extend(f.attrHooks[b],{set:function(a,c){if(c===""){a.setAttribute(b,"auto");return c}}})}),f.attrHooks.contenteditable={get:w.get,set:function(a,b,c){b===""&&(b="false"),w.set(a,b,c)}}),f.support.hrefNormalized||f.each(["href","src","width","height"],function(a,c){f.attrHooks[c]=f.extend(f.attrHooks[c],{get:function(a){var d=a.getAttribute(c,2);return d===null?b:d}})}),f.support.style||(f.attrHooks.style={get:function(a){return a.style.cssText.toLowerCase()||b},set:function(a,b){return a.style.cssText=""+b}}),f.support.optSelected||(f.propHooks.selected=f.extend(f.propHooks.selected,{get:function(a){var b=a.parentNode;b&&(b.selectedIndex,b.parentNode&&b.parentNode.selectedIndex);return null}})),f.support.enctype||(f.propFix.enctype="encoding"),f.support.checkOn||f.each(["radio","checkbox"],function(){f.valHooks[this]={get:function(a){return a.getAttribute("value")===null?"on":a.value}}}),f.each(["radio","checkbox"],function(){f.valHooks[this]=f.extend(f.valHooks[this],{set:function(a,b){if(f.isArray(b))return a.checked=f.inArray(f(a).val(),b)>=0}})});var z=/^(?:textarea|input|select)$/i,A=/^([^\.]*)?(?:\.(.+))?$/,B=/\bhover(\.\S+)?\b/,C=/^key/,D=/^(?:mouse|contextmenu)|click/,E=/^(?:focusinfocus|focusoutblur)$/,F=/^(\w*)(?:#([\w\-]+))?(?:\.([\w\-]+))?$/,G=function(a){var b=F.exec(a);b&&(b[1]=(b[1]||"").toLowerCase(),b[3]=b[3]&&new RegExp("(?:^|\\s)"+b[3]+"(?:\\s|$)"));return b},H=function(a,b){var c=a.attributes||{};return(!b[1]||a.nodeName.toLowerCase()===b[1])&&(!b[2]||(c.id||{}).value===b[2])&&(!b[3]||b[3].test((c["class"]||{}).value))},I=function(a){return f.event.special.hover?a:a.replace(B,"mouseenter$1 mouseleave$1")};
-f.event={add:function(a,c,d,e,g){var h,i,j,k,l,m,n,o,p,q,r,s;if(!(a.nodeType===3||a.nodeType===8||!c||!d||!(h=f._data(a)))){d.handler&&(p=d,d=p.handler),d.guid||(d.guid=f.guid++),j=h.events,j||(h.events=j={}),i=h.handle,i||(h.handle=i=function(a){return typeof f!="undefined"&&(!a||f.event.triggered!==a.type)?f.event.dispatch.apply(i.elem,arguments):b},i.elem=a),c=f.trim(I(c)).split(" ");for(k=0;k<c.length;k++){l=A.exec(c[k])||[],m=l[1],n=(l[2]||"").split(".").sort(),s=f.event.special[m]||{},m=(g?s.delegateType:s.bindType)||m,s=f.event.special[m]||{},o=f.extend({type:m,origType:l[1],data:e,handler:d,guid:d.guid,selector:g,quick:G(g),namespace:n.join(".")},p),r=j[m];if(!r){r=j[m]=[],r.delegateCount=0;if(!s.setup||s.setup.call(a,e,n,i)===!1)a.addEventListener?a.addEventListener(m,i,!1):a.attachEvent&&a.attachEvent("on"+m,i)}s.add&&(s.add.call(a,o),o.handler.guid||(o.handler.guid=d.guid)),g?r.splice(r.delegateCount++,0,o):r.push(o),f.event.global[m]=!0}a=null}},global:{},remove:function(a,b,c,d,e){var g=f.hasData(a)&&f._data(a),h,i,j,k,l,m,n,o,p,q,r,s;if(!!g&&!!(o=g.events)){b=f.trim(I(b||"")).split(" ");for(h=0;h<b.length;h++){i=A.exec(b[h])||[],j=k=i[1],l=i[2];if(!j){for(j in o)f.event.remove(a,j+b[h],c,d,!0);continue}p=f.event.special[j]||{},j=(d?p.delegateType:p.bindType)||j,r=o[j]||[],m=r.length,l=l?new RegExp("(^|\\.)"+l.split(".").sort().join("\\.(?:.*\\.)?")+"(\\.|$)"):null;for(n=0;n<r.length;n++)s=r[n],(e||k===s.origType)&&(!c||c.guid===s.guid)&&(!l||l.test(s.namespace))&&(!d||d===s.selector||d==="**"&&s.selector)&&(r.splice(n--,1),s.selector&&r.delegateCount--,p.remove&&p.remove.call(a,s));r.length===0&&m!==r.length&&((!p.teardown||p.teardown.call(a,l)===!1)&&f.removeEvent(a,j,g.handle),delete o[j])}f.isEmptyObject(o)&&(q=g.handle,q&&(q.elem=null),f.removeData(a,["events","handle"],!0))}},customEvent:{getData:!0,setData:!0,changeData:!0},trigger:function(c,d,e,g){if(!e||e.nodeType!==3&&e.nodeType!==8){var h=c.type||c,i=[],j,k,l,m,n,o,p,q,r,s;if(E.test(h+f.event.triggered))return;h.indexOf("!")>=0&&(h=h.slice(0,-1),k=!0),h.indexOf(".")>=0&&(i=h.split("."),h=i.shift(),i.sort());if((!e||f.event.customEvent[h])&&!f.event.global[h])return;c=typeof c=="object"?c[f.expando]?c:new f.Event(h,c):new f.Event(h),c.type=h,c.isTrigger=!0,c.exclusive=k,c.namespace=i.join("."),c.namespace_re=c.namespace?new RegExp("(^|\\.)"+i.join("\\.(?:.*\\.)?")+"(\\.|$)"):null,o=h.indexOf(":")<0?"on"+h:"";if(!e){j=f.cache;for(l in j)j[l].events&&j[l].events[h]&&f.event.trigger(c,d,j[l].handle.elem,!0);return}c.result=b,c.target||(c.target=e),d=d!=null?f.makeArray(d):[],d.unshift(c),p=f.event.special[h]||{};if(p.trigger&&p.trigger.apply(e,d)===!1)return;r=[[e,p.bindType||h]];if(!g&&!p.noBubble&&!f.isWindow(e)){s=p.delegateType||h,m=E.test(s+h)?e:e.parentNode,n=null;for(;m;m=m.parentNode)r.push([m,s]),n=m;n&&n===e.ownerDocument&&r.push([n.defaultView||n.parentWindow||a,s])}for(l=0;l<r.length&&!c.isPropagationStopped();l++)m=r[l][0],c.type=r[l][1],q=(f._data(m,"events")||{})[c.type]&&f._data(m,"handle"),q&&q.apply(m,d),q=o&&m[o],q&&f.acceptData(m)&&q.apply(m,d)===!1&&c.preventDefault();c.type=h,!g&&!c.isDefaultPrevented()&&(!p._default||p._default.apply(e.ownerDocument,d)===!1)&&(h!=="click"||!f.nodeName(e,"a"))&&f.acceptData(e)&&o&&e[h]&&(h!=="focus"&&h!=="blur"||c.target.offsetWidth!==0)&&!f.isWindow(e)&&(n=e[o],n&&(e[o]=null),f.event.triggered=h,e[h](),f.event.triggered=b,n&&(e[o]=n));return c.result}},dispatch:function(c){c=f.event.fix(c||a.event);var d=(f._data(this,"events")||{})[c.type]||[],e=d.delegateCount,g=[].slice.call(arguments,0),h=!c.exclusive&&!c.namespace,i=[],j,k,l,m,n,o,p,q,r,s,t;g[0]=c,c.delegateTarget=this;if(e&&!c.target.disabled&&(!c.button||c.type!=="click")){m=f(this),m.context=this.ownerDocument||this;for(l=c.target;l!=this;l=l.parentNode||this){o={},q=[],m[0]=l;for(j=0;j<e;j++)r=d[j],s=r.selector,o[s]===b&&(o[s]=r.quick?H(l,r.quick):m.is(s)),o[s]&&q.push(r);q.length&&i.push({elem:l,matches:q})}}d.length>e&&i.push({elem:this,matches:d.slice(e)});for(j=0;j<i.length&&!c.isPropagationStopped();j++){p=i[j],c.currentTarget=p.elem;for(k=0;k<p.matches.length&&!c.isImmediatePropagationStopped();k++){r=p.matches[k];if(h||!c.namespace&&!r.namespace||c.namespace_re&&c.namespace_re.test(r.namespace))c.data=r.data,c.handleObj=r,n=((f.event.special[r.origType]||{}).handle||r.handler).apply(p.elem,g),n!==b&&(c.result=n,n===!1&&(c.preventDefault(),c.stopPropagation()))}}return c.result},props:"attrChange attrName relatedNode srcElement altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "),fixHooks:{},keyHooks:{props:"char charCode key keyCode".split(" "),filter:function(a,b){a.which==null&&(a.which=b.charCode!=null?b.charCode:b.keyCode);return a}},mouseHooks:{props:"button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement".split(" "),filter:function(a,d){var e,f,g,h=d.button,i=d.fromElement;a.pageX==null&&d.clientX!=null&&(e=a.target.ownerDocument||c,f=e.documentElement,g=e.body,a.pageX=d.clientX+(f&&f.scrollLeft||g&&g.scrollLeft||0)-(f&&f.clientLeft||g&&g.clientLeft||0),a.pageY=d.clientY+(f&&f.scrollTop||g&&g.scrollTop||0)-(f&&f.clientTop||g&&g.clientTop||0)),!a.relatedTarget&&i&&(a.relatedTarget=i===a.target?d.toElement:i),!a.which&&h!==b&&(a.which=h&1?1:h&2?3:h&4?2:0);return a}},fix:function(a){if(a[f.expando])return a;var d,e,g=a,h=f.event.fixHooks[a.type]||{},i=h.props?this.props.concat(h.props):this.props;a=f.Event(g);for(d=i.length;d;)e=i[--d],a[e]=g[e];a.target||(a.target=g.srcElement||c),a.target.nodeType===3&&(a.target=a.target.parentNode),a.metaKey===b&&(a.metaKey=a.ctrlKey);return h.filter?h.filter(a,g):a},special:{ready:{setup:f.bindReady},load:{noBubble:!0},focus:{delegateType:"focusin"},blur:{delegateType:"focusout"},beforeunload:{setup:function(a,b,c){f.isWindow(this)&&(this.onbeforeunload=c)},teardown:function(a,b){this.onbeforeunload===b&&(this.onbeforeunload=null)}}},simulate:function(a,b,c,d){var e=f.extend(new f.Event,c,{type:a,isSimulated:!0,originalEvent:{}});d?f.event.trigger(e,null,b):f.event.dispatch.call(b,e),e.isDefaultPrevented()&&c.preventDefault()}},f.event.handle=f.event.dispatch,f.removeEvent=c.removeEventListener?function(a,b,c){a.removeEventListener&&a.removeEventListener(b,c,!1)}:function(a,b,c){a.detachEvent&&a.detachEvent("on"+b,c)},f.Event=function(a,b){if(!(this instanceof f.Event))return new f.Event(a,b);a&&a.type?(this.originalEvent=a,this.type=a.type,this.isDefaultPrevented=a.defaultPrevented||a.returnValue===!1||a.getPreventDefault&&a.getPreventDefault()?K:J):this.type=a,b&&f.extend(this,b),this.timeStamp=a&&a.timeStamp||f.now(),this[f.expando]=!0},f.Event.prototype={preventDefault:function(){this.isDefaultPrevented=K;var a=this.originalEvent;!a||(a.preventDefault?a.preventDefault():a.returnValue=!1)},stopPropagation:function(){this.isPropagationStopped=K;var a=this.originalEvent;!a||(a.stopPropagation&&a.stopPropagation(),a.cancelBubble=!0)},stopImmediatePropagation:function(){this.isImmediatePropagationStopped=K,this.stopPropagation()},isDefaultPrevented:J,isPropagationStopped:J,isImmediatePropagationStopped:J},f.each({mouseenter:"mouseover",mouseleave:"mouseout"},function(a,b){f.event.special[a]={delegateType:b,bindType:b,handle:function(a){var c=this,d=a.relatedTarget,e=a.handleObj,g=e.selector,h;if(!d||d!==c&&!f.contains(c,d))a.type=e.origType,h=e.handler.apply(this,arguments),a.type=b;return h}}}),f.support.submitBubbles||(f.event.special.submit={setup:function(){if(f.nodeName(this,"form"))return!1;f.event.add(this,"click._submit keypress._submit",function(a){var c=a.target,d=f.nodeName(c,"input")||f.nodeName(c,"button")?c.form:b;d&&!d._submit_attached&&(f.event.add(d,"submit._submit",function(a){this.parentNode&&!a.isTrigger&&f.event.simulate("submit",this.parentNode,a,!0)}),d._submit_attached=!0)})},teardown:function(){if(f.nodeName(this,"form"))return!1;f.event.remove(this,"._submit")}}),f.support.changeBubbles||(f.event.special.change={setup:function(){if(z.test(this.nodeName)){if(this.type==="checkbox"||this.type==="radio")f.event.add(this,"propertychange._change",function(a){a.originalEvent.propertyName==="checked"&&(this._just_changed=!0)}),f.event.add(this,"click._change",function(a){this._just_changed&&!a.isTrigger&&(this._just_changed=!1,f.event.simulate("change",this,a,!0))});return!1}f.event.add(this,"beforeactivate._change",function(a){var b=a.target;z.test(b.nodeName)&&!b._change_attached&&(f.event.add(b,"change._change",function(a){this.parentNode&&!a.isSimulated&&!a.isTrigger&&f.event.simulate("change",this.parentNode,a,!0)}),b._change_attached=!0)})},handle:function(a){var b=a.target;if(this!==b||a.isSimulated||a.isTrigger||b.type!=="radio"&&b.type!=="checkbox")return a.handleObj.handler.apply(this,arguments)},teardown:function(){f.event.remove(this,"._change");return z.test(this.nodeName)}}),f.support.focusinBubbles||f.each({focus:"focusin",blur:"focusout"},function(a,b){var d=0,e=function(a){f.event.simulate(b,a.target,f.event.fix(a),!0)};f.event.special[b]={setup:function(){d++===0&&c.addEventListener(a,e,!0)},teardown:function(){--d===0&&c.removeEventListener(a,e,!0)}}}),f.fn.extend({on:function(a,c,d,e,g){var h,i;if(typeof a=="object"){typeof c!="string"&&(d=c,c=b);for(i in a)this.on(i,c,d,a[i],g);return this}d==null&&e==null?(e=c,d=c=b):e==null&&(typeof c=="string"?(e=d,d=b):(e=d,d=c,c=b));if(e===!1)e=J;else if(!e)return this;g===1&&(h=e,e=function(a){f().off(a);return h.apply(this,arguments)},e.guid=h.guid||(h.guid=f.guid++));return this.each(function(){f.event.add(this,a,e,d,c)})},one:function(a,b,c,d){return this.on.call(this,a,b,c,d,1)},off:function(a,c,d){if(a&&a.preventDefault&&a.handleObj){var e=a.handleObj;f(a.delegateTarget).off(e.namespace?e.type+"."+e.namespace:e.type,e.selector,e.handler);return this}if(typeof a=="object"){for(var g in a)this.off(g,c,a[g]);return this}if(c===!1||typeof c=="function")d=c,c=b;d===!1&&(d=J);return this.each(function(){f.event.remove(this,a,d,c)})},bind:function(a,b,c){return this.on(a,null,b,c)},unbind:function(a,b){return this.off(a,null,b)},live:function(a,b,c){f(this.context).on(a,this.selector,b,c);return this},die:function(a,b){f(this.context).off(a,this.selector||"**",b);return this},delegate:function(a,b,c,d){return this.on(b,a,c,d)},undelegate:function(a,b,c){return arguments.length==1?this.off(a,"**"):this.off(b,a,c)},trigger:function(a,b){return this.each(function(){f.event.trigger(a,b,this)})},triggerHandler:function(a,b){if(this[0])return f.event.trigger(a,b,this[0],!0)},toggle:function(a){var b=arguments,c=a.guid||f.guid++,d=0,e=function(c){var e=(f._data(this,"lastToggle"+a.guid)||0)%d;f._data(this,"lastToggle"+a.guid,e+1),c.preventDefault();return b[e].apply(this,arguments)||!1};e.guid=c;while(d<b.length)b[d++].guid=c;return this.click(e)},hover:function(a,b){return this.mouseenter(a).mouseleave(b||a)}}),f.each("blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error contextmenu".split(" "),function(a,b){f.fn[b]=function(a,c){c==null&&(c=a,a=null);return arguments.length>0?this.on(b,null,a,c):this.trigger(b)},f.attrFn&&(f.attrFn[b]=!0),C.test(b)&&(f.event.fixHooks[b]=f.event.keyHooks),D.test(b)&&(f.event.fixHooks[b]=f.event.mouseHooks)}),function(){function x(a,b,c,e,f,g){for(var h=0,i=e.length;h<i;h++){var j=e[h];if(j){var k=!1;j=j[a];while(j){if(j[d]===c){k=e[j.sizset];break}if(j.nodeType===1){g||(j[d]=c,j.sizset=h);if(typeof b!="string"){if(j===b){k=!0;break}}else if(m.filter(b,[j]).length>0){k=j;break}}j=j[a]}e[h]=k}}}function w(a,b,c,e,f,g){for(var h=0,i=e.length;h<i;h++){var j=e[h];if(j){var k=!1;j=j[a];while(j){if(j[d]===c){k=e[j.sizset];break}j.nodeType===1&&!g&&(j[d]=c,j.sizset=h);if(j.nodeName.toLowerCase()===b){k=j;break}j=j[a]}e[h]=k}}}var a=/((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^\[\]]*\]|['"][^'"]*['"]|[^\[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,d="sizcache"+(Math.random()+"").replace(".",""),e=0,g=Object.prototype.toString,h=!1,i=!0,j=/\\/g,k=/\r\n/g,l=/\W/;[0,0].sort(function(){i=!1;return 0});var m=function(b,d,e,f){e=e||[],d=d||c;var h=d;if(d.nodeType!==1&&d.nodeType!==9)return[];if(!b||typeof b!="string")return e;var i,j,k,l,n,q,r,t,u=!0,v=m.isXML(d),w=[],x=b;do{a.exec(""),i=a.exec(x);if(i){x=i[3],w.push(i[1]);if(i[2]){l=i[3];break}}}while(i);if(w.length>1&&p.exec(b))if(w.length===2&&o.relative[w[0]])j=y(w[0]+w[1],d,f);else{j=o.relative[w[0]]?[d]:m(w.shift(),d);while(w.length)b=w.shift(),o.relative[b]&&(b+=w.shift()),j=y(b,j,f)}else{!f&&w.length>1&&d.nodeType===9&&!v&&o.match.ID.test(w[0])&&!o.match.ID.test(w[w.length-1])&&(n=m.find(w.shift(),d,v),d=n.expr?m.filter(n.expr,n.set)[0]:n.set[0]);if(d){n=f?{expr:w.pop(),set:s(f)}:m.find(w.pop(),w.length===1&&(w[0]==="~"||w[0]==="+")&&d.parentNode?d.parentNode:d,v),j=n.expr?m.filter(n.expr,n.set):n.set,w.length>0?k=s(j):u=!1;while(w.length)q=w.pop(),r=q,o.relative[q]?r=w.pop():q="",r==null&&(r=d),o.relative[q](k,r,v)}else k=w=[]}k||(k=j),k||m.error(q||b);if(g.call(k)==="[object Array]")if(!u)e.push.apply(e,k);else if(d&&d.nodeType===1)for(t=0;k[t]!=null;t++)k[t]&&(k[t]===!0||k[t].nodeType===1&&m.contains(d,k[t]))&&e.push(j[t]);else for(t=0;k[t]!=null;t++)k[t]&&k[t].nodeType===1&&e.push(j[t]);else s(k,e);l&&(m(l,h,e,f),m.uniqueSort(e));return e};m.uniqueSort=function(a){if(u){h=i,a.sort(u);if(h)for(var b=1;b<a.length;b++)a[b]===a[b-1]&&a.splice(b--,1)}return a},m.matches=function(a,b){return m(a,null,null,b)},m.matchesSelector=function(a,b){return m(b,null,null,[a]).length>0},m.find=function(a,b,c){var d,e,f,g,h,i;if(!a)return[];for(e=0,f=o.order.length;e<f;e++){h=o.order[e];if(g=o.leftMatch[h].exec(a)){i=g[1],g.splice(1,1);if(i.substr(i.length-1)!=="\\"){g[1]=(g[1]||"").replace(j,""),d=o.find[h](g,b,c);if(d!=null){a=a.replace(o.match[h],"");break}}}}d||(d=typeof b.getElementsByTagName!="undefined"?b.getElementsByTagName("*"):[]);return{set:d,expr:a}},m.filter=function(a,c,d,e){var f,g,h,i,j,k,l,n,p,q=a,r=[],s=c,t=c&&c[0]&&m.isXML(c[0]);while(a&&c.length){for(h in o.filter)if((f=o.leftMatch[h].exec(a))!=null&&f[2]){k=o.filter[h],l=f[1],g=!1,f.splice(1,1);if(l.substr(l.length-1)==="\\")continue;s===r&&(r=[]);if(o.preFilter[h]){f=o.preFilter[h](f,s,d,r,e,t);if(!f)g=i=!0;else if(f===!0)continue}if(f)for(n=0;(j=s[n])!=null;n++)j&&(i=k(j,f,n,s),p=e^i,d&&i!=null?p?g=!0:s[n]=!1:p&&(r.push(j),g=!0));if(i!==b){d||(s=r),a=a.replace(o.match[h],"");if(!g)return[];break}}if(a===q)if(g==null)m.error(a);else break;q=a}return s},m.error=function(a){throw new Error("Syntax error, unrecognized expression: "+a)};var n=m.getText=function(a){var b,c,d=a.nodeType,e="";if(d){if(d===1||d===9){if(typeof a.textContent=="string")return a.textContent;if(typeof a.innerText=="string")return a.innerText.replace(k,"");for(a=a.firstChild;a;a=a.nextSibling)e+=n(a)}else if(d===3||d===4)return a.nodeValue}else for(b=0;c=a[b];b++)c.nodeType!==8&&(e+=n(c));return e},o=m.selectors={order:["ID","NAME","TAG"],match:{ID:/#((?:[\w\u00c0-\uFFFF\-]|\\.)+)/,CLASS:/\.((?:[\w\u00c0-\uFFFF\-]|\\.)+)/,NAME:/\[name=['"]*((?:[\w\u00c0-\uFFFF\-]|\\.)+)['"]*\]/,ATTR:/\[\s*((?:[\w\u00c0-\uFFFF\-]|\\.)+)\s*(?:(\S?=)\s*(?:(['"])(.*?)\3|(#?(?:[\w\u00c0-\uFFFF\-]|\\.)*)|)|)\s*\]/,TAG:/^((?:[\w\u00c0-\uFFFF\*\-]|\\.)+)/,CHILD:/:(only|nth|last|first)-child(?:\(\s*(even|odd|(?:[+\-]?\d+|(?:[+\-]?\d*)?n\s*(?:[+\-]\s*\d+)?))\s*\))?/,POS:/:(nth|eq|gt|lt|first|last|even|odd)(?:\((\d*)\))?(?=[^\-]|$)/,PSEUDO:/:((?:[\w\u00c0-\uFFFF\-]|\\.)+)(?:\((['"]?)((?:\([^\)]+\)|[^\(\)]*)+)\2\))?/},leftMatch:{},attrMap:{"class":"className","for":"htmlFor"},attrHandle:{href:function(a){return a.getAttribute("href")},type:function(a){return a.getAttribute("type")}},relative:{"+":function(a,b){var c=typeof b=="string",d=c&&!l.test(b),e=c&&!d;d&&(b=b.toLowerCase());for(var f=0,g=a.length,h;f<g;f++)if(h=a[f]){while((h=h.previousSibling)&&h.nodeType!==1);a[f]=e||h&&h.nodeName.toLowerCase()===b?h||!1:h===b}e&&m.filter(b,a,!0)},">":function(a,b){var c,d=typeof b=="string",e=0,f=a.length;if(d&&!l.test(b)){b=b.toLowerCase();for(;e<f;e++){c=a[e];if(c){var g=c.parentNode;a[e]=g.nodeName.toLowerCase()===b?g:!1}}}else{for(;e<f;e++)c=a[e],c&&(a[e]=d?c.parentNode:c.parentNode===b);d&&m.filter(b,a,!0)}},"":function(a,b,c){var d,f=e++,g=x;typeof b=="string"&&!l.test(b)&&(b=b.toLowerCase(),d=b,g=w),g("parentNode",b,f,a,d,c)},"~":function(a,b,c){var d,f=e++,g=x;typeof b=="string"&&!l.test(b)&&(b=b.toLowerCase(),d=b,g=w),g("previousSibling",b,f,a,d,c)}},find:{ID:function(a,b,c){if(typeof b.getElementById!="undefined"&&!c){var d=b.getElementById(a[1]);return d&&d.parentNode?[d]:[]}},NAME:function(a,b){if(typeof b.getElementsByName!="undefined"){var c=[],d=b.getElementsByName(a[1]);for(var e=0,f=d.length;e<f;e++)d[e].getAttribute("name")===a[1]&&c.push(d[e]);return c.length===0?null:c}},TAG:function(a,b){if(typeof b.getElementsByTagName!="undefined")return b.getElementsByTagName(a[1])}},preFilter:{CLASS:function(a,b,c,d,e,f){a=" "+a[1].replace(j,"")+" ";if(f)return a;for(var g=0,h;(h=b[g])!=null;g++)h&&(e^(h.className&&(" "+h.className+" ").replace(/[\t\n\r]/g," ").indexOf(a)>=0)?c||d.push(h):c&&(b[g]=!1));return!1},ID:function(a){return a[1].replace(j,"")},TAG:function(a,b){return a[1].replace(j,"").toLowerCase()},CHILD:function(a){if(a[1]==="nth"){a[2]||m.error(a[0]),a[2]=a[2].replace(/^\+|\s*/g,"");var b=/(-?)(\d*)(?:n([+\-]?\d*))?/.exec(a[2]==="even"&&"2n"||a[2]==="odd"&&"2n+1"||!/\D/.test(a[2])&&"0n+"+a[2]||a[2]);a[2]=b[1]+(b[2]||1)-0,a[3]=b[3]-0}else a[2]&&m.error(a[0]);a[0]=e++;return a},ATTR:function(a,b,c,d,e,f){var g=a[1]=a[1].replace(j,"");!f&&o.attrMap[g]&&(a[1]=o.attrMap[g]),a[4]=(a[4]||a[5]||"").replace(j,""),a[2]==="~="&&(a[4]=" "+a[4]+" ");return a},PSEUDO:function(b,c,d,e,f){if(b[1]==="not")if((a.exec(b[3])||"").length>1||/^\w/.test(b[3]))b[3]=m(b[3],null,null,c);else{var g=m.filter(b[3],c,d,!0^f);d||e.push.apply(e,g);return!1}else if(o.match.POS.test(b[0])||o.match.CHILD.test(b[0]))return!0;return b},POS:function(a){a.unshift(!0);return a}},filters:{enabled:function(a){return a.disabled===!1&&a.type!=="hidden"},disabled:function(a){return a.disabled===!0},checked:function(a){return a.checked===!0},selected:function(a){a.parentNode&&a.parentNode.selectedIndex;return a.selected===!0},parent:function(a){return!!a.firstChild},empty:function(a){return!a.firstChild},has:function(a,b,c){return!!m(c[3],a).length},header:function(a){return/h\d/i.test(a.nodeName)},text:function(a){var b=a.getAttribute("type"),c=a.type;return a.nodeName.toLowerCase()==="input"&&"text"===c&&(b===c||b===null)},radio:function(a){return a.nodeName.toLowerCase()==="input"&&"radio"===a.type},checkbox:function(a){return a.nodeName.toLowerCase()==="input"&&"checkbox"===a.type},file:function(a){return a.nodeName.toLowerCase()==="input"&&"file"===a.type},password:function(a){return a.nodeName.toLowerCase()==="input"&&"password"===a.type},submit:function(a){var b=a.nodeName.toLowerCase();return(b==="input"||b==="button")&&"submit"===a.type},image:function(a){return a.nodeName.toLowerCase()==="input"&&"image"===a.type},reset:function(a){var b=a.nodeName.toLowerCase();return(b==="input"||b==="button")&&"reset"===a.type},button:function(a){var b=a.nodeName.toLowerCase();return b==="input"&&"button"===a.type||b==="button"},input:function(a){return/input|select|textarea|button/i.test(a.nodeName)},focus:function(a){return a===a.ownerDocument.activeElement}},setFilters:{first:function(a,b){return b===0},last:function(a,b,c,d){return b===d.length-1},even:function(a,b){return b%2===0},odd:function(a,b){return b%2===1},lt:function(a,b,c){return b<c[3]-0},gt:function(a,b,c){return b>c[3]-0},nth:function(a,b,c){return c[3]-0===b},eq:function(a,b,c){return c[3]-0===b}},filter:{PSEUDO:function(a,b,c,d){var e=b[1],f=o.filters[e];if(f)return f(a,c,b,d);if(e==="contains")return(a.textContent||a.innerText||n([a])||"").indexOf(b[3])>=0;if(e==="not"){var g=b[3];for(var h=0,i=g.length;h<i;h++)if(g[h]===a)return!1;return!0}m.error(e)},CHILD:function(a,b){var c,e,f,g,h,i,j,k=b[1],l=a;switch(k){case"only":case"first":while(l=l.previousSibling)if(l.nodeType===1)return!1;if(k==="first")return!0;l=a;case"last":while(l=l.nextSibling)if(l.nodeType===1)return!1;return!0;case"nth":c=b[2],e=b[3];if(c===1&&e===0)return!0;f=b[0],g=a.parentNode;if(g&&(g[d]!==f||!a.nodeIndex)){i=0;for(l=g.firstChild;l;l=l.nextSibling)l.nodeType===1&&(l.nodeIndex=++i);g[d]=f}j=a.nodeIndex-e;return c===0?j===0:j%c===0&&j/c>=0}},ID:function(a,b){return a.nodeType===1&&a.getAttribute("id")===b},TAG:function(a,b){return b==="*"&&a.nodeType===1||!!a.nodeName&&a.nodeName.toLowerCase()===b},CLASS:function(a,b){return(" "+(a.className||a.getAttribute("class"))+" ").indexOf(b)>-1},ATTR:function(a,b){var c=b[1],d=m.attr?m.attr(a,c):o.attrHandle[c]?o.attrHandle[c](a):a[c]!=null?a[c]:a.getAttribute(c),e=d+"",f=b[2],g=b[4];return d==null?f==="!=":!f&&m.attr?d!=null:f==="="?e===g:f==="*="?e.indexOf(g)>=0:f==="~="?(" "+e+" ").indexOf(g)>=0:g?f==="!="?e!==g:f==="^="?e.indexOf(g)===0:f==="$="?e.substr(e.length-g.length)===g:f==="|="?e===g||e.substr(0,g.length+1)===g+"-":!1:e&&d!==!1},POS:function(a,b,c,d){var e=b[2],f=o.setFilters[e];if(f)return f(a,c,b,d)}}},p=o.match.POS,q=function(a,b){return"\\"+(b-0+1)};for(var r in o.match)o.match[r]=new RegExp(o.match[r].source+/(?![^\[]*\])(?![^\(]*\))/.source),o.leftMatch[r]=new RegExp(/(^(?:.|\r|\n)*?)/.source+o.match[r].source.replace(/\\(\d+)/g,q));var s=function(a,b){a=Array.prototype.slice.call(a,0);if(b){b.push.apply(b,a);return b}return a};try{Array.prototype.slice.call(c.documentElement.childNodes,0)[0].nodeType}catch(t){s=function(a,b){var c=0,d=b||[];if(g.call(a)==="[object Array]")Array.prototype.push.apply(d,a);else if(typeof a.length=="number")for(var e=a.length;c<e;c++)d.push(a[c]);else for(;a[c];c++)d.push(a[c]);return d}}var u,v;c.documentElement.compareDocumentPosition?u=function(a,b){if(a===b){h=!0;return 0}if(!a.compareDocumentPosition||!b.compareDocumentPosition)return a.compareDocumentPosition?-1:1;return a.compareDocumentPosition(b)&4?-1:1}:(u=function(a,b){if(a===b){h=!0;return 0}if(a.sourceIndex&&b.sourceIndex)return a.sourceIndex-b.sourceIndex;var c,d,e=[],f=[],g=a.parentNode,i=b.parentNode,j=g;if(g===i)return v(a,b);if(!g)return-1;if(!i)return 1;while(j)e.unshift(j),j=j.parentNode;j=i;while(j)f.unshift(j),j=j.parentNode;c=e.length,d=f.length;for(var k=0;k<c&&k<d;k++)if(e[k]!==f[k])return v(e[k],f[k]);return k===c?v(a,f[k],-1):v(e[k],b,1)},v=function(a,b,c){if(a===b)return c;var d=a.nextSibling;while(d){if(d===b)return-1;d=d.nextSibling}return 1}),function(){var a=c.createElement("div"),d="script"+(new Date).getTime(),e=c.documentElement;a.innerHTML="<a name='"+d+"'/>",e.insertBefore(a,e.firstChild),c.getElementById(d)&&(o.find.ID=function(a,c,d){if(typeof c.getElementById!="undefined"&&!d){var e=c.getElementById(a[1]);return e?e.id===a[1]||typeof e.getAttributeNode!="undefined"&&e.getAttributeNode("id").nodeValue===a[1]?[e]:b:[]}},o.filter.ID=function(a,b){var c=typeof a.getAttributeNode!="undefined"&&a.getAttributeNode("id");return a.nodeType===1&&c&&c.nodeValue===b}),e.removeChild(a),e=a=null}(),function(){var a=c.createElement("div");a.appendChild(c.createComment("")),a.getElementsByTagName("*").length>0&&(o.find.TAG=function(a,b){var c=b.getElementsByTagName(a[1]);if(a[1]==="*"){var d=[];for(var e=0;c[e];e++)c[e].nodeType===1&&d.push(c[e]);c=d}return c}),a.innerHTML="<a href='#'></a>",a.firstChild&&typeof a.firstChild.getAttribute!="undefined"&&a.firstChild.getAttribute("href")!=="#"&&(o.attrHandle.href=function(a){return a.getAttribute("href",2)}),a=null}(),c.querySelectorAll&&function(){var a=m,b=c.createElement("div"),d="__sizzle__";b.innerHTML="<p class='TEST'></p>";if(!b.querySelectorAll||b.querySelectorAll(".TEST").length!==0){m=function(b,e,f,g){e=e||c;if(!g&&!m.isXML(e)){var h=/^(\w+$)|^\.([\w\-]+$)|^#([\w\-]+$)/.exec(b);if(h&&(e.nodeType===1||e.nodeType===9)){if(h[1])return s(e.getElementsByTagName(b),f);if(h[2]&&o.find.CLASS&&e.getElementsByClassName)return s(e.getElementsByClassName(h[2]),f)}if(e.nodeType===9){if(b==="body"&&e.body)return s([e.body],f);if(h&&h[3]){var i=e.getElementById(h[3]);if(!i||!i.parentNode)return s([],f);if(i.id===h[3])return s([i],f)}try{return s(e.querySelectorAll(b),f)}catch(j){}}else if(e.nodeType===1&&e.nodeName.toLowerCase()!=="object"){var k=e,l=e.getAttribute("id"),n=l||d,p=e.parentNode,q=/^\s*[+~]/.test(b);l?n=n.replace(/'/g,"\\$&"):e.setAttribute("id",n),q&&p&&(e=e.parentNode);try{if(!q||p)return s(e.querySelectorAll("[id='"+n+"'] "+b),f)}catch(r){}finally{l||k.removeAttribute("id")}}}return a(b,e,f,g)};for(var e in a)m[e]=a[e];b=null}}(),function(){var a=c.documentElement,b=a.matchesSelector||a.mozMatchesSelector||a.webkitMatchesSelector||a.msMatchesSelector;if(b){var d=!b.call(c.createElement("div"),"div"),e=!1;try{b.call(c.documentElement,"[test!='']:sizzle")}catch(f){e=!0}m.matchesSelector=function(a,c){c=c.replace(/\=\s*([^'"\]]*)\s*\]/g,"='$1']");if(!m.isXML(a))try{if(e||!o.match.PSEUDO.test(c)&&!/!=/.test(c)){var f=b.call(a,c);if(f||!d||a.document&&a.document.nodeType!==11)return f}}catch(g){}return m(c,null,null,[a]).length>0}}}(),function(){var a=c.createElement("div");a.innerHTML="<div class='test e'></div><div class='test'></div>";if(!!a.getElementsByClassName&&a.getElementsByClassName("e").length!==0){a.lastChild.className="e";if(a.getElementsByClassName("e").length===1)return;o.order.splice(1,0,"CLASS"),o.find.CLASS=function(a,b,c){if(typeof b.getElementsByClassName!="undefined"&&!c)return b.getElementsByClassName(a[1])},a=null}}(),c.documentElement.contains?m.contains=function(a,b){return a!==b&&(a.contains?a.contains(b):!0)}:c.documentElement.compareDocumentPosition?m.contains=function(a,b){return!!(a.compareDocumentPosition(b)&16)}:m.contains=function(){return!1},m.isXML=function(a){var b=(a?a.ownerDocument||a:0).documentElement;return b?b.nodeName!=="HTML":!1};var y=function(a,b,c){var d,e=[],f="",g=b.nodeType?[b]:b;while(d=o.match.PSEUDO.exec(a))f+=d[0],a=a.replace(o.match.PSEUDO,"");a=o.relative[a]?a+"*":a;for(var h=0,i=g.length;h<i;h++)m(a,g[h],e,c);return m.filter(f,e)};m.attr=f.attr,m.selectors.attrMap={},f.find=m,f.expr=m.selectors,f.expr[":"]=f.expr.filters,f.unique=m.uniqueSort,f.text=m.getText,f.isXMLDoc=m.isXML,f.contains=m.contains}();var L=/Until$/,M=/^(?:parents|prevUntil|prevAll)/,N=/,/,O=/^.[^:#\[\.,]*$/,P=Array.prototype.slice,Q=f.expr.match.POS,R={children:!0,contents:!0,next:!0,prev:!0};f.fn.extend({find:function(a){var b=this,c,d;if(typeof a!="string")return f(a).filter(function(){for(c=0,d=b.length;c<d;c++)if(f.contains(b[c],this))return!0});var e=this.pushStack("","find",a),g,h,i;for(c=0,d=this.length;c<d;c++){g=e.length,f.find(a,this[c],e);if(c>0)for(h=g;h<e.length;h++)for(i=0;i<g;i++)if(e[i]===e[h]){e.splice(h--,1);break}}return e},has:function(a){var b=f(a);return this.filter(function(){for(var a=0,c=b.length;a<c;a++)if(f.contains(this,b[a]))return!0})},not:function(a){return this.pushStack(T(this,a,!1),"not",a)},filter:function(a){return this.pushStack(T(this,a,!0),"filter",a)},is:function(a){return!!a&&(typeof a=="string"?Q.test(a)?f(a,this.context).index(this[0])>=0:f.filter(a,this).length>0:this.filter(a).length>0)},closest:function(a,b){var c=[],d,e,g=this[0];if(f.isArray(a)){var h=1;while(g&&g.ownerDocument&&g!==b){for(d=0;d<a.length;d++)f(g).is(a[d])&&c.push({selector:a[d],elem:g,level:h});g=g.parentNode,h++}return c}var i=Q.test(a)||typeof a!="string"?f(a,b||this.context):0;for(d=0,e=this.length;d<e;d++){g=this[d];while(g){if(i?i.index(g)>-1:f.find.matchesSelector(g,a)){c.push(g);break}g=g.parentNode;if(!g||!g.ownerDocument||g===b||g.nodeType===11)break}}c=c.length>1?f.unique(c):c;return this.pushStack(c,"closest",a)},index:function(a){if(!a)return this[0]&&this[0].parentNode?this.prevAll().length:-1;if(typeof a=="string")return f.inArray(this[0],f(a));return f.inArray(a.jquery?a[0]:a,this)},add:function(a,b){var c=typeof a=="string"?f(a,b):f.makeArray(a&&a.nodeType?[a]:a),d=f.merge(this.get(),c);return this.pushStack(S(c[0])||S(d[0])?d:f.unique(d))},andSelf:function(){return this.add(this.prevObject)}}),f.each({parent:function(a){var b=a.parentNode;return b&&b.nodeType!==11?b:null},parents:function(a){return f.dir(a,"parentNode")},parentsUntil:function(a,b,c){return f.dir(a,"parentNode",c)},next:function(a){return f.nth(a,2,"nextSibling")},prev:function(a){return f.nth(a,2,"previousSibling")},nextAll:function(a){return f.dir(a,"nextSibling")},prevAll:function(a){return f.dir(a,"previousSibling")},nextUntil:function(a,b,c){return f.dir(a,"nextSibling",c)},prevUntil:function(a,b,c){return f.dir(a,"previousSibling",c)},siblings:function(a){return f.sibling(a.parentNode.firstChild,a)},children:function(a){return f.sibling(a.firstChild)},contents:function(a){return f.nodeName(a,"iframe")?a.contentDocument||a.contentWindow.document:f.makeArray(a.childNodes)}},function(a,b){f.fn[a]=function(c,d){var e=f.map(this,b,c);L.test(a)||(d=c),d&&typeof d=="string"&&(e=f.filter(d,e)),e=this.length>1&&!R[a]?f.unique(e):e,(this.length>1||N.test(d))&&M.test(a)&&(e=e.reverse());return this.pushStack(e,a,P.call(arguments).join(","))}}),f.extend({filter:function(a,b,c){c&&(a=":not("+a+")");return b.length===1?f.find.matchesSelector(b[0],a)?[b[0]]:[]:f.find.matches(a,b)},dir:function(a,c,d){var e=[],g=a[c];while(g&&g.nodeType!==9&&(d===b||g.nodeType!==1||!f(g).is(d)))g.nodeType===1&&e.push(g),g=g[c];return e},nth:function(a,b,c,d){b=b||1;var e=0;for(;a;a=a[c])if(a.nodeType===1&&++e===b)break;return a},sibling:function(a,b){var c=[];for(;a;a=a.nextSibling)a.nodeType===1&&a!==b&&c.push(a);return c}});var V="abbr|article|aside|audio|canvas|datalist|details|figcaption|figure|footer|header|hgroup|mark|meter|nav|output|progress|section|summary|time|video",W=/ jQuery\d+="(?:\d+|null)"/g,X=/^\s+/,Y=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/ig,Z=/<([\w:]+)/,$=/<tbody/i,_=/<|&#?\w+;/,ba=/<(?:script|style)/i,bb=/<(?:script|object|embed|option|style)/i,bc=new RegExp("<(?:"+V+")","i"),bd=/checked\s*(?:[^=]|=\s*.checked.)/i,be=/\/(java|ecma)script/i,bf=/^\s*<!(?:\[CDATA\[|\-\-)/,bg={option:[1,"<select multiple='multiple'>","</select>"],legend:[1,"<fieldset>","</fieldset>"],thead:[1,"<table>","</table>"],tr:[2,"<table><tbody>","</tbody></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],col:[2,"<table><tbody></tbody><colgroup>","</colgroup></table>"],area:[1,"<map>","</map>"],_default:[0,"",""]},bh=U(c);bg.optgroup=bg.option,bg.tbody=bg.tfoot=bg.colgroup=bg.caption=bg.thead,bg.th=bg.td,f.support.htmlSerialize||(bg._default=[1,"div<div>","</div>"]),f.fn.extend({text:function(a){if(f.isFunction(a))return this.each(function(b){var c=f(this);c.text(a.call(this,b,c.text()))});if(typeof a!="object"&&a!==b)return this.empty().append((this[0]&&this[0].ownerDocument||c).createTextNode(a));return f.text(this)},wrapAll:function(a){if(f.isFunction(a))return this.each(function(b){f(this).wrapAll(a.call(this,b))});if(this[0]){var b=f(a,this[0].ownerDocument).eq(0).clone(!0);this[0].parentNode&&b.insertBefore(this[0]),b.map(function(){var a=this;while(a.firstChild&&a.firstChild.nodeType===1)a=a.firstChild;return a}).append(this)}return this},wrapInner:function(a){if(f.isFunction(a))return this.each(function(b){f(this).wrapInner(a.call(this,b))});return this.each(function(){var b=f(this),c=b.contents();c.length?c.wrapAll(a):b.append(a)})},wrap:function(a){var b=f.isFunction(a);return this.each(function(c){f(this).wrapAll(b?a.call(this,c):a)})},unwrap:function(){return this.parent().each(function(){f.nodeName(this,"body")||f(this).replaceWith(this.childNodes)}).end()},append:function(){return this.domManip(arguments,!0,function(a){this.nodeType===1&&this.appendChild(a)})},prepend:function(){return this.domManip(arguments,!0,function(a){this.nodeType===1&&this.insertBefore(a,this.firstChild)})},before:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this)});if(arguments.length){var a=f.clean(arguments);a.push.apply(a,this.toArray());return this.pushStack(a,"before",arguments)}},after:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this.nextSibling)});if(arguments.length){var a=this.pushStack(this,"after",arguments);a.push.apply(a,f.clean(arguments));return a}},remove:function(a,b){for(var c=0,d;(d=this[c])!=null;c++)if(!a||f.filter(a,[d]).length)!b&&d.nodeType===1&&(f.cleanData(d.getElementsByTagName("*")),f.cleanData([d])),d.parentNode&&d.parentNode.removeChild(d);return this},empty:function()
-{for(var a=0,b;(b=this[a])!=null;a++){b.nodeType===1&&f.cleanData(b.getElementsByTagName("*"));while(b.firstChild)b.removeChild(b.firstChild)}return this},clone:function(a,b){a=a==null?!1:a,b=b==null?a:b;return this.map(function(){return f.clone(this,a,b)})},html:function(a){if(a===b)return this[0]&&this[0].nodeType===1?this[0].innerHTML.replace(W,""):null;if(typeof a=="string"&&!ba.test(a)&&(f.support.leadingWhitespace||!X.test(a))&&!bg[(Z.exec(a)||["",""])[1].toLowerCase()]){a=a.replace(Y,"<$1></$2>");try{for(var c=0,d=this.length;c<d;c++)this[c].nodeType===1&&(f.cleanData(this[c].getElementsByTagName("*")),this[c].innerHTML=a)}catch(e){this.empty().append(a)}}else f.isFunction(a)?this.each(function(b){var c=f(this);c.html(a.call(this,b,c.html()))}):this.empty().append(a);return this},replaceWith:function(a){if(this[0]&&this[0].parentNode){if(f.isFunction(a))return this.each(function(b){var c=f(this),d=c.html();c.replaceWith(a.call(this,b,d))});typeof a!="string"&&(a=f(a).detach());return this.each(function(){var b=this.nextSibling,c=this.parentNode;f(this).remove(),b?f(b).before(a):f(c).append(a)})}return this.length?this.pushStack(f(f.isFunction(a)?a():a),"replaceWith",a):this},detach:function(a){return this.remove(a,!0)},domManip:function(a,c,d){var e,g,h,i,j=a[0],k=[];if(!f.support.checkClone&&arguments.length===3&&typeof j=="string"&&bd.test(j))return this.each(function(){f(this).domManip(a,c,d,!0)});if(f.isFunction(j))return this.each(function(e){var g=f(this);a[0]=j.call(this,e,c?g.html():b),g.domManip(a,c,d)});if(this[0]){i=j&&j.parentNode,f.support.parentNode&&i&&i.nodeType===11&&i.childNodes.length===this.length?e={fragment:i}:e=f.buildFragment(a,this,k),h=e.fragment,h.childNodes.length===1?g=h=h.firstChild:g=h.firstChild;if(g){c=c&&f.nodeName(g,"tr");for(var l=0,m=this.length,n=m-1;l<m;l++)d.call(c?bi(this[l],g):this[l],e.cacheable||m>1&&l<n?f.clone(h,!0,!0):h)}k.length&&f.each(k,bp)}return this}}),f.buildFragment=function(a,b,d){var e,g,h,i,j=a[0];b&&b[0]&&(i=b[0].ownerDocument||b[0]),i.createDocumentFragment||(i=c),a.length===1&&typeof j=="string"&&j.length<512&&i===c&&j.charAt(0)==="<"&&!bb.test(j)&&(f.support.checkClone||!bd.test(j))&&(f.support.html5Clone||!bc.test(j))&&(g=!0,h=f.fragments[j],h&&h!==1&&(e=h)),e||(e=i.createDocumentFragment(),f.clean(a,i,e,d)),g&&(f.fragments[j]=h?e:1);return{fragment:e,cacheable:g}},f.fragments={},f.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){f.fn[a]=function(c){var d=[],e=f(c),g=this.length===1&&this[0].parentNode;if(g&&g.nodeType===11&&g.childNodes.length===1&&e.length===1){e[b](this[0]);return this}for(var h=0,i=e.length;h<i;h++){var j=(h>0?this.clone(!0):this).get();f(e[h])[b](j),d=d.concat(j)}return this.pushStack(d,a,e.selector)}}),f.extend({clone:function(a,b,c){var d,e,g,h=f.support.html5Clone||!bc.test("<"+a.nodeName)?a.cloneNode(!0):bo(a);if((!f.support.noCloneEvent||!f.support.noCloneChecked)&&(a.nodeType===1||a.nodeType===11)&&!f.isXMLDoc(a)){bk(a,h),d=bl(a),e=bl(h);for(g=0;d[g];++g)e[g]&&bk(d[g],e[g])}if(b){bj(a,h);if(c){d=bl(a),e=bl(h);for(g=0;d[g];++g)bj(d[g],e[g])}}d=e=null;return h},clean:function(a,b,d,e){var g;b=b||c,typeof b.createElement=="undefined"&&(b=b.ownerDocument||b[0]&&b[0].ownerDocument||c);var h=[],i;for(var j=0,k;(k=a[j])!=null;j++){typeof k=="number"&&(k+="");if(!k)continue;if(typeof k=="string")if(!_.test(k))k=b.createTextNode(k);else{k=k.replace(Y,"<$1></$2>");var l=(Z.exec(k)||["",""])[1].toLowerCase(),m=bg[l]||bg._default,n=m[0],o=b.createElement("div");b===c?bh.appendChild(o):U(b).appendChild(o),o.innerHTML=m[1]+k+m[2];while(n--)o=o.lastChild;if(!f.support.tbody){var p=$.test(k),q=l==="table"&&!p?o.firstChild&&o.firstChild.childNodes:m[1]==="<table>"&&!p?o.childNodes:[];for(i=q.length-1;i>=0;--i)f.nodeName(q[i],"tbody")&&!q[i].childNodes.length&&q[i].parentNode.removeChild(q[i])}!f.support.leadingWhitespace&&X.test(k)&&o.insertBefore(b.createTextNode(X.exec(k)[0]),o.firstChild),k=o.childNodes}var r;if(!f.support.appendChecked)if(k[0]&&typeof (r=k.length)=="number")for(i=0;i<r;i++)bn(k[i]);else bn(k);k.nodeType?h.push(k):h=f.merge(h,k)}if(d){g=function(a){return!a.type||be.test(a.type)};for(j=0;h[j];j++)if(e&&f.nodeName(h[j],"script")&&(!h[j].type||h[j].type.toLowerCase()==="text/javascript"))e.push(h[j].parentNode?h[j].parentNode.removeChild(h[j]):h[j]);else{if(h[j].nodeType===1){var s=f.grep(h[j].getElementsByTagName("script"),g);h.splice.apply(h,[j+1,0].concat(s))}d.appendChild(h[j])}}return h},cleanData:function(a){var b,c,d=f.cache,e=f.event.special,g=f.support.deleteExpando;for(var h=0,i;(i=a[h])!=null;h++){if(i.nodeName&&f.noData[i.nodeName.toLowerCase()])continue;c=i[f.expando];if(c){b=d[c];if(b&&b.events){for(var j in b.events)e[j]?f.event.remove(i,j):f.removeEvent(i,j,b.handle);b.handle&&(b.handle.elem=null)}g?delete i[f.expando]:i.removeAttribute&&i.removeAttribute(f.expando),delete d[c]}}}});var bq=/alpha\([^)]*\)/i,br=/opacity=([^)]*)/,bs=/([A-Z]|^ms)/g,bt=/^-?\d+(?:px)?$/i,bu=/^-?\d/,bv=/^([\-+])=([\-+.\de]+)/,bw={position:"absolute",visibility:"hidden",display:"block"},bx=["Left","Right"],by=["Top","Bottom"],bz,bA,bB;f.fn.css=function(a,c){if(arguments.length===2&&c===b)return this;return f.access(this,a,c,!0,function(a,c,d){return d!==b?f.style(a,c,d):f.css(a,c)})},f.extend({cssHooks:{opacity:{get:function(a,b){if(b){var c=bz(a,"opacity","opacity");return c===""?"1":c}return a.style.opacity}}},cssNumber:{fillOpacity:!0,fontWeight:!0,lineHeight:!0,opacity:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{"float":f.support.cssFloat?"cssFloat":"styleFloat"},style:function(a,c,d,e){if(!!a&&a.nodeType!==3&&a.nodeType!==8&&!!a.style){var g,h,i=f.camelCase(c),j=a.style,k=f.cssHooks[i];c=f.cssProps[i]||i;if(d===b){if(k&&"get"in k&&(g=k.get(a,!1,e))!==b)return g;return j[c]}h=typeof d,h==="string"&&(g=bv.exec(d))&&(d=+(g[1]+1)*+g[2]+parseFloat(f.css(a,c)),h="number");if(d==null||h==="number"&&isNaN(d))return;h==="number"&&!f.cssNumber[i]&&(d+="px");if(!k||!("set"in k)||(d=k.set(a,d))!==b)try{j[c]=d}catch(l){}}},css:function(a,c,d){var e,g;c=f.camelCase(c),g=f.cssHooks[c],c=f.cssProps[c]||c,c==="cssFloat"&&(c="float");if(g&&"get"in g&&(e=g.get(a,!0,d))!==b)return e;if(bz)return bz(a,c)},swap:function(a,b,c){var d={};for(var e in b)d[e]=a.style[e],a.style[e]=b[e];c.call(a);for(e in b)a.style[e]=d[e]}}),f.curCSS=f.css,f.each(["height","width"],function(a,b){f.cssHooks[b]={get:function(a,c,d){var e;if(c){if(a.offsetWidth!==0)return bC(a,b,d);f.swap(a,bw,function(){e=bC(a,b,d)});return e}},set:function(a,b){if(!bt.test(b))return b;b=parseFloat(b);if(b>=0)return b+"px"}}}),f.support.opacity||(f.cssHooks.opacity={get:function(a,b){return br.test((b&&a.currentStyle?a.currentStyle.filter:a.style.filter)||"")?parseFloat(RegExp.$1)/100+"":b?"1":""},set:function(a,b){var c=a.style,d=a.currentStyle,e=f.isNumeric(b)?"alpha(opacity="+b*100+")":"",g=d&&d.filter||c.filter||"";c.zoom=1;if(b>=1&&f.trim(g.replace(bq,""))===""){c.removeAttribute("filter");if(d&&!d.filter)return}c.filter=bq.test(g)?g.replace(bq,e):g+" "+e}}),f(function(){f.support.reliableMarginRight||(f.cssHooks.marginRight={get:function(a,b){var c;f.swap(a,{display:"inline-block"},function(){b?c=bz(a,"margin-right","marginRight"):c=a.style.marginRight});return c}})}),c.defaultView&&c.defaultView.getComputedStyle&&(bA=function(a,b){var c,d,e;b=b.replace(bs,"-$1").toLowerCase(),(d=a.ownerDocument.defaultView)&&(e=d.getComputedStyle(a,null))&&(c=e.getPropertyValue(b),c===""&&!f.contains(a.ownerDocument.documentElement,a)&&(c=f.style(a,b)));return c}),c.documentElement.currentStyle&&(bB=function(a,b){var c,d,e,f=a.currentStyle&&a.currentStyle[b],g=a.style;f===null&&g&&(e=g[b])&&(f=e),!bt.test(f)&&bu.test(f)&&(c=g.left,d=a.runtimeStyle&&a.runtimeStyle.left,d&&(a.runtimeStyle.left=a.currentStyle.left),g.left=b==="fontSize"?"1em":f||0,f=g.pixelLeft+"px",g.left=c,d&&(a.runtimeStyle.left=d));return f===""?"auto":f}),bz=bA||bB,f.expr&&f.expr.filters&&(f.expr.filters.hidden=function(a){var b=a.offsetWidth,c=a.offsetHeight;return b===0&&c===0||!f.support.reliableHiddenOffsets&&(a.style&&a.style.display||f.css(a,"display"))==="none"},f.expr.filters.visible=function(a){return!f.expr.filters.hidden(a)});var bD=/%20/g,bE=/\[\]$/,bF=/\r?\n/g,bG=/#.*$/,bH=/^(.*?):[ \t]*([^\r\n]*)\r?$/mg,bI=/^(?:color|date|datetime|datetime-local|email|hidden|month|number|password|range|search|tel|text|time|url|week)$/i,bJ=/^(?:about|app|app\-storage|.+\-extension|file|res|widget):$/,bK=/^(?:GET|HEAD)$/,bL=/^\/\//,bM=/\?/,bN=/<script\b[^<]*(?:(?!<\/script>)<[^<]*)*<\/script>/gi,bO=/^(?:select|textarea)/i,bP=/\s+/,bQ=/([?&])_=[^&]*/,bR=/^([\w\+\.\-]+:)(?:\/\/([^\/?#:]*)(?::(\d+))?)?/,bS=f.fn.load,bT={},bU={},bV,bW,bX=["*/"]+["*"];try{bV=e.href}catch(bY){bV=c.createElement("a"),bV.href="",bV=bV.href}bW=bR.exec(bV.toLowerCase())||[],f.fn.extend({load:function(a,c,d){if(typeof a!="string"&&bS)return bS.apply(this,arguments);if(!this.length)return this;var e=a.indexOf(" ");if(e>=0){var g=a.slice(e,a.length);a=a.slice(0,e)}var h="GET";c&&(f.isFunction(c)?(d=c,c=b):typeof c=="object"&&(c=f.param(c,f.ajaxSettings.traditional),h="POST"));var i=this;f.ajax({url:a,type:h,dataType:"html",data:c,complete:function(a,b,c){c=a.responseText,a.isResolved()&&(a.done(function(a){c=a}),i.html(g?f("<div>").append(c.replace(bN,"")).find(g):c)),d&&i.each(d,[c,b,a])}});return this},serialize:function(){return f.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?f.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||bO.test(this.nodeName)||bI.test(this.type))}).map(function(a,b){var c=f(this).val();return c==null?null:f.isArray(c)?f.map(c,function(a,c){return{name:b.name,value:a.replace(bF,"\r\n")}}):{name:b.name,value:c.replace(bF,"\r\n")}}).get()}}),f.each("ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "),function(a,b){f.fn[b]=function(a){return this.on(b,a)}}),f.each(["get","post"],function(a,c){f[c]=function(a,d,e,g){f.isFunction(d)&&(g=g||e,e=d,d=b);return f.ajax({type:c,url:a,data:d,success:e,dataType:g})}}),f.extend({getScript:function(a,c){return f.get(a,b,c,"script")},getJSON:function(a,b,c){return f.get(a,b,c,"json")},ajaxSetup:function(a,b){b?b_(a,f.ajaxSettings):(b=a,a=f.ajaxSettings),b_(a,b);return a},ajaxSettings:{url:bV,isLocal:bJ.test(bW[1]),global:!0,type:"GET",contentType:"application/x-www-form-urlencoded",processData:!0,async:!0,accepts:{xml:"application/xml, text/xml",html:"text/html",text:"text/plain",json:"application/json, text/javascript","*":bX},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText"},converters:{"* text":a.String,"text html":!0,"text json":f.parseJSON,"text xml":f.parseXML},flatOptions:{context:!0,url:!0}},ajaxPrefilter:bZ(bT),ajaxTransport:bZ(bU),ajax:function(a,c){function w(a,c,l,m){if(s!==2){s=2,q&&clearTimeout(q),p=b,n=m||"",v.readyState=a>0?4:0;var o,r,u,w=c,x=l?cb(d,v,l):b,y,z;if(a>=200&&a<300||a===304){if(d.ifModified){if(y=v.getResponseHeader("Last-Modified"))f.lastModified[k]=y;if(z=v.getResponseHeader("Etag"))f.etag[k]=z}if(a===304)w="notmodified",o=!0;else try{r=cc(d,x),w="success",o=!0}catch(A){w="parsererror",u=A}}else{u=w;if(!w||a)w="error",a<0&&(a=0)}v.status=a,v.statusText=""+(c||w),o?h.resolveWith(e,[r,w,v]):h.rejectWith(e,[v,w,u]),v.statusCode(j),j=b,t&&g.trigger("ajax"+(o?"Success":"Error"),[v,d,o?r:u]),i.fireWith(e,[v,w]),t&&(g.trigger("ajaxComplete",[v,d]),--f.active||f.event.trigger("ajaxStop"))}}typeof a=="object"&&(c=a,a=b),c=c||{};var d=f.ajaxSetup({},c),e=d.context||d,g=e!==d&&(e.nodeType||e instanceof f)?f(e):f.event,h=f.Deferred(),i=f.Callbacks("once memory"),j=d.statusCode||{},k,l={},m={},n,o,p,q,r,s=0,t,u,v={readyState:0,setRequestHeader:function(a,b){if(!s){var c=a.toLowerCase();a=m[c]=m[c]||a,l[a]=b}return this},getAllResponseHeaders:function(){return s===2?n:null},getResponseHeader:function(a){var c;if(s===2){if(!o){o={};while(c=bH.exec(n))o[c[1].toLowerCase()]=c[2]}c=o[a.toLowerCase()]}return c===b?null:c},overrideMimeType:function(a){s||(d.mimeType=a);return this},abort:function(a){a=a||"abort",p&&p.abort(a),w(0,a);return this}};h.promise(v),v.success=v.done,v.error=v.fail,v.complete=i.add,v.statusCode=function(a){if(a){var b;if(s<2)for(b in a)j[b]=[j[b],a[b]];else b=a[v.status],v.then(b,b)}return this},d.url=((a||d.url)+"").replace(bG,"").replace(bL,bW[1]+"//"),d.dataTypes=f.trim(d.dataType||"*").toLowerCase().split(bP),d.crossDomain==null&&(r=bR.exec(d.url.toLowerCase()),d.crossDomain=!(!r||r[1]==bW[1]&&r[2]==bW[2]&&(r[3]||(r[1]==="http:"?80:443))==(bW[3]||(bW[1]==="http:"?80:443)))),d.data&&d.processData&&typeof d.data!="string"&&(d.data=f.param(d.data,d.traditional)),b$(bT,d,c,v);if(s===2)return!1;t=d.global,d.type=d.type.toUpperCase(),d.hasContent=!bK.test(d.type),t&&f.active++===0&&f.event.trigger("ajaxStart");if(!d.hasContent){d.data&&(d.url+=(bM.test(d.url)?"&":"?")+d.data,delete d.data),k=d.url;if(d.cache===!1){var x=f.now(),y=d.url.replace(bQ,"$1_="+x);d.url=y+(y===d.url?(bM.test(d.url)?"&":"?")+"_="+x:"")}}(d.data&&d.hasContent&&d.contentType!==!1||c.contentType)&&v.setRequestHeader("Content-Type",d.contentType),d.ifModified&&(k=k||d.url,f.lastModified[k]&&v.setRequestHeader("If-Modified-Since",f.lastModified[k]),f.etag[k]&&v.setRequestHeader("If-None-Match",f.etag[k])),v.setRequestHeader("Accept",d.dataTypes[0]&&d.accepts[d.dataTypes[0]]?d.accepts[d.dataTypes[0]]+(d.dataTypes[0]!=="*"?", "+bX+"; q=0.01":""):d.accepts["*"]);for(u in d.headers)v.setRequestHeader(u,d.headers[u]);if(d.beforeSend&&(d.beforeSend.call(e,v,d)===!1||s===2)){v.abort();return!1}for(u in{success:1,error:1,complete:1})v[u](d[u]);p=b$(bU,d,c,v);if(!p)w(-1,"No Transport");else{v.readyState=1,t&&g.trigger("ajaxSend",[v,d]),d.async&&d.timeout>0&&(q=setTimeout(function(){v.abort("timeout")},d.timeout));try{s=1,p.send(l,w)}catch(z){if(s<2)w(-1,z);else throw z}}return v},param:function(a,c){var d=[],e=function(a,b){b=f.isFunction(b)?b():b,d[d.length]=encodeURIComponent(a)+"="+encodeURIComponent(b)};c===b&&(c=f.ajaxSettings.traditional);if(f.isArray(a)||a.jquery&&!f.isPlainObject(a))f.each(a,function(){e(this.name,this.value)});else for(var g in a)ca(g,a[g],c,e);return d.join("&").replace(bD,"+")}}),f.extend({active:0,lastModified:{},etag:{}});var cd=f.now(),ce=/(\=)\?(&|$)|\?\?/i;f.ajaxSetup({jsonp:"callback",jsonpCallback:function(){return f.expando+"_"+cd++}}),f.ajaxPrefilter("json jsonp",function(b,c,d){var e=b.contentType==="application/x-www-form-urlencoded"&&typeof b.data=="string";if(b.dataTypes[0]==="jsonp"||b.jsonp!==!1&&(ce.test(b.url)||e&&ce.test(b.data))){var g,h=b.jsonpCallback=f.isFunction(b.jsonpCallback)?b.jsonpCallback():b.jsonpCallback,i=a[h],j=b.url,k=b.data,l="$1"+h+"$2";b.jsonp!==!1&&(j=j.replace(ce,l),b.url===j&&(e&&(k=k.replace(ce,l)),b.data===k&&(j+=(/\?/.test(j)?"&":"?")+b.jsonp+"="+h))),b.url=j,b.data=k,a[h]=function(a){g=[a]},d.always(function(){a[h]=i,g&&f.isFunction(i)&&a[h](g[0])}),b.converters["script json"]=function(){g||f.error(h+" was not called");return g[0]},b.dataTypes[0]="json";return"script"}}),f.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/javascript|ecmascript/},converters:{"text script":function(a){f.globalEval(a);return a}}}),f.ajaxPrefilter("script",function(a){a.cache===b&&(a.cache=!1),a.crossDomain&&(a.type="GET",a.global=!1)}),f.ajaxTransport("script",function(a){if(a.crossDomain){var d,e=c.head||c.getElementsByTagName("head")[0]||c.documentElement;return{send:function(f,g){d=c.createElement("script"),d.async="async",a.scriptCharset&&(d.charset=a.scriptCharset),d.src=a.url,d.onload=d.onreadystatechange=function(a,c){if(c||!d.readyState||/loaded|complete/.test(d.readyState))d.onload=d.onreadystatechange=null,e&&d.parentNode&&e.removeChild(d),d=b,c||g(200,"success")},e.insertBefore(d,e.firstChild)},abort:function(){d&&d.onload(0,1)}}}});var cf=a.ActiveXObject?function(){for(var a in ch)ch[a](0,1)}:!1,cg=0,ch;f.ajaxSettings.xhr=a.ActiveXObject?function(){return!this.isLocal&&ci()||cj()}:ci,function(a){f.extend(f.support,{ajax:!!a,cors:!!a&&"withCredentials"in a})}(f.ajaxSettings.xhr()),f.support.ajax&&f.ajaxTransport(function(c){if(!c.crossDomain||f.support.cors){var d;return{send:function(e,g){var h=c.xhr(),i,j;c.username?h.open(c.type,c.url,c.async,c.username,c.password):h.open(c.type,c.url,c.async);if(c.xhrFields)for(j in c.xhrFields)h[j]=c.xhrFields[j];c.mimeType&&h.overrideMimeType&&h.overrideMimeType(c.mimeType),!c.crossDomain&&!e["X-Requested-With"]&&(e["X-Requested-With"]="XMLHttpRequest");try{for(j in e)h.setRequestHeader(j,e[j])}catch(k){}h.send(c.hasContent&&c.data||null),d=function(a,e){var j,k,l,m,n;try{if(d&&(e||h.readyState===4)){d=b,i&&(h.onreadystatechange=f.noop,cf&&delete ch[i]);if(e)h.readyState!==4&&h.abort();else{j=h.status,l=h.getAllResponseHeaders(),m={},n=h.responseXML,n&&n.documentElement&&(m.xml=n),m.text=h.responseText;try{k=h.statusText}catch(o){k=""}!j&&c.isLocal&&!c.crossDomain?j=m.text?200:404:j===1223&&(j=204)}}}catch(p){e||g(-1,p)}m&&g(j,k,m,l)},!c.async||h.readyState===4?d():(i=++cg,cf&&(ch||(ch={},f(a).unload(cf)),ch[i]=d),h.onreadystatechange=d)},abort:function(){d&&d(0,1)}}}});var ck={},cl,cm,cn=/^(?:toggle|show|hide)$/,co=/^([+\-]=)?([\d+.\-]+)([a-z%]*)$/i,cp,cq=[["height","marginTop","marginBottom","paddingTop","paddingBottom"],["width","marginLeft","marginRight","paddingLeft","paddingRight"],["opacity"]],cr;f.fn.extend({show:function(a,b,c){var d,e;if(a||a===0)return this.animate(cu("show",3),a,b,c);for(var g=0,h=this.length;g<h;g++)d=this[g],d.style&&(e=d.style.display,!f._data(d,"olddisplay")&&e==="none"&&(e=d.style.display=""),e===""&&f.css(d,"display")==="none"&&f._data(d,"olddisplay",cv(d.nodeName)));for(g=0;g<h;g++){d=this[g];if(d.style){e=d.style.display;if(e===""||e==="none")d.style.display=f._data(d,"olddisplay")||""}}return this},hide:function(a,b,c){if(a||a===0)return this.animate(cu("hide",3),a,b,c);var d,e,g=0,h=this.length;for(;g<h;g++)d=this[g],d.style&&(e=f.css(d,"display"),e!=="none"&&!f._data(d,"olddisplay")&&f._data(d,"olddisplay",e));for(g=0;g<h;g++)this[g].style&&(this[g].style.display="none");return this},_toggle:f.fn.toggle,toggle:function(a,b,c){var d=typeof a=="boolean";f.isFunction(a)&&f.isFunction(b)?this._toggle.apply(this,arguments):a==null||d?this.each(function(){var b=d?a:f(this).is(":hidden");f(this)[b?"show":"hide"]()}):this.animate(cu("toggle",3),a,b,c);return this},fadeTo:function(a,b,c,d){return this.filter(":hidden").css("opacity",0).show().end().animate({opacity:b},a,c,d)},animate:function(a,b,c,d){function g(){e.queue===!1&&f._mark(this);var b=f.extend({},e),c=this.nodeType===1,d=c&&f(this).is(":hidden"),g,h,i,j,k,l,m,n,o;b.animatedProperties={};for(i in a){g=f.camelCase(i),i!==g&&(a[g]=a[i],delete a[i]),h=a[g],f.isArray(h)?(b.animatedProperties[g]=h[1],h=a[g]=h[0]):b.animatedProperties[g]=b.specialEasing&&b.specialEasing[g]||b.easing||"swing";if(h==="hide"&&d||h==="show"&&!d)return b.complete.call(this);c&&(g==="height"||g==="width")&&(b.overflow=[this.style.overflow,this.style.overflowX,this.style.overflowY],f.css(this,"display")==="inline"&&f.css(this,"float")==="none"&&(!f.support.inlineBlockNeedsLayout||cv(this.nodeName)==="inline"?this.style.display="inline-block":this.style.zoom=1))}b.overflow!=null&&(this.style.overflow="hidden");for(i in a)j=new f.fx(this,b,i),h=a[i],cn.test(h)?(o=f._data(this,"toggle"+i)||(h==="toggle"?d?"show":"hide":0),o?(f._data(this,"toggle"+i,o==="show"?"hide":"show"),j[o]()):j[h]()):(k=co.exec(h),l=j.cur(),k?(m=parseFloat(k[2]),n=k[3]||(f.cssNumber[i]?"":"px"),n!=="px"&&(f.style(this,i,(m||1)+n),l=(m||1)/j.cur()*l,f.style(this,i,l+n)),k[1]&&(m=(k[1]==="-="?-1:1)*m+l),j.custom(l,m,n)):j.custom(l,h,""));return!0}var e=f.speed(b,c,d);if(f.isEmptyObject(a))return this.each(e.complete,[!1]);a=f.extend({},a);return e.queue===!1?this.each(g):this.queue(e.queue,g)},stop:function(a,c,d){typeof a!="string"&&(d=c,c=a,a=b),c&&a!==!1&&this.queue(a||"fx",[]);return this.each(function(){function h(a,b,c){var e=b[c];f.removeData(a,c,!0),e.stop(d)}var b,c=!1,e=f.timers,g=f._data(this);d||f._unmark(!0,this);if(a==null)for(b in g)g[b]&&g[b].stop&&b.indexOf(".run")===b.length-4&&h(this,g,b);else g[b=a+".run"]&&g[b].stop&&h(this,g,b);for(b=e.length;b--;)e[b].elem===this&&(a==null||e[b].queue===a)&&(d?e[b](!0):e[b].saveState(),c=!0,e.splice(b,1));(!d||!c)&&f.dequeue(this,a)})}}),f.each({slideDown:cu("show",1),slideUp:cu("hide",1),slideToggle:cu("toggle",1),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(a,b){f.fn[a]=function(a,c,d){return this.animate(b,a,c,d)}}),f.extend({speed:function(a,b,c){var d=a&&typeof a=="object"?f.extend({},a):{complete:c||!c&&b||f.isFunction(a)&&a,duration:a,easing:c&&b||b&&!f.isFunction(b)&&b};d.duration=f.fx.off?0:typeof d.duration=="number"?d.duration:d.duration in f.fx.speeds?f.fx.speeds[d.duration]:f.fx.speeds._default;if(d.queue==null||d.queue===!0)d.queue="fx";d.old=d.complete,d.complete=function(a){f.isFunction(d.old)&&d.old.call(this),d.queue?f.dequeue(this,d.queue):a!==!1&&f._unmark(this)};return d},easing:{linear:function(a,b,c,d){return c+d*a},swing:function(a,b,c,d){return(-Math.cos(a*Math.PI)/2+.5)*d+c}},timers:[],fx:function(a,b,c){this.options=b,this.elem=a,this.prop=c,b.orig=b.orig||{}}}),f.fx.prototype={update:function(){this.options.step&&this.options.step.call(this.elem,this.now,this),(f.fx.step[this.prop]||f.fx.step._default)(this)},cur:function(){if(this.elem[this.prop]!=null&&(!this.elem.style||this.elem.style[this.prop]==null))return this.elem[this.prop];var a,b=f.css(this.elem,this.prop);return isNaN(a=parseFloat(b))?!b||b==="auto"?0:b:a},custom:function(a,c,d){function h(a){return e.step(a)}var e=this,g=f.fx;this.startTime=cr||cs(),this.end=c,this.now=this.start=a,this.pos=this.state=0,this.unit=d||this.unit||(f.cssNumber[this.prop]?"":"px"),h.queue=this.options.queue,h.elem=this.elem,h.saveState=function(){e.options.hide&&f._data(e.elem,"fxshow"+e.prop)===b&&f._data(e.elem,"fxshow"+e.prop,e.start)},h()&&f.timers.push(h)&&!cp&&(cp=setInterval(g.tick,g.interval))},show:function(){var a=f._data(this.elem,"fxshow"+this.prop);this.options.orig[this.prop]=a||f.style(this.elem,this.prop),this.options.show=!0,a!==b?this.custom(this.cur(),a):this.custom(this.prop==="width"||this.prop==="height"?1:0,this.cur()),f(this.elem).show()},hide:function(){this.options.orig[this.prop]=f._data(this.elem,"fxshow"+this.prop)||f.style(this.elem,this.prop),this.options.hide=!0,this.custom(this.cur(),0)},step:function(a){var b,c,d,e=cr||cs(),g=!0,h=this.elem,i=this.options;if(a||e>=i.duration+this.startTime){this.now=this.end,this.pos=this.state=1,this.update(),i.animatedProperties[this.prop]=!0;for(b in i.animatedProperties)i.animatedProperties[b]!==!0&&(g=!1);if(g){i.overflow!=null&&!f.support.shrinkWrapBlocks&&f.each(["","X","Y"],function(a,b){h.style["overflow"+b]=i.overflow[a]}),i.hide&&f(h).hide();if(i.hide||i.show)for(b in i.animatedProperties)f.style(h,b,i.orig[b]),f.removeData(h,"fxshow"+b,!0),f.removeData(h,"toggle"+b,!0);d=i.complete,d&&(i.complete=!1,d.call(h))}return!1}i.duration==Infinity?this.now=e:(c=e-this.startTime,this.state=c/i.duration,this.pos=f.easing[i.animatedProperties[this.prop]](this.state,c,0,1,i.duration),this.now=this.start+(this.end-this.start)*this.pos),this.update();return!0}},f.extend(f.fx,{tick:function(){var a,b=f.timers,c=0;for(;c<b.length;c++)a=b[c],!a()&&b[c]===a&&b.splice(c--,1);b.length||f.fx.stop()},interval:13,stop:function(){clearInterval(cp),cp=null},speeds:{slow:600,fast:200,_default:400},step:{opacity:function(a){f.style(a.elem,"opacity",a.now)},_default:function(a){a.elem.style&&a.elem.style[a.prop]!=null?a.elem.style[a.prop]=a.now+a.unit:a.elem[a.prop]=a.now}}}),f.each(["width","height"],function(a,b){f.fx.step[b]=function(a){f.style(a.elem,b,Math.max(0,a.now)+a.unit)}}),f.expr&&f.expr.filters&&(f.expr.filters.animated=function(a){return f.grep(f.timers,function(b){return a===b.elem}).length});var cw=/^t(?:able|d|h)$/i,cx=/^(?:body|html)$/i;"getBoundingClientRect"in c.documentElement?f.fn.offset=function(a){var b=this[0],c;if(a)return this.each(function(b){f.offset.setOffset(this,a,b)});if(!b||!b.ownerDocument)return null;if(b===b.ownerDocument.body)return f.offset.bodyOffset(b);try{c=b.getBoundingClientRect()}catch(d){}var e=b.ownerDocument,g=e.documentElement;if(!c||!f.contains(g,b))return c?{top:c.top,left:c.left}:{top:0,left:0};var h=e.body,i=cy(e),j=g.clientTop||h.clientTop||0,k=g.clientLeft||h.clientLeft||0,l=i.pageYOffset||f.support.boxModel&&g.scrollTop||h.scrollTop,m=i.pageXOffset||f.support.boxModel&&g.scrollLeft||h.scrollLeft,n=c.top+l-j,o=c.left+m-k;return{top:n,left:o}}:f.fn.offset=function(a){var b=this[0];if(a)return this.each(function(b){f.offset.setOffset(this,a,b)});if(!b||!b.ownerDocument)return null;if(b===b.ownerDocument.body)return f.offset.bodyOffset(b);var c,d=b.offsetParent,e=b,g=b.ownerDocument,h=g.documentElement,i=g.body,j=g.defaultView,k=j?j.getComputedStyle(b,null):b.currentStyle,l=b.offsetTop,m=b.offsetLeft;while((b=b.parentNode)&&b!==i&&b!==h){if(f.support.fixedPosition&&k.position==="fixed")break;c=j?j.getComputedStyle(b,null):b.currentStyle,l-=b.scrollTop,m-=b.scrollLeft,b===d&&(l+=b.offsetTop,m+=b.offsetLeft,f.support.doesNotAddBorder&&(!f.support.doesAddBorderForTableAndCells||!cw.test(b.nodeName))&&(l+=parseFloat(c.borderTopWidth)||0,m+=parseFloat(c.borderLeftWidth)||0),e=d,d=b.offsetParent),f.support.subtractsBorderForOverflowNotVisible&&c.overflow!=="visible"&&(l+=parseFloat(c.borderTopWidth)||0,m+=parseFloat(c.borderLeftWidth)||0),k=c}if(k.position==="relative"||k.position==="static")l+=i.offsetTop,m+=i.offsetLeft;f.support.fixedPosition&&k.position==="fixed"&&(l+=Math.max(h.scrollTop,i.scrollTop),m+=Math.max(h.scrollLeft,i.scrollLeft));return{top:l,left:m}},f.offset={bodyOffset:function(a){var b=a.offsetTop,c=a.offsetLeft;f.support.doesNotIncludeMarginInBodyOffset&&(b+=parseFloat(f.css(a,"marginTop"))||0,c+=parseFloat(f.css(a,"marginLeft"))||0);return{top:b,left:c}},setOffset:function(a,b,c){var d=f.css(a,"position");d==="static"&&(a.style.position="relative");var e=f(a),g=e.offset(),h=f.css(a,"top"),i=f.css(a,"left"),j=(d==="absolute"||d==="fixed")&&f.inArray("auto",[h,i])>-1,k={},l={},m,n;j?(l=e.position(),m=l.top,n=l.left):(m=parseFloat(h)||0,n=parseFloat(i)||0),f.isFunction(b)&&(b=b.call(a,c,g)),b.top!=null&&(k.top=b.top-g.top+m),b.left!=null&&(k.left=b.left-g.left+n),"using"in b?b.using.call(a,k):e.css(k)}},f.fn.extend({position:function(){if(!this[0])return null;var a=this[0],b=this.offsetParent(),c=this.offset(),d=cx.test(b[0].nodeName)?{top:0,left:0}:b.offset();c.top-=parseFloat(f.css(a,"marginTop"))||0,c.left-=parseFloat(f.css(a,"marginLeft"))||0,d.top+=parseFloat(f.css(b[0],"borderTopWidth"))||0,d.left+=parseFloat(f.css(b[0],"borderLeftWidth"))||0;return{top:c.top-d.top,left:c.left-d.left}},offsetParent:function(){return this.map(function(){var a=this.offsetParent||c.body;while(a&&!cx.test(a.nodeName)&&f.css(a,"position")==="static")a=a.offsetParent;return a})}}),f.each(["Left","Top"],function(a,c){var d="scroll"+c;f.fn[d]=function(c){var e,g;if(c===b){e=this[0];if(!e)return null;g=cy(e);return g?"pageXOffset"in g?g[a?"pageYOffset":"pageXOffset"]:f.support.boxModel&&g.document.documentElement[d]||g.document.body[d]:e[d]}return this.each(function(){g=cy(this),g?g.scrollTo(a?f(g).scrollLeft():c,a?c:f(g).scrollTop()):this[d]=c})}}),f.each(["Height","Width"],function(a,c){var d=c.toLowerCase();f.fn["inner"+c]=function(){var a=this[0];return a?a.style?parseFloat(f.css(a,d,"padding")):this[d]():null},f.fn["outer"+c]=function(a){var b=this[0];return b?b.style?parseFloat(f.css(b,d,a?"margin":"border")):this[d]():null},f.fn[d]=function(a){var e=this[0];if(!e)return a==null?null:this;if(f.isFunction(a))return this.each(function(b){var c=f(this);c[d](a.call(this,b,c[d]()))});if(f.isWindow(e)){var g=e.document.documentElement["client"+c],h=e.document.body;return e.document.compatMode==="CSS1Compat"&&g||h&&h["client"+c]||g}if(e.nodeType===9)return Math.max(e.documentElement["client"+c],e.body["scroll"+c],e.documentElement["scroll"+c],e.body["offset"+c],e.documentElement["offset"+c]);if(a===b){var i=f.css(e,d),j=parseFloat(i);return f.isNumeric(j)?j:i}return this.css(d,typeof a=="string"?a:a+"px")}}),a.jQuery=a.$=f,typeof define=="function"&&define.amd&&define.amd.jQuery&&define("jquery",[],function(){return f})})(window);
\ No newline at end of file
diff --git a/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/shell/style/orange.jpg b/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/shell/style/orange.jpg
deleted file mode 100755 (executable)
index ac4c749..0000000
Binary files a/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/shell/style/orange.jpg and /dev/null differ
diff --git a/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/shell/style/popup.js b/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/shell/style/popup.js
deleted file mode 100755 (executable)
index 5f994f4..0000000
+++ /dev/null
@@ -1,1215 +0,0 @@
-/**
- * Copyright (c)2005-2009 Matt Kruse (javascripttoolbox.com)
- * 
- * Dual licensed under the MIT and GPL licenses. 
- * This basically means you can use this code however you want for
- * free, but don't claim to have written it yourself!
- * Donations always accepted: http://www.JavascriptToolbox.com/donate/
- * 
- * Please do not link to the .js files on javascripttoolbox.com from
- * your site. Copy the files locally to your server instead.
- * 
- */
-/* ******************************************************************* */
-/*   UTIL FUNCTIONS                                                    */
-/* ******************************************************************* */
-var Util = {'$VERSION':1.06};
-
-// Util functions - these are GLOBAL so they
-// look like built-in functions.
-
-// Determine if an object is an array
-function isArray(o) {
-       return (o!=null && typeof(o)=="object" && typeof(o.length)=="number" && (o.length==0 || defined(o[0])));
-};
-
-// Determine if an object is an Object
-function isObject(o) {
-       return (o!=null && typeof(o)=="object" && defined(o.constructor) && o.constructor==Object && !defined(o.nodeName));
-};
-
-// Determine if a reference is defined
-function defined(o) {
-       return (typeof(o)!="undefined");
-};
-
-// Iterate over an array, object, or list of items and run code against each item
-// Similar functionality to Perl's map() function
-function map(func) {
-       var i,j,o;
-       var results = [];
-       if (typeof(func)=="string") {
-               func = new Function('$_',func);
-       }
-       for (i=1; i<arguments.length; i++) {
-               o = arguments[i];
-               if (isArray(o)) {
-                       for (j=0; j<o.length; j++) {
-                               results[results.length] = func(o[j]);
-                       }
-               }
-               else if (isObject(o)) {
-                       for (j in o) {
-                               results[results.length] = func(o[j]);
-                       }
-               }
-               else {
-                       results[results.length] = func(o);
-               }
-       }
-       return results;
-};
-
-// Set default values in an object if they are undefined
-function setDefaultValues(o,values) {
-       if (!defined(o) || o==null) {
-               o = {};
-       }
-       if (!defined(values) || values==null) {
-               return o;
-       }
-       for (var val in values) {
-               if (!defined(o[val])) {
-                       o[val] = values[val];
-               }
-       }
-       return o;
-};
-
-/* ******************************************************************* */
-/*   DEFAULT OBJECT PROTOTYPE ENHANCEMENTS                             */
-/* ******************************************************************* */
-// These functions add useful functionality to built-in objects
-Array.prototype.contains = function(o) {
-       var i,l;
-       if (!(l = this.length)) { return false; }
-       for (i=0; i<l; i++) {
-               if (o==this[i]) {
-                       return true;
-               }
-       }
-};
-
-/* ******************************************************************* */
-/*   DOM FUNCTIONS                                                     */
-/* ******************************************************************* */
-var DOM = (function() { 
-       var dom = {};
-       
-       // Get a parent tag with a given nodename
-       dom.getParentByTagName = function(o,tagNames) {
-               if(o==null) { return null; }
-               if (isArray(tagNames)) {
-                       tagNames = map("return $_.toUpperCase()",tagNames);
-                       while (o=o.parentNode) {
-                               if (o.nodeName && tagNames.contains(o.nodeName)) {
-                                       return o;
-                               }
-                       }
-               }
-               else {
-                       tagNames = tagNames.toUpperCase();
-                       while (o=o.parentNode) {
-                               if (o.nodeName && tagNames==o.nodeName) {
-                                       return o;
-                               }
-                       }
-               }
-               return null;
-       };
-       
-       // Remove a node from its parent
-       dom.removeNode = function(o) {
-               if (o!=null && o.parentNode && o.parentNode.removeChild) {
-                       // First remove all attributes which are func references, to avoid memory leaks
-                       for (var i in o) {
-                               if (typeof(o[i])=="function") {
-                                       o[i] = null;
-                               }
-                       }
-                       o.parentNode.removeChild(o);
-                       return true;
-               }
-               return false;
-       };
-
-       // Get the outer width in pixels of an object, including borders, padding, and margin
-       dom.getOuterWidth = function(o) {
-               if (defined(o.offsetWidth)) {
-                       return o.offsetWidth;
-               }
-               return null;
-       };
-
-       // Get the outer height in pixels of an object, including borders, padding, and margin
-       dom.getOuterHeight = function(o) {
-               if (defined(o.offsetHeight)) {
-                       return o.offsetHeight;
-               }
-               return null;
-       };
-
-       // Resolve an item, an array of items, or an object of items
-       dom.resolve = function() {
-               var results = new Array();
-               var i,j,o;
-               for (var i=0; i<arguments.length; i++) {
-                       var o = arguments[i];
-                       if (o==null) {
-                               if (arguments.length==1) {
-                                       return null;
-                               }
-                               results[results.length] = null;
-                       }
-                       else if (typeof(o)=='string') {
-                               if (document.getElementById) {
-                                       o = document.getElementById(o);
-                               }
-                               else if (document.all) {
-                                       o = document.all[o];
-                               }
-                               if (arguments.length==1) {
-                                       return o;
-                               }
-                               results[results.length] = o;
-                       }
-                       else if (isArray(o)) {
-                               for (j=0; j<o.length; j++) {
-                                       results[results.length] = o[j];
-                               }
-                       }
-                       else if (isObject(o)) {
-                               for (j in o) {
-                                       results[results.length] = o[j];
-                               }
-                       }
-                       else if (arguments.length==1) {
-                               return o;
-                       }
-                       else {
-                               results[results.length] = o;
-                       }
-         }
-         return results;
-       };
-       dom.$ = dom.resolve;
-       
-       return dom;
-})();
-
-/* ******************************************************************* */
-/*   CSS FUNCTIONS                                                     */
-/* ******************************************************************* */
-var CSS = (function(){
-       var css = {};
-
-       // Convert an RGB string in the form "rgb (255, 255, 255)" to "#ffffff"
-       css.rgb2hex = function(rgbString) {
-               if (typeof(rgbString)!="string" || !defined(rgbString.match)) { return null; }
-               var result = rgbString.match(/^\s*rgb\s*\(\s*(\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*/);
-               if (result==null) { return rgbString; }
-               var rgb = +result[1] << 16 | +result[2] << 8 | +result[3];
-               var hex = "";
-               var digits = "0123456789abcdef";
-               while(rgb!=0) { 
-                       hex = digits.charAt(rgb&0xf)+hex; 
-                       rgb>>>=4; 
-               } 
-               while(hex.length<6) { hex='0'+hex; }
-               return "#" + hex;
-       };
-
-       // Convert hyphen style names like border-width to camel case like borderWidth
-       css.hyphen2camel = function(property) {
-               if (!defined(property) || property==null) { return null; }
-               if (property.indexOf("-")<0) { return property; }
-               var str = "";
-               var c = null;
-               var l = property.length;
-               for (var i=0; i<l; i++) {
-                       c = property.charAt(i);
-                       str += (c!="-")?c:property.charAt(++i).toUpperCase();
-               }
-               return str;
-       };
-       
-       // Determine if an object or class string contains a given class.
-       css.hasClass = function(obj,className) {
-               if (!defined(obj) || obj==null || !RegExp) { return false; }
-               var re = new RegExp("(^|\\s)" + className + "(\\s|$)");
-               if (typeof(obj)=="string") {
-                       return re.test(obj);
-               }
-               else if (typeof(obj)=="object" && obj.className) {
-                       return re.test(obj.className);
-               }
-               return false;
-       };
-       
-       // Add a class to an object
-       css.addClass = function(obj,className) {
-               if (typeof(obj)!="object" || obj==null || !defined(obj.className)) { return false; }
-               if (obj.className==null || obj.className=='') { 
-                       obj.className = className; 
-                       return true; 
-               }
-               if (css.hasClass(obj,className)) { return true; }
-               obj.className = obj.className + " " + className;
-               return true;
-       };
-       
-       // Remove a class from an object
-       css.removeClass = function(obj,className) {
-               if (typeof(obj)!="object" || obj==null || !defined(obj.className) || obj.className==null) { return false; }
-               if (!css.hasClass(obj,className)) { return false; }
-               var re = new RegExp("(^|\\s+)" + className + "(\\s+|$)");
-               obj.className = obj.className.replace(re,' ');
-               return true;
-       };
-       
-       // Fully replace a class with a new one
-       css.replaceClass = function(obj,className,newClassName) {
-               if (typeof(obj)!="object" || obj==null || !defined(obj.className) || obj.className==null) { return false; }
-               css.removeClass(obj,className);
-               css.addClass(obj,newClassName);
-               return true;
-       };
-       
-       // Get the currently-applied style of an object
-       css.getStyle = function(o, property) {
-               if (o==null) { return null; }
-               var val = null;
-               var camelProperty = css.hyphen2camel(property);
-               // Handle "float" property as a special case
-               if (property=="float") {
-                       val = css.getStyle(o,"cssFloat");
-                       if (val==null) { 
-                               val = css.getStyle(o,"styleFloat"); 
-                       }
-               }
-               else if (o.currentStyle && defined(o.currentStyle[camelProperty])) {
-                       val = o.currentStyle[camelProperty];
-               }
-               else if (window.getComputedStyle) {
-                       val = window.getComputedStyle(o,null).getPropertyValue(property);
-               }
-               else if (o.style && defined(o.style[camelProperty])) {
-                       val = o.style[camelProperty];
-               }
-               // For color values, make the value consistent across browsers
-               // Convert rgb() colors back to hex for consistency
-               if (/^\s*rgb\s*\(/.test(val)) {
-                       val = css.rgb2hex(val);
-               }
-               // Lowercase all #hex values
-               if (/^#/.test(val)) {
-                       val = val.toLowerCase();
-               }
-               return val;
-       };
-       css.get = css.getStyle;
-
-       // Set a style on an object
-       css.setStyle = function(o, property, value) {
-               if (o==null || !defined(o.style) || !defined(property) || property==null || !defined(value)) { return false; }
-               if (property=="float") {
-                       o.style["cssFloat"] = value;
-                       o.style["styleFloat"] = value;
-               }
-               else if (property=="opacity") {
-                       o.style['-moz-opacity'] = value;
-                       o.style['-khtml-opacity'] = value;
-                       o.style.opacity = value;
-                       if (defined(o.style.filter)) {
-                               o.style.filter = "alpha(opacity=" + value*100 + ")";
-                       }
-               }
-               else {
-                       o.style[css.hyphen2camel(property)] = value;
-               }
-               return true;
-       };
-       css.set = css.setStyle;
-       
-       // Get a unique ID which doesn't already exist on the page
-       css.uniqueIdNumber=1000;
-       css.createId = function(o) {
-               if (defined(o) && o!=null && defined(o.id) && o.id!=null && o.id!="") { 
-                       return o.id;
-               }
-               var id = null;
-               while (id==null || document.getElementById(id)!=null) {
-                       id = "ID_"+(css.uniqueIdNumber++);
-               }
-               if (defined(o) && o!=null && (!defined(o.id)||o.id=="")) {
-                       o.id = id;
-               }
-               return id;
-       };
-       
-       return css;
-})();
-
-/* ******************************************************************* */
-/*   EVENT FUNCTIONS                                                   */
-/* ******************************************************************* */
-
-var Event = (function(){
-       var ev = {};
-       
-       // Resolve an event using IE's window.event if necessary
-       // --------------------------------------------------------------------
-       ev.resolve = function(e) {
-               if (!defined(e) && defined(window.event)) {
-                       e = window.event;
-               }
-               return e;
-       };
-       
-       // Add an event handler to a function
-       // Note: Don't use 'this' within functions added using this method, since
-       // the attachEvent and addEventListener models differ.
-       // --------------------------------------------------------------------
-       ev.add = function( obj, type, fn, capture ) {
-               if (obj.addEventListener) {
-                       obj.addEventListener( type, fn, capture );
-                       return true;
-               }
-               else if (obj.attachEvent) {
-                       obj.attachEvent( "on"+type, fn );
-                       return true;
-               }
-               return false;
-       };
-
-       // Get the mouse position of an event
-       // --------------------------------------------------------------------
-       // PageX/Y, where they exist, are more reliable than ClientX/Y because 
-       // of some browser bugs in Opera/Safari
-       ev.getMouseX = function(e) {
-               e = ev.resolve(e);
-               if (defined(e.pageX)) {
-                       return e.pageX;
-               }
-               if (defined(e.clientX)) {
-                       return e.clientX+Screen.getScrollLeft();
-               }
-               return null;
-       };
-       ev.getMouseY = function(e) {
-               e = ev.resolve(e);
-               if (defined(e.pageY)) {
-                       return e.pageY;
-               }
-               if (defined(e.clientY)) {
-                       return e.clientY+Screen.getScrollTop();
-               }
-               return null;
-       };
-
-       // Stop the event from bubbling up to parent elements.
-       // Two method names map to the same function
-       // --------------------------------------------------------------------
-       ev.cancelBubble = function(e) {
-               e = ev.resolve(e);
-               if (typeof(e.stopPropagation)=="function") { e.stopPropagation(); } 
-               if (defined(e.cancelBubble)) { e.cancelBubble = true; }
-       };
-       ev.stopPropagation = ev.cancelBubble;
-
-       // Prevent the default handling of the event to occur
-       // --------------------------------------------------------------------
-       ev.preventDefault = function(e) {
-               e = ev.resolve(e);
-               if (typeof(e.preventDefault)=="function") { e.preventDefault(); } 
-               if (defined(e.returnValue)) { e.returnValue = false; }
-       };
-       
-       return ev;
-})();
-
-/* ******************************************************************* */
-/*   SCREEN FUNCTIONS                                                  */
-/* ******************************************************************* */
-var Screen = (function() {
-       var screen = {};
-
-       // Get a reference to the body
-       // --------------------------------------------------------------------
-       screen.getBody = function() {
-               if (document.body) {
-                       return document.body;
-               }
-               if (document.getElementsByTagName) {
-                       var bodies = document.getElementsByTagName("BODY");
-                       if (bodies!=null && bodies.length>0) {
-                               return bodies[0];
-                       }
-               }
-               return null;
-       };
-
-       // Get the amount that the main document has scrolled from top
-       // --------------------------------------------------------------------
-       screen.getScrollTop = function() {
-               if (document.documentElement && defined(document.documentElement.scrollTop) && document.documentElement.scrollTop>0) {
-                       return document.documentElement.scrollTop;
-               }
-               if (document.body && defined(document.body.scrollTop)) {
-                       return document.body.scrollTop;
-               }
-               return null;
-       };
-       
-       // Get the amount that the main document has scrolled from left
-       // --------------------------------------------------------------------
-       screen.getScrollLeft = function() {
-               if (document.documentElement && defined(document.documentElement.scrollLeft) && document.documentElement.scrollLeft>0) {
-                       return document.documentElement.scrollLeft;
-               }
-               if (document.body && defined(document.body.scrollLeft)) {
-                       return document.body.scrollLeft;
-               }
-               return null;
-       };
-       
-       // Util function to default a bad number to 0
-       // --------------------------------------------------------------------
-       screen.zero = function(n) {
-               return (!defined(n) || isNaN(n))?0:n;
-       };
-
-       // Get the width of the entire document
-       // --------------------------------------------------------------------
-       screen.getDocumentWidth = function() {
-               var width = 0;
-               var body = screen.getBody();
-               if (document.documentElement && (!document.compatMode || document.compatMode=="CSS1Compat")) {
-                   var rightMargin = parseInt(CSS.get(body,'marginRight'),10) || 0;
-                   var leftMargin = parseInt(CSS.get(body,'marginLeft'), 10) || 0;
-                       width = Math.max(body.offsetWidth + leftMargin + rightMargin, document.documentElement.clientWidth);
-               }
-               else {
-                       width =  Math.max(body.clientWidth, body.scrollWidth);
-               }
-               if (isNaN(width) || width==0) {
-                       width = screen.zero(self.innerWidth);
-               }
-               return width;
-       };
-       
-       // Get the height of the entire document
-       // --------------------------------------------------------------------
-       screen.getDocumentHeight = function() {
-               var body = screen.getBody();
-               var innerHeight = (defined(self.innerHeight)&&!isNaN(self.innerHeight))?self.innerHeight:0;
-               if (document.documentElement && (!document.compatMode || document.compatMode=="CSS1Compat")) {
-                   var topMargin = parseInt(CSS.get(body,'marginTop'),10) || 0;
-                   var bottomMargin = parseInt(CSS.get(body,'marginBottom'), 10) || 0;
-                       return Math.max(body.offsetHeight + topMargin + bottomMargin, document.documentElement.clientHeight, document.documentElement.scrollHeight, screen.zero(self.innerHeight));
-               }
-               return Math.max(body.scrollHeight, body.clientHeight, screen.zero(self.innerHeight));
-       };
-       
-       // Get the width of the viewport (viewable area) in the browser window
-       // --------------------------------------------------------------------
-       screen.getViewportWidth = function() {
-               if (document.documentElement && (!document.compatMode || document.compatMode=="CSS1Compat")) {
-                       return document.documentElement.clientWidth;
-               }
-               else if (document.compatMode && document.body) {
-                       return document.body.clientWidth;
-               }
-               return screen.zero(self.innerWidth);
-       };
-       
-       // Get the height of the viewport (viewable area) in the browser window
-       // --------------------------------------------------------------------
-       screen.getViewportHeight = function() {
-               if (!window.opera && document.documentElement && (!document.compatMode || document.compatMode=="CSS1Compat")) {
-                       return document.documentElement.clientHeight;
-               }
-               else if (document.compatMode && !window.opera && document.body) {
-                       return document.body.clientHeight;
-               }
-               return screen.zero(self.innerHeight);
-       };
-
-       return screen;
-})();var Sort = (function(){
-       var sort = {};
-       sort.AlphaNumeric = function(a,b) {
-               if (a==b) { return 0; }
-               if (a<b) { return -1; }
-               return 1;
-       };
-
-       sort.Default = sort.AlphaNumeric;
-       
-       sort.NumericConversion = function(val) {
-               if (typeof(val)!="number") {
-                       if (typeof(val)=="string") {
-                               val = parseFloat(val.replace(/,/g,''));
-                               if (isNaN(val) || val==null) { val=0; }
-                       }
-                       else {
-                               val = 0;
-                       }
-               }
-               return val;
-       };
-       
-       sort.Numeric = function(a,b) {
-               return sort.NumericConversion(a)-sort.NumericConversion(b);
-       };
-
-       sort.IgnoreCaseConversion = function(val) {
-               if (val==null) { val=""; }
-               return (""+val).toLowerCase();
-       };
-
-       sort.IgnoreCase = function(a,b) {
-               return sort.AlphaNumeric(sort.IgnoreCaseConversion(a),sort.IgnoreCaseConversion(b));
-       };
-
-       sort.CurrencyConversion = function(val) {
-               if (typeof(val)=="string") {
-                       val = val.replace(/^[^\d\.]/,'');
-               }
-               return sort.NumericConversion(val);
-       };
-       
-       sort.Currency = function(a,b) {
-               return sort.Numeric(sort.CurrencyConversion(a),sort.CurrencyConversion(b));
-       };
-       
-       sort.DateConversion = function(val) {
-               // inner util function to parse date formats
-               function getdate(str) {
-                       // inner util function to convert 2-digit years to 4
-                       function fixYear(yr) {
-                               yr = +yr;
-                               if (yr<50) { yr += 2000; }
-                               else if (yr<100) { yr += 1900; }
-                               return yr;
-                       };
-                       var ret;
-                       // YYYY-MM-DD
-                       if (ret=str.match(/(\d{2,4})-(\d{1,2})-(\d{1,2})/)) {
-                               return (fixYear(ret[1])*10000) + (ret[2]*100) + (+ret[3]);
-                       }
-                       // MM/DD/YY[YY] or MM-DD-YY[YY]
-                       if (ret=str.match(/(\d{1,2})[\/-](\d{1,2})[\/-](\d{2,4})/)) {
-                               return (fixYear(ret[3])*10000) + (ret[1]*100) + (+ret[2]);
-                       }
-                       return 99999999; // So non-parsed dates will be last, not first
-               };
-               return getdate(val);
-       };
-
-       sort.Date = function(a,b) {
-               return sort.Numeric(sort.DateConversion(a),sort.DateConversion(b));
-       };
-
-       return sort;
-})();
-
-var Position = (function() {
-       // Resolve a string identifier to an object
-       // ========================================
-       function resolveObject(s) {
-               if (document.getElementById && document.getElementById(s)!=null) {
-                       return document.getElementById(s);
-               }
-               else if (document.all && document.all[s]!=null) {
-                       return document.all[s];
-               }
-               else if (document.anchors && document.anchors.length && document.anchors.length>0 && document.anchors[0].x) {
-                       for (var i=0; i<document.anchors.length; i++) {
-                               if (document.anchors[i].name==s) { 
-                                       return document.anchors[i]
-                               }
-                       }
-               }
-       }
-       
-       var pos = {};
-       pos.$VERSION = 1.0;
-       
-       // Set the position of an object
-       // =============================
-       pos.set = function(o,left,top) {
-               if (typeof(o)=="string") {
-                       o = resolveObject(o);
-               }
-               if (o==null || !o.style) {
-                       return false;
-               }
-               
-               // If the second parameter is an object, it is assumed to be the result of getPosition()
-               if (typeof(left)=="object") {
-                       var pos = left;
-                       left = pos.left;
-                       top = pos.top;
-               }
-               
-               o.style.left = left + "px";
-               o.style.top = top + "px";
-               return true;
-       };
-       
-       // Retrieve the position and size of an object
-       // ===========================================
-       pos.get = function(o) {
-               var fixBrowserQuirks = true;
-                       // If a string is passed in instead of an object ref, resolve it
-               if (typeof(o)=="string") {
-                       o = resolveObject(o);
-               }
-               
-               if (o==null) {
-                       return null;
-               }
-               
-               var left = 0;
-               var top = 0;
-               var width = 0;
-               var height = 0;
-               var parentNode = null;
-               var offsetParent = null;
-       
-               
-               offsetParent = o.offsetParent;
-               var originalObject = o;
-               var el = o; // "el" will be nodes as we walk up, "o" will be saved for offsetParent references
-               while (el.parentNode!=null) {
-                       el = el.parentNode;
-                       if (el.offsetParent==null) {
-                       }
-                       else {
-                               var considerScroll = true;
-                               /*
-                               In Opera, if parentNode of the first object is scrollable, then offsetLeft/offsetTop already 
-                               take its scroll position into account. If elements further up the chain are scrollable, their 
-                               scroll offsets still need to be added in. And for some reason, TR nodes have a scrolltop value
-                               which must be ignored.
-                               */
-                               if (fixBrowserQuirks && window.opera) {
-                                       if (el==originalObject.parentNode || el.nodeName=="TR") {
-                                               considerScroll = false;
-                                       }
-                               }
-                               if (considerScroll) {
-                                       if (el.scrollTop && el.scrollTop>0) {
-                                               top -= el.scrollTop;
-                                       }
-                                       if (el.scrollLeft && el.scrollLeft>0) {
-                                               left -= el.scrollLeft;
-                                       }
-                               }
-                       }
-                       // If this node is also the offsetParent, add on the offsets and reset to the new offsetParent
-                       if (el == offsetParent) {
-                               left += o.offsetLeft;
-                               if (el.clientLeft && el.nodeName!="TABLE") { 
-                                       left += el.clientLeft;
-                               }
-                               top += o.offsetTop;
-                               if (el.clientTop && el.nodeName!="TABLE") {
-                                       top += el.clientTop;
-                               }
-                               o = el;
-                               if (o.offsetParent==null) {
-                                       if (o.offsetLeft) {
-                                               left += o.offsetLeft;
-                                       }
-                                       if (o.offsetTop) {
-                                               top += o.offsetTop;
-                                       }
-                               }
-                               offsetParent = o.offsetParent;
-                       }
-               }
-               
-       
-               if (originalObject.offsetWidth) {
-                       width = originalObject.offsetWidth;
-               }
-               if (originalObject.offsetHeight) {
-                       height = originalObject.offsetHeight;
-               }
-               
-               return {'left':left, 'top':top, 'width':width, 'height':height
-                               };
-       };
-       
-       // Retrieve the position of an object's center point
-       // =================================================
-       pos.getCenter = function(o) {
-               var c = this.get(o);
-               if (c==null) { return null; }
-               c.left = c.left + (c.width/2);
-               c.top = c.top + (c.height/2);
-               return c;
-       };
-       
-       return pos;
-})();// CLASS CONSTRUCTOR
-// --------------------------------------------------------------------
-var Popup = function(div, options) {
-       this.div = defined(div)?div:null;
-       this.index = Popup.maxIndex++;
-       this.ref = "Popup.objects["+this.index+"]";
-       Popup.objects[this.index] = this;
-       // Store a reference to the DIV by id, also
-       if (typeof(this.div)=="string") {
-               Popup.objectsById[this.div] = this;
-       }
-       if (defined(this.div) && this.div!=null && defined(this.div.id)) {
-               Popup.objectsById[this.div.id] = this.div.id;
-       }
-       // Apply passed-in options
-       if (defined(options) && options!=null && typeof(options)=="object") {
-               for (var i in options) {
-                       this[i] = options[i];
-               }
-       }
-       return this;
-};
-
-// CLASS PROPERTIES
-// --------------------------------------------------------------------
-// Index of popup objects, to maintain a global reference if necessary
-Popup.maxIndex = 0;
-Popup.objects = {};
-Popup.objectsById = {};
-
-// The z-index value that popups will start at
-Popup.minZIndex = 101;
-
-// Class names to assign to other objects
-Popup.screenClass = "PopupScreen";
-Popup.iframeClass = "PopupIframe";
-Popup.screenIframeClass = "PopupScreenIframe";
-
-// CLASS METHODS
-// --------------------------------------------------------------------
-
-// Hide all currently-visible non-modal dialogs
-Popup.hideAll = function() {
-       for (var i in Popup.objects) {
-               var p = Popup.objects[i];
-               if (!p.modal && p.autoHide) {
-                       p.hide();
-               }
-       }
-};
-// Catch global events as a trigger to hide auto-hide popups
-Event.add(document, "mouseup", Popup.hideAll, false);
-
-// A simple class method to show a popup without creating an instance
-Popup.show = function(divObject, referenceObject, position, options, modal) {
-       var popup;
-       if (defined(divObject)) { 
-               popup = new Popup(divObject);
-       }
-       else {
-               popup = new Popup();
-               popup.destroyDivOnHide = true;
-       }
-       if (defined(referenceObject)) { popup.reference = DOM.resolve(referenceObject); }
-       if (defined(position)) { popup.position = position; }
-       if (defined(options) && options!=null && typeof(options)=="object") {
-               for (var i in options) {
-                       popup[i] = options[i];
-               }
-       }
-       if (typeof(modal)=="boolean") {
-               popup.modal = modal;
-       }
-       popup.destroyObjectsOnHide = true;
-       popup.show();
-       return popup;
-};
-
-// A simple class method to show a modal popup
-Popup.showModal = function(divObject, referenceObject, position, options) {
-       Popup.show(divObject, referenceObject, position, options, true);
-};
-
-// A method to retrieve a popup object based on a div ID
-Popup.get = function(divId) {
-       if (defined(Popup.objectsById[divId])) {
-               return Popup.objectsById[divId];
-       }
-       return null;
-};
-
-// A method to hide a popup based on a div id
-Popup.hide = function(divId) {
-       var popup = Popup.get(divId);
-       if (popup!=null) {
-               popup.hide();
-       }
-};
-
-// PROTOTYPE PROPERTIES
-// --------------------------------------------------------------------
-Popup.prototype.content = null;
-Popup.prototype.className = "PopupDiv";
-Popup.prototype.style = null; // Styles to be applied to the DIV
-Popup.prototype.width = null;
-Popup.prototype.height = null;
-Popup.prototype.top = null;
-Popup.prototype.left = null;
-Popup.prototype.offsetLeft = 0;
-Popup.prototype.offsetTop = 0;
-Popup.prototype.constrainToScreen = true;
-Popup.prototype.autoHide = true;
-Popup.prototype.useIframeShim = false; /*@cc_on @*/ /*@if (@_win32) {Popup.prototype.useIframeShim = true;} @end @*/ 
-Popup.prototype.iframe = null;
-Popup.prototype.position = null; // vertical: "above top center bottom below", horizontal: "adjacent-left,left,center,right,adjacent-right"
-Popup.prototype.reference = null;
-Popup.prototype.modal = false;
-Popup.prototype.destroyDivOnHide = false;
-Popup.prototype.destroyObjectsOnHide = false;
-Popup.prototype.screen = null;
-Popup.prototype.screenIframeShim = null;
-Popup.prototype.screenOpacity=.4;
-Popup.prototype.screenColor="#cccccc";
-
-// INSTANCE METHODS
-// --------------------------------------------------------------------
-
-// Show the popup
-// --------------------------------------------------------------------
-Popup.prototype.show = function(options, modal) {
-       this.modal = this.modal || (typeof(modal)=="boolean" && modal);
-       if (defined(options) && options!=null && typeof(options)=="object") {
-               for (var i in options) {
-                       this[i] = options[i];
-               }
-       }
-       this.div = DOM.resolve(this.div);
-       CSS.setStyle(this.div,'position','absolute');
-       
-       // If there is no div pre-defined to use, create one
-       if (this.div==null) {
-               this.div = this.createDiv();
-       }
-       if (this.content!=null) {
-               this.div.innerHTML = this.content;
-               this.content = null;
-       }
-       if (this.className!=null) {
-               this.div.className = this.className;
-       }
-       if (this.style!=null) {
-               this.applyStyle();
-       }
-       if (this.width!=null) {
-               this.div.style.width = this.width+"px";
-               this.div.style.overflowX="auto";
-       }
-       if (this.height!=null) {
-               this.div.style.height = this.height+"px";
-               this.div.style.overflowY="auto";
-       }
-
-       // Do the actual display - this is a separate method so display transitions can be implemented
-       this.transition();
-       
-       // Make sure clicks on the DIV don't bubble up to the document
-       this.div.onclick = function(e) { 
-               Event.cancelBubble(Event.resolve(e));
-       };
-       this.div.onmouseup = this.div.onclick;
-       
-       // Focus to the DIV if possible 
-       if (this.modal && this.div.focus) {
-               this.div.focus();
-       }
-};
-
-// Show the popup but make it modal
-// --------------------------------------------------------------------
-Popup.prototype.transition = function() {
-       if (this.modal) {
-               this.addScreen();
-       }
-       
-       // Make the DIV displayed but hidden so its size can be measured
-       CSS.setStyle(this.div,'visibility','hidden');
-       CSS.setStyle(this.div,'display','block');
-
-       // Position the popup
-       this.setPosition();
-
-       // Add the shim if necessary    
-       if (this.useIframeShim) {
-               this.addIframeShim();
-       }
-
-       // Make sure the DIV is higher than the shim
-       this.div.style.zIndex = Popup.minZIndex++;
-
-       CSS.setStyle(this.div,'display','block');
-       CSS.setStyle(this.div,'visibility','visible');
-};
-
-// Show the popup but make it modal
-// --------------------------------------------------------------------
-Popup.prototype.showModal = function(options) {
-       this.show(options,true);
-};
-
-// Apply user styles to the DIV
-// --------------------------------------------------------------------
-Popup.prototype.applyStyle = function() {
-       if (this.div!=null && this.style!=null && typeof(this.style)=="object") {
-               for (var i in this.style) {
-                       this.div.style[i] = this.style[i];
-               }
-       }
-};
-
-// Hide the popup
-// --------------------------------------------------------------------
-Popup.prototype.hide = function() {
-       // If this was a temp object creating on-the-fly, then remove objects from the DOM so
-       // The document doesn't get littered with extra objects
-       if (this.destroyDivOnHide) {
-               DOM.removeNode(this.div);
-               this.div = null;
-               delete Popup.objects[this.id];
-       }
-       else if (this.div!=null) {
-               CSS.setStyle(this.div,'display','none');
-       }
-
-       if (this.destroyObjectsOnHide) {
-               DOM.removeNode(this.iframe);
-               DOM.removeNode(this.screen);
-               DOM.removeNode(this.screenIframeShim);
-       }
-       else {
-               if (this.iframe!=null) {
-                       this.iframe.style.display = "none";
-               }
-               if (this.screen!=null) {
-                       this.screen.style.display = "none";
-               }
-               if (this.screenIframeShim!=null) {
-                       this.screenIframeShim.style.display = "none";
-               }
-       }
-};
-
-// Util funcs for position
-// --------------------------------------------------------------------
-Popup.prototype.setTop = function(top) {
-       this.div.style.top = top+"px";
-};
-Popup.prototype.setLeft = function(left) {
-       this.div.style.left = left+"px";
-};
-Popup.prototype.getTop = function() {
-       return parseInt(CSS.getStyle(this.div,"top"),10);
-};
-Popup.prototype.getLeft = function() {
-       return parseInt(CSS.getStyle(this.div,"left"),10);
-};
-
-// All the logic to position the popup based on various criteria
-// --------------------------------------------------------------------
-Popup.prototype.setPosition = function() {
-       if (this.position!=null) {
-               var m = this.position.match(/^(\S+)\s+(\S+)/); 
-               if (m!=null && m.length==3) {
-                       var v = m[1];
-                       var h = m[2];
-
-                       var ref = this.reference;
-                       if (ref==null) { ref = Screen.getBody(); }
-                       var p = Position.get(ref);
-                       var refTop = p.top;
-                       var refLeft = p.left;
-                       var refWidth = DOM.getOuterWidth(ref);
-                       var refHeight = DOM.getOuterHeight(ref);
-                       
-                       var width = DOM.getOuterWidth(this.div);
-                       var height = DOM.getOuterHeight(this.div);
-                       
-                       var scrollLeft = Screen.getScrollLeft();
-                       var scrollTop = Screen.getScrollTop();
-
-                       // Set vertical position relative to reference object
-                       if (v=="above") { this.setTop(refTop-height+this.offsetTop); }
-                       else if (v=="top") { this.setTop(refTop+this.offsetTop); }
-                       else if (v=="center") { this.setTop(refTop+(refHeight/2)-(height/2)+this.offsetTop); }
-                       else if (v=="bottom") { this.setTop(refTop+refHeight-height+this.offsetTop); }
-                       else if (v=="below") { this.setTop(refTop+refHeight+this.offsetTop); }
-
-                       // Set horizontal position relative to reference object
-                       if (h=="adjacent-left") { this.setLeft(refLeft-width+this.offsetLeft); }
-                       else if (h=="left") { this.setLeft(refLeft+this.offsetLeft); }
-                       else if (h=="center") { this.setLeft(refLeft+(refWidth/2)-(width/2)+this.offsetLeft); }
-                       else if (h=="right") { this.setLeft(refLeft+refWidth-width+this.offsetLeft); }
-                       else if (h=="adjacent-right") { this.setLeft(refLeft+refWidth+this.offsetLeft); }
-               }
-       }
-       else if (this.top==null && this.left==null) {
-               this.center();
-       }
-       else {
-               if (this.top==null) { this.top=0; }
-               if (this.left==null) { this.left=0; }
-               this.div.style.top = this.top+this.offsetTop+"px";
-               this.div.style.left = this.left+this.offsetLeft+"px";
-       }
-
-       // Re-position to make sure it stays on the screen
-       if (this.constrainToScreen) {
-               this.fitToScreen();
-       }
-};
-
-// Append an object to the body
-// --------------------------------------------------------------------
-Popup.prototype.appendToBody = function(o) {
-       var body = Screen.getBody();
-       if (body && body.appendChild) {
-               body.appendChild(o);
-       }
-};
-
-// Create a new DIV object to be used for a popup
-// --------------------------------------------------------------------
-Popup.prototype.createDiv = function() {
-       if (document.createElement) {
-               var d = document.createElement("DIV");
-               d.style.position="absolute";
-               d.style.display="block";
-               d.style.visibility="hidden";
-               this.appendToBody(d);
-               return d;
-       }
-       alert("ERROR: Couldn't create DIV element in Popup.prototype.createDiv()");
-       return null;
-};
-
-// Create a new IFRAME object to be used behind the popup
-// --------------------------------------------------------------------
-Popup.prototype.createIframe = function() {
-       if (document.createElement) {
-               var i= document.createElement("IFRAME");
-               i.style.position="absolute";
-               i.style.display="block";
-               i.style.visibility="hidden";
-               i.style.background="none";
-               this.appendToBody(i);
-               return i;
-       }
-       else {
-               alert("ERROR: Couldn't create IFRAME object in Popup.prototype.createIframe()");
-       }
-};
-
-// Add an IFRAME shim for the DIV
-// --------------------------------------------------------------------
-Popup.prototype.addIframeShim = function() {
-       if (this.iframe==null) {
-               this.iframe = this.createIframe();
-       }
-       this.iframe.className = Popup.iframeClass;
-       CSS.setStyle(this.iframe,'top',this.getTop()+"px");
-       CSS.setStyle(this.iframe,'left',this.getLeft()+"px");
-       CSS.setStyle(this.iframe,'width',DOM.getOuterWidth(this.div) + "px");
-       CSS.setStyle(this.iframe,'height',DOM.getOuterHeight(this.div) + "px");
-       CSS.setStyle(this.iframe,'zIndex',Popup.minZIndex++);
-       CSS.setStyle(this.iframe,'opacity',0);
-       CSS.setStyle(this.iframe,'visibility','visible');
-       CSS.setStyle(this.iframe,'display','block');
-};
-
-// Create a "screen" to make a popup modal
-// --------------------------------------------------------------------
-Popup.prototype.addScreen = function() {
-       if (this.screen==null) {
-               this.screen = this.createDiv();
-               this.screen.style.top="0px";
-               this.screen.style.left="0px";
-               this.screen.style.backgroundColor = this.screenColor;
-               this.screen.className=Popup.screenClass;;
-               CSS.setStyle(this.screen,"opacity",this.screenOpacity);
-               this.screen.onclick = function(e) { Event.cancelBubble(Event.resolve(e)); }
-       }
-       if (this.screenIframeShim==null) {
-               this.screenIframeShim = this.createIframe();
-               this.screenIframeShim.style.top="0px";
-               this.screenIframeShim.style.left="0px";
-               this.screenIframeShim.className=Popup.screenIframeClass;
-               CSS.setStyle(this.screenIframeShim,"opacity",0);
-       }
-       this.screen.style.width = Screen.getDocumentWidth()+"px";
-       this.screen.style.height = Screen.getDocumentHeight()+"px";
-       this.screenIframeShim.style.width = Screen.getDocumentWidth()+"px";
-       this.screenIframeShim.style.height = Screen.getDocumentHeight()+"px";
-       this.screenIframeShim.style.zIndex = Popup.minZIndex++;
-       this.screenIframeShim.style.visibility="visible";
-       this.screenIframeShim.style.display="block";
-       this.screen.style.zIndex = Popup.minZIndex++;
-       this.screen.style.visibility="visible";
-       this.screen.style.display="block";
-};
-
-// Re-position the DIV so it stays on the screen
-// --------------------------------------------------------------------
-Popup.prototype.fitToScreen = function() {
-       var width = DOM.getOuterWidth(this.div);
-       var height = DOM.getOuterHeight(this.div);
-       var top = this.getTop();
-       var left = this.getLeft();
-       
-       var clientWidth = Screen.getViewportWidth();
-       var clientHeight = Screen.getViewportHeight();
-       
-       var scrollLeft = Screen.getScrollLeft();
-       var scrollTop = Screen.getScrollTop();
-
-       if (top-scrollTop+height>clientHeight) {
-               top = top - ((top+height) - (scrollTop+clientHeight));
-               this.div.style.top = top + "px";
-       }
-       if (left-scrollLeft+width>clientWidth) {
-               left = left - ((left+width) - (scrollLeft+clientWidth));
-               this.div.style.left = left + "px";
-       }
-       if (top<scrollTop) {
-               this.div.style.top=scrollTop+"px";
-       }
-       if (left<scrollLeft) {
-               this.div.style.left=scrollLeft+"px";
-       }
-};
-
-// Center the DIV object
-// --------------------------------------------------------------------
-Popup.prototype.center = function() {
-       var left = DOM.getOuterWidth(this.div);
-       var top = DOM.getOuterHeight(this.div);
-       if (isNaN(left)) { left=0; }
-       if (isNaN(top)) { top=0; }      
-       var clientW = Screen.getViewportWidth();
-       var clientH = Screen.getViewportHeight();
-       if (clientW!=null && clientH!=null) {
-               top = (clientH-top)/2;
-               left = (clientW-left)/2;
-       }
-       top += Screen.getScrollTop();
-       left += Screen.getScrollLeft();
-       
-       this.div.style.top = top+this.offsetTop+"px";
-       this.div.style.left = left+this.offsetLeft+"px";
-};
-
diff --git a/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/shell/style/red.jpg b/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/shell/style/red.jpg
deleted file mode 100755 (executable)
index ab67c5a..0000000
Binary files a/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/shell/style/red.jpg and /dev/null differ
diff --git a/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/shell/style/summary.xsl b/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/shell/style/summary.xsl
deleted file mode 100755 (executable)
index 2f7f0df..0000000
+++ /dev/null
@@ -1,523 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<xsl:stylesheet version="1.0"
-       xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
-       <xsl:output method="html" version="1.0" encoding="UTF-8"
-               indent="yes" />
-       <xsl:template match="/">
-               <html>
-                       <STYLE type="text/css">
-                               @import "./style/tests.css";
-                       </STYLE>
-                       <head>
-                               <script type="text/javascript" src="./style/jquery.min.js" />
-                       </head>
-                       <body>
-                               <div id="testcasepage">
-                                       <div id="title">
-                                               <table>
-                                                       <tr>
-                                                               <td>
-                                                                       <h1>TCT Report</h1>
-                                                               </td>
-                                                       </tr>
-                                               </table>
-                                       </div>
-                                       <div id="overview">
-                                       <table>
-                                               <tr>
-                                                       <td>
-                                       <div id="summary">
-                                               <table>
-                                                       <tr>
-                                                               <th colspan="2">Test Summary</th>
-                                                       </tr>
-                                                       <tr>
-                                                               <td>TCT Version</td>
-                                                               <td>
-                                                                       <xsl:value-of select="result_summary/environment/@tct_version" />
-                                                               </td>
-                                                       </tr>
-                                                       <tr>
-                                                               <td>Test Plan Name</td>
-                                                               <td>
-                                                                       <xsl:value-of select="result_summary/@plan_name" />
-                                                               </td>
-                                                       </tr>
-                                                       <tr>
-                                                               <td>Test Profile</td>
-                                                               <td>
-                                                                       <xsl:value-of select="result_summary/environment/@tct_profile" />
-                                                               </td>
-                                                       </tr>
-                                                       <tr>
-                                                               <td>Build ID</td>
-                                                               <td>
-                                                                       <xsl:choose>
-                                                                               <xsl:when test="result_summary/environment/@build_id">
-                                                                                       <xsl:if test="result_summary/environment/@build_id = ''">
-                                                                                               N/A
-                                                                                       </xsl:if>
-                                                                                       <xsl:value-of select="result_summary/environment/@build_id" />
-                                                                               </xsl:when>
-                                                                               <xsl:otherwise>
-                                                                                       N/A
-                                                                               </xsl:otherwise>
-                                                                       </xsl:choose>
-                                                               </td>
-                                                       </tr>
-                                                       <tr>
-                                                               <td>Test Total</td>
-                                                               <td>
-                                                                       <xsl:value-of select="sum(result_summary//suite/total_case)" />
-                                                               </td>
-                                                       </tr>
-                                                       <tr>
-                                                               <td>Test Passed</td>
-                                                               <td>
-                                                                       <xsl:value-of select="sum(result_summary//suite/pass_case)" />
-                                                               </td>
-                                                       </tr>
-                                                       <tr>
-                                                               <td>Test Failed</td>
-                                                               <td>
-                                                                       <xsl:value-of select="sum(result_summary//suite/fail_case)" />
-                                                               </td>
-                                                       </tr>
-                                                       <tr>
-                                                               <td>Test Blocked</td>
-                                                               <td>
-                                                                       <xsl:value-of select="sum(result_summary//suite/block_case)" />
-                                                               </td>
-                                                       </tr>
-                                                       <tr>
-                                                               <td>Test Not Executed</td>
-                                                               <td>
-                                                                       <xsl:value-of select="sum(result_summary//suite/na_case)" />
-                                                               </td>
-                                                       </tr>
-                                                       <tr>
-                                                               <td>Time</td>
-                                                               <td>
-                                                                       <xsl:value-of select="result_summary/summary/start_at" />
-                                                                       ~
-                                                                       <xsl:value-of select="result_summary/summary/end_at" />
-                                                               </td>
-                                                       </tr>
-                                               </table>
-                                       </div>
-                                       </td>
-                                       <td>
-                                       <div id="device">
-                                               <table>
-                                                       <tr>
-                                                               <th colspan="2">Device Information</th>
-                                                       </tr>
-                                                       <tr>
-                                                               <td>Host Device</td>
-                                                               <td>
-                                                                       <xsl:choose>
-                                                                               <xsl:when test="result_summary/environment/@host">
-                                                                                       <xsl:if test="result_summary/environment/@host = ''">
-                                                                                               N/A
-                                                                                       </xsl:if>
-                                                                                       <xsl:value-of select="result_summary/environment/@host" />
-                                                                               </xsl:when>
-                                                                               <xsl:otherwise>
-                                                                                       N/A
-                                                                               </xsl:otherwise>
-                                                                       </xsl:choose>
-                                                               </td>
-                                                       </tr>
-                                                       <tr>
-                                                               <td>Manufacturer</td>
-                                                               <td>
-                                                                       <xsl:choose>
-                                                                               <xsl:when test="result_summary/environment/@manufacturer">
-                                                                                       <xsl:if test="result_summary/environment/@manufacturer = ''">
-                                                                                               N/A
-                                                                                       </xsl:if>
-                                                                                       <xsl:value-of select="result_summary/environment/@manufacturer" />
-                                                                               </xsl:when>
-                                                                               <xsl:otherwise>
-                                                                                       N/A
-                                                                               </xsl:otherwise>
-                                                                       </xsl:choose>
-                                                               </td>
-                                                       </tr>
-                                                       <tr>
-                                                               <td>Device Model</td>
-                                                               <td>
-                                                                       <xsl:choose>
-                                                                               <xsl:when test="result_summary/environment/@device_model">
-                                                                                       <xsl:if test="result_summary/environment/@device_model = ''">
-                                                                                               N/A
-                                                                                       </xsl:if>
-                                                                                       <xsl:value-of select="result_summary/environment/@device_model" />
-                                                                               </xsl:when>
-                                                                               <xsl:otherwise>
-                                                                                       N/A
-                                                                               </xsl:otherwise>
-                                                                       </xsl:choose>
-                                                               </td>
-                                                       </tr>
-                                                       <tr>
-                                                               <td>Device ID</td>
-                                                               <td>
-                                                                       <xsl:choose>
-                                                                               <xsl:when test="result_summary/environment/@device_id">
-                                                                                       <xsl:if test="result_summary/environment/@device_id = ''">
-                                                                                               N/A
-                                                                                       </xsl:if>
-                                                                                       <xsl:value-of select="result_summary/environment/@device_id" />
-                                                                               </xsl:when>
-                                                                               <xsl:otherwise>
-                                                                                       N/A
-                                                                               </xsl:otherwise>
-                                                                       </xsl:choose>
-                                                               </td>
-                                                       </tr>
-                                                       <tr>
-                                                               <td>Screen Size</td>
-                                                               <td>
-                                                                       <xsl:choose>
-                                                                               <xsl:when test="result_summary/environment/@screen_size">
-                                                                                       <xsl:if test="result_summary/environment/@screen_size = ''">
-                                                                                               N/A
-                                                                                       </xsl:if>
-                                                                                       <xsl:value-of select="result_summary/environment/@screen_size" />
-                                                                               </xsl:when>
-                                                                               <xsl:otherwise>
-                                                                                       N/A
-                                                                               </xsl:otherwise>
-                                                                       </xsl:choose>
-                                                               </td>
-                                                       </tr>
-                                                       <tr>
-                                                               <td>Resolution</td>
-                                                               <td>
-                                                                       <xsl:choose>
-                                                                               <xsl:when test="result_summary/environment/@resolution">
-                                                                                       <xsl:if test="result_summary/environment/@resolution = ''">
-                                                                                               N/A
-                                                                                       </xsl:if>
-                                                                                       <xsl:value-of select="result_summary/environment/@resolution" />
-                                                                               </xsl:when>
-                                                                               <xsl:otherwise>
-                                                                                       N/A
-                                                                               </xsl:otherwise>
-                                                                       </xsl:choose>
-                                                               </td>
-                                                       </tr>
-                                               </table>
-                                       </div>
-                                       </td>
-                                       </tr>
-                                       </table>
-                                       </div>
-                                       <div id="capability">
-                                               <div id="title">
-                                                       <a name="contents"></a>
-                                                       <table>
-                                                               <tr>
-                                                                       <td class="title">
-                                                                               <h1><a href="#" class="see_capabilities">Device Capability</a></h1>
-                                                                       </td>
-                                                               </tr>
-                                                       </table>
-                                               </div>
-                                               <xsl:choose>
-                                                       <xsl:when test="result_summary/capabilities">
-                                                               <div id="capability_table" style="display:none;">
-                                                               <table>
-                                                                       <tr>
-                                                                               <th>Capability Name</th>
-                                                                               <th>Type</th>
-                                                                               <th>Value</th>
-                                                                       </tr>
-                                                                       <xsl:for-each select="result_summary/capabilities/capability">
-                                                                               <xsl:sort select="@name" />
-                                                                               <tr>
-                                                                                       <td>
-                                                                                               <xsl:value-of select="@name" />
-                                                                                       </td>
-                                                                                       <td>
-                                                                                               <xsl:value-of select="@type" />
-                                                                                       </td>
-                                                                                       <td>
-                                                                                               <xsl:choose>
-                                                                                                       <xsl:when test="value">
-                                                                                                               <xsl:value-of select="value" />
-                                                                                                       </xsl:when>
-                                                                                                       <xsl:otherwise>
-                                                                                                               <xsl:value-of select="@support" />
-                                                                                                       </xsl:otherwise>
-                                                                                               </xsl:choose>
-                                                                                       </td>
-                                                                               </tr>
-                                                                       </xsl:for-each>
-                                                               </table>
-                                                               </div>
-                                                       </xsl:when>
-                                                       <xsl:otherwise>
-                                                               The information of device capability is not available.
-                                                       </xsl:otherwise>
-                                               </xsl:choose>
-                                       </div>
-                                       <div id="btc">
-                                               <table>
-                                                       <tr>
-                                                               <td>
-                                                                       <a href="#" class="see_all">Show all</a>
-                                                               </td>
-                                                               <td>
-                                                                       <a href="#" class="see_failed">Show only failed</a>
-                                                               </td>
-                                                               <td>
-                                                                       <a href="#" class="see_blocked">Show only blocked</a>
-                                                               </td>
-                                                               <td>
-                                                                       <a href="#" class="see_na">Show only not executed</a>
-                                                               </td>
-                                                       </tr>
-                                               </table>
-                                       </div>
-                                       <div id="title">
-                                               <h1></h1>
-                                       </div>
-                                       <div id="suite_summary">
-                                               <div id="title">
-                                                       <a name="contents"></a>
-                                                       <table>
-                                                               <tr>
-                                                                       <td class="title">
-                                                                               <h1>Test Summary by Suite</h1>
-                                                                       </td>
-                                                               </tr>
-                                                       </table>
-                                               </div>
-                                               <div id="see_all">
-                                                       <table>
-                                                               <tr>
-                                                                       <th>Suite</th>
-                                                                       <th>Total</th>
-                                                                       <th>Passed</th>
-                                                                       <th>Failed</th>
-                                                                       <th>Blocked</th>
-                                                                       <th>Not Executed</th>
-                                                                       <th class="Ratio">Ratio</th>
-                                                               </tr>
-                                                               <xsl:for-each select="result_summary/suite">
-                                                                       <xsl:if test="total_case &gt; 0">
-                                                                               <tr class="suite_item">
-                                                                                       <xsl:attribute name="id">
-                                                               <xsl:value-of
-                                                                                               select="@name" />
-                                                   </xsl:attribute>
-                                                                                       <td>
-                                                                                               <a>
-                                                                                                       <xsl:attribute name="href"><xsl:value-of
-                                                                                                               select="@name" />.xml</xsl:attribute>
-                                                                                                       <xsl:value-of select="@name" />
-                                                                                               </a>
-                                                                                       </td>
-                                                                                       <td class="total">
-                                                                                               <xsl:value-of select="total_case" />
-                                                                                       </td>
-                                                                                       <td class="pass">
-                                                                                               <xsl:value-of select="pass_case" />
-                                                                                       </td>
-                                                                                       <td class="fail">
-                                                                                               <xsl:value-of select="fail_case" />
-                                                                                       </td>
-                                                                                       <td class="block">
-                                                                                               <xsl:value-of select="block_case" />
-                                                                                       </td>
-                                                                                       <td class="na">
-                                                                                               <xsl:value-of select="na_case" />
-                                                                                       </td>
-                                                                                       <td class="Ratio">
-                                                                                               <div class="RatioGraphic" />
-                                                                                       </td>
-                                                                               </tr>
-                                                                       </xsl:if>
-                                                               </xsl:for-each>
-                                                       </table>
-                                               </div>
-                                               <div id="see_fail" style="display:none;">
-                                                       <table>
-                                                               <tr>
-                                                                       <th>Suite</th>
-                                                                       <th>Total</th>
-                                                                       <th>Passed</th>
-                                                                       <th>Failed</th>
-                                                                       <th>Blocked</th>
-                                                                       <th>Not Executed</th>
-                                                                       <th class="Ratio">Ratio</th>
-                                                               </tr>
-                                                               <xsl:for-each select="result_summary/suite">
-                                                                       <xsl:if test="fail_case &gt; 0">
-                                                                               <tr class="suite_item">
-                                                                                       <xsl:attribute name="id">
-                                                               <xsl:value-of
-                                                                                               select="@name" />
-                                                   </xsl:attribute>
-                                                                                       <td>
-                                                                                               <a>
-                                                                                                       <xsl:attribute name="href"><xsl:value-of
-                                                                                                               select="@name" />.xml</xsl:attribute>
-                                                                                                       <xsl:value-of select="@name" />
-                                                                                               </a>
-                                                                                       </td>
-                                                                                       <td class="total">
-                                                                                               <xsl:value-of select="total_case" />
-                                                                                       </td>
-                                                                                       <td class="pass">
-                                                                                               <xsl:value-of select="pass_case" />
-                                                                                       </td>
-                                                                                       <td class="fail">
-                                                                                               <xsl:value-of select="fail_case" />
-                                                                                       </td>
-                                                                                       <td class="block">
-                                                                                               <xsl:value-of select="block_case" />
-                                                                                       </td>
-                                                                                       <td class="na">
-                                                                                               <xsl:value-of select="na_case" />
-                                                                                       </td>
-                                                                                       <td class="Ratio">
-                                                                                               <div class="RatioGraphic" />
-                                                                                       </td>
-                                                                               </tr>
-                                                                       </xsl:if>
-                                                               </xsl:for-each>
-                                                       </table>
-                                               </div>
-                                               <div id="see_block" style="display:none;">
-                                                       <table>
-                                                               <tr>
-                                                                       <th>Suite</th>
-                                                                       <th>Total</th>
-                                                                       <th>Passed</th>
-                                                                       <th>Failed</th>
-                                                                       <th>Blocked</th>
-                                                                       <th>Not Executed</th>
-                                                                       <th class="Ratio">Ratio</th>
-                                                               </tr>
-                                                               <xsl:for-each select="result_summary/suite">
-                                                                       <xsl:if test="block_case &gt; 0">
-                                                                               <tr class="suite_item">
-                                                                                       <xsl:attribute name="id">
-                                                               <xsl:value-of
-                                                                                               select="@name" />
-                                                   </xsl:attribute>
-                                                                                       <td>
-                                                                                               <a>
-                                                                                                       <xsl:attribute name="href"><xsl:value-of
-                                                                                                               select="@name" />.xml</xsl:attribute>
-                                                                                                       <xsl:value-of select="@name" />
-                                                                                               </a>
-                                                                                       </td>
-                                                                                       <td class="total">
-                                                                                               <xsl:value-of select="total_case" />
-                                                                                       </td>
-                                                                                       <td class="pass">
-                                                                                               <xsl:value-of select="pass_case" />
-                                                                                       </td>
-                                                                                       <td class="fail">
-                                                                                               <xsl:value-of select="fail_case" />
-                                                                                       </td>
-                                                                                       <td class="block">
-                                                                                               <xsl:value-of select="block_case" />
-                                                                                       </td>
-                                                                                       <td class="na">
-                                                                                               <xsl:value-of select="na_case" />
-                                                                                       </td>
-                                                                                       <td class="Ratio">
-                                                                                               <div class="RatioGraphic" />
-                                                                                       </td>
-                                                                               </tr>
-                                                                       </xsl:if>
-                                                               </xsl:for-each>
-                                                       </table>
-                                               </div>
-                                               <div id="see_na" style="display:none;">
-                                                       <table>
-                                                               <tr>
-                                                                       <th>Suite</th>
-                                                                       <th>Total</th>
-                                                                       <th>Passed</th>
-                                                                       <th>Failed</th>
-                                                                       <th>Blocked</th>
-                                                                       <th>Not Executed</th>
-                                                                       <th class="Ratio">Ratio</th>
-                                                               </tr>
-                                                               <xsl:for-each select="result_summary/suite">
-                                                                       <xsl:if test="na_case &gt; 0">
-                                                                               <tr class="suite_item">
-                                                                                       <xsl:attribute name="id">
-                                                               <xsl:value-of
-                                                                                               select="@name" />
-                                                   </xsl:attribute>
-                                                                                       <td>
-                                                                                               <a>
-                                                                                                       <xsl:attribute name="href"><xsl:value-of
-                                                                                                               select="@name" />.xml</xsl:attribute>
-                                                                                                       <xsl:value-of select="@name" />
-                                                                                               </a>
-                                                                                       </td>
-                                                                                       <td class="total">
-                                                                                               <xsl:value-of select="total_case" />
-                                                                                       </td>
-                                                                                       <td class="pass">
-                                                                                               <xsl:value-of select="pass_case" />
-                                                                                       </td>
-                                                                                       <td class="fail">
-                                                                                               <xsl:value-of select="fail_case" />
-                                                                                       </td>
-                                                                                       <td class="block">
-                                                                                               <xsl:value-of select="block_case" />
-                                                                                       </td>
-                                                                                       <td class="na">
-                                                                                               <xsl:value-of select="na_case" />
-                                                                                       </td>
-                                                                                       <td class="Ratio">
-                                                                                               <div class="RatioGraphic" />
-                                                                                       </td>
-                                                                               </tr>
-                                                                       </xsl:if>
-                                                               </xsl:for-each>
-                                                       </table>
-                                               </div>
-                                       </div>
-                               </div>
-                               <div id="goTopBtn">
-                                       <img border="0" src="./style/back_top.png" />
-                               </div>
-                               <script type="text/javascript" src="./style/application.js" />
-                               <script language="javascript" type="text/javascript">
-                                       $(document).ready(function(){
-                                       goTopEx();
-                                       drawRatio();
-                                       });
-                               </script>
-                       </body>
-               </html>
-       </xsl:template>
-       <xsl:template name="br-replace">
-               <xsl:param name="word" />
-               <xsl:variable name="cr">
-                       <xsl:text>\n</xsl:text>
-               </xsl:variable>
-               <xsl:choose>
-                       <xsl:when test="contains($word,$cr)">
-                               <xsl:value-of select="substring-before($word,$cr)" />
-                               <br />
-                               <xsl:call-template name="br-replace">
-                                       <xsl:with-param name="word" select="substring-after($word,$cr)" />
-                               </xsl:call-template>
-                       </xsl:when>
-                       <xsl:otherwise>
-                               <xsl:value-of select="$word" />
-                       </xsl:otherwise>
-               </xsl:choose>
-       </xsl:template>
-</xsl:stylesheet>
diff --git a/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/shell/style/testresult.xsl b/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/shell/style/testresult.xsl
deleted file mode 100755 (executable)
index 244c187..0000000
+++ /dev/null
@@ -1,559 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<xsl:stylesheet version="1.0"
-       xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
-       <xsl:output method="html" version="1.0" encoding="UTF-8"
-               indent="yes" />
-       <xsl:template match="/">
-               <html>
-                       <STYLE type="text/css">
-                               @import "./style/tests.css";
-                       </STYLE>
-                       <head>
-                               <script type="text/javascript" src="./style/jquery.min.js" />
-                               <script type="text/javascript" src="./style/popup.js" />
-                       </head>
-                       <body>
-                               <div id="title">
-                                       <table>
-                                               <tr>
-                                                       <td class="title">
-                                                               <h1 align="center">Suite Test Results</h1>
-                                                       </td>
-                                               </tr>
-                                       </table>
-                               </div>
-                               <div id="btc">
-                                       <table>
-                                               <tr>
-                                                       <td>
-                                                               <a href="#" class="see_all">Show all</a>
-                                                       </td>
-                                                       <td>
-                                                               <a href="#" class="see_failed">Show only failed</a>
-                                                       </td>
-                                                       <td>
-                                                               <a href="#" class="see_blocked">Show only blocked</a>
-                                                       </td>
-                                                       <td>
-                                                               <a href="#" class="see_na">Show only not executed</a>
-                                                       </td>
-                                                       <td>
-                                                               <a href="summary.xml">Summary</a>
-                                                       </td>
-                                               </tr>
-                                       </table>
-                               </div>
-                               <div id="testcasepage">
-                                       <div id="cases">
-                                               <div id="see_all">
-                                                       <xsl:for-each select="test_definition/suite">
-                                                               <div id="suite_title">
-                                                                       <h2>
-                                                                               Test Suite:
-                                                                               <xsl:value-of select="@name" />
-                                                                               (All)
-                                                                       </h2>
-                                                                       <a>
-                                                                               <xsl:attribute name="name">
-                                                                     <xsl:value-of
-                                                                                       select="@name" />
-                                                                  </xsl:attribute>
-                                                                       </a>
-                                                               </div>
-                                                               <table>
-                                                                       <tr>
-                                                                               <th>Case_ID</th>
-                                                                               <th>Purpose</th>
-                                                                               <th>Result</th>
-                                                                               <th>Stdout</th>
-                                                                       </tr>
-                                                                       <xsl:for-each select=".//set">
-                                                                               <tr>
-                                                                                       <xsl:choose>
-                                                                                               <xsl:when test="@name">
-                                                                                                       <td colspan="3">
-                                                                                                               <h3>
-                                                                                                                       Test Set:
-                                                                                                                       <xsl:value-of select="@name" />
-                                                                                                               </h3>
-                                                                                                       </td>
-                                                                                                       <td colspan="1">
-                                                                                                               <h4>
-                                                                                                                       <a>
-                                                                                                                               <xsl:attribute name="href"><xsl:value-of
-                                                                                                                                       select="@set_debug_msg" /></xsl:attribute>
-                                                                                                                               dlog
-                                                                                                                       </a>
-                                                                                                               </h4>
-                                                                                                       </td>
-                                                                                               </xsl:when>
-                                                                                               <xsl:otherwise>
-                                                                                                       <td colspan="4">
-                                                                                                               <h3>
-                                                                                                                       Test Set:
-                                                                                                                       <xsl:value-of select="@name" />
-                                                                                                               </h3>
-                                                                                                       </td>
-                                                                                               </xsl:otherwise>
-                                                                                       </xsl:choose>
-                                                                               </tr>
-                                                                               <xsl:for-each select=".//testcase">
-                                                                                       <tr>
-                                                                                               <td>
-                                                                                                       <div
-                                                                                                               style="background-color:#F5DEB3;border:1px solid black;display:none;">
-                                                                                                               <xsl:attribute name="id"><xsl:value-of
-                                                                                                                       select="@id" /></xsl:attribute>
-                                                                                                               <p>
-                                                                                                                       <xsl:for-each select="./description/steps//step">
-                                                                                                                               <xsl:sort select="@order" />
-                                                                                                                               <B>
-                                                                                                                                       Step
-                                                                                                                                       <xsl:value-of select="@order" />
-                                                                                                                                       :
-                                                                                                                               </B>
-                                                                                                                               <br />
-                                                                                                                               <xsl:value-of select=".//step_desc" />
-                                                                                                                               <br />
-                                                                                                                               <B>Expected:</B>
-                                                                                                                               <xsl:value-of select=".//expected" />
-                                                                                                                               <br />
-                                                                                                                       </xsl:for-each>
-                                                                                                               </p>
-                                                                                                               <p>
-                                                                                                                       <br />
-                                                                                                                       <B>
-                                                                                                                               Entry:
-                                                                                                                               <br />
-                                                                                                                       </B>
-                                                                                                                       <xsl:value-of select="./description//test_script_entry" />
-                                                                                                                       <br />
-                                                                                                               </p>
-                                                                                                       </div>
-                                                                                                       <a href="#" class="test_case_popup">
-                                                                                                               <xsl:attribute name="id"><xsl:value-of
-                                                                                                                       select="@id" /></xsl:attribute>
-                                                                                                               <xsl:value-of select="@id" />
-                                                                                                       </a>
-                                                                                               </td>
-                                                                                               <td>
-                                                                                                       <xsl:value-of select="@purpose" />
-                                                                                               </td>
-
-                                                                                               <xsl:choose>
-                                                                                                       <xsl:when test="@result">
-                                                                                                               <xsl:if test="@result = 'FAIL'">
-                                                                                                                       <td class="red_rate">
-                                                                                                                               <xsl:value-of select="@result" />
-                                                                                                                       </td>
-                                                                                                               </xsl:if>
-                                                                                                               <xsl:if test="@result = 'PASS'">
-                                                                                                                       <td class="green_rate">
-                                                                                                                               <xsl:value-of select="@result" />
-                                                                                                                       </td>
-                                                                                                               </xsl:if>
-                                                                                                               <xsl:if test="@result = 'BLOCK' ">
-                                                                                                                       <td class="orange_rate">
-                                                                                                                               BLOCK
-                                                                                                                       </td>
-                                                                                                               </xsl:if>
-                                                                                                               <xsl:if
-                                                                                                                       test="@result != 'BLOCK' and @result != 'FAIL' and @result != 'PASS' ">
-                                                                                                                       <td class="gray_rate">
-                                                                                                                               Not Run
-                                                                                                                       </td>
-                                                                                                               </xsl:if>
-                                                                                                       </xsl:when>
-                                                                                                       <xsl:otherwise>
-                                                                                                               <td>
-
-                                                                                                               </td>
-                                                                                                       </xsl:otherwise>
-                                                                                               </xsl:choose>
-                                                                                               <td>
-                                                                                                       <xsl:call-template name="br-replace">
-                                                                                                               <xsl:with-param name="word"
-                                                                                                                       select=".//result_info/stdout" />
-                                                                                                       </xsl:call-template>
-                                                                                                       <xsl:if test=".//result_info/stdout = ''">
-                                                                                                               N/A
-                                                                                                       </xsl:if>
-                                                                                               </td>
-                                                                                       </tr>
-                                                                               </xsl:for-each>
-                                                                       </xsl:for-each>
-                                                               </table>
-                                                       </xsl:for-each>
-                                               </div>
-                                               <div id="see_fail" style="display:none;">
-                                                       <xsl:for-each select="test_definition/suite">
-                                                               <div id="suite_title">
-                                                                       <h2>
-                                                                               Test Suite:
-                                                                               <xsl:value-of select="@name" />
-                                                                               (Failed only)
-                                                                       </h2>
-                                                                       <a>
-                                                                               <xsl:attribute name="name">
-                                                                     <xsl:value-of
-                                                                                       select="@name" />
-                                                                  </xsl:attribute>
-                                                                       </a>
-                                                               </div>
-                                                               <table>
-                                                                       <tr>
-                                                                               <th>Case_ID</th>
-                                                                               <th>Purpose</th>
-                                                                               <th>Result</th>
-                                                                               <th>Stdout</th>
-                                                                       </tr>
-                                                                       <xsl:for-each select=".//set">
-                                                                               <tr>
-                                                                                       <xsl:choose>
-                                                                                               <xsl:when test="@name">
-                                                                                                       <td colspan="3">
-                                                                                                               <h3>
-                                                                                                                       Test Set:
-                                                                                                                       <xsl:value-of select="@name" />
-                                                                                                               </h3>
-                                                                                                       </td>
-                                                                                                       <td colspan="1">
-                                                                                                               <h4>
-                                                                                                                       <a>
-                                                                                                                               <xsl:attribute name="href"><xsl:value-of
-                                                                                                                                       select="@set_debug_msg" /></xsl:attribute>
-                                                                                                                               dlog
-                                                                                                                       </a>
-                                                                                                               </h4>
-                                                                                                       </td>
-                                                                                               </xsl:when>
-                                                                                               <xsl:otherwise>
-                                                                                                       <td colspan="4">
-                                                                                                               <h3>
-                                                                                                                       Test Set:
-                                                                                                                       <xsl:value-of select="@name" />
-                                                                                                               </h3>
-                                                                                                       </td>
-                                                                                               </xsl:otherwise>
-                                                                                       </xsl:choose>
-                                                                               </tr>
-                                                                               <xsl:for-each select=".//testcase[@result='FAIL']">
-                                                                                       <tr>
-                                                                                               <td>
-                                                                                                       <div
-                                                                                                               style="background-color:#F5DEB3;border:1px solid black;display:none;">
-                                                                                                               <xsl:attribute name="id">fail_<xsl:value-of
-                                                                                                                       select="@id" /></xsl:attribute>
-                                                                                                               <p>
-                                                                                                                       <xsl:for-each select="./description/steps//step">
-                                                                                                                               <xsl:sort select="@order" />
-                                                                                                                               <B>
-                                                                                                                                       Step
-                                                                                                                                       <xsl:value-of select="@order" />
-                                                                                                                                       :
-                                                                                                                               </B>
-                                                                                                                               <br />
-                                                                                                                               <xsl:value-of select=".//step_desc" />
-                                                                                                                               <br />
-                                                                                                                               <B>Expected:</B>
-                                                                                                                               <xsl:value-of select=".//expected" />
-                                                                                                                               <br />
-                                                                                                                       </xsl:for-each>
-                                                                                                               </p>
-                                                                                                               <p>
-                                                                                                                       <br />
-                                                                                                                       <B>
-                                                                                                                               Entry:
-                                                                                                                               <br />
-                                                                                                                       </B>
-                                                                                                                       <xsl:value-of select="./description//test_script_entry" />
-                                                                                                                       <br />
-                                                                                                               </p>
-                                                                                                       </div>
-                                                                                                       <a href="#" class="test_case_popup">
-                                                                                                               <xsl:attribute name="id">fail_<xsl:value-of
-                                                                                                                       select="@id" /></xsl:attribute>
-                                                                                                               <xsl:value-of select="@id" />
-                                                                                                       </a>
-                                                                                               </td>
-                                                                                               <td>
-                                                                                                       <xsl:value-of select="@purpose" />
-                                                                                               </td>
-
-                                                                                               <td class="red_rate">
-                                                                                                       <xsl:value-of select="@result" />
-                                                                                               </td>
-                                                                                               <td>
-                                                                                                       <xsl:call-template name="br-replace">
-                                                                                                               <xsl:with-param name="word"
-                                                                                                                       select=".//result_info/stdout" />
-                                                                                                       </xsl:call-template>
-                                                                                                       <xsl:if test=".//result_info/stdout = ''">
-                                                                                                               N/A
-                                                                                                       </xsl:if>
-                                                                                               </td>
-                                                                                       </tr>
-                                                                               </xsl:for-each>
-                                                                       </xsl:for-each>
-                                                               </table>
-                                                       </xsl:for-each>
-                                               </div>
-                                               <div id="see_block" style="display:none;">
-                                                       <xsl:for-each select="test_definition/suite">
-                                                               <div id="suite_title">
-                                                                       <h2>
-                                                                               Test Suite:
-                                                                               <xsl:value-of select="@name" />
-                                                                               (Blocked Only)
-                                                                       </h2>
-                                                                       <a>
-                                                                               <xsl:attribute name="name">
-                                                                     <xsl:value-of
-                                                                                       select="@name" />
-                                                                  </xsl:attribute>
-                                                                       </a>
-                                                               </div>
-                                                               <table>
-                                                                       <tr>
-                                                                               <th>Case_ID</th>
-                                                                               <th>Purpose</th>
-                                                                               <th>Result</th>
-                                                                               <th>Stdout</th>
-                                                                       </tr>
-                                                                       <xsl:for-each select=".//set">
-                                                                               <tr>
-                                                                                       <xsl:choose>
-                                                                                               <xsl:when test="@name">
-                                                                                                       <td colspan="3">
-                                                                                                               <h3>
-                                                                                                                       Test Set:
-                                                                                                                       <xsl:value-of select="@name" />
-                                                                                                               </h3>
-                                                                                                       </td>
-                                                                                                       <td colspan="1">
-                                                                                                               <h4>
-                                                                                                                       <a>
-                                                                                                                               <xsl:attribute name="href"><xsl:value-of
-                                                                                                                                       select="@set_debug_msg" /></xsl:attribute>
-                                                                                                                               dlog
-                                                                                                                       </a>
-                                                                                                               </h4>
-                                                                                                       </td>
-                                                                                               </xsl:when>
-                                                                                               <xsl:otherwise>
-                                                                                                       <td colspan="4">
-                                                                                                               <h3>
-                                                                                                                       Test Set:
-                                                                                                                       <xsl:value-of select="@name" />
-                                                                                                               </h3>
-                                                                                                       </td>
-                                                                                               </xsl:otherwise>
-                                                                                       </xsl:choose>
-                                                                               </tr>
-                                                                               <xsl:for-each select=".//testcase[@result='BLOCK']">
-                                                                                       <tr>
-                                                                                               <td>
-                                                                                                       <div
-                                                                                                               style="background-color:#F5DEB3;border:1px solid black;display:none;">
-                                                                                                               <xsl:attribute name="id">block_<xsl:value-of
-                                                                                                                       select="@id" /></xsl:attribute>
-                                                                                                               <p>
-                                                                                                                       <xsl:for-each select="./description/steps//step">
-                                                                                                                               <xsl:sort select="@order" />
-                                                                                                                               <B>
-                                                                                                                                       Step
-                                                                                                                                       <xsl:value-of select="@order" />
-                                                                                                                                       :
-                                                                                                                               </B>
-                                                                                                                               <br />
-                                                                                                                               <xsl:value-of select=".//step_desc" />
-                                                                                                                               <br />
-                                                                                                                               <B>Expected:</B>
-                                                                                                                               <xsl:value-of select=".//expected" />
-                                                                                                                               <br />
-                                                                                                                       </xsl:for-each>
-                                                                                                               </p>
-                                                                                                               <p>
-                                                                                                                       <br />
-                                                                                                                       <B>
-                                                                                                                               Entry:
-                                                                                                                               <br />
-                                                                                                                       </B>
-                                                                                                                       <xsl:value-of select="./description//test_script_entry" />
-                                                                                                                       <br />
-                                                                                                               </p>
-                                                                                                       </div>
-                                                                                                       <a href="#" class="test_case_popup">
-                                                                                                               <xsl:attribute name="id">block_<xsl:value-of
-                                                                                                                       select="@id" /></xsl:attribute>
-                                                                                                               <xsl:value-of select="@id" />
-                                                                                                       </a>
-                                                                                               </td>
-                                                                                               <td>
-                                                                                                       <xsl:value-of select="@purpose" />
-                                                                                               </td>
-
-                                                                                               <td class="orange_rate">
-                                                                                                       <xsl:value-of select="@result" />
-                                                                                               </td>
-                                                                                               <td>
-                                                                                                       <xsl:call-template name="br-replace">
-                                                                                                               <xsl:with-param name="word"
-                                                                                                                       select=".//result_info/stdout" />
-                                                                                                       </xsl:call-template>
-                                                                                                       <xsl:if test=".//result_info/stdout = ''">
-                                                                                                               N/A
-                                                                                                       </xsl:if>
-                                                                                               </td>
-                                                                                       </tr>
-                                                                               </xsl:for-each>
-                                                                       </xsl:for-each>
-                                                               </table>
-                                                       </xsl:for-each>
-                                               </div>
-                                               <div id="see_na" style="display:none;">
-                                                       <xsl:for-each select="test_definition/suite">
-                                                               <div id="suite_title">
-                                                                       <h2>
-                                                                               Test Suite:
-                                                                               <xsl:value-of select="@name" />
-                                                                               (Not executed Only)
-                                                                       </h2>
-                                                                       <a>
-                                                                               <xsl:attribute name="name">
-                                                                     <xsl:value-of
-                                                                                       select="@name" />
-                                                                  </xsl:attribute>
-                                                                       </a>
-                                                               </div>
-                                                               <table>
-                                                                       <tr>
-                                                                               <th>Case_ID</th>
-                                                                               <th>Purpose</th>
-                                                                               <th>Result</th>
-                                                                               <th>Stdout</th>
-                                                                       </tr>
-                                                                       <xsl:for-each select=".//set">
-                                                                               <tr>
-                                                                                       <xsl:choose>
-                                                                                               <xsl:when test="@name">
-                                                                                                       <td colspan="3">
-                                                                                                               <h3>
-                                                                                                                       Test Set:
-                                                                                                                       <xsl:value-of select="@name" />
-                                                                                                               </h3>
-                                                                                                       </td>
-                                                                                                       <td colspan="1">
-                                                                                                               <h4>
-                                                                                                                       <a>
-                                                                                                                               <xsl:attribute name="href"><xsl:value-of
-                                                                                                                                       select="@set_debug_msg" /></xsl:attribute>
-                                                                                                                               dlog
-                                                                                                                       </a>
-                                                                                                               </h4>
-                                                                                                       </td>
-                                                                                               </xsl:when>
-                                                                                               <xsl:otherwise>
-                                                                                                       <td colspan="4">
-                                                                                                               <h3>
-                                                                                                                       Test Set:
-                                                                                                                       <xsl:value-of select="@name" />
-                                                                                                               </h3>
-                                                                                                       </td>
-                                                                                               </xsl:otherwise>
-                                                                                       </xsl:choose>
-                                                                               </tr>
-                                                                               <xsl:for-each select=".//testcase[@result='N/A']">
-                                                                                       <tr>
-                                                                                               <td>
-                                                                                                       <div
-                                                                                                               style="background-color:#F5DEB3;border:1px solid black;display:none;">
-                                                                                                               <xsl:attribute name="id">na_<xsl:value-of
-                                                                                                                       select="@id" /></xsl:attribute>
-                                                                                                               <p>
-                                                                                                                       <xsl:for-each select="./description/steps//step">
-                                                                                                                               <xsl:sort select="@order" />
-                                                                                                                               <B>
-                                                                                                                                       Step
-                                                                                                                                       <xsl:value-of select="@order" />
-                                                                                                                                       :
-                                                                                                                               </B>
-                                                                                                                               <br />
-                                                                                                                               <xsl:value-of select=".//step_desc" />
-                                                                                                                               <br />
-                                                                                                                               <B>Expected:</B>
-                                                                                                                               <xsl:value-of select=".//expected" />
-                                                                                                                               <br />
-                                                                                                                       </xsl:for-each>
-                                                                                                               </p>
-                                                                                                               <p>
-                                                                                                                       <br />
-                                                                                                                       <B>
-                                                                                                                               Entry:
-                                                                                                                               <br />
-                                                                                                                       </B>
-                                                                                                                       <xsl:value-of select="./description//test_script_entry" />
-                                                                                                                       <br />
-                                                                                                               </p>
-                                                                                                       </div>
-                                                                                                       <a href="#" class="test_case_popup">
-                                                                                                               <xsl:attribute name="id">na_<xsl:value-of
-                                                                                                                       select="@id" /></xsl:attribute>
-                                                                                                               <xsl:value-of select="@id" />
-                                                                                                       </a>
-                                                                                               </td>
-                                                                                               <td>
-                                                                                                       <xsl:value-of select="@purpose" />
-                                                                                               </td>
-
-                                                                                               <td class="gray_rate">
-                                                                                                       <xsl:value-of select="@result" />
-                                                                                               </td>
-                                                                                               <td>
-                                                                                                       <xsl:call-template name="br-replace">
-                                                                                                               <xsl:with-param name="word"
-                                                                                                                       select=".//result_info/stdout" />
-                                                                                                       </xsl:call-template>
-                                                                                                       <xsl:if test=".//result_info/stdout = ''">
-                                                                                                               N/A
-                                                                                                       </xsl:if>
-                                                                                               </td>
-                                                                                       </tr>
-                                                                               </xsl:for-each>
-                                                                       </xsl:for-each>
-                                                               </table>
-                                                       </xsl:for-each>
-                                               </div>
-                                       </div>
-                               </div>
-                               <div id="goTopBtn">
-                                       <img border="0" src="./style/back_top.png" />
-                               </div>
-                               <script type="text/javascript" src="./style/application.js" />
-                               <script language="javascript" type="text/javascript">
-                                       $(document).ready(function(){
-                                       goTopEx();
-                                       });
-                               </script>
-                       </body>
-               </html>
-       </xsl:template>
-       <xsl:template name="br-replace">
-               <xsl:param name="word" />
-               <xsl:variable name="cr">
-                       <xsl:text>\n</xsl:text>
-               </xsl:variable>
-               <xsl:choose>
-                       <xsl:when test="contains($word,$cr)">
-                               <xsl:value-of select="substring-before($word,$cr)" />
-                               <br />
-                               <xsl:call-template name="br-replace">
-                                       <xsl:with-param name="word" select="substring-after($word,$cr)" />
-                               </xsl:call-template>
-                       </xsl:when>
-                       <xsl:otherwise>
-                               <xsl:value-of select="$word" />
-                       </xsl:otherwise>
-               </xsl:choose>
-       </xsl:template>
-</xsl:stylesheet>
diff --git a/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/shell/style/tests.css b/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/shell/style/tests.css
deleted file mode 100755 (executable)
index 487bca0..0000000
+++ /dev/null
@@ -1,195 +0,0 @@
-@charset "UTF-8";\r
-/* CSS Document */\r
-#testcasepage div,#testcasepage h1,#testcasepage p,#testcasepage table,#testcasepage tr,#testcasepage th,#testcasepage td\r
-       {\r
-       margin: 0;\r
-       padding: 0;\r
-       border: 0;\r
-       font-weight: inherit;\r
-       font-style: inherit;\r
-       font-size: 0.96em;\r
-       font-family: arial;\r
-       vertical-align: baseline;\r
-}\r
-\r
-#title td, #btc td{\r
-       margin: 0;\r
-       padding: 0;\r
-       border: 0;\r
-       font-weight: inherit;\r
-       font-style: inherit;\r
-       font-size: 0.96em;\r
-       font-family: arial;\r
-       vertical-align: baseline;\r
-}\r
-\r
-td.Ratio {\r
-       text-align: left;\r
-       font-weight: normal;\r
-       padding: 4px 10px 4px 5px;\r
-       vertical-align: middle;\r
-}\r
-\r
-th.Ratio {\r
-       width: 400px;\r
-}\r
-\r
-#testcasepage p {\r
-       text-align: left;\r
-}\r
-\r
-#suite_title {\r
-       text-align: left;\r
-}\r
-\r
-#btc {\r
-       text-align: right;\r
-}\r
-\r
-#btc table {\r
-       position: absolute;\r
-       right: 0px;\r
-       width: 600px;\r
-}\r
-\r
-#testcasepage table {\r
-       border-collapse: separate;\r
-       border-spacing: 0;\r
-       margin-bottom: 1.4em;\r
-       vertical-align: middle;\r
-}\r
-\r
-#testcasepage th,#testcasepage td {\r
-       text-align: left;\r
-       font-weight: normal;\r
-       padding: 4px 10px 4px 5px;\r
-       vertical-align: middle;\r
-}\r
-\r
-#cases table {\r
-       width: 101%;\r
-}\r
-\r
-#cases td {\r
-       border-left: 0px;\r
-       font-weight: normal;\r
-       border-bottom: 0px;\r
-}\r
-\r
-#suite_summary table {\r
-       width: 100%;\r
-}\r
-\r
-\r
-#overview table {\r
-       width: 101%;\r
-}\r
-\r
-#overview table, #overview td, #overview tr {\r
-       border-left: none;\r
-       border-bottom: none;\r
-       border-right: none;\r
-       vertical-align: top;\r
-}\r
-\r
-#overview td{\r
-       width: 50%;\r
-}\r
-\r
-#capability table {\r
-       width: 50%;\r
-}\r
-\r
-#fail_cases table {\r
-       width: 101%;\r
-}\r
-\r
-#title table {\r
-       width: 101%;\r
-}\r
-\r
-#device table {\r
-       width: 100%;\r
-}\r
-\r
-#summary table {\r
-       width: 100%;\r
-}\r
-\r
-#testcasepage th {\r
-       border-bottom: 1px solid #000;\r
-       background-color: #AAAAAA;\r
-       border-left: 1px solid #000;\r
-       border-top: 1px solid #000;\r
-       color: #000;\r
-       font-weight: bold;\r
-       vertical-align: bottom;\r
-}\r
-\r
-#summary th:last-child,#summary td:last-child, #device th:last-child,#device td:last-child, #suite_summary th:last-child,#suite_summary td:last-child,#cases th:last-child,#cases td:last-child,#capability th:last-child,#capability td:last-child {\r
-       border-right: 1px solid #000;\r
-}\r
-\r
-#testcasepage td {\r
-       font-weight: normal;\r
-}\r
-\r
-#summary td, #device td, #capability td, #suite_summary td, #cases td{\r
-       border-left: 1px solid;\r
-       font-weight: normal;\r
-       border-bottom: 1px solid;\r
-}\r
-\r
-#testcasepage td.yellow_rate {\r
-       background-color: #ffcc00;\r
-}\r
-\r
-#testcasepage td.green_rate {\r
-       background-color: #1E90FF;\r
-}\r
-\r
-#testcasepage td.dgreen_rate {\r
-       background-color: #339933;\r
-}\r
-\r
-#testcasepage td.red_rate {\r
-       background-color: #FF3333;\r
-}\r
-\r
-#testcasepage td.orange_rate {\r
-       background-color: #FFA500;\r
-}\r
-\r
-#testcasepage td.gray_rate {\r
-       background-color: #AAAAAA;\r
-}\r
-\r
-#title table,#title tr,#title td {\r
-       border-left: none;\r
-       border-bottom: none;\r
-       text-align: center;\r
-}\r
-\r
-#title td:last-child {\r
-       border-right: none;\r
-}\r
-\r
-#testcasepage h1 {\r
-       font-size: 2em;\r
-       font-family: Arial, sans-serif;\r
-       font-weight: bold;\r
-       line-height: 1;\r
-       color: #000;\r
-       margin-bottom: 0.75em;\r
-       padding-top: 0.25em;\r
-       font-weight: bold;\r
-}\r
-\r
-#goTopBtn {\r
-       right: 0px;\r
-       bottom: 0px;\r
-       position: fixed; +\r
-       position: absolute;\r
-       top: expression(parseInt(document.body.scrollTop)+document.body.clientHeight-40\r
-               );\r
-}\r
diff --git a/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/shell/tct-plan-generator b/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/shell/tct-plan-generator
deleted file mode 100755 (executable)
index 855eb22..0000000
+++ /dev/null
@@ -1,42 +0,0 @@
-#!/usr/bin/python
-#
-# Copyright (C) 2012 Intel Corporation
-# 
-# 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
-# of the License, or (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
-#
-# Authors:
-#              Tang, Shaofeng <shaofeng.tang@intel.com>
-
-
-import sys
-from tctshell.plan_options import PlanGeneratorOptions
-from tctshell.plan_runner import PlanRunner
-
-
-def main():
-    wrapper = PlanGeneratorOptions()
-    wrapper.parse_options(sys.argv)
-    output = wrapper.get_output()
-
-    runner = PlanRunner()
-    runner.load_local_repo(wrapper.get_repository_folder(), \
-            wrapper.get_tizenV(), wrapper.get_match_regex(), \
-            wrapper.get_unmatch_regex(), wrapper.get_plan_name(),\
-            wrapper.get_profile_name(), wrapper.get_execute_type())
-
-    runner.to_xml(output)
-
-if __name__ == "__main__":
-    main()
diff --git a/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/shell/tct-scen-generator b/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/shell/tct-scen-generator
deleted file mode 100755 (executable)
index 442adfb..0000000
+++ /dev/null
@@ -1,20 +0,0 @@
-#!/usr/bin/python
-
-import sys
-from tctshell.scenario_options import ScenarioGeneratorOptions
-from tctshell.scenario_runner import ScenarioRunner
-
-
-def main():
-    wrapper = ScenarioGeneratorOptions()
-    wrapper.parse_options(sys.argv)
-    output = wrapper.get_output()
-    runner = ScenarioRunner()
-    runner.load_local_repo(wrapper.get_planlist_args(), \
-            wrapper.get_plansrc_folder(), wrapper.get_scen_name(), \
-            wrapper.getPlanList(), wrapper.getDeviceList())
-
-    runner.to_xml(output)
-
-if __name__ == "__main__":
-    main()
diff --git a/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/shell/tct-shell b/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/shell/tct-shell
deleted file mode 100755 (executable)
index 3600866..0000000
+++ /dev/null
@@ -1,156 +0,0 @@
-#!/usr/bin/python
-#
-# Copyright (C) 2012 Intel Corporation
-# 
-# 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
-# of the License, or (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
-#
-# Authors:
-#              Tang, Shaofeng <shaofeng.tang@intel.com>
-
-import os
-import sys
-import traceback
-import timeit
-import logging
-import threading
-
-from tctshell.shellwrapper import ShellWrapper
-from tctshell.intention_generator import IntentionGenerator
-from tctshell.shellplanner import MultiRunnPlan
-from tctshell.shellworker import PlanExecutor
-from tctshell.distribute_plan import AutoPlanExecutor
-from tctshell.result_manager import ResultManager
-from tctshell.logmanager import LOGGER
-from tctshell.constants import Constants
-from tctshell.environment_manager import EnvironmentManager
-from tctshell.devicemanager import DevBaseManager
-from tctshell.sdbmanager import SdbManager
-
-
-def main():
-    #time check
-    env_manager = None
-    plans = None
-    devmgr = None
-    try:
-        start_time = timeit.default_timer()
-
-        devbaseMgr = DevBaseManager()
-        devbaseMgr.start()
-
-        devmgr = devbaseMgr.DeviceManager()
-        wrapper = ShellWrapper(devmgr)
-        wrapper.parse_options(sys.argv)
-
-        isPreconSet = wrapper.is_enable_preconf_func()
-
-        devmgr.setDbuteDevIds(wrapper.getDbuteDevIds())
-
-        resultIns = ResultManager()
-        plans = IntentionGenerator.genIntentionData(wrapper, devmgr)
-
-        if plans is None:
-            LOGGER.error("Not found test suites")
-            raise
-
-        env_manager = EnvironmentManager(plans, isPreconSet, \
-                wrapper.get_tracking_dump(), devmgr)
-        env_manager.setup()
-
-        MRP_i = MultiRunnPlan.getInstance()
-        pExecutor = []
-        if plans:
-            for plan in plans:
-                if len(plan.getSuites()) > 0:
-                    MRP_i.addPlan(plan.getPlanName(), plan)
-
-            resultManager = threading.Thread(\
-                    target=resultIns.waitForFinishedPlans, name="ResultManager")
-            resultManager.start()
-
-            for counter, plan in enumerate(MRP_i.getPlanDict().values()):
-                th = None
-                if Constants.isDistMode():
-                    th = AutoPlanExecutor(plan, counter + 1, isPreconSet, \
-                            env_manager, wrapper.get_run_timeout(), devmgr)
-                else:
-                    th = PlanExecutor(plan, counter + 1, isPreconSet, devmgr)
-
-                pExecutor.append(th)
-
-            if Constants.isDistMode():
-                for plan_thread in pExecutor:
-                    env_manager.recovery_setup(plan_thread.autop_executors)
-
-            for thread in pExecutor:
-                thread.start()
-
-            env_manager.start_monitor()
-
-            pExecutor.append(resultManager)
-            for thread in pExecutor:
-                thread.join()
-
-        env_manager.kill_monitors()
-        LOGGER.info("[ Succeed to complete TCT-shell execution, good-bye ]")
-
-        #time_check
-        end_time = timeit.default_timer()
-        timetaken = end_time - start_time
-        LOGGER.debug("Time taken: %d min %d sec" % (timetaken / 60, \
-            timetaken % 60))
-
-        logging.shutdown()
-        wrapper.fetch_logs(pExecutor)
-        sys.exit(0)
-    except SystemExit:
-        raise
-
-    except KeyboardInterrupt:
-        Constants.clean_unzip_file()
-        logging.shutdown()
-        print ('\nKeyboardInterrupt')
-        print ("Logs saved to ['/opt/tools/shell/tmp/logs']")
-        if threading.activeCount() > 1:
-            os._exit(1)
-        else:
-            sys.exit(1)
-    except:
-        if env_manager:
-            env_manager.kill_monitors()
-
-        if Constants.isDistMode():
-            if plans:
-                for plan in plans:
-                    for dev in devmgr.getSdbDeviceList():
-                        SdbManager.exportDumpFiles(dev.getDeviceId(), \
-                                plan.getResultFolderPath() + "/dump")
-
-        Constants.clean_unzip_file()
-        LOGGER.info("[ Failed to complete TCT-shell execution, good-bye ]")
-        logging.shutdown()
-        print ('-' * 60)
-        traceback.print_exc(file=sys.stdout)
-        print ('-' * 60)
-        print ("Please check logs in [/opt/tools/shell/tmp/logs/]")
-        if threading.activeCount() > 1:
-            os._exit(1)
-        else:
-            sys.exit(1)
-
-
-if __name__ == "__main__":
-    main()
-
diff --git a/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/shell/tctshell/__init__.py b/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/shell/tctshell/__init__.py
deleted file mode 100755 (executable)
index 8b13789..0000000
+++ /dev/null
@@ -1 +0,0 @@
-
diff --git a/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/shell/tctshell/commodule/__init__.py b/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/shell/tctshell/commodule/__init__.py
deleted file mode 100755 (executable)
index 8b13789..0000000
+++ /dev/null
@@ -1 +0,0 @@
-
diff --git a/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/shell/tctshell/commodule/__init__.pyc b/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/shell/tctshell/commodule/__init__.pyc
deleted file mode 100755 (executable)
index d68fe56..0000000
Binary files a/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/shell/tctshell/commodule/__init__.pyc and /dev/null differ
diff --git a/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/shell/tctshell/commodule/killall.py b/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/shell/tctshell/commodule/killall.py
deleted file mode 100755 (executable)
index 664337d..0000000
+++ /dev/null
@@ -1,74 +0,0 @@
-#!/usr/bin/python
-#
-# Copyright (C) 2012 Intel Corporation
-#
-# 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
-# of the License, or (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 51 Franklin Street, Fifth Floor,
-# Boston, MA  02110 - 1301, USA.
-#
-# Authors:
-#              Zhang, Huihui <huihuix.zhang@intel.com>
-#              Wendong,Sui  <weidongx.sun@intel.com>
-""" The process kill for os"""
-
-import os
-import platform
-import signal
-import re
-import ctypes
-
-
-def killall(ppid):
-    """Kill all children process by parent process ID"""
-    os_ver = platform.system()
-    try:
-        if os_ver == "Linux" or os_ver == "Darwin":
-            ppid = str(ppid)
-            pidgrp = []
-
-            def getchildpids(ppid):
-                """Return a list of children process"""
-                command = "ps -ef | awk '{if ($3 == %s) print $2;}'" % str(
-                    ppid)
-                pids = os.popen(command).read()
-                pids = pids.split()
-                return pids
-
-            pidgrp.extend(getchildpids(ppid))
-            for pid in pidgrp:
-                pidgrp.extend(getchildpids(pid))
-            # Insert self process ID to PID group list
-            pidgrp.insert(0, ppid)
-            while len(pidgrp) > 0:
-                pid = pidgrp.pop()
-                try:
-                    os.kill(int(pid), signal.SIGKILL)
-                except OSError as error:
-                    pattern = re.compile('No such process')
-                    match = pattern.search(str(error))
-                    if not match:
-                        print ("[ Error: fail to kill pid: %s," \
-                            " error: %s ]\n" % (int(pid), error))
-        # kill for windows platform
-        else:
-            kernel32 = ctypes.windll.kernel32
-            handle = kernel32.OpenProcess(1, 0, int(ppid))
-            kernel32.TerminateProcess(handle, 0)
-    except OSError as error:
-        pattern = re.compile('No such process')
-        match = pattern.search(str(error))
-        if not match:
-            print ("[ Error: fail to kill pid: %s, error: %s ]\n" \
-                % (int(ppid), error))
-    return None
diff --git a/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/shell/tctshell/commodule/killall.pyc b/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/shell/tctshell/commodule/killall.pyc
deleted file mode 100755 (executable)
index 0e9c3d3..0000000
Binary files a/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/shell/tctshell/commodule/killall.pyc and /dev/null differ
diff --git a/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/shell/tctshell/constants.py b/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/shell/tctshell/constants.py
deleted file mode 100755 (executable)
index 41141a3..0000000
+++ /dev/null
@@ -1,436 +0,0 @@
-#!/usr/bin/python
-#
-# Copyright (C) 2012 Intel Corporation
-#
-# 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
-# of the License, or (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 51 Franklin Street, Fifth Floor,
-# Boston, MA  02110-1301, USA.
-#
-# Authors:
-#              Tang, Shaofeng <shaofeng.tang@intel.com>
-
-import re
-import os
-import os.path
-import zipfile
-import shutil
-import configparser
-from .logmanager import LOGGER
-
-TCT_CONFIG_FILE = "/opt/tools/TCT_CONFIG"
-tct_parser = configparser.ConfigParser()
-tct_parser.read(TCT_CONFIG_FILE)
-
-CONFIG_FILE = "/opt/tools/shell/CONFIG"
-parser = configparser.ConfigParser()
-parser.read(CONFIG_FILE)
-
-
-class Constants:
-
-    TCT_VERSION = "TCT-SHELL-3.0"
-
-    TCT_HOME = "/opt/tct/"
-
-    SUITE_TEST_EXPECTED_TIME = 7
-
-    TCT_PLAN_FOLDER = "/opt/tools/shell/plan/"
-
-    TCT_SCEN_FOLDER = "/opt/tools/shell/scen/"
-
-    STYLE_FOLDER = "/opt/tools/shell/style/"
-
-    DEVICE_HEALTH_CMD = "/opt/tct/%s/scripts/tct-config-device.py"
-
-    HEALTH_CHECK_FILE_PATH = "/opt/tct/%s/scripts/healthcheck.ini"
-
-    RESULT_FOLDER = "/opt/tct/%s/shell/result/%s/"
-
-    RESULT_REPO = "/opt/tct/%s/shell/result/%s/"
-
-    AUTO_RESULT_SUFFIX = ".auto.xml"
-
-    MANUAL_RESULT_SUFFIX = ".manual.xml"
-
-    RERUN_AUTO_RESULT_SUFFIX = ".auto.rerun.xml"
-
-    RERUN_MANUAL_RESULT_SUFFIX = ".manual.rerun.xml"
-
-    RERUN_SUFFIX = ".rerun.xml"
-
-    TCT_LOG_FOLDER = "/opt/tools/shell/tmp/logs"
-
-    DEFAULT_TIZENV = ""
-
-    #SDB Command
-    SDB_PUSH = "sdb -s %s push"
-    SDB_SHELL = "sdb -s %s shell"
-    SDB_ROOT_ON = "sdb -s %s root on"
-    SDB_DEVICES = "sdb devices"
-    SDB_START_SERVER = "sdb start-server"
-    SDB_KILL_SERVER = "sdb kill-server"
-    SDB_CONNECT = "sdb connect %s"
-    SDB_PULL = "sdb -s %s pull"
-    SDB_CAT_CONFIG = " cat %s"
-    SDB_LS = "sdb -s %s shell ls -al"
-    SDB_DISPLAY_STOP = "sdb -s %s shell devicectl display stop"
-    FILE_FOUND_SCRIPT = "[ -f %s ] && echo \"Found\" || echo \"Not Found\""
-
-    UNZIP = "unzip -uo"
-
-    LOCAL_CAPABILITY_PATH = "/opt/tools/shell/tmp/%s/device_capability.xml"
-    LOCAL_BUILD_INFO_PATH = "/opt/tools/shell/tmp/%s/buildinfo.xml"
-    LOCAL_SHELL_TEMP_PATH = "/opt/tools/shell/tmp/%s/"
-
-    #Testkit-Lite
-    LITE_CMD1 = "testkit-lite1.0"
-    LITE_CMD2 = "testkit-lite2.0"
-    PRIORITY_VALUE = False
-    PRIORITY = "--priority P0 P1"
-    LOCAL_PRE = "-f "
-    DEVICE_PRE = "-f device:"
-    LITE_E_PARAM = "-e ""WRTLauncher"""
-    LITE_NON_ACTIVE_PARAM = "--non-active"
-    LITE_DEVICE_PARAM = "--deviceid"
-    LITE_CAPABILITY_PARAM = "--capability"
-    TESTCASE_ID = "--id"
-    EXECUTE_PREFF = " -e "
-    ONLY_AUTO_CASES = "-A"
-    ONLY_MANUAL_CASES = "-M"
-
-    DEVICE_SUITE_DEF = "tests.xml"
-    LITE_OUTPUT_PARAM = "-o "
-    EXT_TYPE_PARAM = "-e xwalk"
-    ENV_TYPE_PARAM = "--testenv \"Launcher=app_launcher \""
-    COMM_TYPE_PARAM = "--comm tizenmobile"
-    WRT_LAUNCHER_CMD = "WRTLauncher"
-
-    #HOST/OPT
-    SUITES_REPOSITORY = "/opt/tct/%s/packages/"
-
-    INSTALL_ZIP_24 = "inst.sh"
-    INSTALL_ZIP_W3 = "inst.py"
-
-    UNINSTALL_ZIP_24 = "inst.sh -u"
-    UNINSTALL_ZIP_W3 = "inst.py -u"
-
-    #Scenario Generator
-    DEFAULT_SCEN_NAME = "Scen_Full_test"
-
-    #Plan Generator
-    ALL_PROFILES = ['mobile', 'wearable', 'tv']
-    DEFAULT_MATCH_REGEX = "*.zip"
-    DEFAULT_UNMATCH_REGEX = None
-    DEFAULT_PLAN_NAME = "Full_test"
-    DEFAULT_PROFILE_NAME = "mobile"
-    DEFAULT_EXECUTE_TYPE = "All"
-    DEFAULT_PLAN_FILE = "tct_plan"
-
-    REGEX_FOR_SPLIT_PKG_NAME = "-\d\.\d*"
-
-    #Log Level
-    DEFAULT_LOG_LEVEL = "INFO"
-    LOG_LEVEL = None
-    LOG_LEVELS = {"CRITICAL": 50,
-                   "ERROR": 40,
-                   "WARNING": 30,
-                   "INFO": 20,
-                   "DEBUG": 10,
-                   "NOTSET": 0
-                   }
-
-    #Running Mode
-    RUNNING_MODE_PLAN = "plan"
-    RUNNING_MODE_SCEN = "scenario"
-    RUNNING_MODE_RERUN = "rerun"
-    RUNNING_MODE_SUITES = "suites"
-    RUNNING_MODE_PROFILE = "profile"
-    RERUNING_MODE = False
-    SCENARIO_MODE = False
-    DISTRIBUTE_MODE = False
-
-    #PRECONFIGURE
-    PRE_CONF_HOST_INI = "/opt/tools/shell/tmp/%s/tct-testconfig.ini"
-    PRE_CONF_HOST_JSON = "/opt/tools/shell/tmp/%s/preconfigure.json"
-    PRE_CONF_HOST_XML = "/opt/tools/shell/tmp/%s/tests.xml"
-    PORT_CONF_HOST_JSON = "/opt/tools/shell/tmp/%s/portconfigure.json"
-    NAT_CONF_HOST_TXT = "/opt/tools/shell/tmp/%s/TC_Config.txt"
-    NAT_CONF_DEVICE_TXT = "/opt/usr/home/owner/share/"
-
-    #Waiting Time
-    #DEBUG PURPOSE. Original value: 300
-    NO_WORKERS_TIMEOUT = 300
-    #Temporary constant value. Should be dynamic.
-    RECOVERY_TIME = 100
-
-    DEVICE_SUITE_TARGET_24 = tct_parser.get('DEVICE', 'DEVICE_SUITE_TARGET_24')
-    DEVICE_SUITE_TARGET_30 = tct_parser.get('DEVICE', 'DEVICE_SUITE_TARGET_30')
-
-    @staticmethod
-    def setRecoveryTime(timeout):
-        Constants.RECOVERY_TIMEOUT = timeout
-
-    @staticmethod
-    def getDEVICE_TESTS_FILE(_tizenV):
-        if _tizenV and float(_tizenV.split('_')[-1]) >= 3.0:
-            return os.path.join(Constants.DEVICE_SUITE_TARGET_30, "tct/opt/%s/tests.xml")
-        else:
-            return os.path.join(Constants.DEVICE_SUITE_TARGET_24, "tct/opt/%s/tests.xml")
-
-    @staticmethod
-    def getDEVICE_SUITE_TARGET(_tizenV):
-        if _tizenV and float(_tizenV.split('_')[-1]) >= 3.0:
-            return os.path.join(Constants.DEVICE_SUITE_TARGET_30, "tct/")
-        else:
-            return os.path.join(Constants.DEVICE_SUITE_TARGET_24, "tct/")
-
-    @staticmethod
-    def getDEVICE_SUITE_FOLDER(_tizenV):
-        if _tizenV and float(_tizenV.split('_')[-1]) >= 3.0:
-            return os.path.join(Constants.DEVICE_SUITE_TARGET_30, "tct/opt/")
-        else:
-            return os.path.join(Constants.DEVICE_SUITE_TARGET_24, "tct/opt/")
-
-    @staticmethod
-    def getDEVICE_BUILD_INFO_PATH(_tizenV):
-        if _tizenV and float(_tizenV.split('_')[-1]) >= 3.0:
-            return os.path.join(Constants.DEVICE_SUITE_TARGET_30, "Documents/tct/buildinfo.xml")
-        else:
-            return os.path.join(Constants.DEVICE_SUITE_TARGET_24, "Documents/tct/buildinfo.xml")
-
-    @staticmethod
-    def getDEVICE_CAPABILITY_PATH(_tizenV):
-        if _tizenV and float(_tizenV.split('_')[-1]) >= 3.0:
-            return os.path.join(Constants.DEVICE_SUITE_TARGET_30, "Documents/tct/capability.xml")
-        else:
-            return os.path.join(Constants.DEVICE_SUITE_TARGET_24, "Documents/tct/capability.xml")
-
-    @staticmethod
-    def getPRE_CONF_DEVICE_INI(_tizenV):
-        if _tizenV and float(_tizenV.split('_')[-1]) >= 3.0:
-            return os.path.join(Constants.DEVICE_SUITE_TARGET_30, "tct/opt/tct-testconfig/tct-testconfig.ini")
-        else:
-            return os.path.join(Constants.DEVICE_SUITE_TARGET_24, "tct/opt/tct-testconfig/tct-testconfig.ini")
-
-    @staticmethod
-    def getPRE_CONF_DEVICE_JSON(_tizenV):
-        if _tizenV and float(_tizenV.split('_')[-1]) >= 3.0:
-            return os.path.join(Constants.DEVICE_SUITE_TARGET_30, "tct/opt/tct-testconfig/preconfigure.json")
-        else:
-            return os.path.join(Constants.DEVICE_SUITE_TARGET_24, "tct/opt/tct-testconfig/preconfigure.json")
-
-    @staticmethod
-    def getPRE_CONF_DEVICE_XML(_tizenV):
-        if _tizenV and float(_tizenV.split('_')[-1]) >= 3.0:
-            return os.path.join(Constants.DEVICE_SUITE_TARGET_30, "tct/opt/tct-testconfig/tests.xml")
-        else:
-            return os.path.join(Constants.DEVICE_SUITE_TARGET_24, "tct/opt/tct-testconfig/tests.xml")
-
-    @staticmethod
-    def getPORT_CONF_DEVICE_JSON(_tizenV):
-        if _tizenV and float(_tizenV.split('_')[-1]) >= 3.0:
-            return os.path.join(Constants.DEVICE_SUITE_TARGET_30, "tct/opt/tct-testconfig/portconfigure.json")
-        else:
-            return os.path.join(Constants.DEVICE_SUITE_TARGET_24, "tct/opt/tct-testconfig/portconfigure.json")
-
-    @staticmethod
-    def getTCT_PORT_CONF_DEVICE_JSON(_tizenV):
-        if _tizenV and float(_tizenV.split('_')[-1]) >= 3.0:
-            return os.path.join(Constants.DEVICE_SUITE_TARGET_30, "tct/portconfigure.json")
-        else:
-            return os.path.join(Constants.DEVICE_SUITE_TARGET_24, "tct/portconfigure.json")
-
-    @staticmethod
-    def getTCT_PRE_CONF_DEVICE_JSON(_tizenV):
-        if _tizenV and float(_tizenV.split('_')[-1]) >= 3.0:
-            return os.path.join(Constants.DEVICE_SUITE_TARGET_30, "tct/preconfigure.json")
-        else:
-            return os.path.join(Constants.DEVICE_SUITE_TARGET_24, "tct/preconfigure.json")
-
-    @staticmethod
-    def getNAT_CONF_DEVICE_TXT(_tizenV):
-        if _tizenV and float(_tizenV.split('_')[-1]) >= 3.0:
-            return os.path.join(Constants.DEVICE_SUITE_TARGET_30, "tct/opt/tct-testconfig/TC_Config.txt")
-        else:
-            return os.path.join(Constants.DEVICE_SUITE_TARGET_24, "tct/opt/tct-testconfig/TC_Config.txt")
-
-    @staticmethod
-    def setLogLevel(lvl):
-        Constants.LOG_LEVEL = lvl
-
-    @staticmethod
-    def setRerunMode(isRerun):
-        Constants.RERUNING_MODE = isRerun
-
-    @staticmethod
-    def setScenMode(isScen):
-        Constants.SCENARIO_MODE = isScen
-
-    @staticmethod
-    def setDistMode(isDist):
-        Constants.DISTRIBUTE_MODE = isDist
-
-    @staticmethod
-    def isDistMode():
-        return Constants.DISTRIBUTE_MODE
-
-    @staticmethod
-    def isScenMode():
-        return Constants.SCENARIO_MODE
-
-    @staticmethod
-    def checkBuildIds(devs):
-        check = True
-        if len(devs) == 0:
-            check = False
-
-        first_buildId = None
-        for count, dev in enumerate(devs):
-            dev_buildId = dev.getDeviceBuildId()
-            if count == 0:
-                first_buildId = dev_buildId
-            if not dev_buildId:
-                check = False
-            if not first_buildId in dev_buildId:
-                check = False
-
-        return check
-
-    @staticmethod
-    def getSuiteNameFromFile(suiteFile):
-        suffixes = [Constants.AUTO_RESULT_SUFFIX, \
-                 Constants.MANUAL_RESULT_SUFFIX, \
-                 Constants.RERUN_AUTO_RESULT_SUFFIX, \
-                 Constants.RERUN_MANUAL_RESULT_SUFFIX]
-        for suffix in suffixes:
-            if suiteFile.endswith(suffix):
-                suiteFile = suiteFile[:-len(suffix)]
-                return suiteFile
-
-    @staticmethod
-    def checkFileExists(aPath):
-        if os.path.exists(aPath):
-            return True
-        else:
-            return False
-
-    @staticmethod
-    def getTempPath(filepath):
-        xmlFolder = Constants.LOCAL_SHELL_TEMP_PATH % "temp_xml"
-        if not os.path.isdir(xmlFolder):
-            os.makedirs(xmlFolder, mode=0o777)
-
-        xml_name = os.path.basename(filepath)
-        temp_path = os.path.join(xmlFolder, xml_name)
-        return temp_path
-
-    @staticmethod
-    def unzip_package(filepath):
-        path = os.path.expanduser("~")
-        os.chdir(path)
-        if os.path.exists(Constants.DEFAULT_PLAN_FILE):
-            shutil.rmtree(Constants.DEFAULT_PLAN_FILE)
-
-        os.makedirs(Constants.DEFAULT_PLAN_FILE, mode=0o777)
-        f = zipfile.ZipFile(filepath, 'r')
-        for file in f.namelist():
-            f.extract(file, path + "/" + Constants.DEFAULT_PLAN_FILE)
-
-    @staticmethod
-    def clean_unzip_file():
-        os.chdir(os.path.expanduser("~"))
-        if os.path.exists(Constants.DEFAULT_PLAN_FILE):
-            shutil.rmtree(Constants.DEFAULT_PLAN_FILE)
-
-    @staticmethod
-    def move_log_file(src_file, dest_folder):
-        log_folder = os.path.join(dest_folder, 'logs')
-        if not os.path.isfile(src_file):
-            LOGGER.warning('%s does not exist' % src_file)
-            return False
-        if not os.path.isdir(log_folder):
-            os.mkdir(log_folder, mode=0o777)
-
-        count = 1
-        src_basename = os.path.basename(src_file)
-        src_dir = os.path.dirname(src_file)
-        title, ext = os.path.splitext(src_basename)
-        while True:
-            if os.path.exists(os.path.join(log_folder, src_basename)):
-                src_basename = title + "_%s%s" % (count, ext)
-                count += 1
-            else:
-                break
-
-        rename_src = os.path.join(src_dir, src_basename)
-        os.rename(src_file, rename_src)
-        shutil.copy(rename_src, log_folder)
-        return True
-
-    @staticmethod
-    def indent(elem, level=0):
-        i = "\n" + level * "  "
-        if len(elem):
-            if not elem.text or not elem.text.strip():
-                elem.text = i + "  "
-            if not elem.tail or not elem.tail.strip():
-                elem.tail = i
-            for elem in elem:
-                Constants.indent(elem, level + 1)
-            if not elem.tail or not elem.tail.strip():
-                elem.tail = i
-        else:
-            if level and (not elem.tail or not elem.tail.strip()):
-                elem.tail = i
-
-    @staticmethod
-    def isSdbNetwork(deviceId):
-        patt = re.compile('\d{1,3}\.\d{1,3}\.\d{1,3}.\d{1,3}:')
-        ma = patt.match(deviceId)
-        if ma:
-            return True
-        else:
-            return False
-
-    '''
-    @staticmethod
-    def getDeviceExceptions():
-        devices = []
-        try:
-            devs = parser.get('DISTRIBUTE_MODE', 'DEVICE_EXCEPTIONS')
-            devs = devs.splitlines()
-            for dev in devs:
-                if dev != '':
-                    devices.append(dev)
-                    LOGGER.info("Ignoring device: %s" % dev)
-        except Exception as e:
-            LOGGER.error("CONFIG file Parsing Error: %s" % e)
-        finally:
-            return devices
-    '''
-
-    @staticmethod
-    def set_default_tizenV(_tizenV):
-        Constants.DEFAULT_TIZENV = _tizenV
-
-    @staticmethod
-    def get_tct_binaryV():
-        tct_binV = ""
-        ver_path = '/opt/tct/%s/VERSION' % Constants.DEFAULT_TIZENV
-        if os.path.exists(ver_path):
-            ver_file = open('/opt/tct/%s/VERSION' % \
-                    Constants.DEFAULT_TIZENV, 'r')
-            tct_binV = ver_file.readline().strip()
-        return tct_binV
-
diff --git a/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/shell/tctshell/constants.pyc b/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/shell/tctshell/constants.pyc
deleted file mode 100755 (executable)
index fa2f2c7..0000000
Binary files a/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/shell/tctshell/constants.pyc and /dev/null differ
diff --git a/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/shell/tctshell/devicemanager.py b/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/shell/tctshell/devicemanager.py
deleted file mode 100755 (executable)
index 33469dc..0000000
+++ /dev/null
@@ -1,184 +0,0 @@
-#!/usr/bin/python
-
-import queue
-from multiprocessing.managers import BaseManager
-
-from .sdbmanager import SdbManager
-from .constants import Constants
-from .logmanager import LOGGER
-from xml.etree import ElementTree
-from .exception import DevNotFoundErr
-
-
-class DeviceManager(object):
-    devices = []
-    dbutedevIds = []
-    dumpMonitor_q = queue.Queue()
-
-    def __init__(self):
-        if len(self.devices) == 0:
-            self.loadDeviceList()
-
-    def _updateConnDevice(self, connDevices):
-        self._resetDevices()
-
-        for dev in connDevices:
-            self.devices.append(dev)
-
-    def _resetDevices(self):
-        listSize = len(self.devices)
-        del self.devices[0:listSize]
-
-    def deleteFaultDevice(self, _devid):
-        if len(self.devices) < 1:
-            return False
-        else:
-            devs = self.getSdbDeviceList()
-            for idx, dev in enumerate(devs):
-                devId = dev.getDeviceId()
-                if devId == _devid:
-                    del self.devices[idx]
-                    return True
-        return False
-
-    def isDeviceAvailable(self, deviceId):
-        if len(self.devices) == 0:
-            return False
-        else:
-            devs = self.getSdbDeviceList()
-            for dev in devs:
-                devId = dev.getDeviceId()
-                if devId == deviceId:
-                    return True
-        return False
-
-    def getDeviceSize(self):
-        return len(self.devices)
-
-    def getSdbDeviceList(self):
-        if self.dbutedevIds:
-            remake_devices = []
-            for devid in self.dbutedevIds:
-                dev = self.getDevice(devid)
-                if dev:
-                    remake_devices.append(dev)
-
-            return remake_devices
-        else:
-            return self.devices
-
-    def getDevice(self, deviceId):
-        for dev in self.devices:
-            if dev.getDeviceId() == deviceId:
-                return dev
-
-        LOGGER.error("The '%s' device Id exists error" % deviceId)
-        return None
-
-    def loadDeviceList(self):
-        connDevices = []
-        sdbOutLog = SdbManager.sdbDevices()
-        if not sdbOutLog:
-            return False
-        devicesInfo = sdbOutLog.replace("List of devices attached", "")
-        devList = devicesInfo.split('\n')
-
-        for dev in devList:
-            if len(dev) > 1:
-                devInfoItem = dev.split('\t')
-                if len(devInfoItem) < 2:
-                    continue
-                devId = devInfoItem[0].rstrip()
-                devType = devInfoItem[1].rstrip()
-                devName = devInfoItem[2].rstrip()
-                if not (devType == "unknown" or devType == "offline" \
-                        or devId == "unknown" or devId == "offline"):
-                    connDevices.append(SdbDevice(devId, devName, devType))
-                else:
-                    raise DevNotFoundErr(devId)
-
-        if len(connDevices) > 0:
-            self._updateConnDevice(connDevices)
-            LOGGER.debug("Connected Devices = %s" \
-                    % str([dev.devId for dev in self.devices]))
-            return True
-        else:
-            self._resetDevices()
-            LOGGER.debug("Reset Devices List")
-            return False
-
-    def setDbuteDevIds(self, _devIds):
-        self.dbutedevIds = _devIds
-
-    def add_dump_monitor_dev(self, _devid):
-        LOGGER.debug("add dump monitor dev : %s" % _devid)
-        self.dumpMonitor_q.put(_devid)
-
-    '''
-    def check_dump_monitor_que(self, _devid):
-        LOGGER.debug("check dump monitor queue : %s" % _devid)
-        temp_devs = []
-        while not self.dumpMonitor_q.empty():
-            devid = self.dumpMonitor_q.get()
-            if devid == _devid:
-                return True
-            else:
-                temp_devs.append(devid)
-
-        for dev in temp_devs:
-            self.dumpMonitor_q.put(dev)
-
-        return False
-    '''
-
-
-class SdbDevice:
-    def __init__(self, devId, devName, devType):
-        self.devId = devId
-        self.devName = devName
-        self.devType = devType
-        self.devBuildId = ""
-
-    def _printDevInfo(self):
-        LOGGER.info("===== Device Infomation =====")
-        LOGGER.info(" Name : " + self.devName)
-        LOGGER.info(" Id   : " + self.devId)
-        LOGGER.info(" Type : " + self.devType)
-        LOGGER.info("=============================")
-
-    def getDeviceId(self):
-        return self.devId
-
-    def getDeviceName(self):
-        return self.devName
-
-    def getDeviceType(self):
-        return self.devType
-
-    def getDeviceBuildId(self):
-        if self.devBuildId == "":
-            infoFilePath = Constants.LOCAL_BUILD_INFO_PATH % self.devId
-            if Constants.checkFileExists(infoFilePath) is False:
-                LOGGER.error("Not Found BuildInfo.xml file in %s" % self.devId)
-                LOGGER.error('Path : %s' % infoFilePath)
-                return None
-            try:
-                xml_tree = ElementTree.parse(infoFilePath)
-                xml_root = xml_tree.getroot()
-
-                for buildinfo in xml_root.findall('buildinfo'):
-                    if buildinfo.get("name") == "buildVersion":
-                        self.devBuildId = buildinfo.find("value").text
-                        return self.devBuildId
-
-            except Exception as e:
-                LOGGER.warning("[ reading buildInfo XML fail, error : %s ] " % e)
-                return None
-        else:
-            return self.devBuildId
-
-class DevBaseManager(BaseManager):
-    pass
-
-DevBaseManager.register('DeviceManager', DeviceManager)
-
diff --git a/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/shell/tctshell/distribute_plan.py b/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/shell/tctshell/distribute_plan.py
deleted file mode 100755 (executable)
index 367e219..0000000
+++ /dev/null
@@ -1,496 +0,0 @@
-import os
-import time
-import threading
-from multiprocessing import Process, Queue, Manager
-
-from .shellplanner import *
-from .sdbmanager import SdbManager
-from .result_summary import ResultSummary
-from .logmanager import LOGGER
-
-
-def wait_time(_time):
-    for loop in range(_time):
-        LOGGER.debug("Wait {} seconds......".format(_time-loop))
-        time.sleep(1)
-
-
-class AutoPlanExecutor(threading.Thread):
-
-    def __init__(self, plan, threadCounter, isPreconSet, envManager, \
-            run_timeout, devmgr):
-        #Process.__init__(self)
-        threading.Thread.__init__(self)
-        self.suites = {}
-        self.autop_executors = []
-        self.all_dev_threads = []
-        self.suite_q = Queue(maxsize=1)
-        self.plan = plan
-        self.devmgr = devmgr
-        self.name = plan.getPlanName()
-        self.tcCounter = threadCounter
-        self.isPreconSet = isPreconSet
-        self.notrun_count = 0
-        self._orgSuites()
-        self._prepareAutoPlan(self.isPreconSet)
-        self.envManager = envManager
-        self.finish_time = float(time.time()) + \
-                ((int(run_timeout)) *  60)
-
-    def run(self):
-        self._startAutoPlan()
-        LOGGER.debug("finished AutoPlanExecutor")
-
-    def _orgSuites(self):
-        if self.plan.getDeviceId() in self.suites:
-            self.suites[self.plan.getDeviceId()] += self.plan.getSuites()[:]
-        else:
-            self.suites[self.plan.getDeviceId()] = self.plan.getSuites()[:]
-
-    def _orgNotRunSuites(self, notRunSuites):
-        suites = []
-        LOGGER.debug("Finding Not Run suites")
-        LOGGER.debug("Suites to find: %s" % str(notRunSuites))
-        for suite in self.plan.getSuites():
-            if suite.suiteName in notRunSuites:
-                suites.append(suite)
-        if None in self.suites:
-            self.suites[None] += suites
-        else:
-            self.suites[None] = suites
-
-    def _prepareAutoPlan(self, isPreconSet, notrun=None):
-        runningDevs = self.devmgr.getSdbDeviceList()
-        self.autop_executors = []
-        for counter, dev in enumerate(runningDevs):
-            self.plan.setDeviceId(dev.getDeviceId())
-            self.suites[None].append('Finished')
-            process_name = dev.getDeviceId()
-            if notrun is not None:
-                process_name = "%s_notRun%d" % (dev.getDeviceId(), notrun)
-            autopExecutor = AutoPlanDevExecutor(self.plan, process_name, \
-                    dev.getDeviceId(), counter + 1, self.suite_q, \
-                    isPreconSet, self.devmgr)
-            self.autop_executors.append(autopExecutor)
-        self.all_dev_threads += self.autop_executors
-
-    def _is_run_timeout(self):
-        curr_time = float(time.time())
-
-        if self.finish_time > curr_time:
-            return False
-        else:
-            return True
-
-    def _startAutoPlan(self):
-        for worker in self.autop_executors:
-            worker.start()
-
-        while len(self.suites[None]) > 0:
-            done_inhost = False
-            wakeup_others = False
-            suite = self.suites[None][0]
-            if self._is_run_timeout():
-                 LOGGER.error('tct-shell run/rerun timeout...')
-                 while not self.suite_q.empty():
-                     self.suites[None].insert(0, (self.suite_q.get(True)))
-                 self._auto_test_inhost(self.suites[None])
-                 self.suites[None] = []
-                 break
-
-            timeout = 0
-            while self._no_worker_available():
-                '''
-                if self._exists_finished_worker():
-                    wakeup_others = True
-                    self._kill_all_workers()
-                    LOGGER.debug("No need to reboot. Waking up other devices")
-                    break
-                '''
-                LOGGER.info("Wait for the connected devices to be reconnected [%s:%s]" % \
-                        (str(timeout), str(Constants.NO_WORKERS_TIMEOUT)))
-                time.sleep(10)
-                timeout += 10
-                if timeout >= Constants.NO_WORKERS_TIMEOUT:
-                    LOGGER.error("The reboot times for all the devices have been exceeded")
-                    while not self.suite_q.empty():
-                        self.suites[None].insert(0, (self.suite_q.get(True)))
-                    self._auto_test_inhost(self.suites[None])
-                    self.suites[None] = []
-                    done_inhost = True
-                    break
-
-            if done_inhost or wakeup_others:
-                break
-            try:
-                self.suite_q.put(suite, True, 20)
-            except:
-                continue
-            self.suites[None].pop(0)
-
-        '''
-        for autopExecutor in self.autop_executors:
-            SdbManager.exportDumpFiles(autopExecutor.deviceId, \
-                    self.plan.getResultFolderPath())
-            if autopExecutor.isRebooting():
-                self.envManager.kill_usbMonitor(autopExecutor.deviceId)
-                autopExecutor.killThread()
-            autopExecutor.join()
-        '''
-        for autopExecutor in self.autop_executors:
-            autopExecutor.join()
-        '''
-        for dev in self.devmgr.getSdbDeviceList():
-            SdbManager.exportDumpFiles(dev.getDeviceId(), \
-                    self.plan.getResultFolderPath())
-        '''
-
-        summary = ResultSummary([self.plan])
-        '''
-        notRunSuites = summary.checkResults()
-
-        if len(notRunSuites) > 0:
-            while not self.suite_q.empty():
-                LOGGER.debug("Suite left in the queue. Clearing...")
-                self.suite_q.get(True)
-            LOGGER.debug("Starting Not Run suites")
-            self._orgNotRunSuites(notRunSuites)
-            LOGGER.debug("Not Run suites = %s" % str(self.suites[None]))
-            self.notrun_count += 1
-            self._prepareAutoPlan(self.isPreconSet, notrun=self.notrun_count)
-            self._startAutoPlan()
-        else:
-        '''
-        summary.genResults()
-        summary.genSummary()
-        self.plan.setFinished()
-
-    def _auto_test_inhost(self, suites):
-        self._kill_all_workers()
-        self._kill_liteprocess()
-        exeType = self.plan.getExecuteType()
-        for suite in suites:
-            if suite == 'Finished':
-                continue
-            if exeType.getCurrType() == ExecuteType.e_auto:
-                self.autoworker = AutoPlan_AutoSuiteWorker(suite, None, \
-                        self.plan)
-                self.autoworker.auto_test_inhost()
-            elif exeType.getCurrType() == ExecuteType.e_manual:
-                continue
-            else:
-                self.autoworker = AutoPlan_AutoSuiteWorker(suite, None, \
-                        self.plan)
-                self.autoworker.auto_test_inhost()
-
-    def _kill_liteprocess(self):
-        cmd = "ps aux | grep 'python /opt/testkit/lite[0-9].[0-9]/testkit-lite'"
-        result = SdbManager.hostCommandwithResult(cmd)
-        if isinstance(result, (bytes, bytearray)):
-            result = result.decode('utf-8')
-
-        LOGGER.debug(result)
-        grep_lines = result.split('\n')
-
-        kill_packages = []
-        for line in grep_lines:
-            if line and len(line) > 1:
-                proc_id = line.split()[1]
-                SdbManager.hostCommand('kill -9 %s' % proc_id)
-
-                res_url = line.split()[-1]
-                if res_url and res_url.find('shell/result') > -1:
-                    spt_pack = res_url.split('/')[-1].split('.')[0]
-                    kill_packages.append(spt_pack)
-
-        exeType = self.plan.getExecuteType()
-        suites = self.plan.getSuites()
-
-        for num in range(len(kill_packages)):
-            pack_name = str(kill_packages.pop())
-
-            for suite in suites:
-                if suite.getSuiteName().find(pack_name):
-                    if exeType.getCurrType() == ExecuteType.e_auto:
-                        self.autowoker = AutoPlan_AutoSuiteWorker(suite, None, \
-                                self.plan)
-                        self.autowoker.auto_test_inhost()
-                    elif exeType.getCurrType() == ExecuteType.e_manual:
-                        continue
-                    else:
-                        self.autowoker = AutoPlan_AutoSuiteWorker(suite, None, \
-                                self.plan)
-                        self.autowoker.auto_test_inhost()
-                    break
-
-    def _no_worker_available(self):
-        executor_size = len(self.autop_executors)
-        curr_killed_executor = 0
-        for autopExecutor in self.autop_executors:
-            if autopExecutor.isKilled():
-                curr_killed_executor += 1
-
-        if executor_size == curr_killed_executor:
-            return True
-
-        return False
-
-    def _exists_finished_worker(self):
-        for autopExecutor in self.autop_executors:
-            if autopExecutor.isKilled():
-                return True
-        return False
-
-    def _kill_all_workers(self):
-        for autopExecutor in self.autop_executors:
-            autopExecutor.killThread()
-
-    def _require_kill_worker(self):
-        for autopExecutor in self.autop_executors:
-            if not autopExecutor.isKilled():
-                autopExecutor.killThread()
-
-    def getSuites(self):
-        return self.suites
-
-
-class AutoPlanDevExecutor(Process):
-
-    def __init__(self, plan, name, deviceId, threadCounter, suite_queue, \
-            isPreconSet, devmgr):
-        LOGGER.debug("Creating AutoPlanExecutor, with [device]: " + deviceId)
-        Process.__init__(self)
-        self.name = name
-        self.deviceId = deviceId
-        self.tcCounter = threadCounter
-        self.threadLock = threading.Lock()
-        self.suite_q = suite_queue
-        self.plan = plan
-        self.rebooting = Queue(1)
-        self.finished = Queue(1)
-        self.rebootLock = Queue()
-        self.devmgr = devmgr
-
-    def get_suite(self):
-        try:
-            suite = self.suite_q.get(True)
-        except Queue.Empty:
-            LOGGER.warning("AutoPlanDevExecutor.suite_queue empty exception")
-            pass
-
-        if suite == 'Finished':
-            LOGGER.debug('suite obtained: Finished')
-
-        return suite
-
-    def killThread(self):
-        if self.finished.empty():
-            LOGGER.debug("Killing [%s]" % self.name)
-            self.finished.put(1, block=False)
-        else:
-            LOGGER.debug("[%s] finished" % self.name)
-
-    def isKilled(self):
-        return not self.finished.empty()
-
-    def isRebooting(self):
-        return not self.rebooting.empty()
-
-    def setRebooting(self, reboot):
-        if reboot:
-            self.rebooting.put(1, block=False)
-        elif not self.rebooting.empty():
-            self.rebooting.get()
-
-    def run(self):
-        LOGGER.debug("Starting AutoPlanDevExecutor|DevID:{},PID:{}".\
-            format(self.deviceId, str(os.getpid())))
-        suite = None
-        is_reboot_timeout = False
-        while True:
-            if self.isKilled():
-                LOGGER.debug("finished AutoPlanDevExecutor|DevID:{},PID:{}".\
-                    format(self.deviceId, str(os.getpid())))
-                break
-
-            if not self.devmgr.isDeviceAvailable(self.deviceId) and \
-                    not is_reboot_timeout:
-                #reboot
-                LOGGER.error("Please reboot device : %s" % self.deviceId)
-                #scheduling purpose: waiting for UsbMonitor to release lock.
-                try:
-                    self.rebootLock.get(block=True, timeout=60)
-                    self.setRebooting(True)
-                except:
-                    is_reboot_timeout = True
-
-                continue
-
-            elif is_reboot_timeout:
-                self.killThread()
-                LOGGER.error("%s is reboot timeout" % self.deviceId)
-                break
-            else:
-                if self.isRebooting():
-                    LOGGER.info("Rebooting complete device : %s" % \
-                            self.deviceId)
-                    SdbManager.recoveryDevice(self.plan.getTizenVersion(), \
-                            self.deviceId)
-                self.setRebooting(False)
-                self.is_reboot_timeout = False
-
-            '''
-            if self.devIns.check_dump_monitor_que(self.deviceId):
-                LOGGER.debug("Tracking dump device : %s" % self.deviceId)
-                self.killThread()
-                break
-            '''
-
-            suite = self.get_suite()
-            if suite == 'Finished':
-                self.killThread()
-                break
-            exeType = self.plan.getExecuteType()
-            if exeType.getCurrType() == ExecuteType.e_auto:
-                self.autoworker = AutoPlan_AutoSuiteWorker(suite, \
-                        self.deviceId, self.plan)
-                self.autoworker.auto_test()
-            elif exeType.getCurrType() == ExecuteType.e_manual:
-                self.manualworker = AutoPlan_ManualSuiteWorker(suite, \
-                        self.deviceId, self.plan)
-                self.manualworker.auto_test()
-            else:
-                self.autoworker = AutoPlan_AutoSuiteWorker(suite, \
-                        self.deviceId, self.plan)
-                self.autoworker.auto_test()
-                self.manualworker = AutoPlan_ManualSuiteWorker(suite, \
-                        self.deviceId, self.plan)
-                self.manualworker.auto_test()
-            try:
-                dump_files = SdbManager.exportDumpFiles(self.deviceId, \
-                    self.plan.getResultFolderPath() + "/dump/" + suite.getSuiteName())
-                if dump_files:
-                    SdbManager.deleteDumpFiles(self.deviceId, dump_files)
-            except Exception as ex:
-                LOGGER.error(str(ex))
-
-        LOGGER.debug("finished AutoPlanDevExecutor")
-
-
-class AutoPlan_AutoSuiteWorker:
-    def __init__(self, suite, deviceId, plan):
-        self.suite = suite
-        self.deviceId = deviceId
-        self.plan = plan
-        self.remTmpDir = plan.getDevTctTmpPath()
-        self.resultFolder = plan.getResultFolderPath()
-        self.tizenVer = plan.getTizenVersion()
-        self.isRerun = plan.isReRunning()
-        self.stubPort = plan.getStubPort()
-
-    def auto_test(self):
-        suite = self.suite
-        if suite.getAutoNum() is None or int(suite.getAutoNum()) == 0:
-            suite.setNoAuto()
-            LOGGER.warning('Suite : %s , AutoNum : 0' % (suite.getSuiteName()))
-            return
-
-        suiteName = suite.getSuiteName()
-        suite.runPreTestScript(self.deviceId)
-
-        LOGGER.info("Start to execute|suite:{},devid:{},pid:{}".\
-            format(suiteName, self.deviceId, os.getpid()))
-        LOGGER.debug("current suite Auto count : %s " % suite.getAutoNum())
-
-        LOGGER.info('Checking if the suite ' + suiteName \
-                + ' is installed already.')
-        if suite.sdbCheckSuite(self.deviceId, suiteName):
-            LOGGER.info('The suite ' + suiteName + ' is existed. uninstalling')
-            LOGGER.info('Uninstalling the existed suite ' + suiteName)
-            suite.unInstallSuite(self.deviceId, self.remTmpDir)
-
-        LOGGER.info('Uploading the suite ' + suiteName)
-        LOGGER.info('Installing the suite ' + suiteName)
-
-        suite.installSuite(self.deviceId, self.remTmpDir)
-        LOGGER.info('Executing the suite ' + suiteName + ' in testkit-lite.')
-        suite.executePlanAuto(self.deviceId, self.resultFolder, \
-                suite.getTestCase(), self.isRerun, self.stubPort)
-
-        suite.runPostTestScript(self.deviceId)
-
-        LOGGER.info('removing the suite pkg file of the suite ' + suiteName)
-        LOGGER.info('Uninstalling the suite ' + suiteName)
-        suite.unInstallSuite(self.deviceId, self.remTmpDir)
-
-        LOGGER.info("Finished to execute|suite:{},devid:{},pid:{}".\
-            format(suiteName, self.deviceId, os.getpid()))
-        wait_time(10)
-
-    def auto_test_inhost(self):
-        suite = self.suite
-        if suite.getAutoNum() is None or int(suite.getAutoNum()) == 0:
-            suite.setNoAuto()
-            LOGGER.warning('Suite : %s , AutoNum : 0' % (suite.getSuiteName()))
-            return
-
-        suiteName = suite.getSuiteName()
-        LOGGER.info("Start to execute auto suite:%s" % suiteName)
-
-        LOGGER.info('Uploading the suite ' + suiteName)
-        LOGGER.info('Installing the suite ' + suiteName)
-        suite.installSuite(self.deviceId, self.remTmpDir)
-        LOGGER.info('Executing the suite ' + suiteName + ' in testkit-lite.')
-        suite.executePlanAuto(self.deviceId, self.resultFolder, \
-                suite.getTestCase(), self.isRerun, self.stubPort)
-
-        LOGGER.info('removing the suite pkg file of the suite ' + suiteName)
-        LOGGER.info('Uninstalling the suite ' + suiteName)
-        suite.unInstallSuite(self.deviceId, self.remTmpDir)
-
-        LOGGER.debug("current suite Auto count : %s " % suite.getAutoNum())
-        LOGGER.info("Finished to execute auto suite:%s" % suiteName)
-
-
-class AutoPlan_ManualSuiteWorker:
-    def __init__(self, suite, deviceId, plan):
-        self.suite = suite
-        self.deviceId = deviceId
-        self.plan = plan
-
-    def auto_test(self):
-        deviceId = self.deviceId
-        remTmpDir = self.plan.getDevTctTmpPath()
-        resultFolder = self.plan.getResultFolderPath()
-        isRerun = self.plan.isReRunning()
-        stubPort = self.plan.getStubPor()
-        suite = self.suite
-
-        if suite.getManualNum() is None or int(suite.getManualNum()) == 0:
-            suite.setNoManual()
-            LOGGER.warning('Suite : %s , ManualNum : 0' % \
-                    (suite.getSuiteName()))
-            return
-
-        suiteName = suite.getSuiteName()
-        LOGGER.debug("current suite Auto count : %s " % suite.getAutoNum())
-
-        LOGGER.info('Checking if the suite ' + suiteName \
-                + 'is installed already.')
-        if suite.sdbCheckSuite(deviceId, suiteName):
-            LOGGER.info('The suite ' + suiteName + ' is existed. uninstalling')
-            LOGGER.info('Uninstalling the existed suite ' + suiteName)
-            suite.unInstallSuite(deviceId, remTmpDir)
-
-        LOGGER.info('Uploading the suite ' + suiteName)
-        LOGGER.info('Installing the suite ' + suiteName)
-        suite.installSuite(deviceId, remTmpDir)
-        LOGGER.info('Executing the suite ' + suiteName + ' in testkit-lite.')
-        suite.executePlanManual(deviceId, resultFolder, suite.getTestCase(), \
-                isRerun, stubPort)
-
-        LOGGER.info('removing the suite pkg file of the suite ' + suiteName)
-        LOGGER.info('Uninstalling the suite ' + suiteName)
-        suite.unInstallSuite(deviceId, remTmpDir)
-
-        LOGGER.info("Finished to execute manual suite: [%s]" % suiteName)
diff --git a/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/shell/tctshell/dumpmonitor.py b/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/shell/tctshell/dumpmonitor.py
deleted file mode 100755 (executable)
index ba595f0..0000000
+++ /dev/null
@@ -1,46 +0,0 @@
-#!/usr/bin/python
-
-import time
-from multiprocessing import Process
-
-from .logmanager import LOGGER
-from .sdbmanager import SdbManager
-
-class DumpMonitor(Process):
-
-    def __init__(self, _devid, _dump_name):
-        Process.__init__(self)
-        self.daemon = True
-        self.name = "DumpMonitor"
-        self.devid = _devid
-        self.dumpName = _dump_name
-        self.isFinish = False
-
-    def run(self):
-        LOGGER.debug("Starting DumpMonitor : %s" % self.devid)
-        cmd = self._make_ls_command()
-        if not cmd:
-            return
-
-        while True:
-            if self.isFinish:
-                break
-            time.sleep(10)
-            result = SdbManager.sdbShell(self.devid, cmd)
-            if result and self.dumpName:
-                for dName in self.dumpName.split(','):
-                    if dName and str(result).find(dName) > -1:
-                        self.devIns.add_dump_monitor_dev(self.devid)
-                        return
-
-    def _make_ls_command(self):
-        dump_dir_path = SdbManager.findDumpPath(self.devid)
-        if dump_dir_path:
-            dump_ls_cmd = "ls -al %s" % dump_dir_path
-            return dump_ls_cmd
-        else:
-            return None
-
-    def kill_dumpmonitor(self):
-        self.isFinish = True
-
diff --git a/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/shell/tctshell/environment_manager.py b/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/shell/tctshell/environment_manager.py
deleted file mode 100755 (executable)
index 48c3961..0000000
+++ /dev/null
@@ -1,175 +0,0 @@
-#!/usr/bin/python
-
-from multiprocessing import Queue
-from .shellguider import Guider
-from .testenvironment import TestEnvironment
-from .usbmonitor import UsbMonitor
-from .netstatmonitor import NetstatMonitor
-from .dumpmonitor import DumpMonitor
-
-from .logmanager import LOGGER
-from .constants import Constants
-
-
-class EnvironmentManager:
-    def __init__(self, plans, isPreconSet, dump_name, devmgr):
-        self.plans = plans
-        self.dev_plans = {}
-        self.env_threads = []
-        self.connDevices = []
-        self.isPreconSet = isPreconSet
-        self.usb_monitor = None
-        self.netstat_monitors = []
-        self.dump_monitors = []
-        self.dev_recovery_locks = {}
-        self.dump_name = dump_name
-        self.devmgr = devmgr
-        self.orgPlans()
-        self.load_devices()
-        self.init_monitors()
-
-    def init_monitors(self):
-        if Constants.isDistMode():
-            for dev in self.connDevices:
-                dev_id = dev.getDeviceId()
-                if dev_id is None:
-                    continue
-                if Constants.isSdbNetwork(dev_id):
-                    pass
-                    #netstat_m = NetstatMonitor(dev_id, self.devmgr)
-                    #self.netstat_monitors.append(netstat_m)
-                else:
-                    if not self.usb_monitor:
-                        pass
-                        #self.usb_monitor = UsbMonitor(self.devmgr)
-                '''
-                if self.dump_name:
-                    dump_m = DumpMonitor(dev_id, self.dump_name)
-                    self.dump_monitors.append(dump_m)
-                '''
-        else:
-            pass
-            '''
-            for devId in self.dev_plans.keys():
-                if Constants.isSdbNetwork(devId):
-                    netstat_m = NetstatMonitor(devId, self.devmgr)
-                    self.netstat_monitors.append(netstat_m)
-                else:
-                    if not self.usb_monitor:
-                        self.usb_monitor = UsbMonitor(self.devmgr)
-            '''
-
-    def kill_monitors(self):
-        if self.usb_monitor:
-            self.usb_monitor.kill_usbmonitor()
-
-        self.kill_netstatMonitor()
-
-        for dumpM in self.dump_monitors:
-            dumpM.kill_dumpmonitor()
-
-    def kill_netstatMonitor(self):
-        for nsMonitor in self.netstat_monitors:
-            nsMonitor.kill_netMonitor()
-
-    def kill_usbMonitor(self, devid):
-        if self.usb_monitor:
-            self.usb_monitor.device_recovered(devid)
-
-    def start_usbMonitor(self):
-        if self.usb_monitor:
-            self.usb_monitor.start()
-
-    def start_netstatMonitor(self):
-        for nsMonitor in self.netstat_monitors:
-            nsMonitor.start()
-
-    def start_dumpMonitor(self):
-        for dumpMonitor in self.dump_monitors:
-            dumpMonitor.start()
-
-    def load_devices(self):
-        self.devmgr.loadDeviceList()
-        self.connDevices = self.devmgr.getSdbDeviceList()
-
-    def orgPlans(self):
-        if self.plans:
-            for plan in self.plans:
-                if len(plan.getSuites()) < 1:
-                    continue
-                deviceId = plan.getDeviceId()
-                tizenVer = plan.getTizenVersion()
-
-                if not deviceId in self.dev_plans:
-                    self.dev_plans[deviceId] = {}
-
-                if not tizenVer in self.dev_plans[deviceId]:
-                    self.dev_plans[deviceId][tizenVer] = []
-
-                self.dev_plans[deviceId][tizenVer].append(plan)
-
-    def env_setup(self):
-        err_msg_queue = Queue()
-        for devId, devId_val in self.dev_plans.items():
-            for tizenVer, plans in devId_val.items():
-                if Constants.isDistMode():
-                    for dev in self.connDevices:
-                        tEn = TestEnvironment(tizenVer, dev.getDeviceId(), \
-                                self.isPreconSet, err_msg_queue, self.devmgr)
-                        tEn.start()
-                        self.env_threads.append(tEn)
-                else:
-                    tEn = TestEnvironment(tizenVer, devId, self.isPreconSet, \
-                            err_msg_queue, self.devmgr)
-                    tEn.start()
-                    self.env_threads.append(tEn)
-
-        for thread in self.env_threads:
-            thread.join()
-
-        if not err_msg_queue.empty():
-            raise
-
-    def guider_setup(self):
-        for devId, devId_val in self.dev_plans.items():
-            for tizenVer, plans in devId_val.items():
-                for plan in plans:
-                    if Constants.isDistMode():
-                        guider = Guider(plan, [dev.getDeviceId() \
-                                for dev in self.connDevices])
-                    else:
-                        guider = Guider(plan)
-
-                    guider.init_items()
-                    if self.isPreconSet:
-                        guider.setup_manual_env()
-                    guider.setup_default_env()
-
-    def check_build_ids(self):
-        if Constants.isDistMode() and \
-                not Constants.checkBuildIds(self.connDevices):
-            LOGGER.error("All connected devices should have the same build ids for distribute/auto-plan mode.")
-            LOGGER.error("Devices with different build ids connected")
-            raise
-        return True
-
-    def setup(self):
-        self.env_setup()
-        self.check_build_ids()
-        self.guider_setup()
-
-    def start_monitor(self):
-        self.start_usbMonitor()
-        self.start_netstatMonitor()
-        self.start_dumpMonitor()
-
-    def recovery_setup(self, workers):
-        for worker in workers:
-            if Constants.isSdbNetwork(worker.deviceId):
-                for nsMonitor in self.netstat_monitors:
-                    if nsMonitor.deviceId == worker.deviceId:
-                        nsMonitor.setup_recovery(worker.rebootLock)
-            else:
-                if self.usb_monitor:
-                    self.usb_monitor.setup_recovery(\
-                            worker.deviceId, worker.rebootLock)
diff --git a/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/shell/tctshell/exception.py b/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/shell/tctshell/exception.py
deleted file mode 100755 (executable)
index b2c96c8..0000000
+++ /dev/null
@@ -1,6 +0,0 @@
-
-class DevNotFoundErr(Exception):
-    def __init__(self, _devid):
-        self.devid = _devid
-    def __str__(self):
-        return repr(self.devid)
diff --git a/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/shell/tctshell/exception.pyc b/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/shell/tctshell/exception.pyc
deleted file mode 100755 (executable)
index 059eee2..0000000
Binary files a/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/shell/tctshell/exception.pyc and /dev/null differ
diff --git a/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/shell/tctshell/gui/__init__.py b/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/shell/tctshell/gui/__init__.py
deleted file mode 100755 (executable)
index 8b13789..0000000
+++ /dev/null
@@ -1 +0,0 @@
-
diff --git a/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/shell/tctshell/gui/action_frame.py b/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/shell/tctshell/gui/action_frame.py
deleted file mode 100755 (executable)
index 58bd16e..0000000
+++ /dev/null
@@ -1,95 +0,0 @@
-#!/usr/bin/python
-
-from Tkinter import *
-
-class ActionFrame(Frame):
-    def __init__(self, parent):
-       Frame.__init__(self, parent)
-       self.parent = parent
-        self.planMenus = []
-        self.devMenus = []
-        self.tVerMenus = []
-       self.plans = []
-       self.devices = []
-       self.tVersions = []
-       self.scenario = []
-       self.checkReady = []
-
-    def initUI(self):
-        for plan in self.plans:
-            self.addPlan()
-       self.infoLabel = Label(self.parent, text = "Prepare plans: choose plan, device id and tizen version.\n--Plans that aren't ready will be ignored", width = 75, height =4)
-       self.infoLabel.grid(column = 1, row = 0, columnspan=4)
-        self.addButton = Button(self.parent, text='Add Plan', command=self.addPlan, width = 37, height = 2)
-        self.addButton.grid(column=1, row=1, columnspan=2, sticky='w')
-        self.doneButton = Button(self.parent, text='Done', command=self.done, width = 37, height=2)
-        self.doneButton.grid(column=2, row=1, columnspan=2, sticky='E')
-
-
-    def importData(self, plans, devices, tVersions):
-        self.plans = plans
-        self.devices = devices
-        self.tVersions = tVersions
-        self.planOptions = plans[:]
-        self.devOptions = devices[:]
-        self.tVerOptions = tVersions[:]
-        self.set_default()
-
-    def set_default(self):
-        self.planOptions.insert(0, "Select plan")
-        self.devOptions.insert(0, "Select device")
-        self.tVerOptions.insert(0, "Select version")
-    
-    def check(self, internal_v, index, op_mode):
-       for i in range(len(self.planMenus)):
-            selectedPlan = self.planMenus[i].get()
-            selectedDevice = self.devMenus[i].get()
-            selectedVersion = self.tVerMenus[i].get()
-            if not ("Select " in selectedPlan + selectedDevice + selectedVersion):
-               self.checkReady[i].config(text="Plan #%d : Ready" %(i+1), fg="green")
-           else:
-               self.checkReady[i].config(text="Plan #%d"%(i+1), fg='red')
-
-    def addPlan(self):
-        tail = len(self.planMenus)
-        self.planMenus.append(StringVar(self.parent))
-        self.planMenus[tail].set(self.planOptions[0])
-       self.planMenus[tail].trace_variable('w', callback=self.check)
-        self.devMenus.append(StringVar(self.parent))
-        self.devMenus[tail].set(self.devOptions[0])
-       self.devMenus[tail].trace_variable('w', callback=self.check)
-        self.tVerMenus.append(StringVar(self.parent))
-        self.tVerMenus[tail].set(self.tVerOptions[0])
-       self.tVerMenus[tail].trace_variable('w', callback=self.check)
-       self.checkReady.append(Label(self.parent, text="Plan #%d" %(tail+1), fg='red'))
-       self.checkReady[tail].config(width = 15)
-       self.checkReady[tail].grid(column = 0, row = tail+2)
-        w = apply(OptionMenu, (self.parent, self.planMenus[tail]) + tuple(self.planOptions))
-        w.config(width = 15)
-        w.grid(column = 1, row = tail+2)
-        w = apply(OptionMenu, (self.parent, self.devMenus[tail]) + tuple(self.devOptions))
-        w.config(width = 40)
-        w.grid(column = 2, row = tail+2)
-        w = apply(OptionMenu, (self.parent, self.tVerMenus[tail]) + tuple(self.tVerOptions))
-        w.config(width = 10)
-        w.grid(column = 3, row = tail+2)
-       self.check("", "", "")
-    def run(self):
-        #Button(root, text='Start', command=self.onStart, width=10).pack(side=LEFT)
-        #Button(root, text='Exit', command=self.onExit, width=10).pack(side=LEFT)
-        self.parent.mainloop()
-
-    def done(self):
-       for i in range(len(self.planMenus)):
-           selectedPlan = self.planMenus[i].get()
-           selectedDevice = self.devMenus[i].get()
-           selectedVersion = self.tVerMenus[i].get()
-           if not ("Select " in selectedPlan + selectedDevice + selectedVersion):
-               strDevlist = [str(dev) for dev in self.devices]
-               print strDevlist
-               print self.devices
-               self.scenario.append([selectedPlan, self.devices[strDevlist.index(selectedDevice)], selectedVersion])
-           self.parent.quit()
-
-    def getScenData(self):
-       return self.scenario
diff --git a/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/shell/tctshell/gui/main_window.py b/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/shell/tctshell/gui/main_window.py
deleted file mode 100755 (executable)
index b84b452..0000000
+++ /dev/null
@@ -1,28 +0,0 @@
-#!/usr/bin/python
-from action_frame import ActionFrame
-from Tkinter import *
-
-class MainWindow:
-    def __init__(self, title='Empty Title'):
-       self.root = Tk()
-       self.root.title(title)
-       self.root.geometry("900x500+300+300")
-
-    def getActionFrame(self):
-       self.actionFrame = ActionFrame(self.root)
-
-    def importData(self, plans, devices, tVersions):
-       self.actionFrame.importData(plans, devices, tVersions)
-       self.actionFrame.initUI()
-    def run(self):
-       #Button(root, text='Start', command=self.onStart, width=10).pack(side=LEFT)
-       #Button(root, text='Exit', command=self.onExit, width=10).pack(side=LEFT)
-       self.root.mainloop()
-    def getScenData(self):
-       return self.actionFrame.getScenData()
-
-    def onExit(self):
-       self.root.quit()
-
-    def onStart(self):
-       print "START"
diff --git a/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/shell/tctshell/intention_generator.py b/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/shell/tctshell/intention_generator.py
deleted file mode 100755 (executable)
index a329b7c..0000000
+++ /dev/null
@@ -1,630 +0,0 @@
-#!/usr/bin/python
-import os
-import re
-from .constants import Constants
-from .shellwrapper import IntentionType
-from xml.etree import ElementTree
-import xml.etree.ElementTree as etree
-from .result_summary import ResultSummary
-from .logmanager import LOGGER
-from .shellplanner import *
-
-
-def _verifyPlan(planfile, tizenVersion):
-    xml_tree = ElementTree.parse(planfile)
-    xml_root = xml_tree.getroot()
-    executeType = xml_root.find('execute_type')
-    suites = xml_root.findall('suite')
-    if executeType is None:
-        LOGGER.warning("[WARNING] Plan xml:" + \
-                " No execute type specified in plan xml")
-    elif not executeType.text in ['All', 'Auto', 'Manual']:
-        LOGGER.warning("[WARNING] Plan xml: Execute type in plan xml: %s. \
-                Execute type should be either All,  Auto or Manual" \
-                % executeType.text)
-    if len(suites) < 1:
-        LOGGER.warning("No suites specified in plan xml")
-    return True
-
-
-def _verifySuite(suite, tizenVersion):
-    try:
-        suite_name = suite.get('name')
-        launcher = suite.get('launcher')
-        auto_tcn = suite.find('auto_tcn')
-        manual_tcn = suite.find('manual_tcn')
-        total_tcn = suite.find('total_tcn')
-        if suite_name is None:
-            LOGGER.warning("[ERROR] Plan xml: Suite name is not specified")
-            return False
-
-        if suite.find('pkg_name') is None:
-            LOGGER.warning("[ERROR] Plan xml:" + \
-                    " Package name is not specified for suite: %s" % suite_name)
-            return False
-
-        suite_pkg_name = suite.find('pkg_name').text
-        suite_zipname = os.path.basename(suite_pkg_name)
-        suite_path = os.path.join(Constants.SUITES_REPOSITORY % tizenVersion, \
-            suite_pkg_name)
-        if not os.path.isfile(suite_path):
-            LOGGER.warning("suite_path does not exist. [%s]" % suite_path)
-            return False
-        auto_num, manual_num, suite_launcher, suite_category, tc_exist, s_name\
-         = _get_suiteInfo(suite_zipname, suite_path, None)
-
-        if suite_name != s_name:
-            LOGGER.warning("[ERROR] Plan xml: Suite name [%s] does not match with \
-                    suite package name" % suite_name)
-            return False
-
-        if launcher != suite_launcher:
-            LOGGER.warning("[WARNING] Plan xml: \
-                Suite [%s] running on a different launcher" % suite_name)
-
-        if auto_tcn is None:
-            LOGGER.warning("[ERROR] Plan xml: \
-                Suite [%s] Auto testcase count not specified" % suite_name)
-            return False
-        elif auto_tcn.text != str(auto_num):
-            LOGGER.warning("[WARNING] Plan xml: \
-                Suite [%s] Wrong auto testcase count" % suite_name)
-
-        if manual_tcn is None:
-            LOGGER.warning("[ERROR] Plan xml: \
-                Suite [%s] Manual testcase count not specified" % suite_name)
-            return False
-        elif manual_tcn.text != str(manual_num):
-            LOGGER.warning("[WARNING] Plan xml: \
-                Suite [%s] Wrong manual testcase count" % suite_name)
-
-        if total_tcn is None:
-            LOGGER.warning("[ERROR] Plan xml: \
-                Suite [%s] Total testcase count not specified" % suite_name)
-            return False
-        elif total_tcn.text != str(manual_num + auto_num):
-            LOGGER.warning("[WARNING] Plan xml: \
-                Suite [%s] Wrong total testcase count" % suite_name)
-
-        Constants.clean_unzip_file()
-    except Exception as ex:
-        LOGGER.warning(str(ex))
-    return True
-
-
-def _get_suiteInfo(filesname, filepath, tc_name):
-    Constants.unzip_package(filepath)
-    m = re.split(Constants.REGEX_FOR_SPLIT_PKG_NAME, filesname)
-    name = m[0]
-    test_file = os.path.expanduser("~") + "/" + Constants.DEFAULT_PLAN_FILE + \
-            "/opt/" + name + "/tests.xml"
-    LOGGER.debug("Getting information from suite package: %s" % test_file)
-    if not os.path.exists(test_file):
-        LOGGER.warning("Can't find the test file...")
-        return 0, 0, Constants.WRT_LAUNCHER_CMD, None
-    return _read_xml_suiteInfo(test_file, tc_name)
-
-
-def _read_xml_suiteInfo(test_file, tc_name):
-    try:
-        autocnt = manualcnt = 0
-        test_xml_temp = etree.parse(test_file)
-        tc_exist = False
-        for test_xml_temp_suite in test_xml_temp.getiterator('suite'):
-            suite_name = test_xml_temp_suite.get('name')
-            suite_launcher = test_xml_temp_suite.get('launcher')
-            suite_category = test_xml_temp_suite.get('category')
-            autocnt = manualcnt = 0
-            for tset in test_xml_temp_suite.getiterator('set'):
-                set_autocnt, set_manualcnt, tcCheck = \
-                        _read_xml_tcInfo(tset, tc_name)
-                autocnt += set_autocnt
-                manualcnt += set_manualcnt
-                if tcCheck:
-                    tc_exist = True
-
-        return autocnt, manualcnt, suite_launcher, suite_category, tc_exist, \
-            suite_name
-
-    except Exception as msg:
-        LOGGER.warning("error read xml %s package : %s" % \
-                (str(test_file), str(msg)))
-        return 0, 0, None, None, None, None
-
-
-def _read_xml_tcInfo(tset, tc_name):
-    set_autocnt = set_manualcnt = 0
-    tcCheck = False
-    for tcase in tset.getiterator('testcase'):
-        tcId = tcase.get('id')
-        exetype = tcase.get('execution_type')
-        if exetype == "auto":
-            set_autocnt += 1
-        elif exetype == "manual":
-            set_manualcnt += 1
-        if tc_name == tcId:
-            tcCheck = True
-
-    return set_autocnt, set_manualcnt, tcCheck
-
-
-def _parsTestScenario(scen_name, file_path, stubPort, skip_package, \
-        skip_count, skip_tc):
-    LOGGER.debug("parsing Test Scenario : " + file_path)
-    plans = []
-    xml_tree = ElementTree.parse(file_path)
-    xml_root = xml_tree.getroot()
-    for xml_plan in xml_root.findall('plan'):
-        plan_file_path = xml_plan.find("path").text
-        plan_name = xml_plan.get("name")
-        plan_deviceId = xml_plan.find("device").get("id")
-        plan_tizenVersion = xml_plan.find("version").text
-        plans.append(_parsTestPlan(plan_file_path, plan_name, plan_deviceId, \
-                None, plan_tizenVersion, None, stubPort, skip_package, \
-                skip_count, skip_tc, scen_name)[0])
-    return plans
-
-
-# return : TctShellSuite []
-def _parsTestPlan(file_path, plan_name, deviceId, executeType, tizenVersion, \
-        resultFolder, stubPort, skip_package, skip_count, skip_tc, devmgr, \
-        scen_name=None, make_ne_package=None, pre_test=None, post_test=None):
-    suites = []
-    profile = ""
-    if not _verifyPlan(file_path, tizenVersion):
-        LOGGER.warning("Please check the plan xml file: %s" % file_path)
-        return None
-
-    LOGGER.debug("parsing Test Plan : " + plan_name)
-    xml_tree = ElementTree.parse(file_path)
-    xml_root = xml_tree.getroot()
-    if xml_root.get('profile') is not None:
-        profile = xml_root.get('profile')
-
-    if not executeType:
-        executeType = ExecuteType.createExecuteType(\
-                xml_root.find('execute_type').text)
-
-    for xml_suite in xml_root.findall('suite'):
-        if not _verifySuite(xml_suite, tizenVersion):
-            continue
-
-        packName = xml_suite.get("name")
-        if skip_package and str(skip_package).find(packName) > -1:
-            LOGGER.info("[skip package : %s]" % packName)
-        else:
-            is_make_ne = 0
-            if make_ne_package and str(make_ne_package).find(suite_name) > -1:
-                issue_num = _pars_issue_num(make_ne_package[0], suite_name)
-                is_make_ne = int(issue_num)
-
-            suite = TctShellSuite(packName, None, \
-                xml_suite.find("auto_tcn").text, \
-                xml_suite.find("manual_tcn").text, \
-                xml_suite.find("pkg_name").text, \
-                xml_suite.get("launcher"), xml_suite.get("category"), \
-                tizenVersion, skip_count, skip_tc, devmgr, \
-                pre_test=pre_test, \
-                post_test=post_test, \
-                is_make_ne=is_make_ne)
-            suites.append(suite)
-
-    plan = TctShellPlan(plan_name, devmgr, deviceId, profile, executeType, \
-            suites, tizenVersion, resultFolder, stubPort, scen_name)
-
-    if Constants.isDistMode():
-        if not plan.setup_distribute():
-            raise
-
-    return [plan]
-
-
-def _parsTestProfile(path_suites, deviceId, executeType, tizenV, profile, \
-        resultFolder, stubPort, skip_package, skip_count, skip_tc, devmgr, \
-        distribute_count, make_ne_package=None, pre_test=None, post_test=None):
-    suites = []
-    LOGGER.debug("Preparing Test Suite ")
-    suite_profile = os.path.basename(os.path.dirname(path_suites[0]))
-    for counter, suite_path in enumerate(path_suites):
-        counter = counter + 1
-        suite_profile = os.path.basename(os.path.dirname(suite_path))
-        suite_zipname = os.path.basename(suite_path)
-        suite_name = _geneSuiteName(suite_zipname, tizenV)
-        auto_num, manual_num, suite_launcher, suite_category, tc_exist, s_name\
-                = _get_suiteInfo(suite_zipname, suite_path, None)
-
-        suite_tizenVer = tizenV
-        suite_pkg_name = os.path.join(suite_profile, \
-                os.path.basename(suite_path))
-
-        dist_res = None
-        if distribute_count:
-            dist_res = _check_dist_number(counter, distribute_count)
-
-        if skip_package and str(skip_package).find(suite_name) > -1:
-            LOGGER.info("[skip package : %s]" % suite_name)
-        elif auto_num == 0 and manual_num == 0:
-            pass
-        else:
-            is_make_ne = 0
-            if make_ne_package and str(make_ne_package).find(suite_name) > -1:
-                issue_num = _pars_issue_num(make_ne_package[0], suite_name)
-                is_make_ne = int(issue_num)
-
-            suite = TctShellSuite(suite_name, None, auto_num, manual_num, \
-                suite_pkg_name, suite_launcher, suite_category, \
-                suite_tizenVer, skip_count, skip_tc, devmgr, \
-                pre_test=pre_test, \
-                post_test=post_test, \
-                is_make_ne=is_make_ne)
-
-            if not distribute_count:
-                suites.append(suite)
-            elif dist_res:
-                suites.append(suite)
-
-        Constants.clean_unzip_file()
-
-    temp_plan_name = profile
-    plan = TctShellPlan(temp_plan_name, devmgr, deviceId, profile, executeType, \
-            suites, tizenV, resultFolder, stubPort)
-
-    if Constants.isDistMode():
-        if not plan.setup_distribute():
-            raise
-
-    return [plan]
-
-
-def _parsTestSuite(path_suites, deviceId, executeType, tizenVersion, tc_name, \
-        resultFolder, stubPort, devmgr, skip_count=None, skip_tc=None, \
-        pre_test=None, post_test=None, make_ne_package=None):
-    #type(suites) -> list
-    suites = []
-    LOGGER.debug("Preparing Test Suite ")
-    suite_profile = os.path.basename(os.path.dirname(path_suites[0]))
-    for suite_path in path_suites:
-        suite_zipname = os.path.basename(suite_path)
-        suite_name = _geneSuiteName(suite_zipname, tizenVersion)
-        auto_num, manual_num, suite_launcher, suite_category, tc_exist, s_name\
-                = _get_suiteInfo(suite_zipname, suite_path, tc_name)
-        if tc_name is not None and not tc_exist:
-            LOGGER.warning("Testcase Id : [%s] does not exist in suite : [%s]" \
-                    % (tc_name, suite_name))
-            return None
-
-        suite_tizenVer = tizenVersion
-        suite_pkg_name = os.path.join(suite_profile, \
-                os.path.basename(suite_path))
-
-        is_make_ne = 0
-        if make_ne_package and str(make_ne_package).find(suite_name) > -1:
-            issue_num = _pars_issue_num(make_ne_package[0], suite_name)
-            is_make_ne = int(issue_num)
-
-        suite = TctShellSuite(suite_name, tc_name, auto_num, manual_num, \
-                suite_pkg_name, suite_launcher, suite_category, \
-                suite_tizenVer, skip_count, skip_tc, devmgr, \
-                pre_test=pre_test, \
-                post_test=post_test, \
-                is_make_ne=is_make_ne)
-
-        suites.append(suite)
-        Constants.clean_unzip_file()
-
-    temp_plan_name = "temp_plan_name"
-    plan = TctShellPlan(temp_plan_name, devmgr, deviceId, suite_profile, executeType, \
-            suites, tizenVersion, resultFolder, stubPort)
-
-    if Constants.isDistMode():
-        if not plan.setup_distribute():
-            raise
-
-    return [plan]
-
-
-def _parsTestCase(path_suites, deviceId, executeType, tizenVersion, \
-        testcase_id, resultFolder, stubPort, devmgr):
-    LOGGER.debug("parsing Test Case : " + str(testcase_id))
-
-    return _parsTestSuite(path_suites, deviceId, executeType, tizenVersion, \
-            testcase_id, resultFolder, stubPort, devmgr)
-
-
-def _parsAutoPlan(planFile, plan_name, executeType, tizenVer, \
-        resultFolderPath, stubPort, skip_package, skip_count, skip_tc, \
-        devmgr, pre_test=None, post_test=None, make_ne_package=None):
-    if not _verifyPlan(planFile, tizenVer):
-        LOGGER.warning("Please check the plan xml file: %s" % planFile)
-        return None
-
-    LOGGER.debug("parsing Test Plan : " + planFile)
-    suites = []
-    profile = ""
-    planList = []
-    deviceLen = devmgr.getDeviceSize()
-    if deviceLen < 1:
-        LOGGER.error("No connected device")
-        return None
-
-    LOGGER.info("Plan [%s] will be distributed to %d devices" \
-            % (plan_name, deviceLen))
-    devices = devmgr.getSdbDeviceList()
-    xml_tree = ElementTree.parse(planFile)
-    xml_root = xml_tree.getroot()
-    if xml_root.get('profile') is not None:
-        profile = xml_root.get('profile')
-
-    if not executeType:
-        executeType = ExecuteType.createExecuteType(\
-                xml_root.find('execute_type').text)
-
-    for dev in range(deviceLen):
-        planTempName = plan_name + str(dev)
-        devId = devices[dev].getDeviceId()
-        planList.append(TctShellPlan(planTempName, devId, profile, \
-                executeType, [], tizenVer, resultFolderPath, stubPort, \
-                plan_name))
-
-    for xml_suite in xml_root.findall('suite'):
-        if not _verifySuite(xml_suite, tizenVer):
-            continue
-        autoCount = int(xml_suite.find("auto_tcn").text)
-        category = xml_suite.get("category")
-        if category and category.find('Runtime') > -1:
-            etime = autoCount * (Constants.SUITE_TEST_EXPECTED_TIME + 2)
-        else:
-            etime = (autoCount * 2) + Constants.SUITE_TEST_EXPECTED_TIME
-
-        suite_name = xml_suite.get("name")
-        if skip_package and str(skip_package).find(suite_name) > -1:
-            LOGGER.error("[skip package : %s]" % suite_name)
-        else:
-            is_make_ne = 0
-            if make_ne_package and str(make_ne_package).find(suite_name) > -1:
-                issue_num = _pars_issue_num(make_ne_package[0], suite_name)
-                is_make_ne = int(issue_num)
-
-            suite = TctShellSuite(suite_name, None, \
-                xml_suite.find("auto_tcn").text, xml_suite.find("manual_tcn").text,\
-                xml_suite.find("pkg_name").text, xml_suite.get("launcher"), \
-                xml_suite.get("category"), tizenVer, skip_count, skip_tc, \
-                devmgr, pre_test=pre_test, post_test=post_test, is_make_ne=is_make_ne)
-
-            suite.setExpectedTime(etime)
-            if suite.suite_pkg_name is None:
-                LOGGER.warning("suite: [%s] has missing information" \
-                       % suite.suiteName)
-                return None
-            suites.append(suite)
-    suites.sort(key=lambda x: x.expectedTime, reverse=True)
-    for suite in suites:
-        minPlan = min(planList, key=lambda x: x.expectedTime)
-        minPlan.addExpectedTime(suite.getExpectedTime())
-        minPlan.addSuite(suite)
-
-    for plan in planList:
-        LOGGER.debug("%s has ECT: %d" % (plan.getPlanName(), \
-                plan.expectedTime))
-
-    return planList
-
-
-def _parsResultForRerun(wrapper, skip_package, skip_count, skip_tc, devmgr, \
-        distribute_count, pre_test=None, post_test=None, make_ne_package=None):
-    result = wrapper.get_result_for_rerun()
-    rerun_plan_creator = ResultSummary()
-    rerun_data = rerun_plan_creator.prepareRerun(result)
-    if len(rerun_data) < 1:
-        LOGGER.debug("No unpassed results to rerun")
-        return None
-
-    plans = []
-    for plan_path, rerun_info in rerun_data.items():
-        planFolder = plan_path
-        intention_info = rerun_info[0]
-        suites_path = rerun_info[1]
-        plan_name = intention_info[0]
-        executeType = ExecuteType.createExecuteType(intention_info[1])
-        profile = intention_info[2]
-        tizenVer = intention_info[3]
-        deviceId = intention_info[4]
-        scen_resultFolderPath = intention_info[6]
-
-        if len(suites_path) < 1:
-            LOGGER.debug("No unpassed results to rerun in plan: [%s]" \
-                    % plan_name)
-            continue
-
-        if devmgr.getDevice(deviceId) is None:
-            if len(rerun_data) > 1:
-                LOGGER.error("Required devices not connected. " + \
-                        "Check what devices were used for the scenario.")
-
-            LOGGER.warning("WARNING: \
-                    Device used for the test is not connected: \
-                    device id: %s" % deviceId)
-            LOGGER.warning("WARNING: Rerunning the test in a different device")
-            if Constants.isDistMode():
-                deviceId = None
-            else:
-                deviceId = wrapper.get_deviceId()
-
-        suites = []
-        resultFolderPath = wrapper.get_resultFolderPath()
-        if not resultFolderPath:
-            resultFolderPath = planFolder
-
-        for counter, suite_path in enumerate(suites_path):
-            counter = counter + 1
-            suite_pkg_name = os.path.join(os.path.basename(\
-                    os.path.dirname(suite_path)), os.path.basename(suite_path))
-            suite_zipname = os.path.basename(suite_pkg_name)
-            suite_name = _geneSuiteName(suite_zipname, tizenVer)
-            auto_num, manual_num, suite_launcher, suite_category, \
-                    tc_exist, s_name = _get_suiteInfo(suite_zipname, \
-                    suite_path, None)
-
-            dist_res = None
-            if distribute_count:
-                dist_res = _check_dist_number(counter, distribute_count)
-
-            if skip_package and str(skip_package).find(suite_name) > -1:
-                LOGGER.error("[skip package : %s]" % suite_name)
-            else:
-                is_make_ne = 0
-                if make_ne_package and \
-                    str(make_ne_package).find(suite_name) > -1:
-                    issue_num = _pars_issue_num(make_ne_package[0], \
-                        suite_name)
-                    is_make_ne = int(issue_num)
-
-                suite = TctShellSuite(suite_name, None, auto_num, manual_num, \
-                        suite_pkg_name, suite_launcher, suite_category, \
-                        tizenVer, skip_count, skip_tc, devmgr, \
-                        pre_test=pre_test, \
-                        post_test=post_test, \
-                        is_make_ne=is_make_ne)
-
-                if not distribute_count:
-                    suites.append(suite)
-                elif dist_res:
-                    suites.append(suite)
-
-        plan = TctShellPlan(plan_name, devmgr, deviceId, profile, executeType, suites,\
-                tizenVer, resultFolderPath, wrapper.get_stubPort())
-        plan.setScenResultFolderPath(scen_resultFolderPath)
-        plan.setRerunning(True)
-        plans.append(plan)
-
-    if Constants.isDistMode():
-        for plan in plans:
-            if not plan.setup_distribute():
-                raise
-
-    return plans
-
-
-def _geneSuiteName(suite_zipname, _tizenV):
-    suite_name = ""
-    match_ext = ""
-
-    if _tizenV:
-        match_ext = "-{}.zip".format(_tizenV.split('_')[-1])
-        find_idx = suite_zipname.find(match_ext)
-        if find_idx > -1:
-            suite_name = suite_zipname[0:find_idx]
-        else:
-            LOGGER.warning("Not found suite name")
-
-    return suite_name
-
-
-MATCH_CT = 0
-def _check_dist_number(suite_num, dist_ct):
-    global MATCH_CT
-    total = int(dist_ct.split('-')[0])
-    curr = int(dist_ct.split('-')[1])
-
-    if curr > total:
-        LOGGER.error("distribute command error")
-        raise
-
-    if MATCH_CT == 0:
-        MATCH_CT = MATCH_CT + curr
-    if suite_num == MATCH_CT:
-        MATCH_CT = MATCH_CT + total
-        return True
-    else:
-        return False
-
-
-def _pars_issue_num(_make_ne_package, _suite_name):
-    ne_pack_list = _make_ne_package.split(',')
-    for _pn in ne_pack_list:
-        if _pn.find(_suite_name) > -1:
-            return _pn.split(':')[1]
-    return 0
-
-
-class IntentionGenerator:
-    # return : bool
-    @staticmethod
-    def genIntentionData(wrapper, devmgr):
-        skip_package = wrapper.get_skip_package()
-        skip_count = wrapper.get_skip_count()
-        skip_tc = wrapper.get_skip_tc()
-        make_ne_package = wrapper.get_make_ne()
-        pre_test = wrapper.get_pre_test()
-        post_test = wrapper.get_post_test()
-        distribute_count = wrapper.get_distribute_count()
-
-        if wrapper.get_running_mode() == Constants.RUNNING_MODE_RERUN:
-            return _parsResultForRerun(wrapper, skip_package, skip_count, \
-                    skip_tc, devmgr, distribute_count, \
-                    make_ne_package=make_ne_package)
-
-        intention_type = wrapper.getIntentionType()
-        deviceId = None
-        if not (intention_type == IntentionType.AutoPlan or \
-                Constants.isDistMode()):
-            deviceId = wrapper.get_deviceId()
-        else:
-            deviceId = None
-
-        tcId = wrapper.get_testcase_id()
-        executeType = wrapper.get_execute_type()
-        suites = wrapper.get_suites()
-        tizenVer = wrapper.get_tizenV()
-        resultFolderPath = wrapper.get_resultFolderPath()
-        stubPort = wrapper.get_stubPort()
-
-        if intention_type == -1:
-            return None
-
-        if (intention_type == IntentionType.TestPlan or \
-            intention_type == IntentionType.TestProfile or \
-            intention_type == IntentionType.TestSuite) and \
-            not Constants.isDistMode():
-            if not wrapper.is_make_summary_mode():
-                if not devmgr.isDeviceAvailable(deviceId):
-                    LOGGER.error("Device [%s] is not connected" % deviceId)
-                    LOGGER.error("Required devices not connected properly")
-                    return None
-
-        if intention_type == IntentionType.TestScenario:
-            scenFile = wrapper.get_scenfile()
-            scenName = wrapper.get_scen_name()
-            plans = _parsTestScenario(scenName, scenFile, stubPort, \
-                    skip_package, skip_count, skip_tc)
-        elif intention_type == IntentionType.TestPlan:
-            name = wrapper.get_plan_name()
-            planFile = wrapper.get_planfile()
-            plans = _parsTestPlan(planFile, name, deviceId, executeType, \
-                    tizenVer, resultFolderPath, stubPort, skip_package, \
-                    skip_count, skip_tc, devmgr, make_ne_package=make_ne_package, \
-                    pre_test=pre_test, post_test=post_test)
-        elif intention_type == IntentionType.TestCase:
-            plans = _parsTestCase(suites, deviceId, executeType, tizenVer, \
-                    tcId, resultFolderPath, stubPort, devmgr)
-        elif intention_type == IntentionType.TestSuite:
-            plans = _parsTestSuite(suites, deviceId, executeType, tizenVer, \
-                    None, resultFolderPath, stubPort, devmgr, skip_count, \
-                    skip_tc, make_ne_package=make_ne_package, pre_test=pre_test, post_test=post_test)
-        elif intention_type == IntentionType.AutoPlan:
-            name = wrapper.get_plan_name()
-            autoFile = wrapper.get_autoplanfile()
-            plans = _parsAutoPlan(autoFile, name, executeType, tizenVer, \
-                    resultFolderPath, stubPort, skip_package, skip_count, \
-                    skip_tc, devmgr, make_ne_package=make_ne_package, pre_test=pre_test, post_test=post_test)
-        elif intention_type == IntentionType.TestProfile:
-            profile_suites = wrapper.get_profile_suites()
-            if not profile_suites:
-                return None
-            profile = wrapper.get_profile()
-            plans = _parsTestProfile(profile_suites, deviceId, executeType, \
-                    tizenVer, profile, resultFolderPath, stubPort, \
-                    skip_package, skip_count, skip_tc, devmgr, distribute_count, \
-                    make_ne_package=make_ne_package, pre_test=pre_test, post_test=post_test)
-
-        return plans
diff --git a/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/shell/tctshell/logmanager.py b/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/shell/tctshell/logmanager.py
deleted file mode 100755 (executable)
index ae7a4a8..0000000
+++ /dev/null
@@ -1,168 +0,0 @@
-import logging
-import os
-import shutil
-
-BLACK, RED, GREEN, YELLOW, BLUE, MAGENTA, CYAN, WHITE = range(8)
-
-RESET_SEQ = "\033[0m "
-COLOR_SEQ = "\033[%dm "
-BOLD_SEQ = "\033[1m "
-
-LEVELS = {"CRITICAL": 50,
-          "ERROR": 40,
-          "WARNING": 30,
-          "INFO": 20,
-          "DEBUG": 10,
-          "NOTSET": 0
-          }
-
-COLORS = {"CRITICAL": YELLOW,
-          "ERROR": RED,
-          "WARNING": YELLOW,
-          "INFO": WHITE,
-          "DEBUG": CYAN,
-          "NOTSET": WHITE
-          }
-
-
-def formatter_message(message, use_color=True):
-    if use_color:
-        message = message.replace("$RESET", RESET_SEQ)\
-                .replace("$BOLD", BOLD_SEQ)
-    else:
-        message = message.replace("$RESET", "").replace("$BOLD", "")
-
-    return message
-
-
-class ColoredFormatter(logging.Formatter):
-
-    def __init__(self, msg, datefmt, use_color=True):
-        logging.Formatter.__init__(self, msg, datefmt)
-        self.use_color = use_color
-
-    def format(self, record):
-        levelname = record.levelname
-        record_msg = record.msg
-        if self.use_color and levelname in COLORS:
-            if levelname == "ERROR":
-                colorsq = "\033[1;%dm "
-            else:
-                colorsq = COLOR_SEQ
-            colored_msg = colorsq % (30 + COLORS[levelname]) \
-                    + record_msg + RESET_SEQ
-            record.msg = colored_msg
-
-        return logging.Formatter.format(self, record)
-
-class MultiHandler(logging.Handler):
-
-    def __init__(self, dirname):
-        super(MultiHandler, self).__init__()
-        self.files = {}
-        self.dirname = dirname
-
-    def flush(self):
-        self.acquire()
-        try:
-            for fp in self.files.values():
-                fp.flush()
-        finally:
-            self.release()
-
-    def _get_or_open(self, key):
-        self.acquire()
-        try:
-            if key in self.files:
-                return self.files[key]
-            else:
-                file_path = os.path.join(self.dirname, "%s.log" % key)
-                if os.path.exists(file_path):
-                    os.remove(file_path)
-                fp = open(file_path, "a")
-                self.files[key] = fp
-                return fp
-        finally:
-            self.release()
-
-    def deformat(self, msg):
-        import re
-        ansi_escape = re.compile(r'\x1b[^m]*m')
-
-        return ansi_escape.sub('', msg)
-
-    def emit(self, record):
-        try:
-            fp = self._get_or_open(record.processName)
-            msg = self.format(record)
-            #fp.write('%s\n' % self.deformat(msg).encode("utf-8"))
-            fp.write("%s\n" % str(msg))
-        except (KeyboardInterrupt, SystemExit):
-            raise
-        except UnicodeDecodeError:
-            pass
-        except:
-            self.handleError(record)
-
-
-class LogManager:
-
-    def __init__(self, logname="mTCT", log_format=\
-            '%(asctime)15s %(processName)18s #%(levelname).3s %(module) 18s:%(lineno)-4d %(message)s', \
-            dirname="/opt/tools/shell/tmp/logs"):
-        self._remove_logdir(dirname)
-        colorformatter1 = ColoredFormatter(formatter_message(log_format), \
-                "%Y-%m-%d_%H:%M:%S", False)
-
-        stderr_handler = logging.StreamHandler()
-        stderr_handler.setFormatter(colorformatter1)
-        logging.getLogger().addHandler(stderr_handler)
-
-        infoHandler = logging.FileHandler(dirname + "/info.log")
-        infoHandler.setLevel(logging.INFO)
-        infoHandler.setFormatter(colorformatter1)
-
-        debugHandler = logging.FileHandler(dirname + "/debug.log")
-        debugHandler.setLevel(logging.DEBUG)
-        debugHandler.setFormatter(colorformatter1)
-
-        errorHandler = logging.FileHandler(dirname + "/error.log")
-        errorHandler.setLevel(logging.ERROR)
-        errorHandler.setFormatter(colorformatter1)
-
-        warnHandler = logging.FileHandler(dirname + "/warning.log")
-        warnHandler.setLevel(logging.WARNING)
-        warnHandler.setFormatter(colorformatter1)
-
-        criticalHandler = logging.FileHandler(dirname + "/critical.log")
-        criticalHandler.setLevel(logging.CRITICAL)
-        criticalHandler.setFormatter(colorformatter1)
-
-        multi_handler = MultiHandler(dirname)
-        multi_handler.setFormatter(colorformatter1)
-        logging.getLogger().addHandler(multi_handler)
-
-        _logger = logging.getLogger(logname)
-        _logger.addHandler(infoHandler)
-        _logger.addHandler(debugHandler)
-        _logger.addHandler(errorHandler)
-        _logger.addHandler(warnHandler)
-        _logger.addHandler(criticalHandler)
-
-        _logger.setLevel('INFO')
-        self.logger = _logger
-
-    def _get_logger(self):
-        return self.logger
-
-    def _remove_logdir(self, dirname):
-        if os.path.exists(dirname):
-            shutil.rmtree(dirname)
-        if not os.path.exists(dirname):
-            os.makedirs(dirname, mode=0o777)
-
-        if not os.access(dirname, os.W_OK):
-            raise Exception("Directory %s not writeable" % dirname)
-
-
-LOGGER = LogManager()._get_logger()
diff --git a/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/shell/tctshell/logmanager.pyc b/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/shell/tctshell/logmanager.pyc
deleted file mode 100755 (executable)
index b07ebe6..0000000
Binary files a/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/shell/tctshell/logmanager.pyc and /dev/null differ
diff --git a/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/shell/tctshell/netstatmonitor.py b/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/shell/tctshell/netstatmonitor.py
deleted file mode 100755 (executable)
index 74feb07..0000000
+++ /dev/null
@@ -1,89 +0,0 @@
-#!/usr/bin/python
-
-import time
-
-from .sdbmanager import SdbManager
-from .logmanager import LOGGER
-from multiprocessing import Process
-
-
-class NetstatMonitor(Process):
-
-    netstat_cmd = 'netstat -tan | grep %s'
-    deviceId = ""
-
-    def __init__(self, deviceId, devmgr):
-        Process.__init__(self)
-        self.daemon = True
-        self.name = "Netstat_%s" % deviceId.split('.')[-1].split(':')[0]
-        self.deviceId = deviceId
-        self.__suspend = True
-        self.devmgr = devmgr
-        self.recovery_lock = None
-        self.isFinish = False
-
-    def run(self):
-        LOGGER.debug("Starting NetstatLogger")
-        state_changed = False
-        wasConnected = True
-        while True:
-            if self.isFinish:
-                break
-            time.sleep(10)
-            exit_code, stdout, stderr = SdbManager.sdbCommand(\
-                    self.netstat_cmd % self.deviceId, 3)
-            outLog = stdout.read()
-            netValues = self.parsingLogData(outLog)
-            isConnected = self.checkConnectState(netValues)
-            state_changed = isConnected is not wasConnected
-
-            if state_changed:
-                if isConnected:
-                    LOGGER.info("Device connected")
-                    self.device_recovered()
-                else:
-                    LOGGER.error("Device disconnected")
-                self.reLoadDeviceList()
-            wasConnected = isConnected
-
-    def kill_netMonitor(self):
-        self.isFinish = True
-
-    def getThreadStatus(self):
-        return self.__suspend
-
-    def restartThread(self):
-        time.sleep(10)
-        LOGGER.info("Starting %s device monitor" % self.deviceId)
-        self.__suspend = False
-
-    def reLoadDeviceList(self):
-        LOGGER.debug('Netstat: reLoadDeviceList')
-        if not self.devmgr.loadDeviceList():
-            LOGGER.error('0 device is connected')
-
-    def parsingLogData(self, outLog):
-        outLog = outLog.rstrip()
-        resultLog = outLog.split(' ')
-        parsLog = []
-        for log in resultLog:
-            if len(log) != 0:
-                parsLog.append(log)
-
-        return parsLog
-
-    def setup_recovery(self, lock):
-        self.recovery_lock = lock
-
-    def device_recovered(self):
-        try:
-            self.recovery_lock.release()
-        except:
-            pass
-
-    def checkConnectState(self, netValues):
-        for val in netValues:
-            if val and val.find('ESTABLISHED') != -1:
-                return True
-
-        return False
diff --git a/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/shell/tctshell/plan_options.py b/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/shell/tctshell/plan_options.py
deleted file mode 100755 (executable)
index 399a67b..0000000
+++ /dev/null
@@ -1,229 +0,0 @@
-#!/usr/bin/python
-#
-# Copyright (C) 2012 Intel Corporation
-# 
-# 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
-# of the License, or (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
-#
-# Authors:
-#              Tang, Shaofeng <shaofeng.tang@intel.com>
-
-import sys
-import os
-import re
-import platform
-import glob
-from optparse import *
-from constants import Constants
-from logmanager import LOGGER
-
-
-#show all available suites
-def _show_available_suites(option, opt_str, value, parser):
-    print "Test Suites:...\n"
-    os.chdir("/opt/tct/")
-    for t_version in glob.glob("tizen*"):
-        print "Tizen Version : %s" % t_version
-        package_dir = os.path.join(os.path.abspath(t_version), 'packages')
-        if not os.path.isdir(package_dir):
-            continue
-        os.chdir(package_dir)
-        for profile in glob.glob("*"):
-            if profile == 'pkg_infos':
-                continue
-            print "      profile : %s" % profile
-            os.chdir(os.path.abspath(profile))
-            for files in glob.glob("*.zip"):
-                print "                " + files[:-4]
-            os.chdir('../')
-        os.chdir('../../')
-    sys.exit(1)
-
-
-def _print_planfolder(option, opt_str, value, parser):
-    print "Plan folder: %s" % Constants.TCT_PLAN_FOLDER
-    os.system("tree %s" % Constants.TCT_PLAN_FOLDER)
-    sys.exit(1)
-
-
-def varnarg(option, opt_str, value, parser):
-    """ parser srg"""
-    value = []
-    for arg in parser.rargs:
-        if re.search('^--.+', arg) or re.search('^-[\D]', arg):
-            break
-        value.append(arg)
-
-    del parser.rargs[:len(value)]
-    setattr(parser.values, option.dest, value)
-
-
-class PlanGeneratorOptions:
-
-    def __init__(self):
-        self._j = os.path.join
-        self._e = os.path.exists
-        self._d = os.path.dirname
-        self._b = os.path.basename
-        self._abspath = os.path.abspath
-        self.testkit_dir = "/opt/testkit/lite"
-        self.LOG_DIR = self.testkit_dir
-        self.PID_FILE = self._j(self.LOG_DIR, "pid.log")
-        if not platform.system() == "Linux":
-            self.testkit_dir = self._d(self._abspath(__file__))
-            sys.path += [self._j(self.testkit_dir)]
-            self.testkit_dir = self._j(self.testkit_dir, "results")
-        #self.clean_context()
-        self.options = None
-        self.options = None
-        self.running_mode = None
-        self.USAGE = "tct-plan-generator [options] --output <somewhere/testplan.xml>\n\
-examples: \n\
-          tct-plan-generator  -p mobile -o  <somewhere>/testplan.xml\n\
-          tct-plan-generator  -p mobile -o  <somewhere>/testplan.xml -r <somewhere>/repository_folder\n\
-          tct-plan-generator  -p mobile -o  <somewhere>/testplan.xml -r <somewhere>/repository_folder --match '<regex>'\n\
-\n\
-    generate a test plan to include all suites in the local repository: \n\
-          tct-plan-generator  -p mobile -o  <somewhere>/testplan.xml\n\
-    generate a test plan to include all suites in the special repository: \n\
-          tct-plan-generator  -p mobile -o  <somewhere>/testplan.xml -r <somewhere>/repository_folder\n\
-    generate a test plan to include the suites in the special repository which name is matched with 'webapi*.rpm': \n\
-          tct-plan-generator  -p mobile -o  <somewhere>/testplan.xml -r <somewhere>/repository_folder  --match 'webapi*.rpm'\n\
-    generate a test plan to include the suites in the special repository which name is matched with 'webapi*.rpm', and exclude the file 'webapi-tizen-push-tests-2.1.6-1.1.armv7l.rpm': \n\
-          tct-plan-generator  -p mobile -o  <somewhere>/testplan.xml -r <somewhere>/repository_folder  --match 'webapi*.rpm' --unmatch push\n\
-\n\
-Note: \n\
-          1) run command 'tct-plan-generator', it might not be able to locate related module, run command 'export PYTHONPATH=/usr/lib/python2.7/site-packages' to resolve this issue"
-
-    def print_usage(self):
-        print self.USAGE
-
-    def parse_options(self, argv):
-        option_list = [
-                make_option("-o", "--output", dest="testplan_file", \
-                        action="callback", callback=varnarg, \
-                        help="Specify the generating testplan in a XML file."),
-                make_option("-e", "--execute", dest="execute_type", \
-                        action="callback", callback=varnarg, \
-                        help="Specify the execute_type of testplan in a XML file."),
-                make_option("-r", "--repository", dest="repository_folder", \
-                        action="callback", callback=varnarg, \
-                        help="Specify the path of local repository."),
-                make_option("--tizen-version", dest="tizenversion", \
-                        action="callback", callback=varnarg, \
-                        help="Specify the name of tizen-version you want to run test. The tizen-version is defined in the local repository. and its path is '/opt/tct/'"),
-                make_option("-m", "--match", dest="match_regex", \
-                        action="callback", callback=varnarg, \
-                        help="The regex for matching filename."),
-                make_option("-p", "--profile", dest="test_profile", \
-                        action="callback", callback=varnarg, \
-                        help="The profile of the test plan."),
-                make_option("-u", "--unmatch", dest="unmatch_regex", \
-                        action="callback", callback=varnarg, \
-                        help="The regex for unmatching filename."),
-                make_option("--plan-list", dest="show_plan_folder", \
-                        action="callback", callback=_print_planfolder, \
-                        help="List all existed plan in the Plan folder. The plan folder is defined in the configure '/opt/tct/shell/CONF'"),
-                make_option("-a", "--all-suites", dest="show_suites", \
-                        action="callback", callback=_show_available_suites, \
-                        help="Show all available test-suites"),
-                ]
-        # detect non-params
-        if len(argv) == 1:
-            argv.append("-h")
-        PARSERS = OptionParser(option_list=option_list, usage=self.USAGE)
-        (self.options, args) = PARSERS.parse_args()
-
-        if self.options.tizenversion:
-            self.check_tizen_version()
-        else:
-            LOGGER.error("The default tizen version could not be set.")
-            sys.exit("No tizen version specified")
-
-        if not self.options.match_regex:
-            LOGGER.error("The default match_regex could not be set.")
-            sys.exit("No match regex specified. Use -m or --match option")
-
-    def check_tizen_version(self):
-        tizenversion = self.options.tizenversion[0]
-        VER_PATTERN = "^tizen_web_\d.\d|^tizen_native_\d.\d|^tizen_csharp_\d.\d"
-        pa = re.compile(VER_PATTERN, re.I)
-        ma = pa.match(tizenversion)
-        if ma is None:
-            LOGGER.error("A required \"/opt/tct/" + tizenversion + \
-                    " could not be found.")
-            sys.exit("Invalid Tizen version. Tizen version must be in the form of tizen_(web|native|csharp)_#.#")
-            return False
-        return True
-
-    def get_repository_folder(self):
-        if (self.options.repository_folder is not None) and \
-            (self.options.repository_folder[0] is not None):
-            return self.options.repository_folder[0]
-        else:
-            return Constants.SUITES_REPOSITORY % self.get_tizenV()
-
-    def get_match_regex(self):
-        if (self.options.match_regex is not None) and \
-                (self.options.match_regex[0] is not None):
-            return self.options.match_regex[0]
-        else:
-            return Constants.DEFAULT_MATCH_REGEX
-
-    def get_plan_name(self):
-        if (self.options.testplan_file is not None) and \
-                (self.options.testplan_file[0] is not None):
-            name, ext = os.path.splitext(self.options.testplan_file[0])
-            return name.split("/")[-1]
-        else:
-            return Constants.DEFAULT_PLAN_NAME
-
-    def get_profile_name(self):
-        if (self.options.test_profile is not None) and \
-                 (self.options.test_profile[0] is not None):
-            return self.options.test_profile[0]
-        else:
-            return Constants.DEFAULT_PROFILE_NAME
-
-    def get_execute_type(self):
-        if (self.options.execute_type is not None) and \
-                (self.options.execute_type[0] is not None):
-            return self.options.execute_type[0]
-        else:
-            return Constants.DEFAULT_EXECUTE_TYPE
-
-    def get_tizenV(self):
-        if (self.options.tizenversion is not None) and \
-                (self.options.tizenversion[0] is not None):
-            return self.options.tizenversion[0]
-        else:
-            print "Error: Please specify Tizen version with [--tizen-version] option"
-            sys.exit(1)
-
-    def get_output(self):
-        if (self.options.testplan_file is not None) and \
-                (self.options.testplan_file[0] is not None):
-            d = os.path.abspath(os.path.dirname(self.options.testplan_file[0]))
-            if not os.path.exists(d):
-                os.makedirs(d)
-            return os.path.abspath(self.options.testplan_file[0])
-        else:
-            return Constants.TCT_PLAN_FOLDER + "generated_plan.xml"
-
-    def get_unmatch_regex(self):
-        if (self.options.unmatch_regex is not None) and \
-                (self.options.unmatch_regex[0] is not None):
-            return self.options.unmatch_regex[0]
-        else:
-            return Constants.DEFAULT_UNMATCH_REGEX
diff --git a/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/shell/tctshell/plan_runner.py b/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/shell/tctshell/plan_runner.py
deleted file mode 100755 (executable)
index 28553c1..0000000
+++ /dev/null
@@ -1,226 +0,0 @@
-#!/usr/bin/python
-#
-# Copyright (C) 2012 Intel Corporation
-# 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
-# of the License, or (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-# 02110-1301, USA.
-#
-# Authors:
-#              Tang, Shaofeng <shaofeng.tang@intel.com>
-
-from constants import Constants
-from xml.etree import ElementTree
-from logmanager import LOGGER
-import xml.etree.ElementTree as etree
-import os
-import os.path
-import sys
-import glob
-import re
-
-
-class SuitePackage:
-    def __init__(self, profile, file_name, launcher, category, auto_count, \
-            manual_count):
-        self.file = file_name
-        self.profile = profile
-        m = re.split(Constants.REGEX_FOR_SPLIT_PKG_NAME, file_name)
-        self.name = m[0]
-        self.auto_count = auto_count
-        self.manual_count = manual_count
-        self.total_count = auto_count + manual_count
-        self.launcher = launcher
-        self.category = category
-
-    def to_xml(self):
-        suite = ElementTree.Element('suite')
-        suite.set('name', self.name)
-        if self.launcher:
-            suite.set('launcher', self.launcher)
-
-        if self.category:
-            suite.set('category', self.category)
-
-        auto = ElementTree.Element('auto_tcn')
-        auto.text = str(self.auto_count)
-        suite.append(auto)
-        manual = ElementTree.Element('manual_tcn')
-        manual.text = str(self.manual_count)
-        suite.append(manual)
-        total = ElementTree.Element('total_tcn')
-        total.text = str(self.total_count)
-        suite.append(total)
-        rpm_name = ElementTree.Element('pkg_name')
-        rpm_name.text = self.profile + '/' + self.file
-        suite.append(rpm_name)
-
-        return suite
-
-
-class PlanRunner:
-
-    def __init__(self):
-        self.suites = {}
-        self.suite_paths = []
-        self.plan_name = Constants.DEFAULT_PLAN_NAME
-        self.profile = Constants.DEFAULT_PROFILE_NAME
-        self.execute_type = Constants.DEFAULT_EXECUTE_TYPE
-
-    def load_local_repo(self, path, tizenV, match, unmatch, plan_name, \
-            profile, execute_type):
-        try:
-            self.plan_name = plan_name
-            self.profile = profile
-            self.execute_type = execute_type
-            raw_paths = []
-            repos = ['common', profile]
-            for tp in repos:
-                repo = '/'.join([path, tp])
-                if not os.path.isdir(repo):
-                    continue
-
-                os.chdir(repo)
-                for files in glob.glob("*" + match + "*"):
-                    print "Matched File name: %s" % str(os.path.abspath(files))
-                    if (unmatch is not None) and (re.search(unmatch, \
-                            str(files))):
-                        print "File %s is skipped with unmatch regex %s" \
-                                % (str(files), unmatch)
-                    else:
-                        raw_paths.append(os.path.join(repo, str(files)))
-
-            if len(raw_paths) < 1:
-                sys.exit("Match regex: [%s] No matching suite package found." \
-                        % match)
-
-            self.suite_paths = self._chooseProfile(raw_paths)
-            for files in self.suite_paths:
-                profile = os.path.basename(os.path.dirname(files))
-                auto, manual, launcher, category = \
-                        self.get_count_launcher_category(\
-                        os.path.basename(files), files)
-                suite = SuitePackage(profile, os.path.basename(files), \
-                        launcher, category, auto, manual)
-                self.suites[suite.name] = suite
-                Constants.clean_unzip_file()
-        except Exception, e:
-            print "[ Error happen when reading the local repository," + \
-                    " error: %s ]\n" % e
-
-    def _chooseProfile(self, path_suites):
-        suite_profiles = {}
-        filtered_suites = []
-        suite_repo = os.path.dirname(os.path.dirname(path_suites[0]))
-        for suite_path in path_suites:
-            suite_zipname = os.path.basename(suite_path)
-            sprofile = os.path.basename(os.path.dirname(suite_path))
-            if not suite_zipname in suite_profiles:
-                suite_profiles[suite_zipname] = []
-
-            suite_profiles[suite_zipname].append(sprofile)
-
-        for suiteName, suiteProfile in suite_profiles.items():
-            suite_name = "-".join(suiteName[:-4].split("-")[:-1])
-            if len(suiteProfile) == 1:
-                suite_profiles[suiteName] = suiteProfile[0]
-                continue
-
-            print "\nMultiple profiles for [%s] \
-                    :\n----------------------------------------------" \
-                    % suite_name
-
-            for profile_i in suiteProfile:
-                print " - %s" % profile_i
-
-            suite_profile = None
-            while not suite_profile in suiteProfile:
-                suite_profile = raw_input("\nChoose profile: ")
-
-            suite_profiles[suiteName] = suite_profile
-
-        check_profile = None
-        multiProfiles = False
-        for suiteName, suiteProfile in suite_profiles.items():
-            if suiteProfile != 'common':
-                if check_profile is not None and check_profile != suiteProfile:
-                    multiProfiles = True
-
-                if check_profile is None:
-                    check_profile = suiteProfile
-
-            filtered_suites.append(\
-                    os.path.join(suite_repo, suiteProfile, suiteName))
-
-        if multiProfiles:
-            LOGGER.warning("WARNING: \
-                    Multiple suites run with different profiles")
-
-        return filtered_suites
-
-    def get_count_launcher_category(self, filesname, filepath):
-        Constants.unzip_package(filepath)
-        m = re.split(Constants.REGEX_FOR_SPLIT_PKG_NAME, filesname)
-        name = m[0]
-        test_file = os.path.expanduser("~") + "/" + \
-                Constants.DEFAULT_PLAN_FILE + "/opt/" + name + "/tests.xml"
-        if not os.path.exists(test_file):
-            print("Can't find the test file : [%s]" % test_file)
-            return 0, 0, Constants.WRT_LAUNCHER_CMD, None
-
-        return self.__read_test_xml(test_file)
-
-    def __read_test_xml(self, test_file):
-        autocnt = manualcnt = 0
-        test_xml_temp = etree.parse(test_file)
-
-        for test_xml_temp_suite in test_xml_temp.getiterator('suite'):
-            suite_launcher = test_xml_temp_suite.get('launcher')
-            suite_category = test_xml_temp_suite.get('category')
-            autocnt = manualcnt = 0
-            for tset in test_xml_temp_suite.getiterator('set'):
-                set_autocnt, set_manualcnt = self.__get_set_casecnt(tset)
-                autocnt += set_autocnt
-                manualcnt += set_manualcnt
-
-        return autocnt, manualcnt, suite_launcher, suite_category
-
-    def __get_set_casecnt(self, tset):
-        set_autocnt = set_manualcnt = 0
-        for tcase in tset.getiterator('testcase'):
-            exetype = tcase.get('execution_type')
-            if exetype == "auto":
-                set_autocnt += 1
-            elif exetype == "manual":
-                set_manualcnt += 1
-
-        return set_autocnt, set_manualcnt
-
-    def to_xml(self, xml_name):
-        print "generating plan to %s" % xml_name
-        root = ElementTree.Element('ns3:testplan')
-        root.set('name', self.plan_name)
-        root.set('profile', self.profile)
-        root.set('xmlns', '')
-        root.set('xmlns:ns3', 'http://www.example.org/plan/')
-        element = ElementTree.Element('execute_type')
-        element.text = self.execute_type
-        root.append(element)
-        for suite_name in self.suites:
-            suite = self.suites[suite_name]
-            root.append(suite.to_xml())
-
-        Constants.indent(root)
-        tree = ElementTree.ElementTree()
-        tree._setroot(root)
-        tree.write(xml_name, encoding="utf-8")
diff --git a/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/shell/tctshell/result_manager.py b/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/shell/tctshell/result_manager.py
deleted file mode 100755 (executable)
index 40fee25..0000000
+++ /dev/null
@@ -1,204 +0,0 @@
-#!/usr/bin/python
-
-import os
-import threading
-from xml.etree import ElementTree
-
-from .logmanager import LOGGER
-from .result_summary import ResultSummary
-from .constants import Constants
-from .shellplanner import MultiRunnPlan
-
-
-class ResultManager:
-
-    #MultiRunnPlan instance
-    mrp = None
-
-    def __init__(self):
-        self.mrp = MultiRunnPlan.getInstance()
-        self.mrp.attach(self)
-        self.lock = threading.Lock()
-        self.summary_lock = threading.Lock()
-        self.plans = []
-
-    def importResult(self):
-        plan = None
-        merge_groups = {}
-        #plans = self.mrp.getPlanDict().values()[:]
-        plans = list(self.mrp.getPlanDict().values())[:]
-
-        for plan in plans:
-            tizenVer_buildId = "%s_%s" \
-                    % (plan.getTizenVersion(), plan.getBuildId())
-
-            #if merge_groups.has_key(tizenVer_buildId):
-            if tizenVer_buildId in merge_groups:
-                continue
-
-            merge_group = []
-            for plan in plans:
-                if "%s_%s" % (plan.getTizenVersion(), plan.getBuildId()) \
-                        == tizenVer_buildId:
-                    merge_group.append(plan)
-            merge_groups[tizenVer_buildId] = merge_group
-
-            #folder path grouping
-            #return plans that have finished.
-        return merge_groups
-
-    def waitForFinishedPlans(self):
-        #self.plans = self.mrp.getPlanDict().values()[:]
-        p_list = list(self.mrp.getPlanDict().values())
-        self.plans = p_list[:]
-        while bool(self.mrp.getPlanDict()):
-            LOGGER.debug("waiting for lock")
-            self.lock.acquire()
-            LOGGER.debug("Lock acquired")
-            self.checkFinished()
-        LOGGER.debug("All plans finished")
-        self.print_result_summaries()
-
-    def update(self):
-        LOGGER.debug('waiting for summary lock')
-        self.summary_lock.acquire()
-        LOGGER.debug('summary lock acquired')
-        self.lock.release()
-        LOGGER.debug("lock released")
-
-    def checkFinished(self):
-        LOGGER.debug("Waiting for a plan to finish --> waiting for a lock")
-        self.lock.acquire()
-        LOGGER.debug("Notified: Plan finished. \
-                Check for auto summary merge. --> lock acquired")
-        finished_groups = []
-        merge_groups = self.importResult()
-        for tizenVer_buildId in merge_groups:
-            finished_groups.append(tizenVer_buildId)
-            for plan in merge_groups[tizenVer_buildId]:
-                if not plan.isFinished():
-                    finished_groups.remove(tizenVer_buildId)
-                    break
-        for group in finished_groups:
-            self.genSummary(merge_groups[group])
-            self.mrp.removePlans(merge_groups[group])
-        self.lock.release()
-        LOGGER.debug("lock released")
-        self.summary_lock.release()
-        LOGGER.debug("summary lock released")
-
-    def genSummary(self, plans):
-        summary_file = None
-        #browser = 'firefox'
-        if Constants.RERUNING_MODE and Constants.SCENARIO_MODE:
-            summary = ResultSummary(plans=plans)
-            summary_file = summary.rerun_genSummaryForScen()
-            summary.updateScenStatus()
-        elif len(plans) > 1:
-            LOGGER.debug("generate Summary for Scenario")
-            summary = ResultSummary(plans=plans)
-            summary.makeMergedFolder()
-            summary_file = summary.genSummaryForScen()
-            summary.genScenStatus()
-        elif len(plans) == 1:
-            summary_file = os.path.join(\
-                    plans[0].getResultFolderPath(), 'summary.xml')
-        if summary_file is not None:
-            if not os.path.isfile(summary_file):
-                LOGGER.warning("Summary file [%s] does not exist" % summary_file)
-            '''
-            else:
-                try:
-                    url_path = urlparse.urljoin('file:', \
-                            urllib.pathname2url(summary_file))
-                    webbrowser.get(browser).open(url_path, new=2)
-                except Exception, e:
-                    LOGGER.error("[ Error: opening summary file with \
-                            %s failed, error: %s ]\n" %(browser, e))
-                    pass
-            '''
-
-    def print_result_summaries(self):
-        resultFolderPaths = []
-        tizenV = None
-        if self.plans:
-            scen_resultFolderPath = None
-            for plan in self.plans:
-                if tizenV is None:
-                    tizenV = plan.getTizenVersion()
-
-                if plan.scen_resultFolderPath is None or \
-                        not os.path.isdir(plan.scen_resultFolderPath):
-                    resultFolderPath = plan.getResultFolderPath()
-                    summary_xml = os.path.join(resultFolderPath, 'summary.xml')
-                    self.print_result_summary(summary_xml)
-                    resultFolderPaths.append(\
-                            (plan.getPlanName(), resultFolderPath))
-                elif plan.scen_resultFolderPath != scen_resultFolderPath:
-                    resultFolderPath = plan.getScenResultFolderPath()
-                    scen_resultFolderPath = resultFolderPath
-                    summary_xml = os.path.join(resultFolderPath, 'summary.xml')
-                    self.print_result_summary(summary_xml)
-                    resultFolderPaths.append(\
-                            (plan.getScenName(), resultFolderPath))
-
-        distribute = " --distribute" if Constants.isDistMode() else ""
-        rerun_command = "tct-shell --tizen-version {0} --rerun-fail %s {1}".\
-            format(tizenV, distribute)
-        for result in resultFolderPaths:
-            LOGGER.info("[%s] Rerun command: %s" \
-                    % (result[0], rerun_command % result[1]))
-
-    def print_result_summary(self, result_file):
-        if not os.path.isfile(result_file):
-            LOGGER.warning("Result_file [%s] does not exist" % result_file)
-            return
-        tree = ElementTree.parse(result_file)
-        root = tree.getroot()
-        suites = root.findall('suite')
-        total_cases = 0
-        pass_cases = 0
-        fail_cases = 0
-        block_cases = 0
-        na_cases = 0
-        for total_i in root.findall('suite/total_case'):
-            total_cases += int(total_i.text)
-        for pass_i in root.findall('suite/pass_case'):
-            pass_cases += int(pass_i.text)
-        for fail_i in root.findall('suite/fail_case'):
-            fail_cases += int(fail_i.text)
-        for block_i in root.findall('suite/block_case'):
-            block_cases += int(block_i.text)
-        for na_i in root.findall('suite/na_case'):
-            na_cases += int(na_i.text)
-
-        LOGGER.info("[Result: execute %d suites]" % len(suites))
-        LOGGER.info("[  total case number: %d ]" % total_cases)
-        if total_cases > 0:
-            LOGGER.info("[    Pass Rate: %.2f" \
-                    % (float(pass_cases) * 100 / total_cases) + "% ]")
-        else:
-            LOGGER.info("[    Pass Rate: 0% ]")
-        LOGGER.info("[    PASS case number: %d ]" % pass_cases)
-        LOGGER.info("[    FAIL case number: %d ]" % fail_cases)
-        LOGGER.info("[    BLOCK case number: %d ]" % block_cases)
-        LOGGER.info("[    N/A case number: %d ]" % na_cases)
-        for suite in suites:
-            LOGGER.info(" Suite: %s" % suite.get("name"))
-            suite_total_cases = suite.find('total_case').text
-            suite_pass_cases = suite.find('pass_case').text
-            suite_fail_cases = suite.find('fail_case').text
-            suite_block_cases = suite.find('block_case').text
-            suite_na_cases = suite.find('na_case').text
-            suite_pass_rate = suite.find('pass_rate').text
-            LOGGER.info("      |---total case number: %s " % suite_total_cases)
-            LOGGER.info("      |      |---Pass rate: %s " \
-                    % suite_pass_rate + "%")
-            LOGGER.info("      |      |---PASS case number: %s " \
-                    % suite_pass_cases)
-            LOGGER.info("      |      |---FAIL case number: %s " \
-                    % suite_fail_cases)
-            LOGGER.info("      |      |---BLOCK case number: %s " \
-                    % suite_block_cases)
-            LOGGER.info("      |      |---N/A case number: %s " \
-                    % suite_na_cases)
diff --git a/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/shell/tctshell/result_summary.py b/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/shell/tctshell/result_summary.py
deleted file mode 100755 (executable)
index 3b7d0e5..0000000
+++ /dev/null
@@ -1,1180 +0,0 @@
-#!/usr/bin/python
-
-from xml.etree import ElementTree
-import os
-import glob
-import shutil
-import errno
-import copy
-from .constants import Constants
-from .logmanager import LOGGER
-
-DEBUG = True
-
-
-def ele_set(element, attrib, content):
-    if content:
-        element.set(attrib, content)
-
-
-def ele_find(ele, child):
-    if ele.find(child) is not None:
-        return ele.find(child)
-    else:
-        return ElementTree.Element(child)
-
-
-def copyfiledir(src, dst):
-    try:
-        shutil.copytree(src, dst)
-        return dst
-    except OSError as exc:
-        if exc.errno == errno.ENOTDIR:
-            shutil.copy(src, dst)
-            return dst
-        else:
-            raise
-
-
-class ResultSummary:
-    env = None
-    summary = None
-    capability = None
-    suites = []
-    planid = None
-    unpass = None
-
-    def __init__(self, plans=None, rerun_suiteFiles=None):
-        self.am_suiteFiles = []
-        self.result_suiteFiles = []
-        self.suiteFiles = {}
-        self.rerun_suiteFiles = rerun_suiteFiles
-        self.am_suites = []
-        self.suites = []
-        self.profile = None
-        self.deviceid = None
-        self.planid = None
-        self.plans = plans
-        self.planDict = {}
-        if plans:
-            headplan = plans[0]
-            self.head_profile = headplan.getProfile()
-            self.head_deviceid = headplan.getDeviceId()
-            self.scenid = headplan.getScenName()
-            self.scen_resultFolder = headplan.getScenResultFolderPath()
-            if len(plans) > 1:
-                for plan in plans[1:]:
-                    plan.setScenResultFolderPath(self.scen_resultFolder)
-
-        self.env = self.ResEnvironment()
-        self.summary = self.ResSummary()
-        self.capability = self.ResCapabilities()
-
-    def genSummary(self, _resultFolder=None):
-        if Constants.RERUNING_MODE:
-            self.suiteFiles = self._rerun_findResultSuites_plan()
-        else:
-            self.suiteFiles = self._findResultSuites(_resultFolder)
-
-        for planFolder, plan in self.suiteFiles.items():
-            suiteResults_plan = []
-            for suite_am in plan.keys():
-                suiteResults_plan.append(suite_am + ".xml")
-
-            currPlan = self.planDict[planFolder]
-            self.profile = currPlan.getProfile()
-            self.deviceid = currPlan.getDeviceId()
-            self.suites = []
-            self.env = self.ResEnvironment()
-            self.summary = self.ResSummary()
-            self.capability = self.ResCapabilities()
-            self.planid = currPlan.getPlanName()
-            self.parse(suiteResults_plan)
-            self.summary_to_xml(os.path.join(planFolder, "summary.xml"))
-            if _resultFolder is None:
-                self.genPlanStatus(currPlan)
-        return
-
-    def genPlanStatus(self, plan):
-        root = ElementTree.Element('ns3:plan_status')
-        ele_set(root, 'xmlns:ns3', 'http://www.example.org/plan_status/')
-        ele_set(root, 'name', plan.getPlanName())
-        ele_set(root, 'profile', plan.getProfile())
-        ele_set(root, 'executeType', plan.getExecuteType().getCurrType())
-        ele_set(root, 'tizenVersion', plan.getTizenVersion())
-        device = ElementTree.Element('device')
-        ele_set(device, 'device_id', plan.getDeviceId())
-        ele_set(device, 'build_id', plan.getBuildId())
-        auto_tasks = ElementTree.Element('auto_tasks')
-        manual_tasks = ElementTree.Element('manual_tasks')
-        if plan.getExecuteType().getCurrType() == "Auto":
-            for suite in plan.getSuites():
-                executed = ElementTree.Element('executed')
-                executed.text = suite.getSuiteName()
-                auto_tasks.append(executed)
-        elif plan.getExecuteType().getCurrType() == "Manual":
-            for suite in plan.getSuites():
-                executed = ElementTree.Element('executed')
-                executed.text = suite.getSuiteName()
-                manual_tasks.append(executed)
-        elif plan.getExecuteType().getCurrType() == "All":
-            for suite in plan.getSuites():
-                executed = ElementTree.Element('executed')
-                executed.text = suite.getSuiteName()
-                auto_tasks.append(executed)
-                manual_tasks.append(executed)
-
-        root.append(device)
-        root.append(auto_tasks)
-        root.append(manual_tasks)
-
-        Constants.indent(root)
-        tree = ElementTree.ElementTree()
-        tree._setroot(root)
-        tree.write(os.path.join(plan.getResultFolderPath(), \
-                "plan_status.xml"), encoding="UTF-8")
-
-    def genScenStatus(self):
-        root = ElementTree.Element('scen_status')
-        ele_set(root, 'scenario_name', self.scenid)
-        for plan in self.plans:
-            plan_root = ElementTree.Element('plan')
-            ele_set(plan_root, 'name', plan.getPlanName())
-            ele_set(plan_root, 'result_folder', plan.getResultFolderPath())
-            ele_set(plan_root, 'has_unpass_tc', str(plan.getUnpass()))
-            device = ElementTree.Element('device')
-            ele_set(device, 'device_id', plan.getDeviceId())
-            ele_set(device, 'build_id', plan.getBuildId())
-            plan_root.append(device)
-            root.append(plan_root)
-        Constants.indent(root)
-        tree = ElementTree.ElementTree()
-        tree._setroot(root)
-        tree.write(os.path.join(self.scen_resultFolder, \
-                "scenario_status.xml"), encoding="UTF-8")
-        LOGGER.info("SENARIO_STATUS TO XML: writing into %s" \
-                % os.path.join(self.scen_resultFolder, "scenario_status.xml"))
-
-    def updateScenStatus(self):
-        scenstat = os.path.join(self.scen_resultFolder, 'scenario_status.xml')
-        if not os.path.isfile(scenstat):
-            LOGGER.error("scenario_status.xml should be present in \
-                    [%s]. Not Found" % self.scen_resultFolder)
-            raise
-        xml_tree = ElementTree.parse(scenstat)
-        root = xml_tree.getroot()
-        for plan in root.findall('plan'):
-            for rerun_plan in self.plans:
-                if plan.get('name') == rerun_plan.getPlanName():
-                    ele_set(plan, 'has_unpass_tc', str(rerun_plan.getUnpass()))
-
-        tree = ElementTree.ElementTree()
-        tree._setroot(root)
-        tree.write(scenstat, encoding="UTF-8")
-        LOGGER.info("UPDATING SENARIO_STATUS TO XML: writing into %s" \
-                % scenstat)
-
-    def prepareRerun(self, result):
-        suiteFiles = {}
-        suitePkgs = {}
-        scen_resultFolderPath = None
-        if os.path.isdir(result):
-            if os.path.isfile(os.path.join(result, "plan_status.xml")):
-                suiteFiles = self.prepareRerun_Plan(result)
-            elif os.path.isfile(os.path.join(result, "scenario_status.xml")):
-                suiteFiles = self.prepareRerun_Scen(result)
-                Constants.setScenMode(True)
-                Constants.setDistMode(False)
-                scen_resultFolderPath = result
-        elif os.path.isfile(result):
-            suiteFiles = self.prepareRerun_Suite(result)
-        else:
-            LOGGER.warning("%s result does not exist" % result)
-            raise
-
-        for planFolder, plan in suiteFiles.items():
-            plan_status = os.path.join(planFolder, "plan_status.xml")
-            LOGGER.debug("plan folder path = %s" % planFolder)
-            if not os.path.isfile(plan_status):
-                LOGGER.warning("%s does not exist" % plan_status)
-                raise
-            xml_tree = ElementTree.parse(plan_status)
-            xml_root = xml_tree.getroot()
-            plan_name = xml_root.get('name')
-            executeType = xml_root.get('executeType')
-            profile = xml_root.get('profile')
-            if not profile:
-                LOGGER.warning("Couldn`t retrieve 'profile' attribute of plan_status.xml")
-                raise
-            tizenVersion = xml_root.get('tizenVersion')
-            device = ele_find(xml_root, 'device')
-            device_id = device.get('device_id')
-            build_id = device.get('build_id')
-            suite_pkgs = []
-            for suite in plan:
-                suiteName = os.path.basename(suite)
-                suite_pkg_name = None
-                profiles = [profile, "common"]
-                for prof in profiles:
-                    suite_pkg_repo = os.path.join(Constants.SUITES_REPOSITORY \
-                            % tizenVersion, prof)
-                    if not os.path.isdir(suite_pkg_repo):
-                        continue
-                    os.chdir(suite_pkg_repo)
-                    for suite_pkg in glob.glob("%s*.zip" % suiteName):
-                        suite_pkg_name = os.path.abspath(suite_pkg)
-                    if suite_pkg_name is not None:
-                        suite_pkgs.append(suite_pkg_name)
-                        break
-                if suite_pkg_name is None:
-                    LOGGER.warning("[%s] suite does not exist." % (suiteName))
-                    yesorno = None
-                    while not (yesorno in ['y', 'n']):
-                        yesorno = input(\
-                                "Continue without this suite? [y/n]")
-                    if yesorno == 'n':
-                        LOGGER.warning("please check the default suite \
-                                repository: %s[profile]/" \
-                                % Constants.SUITES_REPOSITORY \
-                                % "[tizen_version]")
-                        raise
-            suitePkgs[planFolder] = [[plan_name, executeType, profile, \
-                    tizenVersion, device_id, build_id, \
-                    scen_resultFolderPath], suite_pkgs]
-        return suitePkgs
-
-    def prepareRerun_Suite(self, result):
-        suiteFiles = {}
-        planFolder = os.path.dirname(result)
-        suiteFiles[planFolder] = {}
-        suiteFiles[planFolder][result[:-4]] = result
-        return self.genRerunFile(suiteFiles)
-
-    def prepareRerun_Plan(self, result):
-        suiteFiles = {}
-        suiteFiles[result] = {}
-        os.chdir(result)
-        for suite in glob.glob("*.xml"):
-            if 'auto' in suite or 'manual' in suite or 'rerun' in suite \
-                    or 'status.xml' in suite or suite == 'summary.xml':
-                        continue
-            suiteFile = os.path.abspath(suite)
-            suiteFiles[result][suiteFile[:-4]] = suiteFile
-        return self.genRerunFile(suiteFiles)
-
-    def prepareRerun_Scen(self, result):
-        suiteFiles = {}
-        planResultFolders = []
-        scen_status = os.path.join(result, "scenario_status.xml")
-        xml_tree = ElementTree.parse(os.path.join(scen_status))
-        xml_root = xml_tree.getroot()
-        for xml_plan in xml_root.findall('plan'):
-            if xml_plan.get('has_unpass_tc') == "True":
-                planResultFolders.append(xml_plan.get('result_folder'))
-
-        for planResult in planResultFolders:
-            suiteFiles.update(self.prepareRerun_Plan(planResult))
-
-        return suiteFiles
-
-    def genRerunFile(self, rerun_suiteFiles):
-        if not bool(rerun_suiteFiles):
-            LOGGER.debug("No suite results exist...")
-            raise
-        filtered_suiteFiles = copy.deepcopy(rerun_suiteFiles)
-        self.env = self.ResEnvironment()
-        self.summary = self.ResSummary()
-        self.capability = self.ResCapabilities()
-        self.env.isNull = False
-        self.summary.isNull = False
-        self.capability.isNull = False
-        for planFolder, plan in rerun_suiteFiles.items():
-            for suite_am in plan.keys():
-                self.suites = []
-                result_file = suite_am + ".xml"
-                if os.path.isfile(result_file):
-                    self.parse([result_file])
-                    if not self.rerun_to_xml(suite_am + ".rerun.xml"):
-                        del filtered_suiteFiles[planFolder][suite_am]
-        return filtered_suiteFiles
-
-    def checkResults(self):
-        self.suiteFiles = self._findResultSuites()
-        NotRunSuites = []
-        for planFolder, plan in self.suiteFiles.items():
-            currPlan = self.planDict[planFolder]
-            self.profile = currPlan.getProfile()
-            self.deviceid = currPlan.getDeviceId()
-            for suite_path, suite_am in plan.items():
-                if len(suite_am) < 1:
-                    NotRunSuites.append(os.path.basename(suite_path))
-                    LOGGER.error("No test results returned from lite: %s", \
-                            os.path.basename(suite_path))
-
-        return NotRunSuites
-
-    def genResults(self):
-        self.suiteFiles = self._findResultSuites()
-        NotRunSuites = []
-        for planFolder, plan in self.suiteFiles.items():
-            currPlan = self.planDict[planFolder]
-            self.profile = currPlan.getProfile()
-            self.deviceid = currPlan.getDeviceId()
-            for suite_path, suite_am in plan.items():
-                if len(suite_am) < 1:
-                    NotRunSuites.append(os.path.basename(suite_path))
-                    LOGGER.critical("No test results returned from lite: %s", \
-                            os.path.basename(suite_path))
-                    continue
-                if '__auto_skip' in suite_am:
-                    suite_am.remove('__auto_skip')
-                if '__manual_skip' in suite_am:
-                    suite_am.remove('__manual_skip')
-                if len(suite_am) < 1:
-                    LOGGER.warning("Test results not returned from lite \
-                            (No manual or auto testcases): %s", \
-                            os.path.basename(suite_path))
-                    continue
-
-                self.env = self.ResEnvironment()
-                self.summary = self.ResSummary()
-                self.capability = self.ResCapabilities()
-                self.suites = []
-                self.parse(suite_am)
-                if Constants.RERUNING_MODE:
-                    dst = suite_path + "_rerun_result_tmp.xml"
-                    tmp_dst = Constants.getTempPath(dst)
-                    self.result_to_xml(tmp_dst)
-                    self.mergeRerunResults(suite_path + ".xml", tmp_dst)
-                    os.remove(tmp_dst)
-                else:
-                    self.result_to_xml(suite_path + ".xml")
-
-                currPlan.setUnpass(self.getUnpass())
-        return
-
-    def getUnpass(self):
-        return self.unpass
-
-    def parse(self, suiteFiles):
-        unpass = False
-        suite_count = 0
-        for suiteFile in suiteFiles:
-            LOGGER.debug("ABOUT TO PARSE %s" % suiteFile)
-            if not Constants.checkFileExists(suiteFile):
-                LOGGER.warning("[%s] not found" % suiteFile)
-                continue
-            if not suiteFile.split("/")[-1].find("tct-") > -1:
-                if not suiteFile.split("/")[-1].find(".Tests") > -1:
-                    continue
-            xml_tree = ElementTree.parse(suiteFile)
-            xml_root = xml_tree.getroot()
-            if self.env.isNull:
-                self.env.parse(ele_find(xml_root, 'environment'))
-                if self.env.tct_profile is None:
-                    self.env.tct_profile = self.profile
-            if self.summary.isNull:
-                self.summary.parse(ele_find(xml_root, 'summary'))
-            else:
-                self.summary.merge_time(ele_find(xml_root, 'summary'))
-
-            suite_summary = ele_find(xml_root, 'summary')
-            suite_start_at = ele_find(suite_summary, 'start_at').text
-            suite_end_at = ele_find(suite_summary,'end_at').text
-
-            suite = self.ResSuite(suite_start_at, suite_end_at)
-            ele_suite = ele_find(xml_root, 'suite')
-            suite.parse(ele_suite)
-            if suite.name is None:
-                suite.name = Constants.getSuiteNameFromFile(\
-                        os.path.basename(suiteFile))
-            self.suites.append(suite)
-            if suite.getUnpass():
-                LOGGER.debug("[%s] has at least one unpassed testcase" \
-                        % str(suite.name))
-                unpass = True
-            suite_count += 1
-        if suite_count < 1:
-            LOGGER.warning("No suite results to summarize")
-            return
-
-        if self.capability.isNull:
-            dev_cap = Constants.LOCAL_CAPABILITY_PATH % self.env.device_id
-            if not os.path.isfile(dev_cap):
-                LOGGER.error("Device capability does not exist for device: \
-                        [%s]" % self.env.device_id)
-            else:
-                xml_captree = ElementTree.parse(\
-                        Constants.LOCAL_CAPABILITY_PATH % self.env.device_id)
-                xml_caproot = xml_captree.getroot()
-                self.capability.parse(xml_caproot)
-        self.unpass = unpass
-        return
-
-    def mergeresult_parse(self, src1, src2, priority="FAIL"):
-        xml_tree1 = ElementTree.parse(src1)
-        xml_tree2 = ElementTree.parse(src2)
-        xml_root1 = xml_tree1.getroot()
-        xml_root2 = xml_tree2.getroot()
-        self.suites = []
-        if self.env.isNull:
-            self.env.parse(ele_find(xml_root1, 'environment'))
-            if self.env.tct_profile is None:
-                self.env.tct_profile = self.profile
-
-        if self.summary.isNull:
-            self.summary.parse(ele_find(xml_root1, 'summary'))
-
-        for suite1 in xml_root1.findall('suite'):
-            suite2 = None
-            for lookformatch in xml_root2.findall('suite'):
-                if lookformatch.get('name') == suite1.get('name'):
-                    suite2 = lookformatch
-                    break
-
-            suite_summary = ele_find(xml_root1, 'summary')
-            suite_start_at = ele_find(suite_summary, 'start_at').text
-            suite_end_at = ele_find(suite_summary, 'end_at').text
-
-            suite_obj = self.ResSuite(suite_start_at, suite_end_at)
-
-            if suite2 is None:
-                self.suites.append(suite_obj.parse(suite1))
-            else:
-                self.suites.append(suite_obj.mergeresult_parse(\
-                        suite1, suite2, priority))
-
-        if self.capability.isNull:
-            dev_cap = Constants.LOCAL_CAPABILITY_PATH % self.env.device_id
-            if not os.path.isfile(dev_cap):
-                LOGGER.warning("Device capability does not exist for device: \
-                        [%s]" % self.env.device_id)
-            else:
-                xml_captree = ElementTree.parse(\
-                        Constants.LOCAL_CAPABILITY_PATH % self.env.device_id)
-                xml_caproot = xml_captree.getroot()
-                self.capability.parse(xml_caproot)
-        return self
-
-    def result_to_xml(self, dest):
-        self.copy_style(dest)
-        decl_root = ElementTree.Element(None)
-        decl1 = ElementTree.PI('xml-stylesheet', \
-                'type="text/xsl" href="./style/testresult.xsl"')
-        decl1.tail = "\n"
-        '''
-        decl2 = ElementTree.PI('xml-stylesheet', \
-                'type="text/xsl" href="testresult.xsl"')
-        decl2.tail = "\n"
-        '''
-        decl_root.append(decl1)
-        #decl_root.append(decl2)
-        root = ElementTree.Element('test_definition')
-        root.append(self.env.to_xml())
-        root.append(self.summary.to_xml())
-        for suite in self.suites:
-            root.append(suite.result_to_xml())
-        Constants.indent(root)
-        decl_root.append(root)
-        tree = ElementTree.ElementTree()
-        tree._setroot(decl_root)
-        LOGGER.debug("ABOUT TO WRITE RESULTS INTO %s\n" % dest)
-        tree.write(dest, encoding="UTF-8")
-        LOGGER.info("RESULTS TO XML: writing into %s\n" % dest)
-
-    def rerun_to_xml(self, dest):
-        root = ElementTree.Element('test_definition')
-        for suite in self.suites:
-            root.append(suite.result_to_xml(fail_only=True))
-        hasUnpass = False
-        for suite in root.findall('suite'):
-            if list(suite) != []:
-                hasUnpass = True
-        if not hasUnpass:
-            return False
-        Constants.indent(root)
-        tree = ElementTree.ElementTree()
-        tree._setroot(root)
-        LOGGER.debug("ABOUT TO WRITE RERUN INTO %s\n" % dest)
-        tree.write(dest, encoding="UTF-8")
-        LOGGER.info("RERUN TO XML: writing into %s\n" % dest)
-        return True
-
-    def summary_to_xml(self, dest):
-        self.copy_style(dest)
-        decl_root = ElementTree.Element(None)
-        decl1 = ElementTree.PI('xml-stylesheet', \
-                'type="text/xsl" href="./style/summary.xsl"')
-        decl1.tail = "\n"
-        decl_root.append(decl1)
-        root = ElementTree.Element('result_summary')
-        ele_set(root, 'plan_name', self.planid)
-        root.append(self.env.to_xml())
-        root.append(self.summary.to_xml())
-        root.append(self.capability.to_xml())
-        for suite in self.suites:
-            root.append(suite.summary_to_xml())
-        Constants.indent(root)
-        decl_root.append(root)
-        tree = ElementTree.ElementTree()
-        tree._setroot(decl_root)
-        LOGGER.debug("ABOUT TO WRITE SUMMARY INTO %s\n" % dest)
-        tree.write(dest, encoding="UTF-8")
-        LOGGER.info("SUMMARY TO XML: writing into %s\n" % dest)
-
-    def _findResultSuites(self, _resultFolder=None):
-        if Constants.RERUNING_MODE:
-            auto_suffix = Constants.RERUN_AUTO_RESULT_SUFFIX
-            manual_suffix = Constants.RERUN_MANUAL_RESULT_SUFFIX
-        else:
-            auto_suffix = Constants.AUTO_RESULT_SUFFIX
-            manual_suffix = Constants.MANUAL_RESULT_SUFFIX
-        suiteFiles = {}
-        self.planDict = {}
-        for plan in self.plans:
-            plan_resultFolder = None
-            if _resultFolder is None:
-                plan_resultFolder = plan.getResultFolderPath()
-            else:
-                plan_resultFolder = _resultFolder
-
-            suiteFiles[plan_resultFolder] = {}
-            self.planDict[plan_resultFolder] = plan
-            for suite in plan.getSuites():
-                mergedsuite = os.path.join(plan_resultFolder, suite.suiteName)
-                suiteFiles[plan_resultFolder][mergedsuite] = []
-                autosuite = mergedsuite + auto_suffix
-                manualsuite = mergedsuite + manual_suffix
-                if suite.getNoAuto():
-                    suiteFiles[plan_resultFolder][mergedsuite]\
-                            .append('__auto_skip')
-                if suite.getNoManual():
-                    suiteFiles[plan_resultFolder][mergedsuite]\
-                            .append('__manual_skip')
-                if os.path.isfile(autosuite):
-                    suiteFiles[plan_resultFolder][mergedsuite]\
-                            .append(autosuite)
-                if os.path.isfile(manualsuite):
-                    suiteFiles[plan_resultFolder][mergedsuite]\
-                            .append(manualsuite)
-        return suiteFiles
-
-    def _rerun_findResultSuites_plan(self):
-        suiteFiles = {}
-        plan_resultFolder = self.plans[0].getResultFolderPath()
-        suiteFiles[plan_resultFolder] = {}
-        os.chdir(plan_resultFolder)
-        for suiteFile in glob.glob("*.xml"):
-            if 'auto.xml' in suiteFile or 'manual.xml' in suiteFile \
-                    or 'rerun.xml' in suiteFile or 'status.xml' \
-                    in suiteFile or suiteFile == 'summary.xml':
-                continue
-            suiteFiles[plan_resultFolder][suiteFile[:-4]] = []
-        return suiteFiles
-
-    def _rerun_findResultSuites_scen(self):
-        suiteFiles = {}
-        scen_resultFolder = self.scen_resultFolder
-        suiteFiles[scen_resultFolder] = {}
-        os.chdir(scen_resultFolder)
-        for suiteFile in glob.glob("*.xml"):
-            if 'auto.xml' in suiteFile or 'manual.xml' in suiteFile \
-                    or 'rerun.xml' in suiteFile or 'status.xml' \
-                    in suiteFile or suiteFile == 'summary.xml':
-                continue
-            suiteFiles[scen_resultFolder][suiteFile[:-4]] = []
-        return suiteFiles
-
-    def _not_in_use_rerun_findResultSuites_scen(self, scen_status):
-        suiteFiles = {}
-        xml_scenstat = ElementTree.parse(scen_status)
-        root = xml_scenstat.getroot()
-        for plan in root.findall('plan'):
-            plan_resultFolder = plan.get('result_folder')
-            suiteFiles[plan_resultFolder] = []
-            os.chdir(plan_resultFolder)
-            for suiteFile in glob.glob("*.xml"):
-                if 'auto.xml' in suiteFile or 'manual.xml' in suiteFile \
-                        or 'rerun.xml' in suiteFile or 'status.xml' \
-                        in suiteFile or suiteFile == 'summary.xml':
-                    continue
-                suiteFiles[plan_resultFolder].append(suiteFile)
-        return suiteFiles
-
-    #return folderPath
-    def makeMergedFolder(self):
-        #create mergeFolder
-        if Constants.RERUNING_MODE and Constants.SCENARIO_MODE:
-            if not os.path.isdir(self.scen_resultFolder):
-                LOGGER.warning("RERUN: cannot find original result folder : \
-                        [%s]" % self.scen_resultFolder)
-        else:
-            os.mkdir(self.scen_resultFolder, mode=0o777)
-        return
-
-    def suiteCopyFiles(self):
-        self.suites = []
-        self.suiteFiles = self._findResultSuites()
-        suiteResults_scen = []
-        for planFolder, plan in self.suiteFiles.items():
-            for suite_am in plan.keys():
-                resultFile = suite_am + ".xml"
-                if not os.path.isfile(resultFile):
-                    continue
-                dest = os.path.join(self.scen_resultFolder, \
-                        os.path.basename(resultFile))
-                if os.path.isfile(dest):
-                    self.mergeSuiteResults(dest, resultFile)
-                    continue
-                copyfiledir(resultFile, dest)
-                suiteResults_scen.append(dest)
-        return suiteResults_scen
-
-    def _rerunReplaceResults(self, suiteFiles):
-        updated_check = []
-        for planFolder, plan in suiteFiles.items():
-            for suite_am in plan.keys():
-                resultFile = suite_am + ".xml"
-                if not os.path.isfile(resultFile):
-                    continue
-                dest = os.path.join(self.scen_resultFolder, \
-                        os.path.basename(resultFile))
-                if os.path.isfile(dest):
-                    if suite_am in updated_check:
-                        self.mergeSuiteResults(dest, resultFile)
-                    else:
-                        self.mergeRerunResults(dest, resultFile)
-                        updated_check.append(suite_am)
-                else:
-                    LOGGER.warning("The original result xml does not exist \
-                            in the scenario file. File: [%s]" % dest)
-
-    def genSummaryForScen(self):
-        self.deviceid = self.head_deviceid
-        self.profile = self.head_profile
-        self.planid = self.scenid
-        suiteFiles = self.suiteCopyFiles()
-        self.suites = []
-        self.parse(suiteFiles)
-        dest = os.path.join(self.scen_resultFolder, 'summary.xml')
-        self.summary_to_xml(dest)
-        return dest
-
-    def rerun_genSummaryForScen(self):
-        self._rerunReplaceResults(self._findResultSuites())
-        suiteFiles = self._rerun_findResultSuites_scen()
-        for scenFolder, scen in suiteFiles.items():
-            suiteResults_scen = []
-            for suite_am in scen.keys():
-                suiteResults_scen.append(suite_am + ".xml")
-            self.suites = []
-            self.parse(suiteResults_scen)
-            dest = os.path.join(self.scen_resultFolder, 'summary.xml')
-            self.summary_to_xml(dest)
-        return dest
-
-    def mergeRerunResults(self, src1, src2):
-        self.mergeSuiteResults(src1, src2, priority="PASS")
-
-    def mergeSuiteResults(self, src1, src2, priority="FAIL"):
-        self.suites = []
-        self.env = self.ResEnvironment()
-        self.summary = self.ResSummary()
-        self.capability = self.ResCapabilities()
-        self.mergeresult_parse(src1, src2, priority)
-        self.result_to_xml(src1)
-        return
-
-    def copy_style(self, dest):
-        styleFolder = os.path.join(os.path.dirname(dest), 'style')
-        if not os.path.isdir(styleFolder):
-            copyfiledir(Constants.STYLE_FOLDER, styleFolder)
-
-    def fetch_logs(self, dest):
-        return
-
-    class ResEnvironment:
-        def __init__(self):
-            self.other = None
-            self.build_id = None
-            self.tct_version = None
-            self.tct_profile = None
-            self.device_id = None
-            self.device_model = None
-            self.device_name = None
-            self.host = None
-            self.manufacturer = None
-            self.resolution = None
-            self.screen_size = None
-            self.isNull = True
-
-        def parse(self, env):
-            self.build_id = env.get('build_id')
-            #should be added to Constants ..............
-            self.tct_profile = env.get('tct_profile')
-            self.tct_version = Constants.get_tct_binaryV()
-            self.device_id = env.get('device_id')
-            self.device_model = env.get('device_model')
-            self.device_name = env.get('device_name')
-            self.host = env.get('host')
-            self.manufacturer = env.get('manufacturer')
-            self.resolution = env.get('resolution')
-            self.screen_size = env.get('screen_size')
-            self.other = ele_find(env, 'other')
-            self.isNull = False
-
-        def to_xml(self):
-            env = ElementTree.Element('environment')
-            ele_set(env, 'build_id', self.build_id)
-            ele_set(env, 'tct_version', self.tct_version)
-            ele_set(env, 'tct_profile', self.tct_profile)
-            ele_set(env, 'device_id', self.device_id)
-            if self.device_model is None:
-                ele_set(env, 'device_model', "None")
-            else:
-                ele_set(env, 'device_model', self.device_model)
-            ele_set(env, 'device_name', self.device_name)
-            ele_set(env, 'host', self.host)
-            ele_set(env, 'manufacturer', self.manufacturer)
-            ele_set(env, 'resolution', self.resolution)
-            ele_set(env, 'screen_size', self.screen_size)
-            other = ElementTree.Element('other')
-            env.append(other)
-            #other needs to be added.....
-            return env
-
-    class ResSummary:
-        def __init__(self):
-            self.isNull = True
-            self.test_plan_name = None
-            self.start_at = None
-            self.end_at = None
-
-        def parse(self, summary):
-            self.test_plan_name = summary.get('test_plan_name')
-            self.start_at = ele_find(summary, 'start_at').text
-            self.end_at = ele_find(summary, 'end_at').text
-            self.isNull = False
-
-        def merge_time(self, summary):
-            start_at2 = ele_find(summary, 'start_at').text
-            end_at2 = ele_find(summary, 'end_at').text
-            if self.start_at and start_at2:
-                self.start_at = min(self.start_at, start_at2)
-            if self.end_at and end_at2:
-                self.end_at = max(self.end_at, end_at2)
-
-        def to_xml(self):
-            summary = ElementTree.Element('summary')
-            ele_set(summary, 'test_plan_name', self.test_plan_name)
-            start_at = ElementTree.Element('start_at')
-            if self.start_at:
-                start_at.text = self.start_at
-            summary.append(start_at)
-            end_at = ElementTree.Element('end_at')
-            if self.end_at:
-                end_at.text = self.end_at
-            summary.append(end_at)
-            return summary
-
-    class ResCapabilities:
-
-        def __init__(self):
-            self.isNull = True
-            self.capList = []
-
-        def parse(self, caps):
-            for xml_cap in caps.findall('capability'):
-                cap = self.ResCapability()
-                cap.parse(xml_cap)
-                self.capList.append(cap)
-            self.isNull = False
-
-        def to_xml(self):
-            caps = ElementTree.Element('capabilities')
-            for cap in self.capList:
-                caps.append(cap.to_xml())
-            return caps
-
-        class ResCapability:
-            def __init__(self):
-                self.name = None
-                self.support = None
-                self.typ = None
-
-            def parse(self, cap):
-                self.name = cap.get('name')
-                self.support = cap.get('support')
-                self.typ = cap.get('type')
-
-            def to_xml(self):
-                cap = ElementTree.Element('capability')
-                ele_set(cap, 'name', self.name)
-                ele_set(cap, 'support', self.support)
-                ele_set(cap, 'type', self.typ)
-                return cap
-
-    class ResSuite:
-
-        def __init__(self, start_at="", end_at=""):
-            self.name = None
-            self.category = None
-            self.launcher = None
-            self.total_case = None
-            self.pass_case = None
-            self.pass_rate = None
-            self.fail_case = None
-            self.fail_rate = None
-            self.block_case = None
-            self.block_rate = None
-            self.na_case = None
-            self.na_rate = None
-            self.suite_set = []
-            self.unpass = None
-            self.start_at = start_at
-            self.end_at = end_at
-
-        def getUnpass(self):
-            return self.unpass
-
-        def mergeresult_parse(self, suite1, suite2, priority="FAIL"):
-            self.name = suite1.get('name')
-            self.category = suite1.get('category')
-            self.launcher = suite1.get('launcher')
-            for suite_set1 in suite1.findall('set'):
-                suite_set2 = None
-                for lookformatch in suite2.findall('set'):
-                    if lookformatch.get('name') == suite_set1.get('name'):
-                        suite_set2 = lookformatch
-                        break
-
-                if suite_set2 is None:
-                    self.suite_set.append(self.Set().parse(suite_set1))
-                else:
-                    self.suite_set.append(self.Set().mergeresult_parse(\
-                            suite_set1, suite_set2, priority))
-
-            return self
-
-        def parse(self, suite):
-            unpass = False
-            self.name = suite.get('name')
-            self.category = suite.get('category')
-            self.launcher = suite.get('launcher')
-            for suite_set in suite.findall('set'):
-                setparser = self.Set()
-                self.suite_set.append(setparser.parse(suite_set))
-                if setparser.getUnpass():
-                    unpass = True
-            self.unpass = unpass
-            total_cnt = 0
-            pass_cnt = 0
-            fail_cnt = 0
-            block_cnt = 0
-            na_cnt = 0
-            for suite_set in suite.findall('set'):
-                for tc in suite_set.findall('testcase'):
-                    result = tc.get('result')
-                    total_cnt += 1
-                    if result == "PASS":
-                        pass_cnt += 1
-                    elif result == "FAIL":
-                        fail_cnt += 1
-                    elif result == "BLOCK":
-                        block_cnt += 1
-                    elif result == "N/A":
-                        na_cnt += 1
-            self.total_case = str(total_cnt)
-            if total_cnt == 0:
-                if self.name is not None:
-                    LOGGER.warning("No testcases in the suite: [%s]" \
-                            % self.name)
-                #prevent division by zero
-                total_cnt = 1
-            self.pass_case = str(pass_cnt)
-            self.pass_rate = "%.2f" % (float(pass_cnt) / \
-                    float(total_cnt) * 100)
-            self.fail_case = str(fail_cnt)
-            self.fail_rate = "%.2f" % (float(fail_cnt) / \
-                    float(total_cnt) * 100)
-            self.block_case = str(block_cnt)
-            self.block_rate = "%.2f" % (float(block_cnt) / float(total_cnt) \
-                    * 100)
-            self.na_case = str(na_cnt)
-            self.na_rate = "%.2f" % (float(na_cnt) / float(total_cnt) * 100)
-
-            return self
-
-        def result_to_xml(self, fail_only=False):
-            suite = ElementTree.Element('suite')
-            ele_set(suite, 'category', self.category)
-            ele_set(suite, 'launcher', self.launcher)
-            ele_set(suite, 'name', self.name)
-            for suite_set in self.suite_set:
-                checkset = suite_set.to_xml(fail_only)
-                if checkset.find('testcase') is not None:
-                    suite.append(suite_set.to_xml(fail_only))
-            return suite
-
-        def summary_to_xml(self):
-            suite = ElementTree.Element('suite')
-            ele_set(suite, 'name', self.name)
-
-            start_at_case = ElementTree.Element('start_at')
-            if self.start_at:
-                start_at_case.text = self.start_at
-
-            end_at_case = ElementTree.Element('end_at')
-            if self.end_at:
-                end_at_case.text = self.end_at
-
-            total_case = ElementTree.Element('total_case')
-            if self.total_case:
-                total_case.text = self.total_case
-
-            pass_case = ElementTree.Element('pass_case')
-            if self.pass_case:
-                pass_case.text = self.pass_case
-            pass_rate = ElementTree.Element('pass_rate')
-            if self.pass_rate:
-                pass_rate.text = self.pass_rate
-            fail_case = ElementTree.Element('fail_case')
-            if self.fail_case:
-                fail_case.text = self.fail_case
-            fail_rate = ElementTree.Element('fail_rate')
-            if self.fail_rate:
-                fail_rate.text = self.fail_rate
-            block_case = ElementTree.Element('block_case')
-            if self.block_case:
-                block_case.text = self.block_case
-            block_rate = ElementTree.Element('block_rate')
-            if self.block_rate:
-                block_rate.text = self.block_rate
-            na_case = ElementTree.Element('na_case')
-            if self.na_case:
-                na_case.text = self.na_case
-            na_rate = ElementTree.Element('na_rate')
-            if self.na_rate:
-                na_rate.text = self.na_rate
-
-            suite.append(start_at_case)
-            suite.append(end_at_case)
-            suite.append(total_case)
-            suite.append(pass_case)
-            suite.append(pass_rate)
-            suite.append(fail_case)
-            suite.append(fail_rate)
-            suite.append(block_case)
-            suite.append(block_rate)
-            suite.append(na_case)
-            suite.append(na_rate)
-            return suite
-
-        class Set:
-            def __init__(self):
-                self.name = None
-                self.set_debug_msg = None
-                self.testcase = []
-                self.capabilities = []
-                self.unpass = None
-
-            def getUnpass(self):
-                return self.unpass
-
-            def parse(self, suite_set):
-                unpass = False
-                self.name = suite_set.get('name')
-                self.set_debug_msg = suite_set.get('set_debug_msg')
-                capabilities = ele_find(suite_set, 'capabilities')
-                for cap in capabilities.findall('capability'):
-                    self.capabilities.append(self.Capability().parse(cap))
-                for testcase in suite_set.findall('testcase'):
-                    tcparser = self.Testcase()
-                    self.testcase.append(tcparser.parse(testcase))
-                    if tcparser.getUnpass():
-                        unpass = True
-                self.unpass = unpass
-                return self
-
-            def mergeresult_parse(self, suite_set1, \
-                    suite_set2, priority="FALSE"):
-                self.name = suite_set1.get('name')
-                self.set_debug_msg = suite_set1.get('set_debug_msg')
-                capabilities = suite_set1.find('capabilities')
-                capabilities = ele_find(suite_set1, 'capabilities')
-                for cap in capabilities.findall('capability'):
-                    self.capabilities.append(self.Capability().parse(cap))
-                for testcase1 in suite_set1.findall('testcase'):
-                    testcase2 = None
-                    for lookformatch in suite_set2.findall('testcase'):
-                        if lookformatch.get('id') == testcase1.get('id'):
-                            testcase2 = lookformatch
-                            break
-                    if testcase2 is None:
-                        self.testcase.append(self.Testcase().parse(testcase1))
-                    else:
-                        self.testcase.append(\
-                                self.Testcase().mergeresult_parse(\
-                                testcase1, testcase2, priority))
-                return self
-
-            def to_xml(self, fail_only):
-                suite_set = ElementTree.Element('set')
-                ele_set(suite_set, 'name', self.name)
-                ele_set(suite_set, 'set_debug_msg', self.set_debug_msg)
-                capabilities = ElementTree.Element('capabilities')
-                for cap in self.capabilities:
-                    capabilities.append(cap.to_xml())
-                if len(self.capabilities) > 0:
-                    suite_set.append(capabilities)
-                for testcase in self.testcase:
-                    tc = testcase.to_xml(fail_only)
-                    if tc is not None:
-                        suite_set.append(tc)
-                return suite_set
-
-            class Capability:
-                def __init__(self):
-                    self.name = None
-
-                def parse(self, cap):
-                    self.name = cap.get('name')
-                    return self
-
-                def to_xml(self):
-                    cap = ElementTree.Element('capability')
-                    ele_set(cap, 'name', self.name)
-                    return cap
-
-            class Testcase:
-                def __init__(self):
-                    self.Id = None
-                    self.component = None
-                    self.execution_type = None
-                    self.priority = None
-                    self.purpose = None
-                    self.result = None
-                    self.test_script_entry = None
-                    self.actual_result = None
-                    self.start = None
-                    self.end = None
-                    self.stdout = None
-                    self.stderr = None
-                    self.unpass = None
-                    self.onload_delay = None
-
-                def getUnpass(self):
-                    return self.unpass
-
-                def parse(self, tc):
-                    self.Id = tc.get('id')
-                    self.component = tc.get('component')
-                    self.execution_type = tc.get('execution_type')
-                    self.priority = tc.get('priority')
-                    self.purpose = tc.get('purpose')
-                    self.result = tc.get('result')
-                    self.onload_delay = tc.get('onload_delay')
-                    self.test_script_entry = ele_find(\
-                            ele_find(tc, 'description'),\
-                            'test_script_entry').text
-                    self.actual_result = ele_find(\
-                            ele_find(tc, 'result_info'), \
-                            'actual_result').text
-                    self.start = ele_find(ele_find(tc, 'result_info'),\
-                            'start').text
-                    self.end = ele_find(\
-                            ele_find(tc, 'result_info'), 'end').text
-                    self.stdout = ele_find(ele_find(tc, 'result_info'),\
-                            'stdout').text
-                    self.stderr = ele_find(ele_find(tc, 'result_info'),\
-                            'stderr').text
-                    if self.result != "PASS":
-                        self.unpass = True
-                    return self
-
-                def mergeresult_parse(self, tc1, tc2, priority="FAIL"):
-                    self.Id = tc1.get('id')
-                    self.component = tc1.get('component')
-                    self.execution_type = tc1.get('execution_type')
-                    self.priority = tc1.get('priority')
-                    self.purpose = tc1.get('purpose')
-                    self.onload_delay = tc1.get('onload_delay')
-                    result1 = tc1.get('result')
-                    result2 = tc2.get('result')
-                    if priority == "FAIL":
-                        if result1 == "FAIL":
-                            tc = tc1
-                        elif result2 == "FAIL":
-                            tc = tc2
-                        elif result1 == "BLOCK":
-                            tc = tc1
-                        elif result2 == "BLOCK":
-                            tc = tc2
-                        elif result1 == "N/A":
-                            tc = tc1
-                        elif result2 == "N/A":
-                            tc = tc2
-                        else:
-                            tc = tc1
-                    if priority == "PASS":
-                        tc = tc2
-                    self.result = tc.get('result')
-                    self.test_script_entry = ele_find(\
-                            ele_find(tc, 'description'),\
-                            'test_script_entry').text
-                    self.actual_result = ele_find(\
-                            ele_find(tc, 'result_info'), \
-                            'actual_result').text
-                    self.start = ele_find(ele_find(tc, 'result_info'), \
-                            'start').text
-                    self.end = ele_find(ele_find(tc, 'result_info'), \
-                            'end').text
-                    self.stdout = ele_find(ele_find(tc, 'result_info'), \
-                            'stdout').text
-                    self.stderr = ele_find(ele_find(tc, 'result_info'), \
-                            'stderr').text
-                    return self
-
-                def to_xml(self, fail_only):
-                    if fail_only and self.result == "PASS":
-                        return
-                    tc = ElementTree.Element('testcase')
-                    ele_set(tc, 'component', self.component)
-                    ele_set(tc, 'execution_type', self.execution_type)
-                    ele_set(tc, 'id', self.Id)
-                    ele_set(tc, 'priority', self.priority)
-                    ele_set(tc, 'purpose', self.purpose)
-                    ele_set(tc, 'onload_delay', self.onload_delay)
-                    if not fail_only:
-                        ele_set(tc, 'result', self.result)
-                    description = ElementTree.Element('description')
-                    tse = ElementTree.Element('test_script_entry')
-                    if self.test_script_entry:
-                        tse.text = self.test_script_entry
-                    description.append(tse)
-                    tc.append(description)
-                    if fail_only:
-                        return tc
-                    result_info = ElementTree.Element('result_info')
-                    actual_result = ElementTree.Element('actual_result')
-                    if self.actual_result:
-                        actual_result.text = self.actual_result
-                    start = ElementTree.Element('start')
-                    if self.start:
-                        start.text = self.start
-                    end = ElementTree.Element('end')
-                    if self.end:
-                        end.text = self.end
-                    stdout = ElementTree.Element('stdout')
-                    if self.stdout:
-                        stdout.text = self.stdout
-                    stderr = ElementTree.Element('stderr')
-                    if self.stderr:
-                        stderr.text = self.stderr
-                    result_info.append(actual_result)
-                    result_info.append(start)
-                    result_info.append(end)
-                    result_info.append(stdout)
-                    result_info.append(stderr)
-                    tc.append(result_info)
-                    return tc
diff --git a/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/shell/tctshell/scenario_options.py b/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/shell/tctshell/scenario_options.py
deleted file mode 100755 (executable)
index 9e2dccc..0000000
+++ /dev/null
@@ -1,169 +0,0 @@
-#!/usr/bin/python
-
-import os
-import re
-import sys, traceback
-import glob
-from constants import Constants
-from xml.etree import ElementTree
-import xml.etree.ElementTree as etree
-from Tkinter import *
-import tkMessageBox
-from optparse import *
-from devicemanager import DeviceManager
-from logmanager import LOGGER
-
-def vanarg(option, opt_str, value, parser):
-    value = []
-    for arg in parser.rargs:
-        if re.search('^--.+', arg) or re.search('^-[\D]', arg):
-            break
-    value.append(arg)
-    del parser.rargs[:len(value)]
-    setattr(parser.values, option.dest, value)
-
-def printPlans_Devices(option, opt_str, value, parser):
-    printPlanList()
-    printDeviceList()
-    sys.exit(1)
-
-def printPlanList():
-    print "\nAvaiable Plans:...\n"
-    folder = Constants.TCT_PLAN_FOLDER
-    os.chdir(folder)
-    for files in glob.glob("*.xml"):
-        print files[:-4]
-
-def printDeviceList():
-    print "\nConnected Devices:...\n"
-    dmi = DeviceManager.getInstance()
-    dmi.loadDeviceList()
-    devices = dmi.getSdbDeviceList()
-    for dev in devices:
-        dev._printDevInfo()
-    if len(devices) < 1:
-        print "No Connected Devices"
-
-class ScenarioGeneratorOptions:
-    def __init__(self):
-        self._j = os.path.join
-        self._e = os.path.exists
-        self._d = os.path.dirname
-        self._b = os.path.basename
-        self._abspath = os.path.abspath
-        self.options = None
-        self.running_mode = None
-        self.USAGE = ""
-
-    def parse_options(self, argv):
-        option_list = [
-                make_option("--folderpath", "-f", dest = "plansrcfolder", \
-                        action="callback", callback=vanarg,  \
-                        help="Specify the plan source directory"),
-                make_option("-o", "--output", dest="testscen_file", \
-                        action="callback", callback=vanarg, \
-                        help="Specify the generating testscen in a XML file."),
-                make_option("-d", "--default",  dest="default", \
-                        action="store_true", help="Default setting"),
-                make_option("-p", "--plan", dest="plan", action="callback", \
-                        callback=vanarg, help="Make list of sets that match a \
-                        plan with a device and tizen version : \
-                        [plan_file],[device],[tizenversion]"),
-                make_option("--list", dest="lst", action="callback", \
-                        callback=printPlans_Devices, help="List all existing \
-                        plans and connected devices")
-               ]
-        if len(argv) == 1:
-            argv.append("-h")
-        PARSERS = OptionParser(option_list=option_list, usage=self.USAGE)
-
-        (self.options, args) = PARSERS.parse_args()
-
-        if self.options.default is not None:
-            if self.options.plansrcfolder is not None or \
-               self.options.testscen_file is not None or \
-               self.options.plan is not None:
-                   sys.exit("options: conflict")
-
-    def get_scen_name(self):
-        if (self.options.testscen_file is not None) and \
-                (self.options.testscen_file[0] is not None):
-            name, ext = os.path.splitext(self.options.testscen_file[0])
-            return name.split("/")[-1]
-        else:
-            return Constants.DEFAULT_SCEN_NAME
-
-    def get_plansrc_folder(self):
-        if (self.options.plansrcfolder is not None) and \
-                (self.options.plansrcfolder[0] is not None):
-            return self.options.plansrcfolder[0]
-        else:
-            return Constants.TCT_PLAN_FOLDER
-
-    def get_output(self):
-        if (self.options.testscen_file is not None) and \
-                (self.options.testscen_file[0] is not None):
-            d = os.path.abspath(os.path.dirname(self.options.testscen_file[0]))
-            if not os.path.exists(d):
-                os.makedirs(d)
-            return os.path.abspath(self.options.testscen_file[0])
-        else:
-            d = os.path.abspath(Constants.TCT_SCEN_FOLDER)
-            if not os.path.exists(d):
-                os.makedirs(d)
-            return Constants.TCT_SCEN_FOLDER + "generated_scen.xml"
-
-    def get_planlist_args(self):
-        if self.options.plan is not None:
-            plans = []
-            dmi = DeviceManager.getInstance()
-            dmi.loadDeviceList()
-            for plan in self.options.plan:
-                if len(plan.split(',')) != 3:
-                    sys.exit("[--plan]: Wrong format. See --help for correct \
-                            format")
-                plan_name = plan.split(',')[0]
-                dev_id = plan.split(',')[1]
-                tizenVer = plan.split(',')[2]
-                dev = dmi.getDevice(dev_id)
-                if dev is None:
-                    sys.exit("Device: [%s] is not connected" % dev_id)
-                if not os.path.isfile(os.path.join(self.get_plansrc_folder(),\
-                        "%s.xml" % plan_name)):
-                    sys.exit("Plan: [%s] does not exist in the plan source \
-                            folder : [%s]" % (plan_name, \
-                            self.get_plansrc_folder()))
-                self.check_tizen_version(tizenVer)
-                plans.append([plan_name, [dev.devName, dev.devId, \
-                        dev.devType], tizenVer])
-            return plans
-
-    def check_tizen_version(self, tizenversion):
-        VER_PATTERN = "^tizen_web_\d.\d|^tizen_native_\d.\d|^tizen_csharp_\d.\d"
-        pa = re.compile(VER_PATTERN, re.I)
-        ma = pa.match(tizenversion)
-        if ma is None:
-            LOGGER.error("A required \"/opt/tct/" + tizenversion + "\" could \
-                    not be found.")
-            sys.exit("Invalid Tizen version. Tizen version must be in the form\
-                    of tizen_(web|native|csharp)_#.#")
-
-    def getPlanList(self):
-        folder = self.get_plansrc_folder()
-        os.chdir(folder)
-        planList = []
-        for files in glob.glob("*.xml"):
-            planList.append(files[:-4])
-        return planList
-
-    def getDeviceList(self):
-        deviceList = []
-        dmi = DeviceManager.getInstance()
-        dmi.loadDeviceList()
-        devices = dmi.getSdbDeviceList()
-        for dev in devices:
-            deviceList.append([dev.devName, dev.devId, dev.devType])
-        if len(deviceList) < 1:
-            print "No Device Attached"
-            sys.exit("Exit: No Connected Devices")
-        return deviceList
diff --git a/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/shell/tctshell/scenario_runner.py b/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/shell/tctshell/scenario_runner.py
deleted file mode 100755 (executable)
index 663f9d2..0000000
+++ /dev/null
@@ -1,87 +0,0 @@
-#!/usr/bin/python
-
-from constants import Constants
-from xml.etree import ElementTree
-from tctshell.gui.main_window import MainWindow
-import os,os.path
-import sys
-from logmanager import LOGGER
-
-class ScenPlan:
-
-    def __init__(self, folder, name, device, version):
-        self.name = name
-        self.device = device
-        self.version = version
-        self.folder = folder
-
-    def to_xml(self):
-        plan = ElementTree.Element('plan')
-        plan.set('name', self.name)
-        device = ElementTree.Element('device')
-        device.set('name', self.device[0])
-        device.set('id', self.device[1])
-        device.set('type', self.device[2])
-        plan.append(device)
-        version = ElementTree.Element('version')
-        version.text = self.version
-        plan.append(version)
-        path = ElementTree.Element('path')
-        name = "#".join(self.name.split("#")[:-1])
-        path.text = os.path.join(self.folder, "%s.xml" %name)
-        plan.append(path)
-        return plan
-
-class ScenarioRunner:
-
-    def __init__(self):
-        self.plans = {}
-        self.scen_name = Constants.DEFAULT_SCEN_NAME
-
-    def load_local_repo(self, planlist_args, path, scen_name, plan_list, dev_list):
-        self.scen_name = scen_name
-        count = 0
-        if planlist_args is None:
-            scenario = self.getPlanInfo(plan_list, dev_list)
-        else:
-            scenario = planlist_args
-        for plans in scenario:
-            count += 1
-            plan = ScenPlan(path, plans[0], plans[1], plans[2])
-            plan.name += "#%d" % count
-            self.plans[plan.name] = plan
-
-    def getPlanInfo(self, planList, deviceList):
-        mw = MainWindow("Scenario Generator")
-        mw.getActionFrame()
-        mw.importData(planList, deviceList, os.listdir("/opt/tct/"))
-        mw.run()
-        scenData = mw.getScenData()
-        if len(scenData) < 1:
-            LOGGER.error("No correct scenario data given.\nExiting...")
-            raise
-        return mw.getScenData()
-
-    def to_xml(self, xml_name):
-        root = ElementTree.Element('ns3:testscenario')
-        root.set('name', self.scen_name)
-        root.set('xmlns', '')
-        root.set('xmlns:ns3', 'http://www.example.org/plan/')
-
-        for plan_name in self.plans:
-            plan = self.plans[plan_name]
-            root.append(plan.to_xml())
-        Constants.indent(root)
-        tree = ElementTree.ElementTree()
-        tree._setroot(root)
-        if os.path.basename(xml_name) == "generated_scen.xml":
-            i = 0
-            while os.path.isfile(xml_name):
-                i += 1
-                if xml_name[-5] == "]":
-                    xml_name = "[".join(xml_name.split("[")[:-1])+"[%d].xml" % i
-                else:
-                    xml_name = xml_name[:-4]+"[%d].xml" % i
-        LOGGER.info("generating scenario to %s" % xml_name)
-        tree.write(xml_name, xml_declaration=True, encoding="utf-8")
-
diff --git a/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/shell/tctshell/sdbmanager.py b/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/shell/tctshell/sdbmanager.py
deleted file mode 100755 (executable)
index 0a10c1f..0000000
+++ /dev/null
@@ -1,391 +0,0 @@
-#!/usr/bin/python
-
-import subprocess
-import time
-import os
-import sys
-from .constants import Constants
-from .logmanager import LOGGER
-from .exception import DevNotFoundErr
-
-
-class SdbManager:
-
-    @staticmethod
-    def hostLiteCommand(command, failct=None):
-        LOGGER.info(command)
-        proc = subprocess.Popen(command, \
-            shell=True, \
-            bufsize=0, \
-            stdin=subprocess.PIPE, \
-            stdout=subprocess.PIPE, \
-            stderr=subprocess.PIPE)
-
-        curr_fail = 0
-        while True:
-            exit_code = proc.poll()
-            if exit_code is not None:
-                break
-
-            output = proc.stdout.readline()
-            if output:
-                output = output.strip().decode('utf-8')
-                LOGGER.info(output)
-                if output.find("all tasks for testkit lite are accomplished, goodbye") > -1:
-                    return True
-                elif output.find("error: protocol fault: no status") > -1:
-                    LOGGER.error(output)
-                    return False
-                elif output.find("error: target offline") > -1:
-                    LOGGER.error(output)
-                    return False
-                elif output.find("error: target not found") > -1:
-                    LOGGER.error(output)
-                    return False
-                elif output.find("error: get too many errors, stop current set") > -1:
-                    LOGGER.error(output)
-                    return False
-                elif output.find("test app no response, hang or not launched") > -1:
-                    LOGGER.error(output)
-                elif output.find("get server status timeout, please check device") > -1:
-                    LOGGER.error(output)
-                    return False
-                elif output.find("failed to install widget") > -1:
-                    LOGGER.error(output)
-
-                if failct and int(failct) > 0:
-                    if output.lower().find('execute case:') > -1 and \
-                            (output.lower().find('fail') > -1 or \
-                            output.lower().find('block') > -1):
-                        curr_fail += 1
-                        if int(failct) == curr_fail:
-                            return False
-        return True
-
-    @staticmethod
-    def hostRecLiteCommand(command):
-        LOGGER.info(command)
-        proc = subprocess.Popen(command, shell=True, \
-                stdout=subprocess.PIPE, stderr=subprocess.PIPE)
-        while True:
-            exit_code = proc.poll()
-            if exit_code is not None:
-                break
-            output = proc.stdout.readline()
-            if output:
-                output = output.strip().decode('utf-8')
-                LOGGER.info(output)
-                if output.find("all tasks for testkit lite are accomplished, goodbye") > -1:
-                    return True
-        return True
-
-    @staticmethod
-    def hostCommand(command, timeout=90):
-        LOGGER.info(command)
-        outs = None
-        errs = None
-        proc = None
-        try:
-            proc = subprocess.Popen(command, shell=True, stdout=subprocess.PIPE, \
-                    stderr=subprocess.PIPE)
-            outs, errs = proc.communicate(timeout=timeout)
-        except subprocess.TimeoutExpired:
-            exc = sys.exc_info()
-            raise exc[1].with_traceback(exc[2])
-        except Exception:
-            exc = sys.exc_info()
-            raise exc[1].with_traceback(exc[2])
-
-        if outs:
-            outs = outs.decode("utf-8")
-        if errs:
-            errs = errs.decode("utf-8")
-
-        if outs:
-            LOGGER.info(outs)
-            if SdbManager.is_target_offline(outs):
-                raise DevNotFoundErr("None")
-
-        if errs:
-            LOGGER.error(errs)
-            if SdbManager.is_target_offline(errs):
-                raise DevNotFoundErr("None")
-
-        return True
-
-    @staticmethod
-    def hostCommandwithResult(command, timeout=90):
-        LOGGER.info(command)
-        try:
-            proc = subprocess.Popen(command, shell=True, stdout=subprocess.PIPE, \
-                    stderr=subprocess.PIPE)
-            outs, errs = proc.communicate(timeout=timeout)
-        except subprocess.TimeoutExpired:
-            exc = sys.exc_info()
-            raise exc[1].with_traceback(exc[2])
-        except Exception:
-            exc = sys.exc_info()
-            raise exc[1].with_traceback(exc[2])
-
-        if outs:
-            outs = outs.decode(encoding="utf-8")
-        if errs:
-            errs = errs.decode("utf-8")
-
-        return outs
-
-    @staticmethod
-    def sdbCommand(command, timeout=90):
-        LOGGER.info(command)
-
-        outs = None
-        errs = None
-        proc = None
-        try:
-            proc = subprocess.Popen(command, \
-                shell=True, \
-                bufsize=0, \
-                stdin=subprocess.PIPE, \
-                stdout=subprocess.PIPE, \
-                stderr=subprocess.PIPE)
-            outs, errs = proc.communicate(timeout=timeout)
-        except subprocess.TimeoutExpired:
-            exc = sys.exc_info()
-            raise exc[1].with_traceback(exc[2])
-        except Exception:
-            exc = sys.exc_info()
-            raise exc[1].with_traceback(exc[2])
-
-        if outs:
-            outs = outs.decode("utf-8")
-        if errs:
-            errs = errs.decode("utf-8")
-
-        return outs, errs
-
-    @staticmethod
-    def _checkDevIdExists(_devid):
-        if len(_devid) < 0:
-            LOGGER.error("The '%s' device Id exists error" % _devid)
-            return False
-        return True
-
-    @staticmethod
-    def sdbPush(_devid, local, remote):
-        FAIL_LOG = "sdb -s %s push failed" % _devid
-        if SdbManager._checkDevIdExists(_devid) is False:
-            raise DevNotFoundErr(_devid)
-        if Constants.checkFileExists(local) is False:
-            LOGGER.warning("File exists error:%s" % local)
-            return False
-
-        push_cmd = Constants.SDB_PUSH % _devid + " " + local + " " + remote
-        outLog, errLog = SdbManager.sdbCommand(push_cmd)
-
-        if errLog:
-            LOGGER.error(FAIL_LOG)
-            LOGGER.error(str(errLog))
-            if SdbManager.is_target_offline(errLog):
-                raise DevNotFoundErr(_devid)
-            return False
-        if outLog:
-            LOGGER.info(str(outLog))
-            return True
-
-    @staticmethod
-    def sdbPull(_devid, remote, local):
-        FAIL_LOG = "sdb -s %s pull failed" % _devid
-        if SdbManager._checkDevIdExists(_devid) is False:
-            raise DevNotFoundErr(_devid)
-
-        rmtFileCheck_cmd = Constants.SDB_SHELL % _devid + " " \
-                + Constants.FILE_FOUND_SCRIPT % remote
-        outLog, errLog = SdbManager.sdbCommand(rmtFileCheck_cmd)
-
-        if errLog:
-            LOGGER.error(FAIL_LOG)
-            LOGGER.error(str(errLog))
-            if SdbManager.is_target_offline(errLog):
-                raise DevNotFoundErr(_devid)
-            return False
-        if outLog:
-            LOGGER.info(str(outLog))
-
-        pull_cmd = Constants.SDB_PULL % _devid + " " + remote + " " + local
-        outLog, errLog = SdbManager.sdbCommand(pull_cmd)
-
-        if errLog:
-            LOGGER.error(FAIL_LOG)
-            LOGGER.error(str(errLog))
-            return False
-        if outLog:
-            LOGGER.info(str(outLog))
-
-        if Constants.checkFileExists(local) is False:
-            return False
-        return True
-
-    @staticmethod
-    def sdbShell(_devid, cmd, timeout=90):
-        FAIL_LOG = "sdb -s %s shell failed" % _devid
-        if SdbManager._checkDevIdExists(_devid) is False:
-            raise DevNotFoundErr(_devid)
-
-        shell_cmd = Constants.SDB_SHELL % _devid + " " + cmd
-        outLog, errLog = SdbManager.sdbCommand(shell_cmd, timeout)
-
-        if errLog:
-            LOGGER.error(FAIL_LOG)
-            LOGGER.error(str(errLog))
-            if SdbManager.is_target_offline(errLog):
-                raise DevNotFoundErr(_devid)
-            return None
-        if outLog:
-            LOGGER.info(str(outLog))
-            return outLog
-
-    @staticmethod
-    def sdbRootOn(_devid):
-        FAIL_LOG = "sdb -s %s root on failed" % _devid
-        if SdbManager._checkDevIdExists(_devid) is False:
-            raise DevNotFoundErr(_devid)
-        root_cmd = Constants.SDB_ROOT_ON % _devid
-        outLog, errLog = SdbManager.sdbCommand(root_cmd, 20)
-
-        if errLog:
-            LOGGER.error(FAIL_LOG)
-            LOGGER.error(str(errLog))
-            if SdbManager.is_target_offline(errLog):
-                raise DevNotFoundErr(_devid)
-            return False
-        if outLog:
-            LOGGER.info(str(outLog))
-
-        checkLog = SdbManager.sdbShell(_devid, 'whoami')
-        if checkLog and checkLog.find('root') != -1:
-            LOGGER.info('root on')
-        else:
-            LOGGER.error(FAIL_LOG)
-
-    @staticmethod
-    def sdbDevices():
-        FAIL_LOG = "sdb devices failed"
-        dev_cmd = Constants.SDB_DEVICES
-        outLog, errLog = SdbManager.sdbCommand(dev_cmd, 5)
-
-        if errLog:
-            LOGGER.error(FAIL_LOG)
-            LOGGER.error(str(errLog))
-            return None
-        if outLog:
-            LOGGER.info(str(outLog))
-            return outLog
-
-    @staticmethod
-    def getCapabilityBack(deviceId, tizenVer):
-        remote = Constants.getDEVICE_CAPABILITY_PATH(tizenVer)
-        local = Constants.LOCAL_CAPABILITY_PATH % deviceId
-        return SdbManager.sdbPull(deviceId, remote, local)
-
-    @staticmethod
-    def recoveryDevice(_tizenV, _deviceid):
-        if _tizenV:
-            tinycmd = "python " + Constants.DEVICE_HEALTH_CMD % _tizenV + \
-                    " --check --proc=tinyweb --deviceid=" + _deviceid
-            stubcmd = "python " + Constants.DEVICE_HEALTH_CMD % _tizenV + \
-                    " --check --proc=testkit-stub --deviceid=" + _deviceid
-            outLog, errLog = SdbManager.sdbCommand(tinycmd)
-            if errLog: LOGGER.error(str(errLog))
-            if outLog: LOGGER.info(str(outLog))
-
-            outLog, errLog = SdbManager.sdbCommand(stubcmd)
-            if errLog: LOGGER.error(str(errLog))
-            if outLog: LOGGER.info(str(outLog))
-
-    @staticmethod
-    def checkDirExist(_devid, _dirname):
-        lscmd = "ls -al " + _dirname
-        outLog = SdbManager.sdbShell(_devid, lscmd)
-        if outLog and outLog.find("No such file or directory") > -1:
-            return False
-        elif outLog is None:
-            return False
-        return True
-
-    @staticmethod
-    def findDumpPath(_devid):
-        find_cmd = "sdb -s %s shell cat /etc/tizen-platform.conf | grep TZ_SYS_CRASH_ROOT" % _devid
-        outLog, errLog = SdbManager.sdbCommand(find_cmd)
-
-        if not outLog:
-            return None
-
-        result = outLog.split('\n')
-        LOGGER.debug(str(result))
-        if len(result) < 2:
-            LOGGER.error("Cannot parsing Crash dump path")
-            return None
-        else:
-            crash_root = result[0].split('=')[1].strip()
-            dump = result[1].split('=')[1].replace('${TZ_SYS_CRASH_ROOT}', '').strip()
-            return crash_root + dump
-
-    @staticmethod
-    def resetDumpFiles(_devid):
-        dumpPath = SdbManager.findDumpPath(_devid)
-        if dumpPath is None:
-            return False
-        if SdbManager.checkDirExist(_devid, dumpPath):
-            rmcmd = "rm -f " + dumpPath + "/*"
-            SdbManager.sdbShell(_devid, rmcmd)
-
-    @staticmethod
-    def deleteDumpFiles(_devid, dump_files):
-        dumpPath = SdbManager.findDumpPath(_devid)
-        if dumpPath is None:
-            return False
-        if SdbManager.checkDirExist(_devid, dumpPath):
-            for file in dump_files:
-                rmcmd = "rm -f " + dumpPath + "/" + file
-                SdbManager.sdbShell(_devid, rmcmd)
-
-    @staticmethod
-    def exportDumpFiles(_devid, _resultDir):
-        dumpPath = SdbManager.findDumpPath(_devid)
-        if dumpPath is None:
-            return False
-        isExist = SdbManager.checkDirExist(_devid, dumpPath)
-        if isExist:
-            if not os.path.exists(_resultDir):
-                os.makedirs(_resultDir)
-            chk_crash_mgr_cmd = "ps -ef | grep -v grep | grep crash-manager"
-            while True:
-                outs = SdbManager.sdbShell(_devid, chk_crash_mgr_cmd)
-                if outs is None:
-                    break
-                else:
-                    wait_time = 10
-                    for loop in range(wait_time):
-                        LOGGER.info("Waiting for crash-manager {0}...".\
-                            format(wait_time - loop))
-                        time.sleep(1)
-
-            remote = dumpPath
-            res = SdbManager.sdbPull(_devid, remote, _resultDir)
-            if res:
-                dump_files = []
-                for file in os.listdir(_resultDir):
-                    dump_files.append(file)
-                return dump_files
-        else:
-            LOGGER.error("Not Found crash dump directory : %s" % dumpPath)
-
-    @staticmethod
-    def is_target_offline(log):
-        if log:
-            if str(log).find('target not found') > -1 or \
-                    str(log).find('target offline') > -1:
-                return True
-            else:
-                return False
-        return False
diff --git a/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/shell/tctshell/sdbmanager.pyc b/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/shell/tctshell/sdbmanager.pyc
deleted file mode 100755 (executable)
index e9465cf..0000000
Binary files a/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/shell/tctshell/sdbmanager.pyc and /dev/null differ
diff --git a/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/shell/tctshell/shellguider.py b/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/shell/tctshell/shellguider.py
deleted file mode 100755 (executable)
index 7d1f4dc..0000000
+++ /dev/null
@@ -1,267 +0,0 @@
-#!/usr/bin/python
-
-import os
-import configparser
-import string
-import json
-
-from .logmanager import LOGGER
-from .sdbmanager import SdbManager
-from .constants import Constants
-from xml.etree import ElementTree
-
-class Guider:
-    _conf_prompts = []
-    deviceIds = []
-
-    def __init__(self, plan, deviceIds=None):
-        if deviceIds is None:
-            self.deviceIds = [plan.getDeviceId()]
-        else:
-            self.deviceIds = deviceIds
-        self.deviceId = self.deviceIds[0]
-        self.tizenVer = plan.getTizenVersion()
-        self.stubPort = plan.getStubPort()
-        self.manual_items = {}
-        self.conf_items = {}
-        self.suites = {}
-
-        for suite in plan.getSuites():
-            self.suites[suite.getSuiteName()] = suite
-
-        self.conf_file = Constants.PRE_CONF_HOST_INI % self.deviceId
-
-    def init_items(self):
-        self._fill_items()
-        self._read_conf()
-        self.read(self.conf_file)
-
-    def read(self, filename):
-        LOGGER.debug("reading %s file" % filename)
-        try:
-            fp = open(filename)
-        except IOError:
-            LOGGER.warning("open file fail...")
-
-        self._read(fp, filename)
-        fp.close()
-
-    def _read(self, fp, fpname):
-        lineno = 0
-        comment = None;
-        prompts = []
-        while True:
-            line = fp.readline()
-            if not line:
-                break
-            lineno = lineno + 1
-            # comment or blank line?
-            if line.strip() == '':
-                continue
-            if line.split(None, 1)[0].lower() == 'rem' and line[0] in "rR":
-                # no leading whitespace
-                continue
-            if line[0] in '#;':
-                comment = line;
-                continue
-            if line[0] in '[':
-                comment = None;
-                continue
-            if line.find('='):
-                linelist = line.split('=')
-                prompts.append((linelist[0], comment))
-        self._conf_prompts = prompts
-
-    def _read_conf(self):
-        parser = configparser.ConfigParser()
-        parser.read(self.conf_file)
-        for section in parser.sections():
-            if not section:
-                continue
-            opts = {}
-            for n, v in parser.items(section):
-                if n:
-                    opts[n] = v
-            self.conf_items[section] = opts
-
-    def _fill_items(self):
-        command = "cat " + Constants.PRE_CONF_HOST_XML % self.deviceId
-        result =  SdbManager.hostCommandwithResult(command)
-        if result is None :
-            LOGGER.warning("Obtain tct_testconfig content error...")
-            self._exit(0)
-
-        xml_tree = ElementTree.fromstring(result)
-
-        for set in ElementTree.Element.findall(xml_tree, "suite/set"):
-            module_name = ElementTree.Element.get(set, "name", None)
-            if module_name:
-                descs = []
-                for desc in ElementTree.Element.findall(set, "testcase/description/steps/step/step_desc"):
-                    if desc is not None:
-                        descs.append(desc.text)
-            self.manual_items[module_name] = descs
-
-    def is_update_config(self, pkg_name):
-        #if self.conf_items.has_key(pkg_name):
-        if pkg_name in self.conf_items:
-            return True
-        return False
-
-    def get_confs(self, pkg_name):
-        return self.conf_items.get(pkg_name)
-
-    def _update_portenv(self):
-        #read json
-        for devId in self.deviceIds:
-            if os.path.isfile(Constants.PORT_CONF_HOST_JSON % devId) :
-                fread = open(Constants.PORT_CONF_HOST_JSON % devId, "r")
-                port_data = json.loads(fread.read())
-                fread.close()
-
-                port_data[0]['STUB_PORT'] = self.stubPort
-                fwrite = open(Constants.PORT_CONF_HOST_JSON % devId,"w")
-                json.dump(port_data, fwrite,indent = 4)
-                fwrite.close()
-            else :
-                LOGGER.warning("Not Found %s config file" % Constants.PORT_CONF_HOST_JSON % devId)
-                raise
-
-    def setup_manual_env(self):
-        self._show_manual_setup()
-        self._show_overall_infos()
-        self._update_json()
-        self._push_preconfigure()
-        if self.tizenVer.find("native") > -1:
-            self._update_txt()
-            self._push_tc_config()
-
-    def setup_default_env(self):
-        self._update_portenv()
-        self._push_portconfigure()
-
-    def _push_preconfigure(self):
-        for devId in self.deviceIds:
-            local = Constants.PRE_CONF_HOST_JSON % devId
-            remote = Constants.getTCT_PRE_CONF_DEVICE_JSON(self.tizenVer)
-            SdbManager.sdbPush(devId, local, remote)
-
-    def _push_portconfigure(self):
-        for devId in self.deviceIds:
-            local = Constants.PORT_CONF_HOST_JSON % devId
-            remote = Constants.getTCT_PORT_CONF_DEVICE_JSON(self.tizenVer)
-            SdbManager.sdbPush(devId, local, remote)
-
-    def _push_tc_config(self):
-        for devId in self.deviceIds:
-            local = Constants.NAT_CONF_HOST_TXT % devId
-            remote = Constants.NAT_CONF_DEVICE_TXT
-            SdbManager.sdbPush(devId, local, remote)
-
-    def _filter_suits(self, items):
-        keys = set()
-        if self.suites and items:
-            suit_keys = set(self.suites.keys())
-            item_keys = set(items.keys())
-            keys = keys|(suit_keys & item_keys)
-        return list(keys)
-
-    def _show_manual_setup(self):
-        keys = self._filter_suits(self.manual_items)
-        if not keys:
-            LOGGER.debug("No any pre-configure to be configured.")
-            return
-
-        LOGGER.info("\nHi,guys, before the start, there are some pre-configures must be provided,"
-              "and you just should input (Y)es or simply press Enter if your test environment "
-              "has met the request, otherwise, please input (N)o and the program will exit.")
-
-        LOGGER.info("Device Id : %s " % str(self.deviceIds))
-
-        for module in keys:
-            descs = self.manual_items.get(module)
-            if descs:
-                LOGGER.info("")
-                LOGGER.info("Module: %s" % module)
-                LOGGER.info("")
-                i = 1
-                for desc in descs:
-                    LOGGER.info('(%r) %s' % (descs.index(desc) + 1, desc))
-                    i += i
-        result = True
-        while  result:
-            answer = input("\nHave you set the device as descriped above? [Yes/No]: ")
-            if answer and (answer.lower() == "no" or answer.lower() == "n"):
-                LOGGER.warning("\nYour environment can't meet the test's request. Exit...")
-                self._exit(0)
-            if answer and (answer.lower() == "yes" or answer.lower() == "y"):
-                result = False
-        LOGGER.info("")
-
-    def _show_overall_infos(self):
-        keys = self._filter_suits(self.conf_items)
-        if not keys:
-            LOGGER.debug("No conf params are needed here.")
-            return
-
-        LOGGER.info("Overall needed configure is as below, please confirm:\n")
-        index = 1
-        for k,p in self._conf_prompts:
-            for pkg in keys:
-                v = self._get_value(pkg, k)
-                if v is not None:
-                    LOGGER.info ('{i}. {p}'.format(i = index, p = p))
-                    LOGGER.info('{0: <30}{v}'.format(k + ":", v = v))
-                    index += 1
-        LOGGER.info("\nIf needed, please update %s file. " % (Constants.PRE_CONF_HOST_INI % str(self.deviceIds)))
-        result = True
-        while  result:
-            next_step = input("Continue to run test? [Yes/No]: ")
-            if next_step and (next_step.lower() == "n" or next_step.lower() == "no"):
-                self._exit(0)
-            if next_step and (next_step.lower() == "yes" or next_step.lower() == "y"):
-                result = False
-                LOGGER.info("OK! All is well. Let's go ahead...")
-
-    def _exit(self, code=None):
-        LOGGER.info("Bye-bye ^_^")
-        if code is None:
-            code = 0
-        raise
-
-    def _get_value(self, section, opt):
-        #if self.conf_items.has_key(section):
-        if section in self.conf_items:
-            vs = self.conf_items.get(section)
-            #if vs and vs.has_key(opt.lower()):
-            if vs and opt.lower() in vs:
-                return vs.get(opt.lower())
-        return None
-
-    def _update_json(self):
-        for devId in self.deviceIds:
-            self._read_conf()
-            list = []
-            dic = {}
-            for value in self.conf_items.values():
-                for k,v in value.items():
-                    dic[k.upper()] = v
-            list.append(dic)
-            fp = open(Constants.PRE_CONF_HOST_JSON % devId,"w")
-            json.dump(list, fp,indent = 4)
-
-    def _update_txt(self):
-        for devId in self.deviceIds:
-            self._read_conf()
-            dic = {}
-
-            tc_conf_file = open(Constants.NAT_CONF_HOST_TXT % devId, "w")
-            for value in self.conf_items.values():
-                for k,v in value.items():
-                    dic[str.upper(k)] = v
-
-            for k, v in dic.items():
-                tc_conf_file.write(k+"="+v+"\n")
-
-            tc_conf_file.close()
-
diff --git a/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/shell/tctshell/shellplanner.py b/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/shell/tctshell/shellplanner.py
deleted file mode 100755 (executable)
index ea62381..0000000
+++ /dev/null
@@ -1,713 +0,0 @@
-#!/usr/bin/python
-
-import shutil
-import os
-import datetime
-
-from multiprocessing import Lock
-
-from .constants import Constants
-from .sdbmanager import SdbManager
-from .logmanager import LOGGER
-from .exception import DevNotFoundErr
-
-
-class MultiRunnPlan(object):
-    INSTANCE = None
-    runningPlans = {}
-    _observers = []
-
-    def __init__(self):
-        self._observers = []
-        if MultiRunnPlan.INSTANCE is not None:
-            raise Exception('A TestSingleton instance already exists')
-
-    @classmethod
-    def getInstance(cls):
-        if cls.INSTANCE is None:
-            cls.INSTANCE = MultiRunnPlan()
-        return cls.INSTANCE
-
-    def attach(self, observer):
-        if not observer in self._observers:
-            self._observers.append(observer)
-        else:
-            LOGGER.debug("The observer already exists")
-
-    def detach(self, observer):
-        if observer in self._observers:
-            self._observers.remove(observer)
-        else:
-            LOGGER.debug("[DEBUG] The observer does not exist")
-
-    def notify(self):
-        LOGGER.debug(" MultiRunnPlan Notify ")
-        for observer in self._observers:
-            observer.update()
-
-    #param string plan id
-    #param TctShellPlan plan
-    def addPlan(self, planid, plan):
-        if planid:
-            self.runningPlans[planid] = plan
-        else:
-            self.runningPlans['test'] = plan
-
-    #return int
-    def getPlansSize(self):
-        return len(self.runningPlans)
-
-    def removePlans(self, plans):
-        for plan in plans:
-            self.runningPlans.pop(plan.name, None)
-
-    def clearPlans(self):
-        self.runningPlans.clear()
-
-    #return dictionary
-    def getPlanDict(self):
-        return self.runningPlans
-
-    #Param TctShellPlan
-    #return bool
-    def isSelectedDevAvailable(self, plan):
-        currDevId = plan.getDeviceId()
-        runnDevs = self.getRunnDevice()
-        for rDev in runnDevs:
-            if rDev == currDevId:
-                LOGGER.debug("%s currently occupied with other plans." \
-                        % currDevId)
-                return False
-
-        LOGGER.debug("%s is now available" % currDevId)
-        return True
-
-    #return String[]
-    def getRunnDevice(self):
-        runDev = []
-        for rplan in self.runningPlans.values():
-            if rplan.isRunning() == True:
-                runDev.append(rplan.getDeviceId())
-        return runDev
-
-    def printRunnPlan(self):
-        for rplan in self.runningPlans.values():
-            LOGGER.debug("Name : %s , isStart : %s" \
-                    % (rplan.getPlanName(), rplan.isRunning()))
-
-    def setCurrPlanRunning(self, plan):
-        currPlanName = plan.getPlanName()
-        for rPlan in self.runningPlans.values():
-            if rPlan.getPlanName() == currPlanName:
-                rPlan.setRunning(True)
-                return True
-        return False
-
-
-class TctShellPlan:
-    resultFolderPath = ""
-    isRun = False
-    isFinish = False
-    isRerun = False
-
-    #PARAM name = Full_web_mobile#1(primary key)
-    #PARAM deviceid = '0000d81b00006200'
-    #PARAM profile = 'mobile' or 'wearable' or 'tv'
-    #PARAM executeType = ExecuteType class
-    #PARAM suites = TctShellSuite []
-    #PARAM tizenVer = 'tizen_web_2.4'
-    #PARAM resultFolderPath = '/opt/tct/tizen_web_2.4/shell/result/'
-    #PARAM stubPort = 8000
-    def __init__(self, name, devmgr, deviceId, profile, executeType, suites, \
-                 tizenVer, resultFolderPath, stubPort=8000, scen_name=None):
-        self.suites = []
-        self.name = name
-        self.devmgr = devmgr
-        self.deviceId = deviceId
-        self.buildId = None
-        self.profile = profile
-        self.executeType = executeType
-        self.unpass = None
-        self.scen_name = scen_name
-        for suite in suites:
-            LOGGER.info("List: suite's name = %s" % str(suite.getSuiteName()))
-            self.suites.append(suite)
-        self.tizenVer = tizenVer
-        self.resultFolderPath = resultFolderPath
-        self.expectedTime = 0
-        self.scen_resultFolderPath = None
-        self.stubPort = stubPort
-        self.planLock = Lock()
-        if self.resultFolderPath is None:
-            folderName = self.name + "_" + \
-                    datetime.datetime.now().strftime('%Y-%m-%d_%H:%M:%S.%f')
-            self.resultFolderPath = Constants.RESULT_FOLDER \
-                    % (self.tizenVer, folderName)
-
-    def acquire(self):
-        self.planLock.acquire(True)
-
-    def release(self):
-        self.planLock.release()
-
-    def addExpectedTime(self, etime):
-        self.expectedTime += etime
-
-    def addSuite(self, suite):
-        self.suites.append(suite)
-
-    def getPlanName(self):
-        return self.name
-
-    def getProfile(self):
-        return self.profile
-
-    def getSuites(self):
-        return self.suites
-
-    def getDeviceId(self):
-        return self.deviceId
-
-    def setDeviceId(self, deviceId):
-        self.acquire()
-        if self.deviceId is None:
-            LOGGER.debug("plan [%s] now has device ID [%s]" \
-                    % (self.getPlanName(), deviceId))
-            self.deviceId = deviceId
-        self.release()
-
-    def getBuildId(self):
-        if not self.buildId:
-            dev = self.devmgr.getDevice(self.deviceId)
-            if dev:
-                self.buildId = dev.getDeviceBuildId()
-
-        return self.buildId
-
-    def isRunning(self):
-        return self.isRun
-
-    def setRunning(self, run):
-        self.isRun = run
-
-    def isFinished(self):
-        return self.isFinish
-
-    def isReRunning(self):
-        return self.isRerun
-
-    def setRerunning(self, rerun):
-        self.isRerun = rerun
-
-    def getExecuteType(self):
-        return self.executeType
-
-    def getStubPort(self):
-        return self.stubPort
-
-    def getTizenVersion(self):
-        return self.tizenVer
-
-    def setFinished(self):
-        self.isFinish = True
-        MRP_i = MultiRunnPlan.getInstance()
-        MRP_i.notify()
-
-    def getUnpass(self):
-        return self.unpass
-
-    def setUnpass(self, unpass):
-        if self.unpass is None or self.unpass == False:
-            self.unpass = unpass
-
-    def getResultFolderPath(self):
-        '''
-        self.acquire()
-        if self.resultFolderPath is None:
-            LOGGER.error("make result dir path============")
-            folderName = self.name + "_" + \
-                    datetime.datetime.now().strftime('%Y-%m-%d_%H:%M:%S.%f')
-            self.resultFolderPath = Constants.RESULT_FOLDER \
-                    % (self.tizenVer, self.getBuildId(), folderName)
-        self.release()
-        '''
-        return self.resultFolderPath
-
-    #info get Tmp Folder path in device
-    #return String
-    def getDevTctTmpPath(self):
-        return Constants.getDEVICE_SUITE_TARGET(self.tizenVer) + "tmp/"
-
-    def getScenName(self):
-        return self.scen_name
-
-    def setScenResultFolderPath(self, path):
-        self.scen_resultFolderPath = path
-
-    def getScenResultFolderPath(self):
-        self.acquire()
-        if not self.scen_resultFolderPath and self.getScenName():
-            folderName = "scenario_" + self.getScenName() + '_' \
-                    + datetime.datetime.now().strftime('%Y-%m-%d_%H:%M:%S.%f')
-            self.scen_resultFolderPath = Constants.RESULT_FOLDER \
-                    % (self.tizenVer, self.getBuildId(), folderName)
-        self.release()
-        return self.scen_resultFolderPath
-
-    def setup_distribute(self):
-        self.devmgr.loadDeviceList()
-        runningDevs = self.devmgr.getSdbDeviceList()
-        if len(runningDevs) < 1:
-            LOGGER.error("No device connected for distribute mode")
-            return False
-        LOGGER.info("Plan [%s] will be distributed to %d devices: %s" \
-                % (self.name, len(runningDevs), \
-                str([dev.devId for dev in runningDevs])))
-        self.deviceId = None
-        self.sortSuites()
-        return True
-
-    def sortSuites(self):
-        sorted_suites = []
-        suites = self.getSuites()
-        connection_suite = None
-        for suite in suites:
-            suite_name = suite.getSuiteName()
-            if suite_name == 'tct-connection-native-utc':
-                connection_suite = suite
-                continue
-
-            autoCount = int(suite.getAutoNum())
-            category = suite.category
-            if category and category.find('Runtime') > -1:
-                etime = autoCount * (Constants.SUITE_TEST_EXPECTED_TIME + 2)
-            else:
-                etime = (autoCount * 2) + Constants.SUITE_TEST_EXPECTED_TIME
-
-            suite.setExpectedTime(etime)
-            sorted_suites.append(suite)
-        sorted_suites.sort(key=lambda x: x.expectedTime, reverse=True)
-        if connection_suite:
-            sorted_suites.append(connection_suite)
-
-        self.suites = sorted_suites
-
-
-class TctShellSuite:
-    #PARAM suiteName = 'tct-capability-tests'
-    #PARAM tcName = 'caps_displayresolution'
-    #PARAM auto_num = 12
-    #PARAM manual_num = 15
-    #PARAM suite_pkg_name = 'common/tct-capability-tests-2.4.zip'
-    #PARAM launcher = 'WRTLauncher'
-    #PARAM category = 'Compliance'
-    #PARAM tizenV = 'tizen_web_2.4'
-    def __init__(self, suiteName, tcName, auto_num, manual_num, \
-            suite_pkg_name, launcher, category, tizenV, skip_count, skip_tc, \
-            devmgr, pre_test, post_test, is_make_ne=0):
-        self.suiteName = suiteName
-        self.tcName = tcName
-        self.auto_num = auto_num
-        self.manual_num = manual_num
-        self.suite_pkg_name = suite_pkg_name
-        self.launcher = launcher
-        #category can be None
-        self.category = category
-        self.tizenV = tizenV
-        self.expectedTime = 0
-        self.runErrorStatus = False
-        self.noAuto = False
-        self.noManual = False
-        self.skip_count = skip_count
-        self.skip_tc = skip_tc
-        self.devmgr = devmgr
-        self.pre_test = pre_test
-        self.post_test = post_test
-        self.is_make_ne = is_make_ne
-
-    def _liteCommand(self, deviceId, resultFolder, extype, \
-            tcName, isRerun, stubPort, isSkip=None, reverse_tests=None):
-        lcmd = ""
-        if self.tizenV and \
-            (self.tizenV.find("web") > -1 or self.tizenV.find("csharp") > -1):
-            lcmd += Constants.LITE_CMD2 + " "
-        else:
-            lcmd += Constants.LITE_CMD1 + " "
-
-        # -- priority
-        if Constants.PRIORITY_VALUE:
-            lcmd += Constants.PRIORITY
-
-        lcmd += Constants.LITE_DEVICE_PARAM + " "
-
-        if isSkip:
-            lcmd += 'None' + " "
-        elif self.is_make_ne != 0:
-            lcmd += 'NE:{}_{}'.format(str(self.is_make_ne), \
-                str(deviceId)) + " "
-        else:
-            lcmd += str(deviceId) + " "
-
-        if isRerun:
-            lcmd += Constants.LOCAL_PRE
-            lcmd += os.path.join(resultFolder, \
-                    self.suiteName + Constants.RERUN_SUFFIX) + " "
-        elif reverse_tests is not None:
-            lcmd += Constants.LOCAL_PRE
-            lcmd += reverse_tests + " "
-        else:
-            if self.tizenV.find('csharp') > -1 or self.tizenV.find('web') > -1 or deviceId is None:
-                lcmd += Constants.LOCAL_PRE
-                lcmd += (Constants.LOCAL_SHELL_TEMP_PATH % deviceId)
-                lcmd += "opt/" + self.suiteName + "/"
-                lcmd += Constants.DEVICE_SUITE_DEF + " "
-            else:
-                lcmd += Constants.DEVICE_PRE
-                lcmd += Constants.getDEVICE_SUITE_FOLDER(self.tizenV)
-                lcmd += self.suiteName + "/"
-                lcmd += Constants.DEVICE_SUITE_DEF + " "
-
-        lcmd += extype.toLiteParam() + " "
-        lcmd += Constants.LITE_NON_ACTIVE_PARAM + " "
-
-        if tcName is not None:
-            lcmd += Constants.TESTCASE_ID + " "
-            lcmd += tcName + " "
-
-        lcmd += "--tizen-version" + " "
-        lcmd += self.tizenV + " "
-
-        lcmd += "--stub-port" + " "
-        lcmd += str(stubPort) + " "
-
-        if self.skip_tc:
-            lcmd += "--skip-tc "
-            for tc in self.skip_tc:
-                lcmd += str(tc)
-                lcmd += " "
-
-        if self.tizenV and (self.tizenV.find("web") > -1 or self.tizenV.find('csharp') > -1):
-            lcmd += Constants.EXT_TYPE_PARAM + " "
-            lcmd += Constants.COMM_TYPE_PARAM + " "
-            lcmd += Constants.ENV_TYPE_PARAM + " "
-        else:
-            lcmd += Constants.LITE_E_PARAM + " "
-
-        if deviceId:
-            lcmd += Constants.LITE_CAPABILITY_PARAM + " "
-            lcmd += Constants.LOCAL_CAPABILITY_PATH % deviceId + " "
-
-        lcmd += Constants.LITE_OUTPUT_PARAM
-        lcmd += os.path.join(resultFolder, self.suiteName)
-
-        if isRerun:
-            if extype.getCurrType() == ExecuteType.e_manual:
-                lcmd += Constants.RERUN_MANUAL_RESULT_SUFFIX + " "
-            else:
-                lcmd += Constants.RERUN_AUTO_RESULT_SUFFIX + " "
-
-            lcmd += " --rerun"
-        else:
-            if extype.getCurrType() == ExecuteType.e_manual:
-                lcmd += Constants.MANUAL_RESULT_SUFFIX + " "
-            else:
-                lcmd += Constants.AUTO_RESULT_SUFFIX + " "
-
-        return lcmd
-
-    def executePlanAuto(self, deviceId, resultFolder, tcName, isRerun, \
-            stubport):
-        self.executePlaninLite(deviceId, resultFolder, ExecuteType('Auto'), \
-                tcName, isRerun, stubport)
-
-    def executePlanManual(self, deviceId, resultFolder, tcName, isRerun, \
-            stubport):
-        self.executePlaninLite(deviceId, resultFolder, ExecuteType('Manual'), \
-                tcName, isRerun, stubport)
-
-    def executePlaninLite(self, deviceId, resultFolder, exeType, tcName, \
-            isRerun, stubport):
-        exCmd = self._liteCommand(deviceId, resultFolder, exeType, tcName, \
-                isRerun, stubport)
-
-        isPass = True
-        if deviceId:
-            isPass = SdbManager.hostLiteCommand(exCmd, self.skip_count)
-        else:
-            SdbManager.hostRecLiteCommand(exCmd)
-            return None
-
-        if isPass is False:
-            cmd = ""
-            if self.tizenV.find("native") > -1 or self.tizenV.find("2.4") > -1:
-                tests = Constants.getDEVICE_TESTS_FILE(self.tizenV) % self.suiteName
-                cmd = "ps aux | grep 'python /opt/testkit/lite[0-9].[0-9]/testkit-lite -f device:%s'" % tests
-            else:
-                tests = Constants.LOCAL_SHELL_TEMP_PATH % deviceId + "opt/" + self.suiteName + "/tests.xml"
-                cmd = "ps aux | grep 'python /opt/testkit/lite[0-9].[0-9]/testkit-lite -f %s'" % tests
-
-            result = str(SdbManager.hostCommandwithResult(cmd))
-            grep_lines = result.split('\n')
-            for line in grep_lines:
-                if line and len(line) > 0 and line.find(self.suiteName) > -1:
-                    proc_id = line.split()[1]
-                    SdbManager.hostCommand('kill -9 %s' % proc_id)
-                    if self.tizenV and (self.tizenV.find("web") > -1 or self.tizenV.find("csharp") > -1):
-                        exCmd = self._liteCommand(deviceId, resultFolder, exeType, tcName, \
-                             isRerun, stubport, True)
-                        SdbManager.hostRecLiteCommand(exCmd)
-                    else:
-                        reverse_tests = self._naitve_installSuiteinHost()
-                        exCmd = self._liteCommand(deviceId, resultFolder, exeType, tcName, \
-                             isRerun, stubport, True, reverse_tests)
-                        SdbManager.hostRecLiteCommand(exCmd)
-                    LOGGER.error("[skip package : %s]" % self.suiteName)
-                    break
-
-    def _native_installSuiteinHost(self):
-        hostTmpFolder = Constants.LOCAL_SHELL_TEMP_PATH % None
-        localSuitePath = Constants.SUITES_REPOSITORY \
-            % self.tizenV + self.suite_pkg_name
-        self._installSuiteinHost(None, localSuitePath, hostTmpFolder)
-        tmp_suite = hostTmpFolder + "opt/" + self.suiteName + "/tests.xml"
-        return tmp_suite
-
-    def getSuitePackageName(self):
-        return self.suite_pkg_name
-
-    def getSuiteName(self):
-        return self.suiteName
-
-    def getSuiteZipName(self):
-        suiteFile = self.suite_pkg_name.split('/')
-        return suiteFile[1]
-
-    def getSuiteFullPath(self):
-        return os.path.join(Constants.SUITES_REPOSITORY \
-                % self.tizenV, self.suite_pkg_name)
-
-    def checkExistSuiteFile(self):
-        return os.path.isfile(self.getSuiteFullPath())
-
-    def _fileCopy(self, src, destDir):
-        if not Constants.checkFileExists(src):
-            LOGGER.warning("The '%s' file exists error" % src)
-
-        if not os.path.exists(destDir):
-            os.makedirs(destDir, mode=0o777)
-
-        shutil.copy(src, destDir)
-
-    def getTestCase(self):
-        return self.tcName
-
-    def getAutoNum(self):
-        return self.auto_num
-
-    def getManualNum(self):
-        return self.manual_num
-
-    def getExpectedTime(self):
-        return self.expectedTime
-
-    def setExpectedTime(self, etime):
-        self.expectedTime = etime
-
-    def setRunErrorStatus(self, status):
-        self.runErrorStatus = status
-
-    def getNoAuto(self):
-        return self.noAuto
-
-    def getNoManual(self):
-        return self.noManual
-
-    def setNoAuto(self):
-        self.noAuto = True
-
-    def setNoManual(self):
-        self.noManual = True
-
-    def _sdb_recov(self, _devid):
-        LOGGER.error(_devid + " sdb disconnect")
-        self.devmgr.deleteFaultDevice(_devid)
-
-    def _installSuiteinHost(self, _devid, localSuitePath, hostTmpFolder):
-        if not os.path.exists(hostTmpFolder + "opt/" + self.suiteName \
-                + "/" + Constants.INSTALL_ZIP_W3):
-            # copy suite zip file
-            self._fileCopy(localSuitePath, hostTmpFolder)
-
-            # unzip suite zip file
-            unzip_cmd = Constants.UNZIP + " " + hostTmpFolder \
-                    + self.getSuiteZipName() + " -d " + hostTmpFolder
-            SdbManager.hostCommand(unzip_cmd, 300)
-
-        if _devid:
-            try:
-                inst_cmd = "python " + hostTmpFolder + "opt/" + self.suiteName \
-                    + "/" + Constants.INSTALL_ZIP_W3 + " -i -s " + _devid
-                SdbManager.hostCommand(inst_cmd, 300)
-            except DevNotFoundErr:
-                self._sdb_recov(_devid)
-                return False
-            except Exception:
-                return False
-
-        return True
-
-    def _installSuiteinTarget(self, _devid, localSuitePath, remoteTmpFolder):
-        try:
-            if not SdbManager.sdbPush(_devid, localSuitePath, remoteTmpFolder):
-                return False
-
-            unzip_cmd = Constants.UNZIP + " " + remoteTmpFolder \
-                + self.getSuiteZipName() + " -d " \
-                + remoteTmpFolder.replace("tmp/", "")
-
-            inst_cmd = remoteTmpFolder.replace("/tmp", "") + "opt/" \
-                + self.suiteName + "/" + Constants.INSTALL_ZIP_24
-
-            SdbManager.sdbShell(_devid, unzip_cmd, 300)
-            SdbManager.sdbShell(_devid, inst_cmd, 300)
-        except DevNotFoundErr:
-            self._sdb_recov(_devid)
-            return False
-        except Exception:
-            return False
-
-        return True
-
-    def installSuite(self, deviceId, remoteTmpFolder):
-        localSuitePath = Constants.SUITES_REPOSITORY \
-                % self.tizenV + self.suite_pkg_name
-        instResult = True
-
-        if self.tizenV.find("csharp") > -1 or \
-            self.tizenV.find("web") > -1 or deviceId is None:
-            hostTmpFolder = Constants.LOCAL_SHELL_TEMP_PATH % deviceId
-            instResult = self._installSuiteinHost(\
-                    deviceId, localSuitePath, hostTmpFolder)
-        else:
-            instResult = self._installSuiteinTarget(\
-                    deviceId, localSuitePath, remoteTmpFolder)
-
-        return instResult
-
-    def _unInstallSuiteInHost(self, _devid, hostTmpFolder):
-        suiteZipPath = hostTmpFolder + self.getSuiteZipName()
-        removeSuitezip = "rm -f " + suiteZipPath
-        SdbManager.hostCommand(removeSuitezip)
-
-        localSuitePath = Constants.SUITES_REPOSITORY % self.tizenV + self.suite_pkg_name
-        self._fileCopy(localSuitePath, hostTmpFolder)
-
-        unzip_cmd = Constants.UNZIP + " " + hostTmpFolder \
-                + self.getSuiteZipName() + " -d " + hostTmpFolder
-        SdbManager.hostCommand(unzip_cmd)
-
-        if _devid:
-            try:
-                unInstSuite = "python " + hostTmpFolder + "opt/" \
-                    + self.suiteName + "/" + Constants.UNINSTALL_ZIP_W3 \
-                    + " -s " + _devid
-                SdbManager.hostCommand(unInstSuite,300)
-            except DevNotFoundErr:
-                self._sdb_recov(_devid)
-                return False
-            except Exception:
-                return False
-
-    def _unInstallSuiteInTarget(self, _devid, remoteFolder):
-        try:
-            removeSuite = "rm -f " + remoteFolder + self.getSuiteZipName()
-            unInstSuite = remoteFolder.replace("/tmp", "") + "opt/" \
-                + self.suiteName + "/" + Constants.UNINSTALL_ZIP_24
-
-            SdbManager.sdbShell(_devid, removeSuite, 300)
-            SdbManager.sdbShell(_devid, unInstSuite, 300)
-        except DevNotFoundErr:
-            self._sdb_recov(_devid)
-            return False
-        except Exception:
-            return False
-
-    def runPreTestScript(self, _devid):
-        if self.pre_test:
-            LOGGER.debug("run pre-test script: {}".format(self.pre_test))
-            SdbManager.hostRecLiteCommand('bash {} {} {}'.format(self.pre_test, _devid, self.suiteName))
-
-
-    def runPostTestScript(self, _devid):
-        if self.post_test:
-            LOGGER.debug("run post-test script: {}".format(self.post_test))
-            SdbManager.hostRecLiteCommand('bash {} {} {}'.format(self.post_test, _devid, self.suiteName))
-
-    def unInstallSuite(self, deviceId, remoteFolder):
-        if self.tizenV.find("csharp") > -1 or self.tizenV.find("web") > -1 or deviceId is None:
-            hostTmpFolder = Constants.LOCAL_SHELL_TEMP_PATH % deviceId
-            self._unInstallSuiteInHost(deviceId, hostTmpFolder)
-        else:
-            self._unInstallSuiteInTarget(deviceId, remoteFolder)
-
-    def sdbCheckSuite(self, _devid, suiteName):
-        LOGGER.info("Entering checkSuiteExisted(String suiteName : %s)" \
-                % suiteName)
-        try:
-            if self.tizenV and float(self.tizenV.split('_')[-1]) >= 3.0:
-                rep_suiteName = suiteName.replace("tct-", "")
-                host_check_cmd = "su - owner -c \"app_launcher -l | grep %s\"" \
-                             % rep_suiteName
-                output = SdbManager.sdbShell(_devid, host_check_cmd)
-                if output and output.find(rep_suiteName) > -1:
-                    return True
-                else:
-                    return False
-            else:
-                check_cmd = "wrt-launcher -l | grep " + suiteName
-                resultMsg = SdbManager.sdbShell(_devid, check_cmd)
-                if resultMsg and len(resultMsg) > 0:
-                    return True
-                else:
-                    return False
-        except DevNotFoundErr:
-            self._sdb_recov(_devid)
-            return False
-        except Exception:
-            return False
-
-
-class ExecuteType:
-    e_all = "All"
-    e_auto = "Auto"
-    e_manual = "Manual"
-
-    currType = ""
-
-    def __init__(self, extype):
-        self.currType = extype
-
-    @classmethod
-    def createExecuteType(self, extype):
-        executeType = None
-        if self.e_all.lower() == extype.lower():
-            executeType = ExecuteType(self.e_all)
-        elif self.e_auto.lower() == extype.lower():
-            executeType = ExecuteType(self.e_auto)
-        elif self.e_manual.lower() == extype.lower():
-            executeType = ExecuteType(self.e_manual)
-
-        return executeType
-
-    #return String
-    def toLiteParam(self):
-        if self.currType == self.e_auto:
-            return " -A"
-        elif self.currType == self.e_manual:
-            return " -M"
-        else:
-            return ""
-
-    #return String
-    def getCurrType(self):
-        return self.currType
diff --git a/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/shell/tctshell/shellworker.py b/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/shell/tctshell/shellworker.py
deleted file mode 100755 (executable)
index 5869802..0000000
+++ /dev/null
@@ -1,238 +0,0 @@
-#!/usr/bin/python
-
-import threading
-import time
-from .shellplanner import *
-from .result_summary import ResultSummary
-from .logmanager import LOGGER
-from .sdbmanager import SdbManager
-
-
-class PlanExecutor(threading.Thread):
-    plan = None
-    autoworker = None
-    maualworker = None
-    thCounter = ""
-
-    #Param TctshellPlan
-    def __init__(self, plan, threadCounter, isPreconSet, devmgr):
-        LOGGER.debug("Creating PlanExecutor, with [plan]: " \
-                + plan.getPlanName())
-        self.plan = plan
-        threading.Thread.__init__(self)
-        self.name = plan.getPlanName()
-        self.tcCounter = threadCounter
-        self.threadLock = threading.Lock()
-        self.isPreconSet = isPreconSet
-        self.devmgr = devmgr
-
-    def run(self):
-        time.sleep(1)
-        LOGGER.debug("Starting PlanExecutor")
-
-        self.threadLock.acquire()
-        self.checkWorkerStatus()
-        LOGGER.debug("setStartTest()")
-        self.setStartTest()
-        self.threadLock.release()
-
-        exeType = self.plan.getExecuteType()
-        if exeType.getCurrType() == ExecuteType.e_auto:
-            self.autoworker = AutoSuiteWorker(self.plan, self.devmgr)
-            self.autoworker.auto_test()
-
-        elif exeType.getCurrType() == ExecuteType.e_manual:
-            self.manualworker = ManualSuiteWorker(self.plan)
-            self.manualworker.manual_test()
-
-        else:
-            self.autoworker = AutoSuiteWorker(self.plan, self.devmgr)
-            self.autoworker.auto_test()
-
-            self.manualworker = ManualSuiteWorker(self.plan)
-            self.manualworker.manual_test()
-
-        SdbManager.exportDumpFiles(self.plan.getDeviceId(), \
-                self.plan.getResultFolderPath() + "/dump/")
-
-        summary = ResultSummary(plans=[self.plan])
-        summary.genResults()
-        summary.genSummary()
-        self.setFinishedTest()
-
-    def checkWorkerStatus(self):
-        multiPlanIns = MultiRunnPlan.getInstance()
-        while True:
-            if multiPlanIns.isSelectedDevAvailable(self.plan):
-                break
-            else:
-                time.sleep(5)
-
-    def setStartTest(self):
-        multiPlanIns = MultiRunnPlan.getInstance()
-        multiPlanIns.setCurrPlanRunning(self.plan)
-
-    def setFinishedTest(self):
-        self.plan.setRunning(False)
-        self.plan.setFinished()
-
-
-class AutoSuiteWorker:
-    plan = None
-
-    def __init__(self, plan, devmgr):
-        self.plan = plan
-        self.deviceId = self.plan.getDeviceId()
-        self.devmgr = devmgr
-
-    def auto_test(self):
-        deviceId = self.deviceId
-        suites = self.plan.getSuites()
-        remTmpDir = self.plan.getDevTctTmpPath()
-        resultFolder = self.plan.getResultFolderPath()
-        isRerun = self.plan.isReRunning()
-        stubPort = self.plan.getStubPort()
-
-        for counter, suite in enumerate(suites):
-            if not self._checkDeviceStatus():
-                self._auto_test_inhost(suites[counter:])
-                break
-
-            if suite.getAutoNum() is None or int(suite.getAutoNum()) == 0:
-                suite.setNoAuto()
-                LOGGER.warning('Suite : %s , AutoNum : 0' \
-                        % (suite.getSuiteName()))
-                continue
-
-            if suite.checkExistSuiteFile() == False:
-                LOGGER.error("The %s file Exist error" \
-                        % suite.getSuiteFullPath())
-                continue
-            suiteName = suite.getSuiteName()
-            LOGGER.debug("current suite Auto count : %s " % suite.getAutoNum())
-
-            LOGGER.info('Checking if the suite ' + suiteName \
-                    + 'is installed already.')
-            if suite.sdbCheckSuite(deviceId, suiteName):
-                LOGGER.info('The suite ' + suiteName \
-                        + ' is existed. uninstalling')
-                LOGGER.info('Uninstalling the existed suite ' + suiteName)
-                suite.unInstallSuite(deviceId, remTmpDir)
-
-            LOGGER.info('Uploading the suite ' + suiteName)
-            LOGGER.info('Installing the suite ' + suiteName)
-            suite.installSuite(deviceId, remTmpDir)
-            LOGGER.info('Executing the suite ' + suiteName \
-                    + ' in testkit-lite.')
-            suite.executePlanAuto(deviceId, resultFolder, \
-                    suite.getTestCase(), isRerun, stubPort)
-
-            LOGGER.info('removing the suite pkg file of the suite ' \
-                    + suiteName)
-            LOGGER.info('Uninstalling the suite ' + suiteName)
-            suite.unInstallSuite(deviceId, remTmpDir)
-
-        LOGGER.info("Finished to execute all auto test-cases")
-
-    def _auto_test_inhost(self, suites):
-        deviceId = None
-        remTmpDir = self.plan.getDevTctTmpPath()
-        resultFolder = self.plan.getResultFolderPath()
-        isRerun = self.plan.isReRunning()
-        stubPort = self.plan.getStubPort()
-
-        for suite in suites:
-            if suite.getAutoNum() is None or int(suite.getAutoNum()) == 0:
-                suite.setNoAuto()
-                LOGGER.warning('Suite : %s , AutoNum : 0' \
-                        % (suite.getSuiteName()))
-                continue
-
-            suiteName = suite.getSuiteName()
-            LOGGER.info('Uploading the suite ' + suiteName)
-            LOGGER.info('Installing the suite ' + suiteName)
-            suite.installSuite(deviceId, remTmpDir)
-            LOGGER.info('Executing the suite ' + suiteName \
-                    + ' in testkit-lite.')
-            suite.executePlanAuto(deviceId, resultFolder, \
-                    suite.getTestCase(), isRerun, stubPort)
-
-            LOGGER.info('removing the suite pkg file of the suite ' \
-                    + suiteName)
-            LOGGER.info('Uninstalling the suite ' + suiteName)
-            suite.unInstallSuite(deviceId, remTmpDir)
-
-            LOGGER.debug("current suite Auto count : %s " % suite.getAutoNum())
-            LOGGER.info("Finished to execute auto suite: [%s]" % suiteName)
-
-    def _checkDeviceStatus(self):
-        time_waited = 0
-        reboot_tried = False
-        while True:
-            if not self.devmgr.isDeviceAvailable(self.deviceId):
-                if time_waited >= Constants.NO_WORKERS_TIMEOUT:
-                    LOGGER.error("Rebooting timeout device : %s" \
-                            % self.deviceId)
-                    return False
-                if reboot_tried:
-                    waiting_time = 10
-                else:
-                    waiting_time = Constants.RECOVERY_TIME
-                LOGGER.error("Please reboot device : %s" % self.deviceId)
-                time.sleep(waiting_time)
-                time_waited += waiting_time
-                reboot_tried = True
-            else:
-                break
-        return True
-
-
-class ManualSuiteWorker:
-    plan = None
-
-    def __init__(self, plan):
-        self.plan = plan
-
-    def manual_test(self):
-        deviceId = self.plan.getDeviceId()
-        suites = self.plan.getSuites()
-        resultFolder = self.plan.getResultFolderPath()
-        remTmpDir = self.plan.getDevTctTmpPath()
-        isRerun = self.plan.isReRunning()
-        stubPort = self.plan.getStubPort()
-        for suite in suites:
-            if suite.getManualNum() is None or int(suite.getManualNum()) == 0:
-                suite.setNoManual()
-                LOGGER.warning('Suite : %s , ManualNum : 0' \
-                        % (suite.getSuiteName()))
-                continue
-            if suite.checkExistSuiteFile() == False:
-                LOGGER.error("The %s file Exist error" % self.getSuiteFullPath)
-                continue
-            suiteName = suite.getSuiteName()
-            LOGGER.debug("current suite Manual count : %s " \
-                    % suite.getManualNum())
-
-            LOGGER.info('Checking if the suite ' + suiteName \
-                    + 'is installed already.')
-            if suite.sdbCheckSuite(deviceId, suiteName):
-                LOGGER.info('The suite ' + suiteName \
-                        + ' is existed. uninstalling')
-                LOGGER.info('Uninstalling the existed suite ' + suiteName)
-                suite.unInstallSuite(deviceId, remTmpDir)
-
-            LOGGER.info('Uploading the suite ' + suiteName)
-            LOGGER.info('Installing the suite ' + suiteName)
-
-            suite.installSuite(deviceId, remTmpDir)
-            LOGGER.info('Executing the suite ' + suiteName \
-                    + ' in testkit-lite.')
-            suite.executePlanManual(deviceId, resultFolder, \
-                    suite.getTestCase(), isRerun, stubPort)
-
-            LOGGER.info('removing the suite pkg file of the suite ' \
-                    + suiteName)
-            LOGGER.info('Uninstalling the suite ' + suiteName)
-            suite.unInstallSuite(deviceId, remTmpDir)
-
-        LOGGER.info("Finished to execute all manual test-cases")
diff --git a/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/shell/tctshell/shellwrapper.py b/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/shell/tctshell/shellwrapper.py
deleted file mode 100755 (executable)
index aac9e0b..0000000
+++ /dev/null
@@ -1,806 +0,0 @@
-#!/usr/bin/python
-
-import os
-import sys
-import glob
-from optparse import *
-from .constants import Constants
-import xml.etree.ElementTree as etree
-from .shellplanner import ExecuteType
-from .devicemanager import DeviceManager
-from .logmanager import LOGGER
-
-
-#show all available suites
-def show_available_suites(option, opt_str, value, parser):
-    LOGGER.info("Test Suites:...\n")
-    repos = Constants.ALL_PROFILES
-    repos.append('common')
-    repos.append('common-iot')
-    os.chdir(Constants.TCT_HOME)
-    versions = sorted(glob.glob("tizen_*"))
-    for ver in versions:
-        LOGGER.info("version : %s" % ver)
-        for tp in repos:
-            LOGGER.info("        profile : %s" % tp)
-            if not os.path.isdir(Constants.SUITES_REPOSITORY % (ver) + tp):
-                continue
-            os.chdir(Constants.SUITES_REPOSITORY % (ver) + tp)
-            zips = sorted(glob.glob("*.zip"))
-            for files in zips:
-                #without ".zip"
-                LOGGER.info("                %s" % files[:-4])
-    sys.exit(1)
-
-
-def show_result_files():
-    os.chdir(Constants.TCT_HOME)
-    LOGGER.info("\n  *Result Folder Absolute Path*")
-    versions = sorted(glob.glob("tizen_*"))
-    for ver in versions:
-        if not os.path.isdir("/opt/tct/%s/shell/result/" % ver):
-            continue
-        os.chdir("/opt/tct/%s/shell/result/" % ver)
-        buildids = sorted(glob.glob("*"))
-        for buildid in buildids:
-            if buildid == "latest" or buildid == "Untitled Folder":
-                continue
-            os.chdir(Constants.RESULT_REPO % (ver, buildid))
-            results = sorted(glob.glob("*"))
-            for result in results:
-                os.chdir(Constants.RESULT_REPO % (ver, buildid))
-                if not os.path.isdir(os.path.abspath(result)):
-                    continue
-                LOGGER.info("    %s" % os.path.abspath(result))
-
-    LOGGER.info('')
-    sys.exit(1)
-
-
-def print_planfolder(option, opt_str, value, parser):
-    LOGGER.info("Shell plan folder path : \'%s\'" % Constants.TCT_PLAN_FOLDER)
-    ret = os.system("tree %s" % Constants.TCT_PLAN_FOLDER)
-    if ret:
-        LOGGER.error("The program \'tree\' is currently not installed. \
-You can install it by typing : apt-get install tree")
-    sys.exit(1)
-
-
-def print_resultfolder(option, opt_str, value, parser):
-    os.chdir(Constants.TCT_HOME)
-    for tizenV in glob.glob("tizen_*"):
-        resultFolder = (Constants.RESULT_REPO % (tizenV, ""))[:-1]
-        if os.path.isdir(resultFolder):
-            ret = os.system("tree -L 3 %s" % resultFolder)
-            if ret:
-                LOGGER.error("The program \'tree\' is currently not installed. \
-You can install it by typing : apt-get install tree")
-
-    show_result_files()
-    sys.exit(1)
-
-
-def invoke_sdb_devices(option, opt_str, value, parser):
-    os.system(Constants.SDB_DEVICES)
-    sys.exit(1)
-
-
-# version option
-def print_version(option, opt_str, value, parser):
-    LOGGER.info("TCTSHELL Version : %s " % Constants.TCT_VERSION)
-    sys.exit(0)
-
-
-def varnarg(option, opt_str, value, parser):
-    """ parser srg"""
-    value = []
-    import re
-    for arg in parser.rargs:
-        if re.search('^--.+', arg) or re.search('^-[\D]', arg):
-            break
-        value.append(arg)
-
-    del parser.rargs[:len(value)]
-    setattr(parser.values, option.dest, value)
-
-
-class IntentionType:
-    TestScenario = 0
-    TestPlan = 1
-    TestSuite = 2
-    TestCase = 3
-    AutoPlan = 4
-    DistPlan = 5
-    TestProfile = 6
-
-
-class ShellWrapper:
-    def __init__(self, devmgr):
-        self.devmgr = devmgr
-        self.running_mode = None
-        self.options = None
-        self.USAGE = "\n\
-    run examples: \n\
-        tct-shell --scenario <smoewhere>/scenario.xml\n\
-        tct-shell --testplan  <somewhere>/testplan.xml\n\
-        tct-shell --test package1 package2 ... packageN\n\
-        tct-shell --test package1 --id caps_screenSizeNormal\n\
-        tct-shell --rerun-fail '<somewhere>/result_folder/\n\
-    \n\
-    show examples: \n\
-        tct-shell --help\n\
-        tct-shell --plan-list\n\
-        tct-shell --result-list\n\
-        tct-shell --device-lite\n\
-        tct-shell --all-suites\n\
-    \n\
-    Note: \n\
-        1) Proxy settings should be disabled when execute webapi packages\n\
-        2) run command 'tct-shell', it might not be able to locate related module, \n\
-           run command 'export PYTHONPATH=/usr/lib/python2.7/site-packages' to resolve this issue"
-
-    def print_usage(self):
-        print (self.USAGE)
-
-    def parse_options(self, argv):
-        option_list = [
-            make_option("--scenario", "-s", dest="scenario_file", \
-                    action="callback", callback=varnarg, \
-                    help="Specify the scenario.xml as the test plan."),
-            make_option("--testplan", "-p", dest="testplan_file", \
-                    action="callback", callback=varnarg, \
-                    help="Specify the testplan.xml as the test plan."),
-            make_option("--profile", "-f", dest="profile", action="callback", \
-                    callback=varnarg, help="Specify testing profile. [mobile,wearable,tv]"),
-            make_option("--test", "-t", dest="suites", action="callback", \
-                    callback=varnarg, help="Specify testing suites. If more than one suite is provided, list them all and separate them with whitespace"),
-            make_option("--id", dest="testcase_id", action="callback", \
-                    callback=varnarg, help="Specify the ID of a test case to run"),
-            make_option("--rerun-fail", dest="fail_result_xml", \
-                    action="callback", callback=varnarg,
-                        help="Rerun all failed test cases, according to the specified XML."),
-            make_option("--distribute", dest="dist_mode",action="callback", callback=varnarg, \
-                    help="Specify the testplan.xml for distributing a plan to multiple devices"),
-            make_option("--all", "-A", dest="all_tc", action="store_true", \
-                    help="All test cases will be executed."),
-            make_option("--manual", "-M", dest="only_manual", \
-                    action="store_true", help="Only manual test cases will be executed"),
-            make_option("--tizen-version", dest="tizenversion", \
-                    action="callback", callback=varnarg, \
-                    help="Specify the name of tizen-version. The tizen-version is defined in the local repository. and its path is '/opt/tct/'"),
-            make_option("--stub-port", dest="stubport", action="callback", \
-                    callback=varnarg, help="Specify a port number. Network port used by the testkit-stub"),
-            make_option("--deviceid", "-d", dest="deviceid", \
-                    action="callback", callback=varnarg, \
-                    help="Set sdb device serial information."),
-            make_option("--dbutedevid", dest="dbutedevid", action="callback", callback=varnarg, help="Set sdb device serial information for distribute mode"),
-            make_option("--disable", dest="disable_preconfigure", action="store_false", default=True, help="disable the function of pre_configure"),
-            make_option("--output", "-o", dest="resultfile", \
-                    action="callback", callback=varnarg,
-                        help="Specify the output file for result XML. If more than one test xml file provided, results will be merged into this outputfile"),
-            make_option("--timeout", dest="run_timeout", action="callback", \
-                    callback=varnarg, help="Set the end time of test (unit : minute"),
-            make_option("--skip-package", dest="skip_package", action="callback", \
-                    callback=varnarg, help="Specify the package names for exclude from the test"),
-            make_option("--make-ne", dest="make_ne", action="callback", \
-                    callback=varnarg, help="Spectify the package names for make NE of results"),
-            make_option("--skip-count", dest="skip_count", action="callback", \
-                    callback=varnarg, help="Specify the fail/block/na count. The test is terminated when the same skip-count value and fail/block/na count on the result"),
-            make_option("--skip-tc", dest="skip_tc", action="callback", \
-                    callback=varnarg, help="Specify the testcase id for exclude from the test"),
-            make_option("--version", dest="version_info", action="callback", \
-                    callback=print_version, help="Show version information"),
-            make_option("--all-suites", dest="show_suites", \
-                    action="callback", callback=show_available_suites,
-                        help="Show all available test-suites in the local repository \'/opt/tct/\'"),
-            make_option("--plan-list", dest="show_plan_folder", \
-                    action="callback", callback=print_planfolder,
-                    help="List all existed plans in the Plan directory. The plan directory is defined in the configuration file named CONFIG, and its path is :'/opt/tools/shell/CONFIG'"),
-            make_option("--result-list", dest="show_all_result", \
-                    action="callback", callback=print_resultfolder,
-                    help="List all history results in the result directory. and its path is :'/opt/tct/{tizen-version}/shell/result/'"),
-            make_option("--device-list", dest="show_all_device", \
-                    action="callback", callback=invoke_sdb_devices, \
-                    help="List all connected devices. just same with 'sdb devices'"),
-            make_option("--log", "-l", dest="loglevel", action="callback", callback=varnarg,
-                    help="Set Log level. Logs that are less severe than the level will be ignored. Log levels (in descending severity order): [CRITICAL, ERROR, WARNING, NOTSET, INFO, DEBUG]"),
-            make_option("--make-summary", dest="makesummary",\
-                    action="callback", callback=varnarg, help="Specify the result folder. When the test is not abnomally terminated. you can create summary file use to this option"),
-            make_option("--tracking-dump", dest="trackingdump", action="callback", callback=varnarg,
-                    help="Specify the file(dump) names expected (for distribute run mode). After tracking the file(dump) generated by test and exits the tct-shell tool"),
-            make_option("--pre-test", dest="pre_test", action="callback", \
-                    callback=varnarg, help="Before running suite, run a given script before installing testsuite."),
-            make_option("--post-test", dest="post_test", action="callback", \
-                    callback=varnarg, help="After running suite, run a given script before uninstalling testsuite.")
-        ]
-
-        # detect non-params
-        if len(argv) == 1:
-            argv.append("--help")
-
-        PARSERS = OptionParser(option_list=option_list, usage=self.USAGE)
-        (self.options, args) = PARSERS.parse_args()
-
-        #set log level (has to be done first to dislay logs)
-        if self.check_log_level():
-            if self.options.loglevel is None:
-                LOGGER.setLevel(Constants.LOG_LEVELS[Constants.DEFAULT_LOG_LEVEL])
-            else:
-                LOGGER.setLevel(Constants.LOG_LEVELS[self.options.loglevel[0]])
-
-        if self.is_dist_mode():
-            conflicts = ["--distribute"]
-            if self.options.deviceid is not None:
-                conflicts.append("--deviceid")
-            self.conflict_exit(conflicts)
-            Constants.setDistMode(True)
-
-        if self.is_testplan_mode():
-            conflicts = ["--testplan"]
-            if self.options.scenario_file is not None:
-                conflicts.append("--scenario")
-            if self.options.fail_result_xml is not None:
-                conflicts.append("--rerun-fail")
-            if self.options.profile is not None:
-                conflicts.append("--profile")
-            if self.options.suites is not None:
-                conflicts.append("--test")
-            if self.options.testcase_id is not None:
-                conflicts.append("--id")
-            self.conflict_exit(conflicts)
-            self.running_mode = Constants.RUNNING_MODE_PLAN
-
-        elif self.is_scenario_mode():
-            conflicts = ["--scenario"]
-            if self.options.dist_mode is not None:
-                conflicts.append("--distribute")
-            if self.options.fail_result_xml is not None:
-                conflicts.append("--rerun-fail")
-            if self.options.profile is not None:
-                conflicts.append("--profile")
-            if self.options.suites is not None:
-                conflicts.append("--test")
-            if self.options.testcase_id is not None:
-                conflicts.append("--id")
-            if self.options.deviceid is not None:
-                conflicts.append("--deviceid")
-            if self.options.makesummary is not None:
-                conflicts.append("--make-summary")
-            self.conflict_exit(conflicts)
-            self.running_mode = Constants.RUNNING_MODE_SCEN
-            Constants.setScenMode(True)
-
-        elif self.is_fail_rerun_mode():
-            conflicts = ["--rerun-fail"]
-            if self.options.profile is not None:
-                conflicts.append("--profile")
-            if self.options.suites is not None:
-                conflicts.append("--test")
-            if self.options.testcase_id is not None:
-                conflicts.append("--id")
-            if self.options.makesummary is not None:
-                conflicts.append("--make-summary")
-            self.conflict_exit(conflicts)
-            self.running_mode = Constants.RUNNING_MODE_RERUN
-            Constants.setRerunMode(True)
-        elif self.is_profile_mode():
-            conflicts = ["--profile"]
-            if self.options.suites is not None:
-                conflicts.append("--test")
-            if self.options.testcase_id is not None:
-                conflicts.append("--id")
-            self.conflict_exit(conflicts)
-            self.running_mode = Constants.RUNNING_MODE_PROFILE
-        elif self.is_suite_mode():
-            conflicts = ["--test"]
-            if self.options.profile is not None:
-                conflicts.append("--profile")
-            self.running_mode = Constants.RUNNING_MODE_SUITES
-
-        if self.options.all_tc and self.options.only_manual:
-            conflicts = ["--all", "--manual"]
-            self.conflict_exit(conflicts)
-
-        self.check_args_number()
-        self.check_args_exist()
-
-        if not self.options.tizenversion and not self.is_scenario_mode() and not self.is_fail_rerun_mode():
-            LOGGER.error("The default tizen version could not be set.")
-            conflicts = ["--tizen-version"]
-            conflicts.append(None)
-            self.conflict_exit(conflicts)
-
-    def conflict_exit(self, conflicts):
-        if conflicts == None or len(conflicts) <= 1:
-            return
-
-        os.system("tct-shell -h")
-        LOGGER.error("\ntct-shell: Conflicted options: %s" % conflicts)
-        raise
-
-    def check_args_exist(self):
-        opt = ""
-        if self.running_mode == Constants.RUNNING_MODE_PLAN and len(self.options.testplan_file) > 0:
-            if not Constants.checkFileExists(self.options.testplan_file[0]):
-                opt = "--testplan"
-        elif self.running_mode == Constants.RUNNING_MODE_SCEN and len(self.options.scenario_file) > 0:
-            if not Constants.checkFileExists(self.options.scenario_file[0]):
-                opt = "--scenario"
-        elif self.running_mode == Constants.RUNNING_MODE_RERUN and len(self.options.fail_result_xml) > 0:
-            if not Constants.checkFileExists(self.options.fail_result_xml[0]):
-                opt = "--rerun-fail"
-
-        if self.options.tizenversion and len(self.options.tizenversion) > 0:
-            if not self.check_tizen_version():
-                opt = "--tizen-version"
-
-        if self.options.stubport and len(self.options.stubport) > 0:
-            if not self.check_stub_port():
-                opt = "--stub-port"
-
-        if self.options.run_timeout and len(self.options.run_timeout) > 0:
-            if not self.check_run_timeout():
-                opt = "--timeout"
-
-        if self.options.skip_package and len(self.options.skip_package) > 0:
-            if not self.check_skip_package():
-                opt = "--skip-package"
-
-        if self.options.skip_count and len(self.options.skip_count) > 0:
-            if not self.check_skip_count():
-                opt = "--skip-count"
-
-        if self.options.skip_tc and len(self.options.skip_tc) > 0:
-            if not self.check_skip_tc():
-                opt = "--skip-tc"
-
-        if self.options.makesummary and len(self.options.makesummary) > 0:
-            if not self.check_makesummary():
-                opt = "--make-summary"
-
-        if self.options.trackingdump and len(self.options.trackingdump) > 0:
-            if not self.check_tracking_dump():
-                opt = "--tracking-dump"
-        if self.options.make_ne and len(self.options.make_ne) > 0:
-            if not self.check_make_ne():
-                opt = "--make-ne"
-        if self.options.pre_test and len(self.options.pre_test) > 0:
-            if not self.check_pre_test():
-                opt = "--pre-test"
-        if self.options.post_test and len(self.options.post_test) > 0:
-            if not self.check_post_test():
-                opt = "--post-test"
-
-        if len(opt) > 0:
-            os.system("tct-shell -h")
-            LOGGER.error("\ntct-shell: error: \"%s\" option requires a proper argument" % opt)
-            raise
-
-    def check_args_number(self):
-        opt = ""
-        if self.running_mode == Constants.RUNNING_MODE_PLAN and len(self.options.testplan_file) < 1:
-            opt = "--testplan"
-        elif self.running_mode == Constants.RUNNING_MODE_SCEN and len(self.options.scenario_file) < 1:
-            opt = "--scenario"
-        elif self.running_mode == Constants.RUNNING_MODE_RERUN and len(self.options.fail_result_xml) < 1:
-            opt = "--rerun-fail"
-        elif self.running_mode == Constants.RUNNING_MODE_PROFILE and len(self.options.profile) < 1:
-            opt = "--profile"
-        elif self.running_mode == Constants.RUNNING_MODE_SUITES and len(self.options.suites) < 1:
-            opt = "--test"
-        elif self.options.deviceid is not None and len(self.options.deviceid) < 1:
-            opt = "--deviceid"
-        elif self.options.testcase_id is not None and len(self.options.testcase_id) < 1:
-            opt = "--id"
-        elif self.options.tizenversion is not None and len(self.options.tizenversion) < 1:
-            opt = "--tizen-version"
-        elif self.options.stubport is not None and len(self.options.stubport) < 1:
-            opt = "--stub-port"
-        elif self.options.run_timeout is not None and len(self.options.run_timeout) < 1:
-            opt = "--timeout"
-        elif self.options.skip_package is not None and len(self.options.skip_package) < 1:
-            opt = "--skip-package"
-        elif self.options.skip_count is not None and len(self.options.skip_count) < 1:
-            opt = "--skip-count"
-        elif self.options.skip_tc is not None and len(self.options.skip_tc) < 1:
-            opt = "--skip-tc"
-        elif self.options.makesummary is not None and len(self.options.makesummary) < 1:
-            opt = "--make-summary"
-        elif self.options.trackingdump is not None and len(self.options.trackingdump) < 1:
-            opt = "--tracking-dump"
-        elif self.options.make_ne is not None and len(self.options.make_ne) < 1:
-            opt = "--make-ne"
-
-        if len(opt) > 0:
-            os.system("tct-shell -h")
-            LOGGER.error("\ntct-shell: error: \"%s\" option requires an argument" % opt)
-            raise
-
-    def check_log_level(self):
-        if self.options.loglevel is not None:
-            if len(self.options.loglevel) < 1:
-                os.system("tct-shell -h")
-                LOGGER.error("\ntct-shell: error: \"--log\" option requires an argument")
-                raise
-            else:
-                if not self.options.loglevel[0].upper() in ['NOTSET', 'CRITICAL', 'ERROR', 'WARNING', 'INFO', 'DEBUG']:
-                    os.system("tct-shell -h")
-                    LOGGER.error("\ntct-shell: error: \"--log\" option requires a proper argument.")
-                    raise
-
-        return True
-
-    def check_tizen_version(self):
-        tizenversion = self.options.tizenversion[0]
-        if not Constants.checkFileExists(Constants.TCT_HOME + tizenversion):
-            LOGGER.error("A required \'/opt/tct/" + tizenversion + "\' could not be found.")
-            return False
-        else:
-            Constants.set_default_tizenV(tizenversion)
-        return True
-
-    def check_stub_port(self):
-        port = self.options.stubport[0]
-        portLen = len(port)
-        return port.isdigit() and (portLen > 3 and portLen < 6)
-
-    def check_run_timeout(self):
-        timeout = self.options.run_timeout[0]
-        timeoutLen = len(timeout)
-        return timeout.isdigit() and timeoutLen > 0
-
-    def check_skip_package(self):
-        packages = self.options.skip_package[0]
-        packLen = len(packages)
-        return packLen > 0
-
-    def check_skip_count(self):
-        count = self.options.skip_count[0]
-        countLen = len(count)
-        return count.isdigit() and countLen > 0
-
-    def check_skip_tc(self):
-        tc = self.options.skip_tc[0]
-        tcLen = len(tc)
-        return tcLen > 0
-
-    def check_tracking_dump(self):
-        dump_names = self.options.trackingdump[0]
-        dump_names_len = len(dump_names)
-        return dump_names_len > 0
-
-    def check_makesummary(self):
-        return os.path.exists(self.options.makesummary[0])
-
-    def check_make_ne(self):
-        packages = self.options.make_ne[0]
-        packLen = len(packages)
-        return packLen > 0
-
-    def check_pre_test(self):
-        script = self.options.pre_test[0]
-        return os.path.isfile(script)
-
-    def check_post_test(self):
-        script = self.options.post_test[0]
-        return os.path.isfile(script)
-
-    def getIntentionType(self):
-        if self.options.scenario_file is not None:
-            return IntentionType.TestScenario
-        elif self.options.testplan_file is not None:
-            return IntentionType.TestPlan
-        elif self.options.testcase_id is not None:
-            return IntentionType.TestCase
-        elif self.options.suites is not None:
-            return IntentionType.TestSuite
-        elif self.options.profile is not None:
-            return IntentionType.TestProfile
-        return -1
-
-    def get_scenfile(self):
-        return self.options.scenario_file[0]
-
-    def get_planfile(self):
-        if self.is_testplan_mode():
-            return self.options.testplan_file[0]
-
-    def get_profile(self):
-        return self.options.profile[0]
-
-    def get_result_for_rerun(self):
-        return self.options.fail_result_xml[0]
-
-    def get_plan_name(self):
-        plan_name = ""
-        if self.is_testplan_mode():
-            plan_name = os.path.basename(self.get_planfile())[:-4]
-        return plan_name
-
-    def get_scen_name(self):
-        if self.is_scenario_mode():
-            return os.path.basename(self.get_scenfile())[:-4]
-
-    def get_stubPort(self):
-        if self.options.stubport is None:
-            return '8000'
-        else:
-            return self.options.stubport[0]
-
-    def get_run_timeout(self):
-        if self.options.run_timeout is None:
-            return 1440 #24 hour
-        else:
-            return self.options.run_timeout[0]
-
-    def get_makesummarydir(self):
-        return self.options.makesummary[0]
-
-    def get_resultFolderPath(self):
-        if (self.options.resultfile is not None) and (self.options.resultfile[0] is not None):
-            return self.options.resultfile[0]
-
-    def get_deviceId(self):
-        self.devmgr.loadDeviceList()
-        devices = self.devmgr.getSdbDeviceList()
-        if self.options.deviceid:
-            for dev in devices:
-                if dev.devId == self.options.deviceid[0]:
-                    return self.options.deviceid[0]
-            LOGGER.error("Error! [%s] device is not connected" % self.options.deviceid[0])
-            raise
-        elif not self.is_scenario_mode() and not self.is_make_summary_mode():
-            if len(devices) < 1:
-                LOGGER.error("No device is connected")
-                raise Exception('Device connection is required')
-            if len(devices) == 1:
-                LOGGER.info("Executing in device : %s" % devices[0].getDeviceId())
-                return devices[0].getDeviceId()
-            elif len(devices) > 1:
-                LOGGER.info("Connected Devices: ...\n")
-                for dev in devices:
-                    dev._printDevInfo()
-                devId = input("Choose device id : ")
-                while not devId in [dev.getDeviceId() for dev in devices]:
-                    devId = input("Invalid device id!\n\nChoose device id :  \n")
-                LOGGER.info("Executing in device : %s" % devId)
-                return devId
-
-    def get_profile_name(self):
-        plan_file = None
-        profile_name = None
-        if self.is_testplan_mode():
-            plan_file = self.get_planfile()
-        if plan_file:
-            tree = etree.parse(plan_file)
-            root = tree.getroot()
-            if root.get('profile') is not None:
-                profile_name = root.get('profile')
-        return profile_name
-
-    def get_execute_type(self):
-        exe_t = None
-        if self.options.all_tc:
-            exe_t = ExecuteType.createExecuteType("All")
-        elif self.options.only_manual:
-            exe_t = ExecuteType.createExecuteType("Manual")
-        else:
-            exe_t = ExecuteType.createExecuteType("Auto")
-        return exe_t
-
-    def get_tizenV(self):
-        if (self.options.tizenversion is not None) and (self.options.tizenversion[0] is not None):
-            return self.options.tizenversion[0]
-
-    def _chooseProfile(self, path_suites):
-        suite_profiles = {}
-        for suite_path in path_suites:
-            suite_zipname = os.path.basename(suite_path)
-            sprofile = os.path.basename(os.path.dirname(suite_path))
-            if not suite_zipname in suite_profiles:
-                suite_profiles[suite_zipname] = []
-            suite_profiles[suite_zipname].append(sprofile)
-        for suiteName, suiteProfile in suite_profiles.items():
-            suite_name = "-".join(suiteName[:-4].split("-")[:-1])
-            if len(suiteProfile) == 1:
-                suite_profiles[suiteName] = suiteProfile[0]
-                continue
-            LOGGER.info("Multiple profiles for [%s] :" % suite_name)
-            for profile_i in suiteProfile:
-                LOGGER.info(" - %s" % profile_i)
-            suite_profile = None
-            while not suite_profile in suiteProfile:
-                suite_profile = input("\nChoose profile: ")
-            suite_profiles[suiteName] = suite_profile
-        return suite_profiles
-
-    def get_suites(self):
-        suites = []
-        filtered_suites = []
-        suite_repo = Constants.SUITES_REPOSITORY % self.get_tizenV()
-        if self.options.suites:
-            for suite_name in self.options.suites:
-                for profiles in os.listdir(suite_repo):
-                    if profiles == "pkg_infos":
-                        continue
-                    for package in glob.glob(suite_repo + profiles + "/*.zip"):
-                        if package.find(suite_name) > -1:
-                            suites.append(package)
-                if (len(suites) < 1):
-                    LOGGER.error("Error! [%s] suite does not exists" % suite_name)
-
-        suite_profiles = self._chooseProfile(suites)
-        check_profile = None
-        multiProfiles = False
-        for suiteName, suiteProfile in suite_profiles.items():
-            if suiteProfile != 'common':
-                if check_profile is not None and check_profile != suiteProfile:
-                    multiProfiles = True
-                if check_profile is None:
-                    check_profile = suiteProfile
-            filtered_suites.append(os.path.join(suite_repo, suiteProfile, suiteName))
-        if multiProfiles:
-            LOGGER.warning("WARNING: Multiple suites run with different profiles")
-        return filtered_suites
-
-    def get_profile_suites(self):
-        suites = []
-        suite_repo = Constants.SUITES_REPOSITORY % self.get_tizenV()
-        sel_profile = self.get_profile()
-        for profiles in os.listdir(suite_repo):
-            if profiles == "pkg_infos":
-                continue
-            if profiles in sel_profile or profiles == "common":
-                for package in sorted(glob.glob(suite_repo + profiles + "/*.zip")):
-                    suites.append(os.path.join(suite_repo, profiles, package))
-
-        if len(suites) == 0:
-            LOGGER.error('Not found test suites')
-            return None
-
-        return suites
-
-    def get_testcase_id(self):
-        tc_id = ""
-        if self.options.testcase_id is not None:
-            #tc_id = " --id %s" % self.options.testcase_id[0] + " --debug"
-            tc_id = self.options.testcase_id[0]
-        return tc_id
-
-    def get_inst_suites(self):
-        suites = []
-        if self.options.instsuites:
-            for suite_str in self.options.instsuites:
-                suite_str_array = suite_str.split(" ")
-                for suite_name in suite_str_array:
-                    suites.append(suite_name)
-        return suites
-
-    def get_uninst_suites(self):
-        suites = []
-        if self.options.uninstsuites:
-            for suite_str in self.options.uninstsuites:
-                suite_str_array = suite_str.split(" ")
-                for suite_name in suite_str_array:
-                    suites.append(suite_name)
-        return suites
-
-    def get_running_mode(self):
-        return self.running_mode
-
-    def get_skip_package(self):
-        if self.options.skip_package is not None:
-            return self.options.skip_package
-
-    def get_skip_count(self):
-        if (self.options.skip_count is not None) and (self.options.skip_count[0] is not None):
-            return self.options.skip_count[0]
-
-    def get_skip_tc(self):
-        if self.options.skip_tc is not None:
-            return self.options.skip_tc
-
-    def get_tracking_dump(self):
-        if (self.options.trackingdump is not None) and (self.options.trackingdump[0] is not None):
-            return self.options.trackingdump[0]
-
-    def get_make_ne(self):
-        if self.options.make_ne is not None:
-            return self.options.make_ne
-
-    def get_pre_test(self):
-        if self.options.pre_test is not None:
-            return self.options.pre_test[0]
-
-    def get_post_test(self):
-        if self.options.post_test is not None:
-            return self.options.post_test[0]
-
-    def is_testplan_mode(self):
-        return self.options.testplan_file is not None
-
-    def is_scenario_mode(self):
-        return self.options.scenario_file is not None
-
-    def is_profile_mode(self):
-        return self.options.profile
-
-    def is_single_mode(self):
-        return self.options.testcase_id is not None
-
-    def is_enable_preconf_func(self):
-        return self.options.disable_preconfigure
-
-    def is_update_portconf_func(self):
-        return self.options.stubport is not None
-
-    def is_suite_mode(self):
-        return self.options.suites is not None
-
-    def is_fail_rerun_mode(self):
-        return self.options.fail_result_xml is not None
-
-    def is_make_summary_mode(self):
-        return self.options.makesummary is not None
-
-    def is_dist_mode(self):
-        return self.options.dist_mode is not None
-
-    def get_output_param(self):
-        return "-o %s" % self.get_output_file_name()
-
-    def fetch_logs(self, executors):
-        logs = {}
-        for executor in executors:
-            if executor.name == 'ResultManager':
-                continue
-            plan = executor.plan
-            scenFolder = plan.getScenResultFolderPath()
-            planFolder = plan.getResultFolderPath()
-            if not scenFolder in logs:
-                logs[scenFolder] = {}
-            if not planFolder in logs[scenFolder]:
-                logs[scenFolder][planFolder] = []
-            logs[scenFolder][planFolder].append(\
-                    os.path.join(Constants.TCT_LOG_FOLDER, 'MainProcess.log'))
-            logs[scenFolder][planFolder].append(\
-                    os.path.join(Constants.TCT_LOG_FOLDER, 'critical.log'))
-            logs[scenFolder][planFolder].append(\
-                    os.path.join(Constants.TCT_LOG_FOLDER, 'debug.log'))
-            logs[scenFolder][planFolder].append(\
-                    os.path.join(Constants.TCT_LOG_FOLDER, 'error.log'))
-            logs[scenFolder][planFolder].append(\
-                    os.path.join(Constants.TCT_LOG_FOLDER, 'info.log'))
-            logs[scenFolder][planFolder].append(\
-                    os.path.join(Constants.TCT_LOG_FOLDER, 'warning.log'))
-
-            if hasattr(executor, 'all_dev_threads'):
-                for autoPlanExecutor in executor.all_dev_threads:
-                    logs[scenFolder][planFolder].append(\
-                            os.path.join(Constants.TCT_LOG_FOLDER, '%s.log' % \
-                            autoPlanExecutor.name))
-
-                    logs[scenFolder][planFolder].append(\
-                            os.path.join(Constants.TCT_LOG_FOLDER, 'E_%s.log' % \
-                            autoPlanExecutor.name))
-
-        for scenFolder, plan_logs in logs.items():
-            for planFolder, thread_logs in plan_logs.items():
-                for src_logs in thread_logs:
-                    Constants.move_log_file(src_logs, planFolder)
-                    if scenFolder is not None and os.path.isdir(scenFolder):
-                        Constants.move_log_file(src_logs, scenFolder)
-                #Constants.move_log_file(os.path.join(Constants.TCT_LOG_FOLDER, 'ResultManager.log'), planFolder)
-                #Constants.move_log_file(os.path.join(Constants.TCT_LOG_FOLDER, 'MainThread.log'), planFolder)
-            if scenFolder is not None and os.path.isdir(scenFolder):
-                pass
-                #Constants.move_log_file(os.path.join(Constants.TCT_LOG_FOLDER, 'ResultManager.log'), scenFolder)
-                #Constants.move_log_file(os.path.join(Constants.TCT_LOG_FOLDER, 'MainThread.log'), scenFolder)
-
-
-    def getDbuteDevIds(self):
-        return self.options.dbutedevid
-
-    def get_distribute_count(self):
-        if self.options.dist_mode and len(self.options.dist_mode) > 0:
-            return self.options.dist_mode[0]
diff --git a/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/shell/tctshell/testenvironment.py b/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/shell/tctshell/testenvironment.py
deleted file mode 100755 (executable)
index caf521b..0000000
+++ /dev/null
@@ -1,192 +0,0 @@
-#!/usr/bin/python
-import os
-import configparser
-from multiprocessing import Process
-
-from .devicemanager import DeviceManager
-from .sdbmanager import SdbManager
-from .logmanager import LOGGER
-from .constants import Constants
-
-
-class TestEnvironment(Process):
-
-    tizenVer = None
-    deviceId = None
-
-    def __init__(self, tizenVer, deviceId, isPreconSet, queue, devmgr):
-        Process.__init__(self)
-        self.tizenVer = tizenVer
-        self.deviceId = deviceId
-        self.name = "E_{}".format(deviceId)
-        self.isPreconSet = isPreconSet
-        self.queue = queue
-        self.devmgr = devmgr
-
-    def run(self):
-        if not self.isPreconSet:
-            SdbManager.sdbRootOn(self.deviceId)
-        self._isDeviceReady()
-        if self.isPreconSet:
-            self._reset_health_res_indevice()
-
-        if not self._isHealthCheckPassed():
-            self.queue.put('Fail_Healthcheck')
-            return
-
-        if not self._isPreconfigPassed():
-            self.queue.put('Fail_Preconfig')
-            return
-
-        if not self._extractDeviceCapability():
-            self.queue.put('Fail_ExtractDeviceCapability')
-            return
-
-        #SdbManager.resetDumpFiles(self.deviceId)
-
-    def _isDeviceReady(self):
-        if self.deviceId:
-            return self.devmgr.isDeviceAvailable(self.deviceId)
-        else:
-            if self.devmgr.getDeviceSize() == 1:
-                return True
-            else:
-                LOGGER.error("No device is connected, \
-                        please check or try to reconnect it again")
-                return False
-
-    def _reset_health_res_indevice(self):
-        tctDir = Constants.getDEVICE_SUITE_TARGET(self.tizenVer)
-
-        delsuitedir_cmd = "rm -rf " + tctDir + "opt/*"
-        deltmpdir_cmd = "rm -rf " + tctDir + "tmp/*"
-
-        SdbManager.sdbShell(self.deviceId, delsuitedir_cmd)
-        SdbManager.sdbShell(self.deviceId, deltmpdir_cmd)
-
-    def _read_health_check_ini(self):
-        parser = configparser.ConfigParser()
-        if not os.path.exists(\
-                Constants.HEALTH_CHECK_FILE_PATH % self.tizenVer):
-            LOGGER.warning("Can`t find the healthcheck.ini file...")
-            return
-
-        parser.read(Constants.HEALTH_CHECK_FILE_PATH % self.tizenVer)
-        for section in parser.sections():
-            if not section:
-                continue
-            values = []
-            for n, v in parser.items(section):
-                values.append(v.split(","))
-            return values
-
-    def _isHealthCheckPassed(self):
-        healtlist = self._read_health_check_ini()
-        if not healtlist:
-            return False
-        for l in healtlist:
-            if self.tizenVer.find("native") > -1 and l[1].find("tinyweb") > -1:
-                continue
-
-            getcap = ""
-            if self.tizenVer.find("native") > -1 and l[1].find("getCap") > -1:
-                getcap = "ngetCap"
-            else:
-                getcap = l[1].strip()
-
-            command = "python " + \
-                    (Constants.DEVICE_HEALTH_CMD % self.tizenVer) \
-                    + " " + "--deviceid " + self.deviceId \
-                    + " --check" + " --procid=" + getcap
-            try:
-                outLog, errLog = SdbManager.sdbCommand(command, 180)
-            except Exception as ex:
-                LOGGER.error(str(ex))
-                return False
-            '''
-            if exit_code is None:
-                LOGGER.error("The device configuration \
-                        is not right [Health Check : %s]." % l)
-                return False
-            '''
-            LOGGER.info(str(outLog))
-            if str(outLog).find('#ERROR#') > -1 or \
-                    str(outLog).find('#WARNING#') > -1:
-                LOGGER.error(l[0].strip() + ": fail")
-                return False
-            else:
-                LOGGER.info(l[0].strip() + ": pass")
-        LOGGER.info("Return From isHealthCheckPassed, return value : True")
-        return True
-
-    def _extractDeviceCapability(self):
-        capa_file = Constants.LOCAL_CAPABILITY_PATH % self.deviceId
-        LOGGER.debug('capability path : %s' % capa_file)
-        if os.path.exists(capa_file):
-            os.remove(capa_file)
-
-        if not SdbManager.getCapabilityBack(self.deviceId, self.tizenVer):
-            LOGGER.error('Fail to extract the capability.xml from device : ' \
-                    + Constants.getDEVICE_CAPABILITY_PATH(self.tizenVer))
-            return False
-
-        return True
-
-    def _isPreconfigPassed(self):
-        SdbManager.sdbPull(self.deviceId, \
-                Constants.getPRE_CONF_DEVICE_INI(self.tizenVer), \
-                Constants.PRE_CONF_HOST_INI % self.deviceId)
-        if Constants.checkFileExists(\
-                Constants.PRE_CONF_HOST_INI % self.deviceId) is False:
-            LOGGER.error("The %s file does not exist. [ Preconfig Check]" \
-                    % Constants.PRE_CONF_HOST_INI % self.deviceId)
-            return False
-
-        SdbManager.sdbPull(self.deviceId, \
-                Constants.getPRE_CONF_DEVICE_JSON(self.tizenVer), \
-                Constants.PRE_CONF_HOST_JSON % self.deviceId)
-        if Constants.checkFileExists(\
-                Constants.PRE_CONF_HOST_JSON % self.deviceId) is False:
-            LOGGER.error("The %s file does not exist. [ Preconfig Check]" \
-                    % Constants.PRE_CONF_HOST_JSON % self.deviceId)
-            return False
-
-        SdbManager.sdbPull(self.deviceId, \
-                Constants.getPRE_CONF_DEVICE_XML(self.tizenVer), \
-                Constants.PRE_CONF_HOST_XML % self.deviceId)
-        if Constants.checkFileExists(\
-                Constants.PRE_CONF_HOST_XML % self.deviceId) is False:
-            LOGGER.error("The %s file does not exist. [ Preconfig Check]" \
-                    % Constants.PRE_CONF_HOST_XML % self.deviceId)
-            return False
-
-        SdbManager.sdbPull(self.deviceId, \
-                Constants.getPORT_CONF_DEVICE_JSON(self.tizenVer), \
-                Constants.PORT_CONF_HOST_JSON % self.deviceId)
-        if Constants.checkFileExists(\
-                Constants.PORT_CONF_HOST_JSON % self.deviceId) is False:
-            LOGGER.error("The %s file does not exist. [ Preconfig Check]" \
-                    % Constants.PORT_CONF_HOST_JSON % self.deviceId)
-            return False
-
-        SdbManager.sdbPull(self.deviceId, \
-                Constants.getDEVICE_BUILD_INFO_PATH(self.tizenVer), \
-        Constants.LOCAL_BUILD_INFO_PATH % self.deviceId)
-        if Constants.checkFileExists(Constants.LOCAL_BUILD_INFO_PATH % \
-        self.deviceId) is False:
-            LOGGER.error("The %s file does not exist. [ Preconfig Check]" \
-                    % Constants.LOCAL_BUILD_INFO_PATH % self.deviceId)
-            return False
-
-        if self.tizenVer and self.tizenVer.find("native") > -1:
-            SdbManager.sdbPull(self.deviceId, \
-                    Constants.getNAT_CONF_DEVICE_TXT(self.tizenVer), \
-            Constants.NAT_CONF_HOST_TXT % self.deviceId)
-            if Constants.checkFileExists(Constants.NAT_CONF_HOST_TXT \
-                    % self.deviceId) is False:
-                LOGGER.error("The %s file does not exist. [ Preconfig Check]" \
-                        % Constants.LOCAL_BUILD_INFO_PATH % self.deviceId)
-                return False
-
-        LOGGER.info("Return from isPreconfigPassed, return value : True")
-        return True
diff --git a/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/shell/tctshell/testresource/__init__.py b/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/shell/tctshell/testresource/__init__.py
deleted file mode 100755 (executable)
index e69de29..0000000
diff --git a/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/shell/tctshell/testresource/tempFiles/tct-capability-tests-2.4.zip b/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/shell/tctshell/testresource/tempFiles/tct-capability-tests-2.4.zip
deleted file mode 100755 (executable)
index db74342..0000000
Binary files a/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/shell/tctshell/testresource/tempFiles/tct-capability-tests-2.4.zip and /dev/null differ
diff --git a/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/shell/tctshell/testresource/tempFiles/tct-capability-tests-2.4.zip-test b/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/shell/tctshell/testresource/tempFiles/tct-capability-tests-2.4.zip-test
deleted file mode 100755 (executable)
index db74342..0000000
Binary files a/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/shell/tctshell/testresource/tempFiles/tct-capability-tests-2.4.zip-test and /dev/null differ
diff --git a/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/shell/tctshell/testresource/tempFiles/tct-capability-tests-3.0.zip b/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/shell/tctshell/testresource/tempFiles/tct-capability-tests-3.0.zip
deleted file mode 100755 (executable)
index 5724145..0000000
Binary files a/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/shell/tctshell/testresource/tempFiles/tct-capability-tests-3.0.zip and /dev/null differ
diff --git a/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/shell/tctshell/testresource/test_compare_distribute.py b/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/shell/tctshell/testresource/test_compare_distribute.py
deleted file mode 100755 (executable)
index fa32dd8..0000000
+++ /dev/null
@@ -1,34 +0,0 @@
-#!/usr/bin/python
-import os
-import timeit
-from time import sleep
-tctshell_path = os.path.dirname(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
-os.chdir(tctshell_path)
-
-plan_file = '/opt/tools/shell/plan/S_mobile_plan.xml'
-plan_file2 = '/opt/tools/shell/plan/2.4_mobileF.xml'
-
-start_plan = timeit.default_timer()
-os.system("./tct-shell -p %s --tizen-version tizen_web_2.4 -l DEBUG --disable" %plan_file2)
-stop_plan = timeit.default_timer()
-
-start_distribute = timeit.default_timer()
-os.system("./tct-shell --distribute %s --tizen-version tizen_web_2.4 -l DEBUG --disable" %plan_file2)
-stop_distribute = timeit.default_timer()
-
-start_autoplan = timeit.default_timer()
-#os.system('./tct-shell --autoplan %s --tizen-version tizen_web_2.4 -l DEBUG --disable' %plan_file2)
-stop_autoplan = timeit.default_timer()
-
-
-plan_time = stop_plan - start_plan
-autoplan_time = stop_autoplan - start_autoplan
-distribute_time = stop_distribute - start_distribute
-
-print "-"*50
-
-print "\nTest Plan Mode: %d\nAuto Plan Mode: %d\nDistribute Plan Mode: %d\n" %(plan_time, autoplan_time, distribute_time)
-
-print "-"*50
-
-
diff --git a/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/shell/tctshell/testresource/test_constants.py b/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/shell/tctshell/testresource/test_constants.py
deleted file mode 100755 (executable)
index 907c6e9..0000000
+++ /dev/null
@@ -1,43 +0,0 @@
-#!/usr/bin/python
-
-import os, sys
-
-sys.path.append(os.path.abspath(os.path.join(os.path.dirname(__file__), '..')))
-
-from logmanager import LOGGER
-from devicemanager import DeviceManager
-
-class TestConstants:
-
-    DEVICE_IDS = ['0000d81400006200', '0000d81b00006200', '00004e310000324d'] 
-    CONN_DEVICE_ID = None
-    TEST_TEMP_FOLDER = "/tempFiles/"
-    TEST_SUITE_FILE = "tct-capability-tests-2.4.zip"
-
-    @staticmethod
-    def checkConnectedDevice():
-        devIns = DeviceManager._getInstance()
-        devIns._loadDeviceList()
-        
-        for devid in TestConstants.DEVICE_IDS:
-            if devIns._isDeviceAvailable(devid) == True:
-                TestConstants.CONN_DEVICE_ID = devid
-                break
-        if TestConstants.CONN_DEVICE_ID is None:
-            sys.exit("not connect device")
-        else:
-            LOGGER.info("connected " + TestConstants.CONN_DEVICE_ID)
-
-    @staticmethod    
-    def checkTestResourceFile():
-        suiteFilePath = TestConstants.getAbsPath(TestConstants.TEST_TEMP_FOLDER \
-                        + TestConstants.TEST_SUITE_FILE)
-        if os.path.exists(suiteFilePath):
-            LOGGER.info("checked %s file" % suiteFilePath)
-        else:
-            LOGGER.error("The '%s' file exists error" % suiteFilePath)
-
-    @staticmethod
-    def getAbsPath(fileName):
-        return os.path.dirname(os.path.abspath( __file__ )) + fileName
diff --git a/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/shell/tctshell/testresource/test_devicemanager.py b/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/shell/tctshell/testresource/test_devicemanager.py
deleted file mode 100755 (executable)
index 8dc695d..0000000
+++ /dev/null
@@ -1,14 +0,0 @@
-#!/usr/bin/python
-
-import os, sys
-
-sys.path.append(os.path.abspath(os.path.join(os.path.dirname(__file__), '..')))
-
-from devicemanager import *
-
-class TestDeviceManager:
-
-    def __init__(self):
-        
-
-
diff --git a/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/shell/tctshell/testresource/test_logmanager.py b/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/shell/tctshell/testresource/test_logmanager.py
deleted file mode 100755 (executable)
index f367805..0000000
+++ /dev/null
@@ -1,29 +0,0 @@
-import os, sys
-
-sys.path.append(os.path.abspath(os.path.join(os.path.dirname(__file__), '..')))
-
-import threading
-from logmanager import LOGGER
-
-class TestLogManager:
-    def __init__(self):
-       LOGGER.setLevel('DEBUG')
-       self.thread1 = threading.Thread(target=self.thread_test, name="Sample_Thread_1")
-       self.thread2 = threading.Thread(target=self.thread_test, name="Sample_Thread_1")
-       self.thread3 = threading.Thread(target=self.thread_test, name="Sample_Thread_2")
-
-    def thread_test(self):
-       LOGGER.debug("thread starting")
-       for i in range(10):
-           LOGGER.debug("Counting from 0 to 9: %d" %i)
-
-    def start_test(self):
-       LOGGER.debug("Starting Main Test")
-       self.thread1.start()
-       self.thread1.join()
-       self.thread2.start()
-       self.thread3.start()
-
-if __name__ == "__main__":
-    testLog = TestLogManager()
-    testLog.start_test()
diff --git a/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/shell/tctshell/testresource/test_netstatlogger.py b/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/shell/tctshell/testresource/test_netstatlogger.py
deleted file mode 100755 (executable)
index eb5d40e..0000000
+++ /dev/null
@@ -1,24 +0,0 @@
-#!/usr/bin/python
-
-import os, sys
-import time
-
-sys.path.append(os.path.abspath(os.path.join(os.path.dirname(__file__), '..')))
-
-from netstatmonitor import *
-class TestNetstatLogger:
-    def __init__(self):
-        print ''
-
-
-if __name__ == "__main__":
-    print "====================== START TestNetstatLogger ========================"
-    netins = NetstatMonitor('10.113.74.133:26101')
-    netins.start()
-    time.sleep(2)
-    netins.waitThread()
-    time.sleep(2)
-    netins.restartThread()
-    print "====================== FINISH TestNetstatLogger ========================"
diff --git a/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/shell/tctshell/testresource/test_progress.py b/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/shell/tctshell/testresource/test_progress.py
deleted file mode 100755 (executable)
index cb34335..0000000
+++ /dev/null
@@ -1,10 +0,0 @@
-#!/usr/bin/python
-import sys
-import os
-from Tkinter import *
-sys.path.append(os.path.abspath(os.path.join(os.path.dirname(__file__), '..')))
-
-from gui.progress import Demo
-
-prog = Demo(Tk())
-prog.mainloop()
diff --git a/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/shell/tctshell/testresource/test_recovery.py b/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/shell/tctshell/testresource/test_recovery.py
deleted file mode 100755 (executable)
index b7c0719..0000000
+++ /dev/null
@@ -1,28 +0,0 @@
-#!/usr/bin/python
-
-import os, sys
-
-sys.path.append(os.path.abspath(os.path.join(os.path.dirname(__file__), '..')))
-
-from usbmonitor import UsbMonitor
-from devicemanager import DeviceManager
-
-class Testusbmonitor:
-
-    def __init__(self):
-       self.usbins = None
-       self.devins = DeviceManager.getInstance()
-        print ''
-
-    def testThread(self):
-        self.usbins = UsbMonitor()
-        self.usbins.start()
-
-    def killThread(self):
-       self.usbins.finishThread()
-
-if __name__ == "__main__":
-    ins = Testusbmonitor()
-    ins.testThread()
-    raw_input()
-    ins.killThread()
diff --git a/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/shell/tctshell/testresource/test_rerun.py b/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/shell/tctshell/testresource/test_rerun.py
deleted file mode 100755 (executable)
index 87522af..0000000
+++ /dev/null
@@ -1,32 +0,0 @@
-#!/usr/bin/python
-
-import os
-import glob
-
-plan_name = 'plan_rerun_test'
-scen_name = 'scen_rerun_test'
-tizenVer = 'tizen_web_2.4'
-
-tctshell_path = os.path.dirname(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
-os.chdir(tctshell_path)
-print tctshell_path
-rerun_only = None
-while not rerun_only in ['y', 'n']:
-    rerun_only = raw_input("rerun_only? ")
-
-if rerun_only == 'n':
-    os.system('./tct-plan-generator -m tct-capability-tests --tizen-version %s -o /opt/tools/shell/plan/%s.xml' %(tizenVer, plan_name))
-
-    os.system('./tct-scen-generator -p %s,0000d81400006200,%s %s,0000d81b00006200,%s -o /opt/tools/shell/scen/%s.xml' %(plan_name, tizenVer, plan_name, tizenVer, scen_name))
-
-    os.system('./tct-shell -s /opt/tools/shell/scen/%s.xml -l DEBUG' %scen_name)
-
-    raw_input("Start rerun?")
-
-os.chdir('/opt/tct/%s/shell/result/Tizen-2.4.0_Mobile-TM1_20151015.2026' %tizenVer)
-
-for result in glob.glob("*%s*" %scen_name):
-    _result = os.path.abspath(result)
-    os.chdir(tctshell_path)
-    os.system('./tct-shell --rerun-fail %s -l DEBUG' %_result)
-    break
diff --git a/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/shell/tctshell/testresource/test_results.txt b/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/shell/tctshell/testresource/test_results.txt
deleted file mode 100755 (executable)
index 9cde800..0000000
+++ /dev/null
@@ -1,19 +0,0 @@
-
-F_mobile_plan: /opt/tools/shell/plan/F_mobile_plan.xml
-
-auto_plan: 3113 seconds
-
-distribute_plan: 2850 seconds
-
-distribute_plan: 2648 seconds
-
--------------------------------------------------------
-
-2.4_mobileF: /opt/tct/tizen_web_2.4/manager/plan/2.4_mobileF.xml
-
-
-Test Plan Mode: 6757
-
-Distribute Plan Mode (3 devices) : 2384
-
--------------------------------------------------------
diff --git a/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/shell/tctshell/testresource/test_resultsummary.py b/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/shell/tctshell/testresource/test_resultsummary.py
deleted file mode 100755 (executable)
index 67cc7d6..0000000
+++ /dev/null
@@ -1,26 +0,0 @@
-import os, sys
-
-sys.path.append(os.path.abspath(os.path.join(os.path.dirname(__file__), '..')))
-
-from result_summary import ResultSummary
-from shellplanner import TctShellPlan, TctShellSuite, ExecuteType
-from logmanager import LOGGER
-
-LOGGER.setLevel("DEBUG")
-
-
-s1 = TctShellSuite('tct-3dtransforms-css3-tests' , '', '', '', '', '', '' ,'')
-s2 = TctShellSuite('tct-capability-tests' , '', '', '', '', '', '' ,'')
-s3 = TctShellSuite('tct-fonts-css3-tests' , '', '', '', '', '', '' ,'')
-s4 = TctShellSuite('tct-security-tcs-tests' , '', '', '', '', '', '' ,'')
-
-exe_t = ExecuteType.createExecuteType('Auto')
-
-p = TctShellPlan('tmp_name', '0000d85b00006200', 'prof', exe_t, [s1, s2, s3, s4], 'tizen_web_2.4', '/opt/tct/tizen_web_2.4/shell/result/Tizen-2.4.0_Mobile-TM1_20151015.2026/rerun_test_1#1_2016-02-12_21:13:23.364388')
-
-
-rs = ResultSummary([p])
-
-rs.genSummary()
-
-print p.getUnpass()
diff --git a/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/shell/tctshell/testresource/test_sdbmanager.py b/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/shell/tctshell/testresource/test_sdbmanager.py
deleted file mode 100755 (executable)
index 609471b..0000000
+++ /dev/null
@@ -1,52 +0,0 @@
-#!/usr/bin/python
-
-import os, sys
-
-sys.path.append(os.path.abspath(os.path.join(os.path.dirname(__file__), '..')))
-
-from sdbmanager import SdbManager
-from logmanager import LOGGER
-from test_constants import TestConstants
-
-class TestSdbManager:
-    def __init__(self):
-        TestConstants.checkConnectedDevice()
-        TestConstants.checkTestResourceFile()    
-
-        self.deviceId = TestConstants.CONN_DEVICE_ID
-        self.suiteFilePath = TestConstants.getAbsPath(TestConstants.TEST_TEMP_FOLDER + \
-                             TestConstants.TEST_SUITE_FILE)
-        self.suiteFile = TestConstants.TEST_SUITE_FILE
-   
-    def testSdbPush(self):
-        local = self.suiteFilePath
-        remote = '/opt/usr/media/tct/tmp/'
-
-        SdbManager.sdbShell(self.deviceId, "rm -rf " + remote + self.suiteFile)
-        SdbManager.sdbPush(self.deviceId, local, remote)
-   
-    def testSdbPull(self):
-        self.testSdbPush()
-
-        local = self.suiteFilePath + "-test"
-        SdbManager.hostCommand("rm -rf " + local)
-
-        remote = '/opt/usr/media/tct/tmp/' + self.suiteFile
-        SdbManager.sdbPull(self.deviceId, remote, local)
-        
-    def testSdbShell(self):
-        SdbManager.sdbShell(self.deviceId, 'ls -l')
-
-    def testSdbRootOn(self):
-        SdbManager.sdbRootOn(self.deviceId)
-
-if __name__ == "__main__":
-    print "==================== START TestSDManager ====================="
-    ins = TestSdbManager()
-    ins.testSdbPush()
-    ins.testSdbPull()
-    ins.testSdbShell()
-    ins. testSdbRootOn()
-    print "==================== FINISH TestSDManager ====================="
-
diff --git a/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/shell/tctshell/testresource/test_shellplanner.py b/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/shell/tctshell/testresource/test_shellplanner.py
deleted file mode 100755 (executable)
index 7396367..0000000
+++ /dev/null
@@ -1,95 +0,0 @@
-#!/usr/bin/python
-
-import os, sys
-
-sys.path.append(os.path.abspath(os.path.join(os.path.dirname(__file__), '..')))
-
-from shellplanner import *
-from test_constants import *
-
-class TestShellPlanner:
-
-    def __init__(self):
-        self.devId1 = '0000d81b00006200'
-        self.devId2 = '0000d81400006200'
-        self.devId3 = '00004e310000324d'
-        self.devId4 = '0000d8f800006200'
-
-    #return TctShellPlan
-    def testInitShellPlan(self):
-        suite1 = TctShellSuite('tct-capability-tests', None, 15,0, \
-                 'common/tct-capability-tests-2.4.zip', 'WRTLauncher',\
-                 'Compliance', 'tizen_web_2.4', 8000)
-
-        '''
-        suite2 = TctShellSuite('tct-alarm-tizen-tests', None, 60,0, \
-                 'common/tct-alarm-tizen-tests-2.4.zip', 'WRTLauncher', \
-                 'Tizen Web Device APIs', 'tizen_web_2.4', 8000)
-
-        '''
-        suites = [suite1]
-
-        return TctShellPlan('testPlan1', self.devId2, 'mobile', ExecuteType('Auto'),suites, \
-               'tizen_web_2.4', '/opt/tct/tizen_web_2.4/shell/result/testresult/')      
-
-    def testInitShellPlan2(self):
-        suite1 = TctShellSuite('tct-capability-tests', None, 15,0, \
-                 'common/tct-capability-tests-2.4.zip', 'WRTLauncher',\
-                 'Compliance', 'tizen_web_2.4', 8000)
-
-        suite2 = TctShellSuite('tct-alarm-tizen-tests', None, 60,0, \
-                 'common/tct-alarm-tizen-tests-2.4.zip', 'WRTLauncher', \
-                 'Tizen Web Device APIs', 'tizen_web_2.4', 8000)
-
-        suites = [suite1, suite2]
-
-        return TctShellPlan('testPlan2', self.devId3, 'mobile', ExecuteType('Auto'),suites, \
-               'tizen_web_2.4', '/opt/tct/tizen_web_2.4/shell/result/testresult/')    
-
-   
-    def testInitShellPlan3(self):
-        suite1 = TctShellSuite('tct-capability-tests', None, 15,0, \
-                 'common/tct-capability-tests-3.0.zip', 'WRTLauncher',\
-                 'Compliance', 'tizen_web_3.0', 8000)
-
-        suites = [suite1]
-
-        return TctShellPlan('testPlan3', self.devId3, 'mobile', ExecuteType('Auto'),suites, \
-               'tizen_web_3.0', '/opt/tct/tizen_web_3.0/shell/result/testresult/')    
-
-    def testInitShellPlan4(self):
-        suite1 = TctShellSuite('tct-capability-tests', None, 15,0, \
-                 'common/tct-capability-tests-2.4.zip', 'WRTLauncher',\
-                 'Compliance', 'tizen_web_2.4', 8000)
-
-        suites = [suite1]
-
-        return TctShellPlan('testPlan4', self.devId4, 'mobile', ExecuteType('Auto'),suites, \
-               'tizen_web_2.4', '/opt/tct/tizen_web_2.4/shell/result/testresult/')    
-
-
-    def testInstSuiteinHost(self):
-        plan1 = self.testInitShellPlan3()
-        suite = plan1.getSuites(); 
-        #suite[0].installSuite(plan1.getDeviceId(), plan1.getDevTctTmpPath())
-        suite[0].sdbCheckSuite(plan1.getDeviceId(), suite[0].getSuiteName())
-       #suite[0].unInstallSuite(plan1.getDeviceId(), plan1.getDevTctTmpPath())
-
-    def testInstSuiteinTarget(self):
-        plan1 = self.testInitShellPlan4()
-        suite = plan1.getSuites(); 
-        suite[0].installSuite(plan1.getDeviceId(), plan1.getDevTctTmpPath())
-        suite[0].sdbCheckSuite(plan1.getDeviceId(), suite[0].getSuiteName())
-       suite[0].unInstallSuite(plan1.getDeviceId(), plan1.getDevTctTmpPath())
-        
-
-if __name__ == "__main__":
-    ins = TestShellPlanner()
-    ins.testInstSuiteinHost()
-    ins.testInstSuiteinTarget()
-
-
-
-
-
diff --git a/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/shell/tctshell/testresource/test_shellworker.py b/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/shell/tctshell/testresource/test_shellworker.py
deleted file mode 100755 (executable)
index d0f6733..0000000
+++ /dev/null
@@ -1,78 +0,0 @@
-#!/usr/bin/python
-
-import os, sys
-import time
-
-sys.path.append(os.path.abspath(os.path.join(os.path.dirname(__file__), '..')))
-
-from test_shellplanner import *
-from shellworker import *
-
-class TestShellWorker:
-
-    def __init__(self):
-        print ''
-
-    def testInitPlanExecutor(self, plan, count):   
-        return PlanExecutor(plan, 1)    
-
-    def testRunPlanExecutor(self):
-        planner = TestShellPlanner()
-        plan1 = planner.testInitShellPlan()
-        multiins = MultiRunnPlan._getInstance()
-        multiins.addPlan(plan1.getPlanName(), plan1)
-
-        exe1 = self.testInitPlanExecutor(plan1, 1)
-        exe1.start()
-
-    def testCheckRunningPlan(self):
-        planner = TestShellPlanner()
-        plan1 = planner.testInitShellPlan()
-        plan2 = planner.testInitShellPlan2()
-        multiins = MultiRunnPlan._getInstance()
-        multiins.addPlan(plan1.getPlanName(), plan1)
-        multiins.addPlan(plan2.getPlanName(), plan2)
-
-        multiins.printRunnPlan()
-        multiins.setCurrPlanRunning(plan1)
-     
-        multiins.printRunnPlan()
-      
-    def testGetRunnDevice(self):
-        planner = TestShellPlanner()
-        plan1 = planner.testInitShellPlan()
-        plan2 = planner.testInitShellPlan2()
-        multiins = MultiRunnPlan._getInstance()
-        multiins.addPlan(plan1.getPlanName(), plan1)
-        multiins.addPlan(plan2.getPlanName(), plan2)
-
-        multiins.setCurrPlanRunning(plan1)
-        print multiins.getRunnDevice()
-
-    def testIsSelectedDevAvailable(self):
-        planner = TestShellPlanner()
-        plan1 = planner.testInitShellPlan()
-        plan2 = planner.testInitShellPlan2()
-        multiins = MultiRunnPlan._getInstance()
-        multiins.addPlan(plan1.getPlanName(), plan1)
-        multiins.addPlan(plan2.getPlanName(), plan2)
-
-        multiins.setCurrPlanRunning(plan1)
-        ins2 = MultiRunnPlan._getInstance()
-        print ins2.isSelectedDevAvailable(plan2)
-
-    def testCheckRecoveryDevice(self):
-        planner = TestShellPlanner()
-        ins = AutoSuiteWorker(planner)
-        print ins.checkRecoveryDevice('10.113.74.133:26101')
-        
-        
-if __name__ == "__main__":
-    ins = TestShellWorker()
-#    ins.testRunPlanExecutor()
-#    ins.testCheckRunningPlan()
-#    ins.testGetRunnDevice()
-#    ins.testIsSelectedDevAvailable()
-    ins.testCheckRecoveryDevice()
-
diff --git a/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/shell/tctshell/testresource/test_shellwrapper.py b/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/shell/tctshell/testresource/test_shellwrapper.py
deleted file mode 100755 (executable)
index 14fd412..0000000
+++ /dev/null
@@ -1,10 +0,0 @@
-#!/usr/bin/python
-
-import os, sys
-
-sys.path.append(os.path.abspath(os.path.join(os.path.dirname(__file__), '..')))
-
-from new_shellwrapper import *
-
-wrapper = ShellWrapper()
-wrapper.parse_options(sys.argv)
diff --git a/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/shell/tctshell/testresource/test_usbmonitor.py b/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/shell/tctshell/testresource/test_usbmonitor.py
deleted file mode 100755 (executable)
index 5e38835..0000000
+++ /dev/null
@@ -1,26 +0,0 @@
-#!/usr/bin/python
-
-import os, sys
-
-sys.path.append(os.path.abspath(os.path.join(os.path.dirname(__file__), '..')))
-
-from usbmonitor import UsbMonitor
-
-class Testusbmonitor:
-
-    def __init__(self):
-       self.usbins = None
-        print ''
-
-    def testThread(self):
-        self.usbins = UsbMonitor()
-        self.usbins.start()
-
-    def killThread(self):
-       self.usbins.finishThread()
-
-if __name__ == "__main__":
-    ins = Testusbmonitor()
-    ins.testThread()
-    raw_input()
-    ins.killThread()
diff --git a/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/shell/tctshell/testresource/testcase_resultsummary.py b/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/shell/tctshell/testresource/testcase_resultsummary.py
deleted file mode 100755 (executable)
index 4e25472..0000000
+++ /dev/null
@@ -1,12 +0,0 @@
-#!/usr/bin/python
-from result_summary import ResultSummary
-
-
-summary1 = ResultSummary("/opt/tct/tizen_web_2.4/manager/result/2016-01-12_15-10-43-526/tct-capability-tests.xml")
-summary1.unmarshal()
-'''
-try:
-    summary1.unmarshal()
-except Exception, e:
-    print "[ Error: reading suite result fail, error %s ]\n" % e
-'''
diff --git a/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/shell/tctshell/usbmonitor.py b/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/shell/tctshell/usbmonitor.py
deleted file mode 100755 (executable)
index a75b204..0000000
+++ /dev/null
@@ -1,89 +0,0 @@
-#!/usr/bin/python
-
-import threading
-import subprocess
-import time
-
-from .logmanager import LOGGER
-from .commodule.killall import killall
-from multiprocessing import Process
-
-
-#class UsbMonitor(threading.Thread):
-class UsbMonitor(Process):
-    usb_cmd = 'tail -f /var/log/syslog | stdbuf -o0 grep usb'
-    isStop = False
-    LOGGER.setLevel('DEBUG')
-
-    def __init__(self, devmgr):
-        #threading.Thread.__init__(self)
-        Process.__init__(self)
-        self.daemon = True
-        self.name = "UsbMonitor"
-        self.devmgr = devmgr
-        self.proc = subprocess.Popen(self.usb_cmd, shell=True, \
-                    stdout=subprocess.PIPE, stderr=subprocess.PIPE)
-
-        self.recovery_locks = {}
-        self.curr_time = None
-
-    def set_currsec(self):
-        lt = time.localtime(time.time())
-        self.curr_time = lt.tm_sec + (lt.tm_min * 60) + (lt.tm_hour * 3600)
-
-    def run(self):
-        LOGGER.debug("Starting UsbMonitor.......")
-        self.set_currsec()
-        while True:
-            outs = self.proc.stdout.readline()
-            if outs:
-                outs = outs.strip().decode("utf-8")
-                for outLog in outs.split('\n'):
-                    log_sp = outLog.split(' ')[2]
-                    time_sp = log_sp.split(':')
-                    tm_hour = int(time_sp[0])
-                    tm_min = int(time_sp[1])
-                    tm_sec = int(time_sp[2])
-                    time_sp = (tm_hour * 3600) + (tm_min * 60) + tm_sec
-
-                    if self.curr_time > time_sp:
-                        continue
-
-                    if self.isDisConnectUsb(outLog) or self.isConnectUsb(outLog):
-                        self.reLoadDeviceList()
-
-    def reLoadDeviceList(self):
-        time.sleep(3)
-        ret = self.devmgr.loadDeviceList()
-        if not ret:
-            LOGGER.error('0 device is connected')
-        else:
-            for devId in self.recovery_locks.keys():
-                if self.devmgr.isDeviceAvailable(devId):
-                    self.device_recovered(devId)
-
-    def isDisConnectUsb(self, sysLog):
-        if sysLog and sysLog.find('USB disconnect') > -1:
-            LOGGER.error(sysLog)
-            return True
-        else:
-            return False
-
-    def isConnectUsb(self, sysLog):
-        if sysLog.find('New USB device found') > -1:
-            LOGGER.debug(sysLog)
-            return True
-        else:
-            return False
-
-    def setup_recovery(self, devId, lock):
-        self.recovery_locks[devId] = lock
-
-    def device_recovered(self, devId):
-        try:
-            self.recovery_locks[devId].put(1, block=False)
-        except Exception as ex:
-            LOGGER.debug(str(ex))
-
-    def kill_usbmonitor(self):
-        killall(self.proc.pid)
diff --git a/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/shell/tmp/temp b/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/shell/tmp/temp
deleted file mode 100755 (executable)
index e69de29..0000000
diff --git a/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/tct-config-tools.py b/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/tct-config-tools.py
deleted file mode 100755 (executable)
index 71ee3d6..0000000
+++ /dev/null
@@ -1,359 +0,0 @@
-# -*- coding:utf-8 -*-
-import os
-import platform
-import shutil
-import stat
-import subprocess
-from optparse import OptionParser
-
-SDB_SERNO = "sdb"
-
-
-class CpFile:
-    sep = os.sep
-    TARGET_BASE_PATH = os.path.join(os.sep + "opt", "tools")
-    TARGET_BASE_LITE = os.path.join(os.sep + "opt", "testkit")
-
-    CURRENT_TARGET_BASE_PATH = ""
-    CURRENT_TARGET_LITE_PATH = ""
-    CURRENT_SOURCE_LITE_PATH = ""
-
-    #monkey
-    SOURCE_MONKEY_PATH = sep + "dev_event"
-    TARGET_MONKEY_PATH = sep + "dev_event"
-
-    #shell
-    SOURCE_SHELL_PATH = sep + "shell"
-    TARGET_SHELL_PATH = sep + "shell"
-    #manager
-    SOURCE_MANAGER_PATH = sep + "manager"
-    TARGET_MANAGER_PATH = sep + "manager"
-    #script
-    SOURCE_SCRIPT_PATH = ""
-    TARGET_SCRIPT_PATH = sep + "tools" + sep + "scripts"
-    #testkit1.0
-    SOURCE_TESTKIT_PATH1 = sep + "testkitlite1.0"
-    TARGET_TESTKIT_PATH1 = sep + "lite2.4"
-    #testkit2.0
-    SOURCE_TESTKIT_PATH2 = sep + "testkitlite2.0"
-    TARGET_TESTKIT_PATH2 = sep + "lite3.0"
-    #plugin
-    SOURCE_PLUGIN_PATH = sep + "plugin"
-    TARGET_PLUGIN_PATH = sep + "plugin"
-
-    def getCurrentOSBit(self):
-        return platform.architecture()
-
-    def setCurrentPath(self):
-        self.CURRENT_SOURCE_BASE_PATH = os.getcwd() + self.sep
-        self.CURRENT_TARGET_BASE_PATH = self.TARGET_BASE_PATH
-        self.CURRENT_TARGET_LITE_PATH = self.TARGET_BASE_LITE
-        print("current source base path =" + self.CURRENT_SOURCE_BASE_PATH)
-        print("current target base path =" + self.CURRENT_TARGET_BASE_PATH)
-
-    def cpSdb(self):
-        osInfo = self.getCurrentOSBit()
-        if (platform.system() == "Windows"):
-            if (str(osInfo[0]).find("64") != -1):
-                self.cpFile(
-                    self.CURRENT_SOURCE_BASE_PATH + self.SOURCE_SCRIPT_PATH + \
-                            self.sep + "sdb" + self.sep + "sdb-64.exe",
-                    self.CURRENT_TARGET_BASE_PATH + self.sep + "sdb.exe")
-            if (str(osInfo[0]).find("32") != -1):
-                self.cpFile(self.CURRENT_SOURCE_BASE_PATH + \
-                        self.SOURCE_SCRIPT_PATH + self.sep + "sdb" + self.sep \
-                        + "sdb-32.exe", self.CURRENT_TARGET_BASE_PATH + \
-                        self.sep + "sdb.exe")
-        else:
-            '''
-            # get status and output of the command
-            status, output = commands.getstatusoutput('lsof | \
-                    grep /usr/bin/sdb')
-            # merge continuing spaces to one
-            collapsedOutput = ' '.join(output.split())
-            # split words
-            result = collapsedOutput.split(' ')
-            # get the process id of the sdb
-            if status is not 256 :
-                # find the word sdb
-                for x in range(0, result.__len__()):
-                    if (result[x] == "sdb"):
-                        break
-                # get the process id of the sdb
-                os.system('kill -9 ' + result[x+1])
-            '''
-            try:
-                '''
-                if(self.checkInstalledSdb()):
-                    print("sdb install is not required")
-                    return
-
-                print("sdb install")
-                '''
-                if (str(osInfo[0]).find("64") != -1):
-                    self.cpFile(
-                        self.CURRENT_SOURCE_BASE_PATH + \
-                                self.SOURCE_SCRIPT_PATH + self.sep + "sdb" + \
-                                self.sep + "sdb-64",
-                        self.CURRENT_TARGET_BASE_PATH + self.sep + "sdb")
-                    self.cpFile(
-                        self.CURRENT_SOURCE_BASE_PATH + \
-                                self.SOURCE_SCRIPT_PATH + self.sep + "sdb" + \
-                                self.sep + "sdb-64",
-                        "/usr/bin/" + "sdb")
-                if (str(osInfo[0]).find("32") != -1):
-                    self.cpFile(
-                        self.CURRENT_SOURCE_BASE_PATH + \
-                                self.SOURCE_SCRIPT_PATH + self.sep + "sdb" + \
-                                self.sep + "sdb-32",
-                        self.CURRENT_TARGET_BASE_PATH + self.sep + "sdb")
-                    self.cpFile(
-                        self.CURRENT_SOURCE_BASE_PATH + \
-                                self.SOURCE_SCRIPT_PATH + self.sep + "sdb" + \
-                                self.sep + "sdb-32",
-                        "/usr/bin/" + "sdb")
-                os.system("chmod -R 777 /usr/bin/sdb")
-            except:
-                pass
-
-    def get_cmd_result(self, command):
-        p = subprocess.Popen(command,
-                         stdout=subprocess.PIPE,
-                         stderr=subprocess.STDOUT)
-        return p.stdout.readline()
-
-    def checkInstalledSdb(self):
-        cmd = "sdb"
-        installedVer = ""
-        try:
-            output = str(self.get_cmd_result(cmd).split('\n')[0])
-            if output.find('Smart Development Bridge') > -1:
-                installedVer = output.split(' ')[3]
-            else:
-                raise
-        except:
-            print("sdb is not installed")
-            return False
-
-        osInfo = self.getCurrentOSBit()
-        if (str(osInfo[0]).find("32") != -1):
-            cmd = "sdb/sdb-32"
-        else:
-            cmd = "sdb/sdb-64"
-        toolVer = ""
-        try:
-            output = str(self.get_cmd_result(cmd).split('\n')[0])
-            if output.find('Smart Development Bridge') > -1:
-                toolVer = output.split(' ')[3]
-            else:
-                raise
-        except:
-            print("tool's sdb is not valid")
-            return True
-
-        print("installed sdb version : %s / tool's sdb version : %s" % (installedVer, toolVer))
-        installedSplit = installedVer.split('.')
-        toolSplit = toolVer.split('.')
-        hit = 0
-        for i in range(0, 3):
-            if(int(installedSplit[i]) > int(toolSplit[i])):
-                print("Higher version sdb is already installed : " + installedVer)
-                return True
-            if(int(installedSplit[i]) == int(toolSplit[i])):
-                hit += 1
-                continue
-            if(int(installedSplit[i]) < int(toolSplit[i])):
-                break
-        if(hit==3):
-            print("Same version sdb is already installed : " + installedVer)
-            return True
-
-        return False
-
-    def cpOtherFiles(self):
-        tct_mgr = "tct-mgr"
-        tct_shell = "tct-shell"
-        tct_monkey = "tct-monkey"
-        testkit_lite1 = "testkit-lite1.0"
-        testkit_lite2 = "testkit-lite2.0"
-        tct_config = "TCT_CONFIG"
-
-        if (platform.system() == "Windows"):
-            tct_mgr = "tct-mgr.bat"
-
-        self.cpFile(self.CURRENT_SOURCE_BASE_PATH + self.SOURCE_SCRIPT_PATH + \
-                self.sep + tct_mgr, self.CURRENT_TARGET_BASE_PATH + \
-                self.sep + tct_mgr)
-        self.cpFile(self.CURRENT_SOURCE_BASE_PATH + self.SOURCE_SCRIPT_PATH + \
-                self.sep + tct_shell, self.CURRENT_TARGET_BASE_PATH + \
-                self.sep + tct_shell)
-        self.cpFile(self.CURRENT_SOURCE_BASE_PATH + self.SOURCE_SCRIPT_PATH + \
-                self.sep + tct_monkey, self.CURRENT_TARGET_BASE_PATH + \
-                self.sep + tct_monkey)
-        self.cpFile(self.CURRENT_SOURCE_BASE_PATH + self.SOURCE_SCRIPT_PATH + \
-                self.sep + testkit_lite1, self.CURRENT_TARGET_BASE_PATH + \
-                self.sep + testkit_lite1)
-        self.cpFile(self.CURRENT_SOURCE_BASE_PATH + self.SOURCE_SCRIPT_PATH + \
-                self.sep + testkit_lite2, self.CURRENT_TARGET_BASE_PATH + \
-                self.sep + testkit_lite2)
-        self.cpFile(self.CURRENT_SOURCE_BASE_PATH + self.SOURCE_SCRIPT_PATH + \
-                self.sep + tct_config, self.CURRENT_TARGET_BASE_PATH + \
-                self.sep + tct_config)
-
-    def cpOtherFilesToBinDir(self):
-        tct_mgr = "tct-mgr"
-        tct_shell = "tct-shell"
-        tct_monkey = "tct-monkey"
-        testkit_lite1 = "testkit-lite1.0"
-        testkit_lite2 = "testkit-lite2.0"
-
-        if (platform.system() != "Windows"):
-            self.cpFile(self.CURRENT_SOURCE_BASE_PATH + \
-                    self.SOURCE_SCRIPT_PATH + self.sep + \
-                    tct_mgr, "/usr/bin/" + tct_mgr)
-            self.cpFile(self.CURRENT_SOURCE_BASE_PATH + \
-                    self.SOURCE_SCRIPT_PATH + self.sep + \
-                    tct_shell, "/usr/bin/" + tct_shell)
-            self.cpFile(self.CURRENT_SOURCE_BASE_PATH + \
-                    self.SOURCE_SCRIPT_PATH + self.sep + \
-                    tct_monkey, "/usr/bin/" + tct_monkey)
-            self.cpFile(self.CURRENT_SOURCE_BASE_PATH + \
-                    self.SOURCE_SCRIPT_PATH + self.sep + testkit_lite1,\
-                    "/usr/bin/" + testkit_lite1)
-            self.cpFile(self.CURRENT_SOURCE_BASE_PATH + \
-                    self.SOURCE_SCRIPT_PATH + self.sep + testkit_lite2,\
-                    "/usr/bin/" + testkit_lite2)
-
-            try:
-                os.system("chmod -R 777 /usr/bin/" + tct_mgr)
-                os.system("chmod -R 777 /usr/bin/" + tct_shell)
-                os.system("chmod -R 777 /usr/bin/" + tct_monkey)
-                os.system("chmod -R 777 /usr/bin/" + testkit_lite1)
-                os.system("chmod -R 777 /usr/bin/" + testkit_lite2)
-                os.system("chmod -R 777 /usr/bin/sdb")
-            except:
-                pass
-
-    def cpTestKitLite(self):
-        self.cpDir(self.CURRENT_SOURCE_BASE_PATH + self.SOURCE_TESTKIT_PATH1, \
-                   self.CURRENT_TARGET_LITE_PATH + self.TARGET_TESTKIT_PATH1, \
-                           "lite2.4")
-        for r, d, f in os.walk(self.CURRENT_TARGET_LITE_PATH + \
-                self.TARGET_TESTKIT_PATH1):
-            if (platform.system() != "Windows"):
-                os.chmod(r, stat.S_IRWXU | stat.S_IRWXG | stat.S_IRWXO)
-
-        self.cpDir(self.CURRENT_SOURCE_BASE_PATH + self.SOURCE_TESTKIT_PATH2,
-                   self.CURRENT_TARGET_LITE_PATH + self.TARGET_TESTKIT_PATH2, \
-                           "lite3.0")
-        for r, d, f in os.walk(self.CURRENT_TARGET_LITE_PATH + \
-                self.TARGET_TESTKIT_PATH2):
-            if (platform.system() != "Windows"):
-                os.chmod(r, stat.S_IRWXU | stat.S_IRWXG | stat.S_IRWXO)
-
-    def cpManager(self):
-        self.cpDir(self.CURRENT_SOURCE_BASE_PATH + self.SOURCE_MANAGER_PATH,
-                   self.CURRENT_TARGET_BASE_PATH + self.TARGET_MANAGER_PATH, \
-                           "manager")
-        for r, d, f in os.walk(self.CURRENT_TARGET_BASE_PATH + \
-                self.TARGET_MANAGER_PATH):
-            if (platform.system() != "Windows"):
-                os.chmod(r, stat.S_IRWXU | stat.S_IRWXG | stat.S_IRWXO)
-
-    def cpShell(self):
-        self.cpDir(self.CURRENT_SOURCE_BASE_PATH + self.SOURCE_SHELL_PATH,
-                   self.CURRENT_TARGET_BASE_PATH + self.TARGET_SHELL_PATH, \
-                           "shell")
-        for r, d, f in os.walk(self.CURRENT_TARGET_BASE_PATH + \
-                self.TARGET_SHELL_PATH):
-            if (platform.system() != "Windows"):
-                os.chmod(r, stat.S_IRWXU | stat.S_IRWXG | stat.S_IRWXO)
-
-    def cpMonkey(self):
-        self.cpDir(self.CURRENT_SOURCE_BASE_PATH + self.SOURCE_MONKEY_PATH, \
-                self.CURRENT_TARGET_BASE_PATH + self.TARGET_MONKEY_PATH, \
-                "monkey")
-        for r, d, f in os.walk(self.CURRENT_TARGET_BASE_PATH + \
-                self.TARGET_MONKEY_PATH):
-            if (platform.system() != "Windows"):
-                os.chmod(r, stat.S_IRWXU | stat.S_IRWXG | stat.S_IRWXO)
-
-    def cpPlugin(self):
-        self.cpDir(self.CURRENT_SOURCE_BASE_PATH + self.SOURCE_PLUGIN_PATH,
-                   self.CURRENT_TARGET_BASE_PATH + self.TARGET_PLUGIN_PATH, \
-                           "plugin")
-        for r, d, f in os.walk(self.CURRENT_TARGET_BASE_PATH + \
-                self.TARGET_PLUGIN_PATH):
-            if (platform.system() != "Windows"):
-                os.chmod(r, stat.S_IRWXU | stat.S_IRWXG | stat.S_IRWXO)
-
-    def cpFile(self, src, target):
-        if (not os.path.isfile(src)):
-            print(src + " is not a file")
-            return
-        path = os.path.dirname(target)
-        if (not os.path.isdir(path)):
-            os.makedirs(path)
-        shutil.copyfile(src, target)
-
-    def del_rw(self, action, name, exc):
-        if (platform.system() != "Windows"):
-            os.chmod(name, stat.S_IWRITE)
-        os.remove(name)
-
-    def cpDir(self, src, target, name):
-        if (os.path.isdir(src) and not os.path.exists(target)):
-            print("copy " + name + "  dir start")
-            shutil.copytree(src, target)
-            print("copy " + name + "  dir finish")
-        else:
-            if (not os.path.isdir(src)):
-                print("source " + name + " path is not a dir")
-            if (os.path.exists(target)):
-                print ("target " + name + " path is exists")
-                try:
-                    shutil.rmtree(target, onerror=self.del_rw)
-                except Exception, data:
-                    print Exception, ":", data
-
-                print ("target " + name + " dir destroyed")
-                try:
-                    shutil.copytree(src, target)
-                except Exception, data:
-                    print Exception, ":", data
-                print("copy " + name + "  dir finish")
-
-    def clear(self):
-        self.setCurrentPath()
-        try:
-            shutil.rmtree(self.CURRENT_TARGET_BASE_PATH, onerror=self.del_rw)
-        except Exception, data:
-            print Exception, ":", data
-
-    def cp(self):
-        self.setCurrentPath()
-        self.cpShell()
-        self.cpManager()
-        self.cpMonkey()
-        self.cpOtherFiles()
-        self.cpTestKitLite()
-        self.cpPlugin()
-        self.cpOtherFilesToBinDir()
-        self.cpSdb()
-
-parser = OptionParser()
-parser.add_option("-i", "--install", dest="install", action="store_true", \
-        default=False, help="copy folders and file into os")
-parser.add_option("-p", "--purge", dest="clear", action="store_true", \
-        default=False, help="clear all files")
-
-(options, args) = parser.parse_args()
-if (options.install):
-    test = CpFile()
-    test.cp()
-elif(options.clear):
-    test = CpFile()
-    test.clear()
-else:
-    test = CpFile()
-    test.cp()
diff --git a/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/tct-mgr b/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/tct-mgr
deleted file mode 100755 (executable)
index bb918fd..0000000
+++ /dev/null
@@ -1,10 +0,0 @@
-#!/bin/bash
-
-THE_CLASSPATH=
-for i in `ls /opt/tools/manager/lib/*.jar`
-do
-  THE_CLASSPATH=${THE_CLASSPATH}:${i}
-done
-
-java -cp ${THE_CLASSPATH} org.tizen.tct.tool.mgr.TctGui "${@}"
-
diff --git a/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/tct-mgr.bat b/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/tct-mgr.bat
deleted file mode 100755 (executable)
index 9cf7241..0000000
+++ /dev/null
@@ -1,10 +0,0 @@
-@echo off
-Setlocal EnableDelayedExpansion
-
-set classpath=
-for %%f in (/opt/tools/manager/lib/*.jar) do set classpath=!classpath!;/opt/tools/manager/lib/%%f
-
-echo ==================================================================================
-echo java_classpath = %classpath%
-java -cp %classpath% org.tizen.tct.tool.mgr.TctGui
-echo ==================================================================================
\ No newline at end of file
diff --git a/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/tct-monkey b/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/tct-monkey
deleted file mode 100755 (executable)
index db12dab..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
-#!/bin/bash
-
-python /opt/tools/dev_event/tct-monkey "${@}"
diff --git a/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/tct-shell b/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/tct-shell
deleted file mode 100755 (executable)
index 78ee3e9..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
-#!/bin/bash
-
-python3 /opt/tools/shell/tct-shell "${@}"
diff --git a/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkit-lite1.0 b/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkit-lite1.0
deleted file mode 100755 (executable)
index 459746a..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
-#!/bin/bash
-
-python /opt/testkit/lite2.4/testkit-lite "${@}"
diff --git a/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkit-lite2.0 b/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkit-lite2.0
deleted file mode 100755 (executable)
index cd872ce..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
-#!/bin/bash
-
-python /opt/testkit/lite3.0/testkit-lite "${@}"
diff --git a/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite1.0/LICENSE b/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite1.0/LICENSE
deleted file mode 100755 (executable)
index 6d45519..0000000
+++ /dev/null
@@ -1,340 +0,0 @@
-                   GNU GENERAL PUBLIC LICENSE
-                      Version 2, June 1991
-
- Copyright (C) 1989, 1991 Free Software Foundation, Inc.
-                       51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
-                           Preamble
-
-  The licenses for most software are designed to take away your
-freedom to share and change it.  By contrast, the GNU General Public
-License is intended to guarantee your freedom to share and change free
-software--to make sure the software is free for all its users.  This
-General Public License applies to most of the Free Software
-Foundation's software and to any other program whose authors commit to
-using it.  (Some other Free Software Foundation software is covered by
-the GNU Library General Public License instead.)  You can apply it to
-your programs, too.
-
-  When we speak of free software, we are referring to freedom, not
-price.  Our General Public Licenses are designed to make sure that you
-have the freedom to distribute copies of free software (and charge for
-this service if you wish), that you receive source code or can get it
-if you want it, that you can change the software or use pieces of it
-in new free programs; and that you know you can do these things.
-
-  To protect your rights, we need to make restrictions that forbid
-anyone to deny you these rights or to ask you to surrender the rights.
-These restrictions translate to certain responsibilities for you if you
-distribute copies of the software, or if you modify it.
-
-  For example, if you distribute copies of such a program, whether
-gratis or for a fee, you must give the recipients all the rights that
-you have.  You must make sure that they, too, receive or can get the
-source code.  And you must show them these terms so they know their
-rights.
-
-  We protect your rights with two steps: (1) copyright the software, and
-(2) offer you this license which gives you legal permission to copy,
-distribute and/or modify the software.
-
-  Also, for each author's protection and ours, we want to make certain
-that everyone understands that there is no warranty for this free
-software.  If the software is modified by someone else and passed on, we
-want its recipients to know that what they have is not the original, so
-that any problems introduced by others will not reflect on the original
-authors' reputations.
-
-  Finally, any free program is threatened constantly by software
-patents.  We wish to avoid the danger that redistributors of a free
-program will individually obtain patent licenses, in effect making the
-program proprietary.  To prevent this, we have made it clear that any
-patent must be licensed for everyone's free use or not licensed at all.
-
-  The precise terms and conditions for copying, distribution and
-modification follow.
-
-                   GNU GENERAL PUBLIC LICENSE
-   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
-
-  0. This License applies to any program or other work which contains
-a notice placed by the copyright holder saying it may be distributed
-under the terms of this General Public License.  The "Program", below,
-refers to any such program or work, and a "work based on the Program"
-means either the Program or any derivative work under copyright law:
-that is to say, a work containing the Program or a portion of it,
-either verbatim or with modifications and/or translated into another
-language.  (Hereinafter, translation is included without limitation in
-the term "modification".)  Each licensee is addressed as "you".
-
-Activities other than copying, distribution and modification are not
-covered by this License; they are outside its scope.  The act of
-running the Program is not restricted, and the output from the Program
-is covered only if its contents constitute a work based on the
-Program (independent of having been made by running the Program).
-Whether that is true depends on what the Program does.
-
-  1. You may copy and distribute verbatim copies of the Program's
-source code as you receive it, in any medium, provided that you
-conspicuously and appropriately publish on each copy an appropriate
-copyright notice and disclaimer of warranty; keep intact all the
-notices that refer to this License and to the absence of any warranty;
-and give any other recipients of the Program a copy of this License
-along with the Program.
-
-You may charge a fee for the physical act of transferring a copy, and
-you may at your option offer warranty protection in exchange for a fee.
-
-  2. You may modify your copy or copies of the Program or any portion
-of it, thus forming a work based on the Program, and copy and
-distribute such modifications or work under the terms of Section 1
-above, provided that you also meet all of these conditions:
-
-    a) You must cause the modified files to carry prominent notices
-    stating that you changed the files and the date of any change.
-
-    b) You must cause any work that you distribute or publish, that in
-    whole or in part contains or is derived from the Program or any
-    part thereof, to be licensed as a whole at no charge to all third
-    parties under the terms of this License.
-
-    c) If the modified program normally reads commands interactively
-    when run, you must cause it, when started running for such
-    interactive use in the most ordinary way, to print or display an
-    announcement including an appropriate copyright notice and a
-    notice that there is no warranty (or else, saying that you provide
-    a warranty) and that users may redistribute the program under
-    these conditions, and telling the user how to view a copy of this
-    License.  (Exception: if the Program itself is interactive but
-    does not normally print such an announcement, your work based on
-    the Program is not required to print an announcement.)
-
-These requirements apply to the modified work as a whole.  If
-identifiable sections of that work are not derived from the Program,
-and can be reasonably considered independent and separate works in
-themselves, then this License, and its terms, do not apply to those
-sections when you distribute them as separate works.  But when you
-distribute the same sections as part of a whole which is a work based
-on the Program, the distribution of the whole must be on the terms of
-this License, whose permissions for other licensees extend to the
-entire whole, and thus to each and every part regardless of who wrote it.
-
-Thus, it is not the intent of this section to claim rights or contest
-your rights to work written entirely by you; rather, the intent is to
-exercise the right to control the distribution of derivative or
-collective works based on the Program.
-
-In addition, mere aggregation of another work not based on the Program
-with the Program (or with a work based on the Program) on a volume of
-a storage or distribution medium does not bring the other work under
-the scope of this License.
-
-  3. You may copy and distribute the Program (or a work based on it,
-under Section 2) in object code or executable form under the terms of
-Sections 1 and 2 above provided that you also do one of the following:
-
-    a) Accompany it with the complete corresponding machine-readable
-    source code, which must be distributed under the terms of Sections
-    1 and 2 above on a medium customarily used for software interchange; or,
-
-    b) Accompany it with a written offer, valid for at least three
-    years, to give any third party, for a charge no more than your
-    cost of physically performing source distribution, a complete
-    machine-readable copy of the corresponding source code, to be
-    distributed under the terms of Sections 1 and 2 above on a medium
-    customarily used for software interchange; or,
-
-    c) Accompany it with the information you received as to the offer
-    to distribute corresponding source code.  (This alternative is
-    allowed only for noncommercial distribution and only if you
-    received the program in object code or executable form with such
-    an offer, in accord with Subsection b above.)
-
-The source code for a work means the preferred form of the work for
-making modifications to it.  For an executable work, complete source
-code means all the source code for all modules it contains, plus any
-associated interface definition files, plus the scripts used to
-control compilation and installation of the executable.  However, as a
-special exception, the source code distributed need not include
-anything that is normally distributed (in either source or binary
-form) with the major components (compiler, kernel, and so on) of the
-operating system on which the executable runs, unless that component
-itself accompanies the executable.
-
-If distribution of executable or object code is made by offering
-access to copy from a designated place, then offering equivalent
-access to copy the source code from the same place counts as
-distribution of the source code, even though third parties are not
-compelled to copy the source along with the object code.
-
-  4. You may not copy, modify, sublicense, or distribute the Program
-except as expressly provided under this License.  Any attempt
-otherwise to copy, modify, sublicense or distribute the Program is
-void, and will automatically terminate your rights under this License.
-However, parties who have received copies, or rights, from you under
-this License will not have their licenses terminated so long as such
-parties remain in full compliance.
-
-  5. You are not required to accept this License, since you have not
-signed it.  However, nothing else grants you permission to modify or
-distribute the Program or its derivative works.  These actions are
-prohibited by law if you do not accept this License.  Therefore, by
-modifying or distributing the Program (or any work based on the
-Program), you indicate your acceptance of this License to do so, and
-all its terms and conditions for copying, distributing or modifying
-the Program or works based on it.
-
-  6. Each time you redistribute the Program (or any work based on the
-Program), the recipient automatically receives a license from the
-original licensor to copy, distribute or modify the Program subject to
-these terms and conditions.  You may not impose any further
-restrictions on the recipients' exercise of the rights granted herein.
-You are not responsible for enforcing compliance by third parties to
-this License.
-
-  7. If, as a consequence of a court judgment or allegation of patent
-infringement or for any other reason (not limited to patent issues),
-conditions are imposed on you (whether by court order, agreement or
-otherwise) that contradict the conditions of this License, they do not
-excuse you from the conditions of this License.  If you cannot
-distribute so as to satisfy simultaneously your obligations under this
-License and any other pertinent obligations, then as a consequence you
-may not distribute the Program at all.  For example, if a patent
-license would not permit royalty-free redistribution of the Program by
-all those who receive copies directly or indirectly through you, then
-the only way you could satisfy both it and this License would be to
-refrain entirely from distribution of the Program.
-
-If any portion of this section is held invalid or unenforceable under
-any particular circumstance, the balance of the section is intended to
-apply and the section as a whole is intended to apply in other
-circumstances.
-
-It is not the purpose of this section to induce you to infringe any
-patents or other property right claims or to contest validity of any
-such claims; this section has the sole purpose of protecting the
-integrity of the free software distribution system, which is
-implemented by public license practices.  Many people have made
-generous contributions to the wide range of software distributed
-through that system in reliance on consistent application of that
-system; it is up to the author/donor to decide if he or she is willing
-to distribute software through any other system and a licensee cannot
-impose that choice.
-
-This section is intended to make thoroughly clear what is believed to
-be a consequence of the rest of this License.
-
-  8. If the distribution and/or use of the Program is restricted in
-certain countries either by patents or by copyrighted interfaces, the
-original copyright holder who places the Program under this License
-may add an explicit geographical distribution limitation excluding
-those countries, so that distribution is permitted only in or among
-countries not thus excluded.  In such case, this License incorporates
-the limitation as if written in the body of this License.
-
-  9. The Free Software Foundation may publish revised and/or new versions
-of the General Public License from time to time.  Such new versions will
-be similar in spirit to the present version, but may differ in detail to
-address new problems or concerns.
-
-Each version is given a distinguishing version number.  If the Program
-specifies a version number of this License which applies to it and "any
-later version", you have the option of following the terms and conditions
-either of that version or of any later version published by the Free
-Software Foundation.  If the Program does not specify a version number of
-this License, you may choose any version ever published by the Free Software
-Foundation.
-
-  10. If you wish to incorporate parts of the Program into other free
-programs whose distribution conditions are different, write to the author
-to ask for permission.  For software which is copyrighted by the Free
-Software Foundation, write to the Free Software Foundation; we sometimes
-make exceptions for this.  Our decision will be guided by the two goals
-of preserving the free status of all derivatives of our free software and
-of promoting the sharing and reuse of software generally.
-
-                           NO WARRANTY
-
-  11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
-FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW.  EXCEPT WHEN
-OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
-PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
-OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
-MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.  THE ENTIRE RISK AS
-TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.  SHOULD THE
-PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
-REPAIR OR CORRECTION.
-
-  12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
-WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
-REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
-INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
-OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
-TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
-YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
-PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
-POSSIBILITY OF SUCH DAMAGES.
-
-                    END OF TERMS AND CONDITIONS
-
-           How to Apply These Terms to Your New Programs
-
-  If you develop a new program, and you want it to be of the greatest
-possible use to the public, the best way to achieve this is to make it
-free software which everyone can redistribute and change under these terms.
-
-  To do so, attach the following notices to the program.  It is safest
-to attach them to the start of each source file to most effectively
-convey the exclusion of warranty; and each file should have at least
-the "copyright" line and a pointer to where the full notice is found.
-
-    <one line to give the program's name and a brief idea of what it does.>
-    Copyright (C) <year>  <name of author>
-
-    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 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License
-    along with this program; if not, write to the Free Software
-    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
-
-
-Also add information on how to contact you by electronic and paper mail.
-
-If the program is interactive, make it output a short notice like this
-when it starts in an interactive mode:
-
-    Gnomovision version 69, Copyright (C) year name of author
-    Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
-    This is free software, and you are welcome to redistribute it
-    under certain conditions; type `show c' for details.
-
-The hypothetical commands `show w' and `show c' should show the appropriate
-parts of the General Public License.  Of course, the commands you use may
-be called something other than `show w' and `show c'; they could even be
-mouse-clicks or menu items--whatever suits your program.
-
-You should also get your employer (if you work as a programmer) or your
-school, if any, to sign a "copyright disclaimer" for the program, if
-necessary.  Here is a sample; alter the names:
-
-  Yoyodyne, Inc., hereby disclaims all copyright interest in the program
-  `Gnomovision' (which makes passes at compilers) written by James Hacker.
-
-  <signature of Ty Coon>, 1 April 1989
-  Ty Coon, President of Vice
-
-This General Public License does not permit incorporating your program into
-proprietary programs.  If your program is a subroutine library, you may
-consider it more useful to permit linking proprietary applications with the
-library.  If this is what you want to do, use the GNU Library General
-Public License instead of this License.
diff --git a/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite1.0/README b/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite1.0/README
deleted file mode 100755 (executable)
index b82cff0..0000000
+++ /dev/null
@@ -1,77 +0,0 @@
-Dependency:
-=================
-python2.7 python-pip requests
-
-       sudo apt-get install python-pip
-       sudo pip install requests
-
-How to build:
-=================
-    Build from source code: 
-        sudo python setup.py build
-
-How to install:
-=================
-    Install testkit lite  from source code: 
-        sudo python setup.py install
-
-How to use:
-=================
-    At first, install a test package or prepare one tests.xml file aligned with schema files: /opt/testkit/lite/xsd/testdefinition-syntax.xsd.
-
-    And then,
-        1) You can run case on target:
-            For web test cases:
-                testkit-lite -f device:"<somewhere>/<package_name>/tests.xml" -e 'WRTLauncher <package_name>'
-            For native test cases:
-                testkit-lite -f device:"<somewhere>/<package_name>/tests.xml" 
-
-        2) You can run case in single mode :
-            For web test cases:
-                testkit-lite -f "<somewhere>/<package_name>/tests.xml" -e 'WRTLauncher <package_name>' --comm localhost
-            For native test cases:
-                testkit-lite -f "<somewhere>/<package_name>/tests.xml" --comm localhost
-    
-        3) You can select on parser engine to simply conduct one or more tests.xml on target:
-            testkit-lite -f device:"<somewhere>/<package_name1>/tests.xml ... <somewhere>/<package_namen>/tests.xml" -e 'WRTLauncher <package_name1> ... <package_namen>'
-        4) If you want to execute both auto and manual tests:
-            testkit-lite -f device:"<somewhere>/<package_name>/tests.xml"
-            
-        5) If you just want to execute manual tests:
-            testkit-lite -f device:"<somewhere>/<package_name>/tests.xml" -M
-            
-        6) If you just want to execute auto tests:
-            testkit-lite -f device:"<somewhere>/<package_name>/tests.xml" -A
-            
-        7) If you want to save test result to another file, by default it'll be under /opt/testkit/lite/latest:
-            testkit-lite -f device:"<somewhere>/<package_name>/tests.xml" -o <somewhere>/xxx.xml
-            
-        8) If you want to choose some filters:
-            testkit-lite -f device:"<somewhere>/<package_name>/tests.xml" --status level1 --type type1 ...
-
-        9) If you want to run test according capability:
-            testkit-lite -f device:"<somewhere>/<package_name>/tests.xml" --capability capability.xml
-            
-        10) At last, you can freely compose the above parameters together:
-             testkit-lite -f <somewhere1>/tests.xml <somewhere2>/tests.xml -A --priority P1 --type type1 ...
-
-Get Results:
-=================
-
-    Test report will be generated as tests.result.xml   
-       The result will be under /opt/testkit/lite/latest after execution, you can also check the history results in /opt/testkit/lite/yyyy-mm-dd-HH:MM:SS.NNNNNN.
-
-View Results:
-=================
-
-Test report can be viewed in HTML format, so the data in the xml result file looks more human friendly.
-
-Please follow the following steps to view test report:
-    1) copy files: application.js back_top.png jquery.min.js testresult.xsl tests.css under directory /opt/testkit/lite/xsd/
-    2) put the files from step 1) under the same directory as the xml result file
-    3) open xml result file with a web browser(IE, Chrome or Firefox)
-
-Known Issues:
-=================
-N/A
diff --git a/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite1.0/VERSION b/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite1.0/VERSION
deleted file mode 100755 (executable)
index fb8d81b..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-[public_version]
-version=TESTKIT1_3.0
-[internal_version]
-version=TESTKIT1_3.0.1-151106
diff --git a/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite1.0/commodule/Makefile.am b/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite1.0/commodule/Makefile.am
deleted file mode 100755 (executable)
index 205211e..0000000
+++ /dev/null
@@ -1,24 +0,0 @@
-# Copyright (C) 2012 Intel Corporation
-# 
-# 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
-# of the License, or (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
-#
-# Authors:
-#              Yuanyuan,Zou  <zouyuanx@intel.com>
-
-
-SUBDIRS = impl
-
-commoduledir = /usr/lib/python2.7/dist-packages/commodule
-dist_commodule_SCRIPTS = *.py
diff --git a/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite1.0/commodule/__init__.py b/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite1.0/commodule/__init__.py
deleted file mode 100755 (executable)
index 8b13789..0000000
+++ /dev/null
@@ -1 +0,0 @@
-
diff --git a/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite1.0/commodule/__init__.pyc b/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite1.0/commodule/__init__.pyc
deleted file mode 100755 (executable)
index 4aae30a..0000000
Binary files a/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite1.0/commodule/__init__.pyc and /dev/null differ
diff --git a/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite1.0/commodule/autoexec.py b/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite1.0/commodule/autoexec.py
deleted file mode 100755 (executable)
index 240b6c3..0000000
+++ /dev/null
@@ -1,100 +0,0 @@
-#!/usr/bin/python
-#
-# Copyright (C) 2012 Intel Corporation
-#
-# 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
-# of the License, or (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 51 Franklin Street, Fifth Floor,
-# Boston, MA  02110-1301, USA.
-#
-# Authors:
-#              Liu,chengtao <chengtaox.liu@intel.com>
-""" The shell command executor module"""
-
-import os
-import sys
-import time
-import subprocess
-from datetime import datetime
-
-from .killall import killall
-from .str2 import str2str
-
-
-def shell_command(cmd, timeout=15):
-    """shell communication for quick return in sync mode"""
-    proc = subprocess.Popen(cmd,
-                            shell=True,
-                            bufsize=0,
-                            stdout=subprocess.PIPE,
-                            stderr=subprocess.PIPE,
-                            stdin=subprocess.PIPE)
-    time_cnt = 0
-    exit_code = None
-    while time_cnt < timeout:
-        exit_code = proc.poll()
-        if not exit_code is None:
-            break
-        time_cnt += 0.2
-        time.sleep(0.2)
-
-    if exit_code is None:
-        killall(proc.pid)
-        exit_code = -1
-        result = []
-    else:
-        result = proc.stdout.readlines() or proc.stderr.readlines()
-    return [exit_code, result]
-
-
-def shell_command_ext(cmd="",
-                      timeout=None,
-                      boutput=False,
-                      stdout_file=None,
-                      stderr_file=None):
-    """shell executor, return [exitcode, stdout/stderr]
-       timeout: None means unlimited timeout
-       boutput: specify whether print output during the command running
-    """
-    cmd_open = subprocess.Popen(args=cmd,
-                                shell=True,
-                                bufsize=0,
-                                stdout=subprocess.PIPE,
-                                stderr=subprocess.PIPE,
-                                stdin=subprocess.PIPE)
-
-    while True:
-        exit_code = cmd_open.poll()
-        if exit_code is not None:
-            break
-        if timeout is not None:
-            timeout -= 0.1
-            if timeout <= 0:
-                try:
-                    exit_code = "timeout"
-                    cmd_open.terminate()
-                    time.sleep(5)
-                except OSError:
-                    killall(cmd_open.pid)
-                break
-        time.sleep(0.1)
-
-    stdout_log = str2str(cmd_open.stdout.read())
-    stderr_log = str2str(cmd_open.stderr.read())
-    if 'returncode=' in stdout_log:
-        index = stdout_log.find('returncode=') + 11
-        exit_code = str(stdout_log[index:]).strip('\r\n')
-    stdout_log = '<![CDATA[' + stdout_log + ']]>'
-    stderr_log = '<![CDATA[' + stderr_log + ']]>'
-
-    return [exit_code, stdout_log, stderr_log]
diff --git a/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite1.0/commodule/autoexec.pyc b/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite1.0/commodule/autoexec.pyc
deleted file mode 100755 (executable)
index 799851b..0000000
Binary files a/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite1.0/commodule/autoexec.pyc and /dev/null differ
diff --git a/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite1.0/commodule/connector.py b/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite1.0/commodule/connector.py
deleted file mode 100755 (executable)
index a552164..0000000
+++ /dev/null
@@ -1,47 +0,0 @@
-#!/usr/bin/python
-#
-# Copyright (C) 2013 Intel Corporation
-#
-# 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
-# of the License, or (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 51 Franklin Street, Fifth Floor,Boston, MA 02110-1301,USA.
-#
-# Authors:
-#              Liu,chengtao <chengtaox.liu@intel.com>
-"""Test connector for test instance and target instance"""
-
-from .log import LOGGER
-
-
-class Connector:
-
-    """Communication module for test host and test remote"""
-
-    def __init__(self, config):
-        self.conn = None
-        if "testmode" in config:
-            try:
-                exec "from impl.%s import get_target_conn" % config[
-                    "testmode"]
-                device_no = config.get('deviceid', None)
-                if device_no is not None:
-                    self.conn = get_target_conn(device_no)
-                else:
-                    self.conn = get_target_conn()
-            except Exception as error:
-                LOGGER.error("[Error: Failed to initilize com-module,"
-                             " exception: % s]\n" % error)
-
-    def get_connector(self):
-        """list the handler instance"""
-        return self.conn
diff --git a/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite1.0/commodule/connector.pyc b/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite1.0/commodule/connector.pyc
deleted file mode 100755 (executable)
index 892603b..0000000
Binary files a/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite1.0/commodule/connector.pyc and /dev/null differ
diff --git a/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite1.0/commodule/httprequest.py b/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite1.0/commodule/httprequest.py
deleted file mode 100755 (executable)
index 97ad3f3..0000000
+++ /dev/null
@@ -1,55 +0,0 @@
-#!/usr/bin/python
-#
-# Copyright (C) 2012 Intel Corporation
-#
-# 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
-# of the License, or (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 51 Franklin Street, Fifth Floor,
-# Boston, MA  02110-1301, USA.
-#
-# Authors:
-#           Liu,chengtao <chengtaox.liu@intel.com>
-""" The http request process module"""
-
-import requests
-import json
-
-
-def get_url(baseurl, api):
-    """get full url string"""
-    return "%s%s" % (baseurl, api)
-
-
-def http_request(url, rtype="POST", data=None, time_out=10):
-    """
-    http request to the device http server
-    """
-    result = None
-    if rtype == "POST":
-        headers = {'content-type': 'application/json'}
-        try:
-            ret = requests.post(url, data=json.dumps(
-                data), headers=headers, timeout=time_out)
-
-            if ret:
-                result = ret.json()
-        except Exception as error:
-            pass
-    elif rtype == "GET":
-        try:
-            ret = requests.get(url, params=data, timeout=time_out)
-            if ret:
-                result = ret.json()
-        except Exception as error:
-            pass
-    return result
diff --git a/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite1.0/commodule/httprequest.pyc b/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite1.0/commodule/httprequest.pyc
deleted file mode 100755 (executable)
index 455a4c9..0000000
Binary files a/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite1.0/commodule/httprequest.pyc and /dev/null differ
diff --git a/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite1.0/commodule/impl/Makefile.am b/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite1.0/commodule/impl/Makefile.am
deleted file mode 100755 (executable)
index 2d91657..0000000
+++ /dev/null
@@ -1,22 +0,0 @@
-# Copyright (C) 2012 Intel Corporation
-# 
-# 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
-# of the License, or (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
-#
-# Authors:
-#              Yuanyuan,Zou  <zouyuanx@intel.com>
-
-
-commoduleimpldir = /usr/lib/python2.7/dist-packages/commodule/impl
-dist_commoduleimpl_SCRIPTS = *.py
diff --git a/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite1.0/commodule/impl/__init__.py b/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite1.0/commodule/impl/__init__.py
deleted file mode 100755 (executable)
index 8b13789..0000000
+++ /dev/null
@@ -1 +0,0 @@
-
diff --git a/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite1.0/commodule/impl/localhost.py b/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite1.0/commodule/impl/localhost.py
deleted file mode 100755 (executable)
index 94bc888..0000000
+++ /dev/null
@@ -1,146 +0,0 @@
-#!/usr/bin/python
-#
-# Copyright (C) 2012 Intel Corporation
-#
-# 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
-# of the License, or (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 51 Franklin Street, Fifth Floor,
-# Boston, MA  02110-1301, USA.
-#
-# Authors:
-#           Liu,chengtao <chengtaox.liu@intel.com>
-
-""" The implementation of local host communication"""
-
-import os
-import time
-import socket
-import re
-from shutil import copyfile
-
-from commodule.log import LOGGER
-from commodule.autoexec import shell_command, shell_command_ext
-
-
-HOST_NS = "127.0.0.1"
-os.environ['no_proxy'] = HOST_NS
-APP_QUERY_STR = "ps aux | grep %s | grep -v grep"
-
-
-class LocalHost:
-
-    """ Implementation for transfer data
-        between Host and Tizen PC
-    """
-
-    def __init__(self):
-        self.deviceid = "localhost"
-
-    def shell_cmd(self, cmd="", timeout=15):
-        return shell_command(cmd, timeout)
-
-    def check_process(self, process_name):
-        exit_code, ret = shell_command(APP_QUERY_STR % process_name)
-        return len(ret)
-
-    def launch_stub(self, stub_app, stub_port="8000", debug_opt=""):
-        cmdline = "%s --port:%s %s" % (stub_app, stub_port, debug_opt)
-        exit_code, ret = self.shell_cmd(cmdline)
-        time.sleep(2)
-
-    def check_widget_process(self, wgt_name):
-        return True
-
-    def shell_cmd_ext(self,
-                      cmd="",
-                      timeout=None,
-                      boutput=False,
-                      stdout_file=None,
-                      stderr_file=None):
-        return shell_command_ext(cmd, timeout, boutput, stdout_file, stderr_file)
-
-    def get_device_ids(self):
-        """
-            get device list of ids
-        """
-        return ['localhost']
-
-    def get_device_info(self):
-        """
-            get tizen device inforamtion
-        """
-        device_info = {}
-        device_info["device_id"] = self.deviceid
-        device_info["resolution"] = "N/A"
-        device_info["screen_size"] = "N/A"
-        device_info["device_model"] = "N/A"
-        device_info["device_name"] = "N/A"
-        device_info["os_version"] = "N/A"
-        device_info["build_id"] = "N/A"
-        return device_info
-
-    def get_server_url(self, remote_port="8000"):
-        """get server url"""
-        url_forward = "http://%s:%s" % (HOST_NS, remote_port)
-        return url_forward
-
-    def install_package(self, pkgpath):
-        """
-           install a package on tizen device
-        """
-        cmd = "rpm -ivh %s" % pkgpath
-        exit_code, ret = shell_command(cmd)
-        return ret
-
-    def get_installed_package(self):
-        """get list of installed package from device"""
-        cmd = "rpm -qa | grep tct"
-        exit_code, ret = shell_command(cmd)
-        return ret
-
-    def download_file(self, remote_path, local_path):
-        """download file"""
-        # copyfile(remote_path, local_path)
-        # return True
-        return False
-
-    def upload_file(self, remote_path, local_path):
-        """upload file"""
-        # copyfile(local_path, remote_path)
-        return False
-
-    def get_launcher_opt(self, test_launcher, test_suite, test_set, fuzzy_match, auto_iu):
-        """get test option dict """
-        test_opt = {}
-        test_opt["suite_name"] = test_suite
-        test_opt["launcher"] = test_launcher
-        test_opt["test_app_id"] = test_launcher
-        return test_opt
-
-    def launch_app(self, wgt_name):
-        exit_code, ret = shell_command(wgt_name + '&')
-        return True
-
-    def kill_app(self, wgt_name):
-        return True
-
-    def start_debug(self, dlogfile):
-        pass
-
-    def stop_debug(self):
-        pass
-
-
-def get_target_conn():
-    """ Get connection for Test Target"""
-    return LocalHost()
diff --git a/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite1.0/commodule/impl/tizenmobile.py b/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite1.0/commodule/impl/tizenmobile.py
deleted file mode 100755 (executable)
index a72ad59..0000000
+++ /dev/null
@@ -1,467 +0,0 @@
-#!/usr/bin/python
-#
-# Copyright (C) 2012 Intel Corporation
-#
-# 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
-# of the License, or (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
-# MA  02110-1301, USA.
-#
-# Authors:
-#           Chengtao,Liu  <chengtaox.liu@intel.com>
-
-""" The implementation of TIZEN mobile communication"""
-
-import os
-import time
-import socket
-import threading
-import re
-import shutil
-import ConfigParser
-import platform
-import xml.etree.ElementTree as etree
-
-from commodule.log import LOGGER
-from commodule.autoexec import shell_command, shell_command_ext
-from commodule.killall import killall
-
-TCT_CONFIG_FILE = "/opt/tools/TCT_CONFIG"
-tct_parser = ConfigParser.ConfigParser()
-tct_parser.read(TCT_CONFIG_FILE)
-
-DEVICE_SUITE_TARGET_24 = tct_parser.get('DEVICE', 'DEVICE_SUITE_TARGET_24')
-DEVICE_SUITE_TARGET_30 = tct_parser.get('DEVICE', 'DEVICE_SUITE_TARGET_30')
-
-LOCAL_HOST_NS = "127.0.0.1"
-RPM_INSTALL = "sdb -s %s shell rpm -ivh %s"
-RPM_UNINSTALL = "sdb -s %s shell rpm -e %s"
-RPM_LIST = "sdb -s %s shell \"rpm -qa|grep tct\""
-APP_QUERY_STR = "sdb -s %s shell \"ps aux|grep '%s'|grep -v grep\"|awk '{print $2}'"
-APP_KILL_STR = "sdb -s %s shell kill -9 %s"
-WRT_QUERY_STR = "sdb -s %s shell wrt-launcher -l | grep '%s'|awk '{print $2\":\"$NF}'"
-WRT_START_STR = "sdb -s %s shell 'wrt-launcher -s %s; echo returncode=$?'"
-WRT_STOP_STR = "sdb -s %s shell wrt-launcher -k %s"
-WRT_INSTALL_STR = "sdb -s %s shell pkgcmd -i -t wgt -q -p %s"
-WRT_UNINSTL_STR = "sdb -s %s shell pkgcmd -u -t wgt -q -n %s"
-WRT_SMOCK_STR = "sdb -s %s shell 'echo \"%s sdbd rw\" | smackload'"
-WRT_SMOCK_REV_STR = "sdb -s %s shell 'echo \"sdbd %s rw\" | smackload'"
-WRT_LOCATION = os.path.join(DEVICE_SUITE_TARGET_24, "tct/opt/%s/%s.wgt")
-DLOG_CLEAR = "sdb -s %s shell dlogutil -c"
-DLOG_WRT = "sdb -s %s shell dlogutil -v threadtime"
-
-SDB_COMMAND_RTN =  "sdb -s %s shell '%s; echo returncode=$?'"
-
-# redefine constants for windows
-if platform.system() == "Windows":
-    WRT_START_STR = 'sdb -s %s shell "wrt-launcher -s %s; echo returncode=$?"'
-    SDB_COMMAND_RTN =  'sdb -s %s shell "%s; echo returncode=$?"'
-
-def debug_trace(cmdline, logfile):
-    global debug_flag, metux
-    wbuffile = file(logfile, "w")
-    import subprocess
-    exit_code = None
-    proc = subprocess.Popen(args=cmdline,
-                            shell=True,
-                            stdout=wbuffile,
-                            stderr=None)
-    while True:
-        exit_code = proc.poll()
-        if exit_code is not None:
-            break
-        time.sleep(0.5)
-        metux.acquire()
-        proc_flag = debug_flag
-        metux.release()
-        if not proc_flag:
-            break
-    wbuffile.close()
-    if exit_code is None:
-        killall(proc.pid)
-
-
-def _get_device_ids():
-    """get tizen device list of ids"""
-    result = []
-    exit_code, ret = shell_command("sdb devices")
-    for line in ret:
-        if str.find(line, "\tdevice") != -1:
-            result.append(line.split("\t")[0])
-    return result
-
-
-class TizenMobile:
-
-    """
-    Implementation for transfer data
-    between Host and Tizen Mobile Device
-    """
-
-    def __init__(self, device_id=None):
-        self.deviceid = device_id
-        self.is_NE = 0
-        if self.deviceid and self.deviceid.find('NE') > -1:
-            self.is_NE = int(self.deviceid.split(':')[1].split('_')[0])
-            self.deviceid = self.deviceid.split('_')[1]
-        
-        self._wrt = False
-
-    def is_NE_mode(self):
-        return self.is_NE
-
-    def get_devid(self):
-        return self.deviceid
-
-    def shell_cmd(self, cmd="", timeout=15):
-        cmdline = "sdb -s %s shell \"%s\" " % (self.deviceid, cmd)
-        return shell_command(cmdline, timeout)
-
-    def check_process(self, process_name):
-        exit_code, ret = shell_command(
-            APP_QUERY_STR % (self.deviceid, process_name))
-        return len(ret)
-
-    def launch_stub(self, stub_app, stub_port, debug_opt=""):
-        cmdline = "/opt/home/developer/%s --port:%s %s; sleep 2s" \
-                % (stub_app, stub_port, debug_opt)
-        exit_code, ret = self.shell_cmd(cmdline)
-        time.sleep(2)
-
-    def shell_cmd_ext(self,
-                      cmd="",
-                      timeout=None,
-                      boutput=False,
-                      stdout_file=None,
-                      stderr_file=None):
-            
-        cmdline = SDB_COMMAND_RTN % (
-            self.deviceid, cmd)
-        return shell_command_ext(cmdline, timeout, boutput, \
-                stdout_file, stderr_file)
-
-    def get_device_info(self):
-        """get tizen device inforamtion"""
-        device_info = {}
-        resolution_str = ""
-        screen_size_str = ""
-        device_model_str = ""
-        device_name_str = ""
-        build_id_str = ""
-        os_version_str = ""
-
-        # get resolution and screen size
-        exit_code, ret = shell_command(
-            "sdb -s %s shell xrandr" % self.deviceid)
-        pattern = re.compile("connected (\d+)x(\d+).* (\d+mm) x (\d+mm)")
-        for line in ret:
-            match = pattern.search(line)
-            if match:
-                resolution_str = "%s x %s" % (match.group(1), match.group(2))
-                screen_size_str = "%s x %s" % (match.group(3), match.group(4))
-
-        # get architecture
-        exit_code, ret = shell_command(
-            "sdb -s %s shell uname -m" % self.deviceid)
-        if len(ret) > 0:
-            device_model_str = ret[0]
-
-        # get hostname
-        exit_code, ret = shell_command(
-            "sdb -s %s shell uname -n" % self.deviceid)
-        if len(ret) > 0:
-            device_name_str = ret[0]
-
-        # get os version
-        exit_code, ret = shell_command(
-            "sdb -s %s shell cat /etc/issue" % self.deviceid)
-        for line in ret:
-            if len(line) > 1:
-                os_version_str = "%s %s" % (os_version_str, line)
-
-        # get build id
-        exit_code, ret = shell_command(
-            "sdb -s %s shell cat /etc/os-release" % self.deviceid)
-        for line in ret:
-            if line.find("BUILD_ID=") != -1:
-                build_id_str = line.split('=')[1].strip('\"\r\n')
-
-        os_version_str = os_version_str[0:-1]
-
-        device_info["device_id"] = self.deviceid
-        device_info["resolution"] = resolution_str
-        device_info["screen_size"] = screen_size_str
-        device_info["device_model"] = device_model_str
-        device_info["device_name"] = device_name_str
-        device_info["os_version"] = os_version_str
-        device_info["build_id"] = build_id_str
-        return device_info
-
-    def get_buildinfo(self, _tizenV):
-        """ get builf info"""
-        device_file = ""
-        if _tizenV and _tizenV.find("3.0") > -1:
-            device_file = DEVICE_SUITE_TARGET_30 + '/Documents/tct/buildinfo.xml'
-        elif _tizenV and _tizenV.find("4.0") > -1:
-            device_file = DEVICE_SUITE_TARGET_30 + '/Documents/tct/buildinfo.xml'
-        elif _tizenV and _tizenV.find("5.0") > -1:
-            device_file = DEVICE_SUITE_TARGET_30 + '/Documents/tct/buildinfo.xml'
-        elif _tizenV and _tizenV.find("5.5") > -1:
-            device_file = DEVICE_SUITE_TARGET_30 + '/Documents/tct/buildinfo.xml'
-        else:
-            device_file = DEVICE_SUITE_TARGET_24 + '/Documents/tct/buildinfo.xml'
-
-        builfinfo_file = '/opt/testkit/lite2.4/' + self.deviceid + '/buildinfo.xml'
-        build_info = {}
-        build_info['buildid'] = ''
-        build_info['manufacturer'] = ''
-        build_info['model'] = ''
-
-        if self.download_file(device_file, builfinfo_file) \
-            and os.path.exists(builfinfo_file):
-            root = etree.parse(builfinfo_file).getroot()
-            for element in root.findall("buildinfo"):
-                if element is not None:
-                    if element.get("name").lower() == 'buildversion':
-                        child = etree.Element.getchildren(element)
-                        if child and child[0].text:
-                            buildid = child[0].text
-                            build_info['buildid'] = buildid
-                    if element.get("name").lower() == 'manufacturer':
-                        child = etree.Element.getchildren(element)
-                        if child and child[0].text:
-                            manufacturer = child[0].text
-                            build_info['manufacturer'] = manufacturer
-                    if element.get("name").lower() == 'model':
-                        child = etree.Element.getchildren(element)
-                        if child and child[0].text:
-                            model = child[0].text
-                            build_info['model'] = model
-            os.remove(builfinfo_file)
-        return build_info
-
-
-    def get_server_url(self, remote_port="8000"):
-        """forward request a host tcp port to targe tcp port"""
-        if remote_port is None:
-            return None
-
-        os.environ['no_proxy'] = LOCAL_HOST_NS
-        host = LOCAL_HOST_NS
-        inner_port = 9000
-        time_out = 2
-        bflag = False
-        while True:
-            sock_inner = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
-            sock_inner.settimeout(time_out)
-            try:
-                sock_inner.bind((host, inner_port))
-                sock_inner.close()
-                bflag = False
-            except socket.error as error:
-                if error.errno == 98 or error.errno == 13:
-                    bflag = True
-            if bflag:
-                inner_port += 1
-            else:
-                break
-        host_port = str(inner_port)
-        cmd = "sdb -s %s forward tcp:%s tcp:%s" % \
-            (self.deviceid, host_port, remote_port)
-        exit_code, ret = shell_command(cmd)
-        url_forward = "http://%s:%s" % (host, host_port)
-        return url_forward
-
-    def download_file(self, remote_path, local_path):
-        """download file from device"""
-            
-        local_path_dir = os.path.dirname(local_path)
-        if not os.path.exists(local_path_dir):
-            os.makedirs(local_path_dir)
-        filename = os.path.basename(remote_path)
-        cmd = "sdb -s %s pull %s %s" % (
-            self.deviceid, remote_path, local_path_dir)
-        exit_code, ret = shell_command(cmd)
-        if exit_code != 0:
-            error = ret[0].strip('\r\n') if len(ret) else "sdb shell timeout"
-            LOGGER.info("[ Download file \"%s\" failed, error: %s ]"
-                        % (remote_path, error))
-            return False
-        else:
-            src_path = os.path.join(local_path_dir, filename)
-            if src_path != local_path:
-                shutil.move(src_path, local_path)
-            return True
-
-    def upload_file(self, remote_path, local_path):
-        """upload file to device"""
-        cmd = "sdb -s %s push %s %s" % (self.deviceid, local_path, remote_path)
-        exit_code, ret = shell_command(cmd)
-        if exit_code != 0:
-            error = ret[0].strip('\r\n') if len(ret) else "sdb shell timeout"
-            LOGGER.info("[ Upload file \"%s\" failed,"
-                        " get error: %s ]" % (local_path, error))
-            return False
-        else:
-            return True
-
-    def get_launcher_opt(self, test_launcher, test_suite, test_set, \
-            fuzzy_match, auto_iu):
-        """
-        get test option dict
-        """
-        test_opt = {}
-        test_opt["suite_name"] = test_suite
-        test_opt["launcher"] = test_launcher
-        test_opt["test_app_id"] = test_launcher
-        self._wrt = False
-        if test_launcher.find('WRTLauncher') != -1:
-            self._wrt = True
-            cmd = ""
-            test_app_id = None
-            test_opt["launcher"] = "wrt-launcher"
-            # test suite need to be installed by commodule
-            if auto_iu:
-                test_wgt = test_set
-                test_wgt_path = WRT_LOCATION % (test_suite, test_wgt)
-                if not self.install_app(test_wgt_path):
-                    LOGGER.info("[ failed to install widget \"%s\" in target ]"
-                                % test_wgt)
-                    return None
-            else:
-                test_wgt = test_suite
-
-            # query the whether test widget is installed ok
-            cmd = WRT_QUERY_STR % (self.deviceid, test_wgt)
-            exit_code, ret = shell_command(cmd)
-            if exit_code == -1:
-                return None
-            for line in ret:
-                items = line.split(':')
-                if len(items) < 1:
-                    continue
-                if (fuzzy_match and items[0].find(test_wgt) != -1) \
-                        or items[0] == test_wgt:
-                    test_app_id = items[1].strip('\r\n')
-                    break
-
-            if test_app_id is None:
-                LOGGER.info("[ test widget \"%s\" not found in target ]"
-                            % test_wgt)
-                return None
-            else:
-                test_opt["test_app_id"] = test_app_id
-
-            cmd1 = WRT_SMOCK_STR % (self.deviceid, test_app_id.split('.')[0])
-            cmd2 = WRT_SMOCK_REV_STR % \
-                    (self.deviceid, test_app_id.split('.')[0])
-            shell_command(cmd1)
-            shell_command(cmd2)
-
-        return test_opt
-
-    def install_package(self, pkgpath):
-        """install a package on tizen device:
-        push package and install with shell command
-        """
-        cmd = RPM_INSTALL % (self.deviceid, pkgpath)
-        exit_code, ret = shell_command(cmd)
-        return ret
-
-    def uninstall_package(self, pkgname):
-        """install a package on tizen device:
-        push package and install with shell command
-        """
-        cmd = RPM_UNINSTALL % (self.deviceid, pkgname)
-        exit_code, ret = shell_command(cmd)
-        return ret
-
-    def get_installed_package(self):
-        """get list of installed package from device"""
-        cmd = RPM_LIST % self.deviceid
-        exit_code, ret = shell_command(cmd)
-        return ret
-    def start_debug(self, dlogfile):
-        global debug_flag, metux
-        if self.is_NE_mode():
-            return 
-        debug_flag = True
-        metux = threading.Lock()
-        cmdline = DLOG_CLEAR % self.deviceid
-        exit_code, ret = shell_command(cmdline)
-        cmdline = DLOG_WRT % self.deviceid
-        LOGGER.debug("[ DLOGFILE_PATH:%s ]" % str(dlogfile))
-        th = threading.Thread(target=debug_trace, args=(cmdline, dlogfile))
-        th.setDaemon(True)
-        th.start()
-
-    def stop_debug(self):
-        global debug_flag, metux
-        if self.is_NE_mode():
-            return 
-
-        metux.acquire()
-        debug_flag = False
-        metux.release()
-
-    def launch_app(self, wgt_name):
-        if not self._wrt:
-            exit_code, ret = self.shell_cmd(wgt_name)
-            return True
-        timecnt = 0
-        blauched = False
-        cmdline = WRT_STOP_STR % (self.deviceid, wgt_name)
-        exit_code, ret = shell_command(cmdline)
-        cmdline = WRT_START_STR % (self.deviceid, wgt_name)
-        while timecnt < 3:
-            exit_code, ret_out, ret_err = shell_command_ext(cmdline, 30)
-            if exit_code == "0":
-                blauched = True
-                break
-            timecnt += 1
-            time.sleep(3)
-        return blauched
-
-    def kill_app(self, wgt_name):
-        if not self._wrt:
-            return True
-        cmdline = WRT_STOP_STR % (self.deviceid, wgt_name)
-        exit_code, ret = shell_command(cmdline)
-        return True
-
-    def install_app(self, wgt_path="", timeout=90):
-        cmd = WRT_INSTALL_STR % (self.deviceid, wgt_path)
-        exit_code, ret = shell_command(cmd, timeout)
-        if exit_code == -1:
-            cmd = APP_QUERY_STR % (self.deviceid, wgt_path)
-            exit_code, ret = shell_command(cmd)
-            for line in ret:
-                cmd = APP_KILL_STR % (self.deviceid, line.strip('\r\n'))
-                exit_code, ret = shell_command(cmd)
-            return False
-        else:
-            return True
-
-    def uninstall_app(self, wgt_name):
-        cmd = WRT_UNINSTL_STR % (self.deviceid, wgt_name.split('.')[0])
-        exit_code, ret = shell_command(cmd)
-        return True
-
-
-def get_target_conn(device_id=None):
-    """ Get connection for Test Target"""
-    if device_id is None:
-        dev_list = _get_device_ids()
-        device_id = dev_list[0] if len(dev_list) else None
-    return TizenMobile(device_id)
diff --git a/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite1.0/commodule/killall.py b/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite1.0/commodule/killall.py
deleted file mode 100755 (executable)
index 28f6070..0000000
+++ /dev/null
@@ -1,74 +0,0 @@
-#!/usr/bin/python
-#
-# Copyright (C) 2012 Intel Corporation
-#
-# 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
-# of the License, or (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 51 Franklin Street, Fifth Floor,
-# Boston, MA  02110 - 1301, USA.
-#
-# Authors:
-#              Zhang, Huihui <huihuix.zhang@intel.com>
-#              Wendong,Sui  <weidongx.sun@intel.com>
-""" The process kill for os"""
-
-import os
-import platform
-import signal
-import re
-import ctypes
-
-
-def killall(ppid):
-    """Kill all children process by parent process ID"""
-    os_ver = platform.system()
-    try:
-        if os_ver == "Linux" or os_ver == "Darwin":
-            ppid = str(ppid)
-            pidgrp = []
-
-            def getchildpids(ppid):
-                """Return a list of children process"""
-                command = "ps -ef | awk '{if ($3 == %s) print $2;}'" % str(
-                    ppid)
-                pids = os.popen(command).read()
-                pids = pids.split()
-                return pids
-
-            pidgrp.extend(getchildpids(ppid))
-            for pid in pidgrp:
-                pidgrp.extend(getchildpids(pid))
-            # Insert self process ID to PID group list
-            pidgrp.insert(0, ppid)
-            while len(pidgrp) > 0:
-                pid = pidgrp.pop()
-                try:
-                    os.kill(int(pid), signal.SIGKILL)
-                except OSError, error:
-                    pattern = re.compile('No such process')
-                    match = pattern.search(str(error))
-                    if not match:
-                        print "[ Error: fail to kill pid: %s," \
-                            " error: %s ]\n" % (int(pid), error)
-        # kill for windows platform
-        else:
-            kernel32 = ctypes.windll.kernel32
-            handle = kernel32.OpenProcess(1, 0, int(ppid))
-            kernel32.TerminateProcess(handle, 0)
-    except OSError, error:
-        pattern = re.compile('No such process')
-        match = pattern.search(str(error))
-        if not match:
-            print "[ Error: fail to kill pid: %s, error: %s ]\n" \
-                % (int(ppid), error)
-    return None
diff --git a/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite1.0/commodule/killall.pyc b/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite1.0/commodule/killall.pyc
deleted file mode 100755 (executable)
index edbc428..0000000
Binary files a/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite1.0/commodule/killall.pyc and /dev/null differ
diff --git a/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite1.0/commodule/log.py b/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite1.0/commodule/log.py
deleted file mode 100755 (executable)
index 8c4fee6..0000000
+++ /dev/null
@@ -1,101 +0,0 @@
-#!/usr/bin/python
-#
-# Copyright (C) 2013 Intel Corporation
-#
-# 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
-# of the License, or (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 51 Franklin Street, Fifth Floor,
-# Boston, MA  02110-1301, USA.
-#
-# Authors:
-#              Liu,chengtao <liux.chengtao@intel.com>
-"""General Implementation"""
-
-import threading
-import logging
-import logging.handlers
-import sys
-import os
-
-# logger levels
-LEVELS = {"CRITICAL": 50,
-          "ERROR": 40,
-          "WARNING": 30,
-          "INFO": 20,
-          "DEBUG": 10,
-          "NOTSET": 0
-          }
-
-
-class Logger:
-
-    """General Logger Class"""
-    _instance = None
-    _mutex = threading.Lock()
-
-    def __init__(self, level="DEBUG", format_str="%(message)s"):
-        """Generate root logger"""
-        self._logger = logging.getLogger("TCT")
-        self._logger.setLevel(LEVELS[level])
-        self._formatter = logging.Formatter(format_str)
-        self.add_print_logger()
-
-    def add_print_logger(self, level="INFO"):
-        """Generate console writer [StreamHandler]"""
-        writer = logging.StreamHandler(sys.stdout)
-        writer.setLevel(LEVELS[level])
-        writer.setFormatter(self._formatter)
-        self._logger.addHandler(writer)
-
-    @staticmethod
-    def get_logger(level="DEBUG", format_str="%(message)s"):
-        """sinlgeton of Logger"""
-        if Logger._instance is None:
-            Logger._mutex.acquire()
-            if Logger._instance is None:
-                Logger._instance = Logger(level, format_str)
-            else:
-                pass
-            Logger._mutex.release()
-        return Logger._instance
-
-    def debug(self, msg):
-        """debug level message"""
-        if msg is not None:
-            sys.stdout.write(msg + '\r\n')
-            sys.stdout.flush()
-
-    def info(self, msg):
-        """info level message"""
-        if msg is not None:
-            sys.stdout.write(msg + '\r\n')
-            sys.stdout.flush()
-
-    def warning(self, msg):
-        """warning level message"""
-        if msg is not None:
-            self._logger.warning(msg)
-
-    def error(self, msg):
-        """error level message"""
-        if msg is not None:
-            sys.stdout.write(msg + '\r\n')
-            sys.stdout.flush()
-
-    def critical(self, msg):
-        """critical level message"""
-        if msg is not None:
-            self._logger.critical(msg)
-
-
-LOGGER = Logger.get_logger(level=os.environ.get('LOG_LEVEL', 'INFO'))
diff --git a/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite1.0/commodule/log.pyc b/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite1.0/commodule/log.pyc
deleted file mode 100755 (executable)
index 772cafe..0000000
Binary files a/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite1.0/commodule/log.pyc and /dev/null differ
diff --git a/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite1.0/commodule/str2.py b/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite1.0/commodule/str2.py
deleted file mode 100755 (executable)
index 96ecdc7..0000000
+++ /dev/null
@@ -1,71 +0,0 @@
-#!/usr/bin/python
-#
-# Copyright (C) 2012 Intel Corporation
-#
-# 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
-# of the License, or (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
-# MA  02110-1301, USA.
-#
-# Authors:
-#              Zhang, Huihui <huihuix.zhang@intel.com>
-#              Wendong,Sui  <weidongx.sun@intel.com>
-""" string convertor"""
-
-from types import IntType, FloatType, LongType
-import string
-
-
-def str2str(src):
-    """string to printable string"""
-    if isinstance(src, unicode):
-        return src.encode("utf8")
-
-    if isinstance(src, str):
-        accept = string.punctuation + string.letters + string.digits + ' \r\n'
-        return filter(lambda x: x in accept, src)
-
-    return ""
-
-
-def str2val(src):
-    """string to program value"""
-    ret = None
-    try:
-        ret = eval(str2str(src))
-    except:
-        pass
-    return ret
-
-
-def str2bool(src):
-    """string to boolean"""
-    if "TRUE" == str2str(src).upper():
-        return True
-    if "FALSE" == str2str(src).upper():
-        return False
-    return None
-
-
-def str2number(src):
-    """string to boolean"""
-    val = str2val(str2str(src))
-    if type(val) in [IntType, FloatType, LongType]:
-        return val
-    else:
-        return None
-
-
-def str2xmlstr(src):
-    """string to xml string value"""
-    return src.replace('\n', '\\n')
diff --git a/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite1.0/commodule/str2.pyc b/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite1.0/commodule/str2.pyc
deleted file mode 100755 (executable)
index 1605ae2..0000000
Binary files a/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite1.0/commodule/str2.pyc and /dev/null differ
diff --git a/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite1.0/debian/changelog b/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite1.0/debian/changelog
deleted file mode 100755 (executable)
index a7ad288..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-testkit-lite (2.3.22) unstable; urgency=low
-
-  * TCT2.3 Release.
-
- -- ChengTao Liu <chengtaox.liu@intel.com>  Mon, 4 Nov 2013 11:13:11 +0800
diff --git a/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite1.0/debian/compat b/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite1.0/debian/compat
deleted file mode 100755 (executable)
index 45a4fb7..0000000
+++ /dev/null
@@ -1 +0,0 @@
-8
diff --git a/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite1.0/debian/control b/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite1.0/debian/control
deleted file mode 100755 (executable)
index a30c031..0000000
+++ /dev/null
@@ -1,16 +0,0 @@
-Source: testkit-lite
-Section: utils
-Priority: standard
-Maintainer: Cathy Shen <cathy.shen@intel.com>
-Build-Depends: debhelper (>= 8.0.0), python-setuptools, python-support (>= 0.8.4)
-Standards-Version: 3.9.3
-Homepage: https://github.com/testkit/testkit-lite
-#Vcs-Git: git://git.debian.org/collab-maint/testkit-manager.git
-#Vcs-Browser: http://git.debian.org/?p=collab-maint/testkit-manager.git;a=summary
-
-Package: testkit-lite
-Architecture: all
-Depends: ${misc:Depends}, ${python:Depends}
-XB-Python-Version: ${python:Versions}
-Description: Test runner for test execution.
-
diff --git a/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite1.0/debian/copyright b/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite1.0/debian/copyright
deleted file mode 100755 (executable)
index 71edd1c..0000000
+++ /dev/null
@@ -1,27 +0,0 @@
-Format: http://dep.debian.net/deps/dep5
-Source: https://github.com/testkit/testkit-lite
-
-Files: *
-Copyright: 2012-2013 Intel Corp. 
-License: GPL-2.0
-
-Files: debian/*
-Copyright: 2012-2013 Intel Corp.
-License: GPL-2.0
-
-License: GPL-2.0
- 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 of the License
- .
- This package is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- GNU General Public License for more details.
- .
- You should have received a copy of the GNU General Public License
- along with this program. If not, see <http://www.gnu.org/licenses/>.
- .
- On Debian systems, the complete text of the GNU General
- Public License version 3 can be found in "/usr/share/common-licenses/GPL-3".
-
diff --git a/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite1.0/debian/docs b/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite1.0/debian/docs
deleted file mode 100755 (executable)
index e845566..0000000
+++ /dev/null
@@ -1 +0,0 @@
-README
diff --git a/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite1.0/debian/files b/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite1.0/debian/files
deleted file mode 100755 (executable)
index c282b42..0000000
+++ /dev/null
@@ -1 +0,0 @@
-testkit-lite_2.3.20_all.deb utils standard
diff --git a/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite1.0/debian/postinst b/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite1.0/debian/postinst
deleted file mode 100755 (executable)
index 1712e40..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-#!/bin/sh
-
-# Set permissions
-mkdir /opt/testkit/lite2.4/test_packages
-chmod ugo+rwx -R /opt/testkit/lite2.4
-ln -fs /usr/share/pyshared/commodule /usr/lib/python2.7/dist-packages/commodule
-ln -fs /usr/share/pyshared/testkitlite /usr/lib/python2.7/dist-packages/testkitlite
-
diff --git a/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite1.0/debian/rules b/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite1.0/debian/rules
deleted file mode 100755 (executable)
index abde6ef..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-#!/usr/bin/make -f
-
-%:
-       dh $@
-
diff --git a/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite1.0/doc/Makefile.am b/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite1.0/doc/Makefile.am
deleted file mode 100755 (executable)
index fd6a597..0000000
+++ /dev/null
@@ -1,22 +0,0 @@
-# Copyright (C) 2012 Intel Corporation
-# 
-# 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
-# of the License, or (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
-#
-# Authors:
-#              Zhang, Huihui <huihuix.zhang@intel.com>
-#              Wendong,Sui  <weidongx.sun@intel.com>
-
-testkitdocdir = /opt/testkit/lite2.4/doc
-dist_testkitdoc_DATA = testkit-lite_user_guide_for_tct.pdf
diff --git a/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite1.0/doc/testkit-lite_user_guide.pdf b/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite1.0/doc/testkit-lite_user_guide.pdf
deleted file mode 100755 (executable)
index 95af88e..0000000
Binary files a/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite1.0/doc/testkit-lite_user_guide.pdf and /dev/null differ
diff --git a/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite1.0/doc/testkit-lite_user_guide_for_tct.pdf b/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite1.0/doc/testkit-lite_user_guide_for_tct.pdf
deleted file mode 100755 (executable)
index c0d9323..0000000
Binary files a/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite1.0/doc/testkit-lite_user_guide_for_tct.pdf and /dev/null differ
diff --git a/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite1.0/packaging/Makefile b/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite1.0/packaging/Makefile
deleted file mode 100755 (executable)
index 24da850..0000000
+++ /dev/null
@@ -1,21 +0,0 @@
-PKG_NAME := testkit-lite
-SPECFILE = $(addsuffix .spec, $(PKG_NAME))
-PKG_VERSION := $(shell grep '^Version: ' $(SPECFILE)|awk '{print $$2}')
-
-TARBALL := $(PKG_NAME)_$(PKG_VERSION).tar.gz
-
-dsc: $(TARBALL)
-               $(eval MD5=$(shell md5sum $(TARBALL) | sed "s/  / $(shell stat -c '%s' $(TARBALL)) /"))
-                       @sed  -i 's/^Version:.*/Version: $(PKG_VERSION)/' $(PKG_NAME).dsc
-                       @sed  -i 's/ [a-f0-9]\+ [0-9]\+ $(PKG_NAME).*tar.*/ $(MD5)/' $(PKG_NAME).dsc
-
-$(TARBALL):
-               cd "$$(git rev-parse --show-toplevel)" \
-                       && git archive --prefix $(PKG_NAME)-$(PKG_VERSION)/ HEAD \
-                       | gzip > "$(CURDIR)/$(TARBALL)"
-
-clean:
-               rm -f $(PKG_NAME)*.tar.gz
-
-all: clean dsc
-
diff --git a/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite1.0/packaging/testkit-lite.dsc b/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite1.0/packaging/testkit-lite.dsc
deleted file mode 100755 (executable)
index bc65561..0000000
+++ /dev/null
@@ -1,11 +0,0 @@
-Source: testkit-lite
-Section: utils
-Priority: standard
-Maintainer: Lei Yang <lei.a.yang@intel.com>
-Build-Depends: debhelper (>= 8.0.0), python-setuptools, python-support (>= 0.8.4)
-Standards-Version: 3.9.2
-Homepage: https://github.com/testkit/testkit-manager
-Version: 2.3.4
-Files:
- 82c2118d146839ec9139559f5049d2bf 6361871 testkit-lite_2.3.4.tar.gz
-
diff --git a/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite1.0/packaging/testkit-lite.spec b/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite1.0/packaging/testkit-lite.spec
deleted file mode 100755 (executable)
index f7750f3..0000000
+++ /dev/null
@@ -1,47 +0,0 @@
-Summary: TCT-Lite
-Name: testkit-lite
-Version: 2.3.22
-Release: 1
-License: GPLv2
-Group: Applications/System
-Source: %{name}_%{version}.tar.gz
-
-BuildRequires: python-distribute
-
-%{!?python_sitelib: %define python_sitelib %(python -c "from distutils.sysconfig import get_python_lib; print get_python_lib()")}
-
-%description
-testkit-lite is a test runner with command-line interface.It has the following functions 
-1. Accepts .xml test case descriptor files as input. 
-2. drives automatic test execution. 
-3. provide multiple options to meet various test requirements. 
-
-%prep
-%setup -q
-
-%build
-
-%install
-python setup.py install --prefix=%{_prefix} --root=%{buildroot}
-# remove tests
-rm -rf %{buildroot}/%{python_sitelib}/tests
-
-%clean
-rm -rf %{buildroot}
-
-%post
-# Set permissions
-chmod ugo+rwx /opt/testkit/lite2.4
-
-%files
-%{python_sitelib}/testkitlite/*
-%{python_sitelib}/commodule/*
-%{python_sitelib}/testkit_lite-*.egg-info/*
-/opt/testkit/lite2.4/VERSION
-%{_bindir}/testkit-lite
-%defattr(-,root,root)
-
-%doc
-/opt/testkit/lite2.4/testkit-lite_user_guide_for_tct.pdf
-
-%changelog
diff --git a/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite1.0/setup.py b/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite1.0/setup.py
deleted file mode 100755 (executable)
index 9f6d7f6..0000000
+++ /dev/null
@@ -1,17 +0,0 @@
-#!/usr/bin/python
-
-from setuptools import setup, find_packages
-
-setup(
-    name = "testkit-lite",
-    description = "Test runner for test execution",
-    url = "https://github.com/testkit/testkit-lite",
-    author = "Cathy Shen",
-    author_email = "cathy.shen@intel.com",
-    version = "2.3.22",
-    include_package_data = True,
-    data_files = [('/opt/testkit/lite2.4/',
-                 ('VERSION', 'doc/testkit-lite_user_guide_for_tct.pdf'))],
-    scripts = ('testkit-lite',),
-    packages = find_packages(),
-)
diff --git a/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite1.0/temp/temp b/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite1.0/temp/temp
deleted file mode 100755 (executable)
index e69de29..0000000
diff --git a/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite1.0/testkit-lite b/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite1.0/testkit-lite
deleted file mode 100755 (executable)
index 3d058ae..0000000
+++ /dev/null
@@ -1,567 +0,0 @@
-#!/usr/bin/python
-#
-# Copyright (C) 2012 Intel Corporation
-#
-# 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
-# of the License, or (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
-# USA.
-#
-# Authors:
-#              Jing,Wang  <jing.j.wang@intel.com>
-#              Yuanyuan,Zou  <zouyuanx@intel.com>
-""" testkit lite tools"""
-
-import os
-import sys
-import traceback
-import platform
-import ConfigParser
-import re
-import xml.etree.ElementTree as etree
-from optparse import OptionParser, make_option
-from datetime import datetime
-
-# import logger
-try:
-    from commodule.log import LOGGER
-except ImportError, err:
-    print "[ Error: loading logging failed, error: %s ]\n" % err
-    print "try to run command " \
-        "'export PYTHONPATH=/usr/lib/python2.7/dist-packages' and " \
-        "'export PYTHONPATH=/usr/share/pyshared/' to resolve this issue"
-    sys.exit(1)
-
-# import  process kill
-try:
-    from testkitlite.common.process_killall import kill_testkit_lite, clean_testxml
-except ImportError, err:
-    LOGGER.error("[ Error: loading module killall failed, error: %s ]\n" % err)
-    LOGGER.info("try to run command \
-'export PYTHONPATH=/usr/lib/python2.7/dist-packages' and \
-'export PYTHONPATH=/usr/share/pyshared/' to resolve this issue")
-    sys.exit(1)
-
-# get platform version info
-os_ver = platform.system()
-JOIN = os.path.join
-EXISTS = os.path.exists
-DIRNAME = os.path.dirname
-BASENAME = os.path.basename
-ABSPATH = os.path.abspath
-SPLIT = os.path.split
-ISLINK = os.path.islink
-
-NOW = datetime.now().strftime("%Y-%m-%d_%H_%M_%S")+ str(os.getpid())
-TESTKIT_DIR = "/opt/testkit/lite2.4"
-if not os_ver == "Linux" and not os_ver == "Darwin":
-    TESTKIT_DIR = DIRNAME(ABSPATH(__file__))
-    sys.path += [JOIN(TESTKIT_DIR)]
-    TESTKIT_DIR = JOIN(TESTKIT_DIR, "results")
-
-LOG_DIR = TESTKIT_DIR
-NOW_DIR = JOIN(LOG_DIR, NOW)
-PID_FILE = JOIN(NOW_DIR, "pid.log")
-TEST_PACKAGES_DIR = JOIN(NOW_DIR, "test_packages")
-
-if not EXISTS(NOW_DIR):
-       os.makedirs(NOW_DIR)
-
-#LOGGER.info("\nNOW:%s\n NOW_DIR:%s\n TESTKIT_DIR:%s\n LOG_DIR:%s\n PID_FILE:%s\n TEST_PACKAGES_DIR:%s\n"% (NOW, NOW_DIR, TESTKIT_DIR, LOG_DIR, PID_FILE, TEST_PACKAGES_DIR))
-COMMON_FILTERS = {
-    "suite": [],
-    "set": [],
-    "priority": [],
-    "id": [],
-    "type": [],
-    "component": []}
-down_status = False
-remote_test = False
-can_merge_result = False
-
-# start testkit-lite in Singleton mode
-#kill_testkit_lite(PID_FILE)
-
-if not os_ver == "Linux" and not os_ver == "Darwin":
-    try:
-        #LOGGER.info("\n[ makedirs LOG_DIR: %s ]\n" % LOG_DIR)
-        if not EXISTS(LOG_DIR):
-            os.makedirs(LOG_DIR)
-    except OSError, err:
-        LOGGER.error("[ Error: create results directory:"
-                     " %s failed, error: %s ]\n" % (LOG_DIR, err))
-
-try:
-    #LOGGER.info("\n[ Opening PID_FILE: %s ]\n" % PID_FILE)
-    with open(PID_FILE, "w") as fd:
-        PID = str(os.getpid())
-        fd.writelines(PID + '\n')
-except OSError, e:
-    LOGGER.error("[ Error: can't create pid log file: %s, error: %s ]\n" %
-                (PID_FILE, err))
-    sys.exit(1)
-
-try:
-    os.chmod(PID_FILE, 0666)
-except OSError:
-    pass
-
-# detect version option
-if "--version" in sys.argv:
-    try:
-        CONFIG = ConfigParser.ConfigParser()
-        if platform.system() == "Linux":
-            CONFIG.read('/opt/testkit/lite2.4/VERSION')
-        else:
-            VERSION_FILE = JOIN(sys.path[0], 'VERSION')
-            CONFIG.read(VERSION_FILE)
-        VERSION = CONFIG.get('public_version', 'version')
-        LOGGER.info("V%s" % VERSION)
-    except ConfigParser.Error, err:
-        LOGGER.error(
-            "[ Error: fail to parse version info, error: %s ]\n" % err)
-    sys.exit(1)
-
-# detect internal version option
-if "--internal-version" in sys.argv:
-    try:
-        CONFIG = ConfigParser.ConfigParser()
-        if platform.system() == "Linux":
-            CONFIG.read('/opt/testkit/lite2.4/VERSION')
-        else:
-            VERSION_FILE = JOIN(sys.path[0], 'VERSION')
-            CONFIG.read(VERSION_FILE)
-        VERSION = CONFIG.get('internal_version', 'version')
-        print VERSION
-    except ConfigParser.Error, err:
-        print "[ Error: fail to parse version info, error: %s ]\n" % err
-    sys.exit(1)
-
-
-# init test engine here
-try:
-    from testkitlite.engines.default.runner import TRunner
-    from commodule.connector import Connector
-except ImportError, err:
-    LOGGER.error("[ Error: loading test engine failed, error: %s ]\n" % err)
-    LOGGER.info("try to run command "
-                "'export PYTHONPATH=/usr/lib/python2.7/dist-packages' and "
-                "'export PYTHONPATH=/usr/share/pyshared/'to resolve this issue")
-    sys.exit(1)
-
-
-def varnarg(option, opt_str, value, parser):
-    """ parser srg"""
-    value = []
-    import re
-    for arg in parser.rargs:
-        if re.search('^--.+', arg) or \
-                re.search('^-[\D]', arg):
-            break
-        value.append(arg)
-
-    del parser.rargs[:len(value)]
-    setattr(parser.values, option.dest, value)
-
-try:
-    OPTION_LIST = [
-        make_option("-f", "--testxml", dest="testxml",
-                    action="callback", callback=varnarg,
-                    help="Specify the path of test definition file (tests.xml)."
-                    " If run more one test package,just list the all the path "
-                    " of \"tests.xml\" and separate with a whitespace"),
-        make_option("-D", "--dryrun", dest="bdryrun",
-                    action="store_true",
-                    help="Dry-run the selected test cases"),
-        make_option("-M", "--manual-only", dest="bmanualonly",
-                    action="store_true",
-                    help="Enable only manual tests"),
-        make_option("-A", "--auto-only", dest="bautoonly",
-                    action="store_true",
-                    help="Enable only auto tests"),
-        make_option("-o", "--output", dest="resultfile",
-                    help="Specify output file for result xml. \
-                    If more than one testxml provided, \
-                    results will be merged together to this output file"),
-        make_option("-e", dest="exttest", action="store",
-                    help="Launch external test with a launcher,\
-                         supports browser or other web-runtime"),
-        make_option("--version", dest="version_info", action="store_true",
-                    help="Show version information"),
-        make_option("--internal-version", dest="internal_version_info",
-                    action="store_true",
-                    help="Show internal version information"),
-        make_option("--deviceid", dest="device_serial", action="store",
-                    help="set device serial information"),
-        make_option("--testprefix", dest="test_prefix", action="store",
-                    help="set prefix for test case entry"),
-        make_option("--comm", dest="commodule", action="store",
-                    help="set commodule by default,"
-                    "set \"localhost\" for local web testing"),
-        make_option("--capability", dest="capability", action="store",
-                    help="set platform for sepecfic device capability"),
-        make_option("--quit", dest="quit", action="store_true",
-                    help="quit testkit-lite"),
-        make_option("--debug", dest="debug", action="store_true",
-                    help="run in debug mode,more log information print out"),
-        make_option("--rerun", dest="rerun", action="store_true",
-                    help="check if rerun test mode"),
-        make_option("--non-active", dest="non_active", action="store_true",
-                    help="Disable the ability to set the result of \
-                    core manual cases from the console"),
-        make_option("--tizen-version", dest="tizenversion", action="callback", callback=varnarg, help="set tizen version infomation"),
-        make_option("--skip-tc", dest="skip_tc", action="callback", callback=varnarg, help="Specify the testcase id for exclude from the test"),
-        make_option("--stub-port", dest="stubport", action="callback", callback=varnarg, help = "set testkit-stub port number")
-
-    ]
-
-    OPTION_LIST.extend([
-        make_option("--%s" % flt,
-                    dest="w%s" % flt, action="callback", callback=varnarg,
-                    help="Select the specified filter-rules : %s" % flt)
-        for flt in COMMON_FILTERS])
-
-    try:
-        # untrusted behaviour of %%prog
-        USAGE = "%%prog [options] -f [prefix:]\"<somewhere/test.xml>\" -e \
-\"<launcher-name>\"\n\
-forms:    %%prog  -f [prefix:]\"<somewhere>/test.xml\"\n\
-          %%prog  -f [prefix:]\"<somewhere>/test.xml\" -D\n\
-          %%prog  -f [prefix:]\"<somewhere>/test.xml\" -A\n\
-          %%prog  -f [prefix:]\"<somewhere>/test.xml\" -M\n\
-         %%prog  -f [prefix:]\"<somewhere>/test.xml\" --type \"smoke\"\n\
-         %%prog  -f [prefix:]\"<somewhere>/test.xml\" --component \"TizenAPI/Communication/Messaging\"\n\
-          %%prog  -f [prefix:]\"<somewhere>/test1.xml <somewhere>/test2.xml \
-<somewhere>/test3.xml\" \n\
-          %%prog  -f [prefix:]\"<somewhere>/test.xml\" -D -A \ --capability <capability file> --comm <commoduletype>\n\
-          %%prog  -f [prefix:]\"<somewhere>/test.xml\" -D -A \
-...\n\
-exmaples: \n\
-    run a web test package from device side with device WRT (it is default): \n\
-          %%prog -f device:\"/opt/usr/media/tct/opt/tct-websocket-w3c-tests/tests.xml\" -e \
-'WRTLauncher' -A \n\
-    run a web test package from local path with chrome browser: \n\
-          %%prog -f \"/usr/share/webapi-webkit-tests/tests.xml\" -e \
-'<somewhere>/chrome-startup' -A --comm localhost \n\
-\n\
-Note: \n\
-          1) Proxy settings should be disabled when execute webapi packages\n\
-          2) TestLog is stored to %s/latest\n\
-          3) %%prog enables both auto and manual tests by default\n\
-          4) Obviously -A and -M are conflict options\n\
-          5) -e option does not support -D mode\n\
-          6) The test cases' order in the result files might be arbitrary,\
-when running same tests.xml with same options. This is caused \
-by python's API 'getiterator' from module 'xml.etree.ElementTree'\n\
-          7) run command 'testkit-lite', \
-            it might not be able to locate module 'testkitlite.engines.\
-default.runner', \
-            run command 'export PYTHONPATH=/usr/share/pyshared/' \
-            run command 'export PYTHONPATH=/usr/lib/python2.7/dist-packages' \
-            to resolve this issue" % (LOG_DIR)
-    except Exception:
-        USAGE = None
-
-    # detect non-params
-    if len(sys.argv) == 1:
-        sys.argv.append("-h")
-
-    PARSERS = OptionParser(option_list=OPTION_LIST, usage=USAGE)
-
-    (OPTIONS, ARGS) = PARSERS.parse_args()
-    # detect quit action
-    if OPTIONS.quit:
-        try:
-            LOGGER.info("[ Quit testkit-lite now ]")
-            kill_testkit_lite(PID_FILE)
-        except Exception, err:
-            LOGGER.error("[ Error: fail to kill existing testkit-lite,"
-                         " error: %s ]\n" % err)
-            sys.exit(1)
-
-    # detect conflict
-    if OPTIONS.bautoonly and OPTIONS.bmanualonly:
-        raise ValueError("-A and -M are conflict")
-    if OPTIONS.commodule:
-        if OPTIONS.commodule == 'localhost' and "device:" in OPTIONS.testxml[0]:
-            raise ValueError("For single mode, pls set local file to test ")
-        COMMODULE_TYPE = OPTIONS.commodule
-    else:
-        COMMODULE_TYPE = "tizenmobile"
-
-    CONNECTOR = Connector({"testmode": COMMODULE_TYPE, "deviceid":OPTIONS.device_serial}).get_connector()
-    if CONNECTOR == None:
-        LOGGER.error("[ Error: init commodule error... ]\n")
-        sys.exit(1)
-
-    # create runner
-    RUNNER = TRunner(CONNECTOR)
-    RUNNER.set_pid_log(PID_FILE)
-
-    # apply all options
-    RUNNER.set_global_parameters(OPTIONS)
-
-    if OPTIONS.tizenversion is None:
-        LOGGER.error("[ Error : input your tizen version ]\n")
-        sys.exit(1)
-    else :
-        tizenver = OPTIONS.tizenversion[0]
-        VER_PATTERN = "^tizen_web_\d.\d|^tizen_native_\d.\d"
-        pa = re.compile(VER_PATTERN, re.I)
-        ma = pa.match(tizenver)
-        if ma is None:
-             LOGGER.error("A required \"/opt/tct/"+tizenver+" could not be found.\n")
-             sys.exit(1)
-
-        RUNNER.set_tizenversion(tizenver)
-
-    if OPTIONS.stubport is not None:
-        port = OPTIONS.stubport[0]
-        RUNNER.set_stubport(port)
-
-    if OPTIONS.skip_tc is not None:
-        RUNNER.set_skip_tc(OPTIONS.skip_tc)
-
-    # set capability
-    if OPTIONS.capability:
-        GET_CAPABILITY_STATUS = RUNNER.get_capability(OPTIONS.capability)
-        if not GET_CAPABILITY_STATUS:
-            sys.exit(1)
-
-    if "device:" in OPTIONS.testxml[0]:
-        remote_test = True
-        try:
-            #LOGGER.info("\n[ makedirs TEST_PACKAGES_DIR: %s ]\n" % TEST_PACKAGES_DIR)
-            if not EXISTS(TEST_PACKAGES_DIR):
-                os.makedirs(TEST_PACKAGES_DIR)
-        except OSError, err:
-            LOGGER.error("[ Error: "
-                "can't create test package directory: %s, error: %s ]\n" %
-                        (TEST_PACKAGES_DIR, err))
-            sys.exit(1)
-        REMOTE_TESTLITS = OPTIONS.testxml[0]
-        REMOTE_TESTLITS = REMOTE_TESTLITS.split(':')[1]
-        TESTLISTARRARY = REMOTE_TESTLITS.split()
-        LOCALARRY = []
-
-        for remote_file in TESTLISTARRARY:
-            tmp_remote_file = SPLIT(remote_file)
-            tmp_remote_folder = BASENAME(tmp_remote_file[0])
-            tmp_remote_test_xml = JOIN(
-                tmp_remote_folder, tmp_remote_file[1])
-            local_test_package = JOIN(
-                TEST_PACKAGES_DIR, tmp_remote_test_xml)
-            down_status = RUNNER.connector.download_file(remote_file, local_test_package)
-            if not down_status:
-                LOGGER.error("can not get test definition file, pls check file on device:%s"
-                             % remote_file)
-                sys.exit(1)
-            LOCALARRY.append(local_test_package)
-        OPTIONS.testxml = LOCALARRY
-    else:
-        if len(OPTIONS.testxml) == 1:
-            i = 0
-            start = 0
-            end = 0
-            LOCAL_TESTLISTS= []
-            temp_xml = OPTIONS.testxml[0]
-            while(i < len(temp_xml)):
-                tmp = temp_xml[i:len(temp_xml)]
-                if ".xml" in tmp :
-                    index = tmp.index(".xml")+4+i
-                    end = index
-                    i=index+1
-                    LOCAL_TESTLISTS.append(temp_xml[start:end])
-                    start = index+1
-                else:
-                    print 'no xml found'
-                    break
-            OPTIONS.testxml = LOCAL_TESTLISTS
-
-    # apply filter
-    WFILTERS = {}
-    for flt in COMMON_FILTERS:
-        if eval('OPTIONS.w%s' % flt):
-            WFILTERS[flt] = eval('OPTIONS.w%s' % flt)
-    RUNNER.add_filter_rules(**WFILTERS)
-
-    if not OPTIONS.testxml:
-        LOGGER.error("[ Error: not specify a test xml... ]\n")
-        sys.exit(1)
-
-    # 1) prepare log dir
-    if os_ver == "Linux" or os_ver == "Darwin":
-        SESSION = datetime.today().isoformat('-')+str(os.getpid())+"_session"
-    else:
-        SESSION = datetime.today().strftime("%Y-%m-%d_%H_%M_%S")+str(os.getpid())+"_session"
-    CURRENT_LOG_DIR = JOIN(LOG_DIR, SESSION)
-    LATEST_DIR = JOIN(LOG_DIR, "latest")
-    try:
-        if EXISTS(LATEST_DIR):
-            os.remove(LATEST_DIR)
-        if ISLINK(LATEST_DIR):
-            os.remove(LATEST_DIR)
-        os.makedirs(CURRENT_LOG_DIR)
-        if os.name == "posix":
-            os.symlink(CURRENT_LOG_DIR, LATEST_DIR)
-    except IOError, err:
-        LOGGER.error("[ Error: create session log directory: "
-                     "%s failed, error: %s ]\n" % (CURRENT_LOG_DIR, err))
-    except OSError, err:
-        LOGGER.error("error : %s" % err)
-
-    finally:
-        if not EXISTS(CURRENT_LOG_DIR):
-            os.makedirs(CURRENT_LOG_DIR)
-
-    # 2) prepare run test
-    # run more than one tests.xml
-    # 1. run all auto cases from the xmls
-    # 2. run all manual cases from the xmls
-    TESTXMLS = set(OPTIONS.testxml)
-    for t in TESTXMLS:
-        if EXISTS(t):
-            filename = t
-            filename = os.path.splitext(filename)[0]
-            if os_ver == "Linux" or os_ver == "Darwin":
-                if not filename.startswith('/'):
-                    LOGGER.error("[ Error:"
-                          " xml file %s should start with '/' ]" % filename)
-                    sys.exit(1)
-                else:
-                    filename = filename.split('/')[-2]
-                    if filename == "":
-                        LOGGER.error("[ Error:"
-                             " unable to find package name from %s ]" % t)
-                        sys.exit(1)
-            else:
-                filename = filename.split('\\')[-2]
-            filename = "%s.total" % BASENAME(filename)
-            resultfile = "%s.xml" % filename
-            resultfile = JOIN(CURRENT_LOG_DIR, resultfile)
-            try:
-                ep = etree.parse(t)
-                suiteparent = ep.getroot()
-            except etree.ParseError:
-                LOGGER.error("[ Error: no case found in testxml, "
-                             "pls check the test package ]\n")
-                sys.exit(1)
-            no_test_definition = 1
-            for tf in ep.getiterator('test_definition'):
-                no_test_definition = 0
-            if no_test_definition:
-                suiteparent = etree.Element('test_definition')
-                suiteparent.tail = "\n"
-                for suite in ep.getiterator('suite'):
-                    suite.tail = "\n"
-                    suiteparent.append(suite)
-            if OPTIONS.bautoonly:
-                WFILTERS['execution_type'] = ["auto"]
-                RUNNER.add_filter_rules(**WFILTERS)
-            if OPTIONS.bmanualonly:
-                WFILTERS['execution_type'] = ["manual"]
-                RUNNER.add_filter_rules(**WFILTERS)
-            RUNNER.apply_filter(suiteparent)
-            # just leave suite and set for merge result
-            for suite in ep.getiterator('suite'):
-                for tset in suite.getiterator('set'):
-                    for testcase in tset.getiterator('testcase'):
-                        tset.remove(testcase)
-            try:
-                #LOGGER.info("\n[ Opening resultfile: %s ]\n" % resultfile)
-                with open(resultfile, 'w') as output:
-                    tree = etree.ElementTree(element=suiteparent)
-                    tree.write(output)
-            except IOError, err:
-                LOGGER.error(
-                    "[ Error: create filtered total result file: %s failed, "
-                    "error: %s ]\n" % (resultfile, err))
-        else:
-            print "[ Have no test xml found ]"
-            sys.exit(1)
-    START_TIME = datetime.today().strftime("%Y-%m-%d_%H_%M_%S")
-    if not OPTIONS.bautoonly:
-        if OPTIONS.bmanualonly:
-            for t in TESTXMLS:
-                try:
-                    WFILTERS['execution_type'] = ["manual"]
-                    RUNNER.add_filter_rules(**WFILTERS)
-                    RUNNER.prepare_run(t, resultdir=CURRENT_LOG_DIR)
-                except IOError, err:
-                    LOGGER.error("[ Error: prepare_run test xml: "
-                      "%s from testkit-lite failed, error: %s ]\n" % (t, err))
-        else:
-            for t in TESTXMLS:
-                try:
-                    WFILTERS['execution_type'] = ["auto"]
-                    RUNNER.add_filter_rules(**WFILTERS)
-                    RUNNER.prepare_run(t, resultdir=CURRENT_LOG_DIR)
-                except IOError, err:
-                    LOGGER.error("[ Error: prepare_run test xml: "
-                      "%s from testkit-lite failed, error: %s ]\n" % (t, err))
-            for t in TESTXMLS:
-                try:
-                    WFILTERS['execution_type'] = ["manual"]
-                    RUNNER.add_filter_rules(**WFILTERS)
-                    RUNNER.prepare_run(t, resultdir=CURRENT_LOG_DIR)
-                except IOError, err:
-                    LOGGER.error("[ Error: prepare_run test xml: "
-                      "%s from testkit-lite failed, error: %s ]\n" % (t, err))
-    else:
-        for t in TESTXMLS:
-            try:
-                WFILTERS['execution_type'] = ["auto"]
-                RUNNER.add_filter_rules(**WFILTERS)
-                RUNNER.prepare_run(t, resultdir=CURRENT_LOG_DIR)
-            except IOError, err:
-                clean_testxml(TESTXMLS, remote_test)
-                LOGGER.error("[ Error: prepare_run test xml: "
-                  "%s from testkit-lite failed, error: %s ]\n" % (t, err))
-
-    try:
-        can_merge_result = True
-        RUNNER.run_case(CURRENT_LOG_DIR)
-    except Exception, err:
-        clean_testxml(TESTXMLS, remote_test)
-        traceback.print_exc()
-        LOGGER.error("[ Error: run_test_case failed ,error: %s ]\n" % err)
-    try:
-        RUNNER.merge_resultfile(START_TIME, CURRENT_LOG_DIR)
-        clean_testxml(TESTXMLS, remote_test)
-        LOGGER.info("[ all tasks for testkit lite are accomplished, goodbye ]")
-    except Exception, err:
-        traceback.print_exc()
-        clean_testxml(TESTXMLS,remote_test)
-        LOGGER.error("[ Error: merge_resultfile "
-                     "failed,error: %s, goodbye ]\n" % err)
-
-except KeyboardInterrupt, err:
-    if RUNNER.session_id:
-        RUNNER.finalize_test(RUNNER.session_id)
-    if can_merge_result:
-        RUNNER.merge_resultfile(START_TIME, CURRENT_LOG_DIR)
-    if down_status:
-        clean_testxml(OPTIONS.testxml, remote_test)
-    LOGGER.info("\n[ exiting testkit-lite on user cancel, goodbye ]\n")
-    sys.exit(1)
-except Exception, err:
-    if RUNNER.session_id:
-        RUNNER.finalize_test(RUNNER.session_id)
-    if can_merge_result:
-        RUNNER.merge_resultfile(START_TIME, CURRENT_LOG_DIR)
-    if down_status:
-        clean_testxml(OPTIONS.testxml, remote_test)
-    LOGGER.error("\n[ Error: exiting testkit-lite "
-                 "by catching a critical error: %s, goodbye ]\n" % err)
-    traceback.print_exc()
-    sys.exit(1)
diff --git a/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite1.0/testkitlite/Makefile.am b/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite1.0/testkitlite/Makefile.am
deleted file mode 100755 (executable)
index e619983..0000000
+++ /dev/null
@@ -1,24 +0,0 @@
-# Copyright (C) 2012 Intel Corporation
-# 
-# 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
-# of the License, or (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
-#
-# Authors:
-#              Zhang, Huihui <huihuix.zhang@intel.com>
-#              Wendong,Sui  <weidongx.sun@intel.com>
-
-SUBDIRS = common engines
-
-testkitlitedir = /usr/lib/python2.7/dist-packages/testkitlite
-dist_testkitlite_SCRIPTS = __init__.py
diff --git a/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite1.0/testkitlite/__init__.py b/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite1.0/testkitlite/__init__.py
deleted file mode 100755 (executable)
index 8b13789..0000000
+++ /dev/null
@@ -1 +0,0 @@
-
diff --git a/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite1.0/testkitlite/__init__.pyc b/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite1.0/testkitlite/__init__.pyc
deleted file mode 100755 (executable)
index 0b97be5..0000000
Binary files a/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite1.0/testkitlite/__init__.pyc and /dev/null differ
diff --git a/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite1.0/testkitlite/common/Makefile.am b/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite1.0/testkitlite/common/Makefile.am
deleted file mode 100755 (executable)
index 0cafaad..0000000
+++ /dev/null
@@ -1,22 +0,0 @@
-# Copyright (C) 2012 Intel Corporation
-# 
-# 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
-# of the License, or (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
-#
-# Authors:
-#              Zhang, Huihui <huihuix.zhang@intel.com>
-#              Wendong,Sui  <weidongx.sun@intel.com>
-
-testkitlitecommondir = /usr/lib/python2.7/dist-packages/testkitlite/common
-dist_testkitlitecommon_SCRIPTS = *.py
diff --git a/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite1.0/testkitlite/common/__init__.py b/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite1.0/testkitlite/common/__init__.py
deleted file mode 100755 (executable)
index 8b13789..0000000
+++ /dev/null
@@ -1 +0,0 @@
-
diff --git a/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite1.0/testkitlite/common/__init__.pyc b/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite1.0/testkitlite/common/__init__.pyc
deleted file mode 100755 (executable)
index 153a963..0000000
Binary files a/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite1.0/testkitlite/common/__init__.pyc and /dev/null differ
diff --git a/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite1.0/testkitlite/common/process_killall.py b/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite1.0/testkitlite/common/process_killall.py
deleted file mode 100755 (executable)
index f15427a..0000000
+++ /dev/null
@@ -1,57 +0,0 @@
-#!/usr/bin/python
-#
-# Copyright (C) 2012 Intel Corporation
-#
-# 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
-# of the License, or (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
-# MA  02110-1301, USA.
-#
-# Authors:
-#              Zhang, Huihui <huihuix.zhang@intel.com>
-#              Wendong,Sui  <weidongx.sun@intel.com>
-""" kill testkit-lite """
-import os
-import platform
-import signal
-import re
-import ctypes
-from commodule.log import LOGGER
-from commodule.killall import killall
-
-
-def kill_testkit_lite(pid_file):
-    """ kill testkit lite"""
-    try:
-        with open(pid_file, "r") as pidfile:
-            pid = pidfile.readline().rstrip("\n")
-            if pid:
-                killall(pid)
-    except IOError, error:
-        pattern = re.compile('No such file or directory|No such process')
-        match = pattern.search(str(error))
-        if not match:
-            LOGGER.info("[ Error: fail to kill existing testkit-lite, "\
-                "error: %s ]\n" % error)
-    return None
-
-def clean_testxml(testxmls,remote_test):
-    """clean all test xmls"""
-    if remote_test:
-        EXISTS = os.path.exists
-        for testxml in testxmls:
-            if EXISTS(testxml):
-                fd_name = os.path.dirname(testxml)
-                os.remove(testxml)
-                os.rmdir(fd_name)
-    return None
\ No newline at end of file
diff --git a/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite1.0/testkitlite/common/process_killall.pyc b/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite1.0/testkitlite/common/process_killall.pyc
deleted file mode 100755 (executable)
index 46ed1b0..0000000
Binary files a/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite1.0/testkitlite/common/process_killall.pyc and /dev/null differ
diff --git a/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite1.0/testkitlite/engines/Makefile.am b/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite1.0/testkitlite/engines/Makefile.am
deleted file mode 100755 (executable)
index b360a3f..0000000
+++ /dev/null
@@ -1,24 +0,0 @@
-# Copyright (C) 2012 Intel Corporation
-# 
-# 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
-# of the License, or (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
-#
-# Authors:
-#              Zhang, Huihui <huihuix.zhang@intel.com>
-#              Wendong,Sui  <weidongx.sun@intel.com>
-
-SUBDIRS = default
-
-testkitliteenginesdir = /usr/lib/python2.7/dist-packages/testkitlite/engines
-dist_testkitliteengines_SCRIPTS = __init__.py
diff --git a/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite1.0/testkitlite/engines/__init__.py b/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite1.0/testkitlite/engines/__init__.py
deleted file mode 100755 (executable)
index 8b13789..0000000
+++ /dev/null
@@ -1 +0,0 @@
-
diff --git a/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite1.0/testkitlite/engines/__init__.pyc b/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite1.0/testkitlite/engines/__init__.pyc
deleted file mode 100755 (executable)
index 7819696..0000000
Binary files a/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite1.0/testkitlite/engines/__init__.pyc and /dev/null differ
diff --git a/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite1.0/testkitlite/engines/default/Makefile.am b/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite1.0/testkitlite/engines/default/Makefile.am
deleted file mode 100755 (executable)
index 0591520..0000000
+++ /dev/null
@@ -1,22 +0,0 @@
-# Copyright (C) 2012 Intel Corporation
-# 
-# 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
-# of the License, or (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
-#
-# Authors:
-#              Zhang, Huihui <huihuix.zhang@intel.com>
-#              Wendong,Sui  <weidongx.sun@intel.com>
-
-testkitliteenginesdefaultdir = /usr/lib/python2.7/dist-packages/testkitlite/engines/default
-dist_testkitliteenginesdefault_SCRIPTS = *.py
diff --git a/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite1.0/testkitlite/engines/default/__init__.py b/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite1.0/testkitlite/engines/default/__init__.py
deleted file mode 100755 (executable)
index 8b13789..0000000
+++ /dev/null
@@ -1 +0,0 @@
-
diff --git a/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite1.0/testkitlite/engines/default/__init__.pyc b/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite1.0/testkitlite/engines/default/__init__.pyc
deleted file mode 100755 (executable)
index a2d6885..0000000
Binary files a/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite1.0/testkitlite/engines/default/__init__.pyc and /dev/null differ
diff --git a/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite1.0/testkitlite/engines/default/runner.py b/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite1.0/testkitlite/engines/default/runner.py
deleted file mode 100755 (executable)
index 0d9a246..0000000
+++ /dev/null
@@ -1,1208 +0,0 @@
-#!/usr/bin/python
-#
-# Copyright (C) 2012 Intel Corporation
-#
-# 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
-# of the License, or (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc.,
-# 51 Franklin Street,
-# Fifth Floor,
-# Boston, MA  02110-1301, USA.
-#
-# Authors:
-#              Zhang, Huihui <huihuix.zhang@intel.com>
-#              Wendong,Sui  <weidongx.sun@intel.com>
-#              Yuanyuan,Zou  <zouyuanx@intel.com>
-""" prepare run , split xml ,run case , merge result """
-
-import os
-import platform
-import time
-import sys
-import traceback
-import collections
-import string
-import random
-from datetime import datetime
-from shutil import copyfile
-import xml.etree.ElementTree as etree
-import ConfigParser
-from tempfile import mktemp
-from shutil import move
-from os import remove
-from commodule.log import LOGGER
-from commodule.str2 import str2xmlstr
-
-
-from .worker import TestWorker
-
-TCT_CONFIG_FILE = "/opt/tools/TCT_CONFIG"
-tct_parser = ConfigParser.ConfigParser()
-tct_parser.read(TCT_CONFIG_FILE)
-
-DEVICE_SUITE_TARGET_24 = tct_parser.get('DEVICE', 'DEVICE_SUITE_TARGET_24')
-DEVICE_SUITE_TARGET_30 = tct_parser.get('DEVICE', 'DEVICE_SUITE_TARGET_30')
-DEVICE_EXECUTION_MODE_30 = tct_parser.get('DEVICE', 'DEVICE_EXECUTION_MODE_30')
-DEVICE_SUITE_TARGET_30_STR = "{DEVICE_SUITE_TARGET_30}"
-DEVICE_EXECUTION_MODE_30_STR = "{DEVICE_EXECUTION_MODE_30}"
-
-JOIN = os.path.join
-DIRNAME = os.path.dirname
-BASENAME = os.path.basename
-EXISTS = os.path.exists
-ABSPATH = os.path.abspath
-
-
-class TRunner:
-
-    """
-    Parse the testdefinition.xml files.
-    Apply filter for each run.
-    Conduct tests execution.
-    """
-
-    def __init__(self, connector):
-        """ init all self parameters here """
-        # dryrun
-        self.bdryrun = False
-        # non_active
-        self.non_active = False
-        # result file
-        self.resultfile = None
-        # external test
-        self.external_test = None
-        # filter rules
-        self.filter_rules = None
-        self.debug = False
-        self.resultfiles = set()
-        self.core_auto_files = []
-        self.core_manual_files = []
-        self.skip_all_manual = False
-        self.testsuite_dict = {}
-        self.exe_sequence = []
-        self.testresult_dict = {"pass": 0, "fail": 0,
-                                "block": 0, "not_run": 0}
-        self.current_test_xml = "none"
-        self.first_run = True
-        self.deviceid = None
-        self.session_id = None
-        self.pid_log = None
-        self.set_parameters = {}
-        self.connector = connector
-        self.testworker = TestWorker(connector)
-        self.stub_name = "testkit-stub"
-        self.capabilities = {}
-        self.has_capability = False
-        self.rerun = False
-        self.test_prefix = ""
-        self.tizenV = None
-        self.skip_tc = None
-        self.stub_port = "8000"
-
-    def set_global_parameters(self, options):
-        "get all options "
-        # apply dryrun
-        if options.bdryrun:
-            self.bdryrun = options.bdryrun
-        # Disable set the result of core manual cases from the console
-        if options.non_active:
-            self.non_active = options.non_active
-        # apply user specify test result file
-        if options.resultfile:
-            self.resultfile = options.resultfile
-        # set the external test WRTLauncher
-        if options.exttest:
-            self.external_test = options.exttest
-        if options.debug:
-            self.debug = options.debug
-        if options.rerun:
-            self.rerun = options.rerun
-        if options.test_prefix:
-            self.test_prefix = options.test_prefix
-        if options.device_serial:
-            self.deviceid = options.device_serial
-
-    def set_pid_log(self, pid_log):
-        """ get pid_log file """
-        self.pid_log = pid_log
-
-    def add_filter_rules(self, **kargs):
-        """
-        kargs:  key:values - "":["",]
-        """
-        self.filter_rules = kargs
-
-    def set_session_id(self, session_id):
-        """ set the set test session id which is get form com_module """
-        self.session_id = session_id
-
-    def set_stubport(self, stubport):
-        self.stub_port = stubport
-
-    def set_tizenversion(self, _tizenV):
-        self.tizenV = _tizenV
-        self.testworker.set_TizenVersion(self.tizenV)
-
-    def set_skip_tc(self, skip_tc):
-        self.skip_tc = skip_tc
-
-    def set_capability(self, capabilities):
-        """ set capabilitys  """
-        self.capabilities = capabilities
-        self.has_capability = True
-
-    def prepare_run(self, testxmlfile, resultdir=None):
-        """
-        testxmlfile: target testxml file
-        execdir and resultdir: should be the absolute path since TRunner
-        is the common lib
-        """
-        # resultdir is set to current directory by default
-        if not resultdir:
-            resultdir = os.getcwd()
-        ok_prepare = True
-        if ok_prepare:
-            try:
-                filename = testxmlfile
-                filename = os.path.splitext(filename)[0]
-                if platform.system() == "Linux":
-                    filename = filename.split('/')[-2]
-                else:
-                    filename = filename.split('\\')[-2]
-                if self.filter_rules["execution_type"] == ["manual"]:
-                    resultfile = "%s.manual.xml" % filename
-                else:
-                    resultfile = "%s.auto.xml" % filename
-                resultfile = JOIN(resultdir, resultfile)
-                if not EXISTS(resultdir):
-                    os.mkdir(resultdir)
-                LOGGER.info("[ analysis test xml file: %s ]" % resultfile)
-                self.__prepare_result_file(testxmlfile, resultfile)
-                self.__split_test_xml(resultfile, resultdir)
-            except IOError as error:
-                LOGGER.error(error)
-                ok_prepare &= False
-        return ok_prepare
-
-    def __split_test_xml(self, resultfile, resultdir):
-        """ split_test_xml into auto and manual"""
-        casefind = etree.parse(resultfile).getiterator('testcase')
-        if casefind:
-            test_file_name = "%s" % BASENAME(resultfile)
-            test_file_name = os.path.splitext(test_file_name)[0]
-            self.__splite_external_test(
-                resultfile, test_file_name, resultdir)
-
-    def __splite_core_test(self, resultfile):
-        """select core test"""
-        if self.filter_rules["execution_type"] == ["auto"]:
-            self.core_auto_files.append(resultfile)
-        else:
-            self.core_manual_files.append(resultfile)
-        self.resultfiles.add(resultfile)
-
-    def __splite_external_test(self, resultfile, test_file_name, resultdir):
-        """select external_test"""
-        testsuite_dict_value_list = []
-        testsuite_dict_add_flag = 0
-        filename_diff = 1
-
-        parser = etree.parse(resultfile)
-        for tsuite in parser.getiterator('suite'):
-            root = etree.Element('test_definition')
-            suitefilename = os.path.splitext(resultfile)[0]
-            suitefilename += ".suite_%s.xml" % filename_diff
-            suitefilename = JOIN(resultdir, suitefilename)
-            tsuite.tail = "\n"
-            root.append(tsuite)
-            try:
-                with open(suitefilename, 'w') as output:
-                    tree = etree.ElementTree(element=root)
-                    tree.write(output)
-            except IOError as error:
-                LOGGER.error("[ Error: create filtered result file: %s failed,\
-                 error: %s ]" % (suitefilename, error))
-            case_suite_find = etree.parse(
-                suitefilename).getiterator('testcase')
-            if case_suite_find:
-                if tsuite.get('launcher'):
-                    if tsuite.get('launcher').find('WRTLauncher'):
-                        self.__splite_core_test(suitefilename)
-                    else:
-                        testsuite_dict_value_list.append(suitefilename)
-                        if testsuite_dict_add_flag == 0:
-                            self.exe_sequence.append(test_file_name)
-                        testsuite_dict_add_flag = 1
-                        self.resultfiles.add(suitefilename)
-                else:
-                    if self.filter_rules["execution_type"] == ["auto"]:
-                        self.core_auto_files.append(suitefilename)
-                    else:
-                        self.core_manual_files.append(suitefilename)
-                    self.resultfiles.add(suitefilename)
-            filename_diff += 1
-        if testsuite_dict_add_flag:
-            self.testsuite_dict[test_file_name] = testsuite_dict_value_list
-
-    def __prepare_result_file(self, testxmlfile, resultfile):
-        """ write the test_xml content to resultfile"""
-        try:
-            parse_tree = etree.parse(testxmlfile)
-            suiteparent = parse_tree.getroot()
-            no_test_definition = 1
-            if parse_tree.getiterator('test_definition'):
-                no_test_definition = 0
-            if no_test_definition:
-                suiteparent = etree.Element('test_definition')
-                suiteparent.tail = "\n"
-                for suite in parse_tree.getiterator('suite'):
-                    suite.tail = "\n"
-                    suiteparent.append(suite)
-            self.apply_filter(suiteparent)
-            try:
-                with open(resultfile, 'w') as output:
-                    tree = etree.ElementTree(element=suiteparent)
-                    tree.write(output)
-            except IOError as error:
-                LOGGER.error("[ Error: create filtered result file: %s failed,\
-                    error: %s ]" % (resultfile, error))
-        except IOError as error:
-            LOGGER.error(error)
-            return False
-
-    def run_case(self, latest_dir):
-        """ run case """
-        # run core auto cases
-        self.__run_core_auto()
-
-        # run webAPI cases
-        self.__run_webapi_test(latest_dir)
-
-        # run core manual cases
-        self.__run_core_manual()
-
-    def __run_core_auto(self):
-        """ core auto cases run"""
-        self.core_auto_files.sort()
-        for core_auto_file in self.core_auto_files:
-            temp_test_xml = os.path.splitext(core_auto_file)[0]
-            temp_test_xml = os.path.splitext(temp_test_xml)[0]
-            temp_test_xml = os.path.splitext(temp_test_xml)[0]
-            temp_test_xml += ".auto"
-            # print identical xml file name
-            if self.current_test_xml != temp_test_xml:
-                time.sleep(3)
-                LOGGER.info("\n[ testing xml: %s.xml ]" % temp_test_xml)
-                self.current_test_xml = temp_test_xml
-            self.__run_with_commodule(core_auto_file)
-
-    def __run_core_manual(self):
-        """ core manual cases run """
-        self.core_manual_files.sort()
-        for core_manual_file in self.core_manual_files:
-            temp_test_xml = os.path.splitext(core_manual_file)[0]
-            temp_test_xml = os.path.splitext(temp_test_xml)[0]
-            temp_test_xml = os.path.splitext(temp_test_xml)[0]
-            temp_test_xml += ".manual"
-            # print identical xml file name
-            if self.current_test_xml != temp_test_xml:
-                time.sleep(3)
-                LOGGER.info("\n[ testing xml: %s.xml ]" % temp_test_xml)
-                self.current_test_xml = temp_test_xml
-            if self.non_active:
-                self.skip_all_manual = True
-            else:
-                self.__run_with_commodule(core_manual_file)
-
-    def __run_webapi_test(self, latest_dir):
-        """ run webAPI test"""
-        if self.bdryrun:
-            LOGGER.info("[ WRTLauncher mode does not support dryrun ]")
-            return True
-
-        list_auto = []
-        list_manual = []
-        for i in self.exe_sequence:
-            if i[-4::1] == "auto":
-                list_auto.append(i)
-            if i[-6::1] == "manual":
-                list_manual.append(i)
-        list_auto.sort()
-        list_manual.sort()
-        self.exe_sequence = []
-        self.exe_sequence.extend(list_auto)
-        self.exe_sequence.extend(list_manual)
-
-        for webapi_total_file in self.exe_sequence:
-            for webapi_file in self.testsuite_dict[webapi_total_file]:
-                # print identical xml file name
-                if self.current_test_xml != \
-                        JOIN(latest_dir, webapi_total_file):
-                    time.sleep(3)
-                    LOGGER.info("\n[ testing xml: %s.xml ]\n"
-                                % JOIN(latest_dir, webapi_total_file))
-                    self.current_test_xml = JOIN(latest_dir, webapi_total_file)
-
-                self.__run_with_commodule(webapi_file)
-
-    def __run_with_commodule(self, webapi_file):
-        """run_with_commodule,Initialization,check status,get result"""
-        try:
-            # prepare test set list
-            test_xml_set_list = self.__split_xml_to_set(webapi_file)
-            # create temporary parameter
-            for test_xml_set in test_xml_set_list:
-                LOGGER.info("\n[ run set: %s ]" % test_xml_set)
-                # prepare the test JSON
-                self.__prepare_external_test_json(test_xml_set)
-
-                # init test here
-                init_status = self.__init_com_module(test_xml_set)
-                if not init_status:
-                    continue
-                # send set JSON Data to com_module
-                self.testworker.run_test(
-                    self.session_id, self.set_parameters)
-                while True:
-                    time.sleep(1)
-                    # check the test status ,if the set finished,get
-                    # the set_result,and finalize_test
-                    if self.__check_test_status():
-                        set_result = self.testworker.get_test_result(
-                            self.session_id)
-                        # write_result to set_xml
-                        self.__write_set_result(
-                            test_xml_set, set_result)
-                        # shut down server
-                        self.finalize_test(self.session_id)
-                        break
-        except IOError as error:
-            LOGGER.error(
-                "[ Error: fail to run webapi test xml, error: %s ]" % error)
-
-    def __split_xml_to_set(self, webapi_file):
-        """split xml by <set>"""
-
-        LOGGER.debug("[ split xml: %s by <set> ]" % webapi_file)
-        LOGGER.debug("[ this might take some time, please wait ]")
-        set_number = 1
-        test_xml_set_list = []
-        self.resultfiles.discard(webapi_file)
-        test_xml_temp = etree.parse(webapi_file)
-        for test_xml_temp_suite in test_xml_temp.getiterator('suite'):
-            while set_number <= len(test_xml_temp_suite.getiterator('set')):
-                copy_url = os.path.splitext(webapi_file)[0]
-                copy_url += "_set_%s.xml" % set_number
-                copyfile(webapi_file, copy_url)
-                test_xml_set_list.append(copy_url)
-                self.resultfiles.add(copy_url)
-                set_number += 1
-        time.sleep(3)
-        set_number -= 1
-        LOGGER.info("[ total set number is: %s ]" % set_number)
-
-        # only keep one set in each xml file and remove empty set
-        test_xml_set_list_empty = []
-        if len(test_xml_set_list) > 1:
-            test_xml_set_list.reverse()
-        for test_xml_set in test_xml_set_list:
-            test_xml_set_tmp = etree.parse(test_xml_set)
-            set_keep_number = 1
-            # LOGGER.debug("[ process set: %s ]" % test_xml_set)
-            for temp_suite in test_xml_set_tmp.getiterator('suite'):
-                for test_xml_set_temp_set in temp_suite.getiterator('set'):
-                    if set_keep_number != set_number:
-                        temp_suite.remove(test_xml_set_temp_set)
-                    else:
-                        if not test_xml_set_temp_set.getiterator('testcase'):
-                            test_xml_set_list_empty.append(test_xml_set)
-                    set_keep_number += 1
-            set_number -= 1
-            test_xml_set_tmp.write(test_xml_set)
-        for empty_set in test_xml_set_list_empty:
-            LOGGER.debug("[ remove empty set: %s ]" % empty_set)
-            test_xml_set_list.remove(empty_set)
-            self.resultfiles.discard(empty_set)
-        if len(test_xml_set_list) > 1:
-            test_xml_set_list.reverse()
-        return test_xml_set_list
-
-    def merge_resultfile(self, start_time, latest_dir):
-        """ merge_result_file """
-        mergefile = mktemp(suffix='.xml', prefix='tests.', dir=latest_dir)
-        #LOGGER.info("\nmergefile: %s ]" % mergefile)
-        mergefile = os.path.splitext(mergefile)[0]
-        #LOGGER.info("\nmergefile: %s ]" % mergefile)
-        mergefile = os.path.splitext(mergefile)[0]
-        #LOGGER.info("\nmergefile: %s ]" % mergefile)
-        mergefile = "%s.result" % BASENAME(mergefile)
-        #LOGGER.info("\nmergefile: %s ]" % mergefile)
-        mergefile = "%s.xml" % mergefile
-        #LOGGER.info("\nmergefile: %s ]" % mergefile)
-        mergefile = JOIN(latest_dir, mergefile)
-        #LOGGER.info("\nmergefile: %s ]" % mergefile)
-        end_time = datetime.today().strftime("%Y-%m-%d_%H_%M_%S")
-        LOGGER.info("\n[ test complete at time: %s ]" % end_time)
-        LOGGER.debug("[ start merging test result xml files, "\
-            "this might take some time, please wait ]")
-        LOGGER.debug("[ merge result files into %s ]" % mergefile)
-        root = etree.Element('test_definition')
-        root.tail = "\n"
-        totals = set()
-
-        # merge result files
-        resultfiles = self.resultfiles
-        totals = self.__merge_result(resultfiles, totals)
-
-        for total in totals:
-            result_xml = etree.parse(total)
-            for suite in result_xml.getiterator('suite'):
-                if suite.getiterator('testcase'):
-                    suite.tail = "\n"
-                    root.append(suite)
-        # print test summary
-        self.__print_summary()
-        # generate actual xml file
-        LOGGER.info("[ generate result xml: %s ]" % mergefile)
-        if self.skip_all_manual:
-            LOGGER.info("[ some results of core manual cases are N/A,"
-                        "please refer to the above result file ]")
-        LOGGER.info("[ merge complete, write to the result file,"
-                    " this might take some time, please wait ]")
-        # get useful info for xml
-        # add environment node
-        # add summary node
-        root.insert(0, get_summary(start_time, end_time))
-        root.insert(0, self.__get_environment())
-        # add XSL support to testkit-lite
-        declaration_text = """<?xml version="1.0" encoding="UTF-8"?>
-        <?xml-stylesheet type="text/xsl" href="testresult.xsl"?>\n"""
-        #LOGGER.info("\nmergefile: %s ]" % mergefile)
-        try:
-            with open(mergefile, 'w') as output:
-                output.write(declaration_text)
-                tree = etree.ElementTree(element=root)
-                tree.write(output, xml_declaration=False, encoding='utf-8')
-        except IOError as error:
-            LOGGER.error(
-                "[ Error: merge result file failed, error: %s ]" % error)
-        # change &lt;![CDATA[]]&gt; to <![CDATA[]]>
-        replace_cdata(mergefile)
-        # copy result to -o option
-        try:
-            if self.resultfile:
-                if os.path.splitext(self.resultfile)[-1] == '.xml':
-                    if not os.path.exists(os.path.dirname(self.resultfile)):
-                        if len(os.path.dirname(self.resultfile)) > 0:
-                            os.makedirs(os.path.dirname(self.resultfile))
-                    LOGGER.info("[ copy result xml to output file:"
-                                " %s ]" % self.resultfile)
-                    copyfile(mergefile, self.resultfile)
-                else:
-                    LOGGER.info(
-                        "[ Please specify and xml file for result output,"
-                        " not:%s ]" % self.resultfile)
-
-                for root, dirs, files in os.walk(latest_dir):
-                    for afile in files:
-                        if os.path.splitext(afile)[-1] == '.dlog':
-                            LOGGER.info("[ copy result dlog to output file:"
-                                    " %s ]" % afile)
-                            dlogfile = os.path.join(root, afile)
-                           finalName = afile
-                            rerunString = self.resultfile.split('.')[-2]
-                            if(rerunString == 'rerun'):
-                               extraNames = afile.split('.')
-                               extraName = ""
-                               if not extraNames[1].isdigit():
-                                       extraName = extraNames[1] + '.'
-                               for i in range(2, len(extraNames)-1):
-                                       extraName += extraNames[i]+'.'
-                               finalName = self.resultfile.split('/')[-1].split('.')[0]+"."+extraName[:-1]+"_rerun_"+str(datetime.now())+".dlog"
-                            destdfile = os.path.join(\
-                                    os.path.dirname(self.resultfile), finalName)
-                           print("destdfile = "+destdfile)
-                            copyfile(dlogfile, destdfile)
-#                 for afile in os.listdir(os.path.dirname(self.resultfile)):
-#                      if ".dlog" in afile and "tct" not in afile:
-#                              os.remove(afile)
-
-        except IOError as error:
-            LOGGER.error("[ Error: fail to copy the result file to: %s,"
-                         " please check if you have created its parent directory,"
-                         " error: %s ]" % (self.resultfile, error))
-
-    def __merge_result(self, setresultfiles, totals):
-        """ merge set result to total"""
-        resultfiles = setresultfiles
-        for resultfile in resultfiles:
-            totalfile = os.path.splitext(resultfile)[0]
-            totalfile = os.path.splitext(totalfile)[0]
-            totalfile = os.path.splitext(totalfile)[0]
-            totalfile = "%s.total" % totalfile
-            totalfile = "%s.xml" % totalfile
-            total_xml = etree.parse(totalfile)
-            # LOGGER.info("|--[ merge webapi result file: %s ]" % resultfile)
-            result_xml = etree.parse(resultfile)
-            for total_suite in total_xml.getiterator('suite'):
-                for total_set in total_suite.getiterator('set'):
-                    for result_suite in result_xml.getiterator('suite'):
-                        for result_set in result_suite.getiterator('set'):
-                            # when total xml and result xml have same suite
-                            # name and set name
-                            self.__merge_result_by_name(\
-                                    result_set, total_set, \
-                                    result_suite, total_suite)
-            total_xml.write(totalfile)
-            totals.add(totalfile)
-        return totals
-
-    def __merge_result_by_name(
-            self, result_set, total_set, result_suite, total_suite):
-        ''' merge result select by name'''
-        if result_set.get('name') == total_set.get('name') \
-                and result_suite.get('name') == total_suite.get('name'):
-            if result_set.get('set_debug_msg'):
-                total_set.set("set_debug_msg", result_set.get('set_debug_msg'))
-            # set cases that doesn't have result in result \
-            # set to N/A
-            # append cases from result set to total set
-            result_case_iterator = result_set.getiterator(
-                'testcase')
-            if result_case_iterator:
-                # LOGGER.info("----[ suite: %s, set: %s, time: %s ]"
-                #% (result_suite.get('name'), result_set.get('name'),
-                #    datetime.today().strftime("%Y-%m-%d_%H_%M_%S")))
-                for result_case in result_case_iterator:
-                    try:
-                        if self.skip_tc and str(self.skip_tc).find(result_case.get('id')) > -1:
-                            continue
-                        self.__count_result(result_case)
-                        total_set.append(result_case)
-                    except IOError as error:
-                        LOGGER.error("[ Error: fail to append %s, error: %s ]"
-                                     % (result_case.get('id'), error))
-
-    def __count_result(self, result_case):
-        """ record the pass,failed,block,N/A case number"""
-
-        if not result_case.get('result'):
-            result_case.set('result', 'N/A')
-            # add empty result node structure for N/A case
-            resinfo_elm = etree.Element('result_info')
-            res_elm = etree.Element('actual_result')
-            start_elm = etree.Element('start')
-            end_elm = etree.Element('end')
-            stdout_elm = etree.Element('stdout')
-            stderr_elm = etree.Element('stderr')
-            resinfo_elm.append(res_elm)
-            resinfo_elm.append(start_elm)
-            resinfo_elm.append(end_elm)
-            resinfo_elm.append(stdout_elm)
-            resinfo_elm.append(stderr_elm)
-            result_case.append(resinfo_elm)
-            res_elm.text = 'N/A'
-        if result_case.get('result') == "PASS":
-            self.testresult_dict["pass"] += 1
-        if result_case.get('result') == "FAIL":
-            self.testresult_dict["fail"] += 1
-        if result_case.get('result') == "BLOCK":
-            self.testresult_dict["block"] += 1
-        if result_case.get('result') == "N/A":
-            self.testresult_dict["not_run"] += 1
-
-    def __get_environment(self):
-        """ get environment """
-        device_info = self.connector.get_device_info()
-        build_info = self.connector.get_buildinfo(self.tizenV)
-
-        # add environment node
-        environment = etree.Element('environment')
-        environment.attrib['device_id'] = device_info['device_id']
-        environment.attrib['device_model'] = device_info["device_model"]
-        environment.attrib['device_name'] = device_info["device_name"]
-        environment.attrib['build_id'] = build_info['buildid']
-        environment.attrib['host'] = platform.platform()
-        environment.attrib['resolution'] = device_info["resolution"]
-        environment.attrib['screen_size'] = device_info["screen_size"]
-        environment.attrib['device_model'] = build_info['model']
-        environment.attrib['manufacturer'] = build_info['manufacturer']
-        other = etree.Element('other')
-        other.text = ""
-        environment.append(other)
-        environment.tail = "\n"
-
-        return environment
-
-    def __print_summary(self):
-        """ print test summary infomation"""
-        LOGGER.info("[ test summary ]")
-        total_case_number = int(self.testresult_dict["pass"]) \
-            + int(self.testresult_dict["fail"]) \
-            + int(self.testresult_dict["block"]) \
-            + int(self.testresult_dict["not_run"])
-        LOGGER.info("  [ total case number: %s ]" % (total_case_number))
-        if total_case_number == 0:
-            LOGGER.info("[Warning: found 0 case from the result files, "
-                        "if it's not right, please check the test xml files, "
-                        "or the filter values ]")
-        else:
-            LOGGER.info("  [ pass rate: %.2f%% ]" % (float(
-                self.testresult_dict["pass"]) * 100 / int(total_case_number)))
-            LOGGER.info("  [ PASS case number: %s ]" %
-                        self.testresult_dict["pass"])
-            LOGGER.info("  [ FAIL case number: %s ]" %
-                        self.testresult_dict["fail"])
-            LOGGER.info("  [ BLOCK case number: %s ]" %
-                        self.testresult_dict["block"])
-            LOGGER.info("  [ N/A case number: %s ]" %
-                        self.testresult_dict["not_run"])
-
-    def __prepare_external_test_json(self, resultfile):
-        """Run external test"""
-        parameters = {}
-        xml_set_tmp = resultfile
-        # split set_xml by <case> get case parameters
-        LOGGER.debug("[ split xml: %s by <case> ]" % xml_set_tmp)
-        LOGGER.debug("[ this might take some time, please wait ]")
-        try:
-            parse_tree = etree.parse(xml_set_tmp)
-            root_em = parse_tree.getroot()
-            case_tmp = []
-            for tset in root_em.getiterator('set'):
-                case_order = 1
-                parameters.setdefault(
-                    "casecount", str(len(tset.getiterator('testcase')))
-                )
-                parameters.setdefault("current_set_name", xml_set_tmp)
-
-                for tcase in tset.getiterator('testcase'):
-                    if self.skip_tc and str(self.skip_tc).find(tcase.get('id')) > -1:
-                        continue
-
-                    case_detail_tmp = {}
-                    step_tmp = []
-                    parameters.setdefault(
-                        "exetype", tcase.get('execution_type')
-                    )
-
-                    parameters.setdefault("type", tcase.get('type'))
-                    case_detail_tmp.setdefault("case_id", tcase.get('id'))
-                    case_detail_tmp.setdefault("purpose", tcase.get('purpose'))
-                    case_detail_tmp.setdefault("order", str(case_order))
-                    case_detail_tmp.setdefault("onload_delay", "3")
-
-                    if tcase.find('description/test_script_entry') is not None:
-                        tc_entry = tcase.find(
-                            'description/test_script_entry').text
-                        if not tc_entry:
-                            tc_entry = ""
-
-                        tc_entry = tc_entry.replace(DEVICE_SUITE_TARGET_30_STR,DEVICE_SUITE_TARGET_30)
-                        tc_entry = tc_entry.replace(DEVICE_EXECUTION_MODE_30_STR,DEVICE_EXECUTION_MODE_30)
-
-                        case_detail_tmp["entry"] = self.test_prefix + tc_entry
-                        if tcase.find(
-                                'description/test_script_entry')\
-                                        .get('timeout'):
-                            case_detail_tmp["timeout"] = tcase.find(
-                                'description/test_script_entry'
-                            ).get('timeout')
-                        if tcase.find(
-                            'description/test_script_entry'
-                        ).get('test_script_expected_result'):
-                            case_detail_tmp["expected_result"] = tcase.find(
-                                'description/test_script_entry'
-                            ).get('test_script_expected_result')
-                    for this_step in tcase.getiterator("step"):
-                        step_detail_tmp = {}
-                        step_detail_tmp.setdefault("order", "1")
-                        step_detail_tmp["order"] = str(this_step.get('order'))
-
-                        if this_step.find("step_desc") is not None:
-                            text = this_step.find("step_desc").text
-                            if text is not None:
-                                step_detail_tmp["step_desc"] = text
-
-                        if this_step.find("expected") is not None:
-                            text = this_step.find("expected").text
-                            if text is not None:
-                                step_detail_tmp["expected"] = text
-
-                        step_tmp.append(step_detail_tmp)
-
-                    case_detail_tmp['steps'] = step_tmp
-
-                    if tcase.find('description/pre_condition') is not None:
-                        text = tcase.find('description/pre_condition').text
-                        if text is not None:
-                            case_detail_tmp["pre_condition"] = text
-
-                    if tcase.find('description/post_condition') is not None:
-                        text = tcase.find('description/post_condition').text
-                        if text is not None:
-                            case_detail_tmp['post_condition'] = text
-
-                    if tcase.get('onload_delay') is not None:
-                        case_detail_tmp[
-                            'onload_delay'] = tcase.get('onload_delay')
-                    # Check performance test
-                    if tcase.find('measurement') is not None:
-                        measures = tcase.getiterator('measurement')
-                        measures_array = []
-                        for measure in measures:
-                            measure_json = {}
-                            measure_json['name'] = measure.get('name')
-                            measure_json['file'] = measure.get('file')
-                            measures_array.append(measure_json)
-                        case_detail_tmp['measures'] = measures_array
-                    case_tmp.append(case_detail_tmp)
-                    case_order += 1
-            parameters.setdefault("cases", case_tmp)
-            if self.bdryrun:
-                parameters.setdefault("dryrun", True)
-            self.set_parameters = parameters
-
-        except IOError as error:
-            LOGGER.error("[ Error: fail to prepare cases parameters, "
-                         "error: %s ]\n" % error)
-            return False
-        return True
-
-    def apply_filter(self, root_em):
-        """ apply filter """
-        rules = self.filter_rules
-        for tsuite in root_em.getiterator('suite'):
-            if rules.get('suite'):
-                if tsuite.get('name') not in rules['suite']:
-                    root_em.remove(tsuite)
-            for tset in tsuite.getiterator('set'):
-                if rules.get('set'):
-                    if tset.get('name') not in rules['set']:
-                        tsuite.remove(tset)
-
-            for tsuite in root_em.getiterator('suite'):
-                for tset in tsuite.getiterator('set'):
-                    # if there are capabilities ,do filter
-                    if self.has_capability:
-                        tset_status = self.__apply_capability_filter_set(tset)
-                        if not tset_status:
-                            tsuite.remove(tset)
-                            continue
-                    for tcase in tset.getiterator('testcase'):
-                        if not self.__apply_filter_case_check(tcase):
-                            tset.remove(tcase)
-
-    def __apply_filter_case_check(self, tcase):
-        """filter cases"""
-        rules = self.filter_rules
-        for key in rules.iterkeys():
-            if key in ["suite", "set"]:
-                continue
-
-            #suhee.yoo : priority filter
-            if key in ["priority"]:
-                if not tcase.get(key):
-                    return False
-
-            # Check attribute
-            t_val = tcase.get(key)
-            if t_val:
-                if not t_val in rules[key]:
-                    return False
-            else:
-                # Check sub-element
-                items = tcase.getiterator(key)
-                if items:
-                    t_val = []
-                    for i in items:
-                        t_val.append(i.text)
-                    if len(set(rules[key]) & set(t_val)) == 0:
-                        return False
-        return True
-
-    def __apply_capability_filter_set(self, tset):
-        """ check the set required capability with  self.capabilities """
-
-        for tcaps in tset.getiterator('capabilities'):
-            for tcap in tcaps.getiterator('capability'):
-                capname = None
-                capvalue = None
-                capname = tcap.get('name').lower()
-                if tcap.find('value') is not None:
-                    capvalue = tcap.find('value').text
-
-                if capname in self.capabilities:
-                    if capvalue is not None:
-                        if capvalue != self.capabilities[capname]:
-                            # if capability value is not equal ,remove the case
-                            return False
-                else:
-                    # if does not hava this capability ,remove case
-                    return False
-        return True
-
-    # sdx@kooltux.org: parse measures returned by test script
-    # and insert in XML result
-    # see xsd/test_definition.xsd: measurementType
-    _MEASURE_ATTRIBUTES = ['name', 'value', 'unit',
-                           'target', 'failure', 'power']
-
-    def __insert_measures(self, case, buf, pattern="###[MEASURE]###"):
-        """ get measures """
-        measures = self.__extract_measures(buf, pattern)
-        for measure in measures:
-            m_elm = etree.Element('measurement')
-            for key in measure:
-                m_elm.attrib[key] = measure[key]
-            case.append(m_elm)
-
-    def __extract_measures(self, buf, pattern):
-        """
-        This function extracts lines from <buf> containing the defined
-        <pattern>. For each line containing the pattern, it extracts the
-        string to the end of line Then it splits the content in multiple
-        fields using the defined separator <field_sep> and maps the fields
-        to measurement attributes defined in xsd. Finally, a list containing
-        all measurement objects found in input buffer is returned
-        """
-        out = []
-        for line in buf.split("\n"):
-            pos = line.find(pattern)
-            if pos < 0:
-                continue
-
-            measure = {}
-            elts = collections.deque(line[pos + len(pattern):].split(':'))
-            for k in self._MEASURE_ATTRIBUTES:
-                if len(elts) == 0:
-                    measure[k] = ''
-                else:
-                    measure[k] = elts.popleft()
-
-            # don't accept unnamed measure
-            if measure['name'] != '':
-                out.append(measure)
-        return out
-
-    def __init_com_module(self, testxml):
-        """
-            send init test to com_module
-            if webapi test,com_module will start testkit-stub
-            else com_module send the test case to devices
-        """
-        starup_prms = self.__prepare_starup_parameters(testxml)
-        # init stub and get the session_id
-        session_id = self.testworker.init_test(starup_prms)
-        if session_id == None:
-            LOGGER.error("[ Error: Initialization Error]")
-            return False
-        else:
-            self.set_session_id(session_id)
-            return True
-
-    def __prepare_starup_parameters(self, testxml):
-        """ prepare_starup_parameters """
-
-        starup_parameters = {}
-        LOGGER.info("[ prepare_startup_parameters ]")
-        try:
-            parse_tree = etree.parse(testxml)
-            tsuite = parse_tree.getroot().getiterator('suite')[0]
-            tset = parse_tree.getroot().getiterator('set')[0]
-            if tset.get("launcher") is not None:
-                starup_parameters['test-launcher'] = tset.get("launcher")
-            else:
-                starup_parameters['test-launcher'] = tsuite.get("launcher")
-            starup_parameters['testsuite-name'] = tsuite.get("name")
-            starup_parameters['testset-name'] = tset.get("name")
-            starup_parameters['stub-name'] = self.stub_name
-            if self.external_test is not None:
-                starup_parameters['external-test'] = self.external_test
-            starup_parameters['debug'] = self.debug
-            starup_parameters['test_prefix'] = self.test_prefix
-            if self.rerun:
-                starup_parameters['rerun'] = self.rerun
-            if len(self.capabilities) > 0:
-                starup_parameters['capability'] = self.capabilities
-            if self.tizenV is not None:
-                starup_parameters['tizen-version'] = self.tizenV
-            if self.stub_port is not None:
-                starup_parameters['stub-port'] = self.stub_port
-
-        except IOError as error:
-            LOGGER.error(
-                "[ Error: prepare startup parameters, error: %s ]" % error)
-        return starup_parameters
-
-    def __check_test_status(self):
-        '''
-            get_test_status from com_module
-            check the status
-            if end ,return ture; else return False
-        '''
-        # check test running or end
-        # if the status id end return True ,else return False
-
-        session_status = self.testworker.get_test_status(self.session_id)
-        # session_status["finished"] == "0" is running
-        # session_status["finished"] == "1" is end
-        if not session_status == None:
-            if session_status["finished"] == "0":
-                progress_msg_list = session_status["msg"]
-                for line in progress_msg_list:
-                    LOGGER.info(line)
-                return False
-            elif session_status["finished"] == "1":
-                return True
-        else:
-            LOGGER.error("[ session status error ,pls finalize test ]\n")
-            # return True to finished this set  ,becasue server error
-            return True
-
-    def finalize_test(self, sessionid):
-        '''shut_down testkit-stub'''
-        try:
-            self.testworker.finalize_test(sessionid)
-        except Exception as error:
-            LOGGER.error("[ Error: fail to close webapi http server, "
-                         "error: %s ]" % error)
-
-    def get_capability(self, file_name):
-        """get_capability from file """
-
-        capability_xml = file_name
-        capabilities = {}
-        try:
-            parse_tree = etree.parse(capability_xml)
-            root_em = parse_tree.getroot()
-            for tcap in root_em.getiterator('capability'):
-                capability = get_capability_form_node(tcap)
-                capabilities = dict(capabilities, **capability)
-
-            self.set_capability(capabilities)
-            return True
-        except IOError as error:
-            LOGGER.error(
-                "[ Error: fail to parse capability xml, error: %s ]" % error)
-            return False
-
-    def __write_set_result(self, testxmlfile, result):
-        '''
-            get the result JSON form com_module,
-            write them to orignal testxmlfile
-
-        '''
-        # write the set_result to set_xml
-        set_result_xml = testxmlfile
-        # covert JOSN to python dict string
-        set_result = result
-        if 'resultfile' in set_result:
-            self.__write_file_result(set_result_xml, set_result)
-        else:
-            write_json_result(set_result_xml, set_result)
-
-    def __write_file_result(self, set_result_xml, set_result):
-        """write xml result file"""
-        result_file = set_result['resultfile']
-        try:
-            if self.rerun:
-                LOGGER.info("[ Web UI FW Unit Test Does not support rerun.\
-                      Result should be N/A ]\n")
-            else:
-                test_tree = etree.parse(set_result_xml)
-                test_em = test_tree.getroot()
-                result_tree = etree.parse(result_file)
-                result_em = result_tree.getroot()
-                dubug_file = os.path.basename(set_result_xml)
-                dubug_file = os.path.splitext(dubug_file)[0] + '.dlog'
-                for result_suite in result_em.getiterator('suite'):
-                    for result_set in result_suite.getiterator('set'):
-                        for test_suite in test_em.getiterator('suite'):
-                            for test_set in test_suite.getiterator('set'):
-                                if result_set.get('name') == \
-                                        test_set.get('name'):
-                                    result_set.set("set_debug_msg", dubug_file)
-                                    test_suite.remove(test_set)
-                                    test_suite.append(result_set)
-                test_tree.write(set_result_xml)
-                os.remove(result_file)
-            LOGGER.info("[ cases result saved to resultfile ]\n")
-        except OSError as error:
-            traceback.print_exc()
-            LOGGER.error(
-                "[ Error: fail to write cases result, error: %s ]\n" % error)
-
-
-def get_capability_form_node(capability_em):
-    ''' splite capability key and value form element tree'''
-    tmp_key = ''
-    capability = {}
-    tcap = capability_em
-    if tcap.get("name"):
-        tmp_key = tcap.get("name").lower()
-
-    if tcap.get("type").lower() == 'boolean':
-        if tcap.get("support").lower() == 'true':
-            capability[tmp_key] = True
-
-    if tcap.get("type").lower() == 'integer':
-        if tcap.get("support").lower() == 'true':
-            if tcap.getiterator(
-                    "value") and tcap.find("value").text is not None:
-                capability[tmp_key] = int(tcap.find("value").text)
-
-    if tcap.get("type").lower() == 'string':
-        if tcap.get("support").lower() == 'true':
-            if tcap.getiterator(
-                    "value") and tcap.find("value").text is not None:
-                capability[tmp_key] = tcap.find("value").text
-
-    return capability
-
-
-def get_version_info():
-    """
-        get testkit tool version ,just read the version in VERSION file
-        VERSION file must put in /opt/testkit/lite2.4/
-    """
-    try:
-        config = ConfigParser.ConfigParser()
-        if platform.system() == "Linux":
-            config.read('/opt/testkit/lite2.4/VERSION')
-        else:
-            version_file = os.path.join(sys.path[0], 'VERSION')
-            config.read(version_file)
-        version = config.get('public_version', 'version')
-        return version
-    except KeyError as error:
-        LOGGER.error(
-            "[ Error: fail to parse version info, error: %s ]\n" % error)
-        return ""
-
-
-def replace_cdata(file_name):
-    """ replace some character"""
-    try:
-        abs_path = mktemp()
-        new_file = open(abs_path, 'w')
-        old_file = open(file_name)
-        for line in old_file:
-            line_temp = line.replace('&lt;![CDATA', '<![CDATA')
-            new_file.write(line_temp.replace(']]&gt;', ']]>'))
-        new_file.close()
-        old_file.close()
-        remove(file_name)
-        move(abs_path, file_name)
-    except IOError as error:
-        LOGGER.error("[ Error: fail to replace cdata in the result file, "
-                     "error: %s ]\n" % error)
-
-
-def extract_notes(buf, pattern):
-    """util func to split lines in buffer, search for pattern on each line
-    then concatenate remaining content in output buffer"""
-    out = ""
-    for line in buf.split("\n"):
-        pos = line.find(pattern)
-        if pos >= 0:
-            out += line[pos + len(pattern):] + "\n"
-    return out
-
-# sdx@kooltux.org: parse notes in buffer and insert them in XML result
-
-
-def insert_notes(case, buf, pattern="###[NOTE]###"):
-    """ insert notes"""
-    desc = case.find('description')
-    if desc is None:
-        return
-
-    notes_elm = desc.find('notes')
-    if notes_elm is None:
-        notes_elm = etree.Element('notes')
-        desc.append(notes_elm)
-    if notes_elm.text is None:
-        notes_elm.text = extract_notes(buf, pattern)
-    else:
-        notes_elm.text += "\n" + extract_notes(buf, pattern)
-
-
-def get_summary(start_time, end_time):
-    """ set summary node """
-    summary = etree.Element('summary')
-    summary.attrib['test_plan_name'] = "Empty test_plan_name"
-    start_at = etree.Element('start_at')
-    start_at.text = start_time
-    end_at = etree.Element('end_at')
-    end_at.text = end_time
-    summary.append(start_at)
-    summary.append(end_at)
-    summary.tail = "\n  "
-    return summary
-
-
-def write_json_result(set_result_xml, set_result):
-    ''' fetch result form JSON'''
-
-    case_results = set_result["cases"]
-    try:
-        parse_tree = etree.parse(set_result_xml)
-        root_em = parse_tree.getroot()
-        dubug_file = os.path.basename(set_result_xml)
-        dubug_file = os.path.splitext(dubug_file)[0] + '.dlog'
-        for tset in root_em.getiterator('set'):
-            tset.set("set_debug_msg", dubug_file)
-            for tcase in tset.getiterator('testcase'):
-                for case_result in case_results:
-                    if tcase.get("id") == case_result['case_id']:
-                        tcase.set('result', case_result['result'].upper())
-                        # Check performance test
-                        if tcase.find('measurement') is not None:
-                            for measurement in tcase.getiterator(
-                                    'measurement'):
-                                if 'measures' in case_result:
-                                    m_results = case_result['measures']
-                                    for m_result in m_results:
-                                        if measurement.get('name') == \
-                                                m_result['name'] and 'value' in m_result:
-                                            measurement.set(
-                                                'value', m_result[
-                                                    'value'])
-                        if tcase.find("./result_info") is not None:
-                            tcase.remove(tcase.find("./result_info"))
-                        result_info = etree.SubElement(tcase, "result_info")
-                        actual_result = etree.SubElement(
-                            result_info, "actual_result")
-                        actual_result.text = case_result['result'].upper()
-
-                        start = etree.SubElement(result_info, "start")
-                        end = etree.SubElement(result_info, "end")
-                        stdout = etree.SubElement(result_info, "stdout")
-                        stderr = etree.SubElement(result_info, "stderr")
-                        if 'start_at' in case_result:
-                            start.text = case_result['start_at']
-                        if 'end_at' in case_result:
-                            end.text = case_result['end_at']
-                        if 'stdout' in case_result:
-                            stdout.text = str2xmlstr(case_result['stdout'])
-                        if 'stderr' in case_result:
-                            stderr.text = str2xmlstr(case_result['stderr'])
-        parse_tree.write(set_result_xml)
-
-        LOGGER.info("[ cases result saved to resultfile ]\n")
-    except IOError as error:
-        traceback.print_exc()
-        LOGGER.error(
-            "[ Error: fail to write cases result, error: %s ]\n" % error)
-
diff --git a/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite1.0/testkitlite/engines/default/runner.pyc b/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite1.0/testkitlite/engines/default/runner.pyc
deleted file mode 100755 (executable)
index 697e3cf..0000000
Binary files a/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite1.0/testkitlite/engines/default/runner.pyc and /dev/null differ
diff --git a/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite1.0/testkitlite/engines/default/worker.py b/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite1.0/testkitlite/engines/default/worker.py
deleted file mode 100755 (executable)
index 3536493..0000000
+++ /dev/null
@@ -1,661 +0,0 @@
-#!/usr/bin/python
-#
-# Copyright (C) 2012 Intel Corporation
-#
-# 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
-# of the License, or (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
-# MA  02110-1301, USA.
-#
-# Authors:
-#           Chengtao,Liu  <chengtaox.liu@intel.com>
-""" The implementation test worker"""
-
-import os
-import time
-import threading
-import uuid
-import ConfigParser
-
-from datetime import datetime
-from commodule.log import LOGGER
-from commodule.httprequest import get_url, http_request
-
-TCT_CONFIG_FILE = "/opt/tools/TCT_CONFIG"
-tct_parser = ConfigParser.ConfigParser()
-tct_parser.read(TCT_CONFIG_FILE)
-
-DEVICE_SUITE_TARGET_24 = tct_parser.get('DEVICE', 'DEVICE_SUITE_TARGET_24')
-DEVICE_SUITE_TARGET_30 = tct_parser.get('DEVICE', 'DEVICE_SUITE_TARGET_30')
-
-CNT_RETRY = 10
-DATE_FORMAT_STR = "%Y-%m-%d %H:%M:%S"
-UIFW_MAX_TIME = 300
-UIFW_MAX_WRITE_TIME = 10
-UIFW_RESULT = os.path.join(DEVICE_SUITE_TARGET_24, "Documents/tcresult")
-UIFW_SET_NUM = 0
-LAUNCH_ERROR = 1
-BLOCK_ERROR = 3
-
-
-class TestSetResut(object):
-
-    """ test result """
-
-    _progress = "execute case: %s # %s...(%s)"
-    _mutex = threading.Lock()
-
-    def __init__(self, testsuite_name="", testset_name=""):
-        self._suite_name = testsuite_name
-        self._set_name = testset_name
-        self._result = {"cases": []}
-        self._finished = 0
-
-    def set_status(self, flag=0):
-        """set finished tag"""
-        self._mutex.acquire()
-        self._finished = flag
-        self._mutex.release()
-
-    def get_status(self):
-        """return finished tag"""
-        self._mutex.acquire()
-        flag = self._finished
-        self._mutex.release()
-        return flag
-
-    def set_result(self, tresult):
-        """set cases result to result buffer"""
-        self._mutex.acquire()
-        self._result = tresult
-        self._mutex.release()
-
-    def extend_result(self, cases_result=None, print_out=True):
-        """update cases result to the result buffer"""
-        self._mutex.acquire()
-        if cases_result is not None:
-            self._result["cases"].extend(cases_result)
-
-        if print_out:
-            for case_it in cases_result:
-                LOGGER.info(self._progress %
-                            (self._suite_name, case_it['case_id'], \
-                                    case_it['result']))
-                if case_it['result'].lower() in ['fail', 'block'] \
-                        and 'stdout' in case_it:
-                    LOGGER.info(case_it['stdout'])
-        self._mutex.release()
-
-    def get_result(self):
-        """get cases result from the result buffer"""
-        self._mutex.acquire()
-        result = self._result
-        self._mutex.release()
-        return result
-
-
-def _print_dlog(dlog_file):
-    if os.path.exists(dlog_file):
-        LOGGER.info('[ start of dlog message ]')
-        readbuff = file(dlog_file, "r")
-        for line in readbuff.readlines():
-            LOGGER.info(line.strip('\n'))
-        LOGGER.info('[ end of dlog message ]')
-
-
-def _core_test_exec(conn, test_set_name, exetype, cases_queue, result_obj, \
-        tizen_version):
-    """function for running core tests"""
-    exetype = exetype.lower()
-    total_count = len(cases_queue)
-    current_idx = 0
-    manual_skip_all = False
-    result_list = []
-    for test_case in cases_queue:
-        if result_obj.get_status() == 1:
-            break
-
-        current_idx += 1
-        core_cmd = ""
-        if "entry" in test_case:
-            core_cmd = test_case["entry"]
-        else:
-            LOGGER.info(
-                "[ Warnning: test script is empty,"
-                " please check your test xml file ]")
-            continue
-        expected_result = test_case.get('expected_result', '0')
-        time_out = int(test_case.get('timeout', '90'))
-        measures = test_case.get('measures', [])
-        retmeasures = []
-
-        LOGGER.info("\n[%s:%s] TestCase: %s\n"
-                    "TestEntry: %s"
-                    % (current_idx, total_count, test_case['case_id'], core_cmd))
-        strtime = datetime.now().strftime(DATE_FORMAT_STR)
-        LOGGER.info("start: %s" % strtime)
-        test_case["start_at"] = strtime
-        if exetype == 'auto':
-            return_code, stdout, stderr = conn.shell_cmd_ext(
-                core_cmd, time_out, False)
-
-            if return_code is not None and return_code != "timeout":
-                test_case["result"] = "pass" if str(
-                    return_code) == expected_result else "fail"
-                test_case["stdout"] = stdout
-                test_case["stderr"] = stderr
-                for item in measures:
-                    ind = item['name']
-                    fname = item['file']
-                    if fname is None:
-                        continue
-                    tmpname = os.path.expanduser("~") + os.sep + "mea_tmp"
-                    if conn.download_file(fname, tmpname):
-                        try:
-                            config = ConfigParser.ConfigParser()
-                            config.read(tmpname)
-                            item['value'] = config.get(ind, 'value')
-                            retmeasures.append(item)
-                            os.remove(tmpname)
-                        except IOError as error:
-                            LOGGER.error(
-                                "[ Error: fail to parse value,"
-                                " error:%s ]\n" % error)
-                test_case["measures"] = retmeasures
-            else:
-                test_case["result"] = "BLOCK"
-                test_case["stdout"] = stdout
-                test_case["stderr"] = stderr
-        elif exetype == 'manual':
-            # handle manual core cases
-            try:
-                # LOGGER.infopre-condition info
-                if "pre_condition" in test_case:
-                    LOGGER.info("\n****\nPre-condition: %s\n ****\n"
-                                % test_case['pre_condition'])
-                # LOGGER.infostep info
-                if "steps" in test_case:
-                    for step in test_case['steps']:
-                        LOGGER.info(
-                            "********************\n"
-                            "Step Order: %s" % step['order'])
-                        LOGGER.info("Step Desc: %s" % step['step_desc'])
-                        LOGGER.info(
-                            "Expected: %s\n********************\n"
-                            % step['expected'])
-                if manual_skip_all:
-                    test_case["result"] = "N/A"
-                else:
-                    while True:
-                        test_result = raw_input(
-                            '[ please input case result ]'
-                            ' (p^PASS, f^FAIL, b^BLOCK, n^Next, d^Done):')
-                        if test_result.lower() == 'p':
-                            test_case["result"] = "PASS"
-                            break
-                        elif test_result.lower() == 'f':
-                            test_case["result"] = "FAIL"
-                            break
-                        elif test_result.lower() == 'b':
-                            test_case["result"] = "BLOCK"
-                            break
-                        elif test_result.lower() == 'n':
-                            test_case["result"] = "N/A"
-                            break
-                        elif test_result.lower() == 'd':
-                            manual_skip_all = True
-                            test_case["result"] = "N/A"
-                            break
-                        else:
-                            LOGGER.info(
-                                "[ Warnning: you input: '%s' is invalid,"
-                                " please try again ]" % test_result)
-            except IOError as error:
-                LOGGER.info(
-                    "[ Error: fail to get core manual test step,"
-                    " error: %s ]\n" % error)
-        strtime = datetime.now().strftime(DATE_FORMAT_STR)
-        LOGGER.info("end : %s" % strtime)
-        test_case["end_at"] = strtime
-        LOGGER.info("execute case: %s" % test_case["result"])
-        result_list.append(test_case)
-
-    result_obj.extend_result(result_list, False)
-    result_obj.set_status(1)
-
-
-def _web_test_exec(conn, server_url, test_web_app, exetype, cases_queue, \
-        result_obj, tizen_version):
-    """function for running web tests"""
-    exetype = exetype.lower()
-    test_set_finished = False
-    err_cnt = 0
-    relaunch_cnt = 0
-    for test_group in cases_queue:
-        if test_set_finished:
-            break
-
-        ret = http_request(
-            get_url(server_url, "/set_testcase"), "POST", test_group, 30)
-        if ret is None:
-            LOGGER.error(
-                "[ set testcases timeout, please check device! ]")
-            result_obj.set_status(1)
-            break
-
-        if not conn.launch_app(test_web_app):
-            result_obj.set_status(1)
-            break
-
-        while True:
-            if result_obj.get_status() == 1:
-                test_set_finished = True
-                break
-            ret = http_request(
-                get_url(server_url, "/check_server_status"), "GET", {})
-            if ret is None:
-                err_cnt += 1
-                LOGGER.info("/check_server_status : %s " % ret)
-                if err_cnt >= CNT_RETRY:
-                    LOGGER.error(
-                        "[ check server status time out, \
-                                please check device! ]")
-                    test_set_finished = True
-                    result_obj.set_status(1)
-                    break
-            else:
-                result_cases = ret.get("cases")
-                error_code = ret.get("error_code")
-                if error_code is not None:
-                    if not conn.launch_app(test_web_app):
-                        test_set_finished = True
-                        result_obj.set_status(1)
-                        break
-                    if error_code == LAUNCH_ERROR:
-                        LOGGER.error("[ERROR : test app no response, hang or not launched!]")
-                        relaunch_cnt += 1
-                        if relaunch_cnt >= 3:
-                            test_set_finished = True
-                            result_obj.set_status(1)
-                            break
-                    elif error_code == BLOCK_ERROR:
-                        relaunch_cnt = 0
-                else:
-                    err_cnt = 0
-                    relaunch_cnt = 0
-
-                if result_cases is not None and len(result_cases):
-                    result_obj.extend_result(result_cases)
-                elif exetype == 'manual':
-                    LOGGER.info(
-                        "[ please execute manual cases ]\r\n")
-
-                if ret["finished"] == 1:
-                    test_set_finished = True
-                    result_obj.set_status(1)
-                    break
-                elif ret["block_finished"] == 1:
-                    break
-            time.sleep(2)
-
-
-def _webuifw_test_exec(conn, test_web_app, test_session, test_set_name, \
-        exetype, cases_queue, result_obj):
-    """function for running webuifw tests"""
-    global UIFW_SET_NUM
-    UIFW_SET_NUM = UIFW_SET_NUM + 1
-    set_UIFW_RESULT = UIFW_RESULT + "_" + str(UIFW_SET_NUM) + ".xml"
-    result_obj.set_status(0)
-    result_obj.set_result({"resultfile": ""})
-    ls_cmd = "ls -l %s" % set_UIFW_RESULT
-    sz_cmd = "du -hk %s " % set_UIFW_RESULT
-    time_out = UIFW_MAX_TIME
-    rm_cmd = "rm " + os.path.join(DEVICE_SUITE_TARGET_24, "Documents/tcresult*.xml")
-
-    if exetype == "auto":
-        conn.shell_cmd(rm_cmd)
-        UIFW_SET_NUM = 1
-        LOGGER.info('[webuifw] start test executing')
-        if not conn.launch_app(test_web_app):
-            LOGGER.info("[ launch test app \"%s\" failed! ]" \
-                    % str(test_web_app))
-            result_obj.set_result({"resultfile": ""})
-            result_obj.set_status(1)
-
-    result_file = os.path.expanduser("~") + os.sep + test_session + "_uifw.xml"
-
-    while time_out > 0:
-        LOGGER.info('[webuifw] waiting for test completed...')
-        exit_code, ret = conn.shell_cmd(ls_cmd)
-        if not 'No such file or directory' in ret[0]:
-            exit_code, ret = conn.shell_cmd(sz_cmd)
-            f_size = int(ret[0].split("\t")[0])
-            if f_size > 0:
-                break
-            if time_out > UIFW_MAX_WRITE_TIME:
-                time_out = UIFW_MAX_WRITE_TIME
-        time.sleep(2)
-        time_out -= 2
-
-    LOGGER.info('[webuifw] end test executing')
-    if conn.download_file(set_UIFW_RESULT, result_file):
-        result_obj.set_result({"resultfile": result_file})
-    for test_case in cases_queue:
-        LOGGER.info("[webuifw] execute case: %s # %s" %
-                    (test_set_name, test_case['case_id']))
-    result_obj.set_status(1)
-
-
-class TestWorker(object):
-
-    """Test executor for testkit-lite"""
-
-    def __init__(self, client=None):
-        super(TestWorker, self).__init__()
-        self.conn = client
-        self.tizen_version = ""
-        self.server_url = None
-        self.result_obj = None
-        self.opts = dict({'block_size': 300,
-                          'test_type': None,
-                          'auto_iu': False,
-                          'fuzzy_match': False,
-                          'self_exec': False,
-                          'self_repeat': False,
-                          'debug_mode': False
-                          })
-
-    def set_TizenVersion(self, tizenversion):
-        self.tizen_version = tizenversion
-
-    def __init_test_stub(self, stub_app, stub_port, debug_opt):
-        # init testkit-stub deamon process
-        timecnt = 0
-        blaunched = False
-        while timecnt < CNT_RETRY:
-            if not self.conn.check_process(stub_app):
-                LOGGER.info(\
-                        "[ no stub process activated, now try to launch %s ]"\
-                        % stub_app)
-                self.conn.launch_stub(stub_app, stub_port, debug_opt)
-                timecnt += 1
-            else:
-                blaunched = True
-                break
-
-        if not blaunched:
-            LOGGER.info("[ launch stub process failed! ]")
-            return False
-
-        if self.server_url is None:
-            self.server_url = self.conn.get_server_url(stub_port)
-
-        timecnt = 0
-        blaunched = False
-        while timecnt < CNT_RETRY:
-            ret = http_request(get_url(
-                self.server_url, "/check_server_status"), "GET", {})
-            if ret is None:
-                LOGGER.info("[ check server status, not ready yet! ]")
-                timecnt += 1
-                time.sleep(1)
-            else:
-                blaunched = True
-                break
-        return blaunched
-
-    def __init_webtest_opt(self, params):
-        """init the test runtime, mainly process the star up of test stub"""
-        if params is None:
-            return None
-
-        session_id = str(uuid.uuid1())
-        cmdline = ""
-        debug_opt = ""
-        stub_app = params.get('stub-name', 'testkit-stub')
-        stub_port = params.get('stub-port', '8000')
-        test_launcher = params.get('external-test', '')
-        testsuite_name = params.get('testsuite-name', '')
-        testset_name = params.get('testset-name', '')
-        capability_opt = params.get("capability", None)
-        client_cmds = params.get('test-launcher', '').strip().split()
-        wrt_tag = client_cmds[1] if len(client_cmds) > 1 else ""
-        self.opts['fuzzy_match'] = fuzzy_match = wrt_tag.find('z') != -1
-        self.opts['auto_iu'] = auto_iu = wrt_tag.find('iu') != -1
-        self.opts['self_exec'] = wrt_tag.find('a') != -1
-        self.opts['self_repeat'] = wrt_tag.find('r') != -1
-        self.opts['debug_mode'] = params.get("debug", False)
-
-        test_opt = self.conn.get_launcher_opt(
-            test_launcher, testsuite_name, testset_name, fuzzy_match, auto_iu)
-        if test_opt is None:
-            LOGGER.info("[ init the test options, get failed ]")
-            return None
-
-        # to be removed in later version
-        test_opt["suite_id"] = test_opt["test_app_id"]
-        self.opts.update(test_opt)
-
-        # uifw, this suite don't need stub
-        if self.opts['self_exec'] or self.opts['self_repeat']:
-            self.opts['test_type'] = "jqunit"
-            return session_id
-
-        # enable debug information
-        if self.opts['debug_mode']:
-            debug_opt = '--debug'
-
-        if self.__init_test_stub(stub_app, stub_port, debug_opt):
-            ret = http_request(get_url(
-                self.server_url, "/init_test"), "POST", test_opt)
-            if ret is None:
-                LOGGER.info("[ init test suite failed! ]")
-                return None
-            elif "error_code" in ret:
-                LOGGER.info("[ init test suite, "
-                            "get error code %d ! ]" % ret["error_code"])
-                return None
-
-            if capability_opt is not None:
-                ret = http_request(get_url(self.server_url,
-                                           "/set_capability"),
-                                   "POST", capability_opt)
-            return session_id
-        else:
-            LOGGER.info("[ Init test failed ! ]")
-            return None
-
-    def init_test(self, params):
-        """init the test envrionment"""
-        self.opts['testset_name'] = params.get('testset-name', '')
-        self.opts['testsuite_name'] = params.get('testsuite-name', '')
-        if params.get('test-launcher') is not None:
-            self.opts['test_type'] = "webapi"
-            return self.__init_webtest_opt(params)
-        else:
-            self.opts['test_type'] = "coreapi"
-            return str(uuid.uuid1())
-
-    def __run_core_test(self, sessionid, test_set_name, exetype, cases):
-        """
-            process the execution for core api test
-        """
-        self.opts['async_th'] = threading.Thread(
-            target=_core_test_exec,
-            args=(
-                self.conn, test_set_name, exetype, cases, self.result_obj,\
-                        self.tizen_version)
-        )
-        self.opts['async_th'].start()
-        return True
-
-    def __run_jqt_test(self, sessionid, test_set_name, cases):
-        """
-            process the execution for Qunit testing
-        """
-        exetype = "auto" if self.opts['self_exec'] else ""
-        self.opts['async_th'] = threading.Thread(
-            target=_webuifw_test_exec,
-            args=(
-                self.conn, self.opts['test_app_id'], sessionid, test_set_name,\
-                        exetype, cases, self.result_obj)
-        )
-        self.opts['async_th'].start()
-        return True
-
-    def __run_web_test(self, sessionid, test_set_name, exetype, ctype, cases):
-        """
-            process the execution for web api test
-            may be splitted to serveral blocks,
-            with the unit size defined by block_size
-        """
-        case_count = len(cases)
-        blknum = 0
-        if case_count % self.opts['block_size'] == 0:
-            blknum = case_count / self.opts['block_size']
-        else:
-            blknum = case_count / self.opts['block_size'] + 1
-
-        idx = 1
-        test_set_queues = []
-        while idx <= blknum:
-            block_data = {}
-            block_data["exetype"] = exetype
-            block_data["type"] = ctype
-            block_data["totalBlk"] = str(blknum)
-            block_data["currentBlk"] = str(idx)
-            block_data["casecount"] = str(case_count)
-            start = (idx - 1) * self.opts['block_size']
-            if idx == blknum:
-                end = case_count
-            else:
-                end = idx * self.opts['block_size']
-            block_data["cases"] = cases[start:end]
-            test_set_queues.append(block_data)
-            idx += 1
-        self.opts['async_th'] = threading.Thread(
-            target=_web_test_exec,
-            args=(
-                self.conn, self.server_url, self.opts['test_app_id'], exetype,\
-                        test_set_queues, self.result_obj, self.tizen_version)
-        )
-        self.opts['async_th'].start()
-        return True
-
-    def run_test(self, sessionid, test_set):
-        """
-            process the execution for a test set
-        """
-        if sessionid is None:
-            return False
-
-        if not "cases" in test_set:
-            return False
-
-        # start debug trace thread
-        dlogfile = test_set['current_set_name'].replace('.xml', '.dlog')
-        self.opts['dlog_file'] = dlogfile
-        self.conn.start_debug(dlogfile)
-        time.sleep(1)
-
-        self.result_obj = TestSetResut(
-            self.opts['testsuite_name'], self.opts['testset_name'])
-
-        cases, exetype, ctype = test_set[
-            "cases"], test_set["exetype"], test_set["type"]
-
-        devid = self.conn.get_devid()
-        if self.conn.is_NE_mode() or (devid and devid.find('None') > -1):
-            result_list = []
-            for case in cases:
-                test_case = {}
-                test_case['case_id'] = case['case_id']
-                test_case['result'] = 'N/A'
-                if devid.find('None') > -1:
-                    test_case['stdout'] = "target not found"
-                else:
-                    issue_num = int(self.conn.is_NE_mode())
-                    err_msg = "precondition failed "
-                    if issue_num == 1:
-                        err_msg += "(not connected to wifi)"
-                    elif issue_num == 2:
-                        err_msg += "(not set email account)"
-                    elif issue_num == 3:
-                        err_msg += "(not available device network)"
-                    elif issue_num == 4:
-                        err_msg += "(not enable bluetooth)"
-                    elif issue_num == 5:
-                        err_msg += "(not enable nfc)"
-                    elif issue_num == 6:
-                        err_msg += "(not available sim card)"
-                    test_case['stdout'] = err_msg
-
-                result_list.append(test_case)
-
-            self.result_obj.extend_result(result_list)
-            self.result_obj.set_status(1)
-            return True
-
-        if self.opts['test_type'] == "webapi":
-            return self.__run_web_test(sessionid, \
-                    self.opts['testset_name'], exetype, ctype, cases)
-        elif self.opts['test_type'] == "coreapi":
-            return self.__run_core_test(sessionid, \
-                    self.opts['testset_name'], exetype, cases)
-        elif self.opts['test_type'] == "jqunit":
-            return self.__run_jqt_test(sessionid, \
-                    self.opts['testset_name'], cases)
-        else:
-            LOGGER.info("[ unsupported test suite type ! ]")
-            return False
-
-    def get_test_status(self, sessionid):
-        """poll the test task status"""
-        if sessionid is None:
-            return None
-        result = {}
-        result["msg"] = []
-        result["finished"] = str(self.result_obj.get_status())
-        return result
-
-    def get_test_result(self, sessionid):
-        """get the test result for a test set """
-        result = {}
-        if sessionid is None:
-            return result
-
-        result = self.result_obj.get_result()
-        return result
-
-    def finalize_test(self, sessionid):
-        """clear the test stub and related resources"""
-        if sessionid is None:
-            return False
-
-        self.result_obj.set_status(1)
-
-        # stop test app
-        if self.opts['test_type'] == "webapi":
-            self.conn.kill_app(self.opts['test_app_id'])
-            # uninstall test app
-            if self.opts['auto_iu']:
-                self.conn.uninstall_app(self.opts['test_app_id'])
-
-        # stop debug thread
-        self.conn.stop_debug()
-
-        # add dlog output for debug
-        if self.opts['debug_mode']:
-            _print_dlog(self.opts['dlog_file'])
-
-        return True
diff --git a/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite1.0/testkitlite/engines/default/worker.pyc b/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite1.0/testkitlite/engines/default/worker.pyc
deleted file mode 100755 (executable)
index 7633909..0000000
Binary files a/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite1.0/testkitlite/engines/default/worker.pyc and /dev/null differ
diff --git a/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite1.0/web/Makefile.am b/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite1.0/web/Makefile.am
deleted file mode 100755 (executable)
index 7c6dc85..0000000
+++ /dev/null
@@ -1,22 +0,0 @@
-# Copyright (C) 2012 Intel Corporation
-# 
-# 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
-# of the License, or (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
-#
-# Authors:
-#              Zhang, Huihui <huihuix.zhang@intel.com>
-#              Wendong,Sui  <weidongx.sun@intel.com>
-
-testkitwebdir = /opt/testkit/web
-dist_testkitweb_DATA = *.html *.js
diff --git a/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite1.0/web/index.html b/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite1.0/web/index.html
deleted file mode 100755 (executable)
index ffe4019..0000000
+++ /dev/null
@@ -1,1148 +0,0 @@
-<!doctype html>
-<!--
-# Copyright (C) 2012 Intel Corporation
-# 
-# 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
-# of the License, or (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
-#
-# Authors:
-#              Wang, Jing <jing.j.wang@intel.com>
-#              Tang, Shaofeng  <shaofeng.tang@intel.com>
--->
-<head>
-<meta name="viewport" content="width=device-width">
-<script src="jquery.js"></script>
-<script>
-       var iTest = 0;
-
-       var Tests;
-       var statusNode;
-       var oTestFrame;
-       var statusFrame;
-       var frmset;
-       var xmldoc;
-
-       var startTime;
-       var defTime = 2000;
-       var timeout;
-       var winCloseTimeout = 5000;
-       var blockCheckTime = 10;
-
-       var server = "http://127.0.0.1:8000";
-       var need_ajax = true;
-
-       var hidestatus;
-       var ttestsuite;
-       var tpriority;
-       var tstatus;
-       var ttype;
-       var tcategory;
-       var texecutiontype;
-
-       var manualcaseslist;
-
-       var cursuite;
-       var curset;
-
-       var last_test_page = "";
-       var current_page_uri = "";
-
-       var activetest = true;
-
-       var manualcases = function() {
-               this.casesid = "";
-               this.index = 0;
-               this.result = "";
-       };
-
-       function getTestPageParam(uri, param) {
-               var uri_local = uri;
-               var iLen = param.length;
-               var iStart = uri_local.indexOf(param);
-               if (iStart == -1)
-                       return "";
-               iStart += iLen + 1;
-               var iEnd = uri_local.indexOf("&", iStart);
-               if (iEnd == -1)
-                       return uri_local.substring(iStart);
-
-               return uri_local.substring(iStart, iEnd);
-       }
-
-       function Parm(data, name) {
-               var p;
-               ts = $(data).find(name);
-               if (ts) {
-                       t = $(ts).get(0);
-                       if (t)
-                               p = $(t).text().trim();
-               }
-
-               if (p) {
-                       var rawVal = decodeURI(p);
-                       if (rawVal.indexOf(',') < 0)
-                               p = rawVal;
-                       else
-                               p = rawVal.split(',');
-               }
-
-               return p;
-       }
-
-       function getParms() {
-               var parms = new Array();
-               var str = location.search.substring(1);
-               var items = str.split('&');
-               for ( var i = 0; i < items.length; i++) {
-                       var pos = items[i].indexOf('=');
-                       if (pos > 0) {
-                               var key = items[i].substring(0, pos);
-                               var val = items[i].substring(pos + 1);
-                               if (!parms[key]) {
-                                       var rawVal = decodeURI(val);
-                                       if (rawVal.indexOf(',') < 0)
-                                               parms[key] = rawVal;
-                                       else
-                                               parms[key] = rawVal.split(',');
-                               }
-                       }
-               }
-
-               ttestsuite = parms["testsuite"];
-               tpriority = parms["priority"];
-               hidestatus = parms["hidestatus"];
-               tstatus = parms["status"];
-               ttype = parms["type"];
-               tcategory = parms["category"];
-               texecutiontype = parms["execution_type"];
-               if (need_ajax) {
-                       $.ajax({
-                               async : false,
-                               type : "GET",
-                               url : server + "/get_params",
-                               dataType : "xml",
-                               success : function(data) {
-                                       hidestatus = Parm(data, 'hidestatus');
-                               },
-                               error : function(x, t, e) {
-                                       print_error_log("getParms", e);
-                               }
-                       });
-               }
-       }
-
-       function runTestsuite_nofilter(xml) {
-               xmldoc = xml;
-               Tests = $(xml).find("testcase");
-               doTest();
-       }
-
-       function runTestsuite(xml) {
-               xmldoc = xml;
-               $(xml).find("testcase").each(
-                               function() {
-                                       var v, vType;
-                                       v = $(this).attr('execution_type');
-
-                                       if (texecutiontype && texecutiontype == "manual")
-                                               vType = "manual";
-                                       else if (texecutiontype && texecutiontype == "auto")
-                                               vType = "auto";
-                                       else if (!texecutiontype)
-                                               vType = [ "auto", "manual" ];
-                                       else
-                                               vType = "auto";
-
-                                       if (v != vType && $.inArray(v, vType) < 0)
-                                               $(this).remove();
-                                       v = $(this).attr('priority');
-                                       if (tpriority && v != tpriority
-                                                       && $.inArray(v, tpriority) < 0)
-                                               $(this).remove();
-                                       v = $(this).attr('status');
-                                       if (tstatus && v != tstatus && $.inArray(v, tstatus) < 0)
-                                               $(this).remove();
-                                       v = $(this).attr('type');
-                                       if (ttype && v != ttype && $.inArray(v, ttype) < 0)
-                                               $(this).remove();
-                                       var categories = $(this).find("categories > category");
-                                       if (categories.length > 0 && tcategory) {
-                                               var i;
-                                               var found = false;
-                                               for (i = 0; i < categories.length; i++) {
-                                                       var category = $(categories).get(i);
-                                                       if ($(category).text().trim() != tcategory
-                                                                       && $.inArray($(category).text().trim(),
-                                                                                       tcategory) < 0) {
-                                                               found = true;
-                                                               break;
-                                                       }
-                                               }
-                                               if (!found)
-                                                       $(this).remove();
-                                       }
-
-                                       $(this).attr('result', "N/A");
-                               });
-               Tests = $(xml).find("testcase");
-               xmldoc = xml;
-               save_result();
-               doTest();
-       }
-
-       function precheck_init() {
-               server_url = "http://127.0.0.1:8000/check_server";
-               $.ajax({
-                       async : false,
-                       url : server_url,
-                       type : "GET",
-                       success : init_test,
-                       error : function(x, t, e) {
-                               print_error_log("can't find a http server",
-                                               "run widget in the standalone mode");
-                               need_ajax = false;
-                               init();
-                       }
-               });
-       }
-
-       function init() {
-               getParms();
-
-               oTestFrame = document.getElementById('testframe');
-               if (!oTestFrame)
-                       return;
-
-               statusFrame = document.getElementById('statusframe');
-               if (!statusFrame)
-                       return;
-
-               var statusWin = statusFrame.contentWindow;
-               if (!statusWin)
-                       return;
-
-               statusNode = statusWin.document.createElement("div");
-               if (!statusNode)
-                       return;
-               statusWin.document.body.appendChild(statusNode);
-
-               frmset = $($('#main')).get(0);
-               if (!frmset)
-                       return;
-
-               if (hidestatus && hidestatus == "1")
-                       $(frmset).attr('rows', "0, *");
-               if (need_ajax) {
-                       $.ajax({
-                               async : false,
-                               type : "GET",
-                               url : server + '/get_testsuite',
-                               dataType : "xml",
-                               success : runTestsuite_nofilter,
-                               error : function(x, t, e) {
-                                       print_error_log("init", e);
-                               }
-                       });
-               }
-               if (!xmldoc) {
-                       if (!ttestsuite) {
-                               ttestsuite = 'tests.xml';
-                       }
-                       $.ajax({
-                               async : false,
-                               type : "GET",
-                               url : ttestsuite,
-                               dataType : "xml",
-                               success : runTestsuite,
-                               error : function(x, t, e) {
-                                       print_error_log("init", e);
-                               }
-                       });
-               }
-       }
-
-       function escape_html(s) {
-               return s.replace(/\&/g, "&amp;").replace(/</g, "&lt;").replace(/"/g,
-                               "&quot;").replace(/'/g, "&#39;");
-       }
-
-       function check_timeout(time) {
-               if (time == 11) {
-                       report('BLOCK', "Time is out");
-               }
-               sleep_time = time * 50;
-               setTimeout("CheckResult('yes', " + time + ")", sleep_time);
-       }
-
-       function CheckResult(need_check_block, sleep_time) {
-               var message = "";
-               var total_num = "";
-               var locator_key = "";
-               var value = "";
-
-               var oTestWin = oTestFrame.contentWindow;
-               var oTestDoc = oTestWin.document;
-               var case_uri = current_page_uri;
-
-               try {
-                       if (oTestWin.document.readyState == "complete") {
-                               total_num = getTestPageParam(case_uri, "total_num");
-                               locator_key = getTestPageParam(case_uri, "locator_key");
-                               value = getTestPageParam(case_uri, "value");
-
-                               oPass = $(oTestDoc).find(".pass");
-                               oFail = $(oTestDoc).find(".fail");
-
-                               // Test page has parameters
-                               if (total_num != "" && locator_key != "" && value != "") {
-                                       if (locator_key == "id") {
-                                               var results;
-                                               var passes;
-                                               var fails;
-
-                                               var oRes = $(oTestDoc).find("table#results");
-                                               if (oRes) {
-                                                       results = $(oRes).find('tr');
-                                                       passes = $(oRes).find('tr.pass');
-                                                       fails = $(oRes).find('tr.fail');
-                                               }
-
-                                               if (passes.length + fails.length == total_num) {
-                                                       var i = 1;
-                                                       for (i = 1; i <= total_num; i++) {
-                                                               if (i.toString() != value) {
-                                                                       continue;
-                                                               }
-                                                               var rest = results[i].childNodes[0].textContent;
-                                                               var desc = results[i].childNodes[1].textContent;
-                                                               var msg = results[i].childNodes[2].textContent;
-                                                               if (rest && rest.toUpperCase() == "PASS")
-                                                                       report('PASS', msg);
-                                                               else
-                                                                       report('FAIL', msg);
-                                                               break;
-                                                       }
-                                               } else {
-                                                       var i;
-                                                       for (i = 0; i < fails.length; i++) {
-                                                               var desccell = fails[i].childNodes[1];
-                                                               if (desccell)
-                                                                       message += "\n###Test Start###\n"
-                                                                                       + desccell.textContent
-                                                                                       + "\n###Test End###\n";
-                                                               var msgcell = fails[i].childNodes[2];
-                                                               if (msgcell)
-                                                                       message += "###Error1 Start###\n"
-                                                                                       + msgcell.textContent
-                                                                                       + "\n###Error1 End###";
-                                                       }
-                                                       report('FAIL', message);
-                                               }
-                                       } else if (locator_key == "test_name") {
-                                               // Place holder
-                                       } else if (locator_key == "msg") {
-                                               // Place holder
-                                       } else {
-                                               alert("Unknown locator key");
-                                       }
-                               } else if (oPass.length > 0 && oFail.length == 0) {
-                                       if (oTestWin.resultdiv)
-                                               message = oTestWin.resultdiv.innerHTML;
-                                       report('PASS', message);
-                               } else if (oFail.length > 0) {
-                                       var oRes = $($(oTestDoc).find("table#results")).get(0);
-                                       // Get error log
-                                       if (oRes) {
-                                               var fails = $(oRes).find('tr.fail');
-                                               var i;
-                                               for (i = 0; i < fails.length; i++) {
-                                                       var desccell = fails[i].childNodes[1];
-                                                       if (desccell)
-                                                               message += "\n###Test Start###\n"
-                                                                               + desccell.textContent + "\n###Test End###\n";
-                                                       var msgcell = fails[i].childNodes[2];
-                                                       if (msgcell)
-                                                               message += "###Error2 Start###\n"
-                                                                               + msgcell.textContent
-                                                                               + "\n###Error2 End###";
-                                               }
-                                       }
-                                       report('FAIL', message);
-                               } else // oFail.length==0 && oPass.length==0
-                               if (need_check_block == 'yes') {
-                                       next_sleep_time = sleep_time + 1;
-                                       check_timeout(next_sleep_time);
-                                       return;
-                               }
-                       } else // not complete
-                       if (need_check_block == 'yes') {
-                               next_sleep_time = sleep_time + 1;
-                               check_timeout(next_sleep_time);
-                               return;
-                       }
-               } catch (e) {
-                       report('BLOCK', e);
-               }
-       }
-
-       function report(result, log) {
-
-               if (iTest >= Tests.length)
-                       return;
-               $(Tests[iTest]).attr('result', result);
-               var doc = $.parseXML("<result_info>" + "<actual_result>" + result
-                               + "</actual_result>" + "<start>" + startTime + "</start>"
-                               + "<end>" + new Date() + "</end>" + "<stdout>"
-                               + escape_html(log) + "</stdout>" + "</result_info>");
-               $(Tests[iTest]).append(doc.documentElement);
-
-               statusNode.innerHTML = "Test #" + (iTest + 1) + "/" + Tests.length
-                               + "(" + result + ") " + current_page_uri;
-
-               try {
-                       var starts = log.indexOf('value:');
-                       var stops = log.lastIndexOf(',');
-                       var resultinfo = log.substring(starts + 6, stops);
-                       $(Tests[iTest]).find("measurement").attr('value', resultinfo);
-               } catch (e) {
-               }
-
-               iTest++;
-
-               if (activetest) {
-                       doTest();
-               } else {
-                       activetest = true;
-               }
-       }
-
-       function doTest() {
-               while (iTest < Tests.length) {
-                       if ($(Tests[iTest]).attr('execution_type') != 'auto') {
-                               iTest++;
-                               continue;
-                       }
-                       var ts = $(Tests[iTest]).find('test_script_entry');
-                       if (ts.length == 0) {
-                               iTest++;
-                               continue;
-                       }
-                       var it = $(ts).get(0);
-                       var tstr = $(it).attr('timeout');
-                       if (!tstr)
-                               timeout = 8 * defTime;
-                       else {
-                               var t;
-                               try {
-                                       t = parseInt(tstr) * 1000;
-                               } catch (e) {
-                                       t = 8 * defTime;
-                               }
-                               timeout = t;
-                       }
-
-                       pset = $(Tests[iTest]).parent().attr('name');
-                       psuite = $(Tests[iTest]).parent().parent().attr('name');
-
-                       startTime = new Date();
-
-                       current_page_uri = $(it).text();
-                       var index = current_page_uri.indexOf("?");
-                       var test_page = "";
-                       if (need_ajax) {
-                               var svr = server + "/test_hint";
-                               $.ajax({
-                                       async : false,
-                                       type : "POST",
-                                       url : svr,
-                                       data : {
-                                               suite : psuite,
-                                               set : pset,
-                                               testcase : current_page_uri
-                                       },
-                                       error : function(x, t, e) {
-                                               print_error_log("doTest", e);
-                                       }
-                               });
-                       }
-                       if (index >= 0)
-                               test_page = current_page_uri.substring(0, index);
-                       else
-                               test_page = current_page_uri;
-
-                       // Don't load the same test page again
-                       if (test_page == last_test_page) {
-                               print_error_log("test page url is the same as the last one",
-                                               test_page);
-                               activetest = false;
-                               CheckResult('yes', 0);
-                               continue;
-                       }
-
-                       if ((current_page_uri.indexOf("2DTransforms") != -1)
-                                       || (current_page_uri.indexOf("3DTransforms") != -1)) {
-                               oTestFrame.height = 500000 + "px";
-                       } else {
-                               oTestFrame.height = 2500 + "px";
-                       }
-                       oTestFrame.src = current_page_uri;
-                       last_test_page = test_page;
-                       if (oTestFrame.attachEvent) {
-                               oTestFrame.attachEvent("onload", function() {
-                                       CheckResult('yes', 0);
-                               });
-                       } else {
-                               oTestFrame.onload = function() {
-                                       CheckResult('yes', 0);
-                               };
-                       }
-                       return;
-               }
-               doManualTest();
-       }
-
-       function doManualTest() {
-               manualcaseslist = new Array();
-               var iTemp1 = 0, iTemp2 = 0;
-               while (iTemp1 < Tests.length) {
-                       if ($(Tests[iTemp1]).attr('execution_type') == 'manual') {
-                               parent.document.getElementById("statusframe").height = 385 + "px";
-                               manualcaseslist[iTemp2] = new manualcases();
-                               manualcaseslist[iTemp2].casesid = $(Tests[iTemp1]).attr('id');
-                               manualcaseslist[iTemp2].index = iTemp1;
-                               manualcaseslist[iTemp2].result = $(Tests[iTemp1])
-                                               .attr('result');
-                               iTemp2++;
-                       }
-                       iTemp1++;
-               }
-               if (iTemp2 > 0) {
-                       winCloseTimeout = 50000;
-                       statusFrame.src = "./manualharness.html";
-                       $(frmset).attr('rows', "100,*");
-               } else if (iTest == Tests.length) {
-                       setTimeout("PublishResult()", 2000);
-               }
-               oTestFrame.src = '';
-       }
-
-       function PublishResult() {
-               $(frmset).attr('rows', "0, *");
-               results = oTestFrame.contentWindow;
-               var resultXML;
-               resultXML = "<title>HTML5 Test Result XML</title>";
-               resultXML += "<head> <style type='text/css'>\
-html {font-family:DejaVu Sans, Bitstream Vera Sans, Arial, Sans;}\
-section#summary {margin-bottom:1em;}\
-table#results {\
-    border-collapse:collapse;\
-    table-layout:fixed;\
-    width:80%;\
-}\
-table#results th:first-child,\
-table#results td:first-child {\
-    width:40%;\
-}\
-table#results th:last-child,\
-table#results td:last-child {\
-    width:30%;\
-}\
-table#results th {\
-    padding:0;\
-    padding-bottom:0.5em;\
-    text-align:left;\
-    border-bottom:medium solid black;\
-}\
-table#results td {\
-    padding:1em;\
-    padding-bottom:0.5em;\
-    border-bottom:thin solid black;\
-}\
-</style><head>";
-
-               resultXML += "<section id='summary'>";
-               resultXML += "<h2>Summary</h2>";
-               var ipass = $(xmldoc).find("testcase[result='PASS']").length;
-               var failList = $(xmldoc).find("testcase[result='FAIL']");
-               var ifail = failList.length;
-               resultXML += "<h3>Total:" + Tests.length
-                               + " Pass:<span style='color:green;'>" + ipass
-                               + "</span> Fail:<span style='color:red;'>" + ifail
-                               + "</span></h3>";
-               resultXML += "</section>";
-
-               resultXML += "<p><table id='results'> <tr> <th> TestSet </th> <th> Pass </th> <th> Fail </th></tr>";
-               var Sets = $(xmldoc).find("set");
-               var i = 0;
-               for (i = 0; i < Sets.length; i++) {
-                       ipass = $(Sets[i]).find("testcase[result='PASS']").length;
-                       ifail = $(Sets[i]).find("testcase[result='FAIL']").length;
-                       resultXML += "<tr>";
-                       resultXML += "<td>" + $(Sets[i]).attr('name') + "</td>";
-                       resultXML += "<td style='color:green;'>" + ipass
-                                       + "</td><td style='color:red;'>" + ifail + "</td>";
-                       resultXML += "</tr>";
-               }
-               resultXML += "</table>";
-
-               if (ifail > 0) {
-                       resultXML += "<section id='failedlist'>";
-                       resultXML += "<h2>Fails</h2>";
-                       resultXML += "<ul>";
-                       for (i = 0; i < failList.length; i++) {
-                               var ts = $(failList[i]).find("test_script_entry");
-                               if (ts.length > 0) {
-                                       var t = ts.get(0);
-                                       resultXML += "<li style='color:red;'>" + $(t).text()
-                                                       + "</li>";
-                               }
-                       }
-                       resultXML += "</ul>";
-                       resultXML += "</section>";
-               }
-
-               resultXML += "<h2>Details</h2>";
-               resultXML += "<form method='post' id='resultform'> <textarea id='results' style='width: 80%; height: 90%;' name='filecontent' disabled='disabled'>"
-                               + save_result() + "</textarea></form>";
-               setTimeout("window.open('','_self','');window.close()", winCloseTimeout);
-               results.document.writeln(resultXML);
-       }
-
-       function save_result() {
-               var svr = server + "/save_result";
-               var testid = (new Date()).getTime();
-               var contents = (new XMLSerializer()).serializeToString(xmldoc);
-               if (need_ajax) {
-                       $.ajax({
-                               async : false,
-                               type : "POST",
-                               url : svr,
-                               data : {
-                                       filename : testid,
-                                       filecontent : contents
-                               },
-                               error : function(x, t, e) {
-                                       print_error_log("doTest", e);
-                               }
-                       });
-               }
-               return contents;
-       }
-       // merge code from application.js
-       function init_test() {
-               var session_id = Math.round(Math.random() * 10000);
-               init_message_frame();
-               save_session_id(session_id);
-               sync_session_id(session_id);
-               start_test();
-       }
-
-       function init_message_frame() {
-               messageFrame = document.getElementById('messageframe');
-               messageWin = messageFrame.contentWindow;
-               messageNode = messageWin.document.getElementById('message_div');
-               if (null == messageNode) {
-                       messageNode = messageWin.document.createElement("div");
-                       messageNode.id = "message_div";
-                       messageWin.document.body.appendChild(messageNode);
-                       messageNode.innerHTML = "Message Area";
-               }
-               return messageNode;
-       }
-
-       function print_error_log(command, message) {
-               messageFrame = document.getElementById('messageframe');
-               messageFrame.height = 160 + "px";
-               messageNode = init_message_frame();
-               messageNode.innerHTML = "Message Area<div id=\"log_title\"></div><br/>Command: <div id=\"log_command\">"
-                               + command
-                               + "</div><br/>Message: <div id=\"log_message\">"
-                               + message + "</div>";
-       }
-
-       function save_session_id(session_id) {
-               statusFrame = document.getElementById('statusframe');
-               statusFrame.height = 270 + "px";
-               statusWin = statusFrame.contentWindow;
-               sessionIdNode = statusWin.document.getElementById('session_id_div');
-               if (null == sessionIdNode) {
-                       sessionIdNode = statusWin.document.createElement("div");
-                       sessionIdNode.id = "session_id_div";
-                       statusWin.document.body.appendChild(sessionIdNode);
-                       sessionIdNode.innerHTML = "Session ID: <div id=\"session_id\">"
-                                       + session_id
-                                       + "</div><br/><div id=\"execution_progress\"></div><br/>";
-               }
-       }
-
-       function sync_session_id(session_id) {
-               var server_url = server + "/init_session_id";
-               server_url += "?session_id=" + session_id;
-               $.ajax({
-                       async : false,
-                       url : server_url,
-                       type : "GET",
-                       error : function(x, t, e) {
-                               print_error_log("sync_session_id", e);
-                       }
-               });
-       }
-
-       function get_session_id() {
-               statusFrame = document.getElementById('statusframe');
-               statusWin = statusFrame.contentWindow;
-               sessionIdNode = statusWin.document.getElementById('session_id');
-               return sessionIdNode.innerHTML;
-       }
-
-       function close_window(){
-               //for tct-webgl-nonw3c-tests run by tizen-tool emulator html,window.parent.close() no function,must call window.close, why?
-               if(window.parent != window.self){
-                       window.open('','_self','');
-                       window.close();
-                       window.parent.onbeforeunload = null;
-                       window.parent.close();
-               }
-               else{
-                       window.open('','_self','');
-                       window.close();
-               }
-       }
-       function start_test() {
-               try {
-                       var task = ask_test_task();
-               } catch (e) {
-                       print_error_log("start_test_ask_test_task", e);
-               }
-               try {
-                       if (task == 1) {
-                               print_error_log("start_test_execute_test_task",
-                                               "Invalid session");
-                       } else if (task == -1) {
-                               print_error_log("restart client process activated",
-                                               "this window will be closed in 2sec");
-                               close_window();
-                               //setTimeout("window.open('','_self','');window.close()", 2000);
-                       } else if (task == null) {
-                               print_error_log(
-                                               "get auto case failed, client will be restarted later",
-                                               "this window will be closed in 2sec");
-                               close_window();
-                               //setTimeout("window.open('','_self','');window.close()", 2000);
-                       } else if (task != 0) {
-                               var progress = check_execution_progress();
-                               execute_test_task(task, progress);
-                       } else {
-                               execute_manual_test();
-                       }
-               } catch (e) {
-                       print_error_log("start_test_execute_test_task", e);
-               }
-       }
-
-       function ask_generate_xml() {
-               var server_url = server + "/generate_xml";
-               $.ajax({
-                       async : false,
-                       url : server_url,
-                       type : "GET",
-                       error : function(x, t, e) {
-                               print_error_log("ask_generate_xml", e);
-                       }
-               });
-               close_window();
-               //setTimeout("window.open('','_self','');window.close()", winCloseTimeout);
-       }
-
-       function extract_all_manual() {
-               var server_url = server + "/manual_cases";
-               var tasks = null;
-               $.ajax({
-                       async : false,
-                       url : server_url,
-                       type : "GET",
-                       dataType : "text",
-                       success : function(txt) {
-                               task = $.parseJSON(txt);
-                               if (0 == task.none) {
-                                       task = null;
-                               }
-                       },
-                       error : function(x, t, e) {
-                               print_error_log("extract_all_manual", e);
-                       }
-               });
-               return task;
-       }
-
-       function ask_test_task() {
-               var server_url = server + "/auto_test_task";
-               var task = null;
-               session_id = get_session_id();
-               server_url += "?session_id=" + session_id;
-               $.ajax({
-                       async : false,
-                       url : server_url,
-                       type : "GET",
-                       dataType : "text",
-                       success : function(txt) {
-                               task = $.parseJSON(txt);
-                               if (task.none == 0) {
-                                       task = 0;
-                               }
-                               if (task.invalid == 0) {
-                                       task = 1;
-                               }
-                               if (task.stop == 0) {
-                                       task = -1;
-                               }
-                       },
-                       error : function(x, t, e) {
-                               print_error_log("ask_test_task", e);
-                       }
-               });
-               return task;
-       }
-
-       function check_execution_progress() {
-               var server_url = server + "/check_execution_progress";
-               var progress = null;
-               session_id = get_session_id();
-               server_url += "?session_id=" + session_id;
-               $.ajax({
-                       async : false,
-                       url : server_url,
-                       type : "GET",
-                       dataType : "text",
-                       success : function(txt) {
-                               progress = $.parseJSON(txt);
-                       },
-                       error : function(x, t, e) {
-                               print_error_log("check_execution_progress", e);
-                       }
-               });
-               return progress;
-       }
-
-       function ask_next_step() {
-               var server_url = server + "/ask_next_step";
-               var next_step = null;
-               session_id = get_session_id();
-               server_url += "?session_id=" + session_id;
-               $.ajax({
-                       async : false,
-                       url : server_url,
-                       type : "GET",
-                       dataType : "text",
-                       success : function(txt) {
-                               next_step = $.parseJSON(txt);
-                       },
-                       error : function(x, t, e) {
-                               print_error_log("ask_next_step", e);
-                       }
-               });
-               return next_step;
-       }
-
-       function init_status_frame() {
-               statusFrame = document.getElementById('statusframe');
-               statusWin = statusFrame.contentWindow;
-               statusNode = statusWin.document.getElementById('status_div');
-               if (null == statusNode) {
-                       statusNode = statusWin.document.createElement("div");
-                       statusNode.id = "status_div";
-                       statusWin.document.body.appendChild(statusNode);
-               }
-               return statusNode;
-       }
-
-       function execute_test_task(json_task, json_progress) {
-               try {
-                       oTestFrame = document.getElementById('testframe');
-                       statusNode = init_status_frame();
-                       // update execution progress
-                       statusFrame = document.getElementById('statusframe');
-                       statusWin = statusFrame.contentWindow;
-                       progressNode = statusWin.document
-                                       .getElementById('execution_progress');
-                       progressNode.innerHTML = "Total:" + json_progress.total
-                                       + ", Current:" + json_progress.current;
-                       // update case info
-                       statusNode.innerHTML = "Test Purpose:<div id=\"test_purpose_div\">"
-                                       + json_task.purpose
-                                       + "</div><br/>Test Entry:<div id=\"test_entry_div\">"
-                                       + json_task.entry
-                                       + "</div><br/>Last Test Result:<div id=\"test_result_div\">"
-                                       + json_progress.last_test_result + "</div>";
-                       current_page_uri = json_task.entry;
-                       case_id_str = json_task.case_id;
-                       var index = current_page_uri.indexOf("?");
-                       var test_page = "";
-                       if (index >= 0)
-                               test_page = current_page_uri.substring(0, index);
-                       else
-                               test_page = current_page_uri;
-                       // Get how many times to check BLOCK result
-                       if (json_task.onload_delay) {
-                               calculate_block_check_time(parseInt(json_task.onload_delay) * 1000);
-                       } else {
-                               print_error_log("execute_test_task",
-                                               "can't get attribute onload_delay from task: "
-                                                               + json_task.purpose);
-                       }
-                       // Don't load the same test page again
-                       if (test_page == last_test_page) {
-                               print_error_log("test page url is the same as the last one",
-                                               test_page);
-                               extract_case_result('yes', 0);
-                               return;
-                       }
-                       if ((current_page_uri.indexOf("2DTransforms") != -1)
-                                       || (current_page_uri.indexOf("3DTransforms") != -1)) {
-                               oTestFrame.height = 500000 + "px";
-                       } else {
-                               oTestFrame.height = 2500 + "px";
-                       }
-                       oTestFrame.src = current_page_uri;
-                       last_test_page = test_page;
-                       if (oTestFrame.attachEvent) {
-                               oTestFrame.attachEvent("onload", function() {
-                                       extract_case_result('yes', 0);
-                               });
-                       } else {
-                               oTestFrame.onload = function() {
-                                       extract_case_result('yes', 0);
-                               };
-                       }
-               } catch (e) {
-                       print_error_log("execute_test_task", e);
-               }
-       }
-
-       function calculate_block_check_time(onload_delay) {
-               blockCheckTime = Math.ceil((Math.sqrt(onload_delay * 4 + 25) - 5) / 10);
-       }
-
-       function check_block_result_again(time) {
-               sleep_time = time * 50;
-               if (time == blockCheckTime) {
-                       setTimeout("extract_case_result('no', " + time + ")", sleep_time);
-                       return;
-               }
-               setTimeout("extract_case_result('yes', " + time + ")", sleep_time);
-       }
-
-       function extract_case_result(need_check_block, sleep_time) {
-               oTestFrame = document.getElementById('testframe');
-               var oTestWin = oTestFrame.contentWindow;
-               var oTestDoc = oTestFrame.contentWindow.document;
-               var result = "BLOCK";
-               var case_msg = "";
-
-               oPass = $(oTestDoc).find(".pass");
-               oFail = $(oTestDoc).find(".fail");
-               case_uri = current_page_uri;
-
-               total_num = getTestPageParam(case_uri, "total_num");
-               locator_key = getTestPageParam(case_uri, "locator_key");
-               value = getTestPageParam(case_uri, "value");
-
-               if (total_num != "" && locator_key != "" && value != "") {
-                       if (locator_key == "id") {
-                               var results;
-                               var passes;
-                               var fails;
-
-                               var oRes = $(oTestDoc).find("table#results");
-                               if (oRes) {
-                                       results = $(oRes).find('tr');
-                                       passes = $(oRes).find('tr.pass');
-                                       fails = $(oRes).find('tr.fail');
-                               }
-                               if (passes.length + fails.length == total_num) {
-                                       var i = 1;
-                                       for (i = 1; i <= total_num; i++) {
-                                               if (i.toString() != value) {
-                                                       continue;
-                                               }
-                                               var rest = results[i].childNodes[0].textContent;
-                                               var desc = results[i].childNodes[1].textContent;
-                                               case_msg = results[i].childNodes[2].textContent;                                        
-                                               if (rest && rest.toUpperCase() == "PASS") {
-                                                       result = "PASS";
-                                               } else {
-                                                       result = "FAIL";
-                                               }
-                                               break;
-                                       }
-                               } else {
-                                       if (need_check_block == 'yes') {
-                                               next_sleep_time = sleep_time + 1;
-                                               check_block_result_again(next_sleep_time);
-                                               return;
-                                       }
-                                       else{
-                                               var i;
-                                               for (i = 0; i < fails.length; i++) {
-                                                       var desccell = fails[i].childNodes[1];
-                                                       if (desccell) {
-                                                               case_msg += "\n###Test Start###\n" + desccell.textContent
-                                                                               + "\n###Test End###\n";
-                                                       }
-                                                       var msgcell = fails[i].childNodes[2];
-                                                       if (msgcell) {
-                                                               case_msg += "###Error1 Start###\n"
-                                                                               + msgcell.textContent + "\n###Error1 End###";
-                                                       }
-                                               }
-                                               result = "FAIL";
-                                       }
-
-                               }
-                       }
-               } else if (oPass.length > 0 && oFail.length == 0) {
-                       if (oTestWin.resultdiv) {
-                               case_msg = oTestWin.resultdiv.innerHTML;
-                       }
-                       result = "PASS";
-               } else if (oFail.length > 0) {
-                       var oRes = $($(oTestDoc).find("table#results")).get(0);
-                       // Get error log
-                       if (oRes) {
-                               var fails = $(oRes).find('tr.fail');
-                               var i;
-                               for (i = 0; i < fails.length; i++) {
-                                       var desccell = fails[i].childNodes[1];
-                                       if (desccell) {
-                                               case_msg += "\n###Test Start###\n" + desccell.textContent
-                                                               + "\n###Test End###\n";
-                                       }
-                                       var msgcell = fails[i].childNodes[2];
-                                       if (msgcell) {
-                                               case_msg += "###Error2 Start###\n" + msgcell.textContent
-                                                               + "\n###Error2 End###";                                         
-                                       }
-                               }
-                       }
-                       result = "FAIL";
-               } else {
-                       if (need_check_block == 'yes') {
-                               next_sleep_time = sleep_time + 1;
-                               check_block_result_again(next_sleep_time);
-                               return;
-                       }
-               }
-               var next_step = ask_next_step();
-               commit_test_result(result, case_msg);
-               if (next_step.step == "continue") {
-                       start_test();
-               } else {
-                       print_error_log("memory collection process activated",
-                                       "this window will be closed in 2sec");
-                       close_window();
-                       //setTimeout("window.open('','_self','');window.close()", 2000);
-               }
-       }
-
-       var manual_test_step = function() {
-               this.order = 0;
-               this.desc = "";
-               this.expected = "";
-       };
-
-       var manual_cases = function() {
-               this.casesid = "";
-               this.index = 0;
-               this.result = "";
-               this.entry = "";
-               this.pre_con = "";
-               this.post_con = "";
-               this.purpose = "";
-               this.steps = new Array();
-       };
-
-       function execute_manual_test() {
-               manualcaseslist = new Array();
-               tasks = extract_all_manual();
-               if (tasks != null){
-                       for ( var i = 0; i < tasks.length; i++) {
-                               if (parent.document.getElementById("statusframe"))
-                                       parent.document.getElementById("statusframe").height = 385 + "px";
-                               manualcaseslist[i] = new manual_cases();
-                               manualcaseslist[i].casesid = tasks[i].case_id;
-                               manualcaseslist[i].index = i;
-                               manualcaseslist[i].entry = tasks[i].entry;
-                               manualcaseslist[i].pre_con = tasks[i].pre_condition;
-                               manualcaseslist[i].post_con = tasks[i].post_condition;
-                               manualcaseslist[i].purpose = tasks[i].purpose;
-
-                               if (tasks[i].steps != undefined) {
-                                       for ( var j = 0; j < tasks[i].steps.length; j++) {
-                                               this_manual_step = new manual_test_step();
-                                               this_manual_step.order = parseInt(tasks[i].steps[j].order);
-                                               this_manual_step.desc = tasks[i].steps[j].step_desc;
-                                               this_manual_step.expected = tasks[i].steps[j].expected;
-                                               manualcaseslist[i].steps[this_manual_step.order - 1] = this_manual_step;
-                                       }
-                               }
-                       }
-                       if (tasks.length > 0) {
-                               statusFrame.src = "./manual_harness.html";
-                               $($($('#main')).get(0)).attr('rows', "100,*");
-                       }
-                       oTestFrame = document.getElementById('testframe');
-                       oTestFrame.src = '';
-               }
-               else {
-                       // No manual cases, generate the result.
-                       ask_generate_xml();
-               }
-       }
-
-       function commit_test_result(result, msg) {
-               statusFrame = document.getElementById('statusframe');
-               purposeNode = statusWin.document.getElementById('test_purpose_div');
-               session_id = get_session_id();
-               var purpose_str = purposeNode.innerHTML
-               var server_url = server + "/commit_result";
-               $.ajax({
-                       async : false,
-                       url : server_url,
-                       type : "POST",
-                       data : {
-                               "case_id" : case_id_str,
-                               "purpose" : purpose_str,
-                               "result" : result,
-                               "msg" : "[Message]" + msg,
-                               "session_id" : session_id
-                       },
-                       dataType : "json",
-                       beforeSend : function(x) {
-                               if (x && x.overrideMimeType) {
-                                       x.overrideMimeType("application/j-son;charset=UTF-8");
-                               }
-                       },
-                       error : function(x, t, e) {
-                               print_error_log("commit_test_result", e);
-                       }
-               });
-       }
-</script>
-</head>
-<body id="main" onload='precheck_init()'>
-       <iframe frameborder="1" height="30px" width="100%" id="messageframe"></iframe>
-       <iframe frameborder="1" height="30px" width="100%" id="statusframe"></iframe>
-       <iframe frameborder="1" height="2500px" width="100%" id="testframe" allowFullScreen="true" mozAllowFullScreen="true" webkitAllowFullscreen="true"></iframe>
-</body>
-</html>
diff --git a/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite1.0/web/jquery.js b/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite1.0/web/jquery.js
deleted file mode 100755 (executable)
index eda55db..0000000
+++ /dev/null
@@ -1,9300 +0,0 @@
-/*!
- * jQuery JavaScript Library v1.7
- * http://jquery.com/
- *
- * Copyright 2011, John Resig
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * Includes Sizzle.js
- * http://sizzlejs.com/
- * Copyright 2011, The Dojo Foundation
- * Released under the MIT, BSD, and GPL Licenses.
- *
- * Date: Thu Nov 3 16:18:21 2011 -0400
- */
-(function( window, undefined ) {
-
-// Use the correct document accordingly with window argument (sandbox)
-var document = window.document,
-       navigator = window.navigator,
-       location = window.location;
-var jQuery = (function() {
-
-// Define a local copy of jQuery
-var jQuery = function( selector, context ) {
-               // The jQuery object is actually just the init constructor 'enhanced'
-               return new jQuery.fn.init( selector, context, rootjQuery );
-       },
-
-       // Map over jQuery in case of overwrite
-       _jQuery = window.jQuery,
-
-       // Map over the $ in case of overwrite
-       _$ = window.$,
-
-       // A central reference to the root jQuery(document)
-       rootjQuery,
-
-       // A simple way to check for HTML strings or ID strings
-       // Prioritize #id over <tag> to avoid XSS via location.hash (#9521)
-       quickExpr = /^(?:[^#<]*(<[\w\W]+>)[^>]*$|#([\w\-]*)$)/,
-
-       // Check if a string has a non-whitespace character in it
-       rnotwhite = /\S/,
-
-       // Used for trimming whitespace
-       trimLeft = /^\s+/,
-       trimRight = /\s+$/,
-
-       // Check for digits
-       rdigit = /\d/,
-
-       // Match a standalone tag
-       rsingleTag = /^<(\w+)\s*\/?>(?:<\/\1>)?$/,
-
-       // JSON RegExp
-       rvalidchars = /^[\],:{}\s]*$/,
-       rvalidescape = /\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,
-       rvalidtokens = /"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,
-       rvalidbraces = /(?:^|:|,)(?:\s*\[)+/g,
-
-       // Useragent RegExp
-       rwebkit = /(webkit)[ \/]([\w.]+)/,
-       ropera = /(opera)(?:.*version)?[ \/]([\w.]+)/,
-       rmsie = /(msie) ([\w.]+)/,
-       rmozilla = /(mozilla)(?:.*? rv:([\w.]+))?/,
-
-       // Matches dashed string for camelizing
-       rdashAlpha = /-([a-z]|[0-9])/ig,
-       rmsPrefix = /^-ms-/,
-
-       // Used by jQuery.camelCase as callback to replace()
-       fcamelCase = function( all, letter ) {
-               return ( letter + "" ).toUpperCase();
-       },
-
-       // Keep a UserAgent string for use with jQuery.browser
-       userAgent = navigator.userAgent,
-
-       // For matching the engine and version of the browser
-       browserMatch,
-
-       // The deferred used on DOM ready
-       readyList,
-
-       // The ready event handler
-       DOMContentLoaded,
-
-       // Save a reference to some core methods
-       toString = Object.prototype.toString,
-       hasOwn = Object.prototype.hasOwnProperty,
-       push = Array.prototype.push,
-       slice = Array.prototype.slice,
-       trim = String.prototype.trim,
-       indexOf = Array.prototype.indexOf,
-
-       // [[Class]] -> type pairs
-       class2type = {};
-
-jQuery.fn = jQuery.prototype = {
-       constructor: jQuery,
-       init: function( selector, context, rootjQuery ) {
-               var match, elem, ret, doc;
-
-               // Handle $(""), $(null), or $(undefined)
-               if ( !selector ) {
-                       return this;
-               }
-
-               // Handle $(DOMElement)
-               if ( selector.nodeType ) {
-                       this.context = this[0] = selector;
-                       this.length = 1;
-                       return this;
-               }
-
-               // The body element only exists once, optimize finding it
-               if ( selector === "body" && !context && document.body ) {
-                       this.context = document;
-                       this[0] = document.body;
-                       this.selector = selector;
-                       this.length = 1;
-                       return this;
-               }
-
-               // Handle HTML strings
-               if ( typeof selector === "string" ) {
-                       // Are we dealing with HTML string or an ID?
-                       if ( selector.charAt(0) === "<" && selector.charAt( selector.length - 1 ) === ">" && selector.length >= 3 ) {
-                               // Assume that strings that start and end with <> are HTML and skip the regex check
-                               match = [ null, selector, null ];
-
-                       } else {
-                               match = quickExpr.exec( selector );
-                       }
-
-                       // Verify a match, and that no context was specified for #id
-                       if ( match && (match[1] || !context) ) {
-
-                               // HANDLE: $(html) -> $(array)
-                               if ( match[1] ) {
-                                       context = context instanceof jQuery ? context[0] : context;
-                                       doc = ( context ? context.ownerDocument || context : document );
-
-                                       // If a single string is passed in and it's a single tag
-                                       // just do a createElement and skip the rest
-                                       ret = rsingleTag.exec( selector );
-
-                                       if ( ret ) {
-                                               if ( jQuery.isPlainObject( context ) ) {
-                                                       selector = [ document.createElement( ret[1] ) ];
-                                                       jQuery.fn.attr.call( selector, context, true );
-
-                                               } else {
-                                                       selector = [ doc.createElement( ret[1] ) ];
-                                               }
-
-                                       } else {
-                                               ret = jQuery.buildFragment( [ match[1] ], [ doc ] );
-                                               selector = ( ret.cacheable ? jQuery.clone(ret.fragment) : ret.fragment ).childNodes;
-                                       }
-
-                                       return jQuery.merge( this, selector );
-
-                               // HANDLE: $("#id")
-                               } else {
-                                       elem = document.getElementById( match[2] );
-
-                                       // Check parentNode to catch when Blackberry 4.6 returns
-                                       // nodes that are no longer in the document #6963
-                                       if ( elem && elem.parentNode ) {
-                                               // Handle the case where IE and Opera return items
-                                               // by name instead of ID
-                                               if ( elem.id !== match[2] ) {
-                                                       return rootjQuery.find( selector );
-                                               }
-
-                                               // Otherwise, we inject the element directly into the jQuery object
-                                               this.length = 1;
-                                               this[0] = elem;
-                                       }
-
-                                       this.context = document;
-                                       this.selector = selector;
-                                       return this;
-                               }
-
-                       // HANDLE: $(expr, $(...))
-                       } else if ( !context || context.jquery ) {
-                               return ( context || rootjQuery ).find( selector );
-
-                       // HANDLE: $(expr, context)
-                       // (which is just equivalent to: $(context).find(expr)
-                       } else {
-                               return this.constructor( context ).find( selector );
-                       }
-
-               // HANDLE: $(function)
-               // Shortcut for document ready
-               } else if ( jQuery.isFunction( selector ) ) {
-                       return rootjQuery.ready( selector );
-               }
-
-               if ( selector.selector !== undefined ) {
-                       this.selector = selector.selector;
-                       this.context = selector.context;
-               }
-
-               return jQuery.makeArray( selector, this );
-       },
-
-       // Start with an empty selector
-       selector: "",
-
-       // The current version of jQuery being used
-       jquery: "1.7",
-
-       // The default length of a jQuery object is 0
-       length: 0,
-
-       // The number of elements contained in the matched element set
-       size: function() {
-               return this.length;
-       },
-
-       toArray: function() {
-               return slice.call( this, 0 );
-       },
-
-       // Get the Nth element in the matched element set OR
-       // Get the whole matched element set as a clean array
-       get: function( num ) {
-               return num == null ?
-
-                       // Return a 'clean' array
-                       this.toArray() :
-
-                       // Return just the object
-                       ( num < 0 ? this[ this.length + num ] : this[ num ] );
-       },
-
-       // Take an array of elements and push it onto the stack
-       // (returning the new matched element set)
-       pushStack: function( elems, name, selector ) {
-               // Build a new jQuery matched element set
-               var ret = this.constructor();
-
-               if ( jQuery.isArray( elems ) ) {
-                       push.apply( ret, elems );
-
-               } else {
-                       jQuery.merge( ret, elems );
-               }
-
-               // Add the old object onto the stack (as a reference)
-               ret.prevObject = this;
-
-               ret.context = this.context;
-
-               if ( name === "find" ) {
-                       ret.selector = this.selector + ( this.selector ? " " : "" ) + selector;
-               } else if ( name ) {
-                       ret.selector = this.selector + "." + name + "(" + selector + ")";
-               }
-
-               // Return the newly-formed element set
-               return ret;
-       },
-
-       // Execute a callback for every element in the matched set.
-       // (You can seed the arguments with an array of args, but this is
-       // only used internally.)
-       each: function( callback, args ) {
-               return jQuery.each( this, callback, args );
-       },
-
-       ready: function( fn ) {
-               // Attach the listeners
-               jQuery.bindReady();
-
-               // Add the callback
-               readyList.add( fn );
-
-               return this;
-       },
-
-       eq: function( i ) {
-               return i === -1 ?
-                       this.slice( i ) :
-                       this.slice( i, +i + 1 );
-       },
-
-       first: function() {
-               return this.eq( 0 );
-       },
-
-       last: function() {
-               return this.eq( -1 );
-       },
-
-       slice: function() {
-               return this.pushStack( slice.apply( this, arguments ),
-                       "slice", slice.call(arguments).join(",") );
-       },
-
-       map: function( callback ) {
-               return this.pushStack( jQuery.map(this, function( elem, i ) {
-                       return callback.call( elem, i, elem );
-               }));
-       },
-
-       end: function() {
-               return this.prevObject || this.constructor(null);
-       },
-
-       // For internal use only.
-       // Behaves like an Array's method, not like a jQuery method.
-       push: push,
-       sort: [].sort,
-       splice: [].splice
-};
-
-// Give the init function the jQuery prototype for later instantiation
-jQuery.fn.init.prototype = jQuery.fn;
-
-jQuery.extend = jQuery.fn.extend = function() {
-       var options, name, src, copy, copyIsArray, clone,
-               target = arguments[0] || {},
-               i = 1,
-               length = arguments.length,
-               deep = false;
-
-       // Handle a deep copy situation
-       if ( typeof target === "boolean" ) {
-               deep = target;
-               target = arguments[1] || {};
-               // skip the boolean and the target
-               i = 2;
-       }
-
-       // Handle case when target is a string or something (possible in deep copy)
-       if ( typeof target !== "object" && !jQuery.isFunction(target) ) {
-               target = {};
-       }
-
-       // extend jQuery itself if only one argument is passed
-       if ( length === i ) {
-               target = this;
-               --i;
-       }
-
-       for ( ; i < length; i++ ) {
-               // Only deal with non-null/undefined values
-               if ( (options = arguments[ i ]) != null ) {
-                       // Extend the base object
-                       for ( name in options ) {
-                               src = target[ name ];
-                               copy = options[ name ];
-
-                               // Prevent never-ending loop
-                               if ( target === copy ) {
-                                       continue;
-                               }
-
-                               // Recurse if we're merging plain objects or arrays
-                               if ( deep && copy && ( jQuery.isPlainObject(copy) || (copyIsArray = jQuery.isArray(copy)) ) ) {
-                                       if ( copyIsArray ) {
-                                               copyIsArray = false;
-                                               clone = src && jQuery.isArray(src) ? src : [];
-
-                                       } else {
-                                               clone = src && jQuery.isPlainObject(src) ? src : {};
-                                       }
-
-                                       // Never move original objects, clone them
-                                       target[ name ] = jQuery.extend( deep, clone, copy );
-
-                               // Don't bring in undefined values
-                               } else if ( copy !== undefined ) {
-                                       target[ name ] = copy;
-                               }
-                       }
-               }
-       }
-
-       // Return the modified object
-       return target;
-};
-
-jQuery.extend({
-       noConflict: function( deep ) {
-               if ( window.$ === jQuery ) {
-                       window.$ = _$;
-               }
-
-               if ( deep && window.jQuery === jQuery ) {
-                       window.jQuery = _jQuery;
-               }
-
-               return jQuery;
-       },
-
-       // Is the DOM ready to be used? Set to true once it occurs.
-       isReady: false,
-
-       // A counter to track how many items to wait for before
-       // the ready event fires. See #6781
-       readyWait: 1,
-
-       // Hold (or release) the ready event
-       holdReady: function( hold ) {
-               if ( hold ) {
-                       jQuery.readyWait++;
-               } else {
-                       jQuery.ready( true );
-               }
-       },
-
-       // Handle when the DOM is ready
-       ready: function( wait ) {
-               // Either a released hold or an DOMready/load event and not yet ready
-               if ( (wait === true && !--jQuery.readyWait) || (wait !== true && !jQuery.isReady) ) {
-                       // Make sure body exists, at least, in case IE gets a little overzealous (ticket #5443).
-                       if ( !document.body ) {
-                               return setTimeout( jQuery.ready, 1 );
-                       }
-
-                       // Remember that the DOM is ready
-                       jQuery.isReady = true;
-
-                       // If a normal DOM Ready event fired, decrement, and wait if need be
-                       if ( wait !== true && --jQuery.readyWait > 0 ) {
-                               return;
-                       }
-
-                       // If there are functions bound, to execute
-                       readyList.fireWith( document, [ jQuery ] );
-
-                       // Trigger any bound ready events
-                       if ( jQuery.fn.trigger ) {
-                               jQuery( document ).trigger( "ready" ).unbind( "ready" );
-                       }
-               }
-       },
-
-       bindReady: function() {
-               if ( readyList ) {
-                       return;
-               }
-
-               readyList = jQuery.Callbacks( "once memory" );
-
-               // Catch cases where $(document).ready() is called after the
-               // browser event has already occurred.
-               if ( document.readyState === "complete" ) {
-                       // Handle it asynchronously to allow scripts the opportunity to delay ready
-                       return setTimeout( jQuery.ready, 1 );
-               }
-
-               // Mozilla, Opera and webkit nightlies currently support this event
-               if ( document.addEventListener ) {
-                       // Use the handy event callback
-                       document.addEventListener( "DOMContentLoaded", DOMContentLoaded, false );
-
-                       // A fallback to window.onload, that will always work
-                       window.addEventListener( "load", jQuery.ready, false );
-
-               // If IE event model is used
-               } else if ( document.attachEvent ) {
-                       // ensure firing before onload,
-                       // maybe late but safe also for iframes
-                       document.attachEvent( "onreadystatechange", DOMContentLoaded );
-
-                       // A fallback to window.onload, that will always work
-                       window.attachEvent( "onload", jQuery.ready );
-
-                       // If IE and not a frame
-                       // continually check to see if the document is ready
-                       var toplevel = false;
-
-                       try {
-                               toplevel = window.frameElement == null;
-                       } catch(e) {}
-
-                       if ( document.documentElement.doScroll && toplevel ) {
-                               doScrollCheck();
-                       }
-               }
-       },
-
-       // See test/unit/core.js for details concerning isFunction.
-       // Since version 1.3, DOM methods and functions like alert
-       // aren't supported. They return false on IE (#2968).
-       isFunction: function( obj ) {
-               return jQuery.type(obj) === "function";
-       },
-
-       isArray: Array.isArray || function( obj ) {
-               return jQuery.type(obj) === "array";
-       },
-
-       // A crude way of determining if an object is a window
-       isWindow: function( obj ) {
-               return obj && typeof obj === "object" && "setInterval" in obj;
-       },
-
-       isNumeric: function( obj ) {
-               return obj != null && rdigit.test( obj ) && !isNaN( obj );
-       },
-
-       type: function( obj ) {
-               return obj == null ?
-                       String( obj ) :
-                       class2type[ toString.call(obj) ] || "object";
-       },
-
-       isPlainObject: function( obj ) {
-               // Must be an Object.
-               // Because of IE, we also have to check the presence of the constructor property.
-               // Make sure that DOM nodes and window objects don't pass through, as well
-               if ( !obj || jQuery.type(obj) !== "object" || obj.nodeType || jQuery.isWindow( obj ) ) {
-                       return false;
-               }
-
-               try {
-                       // Not own constructor property must be Object
-                       if ( obj.constructor &&
-                               !hasOwn.call(obj, "constructor") &&
-                               !hasOwn.call(obj.constructor.prototype, "isPrototypeOf") ) {
-                               return false;
-                       }
-               } catch ( e ) {
-                       // IE8,9 Will throw exceptions on certain host objects #9897
-                       return false;
-               }
-
-               // Own properties are enumerated firstly, so to speed up,
-               // if last one is own, then all properties are own.
-
-               var key;
-               for ( key in obj ) {}
-
-               return key === undefined || hasOwn.call( obj, key );
-       },
-
-       isEmptyObject: function( obj ) {
-               for ( var name in obj ) {
-                       return false;
-               }
-               return true;
-       },
-
-       error: function( msg ) {
-               throw msg;
-       },
-
-       parseJSON: function( data ) {
-               if ( typeof data !== "string" || !data ) {
-                       return null;
-               }
-
-               // Make sure leading/trailing whitespace is removed (IE can't handle it)
-               data = jQuery.trim( data );
-
-               // Attempt to parse using the native JSON parser first
-               if ( window.JSON && window.JSON.parse ) {
-                       return window.JSON.parse( data );
-               }
-
-               // Make sure the incoming data is actual JSON
-               // Logic borrowed from http://json.org/json2.js
-               if ( rvalidchars.test( data.replace( rvalidescape, "@" )
-                       .replace( rvalidtokens, "]" )
-                       .replace( rvalidbraces, "")) ) {
-
-                       return ( new Function( "return " + data ) )();
-
-               }
-               jQuery.error( "Invalid JSON: " + data );
-       },
-
-       // Cross-browser xml parsing
-       parseXML: function( data ) {
-               var xml, tmp;
-               try {
-                       if ( window.DOMParser ) { // Standard
-                               tmp = new DOMParser();
-                               xml = tmp.parseFromString( data , "text/xml" );
-                       } else { // IE
-                               xml = new ActiveXObject( "Microsoft.XMLDOM" );
-                               xml.async = "false";
-                               xml.loadXML( data );
-                       }
-               } catch( e ) {
-                       xml = undefined;
-               }
-               if ( !xml || !xml.documentElement || xml.getElementsByTagName( "parsererror" ).length ) {
-                       jQuery.error( "Invalid XML: " + data );
-               }
-               return xml;
-       },
-
-       noop: function() {},
-
-       // Evaluates a script in a global context
-       // Workarounds based on findings by Jim Driscoll
-       // http://weblogs.java.net/blog/driscoll/archive/2009/09/08/eval-javascript-global-context
-       globalEval: function( data ) {
-               if ( data && rnotwhite.test( data ) ) {
-                       // We use execScript on Internet Explorer
-                       // We use an anonymous function so that context is window
-                       // rather than jQuery in Firefox
-                       ( window.execScript || function( data ) {
-                               window[ "eval" ].call( window, data );
-                       } )( data );
-               }
-       },
-
-       // Convert dashed to camelCase; used by the css and data modules
-       // Microsoft forgot to hump their vendor prefix (#9572)
-       camelCase: function( string ) {
-               return string.replace( rmsPrefix, "ms-" ).replace( rdashAlpha, fcamelCase );
-       },
-
-       nodeName: function( elem, name ) {
-               return elem.nodeName && elem.nodeName.toUpperCase() === name.toUpperCase();
-       },
-
-       // args is for internal usage only
-       each: function( object, callback, args ) {
-               var name, i = 0,
-                       length = object.length,
-                       isObj = length === undefined || jQuery.isFunction( object );
-
-               if ( args ) {
-                       if ( isObj ) {
-                               for ( name in object ) {
-                                       if ( callback.apply( object[ name ], args ) === false ) {
-                                               break;
-                                       }
-                               }
-                       } else {
-                               for ( ; i < length; ) {
-                                       if ( callback.apply( object[ i++ ], args ) === false ) {
-                                               break;
-                                       }
-                               }
-                       }
-
-               // A special, fast, case for the most common use of each
-               } else {
-                       if ( isObj ) {
-                               for ( name in object ) {
-                                       if ( callback.call( object[ name ], name, object[ name ] ) === false ) {
-                                               break;
-                                       }
-                               }
-                       } else {
-                               for ( ; i < length; ) {
-                                       if ( callback.call( object[ i ], i, object[ i++ ] ) === false ) {
-                                               break;
-                                       }
-                               }
-                       }
-               }
-
-               return object;
-       },
-
-       // Use native String.trim function wherever possible
-       trim: trim ?
-               function( text ) {
-                       return text == null ?
-                               "" :
-                               trim.call( text );
-               } :
-
-               // Otherwise use our own trimming functionality
-               function( text ) {
-                       return text == null ?
-                               "" :
-                               text.toString().replace( trimLeft, "" ).replace( trimRight, "" );
-               },
-
-       // results is for internal usage only
-       makeArray: function( array, results ) {
-               var ret = results || [];
-
-               if ( array != null ) {
-                       // The window, strings (and functions) also have 'length'
-                       // The extra typeof function check is to prevent crashes
-                       // in Safari 2 (See: #3039)
-                       // Tweaked logic slightly to handle Blackberry 4.7 RegExp issues #6930
-                       var type = jQuery.type( array );
-
-                       if ( array.length == null || type === "string" || type === "function" || type === "regexp" || jQuery.isWindow( array ) ) {
-                               push.call( ret, array );
-                       } else {
-                               jQuery.merge( ret, array );
-                       }
-               }
-
-               return ret;
-       },
-
-       inArray: function( elem, array, i ) {
-               var len;
-
-               if ( array ) {
-                       if ( indexOf ) {
-                               return indexOf.call( array, elem, i );
-                       }
-
-                       len = array.length;
-                       i = i ? i < 0 ? Math.max( 0, len + i ) : i : 0;
-
-                       for ( ; i < len; i++ ) {
-                               // Skip accessing in sparse arrays
-                               if ( i in array && array[ i ] === elem ) {
-                                       return i;
-                               }
-                       }
-               }
-
-               return -1;
-       },
-
-       merge: function( first, second ) {
-               var i = first.length,
-                       j = 0;
-
-               if ( typeof second.length === "number" ) {
-                       for ( var l = second.length; j < l; j++ ) {
-                               first[ i++ ] = second[ j ];
-                       }
-
-               } else {
-                       while ( second[j] !== undefined ) {
-                               first[ i++ ] = second[ j++ ];
-                       }
-               }
-
-               first.length = i;
-
-               return first;
-       },
-
-       grep: function( elems, callback, inv ) {
-               var ret = [], retVal;
-               inv = !!inv;
-
-               // Go through the array, only saving the items
-               // that pass the validator function
-               for ( var i = 0, length = elems.length; i < length; i++ ) {
-                       retVal = !!callback( elems[ i ], i );
-                       if ( inv !== retVal ) {
-                               ret.push( elems[ i ] );
-                       }
-               }
-
-               return ret;
-       },
-
-       // arg is for internal usage only
-       map: function( elems, callback, arg ) {
-               var value, key, ret = [],
-                       i = 0,
-                       length = elems.length,
-                       // jquery objects are treated as arrays
-                       isArray = elems instanceof jQuery || length !== undefined && typeof length === "number" && ( ( length > 0 && elems[ 0 ] && elems[ length -1 ] ) || length === 0 || jQuery.isArray( elems ) ) ;
-
-               // Go through the array, translating each of the items to their
-               if ( isArray ) {
-                       for ( ; i < length; i++ ) {
-                               value = callback( elems[ i ], i, arg );
-
-                               if ( value != null ) {
-                                       ret[ ret.length ] = value;
-                               }
-                       }
-
-               // Go through every key on the object,
-               } else {
-                       for ( key in elems ) {
-                               value = callback( elems[ key ], key, arg );
-
-                               if ( value != null ) {
-                                       ret[ ret.length ] = value;
-                               }
-                       }
-               }
-
-               // Flatten any nested arrays
-               return ret.concat.apply( [], ret );
-       },
-
-       // A global GUID counter for objects
-       guid: 1,
-
-       // Bind a function to a context, optionally partially applying any
-       // arguments.
-       proxy: function( fn, context ) {
-               if ( typeof context === "string" ) {
-                       var tmp = fn[ context ];
-                       context = fn;
-                       fn = tmp;
-               }
-
-               // Quick check to determine if target is callable, in the spec
-               // this throws a TypeError, but we will just return undefined.
-               if ( !jQuery.isFunction( fn ) ) {
-                       return undefined;
-               }
-
-               // Simulated bind
-               var args = slice.call( arguments, 2 ),
-                       proxy = function() {
-                               return fn.apply( context, args.concat( slice.call( arguments ) ) );
-                       };
-
-               // Set the guid of unique handler to the same of original handler, so it can be removed
-               proxy.guid = fn.guid = fn.guid || proxy.guid || jQuery.guid++;
-
-               return proxy;
-       },
-
-       // Mutifunctional method to get and set values to a collection
-       // The value/s can optionally be executed if it's a function
-       access: function( elems, key, value, exec, fn, pass ) {
-               var length = elems.length;
-
-               // Setting many attributes
-               if ( typeof key === "object" ) {
-                       for ( var k in key ) {
-                               jQuery.access( elems, k, key[k], exec, fn, value );
-                       }
-                       return elems;
-               }
-
-               // Setting one attribute
-               if ( value !== undefined ) {
-                       // Optionally, function values get executed if exec is true
-                       exec = !pass && exec && jQuery.isFunction(value);
-
-                       for ( var i = 0; i < length; i++ ) {
-                               fn( elems[i], key, exec ? value.call( elems[i], i, fn( elems[i], key ) ) : value, pass );
-                       }
-
-                       return elems;
-               }
-
-               // Getting an attribute
-               return length ? fn( elems[0], key ) : undefined;
-       },
-
-       now: function() {
-               return ( new Date() ).getTime();
-       },
-
-       // Use of jQuery.browser is frowned upon.
-       // More details: http://docs.jquery.com/Utilities/jQuery.browser
-       uaMatch: function( ua ) {
-               ua = ua.toLowerCase();
-
-               var match = rwebkit.exec( ua ) ||
-                       ropera.exec( ua ) ||
-                       rmsie.exec( ua ) ||
-                       ua.indexOf("compatible") < 0 && rmozilla.exec( ua ) ||
-                       [];
-
-               return { browser: match[1] || "", version: match[2] || "0" };
-       },
-
-       sub: function() {
-               function jQuerySub( selector, context ) {
-                       return new jQuerySub.fn.init( selector, context );
-               }
-               jQuery.extend( true, jQuerySub, this );
-               jQuerySub.superclass = this;
-               jQuerySub.fn = jQuerySub.prototype = this();
-               jQuerySub.fn.constructor = jQuerySub;
-               jQuerySub.sub = this.sub;
-               jQuerySub.fn.init = function init( selector, context ) {
-                       if ( context && context instanceof jQuery && !(context instanceof jQuerySub) ) {
-                               context = jQuerySub( context );
-                       }
-
-                       return jQuery.fn.init.call( this, selector, context, rootjQuerySub );
-               };
-               jQuerySub.fn.init.prototype = jQuerySub.fn;
-               var rootjQuerySub = jQuerySub(document);
-               return jQuerySub;
-       },
-
-       browser: {}
-});
-
-// Populate the class2type map
-jQuery.each("Boolean Number String Function Array Date RegExp Object".split(" "), function(i, name) {
-       class2type[ "[object " + name + "]" ] = name.toLowerCase();
-});
-
-browserMatch = jQuery.uaMatch( userAgent );
-if ( browserMatch.browser ) {
-       jQuery.browser[ browserMatch.browser ] = true;
-       jQuery.browser.version = browserMatch.version;
-}
-
-// Deprecated, use jQuery.browser.webkit instead
-if ( jQuery.browser.webkit ) {
-       jQuery.browser.safari = true;
-}
-
-// IE doesn't match non-breaking spaces with \s
-if ( rnotwhite.test( "\xA0" ) ) {
-       trimLeft = /^[\s\xA0]+/;
-       trimRight = /[\s\xA0]+$/;
-}
-
-// All jQuery objects should point back to these
-rootjQuery = jQuery(document);
-
-// Cleanup functions for the document ready method
-if ( document.addEventListener ) {
-       DOMContentLoaded = function() {
-               document.removeEventListener( "DOMContentLoaded", DOMContentLoaded, false );
-               jQuery.ready();
-       };
-
-} else if ( document.attachEvent ) {
-       DOMContentLoaded = function() {
-               // Make sure body exists, at least, in case IE gets a little overzealous (ticket #5443).
-               if ( document.readyState === "complete" ) {
-                       document.detachEvent( "onreadystatechange", DOMContentLoaded );
-                       jQuery.ready();
-               }
-       };
-}
-
-// The DOM ready check for Internet Explorer
-function doScrollCheck() {
-       if ( jQuery.isReady ) {
-               return;
-       }
-
-       try {
-               // If IE is used, use the trick by Diego Perini
-               // http://javascript.nwbox.com/IEContentLoaded/
-               document.documentElement.doScroll("left");
-       } catch(e) {
-               setTimeout( doScrollCheck, 1 );
-               return;
-       }
-
-       // and execute any waiting functions
-       jQuery.ready();
-}
-
-// Expose jQuery as an AMD module, but only for AMD loaders that
-// understand the issues with loading multiple versions of jQuery
-// in a page that all might call define(). The loader will indicate
-// they have special allowances for multiple jQuery versions by
-// specifying define.amd.jQuery = true. Register as a named module,
-// since jQuery can be concatenated with other files that may use define,
-// but not use a proper concatenation script that understands anonymous
-// AMD modules. A named AMD is safest and most robust way to register.
-// Lowercase jquery is used because AMD module names are derived from
-// file names, and jQuery is normally delivered in a lowercase file name.
-if ( typeof define === "function" && define.amd && define.amd.jQuery ) {
-       define( "jquery", [], function () { return jQuery; } );
-}
-
-return jQuery;
-
-})();
-
-
-// String to Object flags format cache
-var flagsCache = {};
-
-// Convert String-formatted flags into Object-formatted ones and store in cache
-function createFlags( flags ) {
-       var object = flagsCache[ flags ] = {},
-               i, length;
-       flags = flags.split( /\s+/ );
-       for ( i = 0, length = flags.length; i < length; i++ ) {
-               object[ flags[i] ] = true;
-       }
-       return object;
-}
-
-/*
- * Create a callback list using the following parameters:
- *
- *     flags:  an optional list of space-separated flags that will change how
- *                     the callback list behaves
- *
- * By default a callback list will act like an event callback list and can be
- * "fired" multiple times.
- *
- * Possible flags:
- *
- *     once:                   will ensure the callback list can only be fired once (like a Deferred)
- *
- *     memory:                 will keep track of previous values and will call any callback added
- *                                     after the list has been fired right away with the latest "memorized"
- *                                     values (like a Deferred)
- *
- *     unique:                 will ensure a callback can only be added once (no duplicate in the list)
- *
- *     stopOnFalse:    interrupt callings when a callback returns false
- *
- */
-jQuery.Callbacks = function( flags ) {
-
-       // Convert flags from String-formatted to Object-formatted
-       // (we check in cache first)
-       flags = flags ? ( flagsCache[ flags ] || createFlags( flags ) ) : {};
-
-       var // Actual callback list
-               list = [],
-               // Stack of fire calls for repeatable lists
-               stack = [],
-               // Last fire value (for non-forgettable lists)
-               memory,
-               // Flag to know if list is currently firing
-               firing,
-               // First callback to fire (used internally by add and fireWith)
-               firingStart,
-               // End of the loop when firing
-               firingLength,
-               // Index of currently firing callback (modified by remove if needed)
-               firingIndex,
-               // Add one or several callbacks to the list
-               add = function( args ) {
-                       var i,
-                               length,
-                               elem,
-                               type,
-                               actual;
-                       for ( i = 0, length = args.length; i < length; i++ ) {
-                               elem = args[ i ];
-                               type = jQuery.type( elem );
-                               if ( type === "array" ) {
-                                       // Inspect recursively
-                                       add( elem );
-                               } else if ( type === "function" ) {
-                                       // Add if not in unique mode and callback is not in
-                                       if ( !flags.unique || !self.has( elem ) ) {
-                                               list.push( elem );
-                                       }
-                               }
-                       }
-               },
-               // Fire callbacks
-               fire = function( context, args ) {
-                       args = args || [];
-                       memory = !flags.memory || [ context, args ];
-                       firing = true;
-                       firingIndex = firingStart || 0;
-                       firingStart = 0;
-                       firingLength = list.length;
-                       for ( ; list && firingIndex < firingLength; firingIndex++ ) {
-                               if ( list[ firingIndex ].apply( context, args ) === false && flags.stopOnFalse ) {
-                                       memory = true; // Mark as halted
-                                       break;
-                               }
-                       }
-                       firing = false;
-                       if ( list ) {
-                               if ( !flags.once ) {
-                                       if ( stack && stack.length ) {
-                                               memory = stack.shift();
-                                               self.fireWith( memory[ 0 ], memory[ 1 ] );
-                                       }
-                               } else if ( memory === true ) {
-                                       self.disable();
-                               } else {
-                                       list = [];
-                               }
-                       }
-               },
-               // Actual Callbacks object
-               self = {
-                       // Add a callback or a collection of callbacks to the list
-                       add: function() {
-                               if ( list ) {
-                                       var length = list.length;
-                                       add( arguments );
-                                       // Do we need to add the callbacks to the
-                                       // current firing batch?
-                                       if ( firing ) {
-                                               firingLength = list.length;
-                                       // With memory, if we're not firing then
-                                       // we should call right away, unless previous
-                                       // firing was halted (stopOnFalse)
-                                       } else if ( memory && memory !== true ) {
-                                               firingStart = length;
-                                               fire( memory[ 0 ], memory[ 1 ] );
-                                       }
-                               }
-                               return this;
-                       },
-                       // Remove a callback from the list
-                       remove: function() {
-                               if ( list ) {
-                                       var args = arguments,
-                                               argIndex = 0,
-                                               argLength = args.length;
-                                       for ( ; argIndex < argLength ; argIndex++ ) {
-                                               for ( var i = 0; i < list.length; i++ ) {
-                                                       if ( args[ argIndex ] === list[ i ] ) {
-                                                               // Handle firingIndex and firingLength
-                                                               if ( firing ) {
-                                                                       if ( i <= firingLength ) {
-                                                                               firingLength--;
-                                                                               if ( i <= firingIndex ) {
-                                                                                       firingIndex--;
-                                                                               }
-                                                                       }
-                                                               }
-                                                               // Remove the element
-                                                               list.splice( i--, 1 );
-                                                               // If we have some unicity property then
-                                                               // we only need to do this once
-                                                               if ( flags.unique ) {
-                                                                       break;
-                                                               }
-                                                       }
-                                               }
-                                       }
-                               }
-                               return this;
-                       },
-                       // Control if a given callback is in the list
-                       has: function( fn ) {
-                               if ( list ) {
-                                       var i = 0,
-                                               length = list.length;
-                                       for ( ; i < length; i++ ) {
-                                               if ( fn === list[ i ] ) {
-                                                       return true;
-                                               }
-                                       }
-                               }
-                               return false;
-                       },
-                       // Remove all callbacks from the list
-                       empty: function() {
-                               list = [];
-                               return this;
-                       },
-                       // Have the list do nothing anymore
-                       disable: function() {
-                               list = stack = memory = undefined;
-                               return this;
-                       },
-                       // Is it disabled?
-                       disabled: function() {
-                               return !list;
-                       },
-                       // Lock the list in its current state
-                       lock: function() {
-                               stack = undefined;
-                               if ( !memory || memory === true ) {
-                                       self.disable();
-                               }
-                               return this;
-                       },
-                       // Is it locked?
-                       locked: function() {
-                               return !stack;
-                       },
-                       // Call all callbacks with the given context and arguments
-                       fireWith: function( context, args ) {
-                               if ( stack ) {
-                                       if ( firing ) {
-                                               if ( !flags.once ) {
-                                                       stack.push( [ context, args ] );
-                                               }
-                                       } else if ( !( flags.once && memory ) ) {
-                                               fire( context, args );
-                                       }
-                               }
-                               return this;
-                       },
-                       // Call all the callbacks with the given arguments
-                       fire: function() {
-                               self.fireWith( this, arguments );
-                               return this;
-                       },
-                       // To know if the callbacks have already been called at least once
-                       fired: function() {
-                               return !!memory;
-                       }
-               };
-
-       return self;
-};
-
-
-
-
-var // Static reference to slice
-       sliceDeferred = [].slice;
-
-jQuery.extend({
-
-       Deferred: function( func ) {
-               var doneList = jQuery.Callbacks( "once memory" ),
-                       failList = jQuery.Callbacks( "once memory" ),
-                       progressList = jQuery.Callbacks( "memory" ),
-                       state = "pending",
-                       lists = {
-                               resolve: doneList,
-                               reject: failList,
-                               notify: progressList
-                       },
-                       promise = {
-                               done: doneList.add,
-                               fail: failList.add,
-                               progress: progressList.add,
-
-                               state: function() {
-                                       return state;
-                               },
-
-                               // Deprecated
-                               isResolved: doneList.fired,
-                               isRejected: failList.fired,
-
-                               then: function( doneCallbacks, failCallbacks, progressCallbacks ) {
-                                       deferred.done( doneCallbacks ).fail( failCallbacks ).progress( progressCallbacks );
-                                       return this;
-                               },
-                               always: function() {
-                                       return deferred.done.apply( deferred, arguments ).fail.apply( deferred, arguments );
-                               },
-                               pipe: function( fnDone, fnFail, fnProgress ) {
-                                       return jQuery.Deferred(function( newDefer ) {
-                                               jQuery.each( {
-                                                       done: [ fnDone, "resolve" ],
-                                                       fail: [ fnFail, "reject" ],
-                                                       progress: [ fnProgress, "notify" ]
-                                               }, function( handler, data ) {
-                                                       var fn = data[ 0 ],
-                                                               action = data[ 1 ],
-                                                               returned;
-                                                       if ( jQuery.isFunction( fn ) ) {
-                                                               deferred[ handler ](function() {
-                                                                       returned = fn.apply( this, arguments );
-                                                                       if ( returned && jQuery.isFunction( returned.promise ) ) {
-                                                                               returned.promise().then( newDefer.resolve, newDefer.reject, newDefer.notify );
-                                                                       } else {
-                                                                               newDefer[ action + "With" ]( this === deferred ? newDefer : this, [ returned ] );
-                                                                       }
-                                                               });
-                                                       } else {
-                                                               deferred[ handler ]( newDefer[ action ] );
-                                                       }
-                                               });
-                                       }).promise();
-                               },
-                               // Get a promise for this deferred
-                               // If obj is provided, the promise aspect is added to the object
-                               promise: function( obj ) {
-                                       if ( obj == null ) {
-                                               obj = promise;
-                                       } else {
-                                               for ( var key in promise ) {
-                                                       obj[ key ] = promise[ key ];
-                                               }
-                                       }
-                                       return obj;
-                               }
-                       },
-                       deferred = promise.promise({}),
-                       key;
-
-               for ( key in lists ) {
-                       deferred[ key ] = lists[ key ].fire;
-                       deferred[ key + "With" ] = lists[ key ].fireWith;
-               }
-
-               // Handle state
-               deferred.done( function() {
-                       state = "resolved";
-               }, failList.disable, progressList.lock ).fail( function() {
-                       state = "rejected";
-               }, doneList.disable, progressList.lock );
-
-               // Call given func if any
-               if ( func ) {
-                       func.call( deferred, deferred );
-               }
-
-               // All done!
-               return deferred;
-       },
-
-       // Deferred helper
-       when: function( firstParam ) {
-               var args = sliceDeferred.call( arguments, 0 ),
-                       i = 0,
-                       length = args.length,
-                       pValues = new Array( length ),
-                       count = length,
-                       pCount = length,
-                       deferred = length <= 1 && firstParam && jQuery.isFunction( firstParam.promise ) ?
-                               firstParam :
-                               jQuery.Deferred(),
-                       promise = deferred.promise();
-               function resolveFunc( i ) {
-                       return function( value ) {
-                               args[ i ] = arguments.length > 1 ? sliceDeferred.call( arguments, 0 ) : value;
-                               if ( !( --count ) ) {
-                                       deferred.resolveWith( deferred, args );
-                               }
-                       };
-               }
-               function progressFunc( i ) {
-                       return function( value ) {
-                               pValues[ i ] = arguments.length > 1 ? sliceDeferred.call( arguments, 0 ) : value;
-                               deferred.notifyWith( promise, pValues );
-                       };
-               }
-               if ( length > 1 ) {
-                       for ( ; i < length; i++ ) {
-                               if ( args[ i ] && args[ i ].promise && jQuery.isFunction( args[ i ].promise ) ) {
-                                       args[ i ].promise().then( resolveFunc(i), deferred.reject, progressFunc(i) );
-                               } else {
-                                       --count;
-                               }
-                       }
-                       if ( !count ) {
-                               deferred.resolveWith( deferred, args );
-                       }
-               } else if ( deferred !== firstParam ) {
-                       deferred.resolveWith( deferred, length ? [ firstParam ] : [] );
-               }
-               return promise;
-       }
-});
-
-
-
-
-jQuery.support = (function() {
-
-       var div = document.createElement( "div" ),
-               documentElement = document.documentElement,
-               all,
-               a,
-               select,
-               opt,
-               input,
-               marginDiv,
-               support,
-               fragment,
-               body,
-               testElementParent,
-               testElement,
-               testElementStyle,
-               tds,
-               events,
-               eventName,
-               i,
-               isSupported;
-
-       // Preliminary tests
-       div.setAttribute("className", "t");
-       div.innerHTML = "   <link/><table></table><a href='/a' style='top:1px;float:left;opacity:.55;'>a</a><input type='checkbox'/><nav></nav>";
-
-
-       all = div.getElementsByTagName( "*" );
-       a = div.getElementsByTagName( "a" )[ 0 ];
-
-       // Can't get basic test support
-       if ( !all || !all.length || !a ) {
-               return {};
-       }
-
-       // First batch of supports tests
-       select = document.createElement( "select" );
-       opt = select.appendChild( document.createElement("option") );
-       input = div.getElementsByTagName( "input" )[ 0 ];
-
-       support = {
-               // IE strips leading whitespace when .innerHTML is used
-               leadingWhitespace: ( div.firstChild.nodeType === 3 ),
-
-               // Make sure that tbody elements aren't automatically inserted
-               // IE will insert them into empty tables
-               tbody: !div.getElementsByTagName( "tbody" ).length,
-
-               // Make sure that link elements get serialized correctly by innerHTML
-               // This requires a wrapper element in IE
-               htmlSerialize: !!div.getElementsByTagName( "link" ).length,
-
-               // Get the style information from getAttribute
-               // (IE uses .cssText instead)
-               style: /top/.test( a.getAttribute("style") ),
-
-               // Make sure that URLs aren't manipulated
-               // (IE normalizes it by default)
-               hrefNormalized: ( a.getAttribute( "href" ) === "/a" ),
-
-               // Make sure that element opacity exists
-               // (IE uses filter instead)
-               // Use a regex to work around a WebKit issue. See #5145
-               opacity: /^0.55/.test( a.style.opacity ),
-
-               // Verify style float existence
-               // (IE uses styleFloat instead of cssFloat)
-               cssFloat: !!a.style.cssFloat,
-
-               // Make sure unknown elements (like HTML5 elems) are handled appropriately
-               unknownElems: !!div.getElementsByTagName( "nav" ).length,
-
-               // Make sure that if no value is specified for a checkbox
-               // that it defaults to "on".
-               // (WebKit defaults to "" instead)
-               checkOn: ( input.value === "on" ),
-
-               // Make sure that a selected-by-default option has a working selected property.
-               // (WebKit defaults to false instead of true, IE too, if it's in an optgroup)
-               optSelected: opt.selected,
-
-               // Test setAttribute on camelCase class. If it works, we need attrFixes when doing get/setAttribute (ie6/7)
-               getSetAttribute: div.className !== "t",
-
-               // Tests for enctype support on a form(#6743)
-               enctype: !!document.createElement("form").enctype,
-
-               // Will be defined later
-               submitBubbles: true,
-               changeBubbles: true,
-               focusinBubbles: false,
-               deleteExpando: true,
-               noCloneEvent: true,
-               inlineBlockNeedsLayout: false,
-               shrinkWrapBlocks: false,
-               reliableMarginRight: true
-       };
-
-       // Make sure checked status is properly cloned
-       input.checked = true;
-       support.noCloneChecked = input.cloneNode( true ).checked;
-
-       // Make sure that the options inside disabled selects aren't marked as disabled
-       // (WebKit marks them as disabled)
-       select.disabled = true;
-       support.optDisabled = !opt.disabled;
-
-       // Test to see if it's possible to delete an expando from an element
-       // Fails in Internet Explorer
-       try {
-               delete div.test;
-       } catch( e ) {
-               support.deleteExpando = false;
-       }
-
-       if ( !div.addEventListener && div.attachEvent && div.fireEvent ) {
-               div.attachEvent( "onclick", function() {
-                       // Cloning a node shouldn't copy over any
-                       // bound event handlers (IE does this)
-                       support.noCloneEvent = false;
-               });
-               div.cloneNode( true ).fireEvent( "onclick" );
-       }
-
-       // Check if a radio maintains its value
-       // after being appended to the DOM
-       input = document.createElement("input");
-       input.value = "t";
-       input.setAttribute("type", "radio");
-       support.radioValue = input.value === "t";
-
-       input.setAttribute("checked", "checked");
-       div.appendChild( input );
-       fragment = document.createDocumentFragment();
-       fragment.appendChild( div.lastChild );
-
-       // WebKit doesn't clone checked state correctly in fragments
-       support.checkClone = fragment.cloneNode( true ).cloneNode( true ).lastChild.checked;
-
-       div.innerHTML = "";
-
-       // Figure out if the W3C box model works as expected
-       div.style.width = div.style.paddingLeft = "1px";
-
-       // We don't want to do body-related feature tests on frameset
-       // documents, which lack a body. So we use
-       // document.getElementsByTagName("body")[0], which is undefined in
-       // frameset documents, while document.body isn’t. (7398)
-       body = document.getElementsByTagName("body")[ 0 ];
-       // We use our own, invisible, body unless the body is already present
-       // in which case we use a div (#9239)
-       testElement = document.createElement( body ? "div" : "body" );
-       testElementStyle = {
-               visibility: "hidden",
-               width: 0,
-               height: 0,
-               border: 0,
-               margin: 0,
-               background: "none"
-       };
-       if ( body ) {
-               jQuery.extend( testElementStyle, {
-                       position: "absolute",
-                       left: "-999px",
-                       top: "-999px"
-               });
-       }
-       for ( i in testElementStyle ) {
-               testElement.style[ i ] = testElementStyle[ i ];
-       }
-       testElement.appendChild( div );
-       testElementParent = body || documentElement;
-       testElementParent.insertBefore( testElement, testElementParent.firstChild );
-
-       // Check if a disconnected checkbox will retain its checked
-       // value of true after appended to the DOM (IE6/7)
-       support.appendChecked = input.checked;
-
-       support.boxModel = div.offsetWidth === 2;
-
-       if ( "zoom" in div.style ) {
-               // Check if natively block-level elements act like inline-block
-               // elements when setting their display to 'inline' and giving
-               // them layout
-               // (IE < 8 does this)
-               div.style.display = "inline";
-               div.style.zoom = 1;
-               support.inlineBlockNeedsLayout = ( div.offsetWidth === 2 );
-
-               // Check if elements with layout shrink-wrap their children
-               // (IE 6 does this)
-               div.style.display = "";
-               div.innerHTML = "<div style='width:4px;'></div>";
-               support.shrinkWrapBlocks = ( div.offsetWidth !== 2 );
-       }
-
-       div.innerHTML = "<table><tr><td style='padding:0;border:0;display:none'></td><td>t</td></tr></table>";
-       tds = div.getElementsByTagName( "td" );
-
-       // Check if table cells still have offsetWidth/Height when they are set
-       // to display:none and there are still other visible table cells in a
-       // table row; if so, offsetWidth/Height are not reliable for use when
-       // determining if an element has been hidden directly using
-       // display:none (it is still safe to use offsets if a parent element is
-       // hidden; don safety goggles and see bug #4512 for more information).
-       // (only IE 8 fails this test)
-       isSupported = ( tds[ 0 ].offsetHeight === 0 );
-
-       tds[ 0 ].style.display = "";
-       tds[ 1 ].style.display = "none";
-
-       // Check if empty table cells still have offsetWidth/Height
-       // (IE < 8 fail this test)
-       support.reliableHiddenOffsets = isSupported && ( tds[ 0 ].offsetHeight === 0 );
-       div.innerHTML = "";
-
-       // Check if div with explicit width and no margin-right incorrectly
-       // gets computed margin-right based on width of container. For more
-       // info see bug #3333
-       // Fails in WebKit before Feb 2011 nightlies
-       // WebKit Bug 13343 - getComputedStyle returns wrong value for margin-right
-       if ( document.defaultView && document.defaultView.getComputedStyle ) {
-               marginDiv = document.createElement( "div" );
-               marginDiv.style.width = "0";
-               marginDiv.style.marginRight = "0";
-               div.appendChild( marginDiv );
-               support.reliableMarginRight =
-                       ( parseInt( ( document.defaultView.getComputedStyle( marginDiv, null ) || { marginRight: 0 } ).marginRight, 10 ) || 0 ) === 0;
-       }
-
-       // Technique from Juriy Zaytsev
-       // http://perfectionkills.com/detecting-event-support-without-browser-sniffing/
-       // We only care about the case where non-standard event systems
-       // are used, namely in IE. Short-circuiting here helps us to
-       // avoid an eval call (in setAttribute) which can cause CSP
-       // to go haywire. See: https://developer.mozilla.org/en/Security/CSP
-       if ( div.attachEvent ) {
-               for( i in {
-                       submit: 1,
-                       change: 1,
-                       focusin: 1
-               } ) {
-                       eventName = "on" + i;
-                       isSupported = ( eventName in div );
-                       if ( !isSupported ) {
-                               div.setAttribute( eventName, "return;" );
-                               isSupported = ( typeof div[ eventName ] === "function" );
-                       }
-                       support[ i + "Bubbles" ] = isSupported;
-               }
-       }
-
-       // Run fixed position tests at doc ready to avoid a crash
-       // related to the invisible body in IE8
-       jQuery(function() {
-               var container, outer, inner, table, td, offsetSupport,
-                       conMarginTop = 1,
-                       ptlm = "position:absolute;top:0;left:0;width:1px;height:1px;margin:0;",
-                       vb = "visibility:hidden;border:0;",
-                       style = "style='" + ptlm + "border:5px solid #000;padding:0;'",
-                       html = "<div " + style + "><div></div></div>" +
-                                                       "<table " + style + " cellpadding='0' cellspacing='0'>" +
-                                                       "<tr><td></td></tr></table>";
-
-               // Reconstruct a container
-               body = document.getElementsByTagName("body")[0];
-               if ( !body ) {
-                       // Return for frameset docs that don't have a body
-                       // These tests cannot be done
-                       return;
-               }
-
-               container = document.createElement("div");
-               container.style.cssText = vb + "width:0;height:0;position:static;top:0;margin-top:" + conMarginTop + "px";
-               body.insertBefore( container, body.firstChild );
-
-               // Construct a test element
-               testElement = document.createElement("div");
-               testElement.style.cssText = ptlm + vb;
-
-               testElement.innerHTML = html;
-               container.appendChild( testElement );
-               outer = testElement.firstChild;
-               inner = outer.firstChild;
-               td = outer.nextSibling.firstChild.firstChild;
-
-               offsetSupport = {
-                       doesNotAddBorder: ( inner.offsetTop !== 5 ),
-                       doesAddBorderForTableAndCells: ( td.offsetTop === 5 )
-               };
-
-               inner.style.position = "fixed";
-               inner.style.top = "20px";
-
-               // safari subtracts parent border width here which is 5px
-               offsetSupport.fixedPosition = ( inner.offsetTop === 20 || inner.offsetTop === 15 );
-               inner.style.position = inner.style.top = "";
-
-               outer.style.overflow = "hidden";
-               outer.style.position = "relative";
-
-               offsetSupport.subtractsBorderForOverflowNotVisible = ( inner.offsetTop === -5 );
-               offsetSupport.doesNotIncludeMarginInBodyOffset = ( body.offsetTop !== conMarginTop );
-
-               body.removeChild( container );
-               testElement = container = null;
-
-               jQuery.extend( support, offsetSupport );
-       });
-
-       testElement.innerHTML = "";
-       testElementParent.removeChild( testElement );
-
-       // Null connected elements to avoid leaks in IE
-       testElement = fragment = select = opt = body = marginDiv = div = input = null;
-
-       return support;
-})();
-
-// Keep track of boxModel
-jQuery.boxModel = jQuery.support.boxModel;
-
-
-
-
-var rbrace = /^(?:\{.*\}|\[.*\])$/,
-       rmultiDash = /([A-Z])/g;
-
-jQuery.extend({
-       cache: {},
-
-       // Please use with caution
-       uuid: 0,
-
-       // Unique for each copy of jQuery on the page
-       // Non-digits removed to match rinlinejQuery
-       expando: "jQuery" + ( jQuery.fn.jquery + Math.random() ).replace( /\D/g, "" ),
-
-       // The following elements throw uncatchable exceptions if you
-       // attempt to add expando properties to them.
-       noData: {
-               "embed": true,
-               // Ban all objects except for Flash (which handle expandos)
-               "object": "clsid:D27CDB6E-AE6D-11cf-96B8-444553540000",
-               "applet": true
-       },
-
-       hasData: function( elem ) {
-               elem = elem.nodeType ? jQuery.cache[ elem[jQuery.expando] ] : elem[ jQuery.expando ];
-               return !!elem && !isEmptyDataObject( elem );
-       },
-
-       data: function( elem, name, data, pvt /* Internal Use Only */ ) {
-               if ( !jQuery.acceptData( elem ) ) {
-                       return;
-               }
-
-               var privateCache, thisCache, ret,
-                       internalKey = jQuery.expando,
-                       getByName = typeof name === "string",
-
-                       // We have to handle DOM nodes and JS objects differently because IE6-7
-                       // can't GC object references properly across the DOM-JS boundary
-                       isNode = elem.nodeType,
-
-                       // Only DOM nodes need the global jQuery cache; JS object data is
-                       // attached directly to the object so GC can occur automatically
-                       cache = isNode ? jQuery.cache : elem,
-
-                       // Only defining an ID for JS objects if its cache already exists allows
-                       // the code to shortcut on the same path as a DOM node with no cache
-                       id = isNode ? elem[ jQuery.expando ] : elem[ jQuery.expando ] && jQuery.expando,
-                       isEvents = name === "events";
-
-               // Avoid doing any more work than we need to when trying to get data on an
-               // object that has no data at all
-               if ( (!id || !cache[id] || (!isEvents && !pvt && !cache[id].data)) && getByName && data === undefined ) {
-                       return;
-               }
-
-               if ( !id ) {
-                       // Only DOM nodes need a new unique ID for each element since their data
-                       // ends up in the global cache
-                       if ( isNode ) {
-                               elem[ jQuery.expando ] = id = ++jQuery.uuid;
-                       } else {
-                               id = jQuery.expando;
-                       }
-               }
-
-               if ( !cache[ id ] ) {
-                       cache[ id ] = {};
-
-                       // Avoids exposing jQuery metadata on plain JS objects when the object
-                       // is serialized using JSON.stringify
-                       if ( !isNode ) {
-                               cache[ id ].toJSON = jQuery.noop;
-                       }
-               }
-
-               // An object can be passed to jQuery.data instead of a key/value pair; this gets
-               // shallow copied over onto the existing cache
-               if ( typeof name === "object" || typeof name === "function" ) {
-                       if ( pvt ) {
-                               cache[ id ] = jQuery.extend( cache[ id ], name );
-                       } else {
-                               cache[ id ].data = jQuery.extend( cache[ id ].data, name );
-                       }
-               }
-
-               privateCache = thisCache = cache[ id ];
-
-               // jQuery data() is stored in a separate object inside the object's internal data
-               // cache in order to avoid key collisions between internal data and user-defined
-               // data.
-               if ( !pvt ) {
-                       if ( !thisCache.data ) {
-                               thisCache.data = {};
-                       }
-
-                       thisCache = thisCache.data;
-               }
-
-               if ( data !== undefined ) {
-                       thisCache[ jQuery.camelCase( name ) ] = data;
-               }
-
-               // Users should not attempt to inspect the internal events object using jQuery.data,
-               // it is undocumented and subject to change. But does anyone listen? No.
-               if ( isEvents && !thisCache[ name ] ) {
-                       return privateCache.events;
-               }
-
-               // Check for both converted-to-camel and non-converted data property names
-               // If a data property was specified
-               if ( getByName ) {
-
-                       // First Try to find as-is property data
-                       ret = thisCache[ name ];
-
-                       // Test for null|undefined property data
-                       if ( ret == null ) {
-
-                               // Try to find the camelCased property
-                               ret = thisCache[ jQuery.camelCase( name ) ];
-                       }
-               } else {
-                       ret = thisCache;
-               }
-
-               return ret;
-       },
-
-       removeData: function( elem, name, pvt /* Internal Use Only */ ) {
-               if ( !jQuery.acceptData( elem ) ) {
-                       return;
-               }
-
-               var thisCache, i, l,
-
-                       // Reference to internal data cache key
-                       internalKey = jQuery.expando,
-
-                       isNode = elem.nodeType,
-
-                       // See jQuery.data for more information
-                       cache = isNode ? jQuery.cache : elem,
-
-                       // See jQuery.data for more information
-                       id = isNode ? elem[ jQuery.expando ] : jQuery.expando;
-
-               // If there is already no cache entry for this object, there is no
-               // purpose in continuing
-               if ( !cache[ id ] ) {
-                       return;
-               }
-
-               if ( name ) {
-
-                       thisCache = pvt ? cache[ id ] : cache[ id ].data;
-
-                       if ( thisCache ) {
-
-                               // Support space separated names
-                               if ( jQuery.isArray( name ) ) {
-                                       name = name;
-                               } else if ( name in thisCache ) {
-                                       name = [ name ];
-                               } else {
-
-                                       // split the camel cased version by spaces
-                                       name = jQuery.camelCase( name );
-                                       if ( name in thisCache ) {
-                                               name = [ name ];
-                                       } else {
-                                               name = name.split( " " );
-                                       }
-                               }
-
-                               for ( i = 0, l = name.length; i < l; i++ ) {
-                                       delete thisCache[ name[i] ];
-                               }
-
-                               // If there is no data left in the cache, we want to continue
-                               // and let the cache object itself get destroyed
-                               if ( !( pvt ? isEmptyDataObject : jQuery.isEmptyObject )( thisCache ) ) {
-                                       return;
-                               }
-                       }
-               }
-
-               // See jQuery.data for more information
-               if ( !pvt ) {
-                       delete cache[ id ].data;
-
-                       // Don't destroy the parent cache unless the internal data object
-                       // had been the only thing left in it
-                       if ( !isEmptyDataObject(cache[ id ]) ) {
-                               return;
-                       }
-               }
-
-               // Browsers that fail expando deletion also refuse to delete expandos on
-               // the window, but it will allow it on all other JS objects; other browsers
-               // don't care
-               // Ensure that `cache` is not a window object #10080
-               if ( jQuery.support.deleteExpando || !cache.setInterval ) {
-                       delete cache[ id ];
-               } else {
-                       cache[ id ] = null;
-               }
-
-               // We destroyed the cache and need to eliminate the expando on the node to avoid
-               // false lookups in the cache for entries that no longer exist
-               if ( isNode ) {
-                       // IE does not allow us to delete expando properties from nodes,
-                       // nor does it have a removeAttribute function on Document nodes;
-                       // we must handle all of these cases
-                       if ( jQuery.support.deleteExpando ) {
-                               delete elem[ jQuery.expando ];
-                       } else if ( elem.removeAttribute ) {
-                               elem.removeAttribute( jQuery.expando );
-                       } else {
-                               elem[ jQuery.expando ] = null;
-                       }
-               }
-       },
-
-       // For internal use only.
-       _data: function( elem, name, data ) {
-               return jQuery.data( elem, name, data, true );
-       },
-
-       // A method for determining if a DOM node can handle the data expando
-       acceptData: function( elem ) {
-               if ( elem.nodeName ) {
-                       var match = jQuery.noData[ elem.nodeName.toLowerCase() ];
-
-                       if ( match ) {
-                               return !(match === true || elem.getAttribute("classid") !== match);
-                       }
-               }
-
-               return true;
-       }
-});
-
-jQuery.fn.extend({
-       data: function( key, value ) {
-               var parts, attr, name,
-                       data = null;
-
-               if ( typeof key === "undefined" ) {
-                       if ( this.length ) {
-                               data = jQuery.data( this[0] );
-
-                               if ( this[0].nodeType === 1 && !jQuery._data( this[0], "parsedAttrs" ) ) {
-                                       attr = this[0].attributes;
-                                       for ( var i = 0, l = attr.length; i < l; i++ ) {
-                                               name = attr[i].name;
-
-                                               if ( name.indexOf( "data-" ) === 0 ) {
-                                                       name = jQuery.camelCase( name.substring(5) );
-
-                                                       dataAttr( this[0], name, data[ name ] );
-                                               }
-                                       }
-                                       jQuery._data( this[0], "parsedAttrs", true );
-                               }
-                       }
-
-                       return data;
-
-               } else if ( typeof key === "object" ) {
-                       return this.each(function() {
-                               jQuery.data( this, key );
-                       });
-               }
-
-               parts = key.split(".");
-               parts[1] = parts[1] ? "." + parts[1] : "";
-
-               if ( value === undefined ) {
-                       data = this.triggerHandler("getData" + parts[1] + "!", [parts[0]]);
-
-                       // Try to fetch any internally stored data first
-                       if ( data === undefined && this.length ) {
-                               data = jQuery.data( this[0], key );
-                               data = dataAttr( this[0], key, data );
-                       }
-
-                       return data === undefined && parts[1] ?
-                               this.data( parts[0] ) :
-                               data;
-
-               } else {
-                       return this.each(function() {
-                               var $this = jQuery( this ),
-                                       args = [ parts[0], value ];
-
-                               $this.triggerHandler( "setData" + parts[1] + "!", args );
-                               jQuery.data( this, key, value );
-                               $this.triggerHandler( "changeData" + parts[1] + "!", args );
-                       });
-               }
-       },
-
-       removeData: function( key ) {
-               return this.each(function() {
-                       jQuery.removeData( this, key );
-               });
-       }
-});
-
-function dataAttr( elem, key, data ) {
-       // If nothing was found internally, try to fetch any
-       // data from the HTML5 data-* attribute
-       if ( data === undefined && elem.nodeType === 1 ) {
-
-               var name = "data-" + key.replace( rmultiDash, "-$1" ).toLowerCase();
-
-               data = elem.getAttribute( name );
-
-               if ( typeof data === "string" ) {
-                       try {
-                               data = data === "true" ? true :
-                               data === "false" ? false :
-                               data === "null" ? null :
-                               jQuery.isNumeric( data ) ? parseFloat( data ) :
-                                       rbrace.test( data ) ? jQuery.parseJSON( data ) :
-                                       data;
-                       } catch( e ) {}
-
-                       // Make sure we set the data so it isn't changed later
-                       jQuery.data( elem, key, data );
-
-               } else {
-                       data = undefined;
-               }
-       }
-
-       return data;
-}
-
-// checks a cache object for emptiness
-function isEmptyDataObject( obj ) {
-       for ( var name in obj ) {
-
-               // if the public data object is empty, the private is still empty
-               if ( name === "data" && jQuery.isEmptyObject( obj[name] ) ) {
-                       continue;
-               }
-               if ( name !== "toJSON" ) {
-                       return false;
-               }
-       }
-
-       return true;
-}
-
-
-
-
-function handleQueueMarkDefer( elem, type, src ) {
-       var deferDataKey = type + "defer",
-               queueDataKey = type + "queue",
-               markDataKey = type + "mark",
-               defer = jQuery._data( elem, deferDataKey );
-       if ( defer &&
-               ( src === "queue" || !jQuery._data(elem, queueDataKey) ) &&
-               ( src === "mark" || !jQuery._data(elem, markDataKey) ) ) {
-               // Give room for hard-coded callbacks to fire first
-               // and eventually mark/queue something else on the element
-               setTimeout( function() {
-                       if ( !jQuery._data( elem, queueDataKey ) &&
-                               !jQuery._data( elem, markDataKey ) ) {
-                               jQuery.removeData( elem, deferDataKey, true );
-                               defer.fire();
-                       }
-               }, 0 );
-       }
-}
-
-jQuery.extend({
-
-       _mark: function( elem, type ) {
-               if ( elem ) {
-                       type = ( type || "fx" ) + "mark";
-                       jQuery._data( elem, type, (jQuery._data( elem, type ) || 0) + 1 );
-               }
-       },
-
-       _unmark: function( force, elem, type ) {
-               if ( force !== true ) {
-                       type = elem;
-                       elem = force;
-                       force = false;
-               }
-               if ( elem ) {
-                       type = type || "fx";
-                       var key = type + "mark",
-                               count = force ? 0 : ( (jQuery._data( elem, key ) || 1) - 1 );
-                       if ( count ) {
-                               jQuery._data( elem, key, count );
-                       } else {
-                               jQuery.removeData( elem, key, true );
-                               handleQueueMarkDefer( elem, type, "mark" );
-                       }
-               }
-       },
-
-       queue: function( elem, type, data ) {
-               var q;
-               if ( elem ) {
-                       type = ( type || "fx" ) + "queue";
-                       q = jQuery._data( elem, type );
-
-                       // Speed up dequeue by getting out quickly if this is just a lookup
-                       if ( data ) {
-                               if ( !q || jQuery.isArray(data) ) {
-                                       q = jQuery._data( elem, type, jQuery.makeArray(data) );
-                               } else {
-                                       q.push( data );
-                               }
-                       }
-                       return q || [];
-               }
-       },
-
-       dequeue: function( elem, type ) {
-               type = type || "fx";
-
-               var queue = jQuery.queue( elem, type ),
-                       fn = queue.shift(),
-                       hooks = {};
-
-               // If the fx queue is dequeued, always remove the progress sentinel
-               if ( fn === "inprogress" ) {
-                       fn = queue.shift();
-               }
-
-               if ( fn ) {
-                       // Add a progress sentinel to prevent the fx queue from being
-                       // automatically dequeued
-                       if ( type === "fx" ) {
-                               queue.unshift( "inprogress" );
-                       }
-
-                       jQuery._data( elem, type + ".run", hooks );
-                       fn.call( elem, function() {
-                               jQuery.dequeue( elem, type );
-                       }, hooks );
-               }
-
-               if ( !queue.length ) {
-                       jQuery.removeData( elem, type + "queue " + type + ".run", true );
-                       handleQueueMarkDefer( elem, type, "queue" );
-               }
-       }
-});
-
-jQuery.fn.extend({
-       queue: function( type, data ) {
-               if ( typeof type !== "string" ) {
-                       data = type;
-                       type = "fx";
-               }
-
-               if ( data === undefined ) {
-                       return jQuery.queue( this[0], type );
-               }
-               return this.each(function() {
-                       var queue = jQuery.queue( this, type, data );
-
-                       if ( type === "fx" && queue[0] !== "inprogress" ) {
-                               jQuery.dequeue( this, type );
-                       }
-               });
-       },
-       dequeue: function( type ) {
-               return this.each(function() {
-                       jQuery.dequeue( this, type );
-               });
-       },
-       // Based off of the plugin by Clint Helfers, with permission.
-       // http://blindsignals.com/index.php/2009/07/jquery-delay/
-       delay: function( time, type ) {
-               time = jQuery.fx ? jQuery.fx.speeds[ time ] || time : time;
-               type = type || "fx";
-
-               return this.queue( type, function( next, hooks ) {
-                       var timeout = setTimeout( next, time );
-                       hooks.stop = function() {
-                               clearTimeout( timeout );
-                       };
-               });
-       },
-       clearQueue: function( type ) {
-               return this.queue( type || "fx", [] );
-       },
-       // Get a promise resolved when queues of a certain type
-       // are emptied (fx is the type by default)
-       promise: function( type, object ) {
-               if ( typeof type !== "string" ) {
-                       object = type;
-                       type = undefined;
-               }
-               type = type || "fx";
-               var defer = jQuery.Deferred(),
-                       elements = this,
-                       i = elements.length,
-                       count = 1,
-                       deferDataKey = type + "defer",
-                       queueDataKey = type + "queue",
-                       markDataKey = type + "mark",
-                       tmp;
-               function resolve() {
-                       if ( !( --count ) ) {
-                               defer.resolveWith( elements, [ elements ] );
-                       }
-               }
-               while( i-- ) {
-                       if (( tmp = jQuery.data( elements[ i ], deferDataKey, undefined, true ) ||
-                                       ( jQuery.data( elements[ i ], queueDataKey, undefined, true ) ||
-                                               jQuery.data( elements[ i ], markDataKey, undefined, true ) ) &&
-                                       jQuery.data( elements[ i ], deferDataKey, jQuery.Callbacks( "once memory" ), true ) )) {
-                               count++;
-                               tmp.add( resolve );
-                       }
-               }
-               resolve();
-               return defer.promise();
-       }
-});
-
-
-
-
-var rclass = /[\n\t\r]/g,
-       rspace = /\s+/,
-       rreturn = /\r/g,
-       rtype = /^(?:button|input)$/i,
-       rfocusable = /^(?:button|input|object|select|textarea)$/i,
-       rclickable = /^a(?:rea)?$/i,
-       rboolean = /^(?:autofocus|autoplay|async|checked|controls|defer|disabled|hidden|loop|multiple|open|readonly|required|scoped|selected)$/i,
-       getSetAttribute = jQuery.support.getSetAttribute,
-       nodeHook, boolHook, fixSpecified;
-
-jQuery.fn.extend({
-       attr: function( name, value ) {
-               return jQuery.access( this, name, value, true, jQuery.attr );
-       },
-
-       removeAttr: function( name ) {
-               return this.each(function() {
-                       jQuery.removeAttr( this, name );
-               });
-       },
-
-       prop: function( name, value ) {
-               return jQuery.access( this, name, value, true, jQuery.prop );
-       },
-
-       removeProp: function( name ) {
-               name = jQuery.propFix[ name ] || name;
-               return this.each(function() {
-                       // try/catch handles cases where IE balks (such as removing a property on window)
-                       try {
-                               this[ name ] = undefined;
-                               delete this[ name ];
-                       } catch( e ) {}
-               });
-       },
-
-       addClass: function( value ) {
-               var classNames, i, l, elem,
-                       setClass, c, cl;
-
-               if ( jQuery.isFunction( value ) ) {
-                       return this.each(function( j ) {
-                               jQuery( this ).addClass( value.call(this, j, this.className) );
-                       });
-               }
-
-               if ( value && typeof value === "string" ) {
-                       classNames = value.split( rspace );
-
-                       for ( i = 0, l = this.length; i < l; i++ ) {
-                               elem = this[ i ];
-
-                               if ( elem.nodeType === 1 ) {
-                                       if ( !elem.className && classNames.length === 1 ) {
-                                               elem.className = value;
-
-                                       } else {
-                                               setClass = " " + elem.className + " ";
-
-                                               for ( c = 0, cl = classNames.length; c < cl; c++ ) {
-                                                       if ( !~setClass.indexOf( " " + classNames[ c ] + " " ) ) {
-                                                               setClass += classNames[ c ] + " ";
-                                                       }
-                                               }
-                                               elem.className = jQuery.trim( setClass );
-                                       }
-                               }
-                       }
-               }
-
-               return this;
-       },
-
-       removeClass: function( value ) {
-               var classNames, i, l, elem, className, c, cl;
-
-               if ( jQuery.isFunction( value ) ) {
-                       return this.each(function( j ) {
-                               jQuery( this ).removeClass( value.call(this, j, this.className) );
-                       });
-               }
-
-               if ( (value && typeof value === "string") || value === undefined ) {
-                       classNames = ( value || "" ).split( rspace );
-
-                       for ( i = 0, l = this.length; i < l; i++ ) {
-                               elem = this[ i ];
-
-                               if ( elem.nodeType === 1 && elem.className ) {
-                                       if ( value ) {
-                                               className = (" " + elem.className + " ").replace( rclass, " " );
-                                               for ( c = 0, cl = classNames.length; c < cl; c++ ) {
-                                                       className = className.replace(" " + classNames[ c ] + " ", " ");
-                                               }
-                                               elem.className = jQuery.trim( className );
-
-                                       } else {
-                                               elem.className = "";
-                                       }
-                               }
-                       }
-               }
-
-               return this;
-       },
-
-       toggleClass: function( value, stateVal ) {
-               var type = typeof value,
-                       isBool = typeof stateVal === "boolean";
-
-               if ( jQuery.isFunction( value ) ) {
-                       return this.each(function( i ) {
-                               jQuery( this ).toggleClass( value.call(this, i, this.className, stateVal), stateVal );
-                       });
-               }
-
-               return this.each(function() {
-                       if ( type === "string" ) {
-                               // toggle individual class names
-                               var className,
-                                       i = 0,
-                                       self = jQuery( this ),
-                                       state = stateVal,
-                                       classNames = value.split( rspace );
-
-                               while ( (className = classNames[ i++ ]) ) {
-                                       // check each className given, space seperated list
-                                       state = isBool ? state : !self.hasClass( className );
-                                       self[ state ? "addClass" : "removeClass" ]( className );
-                               }
-
-                       } else if ( type === "undefined" || type === "boolean" ) {
-                               if ( this.className ) {
-                                       // store className if set
-                                       jQuery._data( this, "__className__", this.className );
-                               }
-
-                               // toggle whole className
-                               this.className = this.className || value === false ? "" : jQuery._data( this, "__className__" ) || "";
-                       }
-               });
-       },
-
-       hasClass: function( selector ) {
-               var className = " " + selector + " ",
-                       i = 0,
-                       l = this.length;
-               for ( ; i < l; i++ ) {
-                       if ( this[i].nodeType === 1 && (" " + this[i].className + " ").replace(rclass, " ").indexOf( className ) > -1 ) {
-                               return true;
-                       }
-               }
-
-               return false;
-       },
-
-       val: function( value ) {
-               var hooks, ret, isFunction,
-                       elem = this[0];
-
-               if ( !arguments.length ) {
-                       if ( elem ) {
-                               hooks = jQuery.valHooks[ elem.nodeName.toLowerCase() ] || jQuery.valHooks[ elem.type ];
-
-                               if ( hooks && "get" in hooks && (ret = hooks.get( elem, "value" )) !== undefined ) {
-                                       return ret;
-                               }
-
-                               ret = elem.value;
-
-                               return typeof ret === "string" ?
-                                       // handle most common string cases
-                                       ret.replace(rreturn, "") :
-                                       // handle cases where value is null/undef or number
-                                       ret == null ? "" : ret;
-                       }
-
-                       return undefined;
-               }
-
-               isFunction = jQuery.isFunction( value );
-
-               return this.each(function( i ) {
-                       var self = jQuery(this), val;
-
-                       if ( this.nodeType !== 1 ) {
-                               return;
-                       }
-
-                       if ( isFunction ) {
-                               val = value.call( this, i, self.val() );
-                       } else {
-                               val = value;
-                       }
-
-                       // Treat null/undefined as ""; convert numbers to string
-                       if ( val == null ) {
-                               val = "";
-                       } else if ( typeof val === "number" ) {
-                               val += "";
-                       } else if ( jQuery.isArray( val ) ) {
-                               val = jQuery.map(val, function ( value ) {
-                                       return value == null ? "" : value + "";
-                               });
-                       }
-
-                       hooks = jQuery.valHooks[ this.nodeName.toLowerCase() ] || jQuery.valHooks[ this.type ];
-
-                       // If set returns undefined, fall back to normal setting
-                       if ( !hooks || !("set" in hooks) || hooks.set( this, val, "value" ) === undefined ) {
-                               this.value = val;
-                       }
-               });
-       }
-});
-
-jQuery.extend({
-       valHooks: {
-               option: {
-                       get: function( elem ) {
-                               // attributes.value is undefined in Blackberry 4.7 but
-                               // uses .value. See #6932
-                               var val = elem.attributes.value;
-                               return !val || val.specified ? elem.value : elem.text;
-                       }
-               },
-               select: {
-                       get: function( elem ) {
-                               var value, i, max, option,
-                                       index = elem.selectedIndex,
-                                       values = [],
-                                       options = elem.options,
-                                       one = elem.type === "select-one";
-
-                               // Nothing was selected
-                               if ( index < 0 ) {
-                                       return null;
-                               }
-
-                               // Loop through all the selected options
-                               i = one ? index : 0;
-                               max = one ? index + 1 : options.length;
-                               for ( ; i < max; i++ ) {
-                                       option = options[ i ];
-
-                                       // Don't return options that are disabled or in a disabled optgroup
-                                       if ( option.selected && (jQuery.support.optDisabled ? !option.disabled : option.getAttribute("disabled") === null) &&
-                                                       (!option.parentNode.disabled || !jQuery.nodeName( option.parentNode, "optgroup" )) ) {
-
-                                               // Get the specific value for the option
-                                               value = jQuery( option ).val();
-
-                                               // We don't need an array for one selects
-                                               if ( one ) {
-                                                       return value;
-                                               }
-
-                                               // Multi-Selects return an array
-                                               values.push( value );
-                                       }
-                               }
-
-                               // Fixes Bug #2551 -- select.val() broken in IE after form.reset()
-                               if ( one && !values.length && options.length ) {
-                                       return jQuery( options[ index ] ).val();
-                               }
-
-                               return values;
-                       },
-
-                       set: function( elem, value ) {
-                               var values = jQuery.makeArray( value );
-
-                               jQuery(elem).find("option").each(function() {
-                                       this.selected = jQuery.inArray( jQuery(this).val(), values ) >= 0;
-                               });
-
-                               if ( !values.length ) {
-                                       elem.selectedIndex = -1;
-                               }
-                               return values;
-                       }
-               }
-       },
-
-       attrFn: {
-               val: true,
-               css: true,
-               html: true,
-               text: true,
-               data: true,
-               width: true,
-               height: true,
-               offset: true
-       },
-
-       attr: function( elem, name, value, pass ) {
-               var ret, hooks, notxml,
-                       nType = elem.nodeType;
-
-               // don't get/set attributes on text, comment and attribute nodes
-               if ( !elem || nType === 3 || nType === 8 || nType === 2 ) {
-                       return undefined;
-               }
-
-               if ( pass && name in jQuery.attrFn ) {
-                       return jQuery( elem )[ name ]( value );
-               }
-
-               // Fallback to prop when attributes are not supported
-               if ( !("getAttribute" in elem) ) {
-                       return jQuery.prop( elem, name, value );
-               }
-
-               notxml = nType !== 1 || !jQuery.isXMLDoc( elem );
-
-               // All attributes are lowercase
-               // Grab necessary hook if one is defined
-               if ( notxml ) {
-                       name = name.toLowerCase();
-                       hooks = jQuery.attrHooks[ name ] || ( rboolean.test( name ) ? boolHook : nodeHook );
-               }
-
-               if ( value !== undefined ) {
-
-                       if ( value === null ) {
-                               jQuery.removeAttr( elem, name );
-                               return undefined;
-
-                       } else if ( hooks && "set" in hooks && notxml && (ret = hooks.set( elem, value, name )) !== undefined ) {
-                               return ret;
-
-                       } else {
-                               elem.setAttribute( name, "" + value );
-                               return value;
-                       }
-
-               } else if ( hooks && "get" in hooks && notxml && (ret = hooks.get( elem, name )) !== null ) {
-                       return ret;
-
-               } else {
-
-                       ret = elem.getAttribute( name );
-
-                       // Non-existent attributes return null, we normalize to undefined
-                       return ret === null ?
-                               undefined :
-                               ret;
-               }
-       },
-
-       removeAttr: function( elem, value ) {
-               var propName, attrNames, name, l,
-                       i = 0;
-
-               if ( elem.nodeType === 1 ) {
-                       attrNames = ( value || "" ).split( rspace );
-                       l = attrNames.length;
-
-                       for ( ; i < l; i++ ) {
-                               name = attrNames[ i ].toLowerCase();
-                               propName = jQuery.propFix[ name ] || name;
-
-                               // See #9699 for explanation of this approach (setting first, then removal)
-                               jQuery.attr( elem, name, "" );
-                               elem.removeAttribute( getSetAttribute ? name : propName );
-
-                               // Set corresponding property to false for boolean attributes
-                               if ( rboolean.test( name ) && propName in elem ) {
-                                       elem[ propName ] = false;
-                               }
-                       }
-               }
-       },
-
-       attrHooks: {
-               type: {
-                       set: function( elem, value ) {
-                               // We can't allow the type property to be changed (since it causes problems in IE)
-                               if ( rtype.test( elem.nodeName ) && elem.parentNode ) {
-                                       jQuery.error( "type property can't be changed" );
-                               } else if ( !jQuery.support.radioValue && value === "radio" && jQuery.nodeName(elem, "input") ) {
-                                       // Setting the type on a radio button after the value resets the value in IE6-9
-                                       // Reset value to it's default in case type is set after value
-                                       // This is for element creation
-                                       var val = elem.value;
-                                       elem.setAttribute( "type", value );
-                                       if ( val ) {
-                                               elem.value = val;
-                                       }
-                                       return value;
-                               }
-                       }
-               },
-               // Use the value property for back compat
-               // Use the nodeHook for button elements in IE6/7 (#1954)
-               value: {
-                       get: function( elem, name ) {
-                               if ( nodeHook && jQuery.nodeName( elem, "button" ) ) {
-                                       return nodeHook.get( elem, name );
-                               }
-                               return name in elem ?
-                                       elem.value :
-                                       null;
-                       },
-                       set: function( elem, value, name ) {
-                               if ( nodeHook && jQuery.nodeName( elem, "button" ) ) {
-                                       return nodeHook.set( elem, value, name );
-                               }
-                               // Does not return so that setAttribute is also used
-                               elem.value = value;
-                       }
-               }
-       },
-
-       propFix: {
-               tabindex: "tabIndex",
-               readonly: "readOnly",
-               "for": "htmlFor",
-               "class": "className",
-               maxlength: "maxLength",
-               cellspacing: "cellSpacing",
-               cellpadding: "cellPadding",
-               rowspan: "rowSpan",
-               colspan: "colSpan",
-               usemap: "useMap",
-               frameborder: "frameBorder",
-               contenteditable: "contentEditable"
-       },
-
-       prop: function( elem, name, value ) {
-               var ret, hooks, notxml,
-                       nType = elem.nodeType;
-
-               // don't get/set properties on text, comment and attribute nodes
-               if ( !elem || nType === 3 || nType === 8 || nType === 2 ) {
-                       return undefined;
-               }
-
-               notxml = nType !== 1 || !jQuery.isXMLDoc( elem );
-
-               if ( notxml ) {
-                       // Fix name and attach hooks
-                       name = jQuery.propFix[ name ] || name;
-                       hooks = jQuery.propHooks[ name ];
-               }
-
-               if ( value !== undefined ) {
-                       if ( hooks && "set" in hooks && (ret = hooks.set( elem, value, name )) !== undefined ) {
-                               return ret;
-
-                       } else {
-                               return ( elem[ name ] = value );
-                       }
-
-               } else {
-                       if ( hooks && "get" in hooks && (ret = hooks.get( elem, name )) !== null ) {
-                               return ret;
-
-                       } else {
-                               return elem[ name ];
-                       }
-               }
-       },
-
-       propHooks: {
-               tabIndex: {
-                       get: function( elem ) {
-                               // elem.tabIndex doesn't always return the correct value when it hasn't been explicitly set
-                               // http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/
-                               var attributeNode = elem.getAttributeNode("tabindex");
-
-                               return attributeNode && attributeNode.specified ?
-                                       parseInt( attributeNode.value, 10 ) :
-                                       rfocusable.test( elem.nodeName ) || rclickable.test( elem.nodeName ) && elem.href ?
-                                               0 :
-                                               undefined;
-                       }
-               }
-       }
-});
-
-// Add the tabIndex propHook to attrHooks for back-compat (different case is intentional)
-jQuery.attrHooks.tabindex = jQuery.propHooks.tabIndex;
-
-// Hook for boolean attributes
-boolHook = {
-       get: function( elem, name ) {
-               // Align boolean attributes with corresponding properties
-               // Fall back to attribute presence where some booleans are not supported
-               var attrNode,
-                       property = jQuery.prop( elem, name );
-               return property === true || typeof property !== "boolean" && ( attrNode = elem.getAttributeNode(name) ) && attrNode.nodeValue !== false ?
-                       name.toLowerCase() :
-                       undefined;
-       },
-       set: function( elem, value, name ) {
-               var propName;
-               if ( value === false ) {
-                       // Remove boolean attributes when set to false
-                       jQuery.removeAttr( elem, name );
-               } else {
-                       // value is true since we know at this point it's type boolean and not false
-                       // Set boolean attributes to the same name and set the DOM property
-                       propName = jQuery.propFix[ name ] || name;
-                       if ( propName in elem ) {
-                               // Only set the IDL specifically if it already exists on the element
-                               elem[ propName ] = true;
-                       }
-
-                       elem.setAttribute( name, name.toLowerCase() );
-               }
-               return name;
-       }
-};
-
-// IE6/7 do not support getting/setting some attributes with get/setAttribute
-if ( !getSetAttribute ) {
-
-       fixSpecified = {
-               name: true,
-               id: true
-       };
-
-       // Use this for any attribute in IE6/7
-       // This fixes almost every IE6/7 issue
-       nodeHook = jQuery.valHooks.button = {
-               get: function( elem, name ) {
-                       var ret;
-                       ret = elem.getAttributeNode( name );
-                       return ret && ( fixSpecified[ name ] ? ret.nodeValue !== "" : ret.specified ) ?
-                               ret.nodeValue :
-                               undefined;
-               },
-               set: function( elem, value, name ) {
-                       // Set the existing or create a new attribute node
-                       var ret = elem.getAttributeNode( name );
-                       if ( !ret ) {
-                               ret = document.createAttribute( name );
-                               elem.setAttributeNode( ret );
-                       }
-                       return ( ret.nodeValue = value + "" );
-               }
-       };
-
-       // Apply the nodeHook to tabindex
-       jQuery.attrHooks.tabindex.set = nodeHook.set;
-
-       // Set width and height to auto instead of 0 on empty string( Bug #8150 )
-       // This is for removals
-       jQuery.each([ "width", "height" ], function( i, name ) {
-               jQuery.attrHooks[ name ] = jQuery.extend( jQuery.attrHooks[ name ], {
-                       set: function( elem, value ) {
-                               if ( value === "" ) {
-                                       elem.setAttribute( name, "auto" );
-                                       return value;
-                               }
-                       }
-               });
-       });
-
-       // Set contenteditable to false on removals(#10429)
-       // Setting to empty string throws an error as an invalid value
-       jQuery.attrHooks.contenteditable = {
-               get: nodeHook.get,
-               set: function( elem, value, name ) {
-                       if ( value === "" ) {
-                               value = "false";
-                       }
-                       nodeHook.set( elem, value, name );
-               }
-       };
-}
-
-
-// Some attributes require a special call on IE
-if ( !jQuery.support.hrefNormalized ) {
-       jQuery.each([ "href", "src", "width", "height" ], function( i, name ) {
-               jQuery.attrHooks[ name ] = jQuery.extend( jQuery.attrHooks[ name ], {
-                       get: function( elem ) {
-                               var ret = elem.getAttribute( name, 2 );
-                               return ret === null ? undefined : ret;
-                       }
-               });
-       });
-}
-
-if ( !jQuery.support.style ) {
-       jQuery.attrHooks.style = {
-               get: function( elem ) {
-                       // Return undefined in the case of empty string
-                       // Normalize to lowercase since IE uppercases css property names
-                       return elem.style.cssText.toLowerCase() || undefined;
-               },
-               set: function( elem, value ) {
-                       return ( elem.style.cssText = "" + value );
-               }
-       };
-}
-
-// Safari mis-reports the default selected property of an option
-// Accessing the parent's selectedIndex property fixes it
-if ( !jQuery.support.optSelected ) {
-       jQuery.propHooks.selected = jQuery.extend( jQuery.propHooks.selected, {
-               get: function( elem ) {
-                       var parent = elem.parentNode;
-
-                       if ( parent ) {
-                               parent.selectedIndex;
-
-                               // Make sure that it also works with optgroups, see #5701
-                               if ( parent.parentNode ) {
-                                       parent.parentNode.selectedIndex;
-                               }
-                       }
-                       return null;
-               }
-       });
-}
-
-// IE6/7 call enctype encoding
-if ( !jQuery.support.enctype ) {
-       jQuery.propFix.enctype = "encoding";
-}
-
-// Radios and checkboxes getter/setter
-if ( !jQuery.support.checkOn ) {
-       jQuery.each([ "radio", "checkbox" ], function() {
-               jQuery.valHooks[ this ] = {
-                       get: function( elem ) {
-                               // Handle the case where in Webkit "" is returned instead of "on" if a value isn't specified
-                               return elem.getAttribute("value") === null ? "on" : elem.value;
-                       }
-               };
-       });
-}
-jQuery.each([ "radio", "checkbox" ], function() {
-       jQuery.valHooks[ this ] = jQuery.extend( jQuery.valHooks[ this ], {
-               set: function( elem, value ) {
-                       if ( jQuery.isArray( value ) ) {
-                               return ( elem.checked = jQuery.inArray( jQuery(elem).val(), value ) >= 0 );
-                       }
-               }
-       });
-});
-
-
-
-
-var rnamespaces = /\.(.*)$/,
-       rformElems = /^(?:textarea|input|select)$/i,
-       rperiod = /\./g,
-       rspaces = / /g,
-       rescape = /[^\w\s.|`]/g,
-       rtypenamespace = /^([^\.]*)?(?:\.(.+))?$/,
-       rhoverHack = /\bhover(\.\S+)?/,
-       rkeyEvent = /^key/,
-       rmouseEvent = /^(?:mouse|contextmenu)|click/,
-       rquickIs = /^(\w*)(?:#([\w\-]+))?(?:\.([\w\-]+))?$/,
-       quickParse = function( selector ) {
-               var quick = rquickIs.exec( selector );
-               if ( quick ) {
-                       //   0  1    2   3
-                       // [ _, tag, id, class ]
-                       quick[1] = ( quick[1] || "" ).toLowerCase();
-                       quick[3] = quick[3] && new RegExp( "(?:^|\\s)" + quick[3] + "(?:\\s|$)" );
-               }
-               return quick;
-       },
-       quickIs = function( elem, m ) {
-               return (
-                       (!m[1] || elem.nodeName.toLowerCase() === m[1]) &&
-                       (!m[2] || elem.id === m[2]) &&
-                       (!m[3] || m[3].test( elem.className ))
-               );
-       },
-       hoverHack = function( events ) {
-               return jQuery.event.special.hover ? events : events.replace( rhoverHack, "mouseenter$1 mouseleave$1" );
-       };
-
-/*
- * Helper functions for managing events -- not part of the public interface.
- * Props to Dean Edwards' addEvent library for many of the ideas.
- */
-jQuery.event = {
-
-       add: function( elem, types, handler, data, selector ) {
-
-               var elemData, eventHandle, events,
-                       t, tns, type, namespaces, handleObj,
-                       handleObjIn, quick, handlers, special;
-
-               // Don't attach events to noData or text/comment nodes (allow plain objects tho)
-               if ( elem.nodeType === 3 || elem.nodeType === 8 || !types || !handler || !(elemData = jQuery._data( elem )) ) {
-                       return;
-               }
-
-               // Caller can pass in an object of custom data in lieu of the handler
-               if ( handler.handler ) {
-                       handleObjIn = handler;
-                       handler = handleObjIn.handler;
-               }
-
-               // Make sure that the handler has a unique ID, used to find/remove it later
-               if ( !handler.guid ) {
-                       handler.guid = jQuery.guid++;
-               }
-
-               // Init the element's event structure and main handler, if this is the first
-               events = elemData.events;
-               if ( !events ) {
-                       elemData.events = events = {};
-               }
-               eventHandle = elemData.handle;
-               if ( !eventHandle ) {
-                       elemData.handle = eventHandle = function( e ) {
-                               // Discard the second event of a jQuery.event.trigger() and
-                               // when an event is called after a page has unloaded
-                               return typeof jQuery !== "undefined" && (!e || jQuery.event.triggered !== e.type) ?
-                                       jQuery.event.dispatch.apply( eventHandle.elem, arguments ) :
-                                       undefined;
-                       };
-                       // Add elem as a property of the handle fn to prevent a memory leak with IE non-native events
-                       eventHandle.elem = elem;
-               }
-
-               // Handle multiple events separated by a space
-               // jQuery(...).bind("mouseover mouseout", fn);
-               types = hoverHack(types).split( " " );
-               for ( t = 0; t < types.length; t++ ) {
-
-                       tns = rtypenamespace.exec( types[t] ) || [];
-                       type = tns[1];
-                       namespaces = ( tns[2] || "" ).split( "." ).sort();
-
-                       // If event changes its type, use the special event handlers for the changed type
-                       special = jQuery.event.special[ type ] || {};
-
-                       // If selector defined, determine special event api type, otherwise given type
-                       type = ( selector ? special.delegateType : special.bindType ) || type;
-
-                       // Update special based on newly reset type
-                       special = jQuery.event.special[ type ] || {};
-
-                       // handleObj is passed to all event handlers
-                       handleObj = jQuery.extend({
-                               type: type,
-                               origType: tns[1],
-                               data: data,
-                               handler: handler,
-                               guid: handler.guid,
-                               selector: selector,
-                               namespace: namespaces.join(".")
-                       }, handleObjIn );
-
-                       // Delegated event; pre-analyze selector so it's processed quickly on event dispatch
-                       if ( selector ) {
-                               handleObj.quick = quickParse( selector );
-                               if ( !handleObj.quick && jQuery.expr.match.POS.test( selector ) ) {
-                                       handleObj.isPositional = true;
-                               }
-                       }
-
-                       // Init the event handler queue if we're the first
-                       handlers = events[ type ];
-                       if ( !handlers ) {
-                               handlers = events[ type ] = [];
-                               handlers.delegateCount = 0;
-
-                               // Only use addEventListener/attachEvent if the special events handler returns false
-                               if ( !special.setup || special.setup.call( elem, data, namespaces, eventHandle ) === false ) {
-                                       // Bind the global event handler to the element
-                                       if ( elem.addEventListener ) {
-                                               elem.addEventListener( type, eventHandle, false );
-
-                                       } else if ( elem.attachEvent ) {
-                                               elem.attachEvent( "on" + type, eventHandle );
-                                       }
-                               }
-                       }
-
-                       if ( special.add ) {
-                               special.add.call( elem, handleObj );
-
-                               if ( !handleObj.handler.guid ) {
-                                       handleObj.handler.guid = handler.guid;
-                               }
-                       }
-
-                       // Add to the element's handler list, delegates in front
-                       if ( selector ) {
-                               handlers.splice( handlers.delegateCount++, 0, handleObj );
-                       } else {
-                               handlers.push( handleObj );
-                       }
-
-                       // Keep track of which events have ever been used, for event optimization
-                       jQuery.event.global[ type ] = true;
-               }
-
-               // Nullify elem to prevent memory leaks in IE
-               elem = null;
-       },
-
-       global: {},
-
-       // Detach an event or set of events from an element
-       remove: function( elem, types, handler, selector ) {
-
-               var elemData = jQuery.hasData( elem ) && jQuery._data( elem ),
-                       t, tns, type, namespaces, origCount,
-                       j, events, special, handle, eventType, handleObj;
-
-               if ( !elemData || !(events = elemData.events) ) {
-                       return;
-               }
-
-               // Once for each type.namespace in types; type may be omitted
-               types = hoverHack( types || "" ).split(" ");
-               for ( t = 0; t < types.length; t++ ) {
-                       tns = rtypenamespace.exec( types[t] ) || [];
-                       type = tns[1];
-                       namespaces = tns[2];
-
-                       // Unbind all events (on this namespace, if provided) for the element
-                       if ( !type ) {
-                               namespaces = namespaces? "." + namespaces : "";
-                               for ( j in events ) {
-                                       jQuery.event.remove( elem, j + namespaces, handler, selector );
-                               }
-                               return;
-                       }
-
-                       special = jQuery.event.special[ type ] || {};
-                       type = ( selector? special.delegateType : special.bindType ) || type;
-                       eventType = events[ type ] || [];
-                       origCount = eventType.length;
-                       namespaces = namespaces ? new RegExp("(^|\\.)" + namespaces.split(".").sort().join("\\.(?:.*\\.)?") + "(\\.|$)") : null;
-
-                       // Only need to loop for special events or selective removal
-                       if ( handler || namespaces || selector || special.remove ) {
-                               for ( j = 0; j < eventType.length; j++ ) {
-                                       handleObj = eventType[ j ];
-
-                                       if ( !handler || handler.guid === handleObj.guid ) {
-                                               if ( !namespaces || namespaces.test( handleObj.namespace ) ) {
-                                                       if ( !selector || selector === handleObj.selector || selector === "**" && handleObj.selector ) {
-                                                               eventType.splice( j--, 1 );
-
-                                                               if ( handleObj.selector ) {
-                                                                       eventType.delegateCount--;
-                                                               }
-                                                               if ( special.remove ) {
-                                                                       special.remove.call( elem, handleObj );
-                                                               }
-                                                       }
-                                               }
-                                       }
-                               }
-                       } else {
-                               // Removing all events
-                               eventType.length = 0;
-                       }
-
-                       // Remove generic event handler if we removed something and no more handlers exist
-                       // (avoids potential for endless recursion during removal of special event handlers)
-                       if ( eventType.length === 0 && origCount !== eventType.length ) {
-                               if ( !special.teardown || special.teardown.call( elem, namespaces ) === false ) {
-                                       jQuery.removeEvent( elem, type, elemData.handle );
-                               }
-
-                               delete events[ type ];
-                       }
-               }
-
-               // Remove the expando if it's no longer used
-               if ( jQuery.isEmptyObject( events ) ) {
-                       handle = elemData.handle;
-                       if ( handle ) {
-                               handle.elem = null;
-                       }
-
-                       // removeData also checks for emptiness and clears the expando if empty
-                       // so use it instead of delete
-                       jQuery.removeData( elem, [ "events", "handle" ], true );
-               }
-       },
-
-       // Events that are safe to short-circuit if no handlers are attached.
-       // Native DOM events should not be added, they may have inline handlers.
-       customEvent: {
-               "getData": true,
-               "setData": true,
-               "changeData": true
-       },
-
-       trigger: function( event, data, elem, onlyHandlers ) {
-               // Don't do events on text and comment nodes
-               if ( elem && (elem.nodeType === 3 || elem.nodeType === 8) ) {
-                       return;
-               }
-
-               // Event object or event type
-               var type = event.type || event,
-                       namespaces = [],
-                       cache, exclusive, i, cur, old, ontype, special, handle, eventPath, bubbleType;
-
-               if ( type.indexOf( "!" ) >= 0 ) {
-                       // Exclusive events trigger only for the exact event (no namespaces)
-                       type = type.slice(0, -1);
-                       exclusive = true;
-               }
-
-               if ( type.indexOf( "." ) >= 0 ) {
-                       // Namespaced trigger; create a regexp to match event type in handle()
-                       namespaces = type.split(".");
-                       type = namespaces.shift();
-                       namespaces.sort();
-               }
-
-               if ( (!elem || jQuery.event.customEvent[ type ]) && !jQuery.event.global[ type ] ) {
-                       // No jQuery handlers for this event type, and it can't have inline handlers
-                       return;
-               }
-
-               // Caller can pass in an Event, Object, or just an event type string
-               event = typeof event === "object" ?
-                       // jQuery.Event object
-                       event[ jQuery.expando ] ? event :
-                       // Object literal
-                       new jQuery.Event( type, event ) :
-                       // Just the event type (string)
-                       new jQuery.Event( type );
-
-               event.type = type;
-               event.isTrigger = true;
-               event.exclusive = exclusive;
-               event.namespace = namespaces.join( "." );
-               event.namespace_re = event.namespace? new RegExp("(^|\\.)" + namespaces.join("\\.(?:.*\\.)?") + "(\\.|$)") : null;
-               ontype = type.indexOf( ":" ) < 0 ? "on" + type : "";
-
-               // triggerHandler() and global events don't bubble or run the default action
-               if ( onlyHandlers || !elem ) {
-                       event.preventDefault();
-               }
-
-               // Handle a global trigger
-               if ( !elem ) {
-
-                       // TODO: Stop taunting the data cache; remove global events and always attach to document
-                       cache = jQuery.cache;
-                       for ( i in cache ) {
-                               if ( cache[ i ].events && cache[ i ].events[ type ] ) {
-                                       jQuery.event.trigger( event, data, cache[ i ].handle.elem, true );
-                               }
-                       }
-                       return;
-               }
-
-               // Clean up the event in case it is being reused
-               event.result = undefined;
-               if ( !event.target ) {
-                       event.target = elem;
-               }
-
-               // Clone any incoming data and prepend the event, creating the handler arg list
-               data = data != null ? jQuery.makeArray( data ) : [];
-               data.unshift( event );
-
-               // Allow special events to draw outside the lines
-               special = jQuery.event.special[ type ] || {};
-               if ( special.trigger && special.trigger.apply( elem, data ) === false ) {
-                       return;
-               }
-
-               // Determine event propagation path in advance, per W3C events spec (#9951)
-               // Bubble up to document, then to window; watch for a global ownerDocument var (#9724)
-               eventPath = [[ elem, special.bindType || type ]];
-               if ( !onlyHandlers && !special.noBubble && !jQuery.isWindow( elem ) ) {
-
-                       bubbleType = special.delegateType || type;
-                       old = null;
-                       for ( cur = elem.parentNode; cur; cur = cur.parentNode ) {
-                               eventPath.push([ cur, bubbleType ]);
-                               old = cur;
-                       }
-
-                       // Only add window if we got to document (e.g., not plain obj or detached DOM)
-                       if ( old && old === elem.ownerDocument ) {
-                               eventPath.push([ old.defaultView || old.parentWindow || window, bubbleType ]);
-                       }
-               }
-
-               // Fire handlers on the event path
-               for ( i = 0; i < eventPath.length; i++ ) {
-
-                       cur = eventPath[i][0];
-                       event.type = eventPath[i][1];
-
-                       handle = ( jQuery._data( cur, "events" ) || {} )[ event.type ] && jQuery._data( cur, "handle" );
-                       if ( handle ) {
-                               handle.apply( cur, data );
-                       }
-                       handle = ontype && cur[ ontype ];
-                       if ( handle && jQuery.acceptData( cur ) ) {
-                               handle.apply( cur, data );
-                       }
-
-                       if ( event.isPropagationStopped() ) {
-                               break;
-                       }
-               }
-               event.type = type;
-
-               // If nobody prevented the default action, do it now
-               if ( !event.isDefaultPrevented() ) {
-
-                       if ( (!special._default || special._default.apply( elem.ownerDocument, data ) === false) &&
-                               !(type === "click" && jQuery.nodeName( elem, "a" )) && jQuery.acceptData( elem ) ) {
-
-                               // Call a native DOM method on the target with the same name name as the event.
-                               // Can't use an .isFunction() check here because IE6/7 fails that test.
-                               // Don't do default actions on window, that's where global variables be (#6170)
-                               // IE<9 dies on focus/blur to hidden element (#1486)
-                               if ( ontype && elem[ type ] && ((type !== "focus" && type !== "blur") || event.target.offsetWidth !== 0) && !jQuery.isWindow( elem ) ) {
-
-                                       // Don't re-trigger an onFOO event when we call its FOO() method
-                                       old = elem[ ontype ];
-
-                                       if ( old ) {
-                                               elem[ ontype ] = null;
-                                       }
-
-                                       // Prevent re-triggering of the same event, since we already bubbled it above
-                                       jQuery.event.triggered = type;
-                                       elem[ type ]();
-                                       jQuery.event.triggered = undefined;
-
-                                       if ( old ) {
-                                               elem[ ontype ] = old;
-                                       }
-                               }
-                       }
-               }
-
-               return event.result;
-       },
-
-       dispatch: function( event ) {
-
-               // Make a writable jQuery.Event from the native event object
-               event = jQuery.event.fix( event || window.event );
-
-               var handlers = ( (jQuery._data( this, "events" ) || {} )[ event.type ] || []),
-                       delegateCount = handlers.delegateCount,
-                       args = [].slice.call( arguments, 0 ),
-                       run_all = !event.exclusive && !event.namespace,
-                       specialHandle = ( jQuery.event.special[ event.type ] || {} ).handle,
-                       handlerQueue = [],
-                       i, j, cur, ret, selMatch, matched, matches, handleObj, sel, hit, related;
-
-               // Use the fix-ed jQuery.Event rather than the (read-only) native event
-               args[0] = event;
-               event.delegateTarget = this;
-
-               // Determine handlers that should run if there are delegated events
-               // Avoid disabled elements in IE (#6911) and non-left-click bubbling in Firefox (#3861)
-               if ( delegateCount && !event.target.disabled && !(event.button && event.type === "click") ) {
-
-                       for ( cur = event.target; cur != this; cur = cur.parentNode || this ) {
-                               selMatch = {};
-                               matches = [];
-                               for ( i = 0; i < delegateCount; i++ ) {
-                                       handleObj = handlers[ i ];
-                                       sel = handleObj.selector;
-                                       hit = selMatch[ sel ];
-
-                                       if ( handleObj.isPositional ) {
-                                               // Since .is() does not work for positionals; see http://jsfiddle.net/eJ4yd/3/
-                                               hit = ( hit || (selMatch[ sel ] = jQuery( sel )) ).index( cur ) >= 0;
-                                       } else if ( hit === undefined ) {
-                                               hit = selMatch[ sel ] = ( handleObj.quick ? quickIs( cur, handleObj.quick ) : jQuery( cur ).is( sel ) );
-                                       }
-                                       if ( hit ) {
-                                               matches.push( handleObj );
-                                       }
-                               }
-                               if ( matches.length ) {
-                                       handlerQueue.push({ elem: cur, matches: matches });
-                               }
-                       }
-               }
-
-               // Add the remaining (directly-bound) handlers
-               if ( handlers.length > delegateCount ) {
-                       handlerQueue.push({ elem: this, matches: handlers.slice( delegateCount ) });
-               }
-
-               // Run delegates first; they may want to stop propagation beneath us
-               for ( i = 0; i < handlerQueue.length && !event.isPropagationStopped(); i++ ) {
-                       matched = handlerQueue[ i ];
-                       event.currentTarget = matched.elem;
-
-                       for ( j = 0; j < matched.matches.length && !event.isImmediatePropagationStopped(); j++ ) {
-                               handleObj = matched.matches[ j ];
-
-                               // Triggered event must either 1) be non-exclusive and have no namespace, or
-                               // 2) have namespace(s) a subset or equal to those in the bound event (both can have no namespace).
-                               if ( run_all || (!event.namespace && !handleObj.namespace) || event.namespace_re && event.namespace_re.test( handleObj.namespace ) ) {
-
-                                       event.data = handleObj.data;
-                                       event.handleObj = handleObj;
-
-                                       ret = ( specialHandle || handleObj.handler ).apply( matched.elem, args );
-
-                                       if ( ret !== undefined ) {
-                                               event.result = ret;
-                                               if ( ret === false ) {
-                                                       event.preventDefault();
-                                                       event.stopPropagation();
-                                               }
-                                       }
-                               }
-                       }
-               }
-
-               return event.result;
-       },
-
-       // Includes some event props shared by KeyEvent and MouseEvent
-       // *** attrChange attrName relatedNode srcElement  are not normalized, non-W3C, deprecated, will be removed in 1.8 ***
-       props: "attrChange attrName relatedNode srcElement altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "),
-
-       fixHooks: {},
-
-       keyHooks: {
-               props: "char charCode key keyCode".split(" "),
-               filter: function( event, original ) {
-
-                       // Add which for key events
-                       if ( event.which == null ) {
-                               event.which = original.charCode != null ? original.charCode : original.keyCode;
-                       }
-
-                       return event;
-               }
-       },
-
-       mouseHooks: {
-               props: "button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement wheelDelta".split(" "),
-               filter: function( event, original ) {
-                       var eventDoc, doc, body,
-                               button = original.button,
-                               fromElement = original.fromElement;
-
-                       // Calculate pageX/Y if missing and clientX/Y available
-                       if ( event.pageX == null && original.clientX != null ) {
-                               eventDoc = event.target.ownerDocument || document;
-                               doc = eventDoc.documentElement;
-                               body = eventDoc.body;
-
-                               event.pageX = original.clientX + ( doc && doc.scrollLeft || body && body.scrollLeft || 0 ) - ( doc && doc.clientLeft || body && body.clientLeft || 0 );
-                               event.pageY = original.clientY + ( doc && doc.scrollTop  || body && body.scrollTop  || 0 ) - ( doc && doc.clientTop  || body && body.clientTop  || 0 );
-                       }
-
-                       // Add relatedTarget, if necessary
-                       if ( !event.relatedTarget && fromElement ) {
-                               event.relatedTarget = fromElement === event.target ? original.toElement : fromElement;
-                       }
-
-                       // Add which for click: 1 === left; 2 === middle; 3 === right
-                       // Note: button is not normalized, so don't use it
-                       if ( !event.which && button !== undefined ) {
-                               event.which = ( button & 1 ? 1 : ( button & 2 ? 3 : ( button & 4 ? 2 : 0 ) ) );
-                       }
-
-                       return event;
-               }
-       },
-
-       fix: function( event ) {
-               if ( event[ jQuery.expando ] ) {
-                       return event;
-               }
-
-               // Create a writable copy of the event object and normalize some properties
-               var i, prop,
-                       originalEvent = event,
-                       fixHook = jQuery.event.fixHooks[ event.type ] || {},
-                       copy = fixHook.props ? this.props.concat( fixHook.props ) : this.props;
-
-               event = jQuery.Event( originalEvent );
-
-               for ( i = copy.length; i; ) {
-                       prop = copy[ --i ];
-                       event[ prop ] = originalEvent[ prop ];
-               }
-
-               // Fix target property, if necessary (#1925, IE 6/7/8 & Safari2)
-               if ( !event.target ) {
-                       event.target = originalEvent.srcElement || document;
-               }
-
-               // Target should not be a text node (#504, Safari)
-               if ( event.target.nodeType === 3 ) {
-                       event.target = event.target.parentNode;
-               }
-
-               // For mouse/key events; add metaKey if it's not there (#3368, IE6/7/8)
-               if ( event.metaKey === undefined ) {
-                       event.metaKey = event.ctrlKey;
-               }
-
-               return fixHook.filter? fixHook.filter( event, originalEvent ) : event;
-       },
-
-       special: {
-               ready: {
-                       // Make sure the ready event is setup
-                       setup: jQuery.bindReady
-               },
-
-               focus: {
-                       delegateType: "focusin",
-                       noBubble: true
-               },
-               blur: {
-                       delegateType: "focusout",
-                       noBubble: true
-               },
-
-               beforeunload: {
-                       setup: function( data, namespaces, eventHandle ) {
-                               // We only want to do this special case on windows
-                               if ( jQuery.isWindow( this ) ) {
-                                       this.onbeforeunload = eventHandle;
-                               }
-                       },
-
-                       teardown: function( namespaces, eventHandle ) {
-                               if ( this.onbeforeunload === eventHandle ) {
-                                       this.onbeforeunload = null;
-                               }
-                       }
-               }
-       },
-
-       simulate: function( type, elem, event, bubble ) {
-               // Piggyback on a donor event to simulate a different one.
-               // Fake originalEvent to avoid donor's stopPropagation, but if the
-               // simulated event prevents default then we do the same on the donor.
-               var e = jQuery.extend(
-                       new jQuery.Event(),
-                       event,
-                       { type: type,
-                               isSimulated: true,
-                               originalEvent: {}
-                       }
-               );
-               if ( bubble ) {
-                       jQuery.event.trigger( e, null, elem );
-               } else {
-                       jQuery.event.dispatch.call( elem, e );
-               }
-               if ( e.isDefaultPrevented() ) {
-                       event.preventDefault();
-               }
-       }
-};
-
-// Some plugins are using, but it's undocumented/deprecated and will be removed.
-// The 1.7 special event interface should provide all the hooks needed now.
-jQuery.event.handle = jQuery.event.dispatch;
-
-jQuery.removeEvent = document.removeEventListener ?
-       function( elem, type, handle ) {
-               if ( elem.removeEventListener ) {
-                       elem.removeEventListener( type, handle, false );
-               }
-       } :
-       function( elem, type, handle ) {
-               if ( elem.detachEvent ) {
-                       elem.detachEvent( "on" + type, handle );
-               }
-       };
-
-jQuery.Event = function( src, props ) {
-       // Allow instantiation without the 'new' keyword
-       if ( !(this instanceof jQuery.Event) ) {
-               return new jQuery.Event( src, props );
-       }
-
-       // Event object
-       if ( src && src.type ) {
-               this.originalEvent = src;
-               this.type = src.type;
-
-               // Events bubbling up the document may have been marked as prevented
-               // by a handler lower down the tree; reflect the correct value.
-               this.isDefaultPrevented = ( src.defaultPrevented || src.returnValue === false ||
-                       src.getPreventDefault && src.getPreventDefault() ) ? returnTrue : returnFalse;
-
-       // Event type
-       } else {
-               this.type = src;
-       }
-
-       // Put explicitly provided properties onto the event object
-       if ( props ) {
-               jQuery.extend( this, props );
-       }
-
-       // Create a timestamp if incoming event doesn't have one
-       this.timeStamp = src && src.timeStamp || jQuery.now();
-
-       // Mark it as fixed
-       this[ jQuery.expando ] = true;
-};
-
-function returnFalse() {
-       return false;
-}
-function returnTrue() {
-       return true;
-}
-
-// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding
-// http://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html
-jQuery.Event.prototype = {
-       preventDefault: function() {
-               this.isDefaultPrevented = returnTrue;
-
-               var e = this.originalEvent;
-               if ( !e ) {
-                       return;
-               }
-
-               // if preventDefault exists run it on the original event
-               if ( e.preventDefault ) {
-                       e.preventDefault();
-
-               // otherwise set the returnValue property of the original event to false (IE)
-               } else {
-                       e.returnValue = false;
-               }
-       },
-       stopPropagation: function() {
-               this.isPropagationStopped = returnTrue;
-
-               var e = this.originalEvent;
-               if ( !e ) {
-                       return;
-               }
-               // if stopPropagation exists run it on the original event
-               if ( e.stopPropagation ) {
-                       e.stopPropagation();
-               }
-               // otherwise set the cancelBubble property of the original event to true (IE)
-               e.cancelBubble = true;
-       },
-       stopImmediatePropagation: function() {
-               this.isImmediatePropagationStopped = returnTrue;
-               this.stopPropagation();
-       },
-       isDefaultPrevented: returnFalse,
-       isPropagationStopped: returnFalse,
-       isImmediatePropagationStopped: returnFalse
-};
-
-// Create mouseenter/leave events using mouseover/out and event-time checks
-jQuery.each({
-       mouseenter: "mouseover",
-       mouseleave: "mouseout"
-}, function( orig, fix ) {
-       jQuery.event.special[ orig ] = jQuery.event.special[ fix ] = {
-               delegateType: fix,
-               bindType: fix,
-
-               handle: function( event ) {
-                       var target = this,
-                               related = event.relatedTarget,
-                               handleObj = event.handleObj,
-                               selector = handleObj.selector,
-                               oldType, ret;
-
-                       // For a real mouseover/out, always call the handler; for
-                       // mousenter/leave call the handler if related is outside the target.
-                       // NB: No relatedTarget if the mouse left/entered the browser window
-                       if ( !related || handleObj.origType === event.type || (related !== target && !jQuery.contains( target, related )) ) {
-                               oldType = event.type;
-                               event.type = handleObj.origType;
-                               ret = handleObj.handler.apply( this, arguments );
-                               event.type = oldType;
-                       }
-                       return ret;
-               }
-       };
-});
-
-// IE submit delegation
-if ( !jQuery.support.submitBubbles ) {
-
-       jQuery.event.special.submit = {
-               setup: function() {
-                       // Only need this for delegated form submit events
-                       if ( jQuery.nodeName( this, "form" ) ) {
-                               return false;
-                       }
-
-                       // Lazy-add a submit handler when a descendant form may potentially be submitted
-                       jQuery.event.add( this, "click._submit keypress._submit", function( e ) {
-                               // Node name check avoids a VML-related crash in IE (#9807)
-                               var elem = e.target,
-                                       form = jQuery.nodeName( elem, "input" ) || jQuery.nodeName( elem, "button" ) ? elem.form : undefined;
-                               if ( form && !form._submit_attached ) {
-                                       jQuery.event.add( form, "submit._submit", function( event ) {
-                                               // Form was submitted, bubble the event up the tree
-                                               if ( this.parentNode ) {
-                                                       jQuery.event.simulate( "submit", this.parentNode, event, true );
-                                               }
-                                       });
-                                       form._submit_attached = true;
-                               }
-                       });
-                       // return undefined since we don't need an event listener
-               },
-
-               teardown: function() {
-                       // Only need this for delegated form submit events
-                       if ( jQuery.nodeName( this, "form" ) ) {
-                               return false;
-                       }
-
-                       // Remove delegated handlers; cleanData eventually reaps submit handlers attached above
-                       jQuery.event.remove( this, "._submit" );
-               }
-       };
-}
-
-// IE change delegation and checkbox/radio fix
-if ( !jQuery.support.changeBubbles ) {
-
-       jQuery.event.special.change = {
-
-               setup: function() {
-
-                       if ( rformElems.test( this.nodeName ) ) {
-                               // IE doesn't fire change on a check/radio until blur; trigger it on click
-                               // after a propertychange. Eat the blur-change in special.change.handle.
-                               // This still fires onchange a second time for check/radio after blur.
-                               if ( this.type === "checkbox" || this.type === "radio" ) {
-                                       jQuery.event.add( this, "propertychange._change", function( event ) {
-                                               if ( event.originalEvent.propertyName === "checked" ) {
-                                                       this._just_changed = true;
-                                               }
-                                       });
-                                       jQuery.event.add( this, "click._change", function( event ) {
-                                               if ( this._just_changed ) {
-                                                       this._just_changed = false;
-                                                       jQuery.event.simulate( "change", this, event, true );
-                                               }
-                                       });
-                               }
-                               return false;
-                       }
-                       // Delegated event; lazy-add a change handler on descendant inputs
-                       jQuery.event.add( this, "beforeactivate._change", function( e ) {
-                               var elem = e.target;
-
-                               if ( rformElems.test( elem.nodeName ) && !elem._change_attached ) {
-                                       jQuery.event.add( elem, "change._change", function( event ) {
-                                               if ( this.parentNode && !event.isSimulated ) {
-                                                       jQuery.event.simulate( "change", this.parentNode, event, true );
-                                               }
-                                       });
-                                       elem._change_attached = true;
-                               }
-                       });
-               },
-
-               handle: function( event ) {
-                       var elem = event.target;
-
-                       // Swallow native change events from checkbox/radio, we already triggered them above
-                       if ( this !== elem || event.isSimulated || event.isTrigger || (elem.type !== "radio" && elem.type !== "checkbox") ) {
-                               return event.handleObj.handler.apply( this, arguments );
-                       }
-               },
-
-               teardown: function() {
-                       jQuery.event.remove( this, "._change" );
-
-                       return rformElems.test( this.nodeName );
-               }
-       };
-}
-
-// Create "bubbling" focus and blur events
-if ( !jQuery.support.focusinBubbles ) {
-       jQuery.each({ focus: "focusin", blur: "focusout" }, function( orig, fix ) {
-
-               // Attach a single capturing handler while someone wants focusin/focusout
-               var attaches = 0,
-                       handler = function( event ) {
-                               jQuery.event.simulate( fix, event.target, jQuery.event.fix( event ), true );
-                       };
-
-               jQuery.event.special[ fix ] = {
-                       setup: function() {
-                               if ( attaches++ === 0 ) {
-                                       document.addEventListener( orig, handler, true );
-                               }
-                       },
-                       teardown: function() {
-                               if ( --attaches === 0 ) {
-                                       document.removeEventListener( orig, handler, true );
-                               }
-                       }
-               };
-       });
-}
-
-jQuery.fn.extend({
-
-       on: function( types, selector, data, fn, /*INTERNAL*/ one ) {
-               var origFn, type;
-
-               // Types can be a map of types/handlers
-               if ( typeof types === "object" ) {
-                       // ( types-Object, selector, data )
-                       if ( typeof selector !== "string" ) {
-                               // ( types-Object, data )
-                               data = selector;
-                               selector = undefined;
-                       }
-                       for ( type in types ) {
-                               this.on( type, selector, data, types[ type ], one );
-                       }
-                       return this;
-               }
-
-               if ( data == null && fn == null ) {
-                       // ( types, fn )
-                       fn = selector;
-                       data = selector = undefined;
-               } else if ( fn == null ) {
-                       if ( typeof selector === "string" ) {
-                               // ( types, selector, fn )
-                               fn = data;
-                               data = undefined;
-                       } else {
-                               // ( types, data, fn )
-                               fn = data;
-                               data = selector;
-                               selector = undefined;
-                       }
-               }
-               if ( fn === false ) {
-                       fn = returnFalse;
-               } else if ( !fn ) {
-                       return this;
-               }
-
-               if ( one === 1 ) {
-                       origFn = fn;
-                       fn = function( event ) {
-                               // Can use an empty set, since event contains the info
-                               jQuery().off( event );
-                               return origFn.apply( this, arguments );
-                       };
-                       // Use same guid so caller can remove using origFn
-                       fn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ );
-               }
-               return this.each( function() {
-                       jQuery.event.add( this, types, fn, data, selector );
-               });
-       },
-       one: function( types, selector, data, fn ) {
-               return this.on.call( this, types, selector, data, fn, 1 );
-       },
-       off: function( types, selector, fn ) {
-               if ( types && types.preventDefault && types.handleObj ) {
-                       // ( event )  dispatched jQuery.Event
-                       var handleObj = types.handleObj;
-                       jQuery( types.delegateTarget ).off(
-                               handleObj.namespace? handleObj.type + "." + handleObj.namespace : handleObj.type,
-                               handleObj.selector,
-                               handleObj.handler
-                       );
-                       return this;
-               }
-               if ( typeof types === "object" ) {
-                       // ( types-object [, selector] )
-                       for ( var type in types ) {
-                               this.off( type, selector, types[ type ] );
-                       }
-                       return this;
-               }
-               if ( selector === false || typeof selector === "function" ) {
-                       // ( types [, fn] )
-                       fn = selector;
-                       selector = undefined;
-               }
-               if ( fn === false ) {
-                       fn = returnFalse;
-               }
-               return this.each(function() {
-                       jQuery.event.remove( this, types, fn, selector );
-               });
-       },
-
-       bind: function( types, data, fn ) {
-               return this.on( types, null, data, fn );
-       },
-       unbind: function( types, fn ) {
-               return this.off( types, null, fn );
-       },
-
-       live: function( types, data, fn ) {
-               jQuery( this.context ).on( types, this.selector, data, fn );
-               return this;
-       },
-       die: function( types, fn ) {
-               jQuery( this.context ).off( types, this.selector || "**", fn );
-               return this;
-       },
-
-       delegate: function( selector, types, data, fn ) {
-               return this.on( types, selector, data, fn );
-       },
-       undelegate: function( selector, types, fn ) {
-               // ( namespace ) or ( selector, types [, fn] )
-               return arguments.length == 1? this.off( selector, "**" ) : this.off( types, selector, fn );
-       },
-
-       trigger: function( type, data ) {
-               return this.each(function() {
-                       jQuery.event.trigger( type, data, this );
-               });
-       },
-       triggerHandler: function( type, data ) {
-               if ( this[0] ) {
-                       return jQuery.event.trigger( type, data, this[0], true );
-               }
-       },
-
-       toggle: function( fn ) {
-               // Save reference to arguments for access in closure
-               var args = arguments,
-                       guid = fn.guid || jQuery.guid++,
-                       i = 0,
-                       toggler = function( event ) {
-                               // Figure out which function to execute
-                               var lastToggle = ( jQuery._data( this, "lastToggle" + fn.guid ) || 0 ) % i;
-                               jQuery._data( this, "lastToggle" + fn.guid, lastToggle + 1 );
-
-                               // Make sure that clicks stop
-                               event.preventDefault();
-
-                               // and execute the function
-                               return args[ lastToggle ].apply( this, arguments ) || false;
-                       };
-
-               // link all the functions, so any of them can unbind this click handler
-               toggler.guid = guid;
-               while ( i < args.length ) {
-                       args[ i++ ].guid = guid;
-               }
-
-               return this.click( toggler );
-       },
-
-       hover: function( fnOver, fnOut ) {
-               return this.mouseenter( fnOver ).mouseleave( fnOut || fnOver );
-       }
-});
-
-jQuery.each( ("blur focus focusin focusout load resize scroll unload click dblclick " +
-       "mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave " +
-       "change select submit keydown keypress keyup error contextmenu").split(" "), function( i, name ) {
-
-       // Handle event binding
-       jQuery.fn[ name ] = function( data, fn ) {
-               if ( fn == null ) {
-                       fn = data;
-                       data = null;
-               }
-
-               return arguments.length > 0 ?
-                       this.bind( name, data, fn ) :
-                       this.trigger( name );
-       };
-
-       if ( jQuery.attrFn ) {
-               jQuery.attrFn[ name ] = true;
-       }
-
-       if ( rkeyEvent.test( name ) ) {
-               jQuery.event.fixHooks[ name ] = jQuery.event.keyHooks;
-       }
-
-       if ( rmouseEvent.test( name ) ) {
-               jQuery.event.fixHooks[ name ] = jQuery.event.mouseHooks;
-       }
-});
-
-
-
-/*!
- * Sizzle CSS Selector Engine
- *  Copyright 2011, The Dojo Foundation
- *  Released under the MIT, BSD, and GPL Licenses.
- *  More information: http://sizzlejs.com/
- */
-(function(){
-
-var chunker = /((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^\[\]]*\]|['"][^'"]*['"]|[^\[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,
-       expando = "sizcache" + (Math.random() + '').replace('.', ''),
-       done = 0,
-       toString = Object.prototype.toString,
-       hasDuplicate = false,
-       baseHasDuplicate = true,
-       rBackslash = /\\/g,
-       rReturn = /\r\n/g,
-       rNonWord = /\W/;
-
-// Here we check if the JavaScript engine is using some sort of
-// optimization where it does not always call our comparision
-// function. If that is the case, discard the hasDuplicate value.
-//   Thus far that includes Google Chrome.
-[0, 0].sort(function() {
-       baseHasDuplicate = false;
-       return 0;
-});
-
-var Sizzle = function( selector, context, results, seed ) {
-       results = results || [];
-       context = context || document;
-
-       var origContext = context;
-
-       if ( context.nodeType !== 1 && context.nodeType !== 9 ) {
-               return [];
-       }
-       
-       if ( !selector || typeof selector !== "string" ) {
-               return results;
-       }
-
-       var m, set, checkSet, extra, ret, cur, pop, i,
-               prune = true,
-               contextXML = Sizzle.isXML( context ),
-               parts = [],
-               soFar = selector;
-       
-       // Reset the position of the chunker regexp (start from head)
-       do {
-               chunker.exec( "" );
-               m = chunker.exec( soFar );
-
-               if ( m ) {
-                       soFar = m[3];
-               
-                       parts.push( m[1] );
-               
-                       if ( m[2] ) {
-                               extra = m[3];
-                               break;
-                       }
-               }
-       } while ( m );
-
-       if ( parts.length > 1 && origPOS.exec( selector ) ) {
-
-               if ( parts.length === 2 && Expr.relative[ parts[0] ] ) {
-                       set = posProcess( parts[0] + parts[1], context, seed );
-
-               } else {
-                       set = Expr.relative[ parts[0] ] ?
-                               [ context ] :
-                               Sizzle( parts.shift(), context );
-
-                       while ( parts.length ) {
-                               selector = parts.shift();
-
-                               if ( Expr.relative[ selector ] ) {
-                                       selector += parts.shift();
-                               }
-                               
-                               set = posProcess( selector, set, seed );
-                       }
-               }
-
-       } else {
-               // Take a shortcut and set the context if the root selector is an ID
-               // (but not if it'll be faster if the inner selector is an ID)
-               if ( !seed && parts.length > 1 && context.nodeType === 9 && !contextXML &&
-                               Expr.match.ID.test(parts[0]) && !Expr.match.ID.test(parts[parts.length - 1]) ) {
-
-                       ret = Sizzle.find( parts.shift(), context, contextXML );
-                       context = ret.expr ?
-                               Sizzle.filter( ret.expr, ret.set )[0] :
-                               ret.set[0];
-               }
-
-               if ( context ) {
-                       ret = seed ?
-                               { expr: parts.pop(), set: makeArray(seed) } :
-                               Sizzle.find( parts.pop(), parts.length === 1 && (parts[0] === "~" || parts[0] === "+") && context.parentNode ? context.parentNode : context, contextXML );
-
-                       set = ret.expr ?
-                               Sizzle.filter( ret.expr, ret.set ) :
-                               ret.set;
-
-                       if ( parts.length > 0 ) {
-                               checkSet = makeArray( set );
-
-                       } else {
-                               prune = false;
-                       }
-
-                       while ( parts.length ) {
-                               cur = parts.pop();
-                               pop = cur;
-
-                               if ( !Expr.relative[ cur ] ) {
-                                       cur = "";
-                               } else {
-                                       pop = parts.pop();
-                               }
-
-                               if ( pop == null ) {
-                                       pop = context;
-                               }
-
-                               Expr.relative[ cur ]( checkSet, pop, contextXML );
-                       }
-
-               } else {
-                       checkSet = parts = [];
-               }
-       }
-
-       if ( !checkSet ) {
-               checkSet = set;
-       }
-
-       if ( !checkSet ) {
-               Sizzle.error( cur || selector );
-       }
-
-       if ( toString.call(checkSet) === "[object Array]" ) {
-               if ( !prune ) {
-                       results.push.apply( results, checkSet );
-
-               } else if ( context && context.nodeType === 1 ) {
-                       for ( i = 0; checkSet[i] != null; i++ ) {
-                               if ( checkSet[i] && (checkSet[i] === true || checkSet[i].nodeType === 1 && Sizzle.contains(context, checkSet[i])) ) {
-                                       results.push( set[i] );
-                               }
-                       }
-
-               } else {
-                       for ( i = 0; checkSet[i] != null; i++ ) {
-                               if ( checkSet[i] && checkSet[i].nodeType === 1 ) {
-                                       results.push( set[i] );
-                               }
-                       }
-               }
-
-       } else {
-               makeArray( checkSet, results );
-       }
-
-       if ( extra ) {
-               Sizzle( extra, origContext, results, seed );
-               Sizzle.uniqueSort( results );
-       }
-
-       return results;
-};
-
-Sizzle.uniqueSort = function( results ) {
-       if ( sortOrder ) {
-               hasDuplicate = baseHasDuplicate;
-               results.sort( sortOrder );
-
-               if ( hasDuplicate ) {
-                       for ( var i = 1; i < results.length; i++ ) {
-                               if ( results[i] === results[ i - 1 ] ) {
-                                       results.splice( i--, 1 );
-                               }
-                       }
-               }
-       }
-
-       return results;
-};
-
-Sizzle.matches = function( expr, set ) {
-       return Sizzle( expr, null, null, set );
-};
-
-Sizzle.matchesSelector = function( node, expr ) {
-       return Sizzle( expr, null, null, [node] ).length > 0;
-};
-
-Sizzle.find = function( expr, context, isXML ) {
-       var set, i, len, match, type, left;
-
-       if ( !expr ) {
-               return [];
-       }
-
-       for ( i = 0, len = Expr.order.length; i < len; i++ ) {
-               type = Expr.order[i];
-               
-               if ( (match = Expr.leftMatch[ type ].exec( expr )) ) {
-                       left = match[1];
-                       match.splice( 1, 1 );
-
-                       if ( left.substr( left.length - 1 ) !== "\\" ) {
-                               match[1] = (match[1] || "").replace( rBackslash, "" );
-                               set = Expr.find[ type ]( match, context, isXML );
-
-                               if ( set != null ) {
-                                       expr = expr.replace( Expr.match[ type ], "" );
-                                       break;
-                               }
-                       }
-               }
-       }
-
-       if ( !set ) {
-               set = typeof context.getElementsByTagName !== "undefined" ?
-                       context.getElementsByTagName( "*" ) :
-                       [];
-       }
-
-       return { set: set, expr: expr };
-};
-
-Sizzle.filter = function( expr, set, inplace, not ) {
-       var match, anyFound,
-               type, found, item, filter, left,
-               i, pass,
-               old = expr,
-               result = [],
-               curLoop = set,
-               isXMLFilter = set && set[0] && Sizzle.isXML( set[0] );
-
-       while ( expr && set.length ) {
-               for ( type in Expr.filter ) {
-                       if ( (match = Expr.leftMatch[ type ].exec( expr )) != null && match[2] ) {
-                               filter = Expr.filter[ type ];
-                               left = match[1];
-
-                               anyFound = false;
-
-                               match.splice(1,1);
-
-                               if ( left.substr( left.length - 1 ) === "\\" ) {
-                                       continue;
-                               }
-
-                               if ( curLoop === result ) {
-                                       result = [];
-                               }
-
-                               if ( Expr.preFilter[ type ] ) {
-                                       match = Expr.preFilter[ type ]( match, curLoop, inplace, result, not, isXMLFilter );
-
-                                       if ( !match ) {
-                                               anyFound = found = true;
-
-                                       } else if ( match === true ) {
-                                               continue;
-                                       }
-                               }
-
-                               if ( match ) {
-                                       for ( i = 0; (item = curLoop[i]) != null; i++ ) {
-                                               if ( item ) {
-                                                       found = filter( item, match, i, curLoop );
-                                                       pass = not ^ found;
-
-                                                       if ( inplace && found != null ) {
-                                                               if ( pass ) {
-                                                                       anyFound = true;
-
-                                                               } else {
-                                                                       curLoop[i] = false;
-                                                               }
-
-                                                       } else if ( pass ) {
-                                                               result.push( item );
-                                                               anyFound = true;
-                                                       }
-                                               }
-                                       }
-                               }
-
-                               if ( found !== undefined ) {
-                                       if ( !inplace ) {
-                                               curLoop = result;
-                                       }
-
-                                       expr = expr.replace( Expr.match[ type ], "" );
-
-                                       if ( !anyFound ) {
-                                               return [];
-                                       }
-
-                                       break;
-                               }
-                       }
-               }
-
-               // Improper expression
-               if ( expr === old ) {
-                       if ( anyFound == null ) {
-                               Sizzle.error( expr );
-
-                       } else {
-                               break;
-                       }
-               }
-
-               old = expr;
-       }
-
-       return curLoop;
-};
-
-Sizzle.error = function( msg ) {
-       throw "Syntax error, unrecognized expression: " + msg;
-};
-
-/**
- * Utility function for retreiving the text value of an array of DOM nodes
- * @param {Array|Element} elem
- */
-var getText = Sizzle.getText = function( elem ) {
-    var i, node,
-               nodeType = elem.nodeType,
-               ret = "";
-
-       if ( nodeType ) {
-               if ( nodeType === 1 ) {
-                       // Use textContent || innerText for elements
-                       if ( typeof elem.textContent === 'string' ) {
-                               return elem.textContent;
-                       } else if ( typeof elem.innerText === 'string' ) {
-                               // Replace IE's carriage returns
-                               return elem.innerText.replace( rReturn, '' );
-                       } else {
-                               // Traverse it's children
-                               for ( elem = elem.firstChild; elem; elem = elem.nextSibling) {
-                                       ret += getText( elem );
-                               }
-                       }
-               } else if ( nodeType === 3 || nodeType === 4 ) {
-                       return elem.nodeValue;
-               }
-       } else {
-
-               // If no nodeType, this is expected to be an array
-               for ( i = 0; (node = elem[i]); i++ ) {
-                       // Do not traverse comment nodes
-                       if ( node.nodeType !== 8 ) {
-                               ret += getText( node );
-                       }
-               }
-       }
-       return ret;
-};
-
-var Expr = Sizzle.selectors = {
-       order: [ "ID", "NAME", "TAG" ],
-
-       match: {
-               ID: /#((?:[\w\u00c0-\uFFFF\-]|\\.)+)/,
-               CLASS: /\.((?:[\w\u00c0-\uFFFF\-]|\\.)+)/,
-               NAME: /\[name=['"]*((?:[\w\u00c0-\uFFFF\-]|\\.)+)['"]*\]/,
-               ATTR: /\[\s*((?:[\w\u00c0-\uFFFF\-]|\\.)+)\s*(?:(\S?=)\s*(?:(['"])(.*?)\3|(#?(?:[\w\u00c0-\uFFFF\-]|\\.)*)|)|)\s*\]/,
-               TAG: /^((?:[\w\u00c0-\uFFFF\*\-]|\\.)+)/,
-               CHILD: /:(only|nth|last|first)-child(?:\(\s*(even|odd|(?:[+\-]?\d+|(?:[+\-]?\d*)?n\s*(?:[+\-]\s*\d+)?))\s*\))?/,
-               POS: /:(nth|eq|gt|lt|first|last|even|odd)(?:\((\d*)\))?(?=[^\-]|$)/,
-               PSEUDO: /:((?:[\w\u00c0-\uFFFF\-]|\\.)+)(?:\((['"]?)((?:\([^\)]+\)|[^\(\)]*)+)\2\))?/
-       },
-
-       leftMatch: {},
-
-       attrMap: {
-               "class": "className",
-               "for": "htmlFor"
-       },
-
-       attrHandle: {
-               href: function( elem ) {
-                       return elem.getAttribute( "href" );
-               },
-               type: function( elem ) {
-                       return elem.getAttribute( "type" );
-               }
-       },
-
-       relative: {
-               "+": function(checkSet, part){
-                       var isPartStr = typeof part === "string",
-                               isTag = isPartStr && !rNonWord.test( part ),
-                               isPartStrNotTag = isPartStr && !isTag;
-
-                       if ( isTag ) {
-                               part = part.toLowerCase();
-                       }
-
-                       for ( var i = 0, l = checkSet.length, elem; i < l; i++ ) {
-                               if ( (elem = checkSet[i]) ) {
-                                       while ( (elem = elem.previousSibling) && elem.nodeType !== 1 ) {}
-
-                                       checkSet[i] = isPartStrNotTag || elem && elem.nodeName.toLowerCase() === part ?
-                                               elem || false :
-                                               elem === part;
-                               }
-                       }
-
-                       if ( isPartStrNotTag ) {
-                               Sizzle.filter( part, checkSet, true );
-                       }
-               },
-
-               ">": function( checkSet, part ) {
-                       var elem,
-                               isPartStr = typeof part === "string",
-                               i = 0,
-                               l = checkSet.length;
-
-                       if ( isPartStr && !rNonWord.test( part ) ) {
-                               part = part.toLowerCase();
-
-                               for ( ; i < l; i++ ) {
-                                       elem = checkSet[i];
-
-                                       if ( elem ) {
-                                               var parent = elem.parentNode;
-                                               checkSet[i] = parent.nodeName.toLowerCase() === part ? parent : false;
-                                       }
-                               }
-
-                       } else {
-                               for ( ; i < l; i++ ) {
-                                       elem = checkSet[i];
-
-                                       if ( elem ) {
-                                               checkSet[i] = isPartStr ?
-                                                       elem.parentNode :
-                                                       elem.parentNode === part;
-                                       }
-                               }
-
-                               if ( isPartStr ) {
-                                       Sizzle.filter( part, checkSet, true );
-                               }
-                       }
-               },
-
-               "": function(checkSet, part, isXML){
-                       var nodeCheck,
-                               doneName = done++,
-                               checkFn = dirCheck;
-
-                       if ( typeof part === "string" && !rNonWord.test( part ) ) {
-                               part = part.toLowerCase();
-                               nodeCheck = part;
-                               checkFn = dirNodeCheck;
-                       }
-
-                       checkFn( "parentNode", part, doneName, checkSet, nodeCheck, isXML );
-               },
-
-               "~": function( checkSet, part, isXML ) {
-                       var nodeCheck,
-                               doneName = done++,
-                               checkFn = dirCheck;
-
-                       if ( typeof part === "string" && !rNonWord.test( part ) ) {
-                               part = part.toLowerCase();
-                               nodeCheck = part;
-                               checkFn = dirNodeCheck;
-                       }
-
-                       checkFn( "previousSibling", part, doneName, checkSet, nodeCheck, isXML );
-               }
-       },
-
-       find: {
-               ID: function( match, context, isXML ) {
-                       if ( typeof context.getElementById !== "undefined" && !isXML ) {
-                               var m = context.getElementById(match[1]);
-                               // Check parentNode to catch when Blackberry 4.6 returns
-                               // nodes that are no longer in the document #6963
-                               return m && m.parentNode ? [m] : [];
-                       }
-               },
-
-               NAME: function( match, context ) {
-                       if ( typeof context.getElementsByName !== "undefined" ) {
-                               var ret = [],
-                                       results = context.getElementsByName( match[1] );
-
-                               for ( var i = 0, l = results.length; i < l; i++ ) {
-                                       if ( results[i].getAttribute("name") === match[1] ) {
-                                               ret.push( results[i] );
-                                       }
-                               }
-
-                               return ret.length === 0 ? null : ret;
-                       }
-               },
-
-               TAG: function( match, context ) {
-                       if ( typeof context.getElementsByTagName !== "undefined" ) {
-                               return context.getElementsByTagName( match[1] );
-                       }
-               }
-       },
-       preFilter: {
-               CLASS: function( match, curLoop, inplace, result, not, isXML ) {
-                       match = " " + match[1].replace( rBackslash, "" ) + " ";
-
-                       if ( isXML ) {
-                               return match;
-                       }
-
-                       for ( var i = 0, elem; (elem = curLoop[i]) != null; i++ ) {
-                               if ( elem ) {
-                                       if ( not ^ (elem.className && (" " + elem.className + " ").replace(/[\t\n\r]/g, " ").indexOf(match) >= 0) ) {
-                                               if ( !inplace ) {
-                                                       result.push( elem );
-                                               }
-
-                                       } else if ( inplace ) {
-                                               curLoop[i] = false;
-                                       }
-                               }
-                       }
-
-                       return false;
-               },
-
-               ID: function( match ) {
-                       return match[1].replace( rBackslash, "" );
-               },
-
-               TAG: function( match, curLoop ) {
-                       return match[1].replace( rBackslash, "" ).toLowerCase();
-               },
-
-               CHILD: function( match ) {
-                       if ( match[1] === "nth" ) {
-                               if ( !match[2] ) {
-                                       Sizzle.error( match[0] );
-                               }
-
-                               match[2] = match[2].replace(/^\+|\s*/g, '');
-
-                               // parse equations like 'even', 'odd', '5', '2n', '3n+2', '4n-1', '-n+6'
-                               var test = /(-?)(\d*)(?:n([+\-]?\d*))?/.exec(
-                                       match[2] === "even" && "2n" || match[2] === "odd" && "2n+1" ||
-                                       !/\D/.test( match[2] ) && "0n+" + match[2] || match[2]);
-
-                               // calculate the numbers (first)n+(last) including if they are negative
-                               match[2] = (test[1] + (test[2] || 1)) - 0;
-                               match[3] = test[3] - 0;
-                       }
-                       else if ( match[2] ) {
-                               Sizzle.error( match[0] );
-                       }
-
-                       // TODO: Move to normal caching system
-                       match[0] = done++;
-
-                       return match;
-               },
-
-               ATTR: function( match, curLoop, inplace, result, not, isXML ) {
-                       var name = match[1] = match[1].replace( rBackslash, "" );
-                       
-                       if ( !isXML && Expr.attrMap[name] ) {
-                               match[1] = Expr.attrMap[name];
-                       }
-
-                       // Handle if an un-quoted value was used
-                       match[4] = ( match[4] || match[5] || "" ).replace( rBackslash, "" );
-
-                       if ( match[2] === "~=" ) {
-                               match[4] = " " + match[4] + " ";
-                       }
-
-                       return match;
-               },
-
-               PSEUDO: function( match, curLoop, inplace, result, not ) {
-                       if ( match[1] === "not" ) {
-                               // If we're dealing with a complex expression, or a simple one
-                               if ( ( chunker.exec(match[3]) || "" ).length > 1 || /^\w/.test(match[3]) ) {
-                                       match[3] = Sizzle(match[3], null, null, curLoop);
-
-                               } else {
-                                       var ret = Sizzle.filter(match[3], curLoop, inplace, true ^ not);
-
-                                       if ( !inplace ) {
-                                               result.push.apply( result, ret );
-                                       }
-
-                                       return false;
-                               }
-
-                       } else if ( Expr.match.POS.test( match[0] ) || Expr.match.CHILD.test( match[0] ) ) {
-                               return true;
-                       }
-                       
-                       return match;
-               },
-
-               POS: function( match ) {
-                       match.unshift( true );
-
-                       return match;
-               }
-       },
-       
-       filters: {
-               enabled: function( elem ) {
-                       return elem.disabled === false && elem.type !== "hidden";
-               },
-
-               disabled: function( elem ) {
-                       return elem.disabled === true;
-               },
-
-               checked: function( elem ) {
-                       return elem.checked === true;
-               },
-               
-               selected: function( elem ) {
-                       // Accessing this property makes selected-by-default
-                       // options in Safari work properly
-                       if ( elem.parentNode ) {
-                               elem.parentNode.selectedIndex;
-                       }
-                       
-                       return elem.selected === true;
-               },
-
-               parent: function( elem ) {
-                       return !!elem.firstChild;
-               },
-
-               empty: function( elem ) {
-                       return !elem.firstChild;
-               },
-
-               has: function( elem, i, match ) {
-                       return !!Sizzle( match[3], elem ).length;
-               },
-
-               header: function( elem ) {
-                       return (/h\d/i).test( elem.nodeName );
-               },
-
-               text: function( elem ) {
-                       var attr = elem.getAttribute( "type" ), type = elem.type;
-                       // IE6 and 7 will map elem.type to 'text' for new HTML5 types (search, etc) 
-                       // use getAttribute instead to test this case
-                       return elem.nodeName.toLowerCase() === "input" && "text" === type && ( attr === type || attr === null );
-               },
-
-               radio: function( elem ) {
-                       return elem.nodeName.toLowerCase() === "input" && "radio" === elem.type;
-               },
-
-               checkbox: function( elem ) {
-                       return elem.nodeName.toLowerCase() === "input" && "checkbox" === elem.type;
-               },
-
-               file: function( elem ) {
-                       return elem.nodeName.toLowerCase() === "input" && "file" === elem.type;
-               },
-
-               password: function( elem ) {
-                       return elem.nodeName.toLowerCase() === "input" && "password" === elem.type;
-               },
-
-               submit: function( elem ) {
-                       var name = elem.nodeName.toLowerCase();
-                       return (name === "input" || name === "button") && "submit" === elem.type;
-               },
-
-               image: function( elem ) {
-                       return elem.nodeName.toLowerCase() === "input" && "image" === elem.type;
-               },
-
-               reset: function( elem ) {
-                       var name = elem.nodeName.toLowerCase();
-                       return (name === "input" || name === "button") && "reset" === elem.type;
-               },
-
-               button: function( elem ) {
-                       var name = elem.nodeName.toLowerCase();
-                       return name === "input" && "button" === elem.type || name === "button";
-               },
-
-               input: function( elem ) {
-                       return (/input|select|textarea|button/i).test( elem.nodeName );
-               },
-
-               focus: function( elem ) {
-                       return elem === elem.ownerDocument.activeElement;
-               }
-       },
-       setFilters: {
-               first: function( elem, i ) {
-                       return i === 0;
-               },
-
-               last: function( elem, i, match, array ) {
-                       return i === array.length - 1;
-               },
-
-               even: function( elem, i ) {
-                       return i % 2 === 0;
-               },
-
-               odd: function( elem, i ) {
-                       return i % 2 === 1;
-               },
-
-               lt: function( elem, i, match ) {
-                       return i < match[3] - 0;
-               },
-
-               gt: function( elem, i, match ) {
-                       return i > match[3] - 0;
-               },
-
-               nth: function( elem, i, match ) {
-                       return match[3] - 0 === i;
-               },
-
-               eq: function( elem, i, match ) {
-                       return match[3] - 0 === i;
-               }
-       },
-       filter: {
-               PSEUDO: function( elem, match, i, array ) {
-                       var name = match[1],
-                               filter = Expr.filters[ name ];
-
-                       if ( filter ) {
-                               return filter( elem, i, match, array );
-
-                       } else if ( name === "contains" ) {
-                               return (elem.textContent || elem.innerText || getText([ elem ]) || "").indexOf(match[3]) >= 0;
-
-                       } else if ( name === "not" ) {
-                               var not = match[3];
-
-                               for ( var j = 0, l = not.length; j < l; j++ ) {
-                                       if ( not[j] === elem ) {
-                                               return false;
-                                       }
-                               }
-
-                               return true;
-
-                       } else {
-                               Sizzle.error( name );
-                       }
-               },
-
-               CHILD: function( elem, match ) {
-                       var first, last,
-                               doneName, parent, cache,
-                               count, diff,
-                               type = match[1],
-                               node = elem;
-
-                       switch ( type ) {
-                               case "only":
-                               case "first":
-                                       while ( (node = node.previousSibling) )  {
-                                               if ( node.nodeType === 1 ) { 
-                                                       return false; 
-                                               }
-                                       }
-
-                                       if ( type === "first" ) { 
-                                               return true; 
-                                       }
-
-                                       node = elem;
-
-                               case "last":
-                                       while ( (node = node.nextSibling) )      {
-                                               if ( node.nodeType === 1 ) { 
-                                                       return false; 
-                                               }
-                                       }
-
-                                       return true;
-
-                               case "nth":
-                                       first = match[2];
-                                       last = match[3];
-
-                                       if ( first === 1 && last === 0 ) {
-                                               return true;
-                                       }
-                                       
-                                       doneName = match[0];
-                                       parent = elem.parentNode;
-       
-                                       if ( parent && (parent[ expando ] !== doneName || !elem.nodeIndex) ) {
-                                               count = 0;
-                                               
-                                               for ( node = parent.firstChild; node; node = node.nextSibling ) {
-                                                       if ( node.nodeType === 1 ) {
-                                                               node.nodeIndex = ++count;
-                                                       }
-                                               } 
-
-                                               parent[ expando ] = doneName;
-                                       }
-                                       
-                                       diff = elem.nodeIndex - last;
-
-                                       if ( first === 0 ) {
-                                               return diff === 0;
-
-                                       } else {
-                                               return ( diff % first === 0 && diff / first >= 0 );
-                                       }
-                       }
-               },
-
-               ID: function( elem, match ) {
-                       return elem.nodeType === 1 && elem.getAttribute("id") === match;
-               },
-
-               TAG: function( elem, match ) {
-                       return (match === "*" && elem.nodeType === 1) || !!elem.nodeName && elem.nodeName.toLowerCase() === match;
-               },
-               
-               CLASS: function( elem, match ) {
-                       return (" " + (elem.className || elem.getAttribute("class")) + " ")
-                               .indexOf( match ) > -1;
-               },
-
-               ATTR: function( elem, match ) {
-                       var name = match[1],
-                               result = Sizzle.attr ?
-                                       Sizzle.attr( elem, name ) :
-                                       Expr.attrHandle[ name ] ?
-                                       Expr.attrHandle[ name ]( elem ) :
-                                       elem[ name ] != null ?
-                                               elem[ name ] :
-                                               elem.getAttribute( name ),
-                               value = result + "",
-                               type = match[2],
-                               check = match[4];
-
-                       return result == null ?
-                               type === "!=" :
-                               !type && Sizzle.attr ?
-                               result != null :
-                               type === "=" ?
-                               value === check :
-                               type === "*=" ?
-                               value.indexOf(check) >= 0 :
-                               type === "~=" ?
-                               (" " + value + " ").indexOf(check) >= 0 :
-                               !check ?
-                               value && result !== false :
-                               type === "!=" ?
-                               value !== check :
-                               type === "^=" ?
-                               value.indexOf(check) === 0 :
-                               type === "$=" ?
-                               value.substr(value.length - check.length) === check :
-                               type === "|=" ?
-                               value === check || value.substr(0, check.length + 1) === check + "-" :
-                               false;
-               },
-
-               POS: function( elem, match, i, array ) {
-                       var name = match[2],
-                               filter = Expr.setFilters[ name ];
-
-                       if ( filter ) {
-                               return filter( elem, i, match, array );
-                       }
-               }
-       }
-};
-
-var origPOS = Expr.match.POS,
-       fescape = function(all, num){
-               return "\\" + (num - 0 + 1);
-       };
-
-for ( var type in Expr.match ) {
-       Expr.match[ type ] = new RegExp( Expr.match[ type ].source + (/(?![^\[]*\])(?![^\(]*\))/.source) );
-       Expr.leftMatch[ type ] = new RegExp( /(^(?:.|\r|\n)*?)/.source + Expr.match[ type ].source.replace(/\\(\d+)/g, fescape) );
-}
-
-var makeArray = function( array, results ) {
-       array = Array.prototype.slice.call( array, 0 );
-
-       if ( results ) {
-               results.push.apply( results, array );
-               return results;
-       }
-       
-       return array;
-};
-
-// Perform a simple check to determine if the browser is capable of
-// converting a NodeList to an array using builtin methods.
-// Also verifies that the returned array holds DOM nodes
-// (which is not the case in the Blackberry browser)
-try {
-       Array.prototype.slice.call( document.documentElement.childNodes, 0 )[0].nodeType;
-
-// Provide a fallback method if it does not work
-} catch( e ) {
-       makeArray = function( array, results ) {
-               var i = 0,
-                       ret = results || [];
-
-               if ( toString.call(array) === "[object Array]" ) {
-                       Array.prototype.push.apply( ret, array );
-
-               } else {
-                       if ( typeof array.length === "number" ) {
-                               for ( var l = array.length; i < l; i++ ) {
-                                       ret.push( array[i] );
-                               }
-
-                       } else {
-                               for ( ; array[i]; i++ ) {
-                                       ret.push( array[i] );
-                               }
-                       }
-               }
-
-               return ret;
-       };
-}
-
-var sortOrder, siblingCheck;
-
-if ( document.documentElement.compareDocumentPosition ) {
-       sortOrder = function( a, b ) {
-               if ( a === b ) {
-                       hasDuplicate = true;
-                       return 0;
-               }
-
-               if ( !a.compareDocumentPosition || !b.compareDocumentPosition ) {
-                       return a.compareDocumentPosition ? -1 : 1;
-               }
-
-               return a.compareDocumentPosition(b) & 4 ? -1 : 1;
-       };
-
-} else {
-       sortOrder = function( a, b ) {
-               // The nodes are identical, we can exit early
-               if ( a === b ) {
-                       hasDuplicate = true;
-                       return 0;
-
-               // Fallback to using sourceIndex (in IE) if it's available on both nodes
-               } else if ( a.sourceIndex && b.sourceIndex ) {
-                       return a.sourceIndex - b.sourceIndex;
-               }
-
-               var al, bl,
-                       ap = [],
-                       bp = [],
-                       aup = a.parentNode,
-                       bup = b.parentNode,
-                       cur = aup;
-
-               // If the nodes are siblings (or identical) we can do a quick check
-               if ( aup === bup ) {
-                       return siblingCheck( a, b );
-
-               // If no parents were found then the nodes are disconnected
-               } else if ( !aup ) {
-                       return -1;
-
-               } else if ( !bup ) {
-                       return 1;
-               }
-
-               // Otherwise they're somewhere else in the tree so we need
-               // to build up a full list of the parentNodes for comparison
-               while ( cur ) {
-                       ap.unshift( cur );
-                       cur = cur.parentNode;
-               }
-
-               cur = bup;
-
-               while ( cur ) {
-                       bp.unshift( cur );
-                       cur = cur.parentNode;
-               }
-
-               al = ap.length;
-               bl = bp.length;
-
-               // Start walking down the tree looking for a discrepancy
-               for ( var i = 0; i < al && i < bl; i++ ) {
-                       if ( ap[i] !== bp[i] ) {
-                               return siblingCheck( ap[i], bp[i] );
-                       }
-               }
-
-               // We ended someplace up the tree so do a sibling check
-               return i === al ?
-                       siblingCheck( a, bp[i], -1 ) :
-                       siblingCheck( ap[i], b, 1 );
-       };
-
-       siblingCheck = function( a, b, ret ) {
-               if ( a === b ) {
-                       return ret;
-               }
-
-               var cur = a.nextSibling;
-
-               while ( cur ) {
-                       if ( cur === b ) {
-                               return -1;
-                       }
-
-                       cur = cur.nextSibling;
-               }
-
-               return 1;
-       };
-}
-
-// Check to see if the browser returns elements by name when
-// querying by getElementById (and provide a workaround)
-(function(){
-       // We're going to inject a fake input element with a specified name
-       var form = document.createElement("div"),
-               id = "script" + (new Date()).getTime(),
-               root = document.documentElement;
-
-       form.innerHTML = "<a name='" + id + "'/>";
-
-       // Inject it into the root element, check its status, and remove it quickly
-       root.insertBefore( form, root.firstChild );
-
-       // The workaround has to do additional checks after a getElementById
-       // Which slows things down for other browsers (hence the branching)
-       if ( document.getElementById( id ) ) {
-               Expr.find.ID = function( match, context, isXML ) {
-                       if ( typeof context.getElementById !== "undefined" && !isXML ) {
-                               var m = context.getElementById(match[1]);
-
-                               return m ?
-                                       m.id === match[1] || typeof m.getAttributeNode !== "undefined" && m.getAttributeNode("id").nodeValue === match[1] ?
-                                               [m] :
-                                               undefined :
-                                       [];
-                       }
-               };
-
-               Expr.filter.ID = function( elem, match ) {
-                       var node = typeof elem.getAttributeNode !== "undefined" && elem.getAttributeNode("id");
-
-                       return elem.nodeType === 1 && node && node.nodeValue === match;
-               };
-       }
-
-       root.removeChild( form );
-
-       // release memory in IE
-       root = form = null;
-})();
-
-(function(){
-       // Check to see if the browser returns only elements
-       // when doing getElementsByTagName("*")
-
-       // Create a fake element
-       var div = document.createElement("div");
-       div.appendChild( document.createComment("") );
-
-       // Make sure no comments are found
-       if ( div.getElementsByTagName("*").length > 0 ) {
-               Expr.find.TAG = function( match, context ) {
-                       var results = context.getElementsByTagName( match[1] );
-
-                       // Filter out possible comments
-                       if ( match[1] === "*" ) {
-                               var tmp = [];
-
-                               for ( var i = 0; results[i]; i++ ) {
-                                       if ( results[i].nodeType === 1 ) {
-                                               tmp.push( results[i] );
-                                       }
-                               }
-
-                               results = tmp;
-                       }
-
-                       return results;
-               };
-       }
-
-       // Check to see if an attribute returns normalized href attributes
-       div.innerHTML = "<a href='#'></a>";
-
-       if ( div.firstChild && typeof div.firstChild.getAttribute !== "undefined" &&
-                       div.firstChild.getAttribute("href") !== "#" ) {
-
-               Expr.attrHandle.href = function( elem ) {
-                       return elem.getAttribute( "href", 2 );
-               };
-       }
-
-       // release memory in IE
-       div = null;
-})();
-
-if ( document.querySelectorAll ) {
-       (function(){
-               var oldSizzle = Sizzle,
-                       div = document.createElement("div"),
-                       id = "__sizzle__";
-
-               div.innerHTML = "<p class='TEST'></p>";
-
-               // Safari can't handle uppercase or unicode characters when
-               // in quirks mode.
-               if ( div.querySelectorAll && div.querySelectorAll(".TEST").length === 0 ) {
-                       return;
-               }
-       
-               Sizzle = function( query, context, extra, seed ) {
-                       context = context || document;
-
-                       // Only use querySelectorAll on non-XML documents
-                       // (ID selectors don't work in non-HTML documents)
-                       if ( !seed && !Sizzle.isXML(context) ) {
-                               // See if we find a selector to speed up
-                               var match = /^(\w+$)|^\.([\w\-]+$)|^#([\w\-]+$)/.exec( query );
-                               
-                               if ( match && (context.nodeType === 1 || context.nodeType === 9) ) {
-                                       // Speed-up: Sizzle("TAG")
-                                       if ( match[1] ) {
-                                               return makeArray( context.getElementsByTagName( query ), extra );
-                                       
-                                       // Speed-up: Sizzle(".CLASS")
-                                       } else if ( match[2] && Expr.find.CLASS && context.getElementsByClassName ) {
-                                               return makeArray( context.getElementsByClassName( match[2] ), extra );
-                                       }
-                               }
-                               
-                               if ( context.nodeType === 9 ) {
-                                       // Speed-up: Sizzle("body")
-                                       // The body element only exists once, optimize finding it
-                                       if ( query === "body" && context.body ) {
-                                               return makeArray( [ context.body ], extra );
-                                               
-                                       // Speed-up: Sizzle("#ID")
-                                       } else if ( match && match[3] ) {
-                                               var elem = context.getElementById( match[3] );
-
-                                               // Check parentNode to catch when Blackberry 4.6 returns
-                                               // nodes that are no longer in the document #6963
-                                               if ( elem && elem.parentNode ) {
-                                                       // Handle the case where IE and Opera return items
-                                                       // by name instead of ID
-                                                       if ( elem.id === match[3] ) {
-                                                               return makeArray( [ elem ], extra );
-                                                       }
-                                                       
-                                               } else {
-                                                       return makeArray( [], extra );
-                                               }
-                                       }
-                                       
-                                       try {
-                                               return makeArray( context.querySelectorAll(query), extra );
-                                       } catch(qsaError) {}
-
-                               // qSA works strangely on Element-rooted queries
-                               // We can work around this by specifying an extra ID on the root
-                               // and working up from there (Thanks to Andrew Dupont for the technique)
-                               // IE 8 doesn't work on object elements
-                               } else if ( context.nodeType === 1 && context.nodeName.toLowerCase() !== "object" ) {
-                                       var oldContext = context,
-                                               old = context.getAttribute( "id" ),
-                                               nid = old || id,
-                                               hasParent = context.parentNode,
-                                               relativeHierarchySelector = /^\s*[+~]/.test( query );
-
-                                       if ( !old ) {
-                                               context.setAttribute( "id", nid );
-                                       } else {
-                                               nid = nid.replace( /'/g, "\\$&" );
-                                       }
-                                       if ( relativeHierarchySelector && hasParent ) {
-                                               context = context.parentNode;
-                                       }
-
-                                       try {
-                                               if ( !relativeHierarchySelector || hasParent ) {
-                                                       return makeArray( context.querySelectorAll( "[id='" + nid + "'] " + query ), extra );
-                                               }
-
-                                       } catch(pseudoError) {
-                                       } finally {
-                                               if ( !old ) {
-                                                       oldContext.removeAttribute( "id" );
-                                               }
-                                       }
-                               }
-                       }
-               
-                       return oldSizzle(query, context, extra, seed);
-               };
-
-               for ( var prop in oldSizzle ) {
-                       Sizzle[ prop ] = oldSizzle[ prop ];
-               }
-
-               // release memory in IE
-               div = null;
-       })();
-}
-
-(function(){
-       var html = document.documentElement,
-               matches = html.matchesSelector || html.mozMatchesSelector || html.webkitMatchesSelector || html.msMatchesSelector;
-
-       if ( matches ) {
-               // Check to see if it's possible to do matchesSelector
-               // on a disconnected node (IE 9 fails this)
-               var disconnectedMatch = !matches.call( document.createElement( "div" ), "div" ),
-                       pseudoWorks = false;
-
-               try {
-                       // This should fail with an exception
-                       // Gecko does not error, returns false instead
-                       matches.call( document.documentElement, "[test!='']:sizzle" );
-       
-               } catch( pseudoError ) {
-                       pseudoWorks = true;
-               }
-
-               Sizzle.matchesSelector = function( node, expr ) {
-                       // Make sure that attribute selectors are quoted
-                       expr = expr.replace(/\=\s*([^'"\]]*)\s*\]/g, "='$1']");
-
-                       if ( !Sizzle.isXML( node ) ) {
-                               try { 
-                                       if ( pseudoWorks || !Expr.match.PSEUDO.test( expr ) && !/!=/.test( expr ) ) {
-                                               var ret = matches.call( node, expr );
-
-                                               // IE 9's matchesSelector returns false on disconnected nodes
-                                               if ( ret || !disconnectedMatch ||
-                                                               // As well, disconnected nodes are said to be in a document
-                                                               // fragment in IE 9, so check for that
-                                                               node.document && node.document.nodeType !== 11 ) {
-                                                       return ret;
-                                               }
-                                       }
-                               } catch(e) {}
-                       }
-
-                       return Sizzle(expr, null, null, [node]).length > 0;
-               };
-       }
-})();
-
-(function(){
-       var div = document.createElement("div");
-
-       div.innerHTML = "<div class='test e'></div><div class='test'></div>";
-
-       // Opera can't find a second classname (in 9.6)
-       // Also, make sure that getElementsByClassName actually exists
-       if ( !div.getElementsByClassName || div.getElementsByClassName("e").length === 0 ) {
-               return;
-       }
-
-       // Safari caches class attributes, doesn't catch changes (in 3.2)
-       div.lastChild.className = "e";
-
-       if ( div.getElementsByClassName("e").length === 1 ) {
-               return;
-       }
-       
-       Expr.order.splice(1, 0, "CLASS");
-       Expr.find.CLASS = function( match, context, isXML ) {
-               if ( typeof context.getElementsByClassName !== "undefined" && !isXML ) {
-                       return context.getElementsByClassName(match[1]);
-               }
-       };
-
-       // release memory in IE
-       div = null;
-})();
-
-function dirNodeCheck( dir, cur, doneName, checkSet, nodeCheck, isXML ) {
-       for ( var i = 0, l = checkSet.length; i < l; i++ ) {
-               var elem = checkSet[i];
-
-               if ( elem ) {
-                       var match = false;
-
-                       elem = elem[dir];
-
-                       while ( elem ) {
-                               if ( elem[ expando ] === doneName ) {
-                                       match = checkSet[elem.sizset];
-                                       break;
-                               }
-
-                               if ( elem.nodeType === 1 && !isXML ){
-                                       elem[ expando ] = doneName;
-                                       elem.sizset = i;
-                               }
-
-                               if ( elem.nodeName.toLowerCase() === cur ) {
-                                       match = elem;
-                                       break;
-                               }
-
-                               elem = elem[dir];
-                       }
-
-                       checkSet[i] = match;
-               }
-       }
-}
-
-function dirCheck( dir, cur, doneName, checkSet, nodeCheck, isXML ) {
-       for ( var i = 0, l = checkSet.length; i < l; i++ ) {
-               var elem = checkSet[i];
-
-               if ( elem ) {
-                       var match = false;
-                       
-                       elem = elem[dir];
-
-                       while ( elem ) {
-                               if ( elem[ expando ] === doneName ) {
-                                       match = checkSet[elem.sizset];
-                                       break;
-                               }
-
-                               if ( elem.nodeType === 1 ) {
-                                       if ( !isXML ) {
-                                               elem[ expando ] = doneName;
-                                               elem.sizset = i;
-                                       }
-
-                                       if ( typeof cur !== "string" ) {
-                                               if ( elem === cur ) {
-                                                       match = true;
-                                                       break;
-                                               }
-
-                                       } else if ( Sizzle.filter( cur, [elem] ).length > 0 ) {
-                                               match = elem;
-                                               break;
-                                       }
-                               }
-
-                               elem = elem[dir];
-                       }
-
-                       checkSet[i] = match;
-               }
-       }
-}
-
-if ( document.documentElement.contains ) {
-       Sizzle.contains = function( a, b ) {
-               return a !== b && (a.contains ? a.contains(b) : true);
-       };
-
-} else if ( document.documentElement.compareDocumentPosition ) {
-       Sizzle.contains = function( a, b ) {
-               return !!(a.compareDocumentPosition(b) & 16);
-       };
-
-} else {
-       Sizzle.contains = function() {
-               return false;
-       };
-}
-
-Sizzle.isXML = function( elem ) {
-       // documentElement is verified for cases where it doesn't yet exist
-       // (such as loading iframes in IE - #4833) 
-       var documentElement = (elem ? elem.ownerDocument || elem : 0).documentElement;
-
-       return documentElement ? documentElement.nodeName !== "HTML" : false;
-};
-
-var posProcess = function( selector, context, seed ) {
-       var match,
-               tmpSet = [],
-               later = "",
-               root = context.nodeType ? [context] : context;
-
-       // Position selectors must be done after the filter
-       // And so must :not(positional) so we move all PSEUDOs to the end
-       while ( (match = Expr.match.PSEUDO.exec( selector )) ) {
-               later += match[0];
-               selector = selector.replace( Expr.match.PSEUDO, "" );
-       }
-
-       selector = Expr.relative[selector] ? selector + "*" : selector;
-
-       for ( var i = 0, l = root.length; i < l; i++ ) {
-               Sizzle( selector, root[i], tmpSet, seed );
-       }
-
-       return Sizzle.filter( later, tmpSet );
-};
-
-// EXPOSE
-// Override sizzle attribute retrieval
-Sizzle.attr = jQuery.attr;
-Sizzle.selectors.attrMap = {};
-jQuery.find = Sizzle;
-jQuery.expr = Sizzle.selectors;
-jQuery.expr[":"] = jQuery.expr.filters;
-jQuery.unique = Sizzle.uniqueSort;
-jQuery.text = Sizzle.getText;
-jQuery.isXMLDoc = Sizzle.isXML;
-jQuery.contains = Sizzle.contains;
-
-
-})();
-
-
-var runtil = /Until$/,
-       rparentsprev = /^(?:parents|prevUntil|prevAll)/,
-       // Note: This RegExp should be improved, or likely pulled from Sizzle
-       rmultiselector = /,/,
-       isSimple = /^.[^:#\[\.,]*$/,
-       slice = Array.prototype.slice,
-       POS = jQuery.expr.match.POS,
-       // methods guaranteed to produce a unique set when starting from a unique set
-       guaranteedUnique = {
-               children: true,
-               contents: true,
-               next: true,
-               prev: true
-       };
-
-jQuery.fn.extend({
-       find: function( selector ) {
-               var self = this,
-                       i, l;
-
-               if ( typeof selector !== "string" ) {
-                       return jQuery( selector ).filter(function() {
-                               for ( i = 0, l = self.length; i < l; i++ ) {
-                                       if ( jQuery.contains( self[ i ], this ) ) {
-                                               return true;
-                                       }
-                               }
-                       });
-               }
-
-               var ret = this.pushStack( "", "find", selector ),
-                       length, n, r;
-
-               for ( i = 0, l = this.length; i < l; i++ ) {
-                       length = ret.length;
-                       jQuery.find( selector, this[i], ret );
-
-                       if ( i > 0 ) {
-                               // Make sure that the results are unique
-                               for ( n = length; n < ret.length; n++ ) {
-                                       for ( r = 0; r < length; r++ ) {
-                                               if ( ret[r] === ret[n] ) {
-                                                       ret.splice(n--, 1);
-                                                       break;
-                                               }
-                                       }
-                               }
-                       }
-               }
-
-               return ret;
-       },
-
-       has: function( target ) {
-               var targets = jQuery( target );
-               return this.filter(function() {
-                       for ( var i = 0, l = targets.length; i < l; i++ ) {
-                               if ( jQuery.contains( this, targets[i] ) ) {
-                                       return true;
-                               }
-                       }
-               });
-       },
-
-       not: function( selector ) {
-               return this.pushStack( winnow(this, selector, false), "not", selector);
-       },
-
-       filter: function( selector ) {
-               return this.pushStack( winnow(this, selector, true), "filter", selector );
-       },
-
-       is: function( selector ) {
-               return !!selector && ( 
-                       typeof selector === "string" ?
-                               // If this is a positional selector, check membership in the returned set
-                               // so $("p:first").is("p:last") won't return true for a doc with two "p".
-                               POS.test( selector ) ? 
-                                       jQuery( selector, this.context ).index( this[0] ) >= 0 :
-                                       jQuery.filter( selector, this ).length > 0 :
-                               this.filter( selector ).length > 0 );
-       },
-
-       closest: function( selectors, context ) {
-               var ret = [], i, l, cur = this[0];
-               
-               // Array (deprecated as of jQuery 1.7)
-               if ( jQuery.isArray( selectors ) ) {
-                       var level = 1;
-
-                       while ( cur && cur.ownerDocument && cur !== context ) {
-                               for ( i = 0; i < selectors.length; i++ ) {
-
-                                       if ( jQuery( cur ).is( selectors[ i ] ) ) {
-                                               ret.push({ selector: selectors[ i ], elem: cur, level: level });
-                                       }
-                               }
-
-                               cur = cur.parentNode;
-                               level++;
-                       }
-
-                       return ret;
-               }
-
-               // String
-               var pos = POS.test( selectors ) || typeof selectors !== "string" ?
-                               jQuery( selectors, context || this.context ) :
-                               0;
-
-               for ( i = 0, l = this.length; i < l; i++ ) {
-                       cur = this[i];
-
-                       while ( cur ) {
-                               if ( pos ? pos.index(cur) > -1 : jQuery.find.matchesSelector(cur, selectors) ) {
-                                       ret.push( cur );
-                                       break;
-
-                               } else {
-                                       cur = cur.parentNode;
-                                       if ( !cur || !cur.ownerDocument || cur === context || cur.nodeType === 11 ) {
-                                               break;
-                                       }
-                               }
-                       }
-               }
-
-               ret = ret.length > 1 ? jQuery.unique( ret ) : ret;
-
-               return this.pushStack( ret, "closest", selectors );
-       },
-
-       // Determine the position of an element within
-       // the matched set of elements
-       index: function( elem ) {
-
-               // No argument, return index in parent
-               if ( !elem ) {
-                       return ( this[0] && this[0].parentNode ) ? this.prevAll().length : -1;
-               }
-
-               // index in selector
-               if ( typeof elem === "string" ) {
-                       return jQuery.inArray( this[0], jQuery( elem ) );
-               }
-
-               // Locate the position of the desired element
-               return jQuery.inArray(
-                       // If it receives a jQuery object, the first element is used
-                       elem.jquery ? elem[0] : elem, this );
-       },
-
-       add: function( selector, context ) {
-               var set = typeof selector === "string" ?
-                               jQuery( selector, context ) :
-                               jQuery.makeArray( selector && selector.nodeType ? [ selector ] : selector ),
-                       all = jQuery.merge( this.get(), set );
-
-               return this.pushStack( isDisconnected( set[0] ) || isDisconnected( all[0] ) ?
-                       all :
-                       jQuery.unique( all ) );
-       },
-
-       andSelf: function() {
-               return this.add( this.prevObject );
-       }
-});
-
-// A painfully simple check to see if an element is disconnected
-// from a document (should be improved, where feasible).
-function isDisconnected( node ) {
-       return !node || !node.parentNode || node.parentNode.nodeType === 11;
-}
-
-jQuery.each({
-       parent: function( elem ) {
-               var parent = elem.parentNode;
-               return parent && parent.nodeType !== 11 ? parent : null;
-       },
-       parents: function( elem ) {
-               return jQuery.dir( elem, "parentNode" );
-       },
-       parentsUntil: function( elem, i, until ) {
-               return jQuery.dir( elem, "parentNode", until );
-       },
-       next: function( elem ) {
-               return jQuery.nth( elem, 2, "nextSibling" );
-       },
-       prev: function( elem ) {
-               return jQuery.nth( elem, 2, "previousSibling" );
-       },
-       nextAll: function( elem ) {
-               return jQuery.dir( elem, "nextSibling" );
-       },
-       prevAll: function( elem ) {
-               return jQuery.dir( elem, "previousSibling" );
-       },
-       nextUntil: function( elem, i, until ) {
-               return jQuery.dir( elem, "nextSibling", until );
-       },
-       prevUntil: function( elem, i, until ) {
-               return jQuery.dir( elem, "previousSibling", until );
-       },
-       siblings: function( elem ) {
-               return jQuery.sibling( elem.parentNode.firstChild, elem );
-       },
-       children: function( elem ) {
-               return jQuery.sibling( elem.firstChild );
-       },
-       contents: function( elem ) {
-               return jQuery.nodeName( elem, "iframe" ) ?
-                       elem.contentDocument || elem.contentWindow.document :
-                       jQuery.makeArray( elem.childNodes );
-       }
-}, function( name, fn ) {
-       jQuery.fn[ name ] = function( until, selector ) {
-               var ret = jQuery.map( this, fn, until ),
-                       // The variable 'args' was introduced in
-                       // https://github.com/jquery/jquery/commit/52a0238
-                       // to work around a bug in Chrome 10 (Dev) and should be removed when the bug is fixed.
-                       // http://code.google.com/p/v8/issues/detail?id=1050
-                       args = slice.call(arguments);
-
-               if ( !runtil.test( name ) ) {
-                       selector = until;
-               }
-
-               if ( selector && typeof selector === "string" ) {
-                       ret = jQuery.filter( selector, ret );
-               }
-
-               ret = this.length > 1 && !guaranteedUnique[ name ] ? jQuery.unique( ret ) : ret;
-
-               if ( (this.length > 1 || rmultiselector.test( selector )) && rparentsprev.test( name ) ) {
-                       ret = ret.reverse();
-               }
-
-               return this.pushStack( ret, name, args.join(",") );
-       };
-});
-
-jQuery.extend({
-       filter: function( expr, elems, not ) {
-               if ( not ) {
-                       expr = ":not(" + expr + ")";
-               }
-
-               return elems.length === 1 ?
-                       jQuery.find.matchesSelector(elems[0], expr) ? [ elems[0] ] : [] :
-                       jQuery.find.matches(expr, elems);
-       },
-
-       dir: function( elem, dir, until ) {
-               var matched = [],
-                       cur = elem[ dir ];
-
-               while ( cur && cur.nodeType !== 9 && (until === undefined || cur.nodeType !== 1 || !jQuery( cur ).is( until )) ) {
-                       if ( cur.nodeType === 1 ) {
-                               matched.push( cur );
-                       }
-                       cur = cur[dir];
-               }
-               return matched;
-       },
-
-       nth: function( cur, result, dir, elem ) {
-               result = result || 1;
-               var num = 0;
-
-               for ( ; cur; cur = cur[dir] ) {
-                       if ( cur.nodeType === 1 && ++num === result ) {
-                               break;
-                       }
-               }
-
-               return cur;
-       },
-
-       sibling: function( n, elem ) {
-               var r = [];
-
-               for ( ; n; n = n.nextSibling ) {
-                       if ( n.nodeType === 1 && n !== elem ) {
-                               r.push( n );
-                       }
-               }
-
-               return r;
-       }
-});
-
-// Implement the identical functionality for filter and not
-function winnow( elements, qualifier, keep ) {
-
-       // Can't pass null or undefined to indexOf in Firefox 4
-       // Set to 0 to skip string check
-       qualifier = qualifier || 0;
-
-       if ( jQuery.isFunction( qualifier ) ) {
-               return jQuery.grep(elements, function( elem, i ) {
-                       var retVal = !!qualifier.call( elem, i, elem );
-                       return retVal === keep;
-               });
-
-       } else if ( qualifier.nodeType ) {
-               return jQuery.grep(elements, function( elem, i ) {
-                       return ( elem === qualifier ) === keep;
-               });
-
-       } else if ( typeof qualifier === "string" ) {
-               var filtered = jQuery.grep(elements, function( elem ) {
-                       return elem.nodeType === 1;
-               });
-
-               if ( isSimple.test( qualifier ) ) {
-                       return jQuery.filter(qualifier, filtered, !keep);
-               } else {
-                       qualifier = jQuery.filter( qualifier, filtered );
-               }
-       }
-
-       return jQuery.grep(elements, function( elem, i ) {
-               return ( jQuery.inArray( elem, qualifier ) >= 0 ) === keep;
-       });
-}
-
-
-
-
-function createSafeFragment( document ) {
-       var list = nodeNames.split( " " ),
-       safeFrag = document.createDocumentFragment();
-
-       if ( safeFrag.createElement ) {
-               while ( list.length ) {
-                       safeFrag.createElement(
-                               list.pop()
-                       );
-               }
-       }
-       return safeFrag;
-}
-
-var nodeNames = "abbr article aside audio canvas datalist details figcaption figure footer " +
-               "header hgroup mark meter nav output progress section summary time video",
-       rinlinejQuery = / jQuery\d+="(?:\d+|null)"/g,
-       rleadingWhitespace = /^\s+/,
-       rxhtmlTag = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/ig,
-       rtagName = /<([\w:]+)/,
-       rtbody = /<tbody/i,
-       rhtml = /<|&#?\w+;/,
-       rnoInnerhtml = /<(?:script|style)/i,
-       rnocache = /<(?:script|object|embed|option|style)/i,
-       rnoshimcache = new RegExp("<(?:" + nodeNames.replace(" ", "|") + ")", "i"),
-       // checked="checked" or checked
-       rchecked = /checked\s*(?:[^=]|=\s*.checked.)/i,
-       rscriptType = /\/(java|ecma)script/i,
-       rcleanScript = /^\s*<!(?:\[CDATA\[|\-\-)/,
-       wrapMap = {
-               option: [ 1, "<select multiple='multiple'>", "</select>" ],
-               legend: [ 1, "<fieldset>", "</fieldset>" ],
-               thead: [ 1, "<table>", "</table>" ],
-               tr: [ 2, "<table><tbody>", "</tbody></table>" ],
-               td: [ 3, "<table><tbody><tr>", "</tr></tbody></table>" ],
-               col: [ 2, "<table><tbody></tbody><colgroup>", "</colgroup></table>" ],
-               area: [ 1, "<map>", "</map>" ],
-               _default: [ 0, "", "" ]
-       },
-       safeFragment = createSafeFragment( document );
-
-wrapMap.optgroup = wrapMap.option;
-wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead;
-wrapMap.th = wrapMap.td;
-
-// IE can't serialize <link> and <script> tags normally
-if ( !jQuery.support.htmlSerialize ) {
-       wrapMap._default = [ 1, "div<div>", "</div>" ];
-}
-
-jQuery.fn.extend({
-       text: function( text ) {
-               if ( jQuery.isFunction(text) ) {
-                       return this.each(function(i) {
-                               var self = jQuery( this );
-
-                               self.text( text.call(this, i, self.text()) );
-                       });
-               }
-
-               if ( typeof text !== "object" && text !== undefined ) {
-                       return this.empty().append( (this[0] && this[0].ownerDocument || document).createTextNode( text ) );
-               }
-
-               return jQuery.text( this );
-       },
-
-       wrapAll: function( html ) {
-               if ( jQuery.isFunction( html ) ) {
-                       return this.each(function(i) {
-                               jQuery(this).wrapAll( html.call(this, i) );
-                       });
-               }
-
-               if ( this[0] ) {
-                       // The elements to wrap the target around
-                       var wrap = jQuery( html, this[0].ownerDocument ).eq(0).clone(true);
-
-                       if ( this[0].parentNode ) {
-                               wrap.insertBefore( this[0] );
-                       }
-
-                       wrap.map(function() {
-                               var elem = this;
-
-                               while ( elem.firstChild && elem.firstChild.nodeType === 1 ) {
-                                       elem = elem.firstChild;
-                               }
-
-                               return elem;
-                       }).append( this );
-               }
-
-               return this;
-       },
-
-       wrapInner: function( html ) {
-               if ( jQuery.isFunction( html ) ) {
-                       return this.each(function(i) {
-                               jQuery(this).wrapInner( html.call(this, i) );
-                       });
-               }
-
-               return this.each(function() {
-                       var self = jQuery( this ),
-                               contents = self.contents();
-
-                       if ( contents.length ) {
-                               contents.wrapAll( html );
-
-                       } else {
-                               self.append( html );
-                       }
-               });
-       },
-
-       wrap: function( html ) {
-               return this.each(function() {
-                       jQuery( this ).wrapAll( html );
-               });
-       },
-
-       unwrap: function() {
-               return this.parent().each(function() {
-                       if ( !jQuery.nodeName( this, "body" ) ) {
-                               jQuery( this ).replaceWith( this.childNodes );
-                       }
-               }).end();
-       },
-
-       append: function() {
-               return this.domManip(arguments, true, function( elem ) {
-                       if ( this.nodeType === 1 ) {
-                               this.appendChild( elem );
-                       }
-               });
-       },
-
-       prepend: function() {
-               return this.domManip(arguments, true, function( elem ) {
-                       if ( this.nodeType === 1 ) {
-                               this.insertBefore( elem, this.firstChild );
-                       }
-               });
-       },
-
-       before: function() {
-               if ( this[0] && this[0].parentNode ) {
-                       return this.domManip(arguments, false, function( elem ) {
-                               this.parentNode.insertBefore( elem, this );
-                       });
-               } else if ( arguments.length ) {
-                       var set = jQuery(arguments[0]);
-                       set.push.apply( set, this.toArray() );
-                       return this.pushStack( set, "before", arguments );
-               }
-       },
-
-       after: function() {
-               if ( this[0] && this[0].parentNode ) {
-                       return this.domManip(arguments, false, function( elem ) {
-                               this.parentNode.insertBefore( elem, this.nextSibling );
-                       });
-               } else if ( arguments.length ) {
-                       var set = this.pushStack( this, "after", arguments );
-                       set.push.apply( set, jQuery(arguments[0]).toArray() );
-                       return set;
-               }
-       },
-
-       // keepData is for internal use only--do not document
-       remove: function( selector, keepData ) {
-               for ( var i = 0, elem; (elem = this[i]) != null; i++ ) {
-                       if ( !selector || jQuery.filter( selector, [ elem ] ).length ) {
-                               if ( !keepData && elem.nodeType === 1 ) {
-                                       jQuery.cleanData( elem.getElementsByTagName("*") );
-                                       jQuery.cleanData( [ elem ] );
-                               }
-
-                               if ( elem.parentNode ) {
-                                       elem.parentNode.removeChild( elem );
-                               }
-                       }
-               }
-
-               return this;
-       },
-
-       empty: function() {
-               for ( var i = 0, elem; (elem = this[i]) != null; i++ ) {
-                       // Remove element nodes and prevent memory leaks
-                       if ( elem.nodeType === 1 ) {
-                               jQuery.cleanData( elem.getElementsByTagName("*") );
-                       }
-
-                       // Remove any remaining nodes
-                       while ( elem.firstChild ) {
-                               elem.removeChild( elem.firstChild );
-                       }
-               }
-
-               return this;
-       },
-
-       clone: function( dataAndEvents, deepDataAndEvents ) {
-               dataAndEvents = dataAndEvents == null ? false : dataAndEvents;
-               deepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents;
-
-               return this.map( function () {
-                       return jQuery.clone( this, dataAndEvents, deepDataAndEvents );
-               });
-       },
-
-       html: function( value ) {
-               if ( value === undefined ) {
-                       return this[0] && this[0].nodeType === 1 ?
-                               this[0].innerHTML.replace(rinlinejQuery, "") :
-                               null;
-
-               // See if we can take a shortcut and just use innerHTML
-               } else if ( typeof value === "string" && !rnoInnerhtml.test( value ) &&
-                       (jQuery.support.leadingWhitespace || !rleadingWhitespace.test( value )) &&
-                       !wrapMap[ (rtagName.exec( value ) || ["", ""])[1].toLowerCase() ] ) {
-
-                       value = value.replace(rxhtmlTag, "<$1></$2>");
-
-                       try {
-                               for ( var i = 0, l = this.length; i < l; i++ ) {
-                                       // Remove element nodes and prevent memory leaks
-                                       if ( this[i].nodeType === 1 ) {
-                                               jQuery.cleanData( this[i].getElementsByTagName("*") );
-                                               this[i].innerHTML = value;
-                                       }
-                               }
-
-                       // If using innerHTML throws an exception, use the fallback method
-                       } catch(e) {
-                               this.empty().append( value );
-                       }
-
-               } else if ( jQuery.isFunction( value ) ) {
-                       this.each(function(i){
-                               var self = jQuery( this );
-
-                               self.html( value.call(this, i, self.html()) );
-                       });
-
-               } else {
-                       this.empty().append( value );
-               }
-
-               return this;
-       },
-
-       replaceWith: function( value ) {
-               if ( this[0] && this[0].parentNode ) {
-                       // Make sure that the elements are removed from the DOM before they are inserted
-                       // this can help fix replacing a parent with child elements
-                       if ( jQuery.isFunction( value ) ) {
-                               return this.each(function(i) {
-                                       var self = jQuery(this), old = self.html();
-                                       self.replaceWith( value.call( this, i, old ) );
-                               });
-                       }
-
-                       if ( typeof value !== "string" ) {
-                               value = jQuery( value ).detach();
-                       }
-
-                       return this.each(function() {
-                               var next = this.nextSibling,
-                                       parent = this.parentNode;
-
-                               jQuery( this ).remove();
-
-                               if ( next ) {
-                                       jQuery(next).before( value );
-                               } else {
-                                       jQuery(parent).append( value );
-                               }
-                       });
-               } else {
-                       return this.length ?
-                               this.pushStack( jQuery(jQuery.isFunction(value) ? value() : value), "replaceWith", value ) :
-                               this;
-               }
-       },
-
-       detach: function( selector ) {
-               return this.remove( selector, true );
-       },
-
-       domManip: function( args, table, callback ) {
-               var results, first, fragment, parent,
-                       value = args[0],
-                       scripts = [];
-
-               // We can't cloneNode fragments that contain checked, in WebKit
-               if ( !jQuery.support.checkClone && arguments.length === 3 && typeof value === "string" && rchecked.test( value ) ) {
-                       return this.each(function() {
-                               jQuery(this).domManip( args, table, callback, true );
-                       });
-               }
-
-               if ( jQuery.isFunction(value) ) {
-                       return this.each(function(i) {
-                               var self = jQuery(this);
-                               args[0] = value.call(this, i, table ? self.html() : undefined);
-                               self.domManip( args, table, callback );
-                       });
-               }
-
-               if ( this[0] ) {
-                       parent = value && value.parentNode;
-
-                       // If we're in a fragment, just use that instead of building a new one
-                       if ( jQuery.support.parentNode && parent && parent.nodeType === 11 && parent.childNodes.length === this.length ) {
-                               results = { fragment: parent };
-
-                       } else {
-                               results = jQuery.buildFragment( args, this, scripts );
-                       }
-
-                       fragment = results.fragment;
-
-                       if ( fragment.childNodes.length === 1 ) {
-                               first = fragment = fragment.firstChild;
-                       } else {
-                               first = fragment.firstChild;
-                       }
-
-                       if ( first ) {
-                               table = table && jQuery.nodeName( first, "tr" );
-
-                               for ( var i = 0, l = this.length, lastIndex = l - 1; i < l; i++ ) {
-                                       callback.call(
-                                               table ?
-                                                       root(this[i], first) :
-                                                       this[i],
-                                               // Make sure that we do not leak memory by inadvertently discarding
-                                               // the original fragment (which might have attached data) instead of
-                                               // using it; in addition, use the original fragment object for the last
-                                               // item instead of first because it can end up being emptied incorrectly
-                                               // in certain situations (Bug #8070).
-                                               // Fragments from the fragment cache must always be cloned and never used
-                                               // in place.
-                                               results.cacheable || ( l > 1 && i < lastIndex ) ?
-                                                       jQuery.clone( fragment, true, true ) :
-                                                       fragment
-                                       );
-                               }
-                       }
-
-                       if ( scripts.length ) {
-                               jQuery.each( scripts, evalScript );
-                       }
-               }
-
-               return this;
-       }
-});
-
-function root( elem, cur ) {
-       return jQuery.nodeName(elem, "table") ?
-               (elem.getElementsByTagName("tbody")[0] ||
-               elem.appendChild(elem.ownerDocument.createElement("tbody"))) :
-               elem;
-}
-
-function cloneCopyEvent( src, dest ) {
-
-       if ( dest.nodeType !== 1 || !jQuery.hasData( src ) ) {
-               return;
-       }
-
-       var type, i, l,
-               oldData = jQuery._data( src ),
-               curData = jQuery._data( dest, oldData ),
-               events = oldData.events;
-
-       if ( events ) {
-               delete curData.handle;
-               curData.events = {};
-
-               for ( type in events ) {
-                       for ( i = 0, l = events[ type ].length; i < l; i++ ) {
-                               jQuery.event.add( dest, type + ( events[ type ][ i ].namespace ? "." : "" ) + events[ type ][ i ].namespace, events[ type ][ i ], events[ type ][ i ].data );
-                       }
-               }
-       }
-
-       // make the cloned public data object a copy from the original
-       if ( curData.data ) {
-               curData.data = jQuery.extend( {}, curData.data );
-       }
-}
-
-function cloneFixAttributes( src, dest ) {
-       var nodeName;
-
-       // We do not need to do anything for non-Elements
-       if ( dest.nodeType !== 1 ) {
-               return;
-       }
-
-       // clearAttributes removes the attributes, which we don't want,
-       // but also removes the attachEvent events, which we *do* want
-       if ( dest.clearAttributes ) {
-               dest.clearAttributes();
-       }
-
-       // mergeAttributes, in contrast, only merges back on the
-       // original attributes, not the events
-       if ( dest.mergeAttributes ) {
-               dest.mergeAttributes( src );
-       }
-
-       nodeName = dest.nodeName.toLowerCase();
-
-       // IE6-8 fail to clone children inside object elements that use
-       // the proprietary classid attribute value (rather than the type
-       // attribute) to identify the type of content to display
-       if ( nodeName === "object" ) {
-               dest.outerHTML = src.outerHTML;
-
-       } else if ( nodeName === "input" && (src.type === "checkbox" || src.type === "radio") ) {
-               // IE6-8 fails to persist the checked state of a cloned checkbox
-               // or radio button. Worse, IE6-7 fail to give the cloned element
-               // a checked appearance if the defaultChecked value isn't also set
-               if ( src.checked ) {
-                       dest.defaultChecked = dest.checked = src.checked;
-               }
-
-               // IE6-7 get confused and end up setting the value of a cloned
-               // checkbox/radio button to an empty string instead of "on"
-               if ( dest.value !== src.value ) {
-                       dest.value = src.value;
-               }
-
-       // IE6-8 fails to return the selected option to the default selected
-       // state when cloning options
-       } else if ( nodeName === "option" ) {
-               dest.selected = src.defaultSelected;
-
-       // IE6-8 fails to set the defaultValue to the correct value when
-       // cloning other types of input fields
-       } else if ( nodeName === "input" || nodeName === "textarea" ) {
-               dest.defaultValue = src.defaultValue;
-       }
-
-       // Event data gets referenced instead of copied if the expando
-       // gets copied too
-       dest.removeAttribute( jQuery.expando );
-}
-
-jQuery.buildFragment = function( args, nodes, scripts ) {
-       var fragment, cacheable, cacheresults, doc,
-       first = args[ 0 ];
-
-       // nodes may contain either an explicit document object,
-       // a jQuery collection or context object.
-       // If nodes[0] contains a valid object to assign to doc
-       if ( nodes && nodes[0] ) {
-               doc = nodes[0].ownerDocument || nodes[0];
-       }
-
-  // Ensure that an attr object doesn't incorrectly stand in as a document object
-       // Chrome and Firefox seem to allow this to occur and will throw exception
-       // Fixes #8950
-       if ( !doc.createDocumentFragment ) {
-               doc = document;
-       }
-
-       // Only cache "small" (1/2 KB) HTML strings that are associated with the main document
-       // Cloning options loses the selected state, so don't cache them
-       // IE 6 doesn't like it when you put <object> or <embed> elements in a fragment
-       // Also, WebKit does not clone 'checked' attributes on cloneNode, so don't cache
-       // Lastly, IE6,7,8 will not correctly reuse cached fragments that were created from unknown elems #10501
-       if ( args.length === 1 && typeof first === "string" && first.length < 512 && doc === document &&
-               first.charAt(0) === "<" && !rnocache.test( first ) &&
-               (jQuery.support.checkClone || !rchecked.test( first )) &&
-               (!jQuery.support.unknownElems && rnoshimcache.test( first )) ) {
-
-               cacheable = true;
-
-               cacheresults = jQuery.fragments[ first ];
-               if ( cacheresults && cacheresults !== 1 ) {
-                       fragment = cacheresults;
-               }
-       }
-
-       if ( !fragment ) {
-               fragment = doc.createDocumentFragment();
-               jQuery.clean( args, doc, fragment, scripts );
-       }
-
-       if ( cacheable ) {
-               jQuery.fragments[ first ] = cacheresults ? fragment : 1;
-       }
-
-       return { fragment: fragment, cacheable: cacheable };
-};
-
-jQuery.fragments = {};
-
-jQuery.each({
-       appendTo: "append",
-       prependTo: "prepend",
-       insertBefore: "before",
-       insertAfter: "after",
-       replaceAll: "replaceWith"
-}, function( name, original ) {
-       jQuery.fn[ name ] = function( selector ) {
-               var ret = [],
-                       insert = jQuery( selector ),
-                       parent = this.length === 1 && this[0].parentNode;
-
-               if ( parent && parent.nodeType === 11 && parent.childNodes.length === 1 && insert.length === 1 ) {
-                       insert[ original ]( this[0] );
-                       return this;
-
-               } else {
-                       for ( var i = 0, l = insert.length; i < l; i++ ) {
-                               var elems = ( i > 0 ? this.clone(true) : this ).get();
-                               jQuery( insert[i] )[ original ]( elems );
-                               ret = ret.concat( elems );
-                       }
-
-                       return this.pushStack( ret, name, insert.selector );
-               }
-       };
-});
-
-function getAll( elem ) {
-       if ( typeof elem.getElementsByTagName !== "undefined" ) {
-               return elem.getElementsByTagName( "*" );
-
-       } else if ( typeof elem.querySelectorAll !== "undefined" ) {
-               return elem.querySelectorAll( "*" );
-
-       } else {
-               return [];
-       }
-}
-
-// Used in clean, fixes the defaultChecked property
-function fixDefaultChecked( elem ) {
-       if ( elem.type === "checkbox" || elem.type === "radio" ) {
-               elem.defaultChecked = elem.checked;
-       }
-}
-// Finds all inputs and passes them to fixDefaultChecked
-function findInputs( elem ) {
-       var nodeName = ( elem.nodeName || "" ).toLowerCase();
-       if ( nodeName === "input" ) {
-               fixDefaultChecked( elem );
-       // Skip scripts, get other children
-       } else if ( nodeName !== "script" && typeof elem.getElementsByTagName !== "undefined" ) {
-               jQuery.grep( elem.getElementsByTagName("input"), fixDefaultChecked );
-       }
-}
-
-jQuery.extend({
-       clone: function( elem, dataAndEvents, deepDataAndEvents ) {
-               var clone = elem.cloneNode(true),
-                               srcElements,
-                               destElements,
-                               i;
-
-               if ( (!jQuery.support.noCloneEvent || !jQuery.support.noCloneChecked) &&
-                               (elem.nodeType === 1 || elem.nodeType === 11) && !jQuery.isXMLDoc(elem) ) {
-                       // IE copies events bound via attachEvent when using cloneNode.
-                       // Calling detachEvent on the clone will also remove the events
-                       // from the original. In order to get around this, we use some
-                       // proprietary methods to clear the events. Thanks to MooTools
-                       // guys for this hotness.
-
-                       cloneFixAttributes( elem, clone );
-
-                       // Using Sizzle here is crazy slow, so we use getElementsByTagName
-                       // instead
-                       srcElements = getAll( elem );
-                       destElements = getAll( clone );
-
-                       // Weird iteration because IE will replace the length property
-                       // with an element if you are cloning the body and one of the
-                       // elements on the page has a name or id of "length"
-                       for ( i = 0; srcElements[i]; ++i ) {
-                               // Ensure that the destination node is not null; Fixes #9587
-                               if ( destElements[i] ) {
-                                       cloneFixAttributes( srcElements[i], destElements[i] );
-                               }
-                       }
-               }
-
-               // Copy the events from the original to the clone
-               if ( dataAndEvents ) {
-                       cloneCopyEvent( elem, clone );
-
-                       if ( deepDataAndEvents ) {
-                               srcElements = getAll( elem );
-                               destElements = getAll( clone );
-
-                               for ( i = 0; srcElements[i]; ++i ) {
-                                       cloneCopyEvent( srcElements[i], destElements[i] );
-                               }
-                       }
-               }
-
-               srcElements = destElements = null;
-
-               // Return the cloned set
-               return clone;
-       },
-
-       clean: function( elems, context, fragment, scripts ) {
-               var checkScriptType;
-
-               context = context || document;
-
-               // !context.createElement fails in IE with an error but returns typeof 'object'
-               if ( typeof context.createElement === "undefined" ) {
-                       context = context.ownerDocument || context[0] && context[0].ownerDocument || document;
-               }
-
-               var ret = [], j;
-
-               for ( var i = 0, elem; (elem = elems[i]) != null; i++ ) {
-                       if ( typeof elem === "number" ) {
-                               elem += "";
-                       }
-
-                       if ( !elem ) {
-                               continue;
-                       }
-
-                       // Convert html string into DOM nodes
-                       if ( typeof elem === "string" ) {
-                               if ( !rhtml.test( elem ) ) {
-                                       elem = context.createTextNode( elem );
-                               } else {
-                                       // Fix "XHTML"-style tags in all browsers
-                                       elem = elem.replace(rxhtmlTag, "<$1></$2>");
-
-                                       // Trim whitespace, otherwise indexOf won't work as expected
-                                       var tag = ( rtagName.exec( elem ) || ["", ""] )[1].toLowerCase(),
-                                               wrap = wrapMap[ tag ] || wrapMap._default,
-                                               depth = wrap[0],
-                                               div = context.createElement("div");
-
-                                       // Append wrapper element to unknown element safe doc fragment
-                                       if ( context === document ) {
-                                               // Use the fragment we've already created for this document
-                                               safeFragment.appendChild( div );
-                                       } else {
-                                               // Use a fragment created with the owner document
-                                               createSafeFragment( context ).appendChild( div );
-                                       }
-
-                                       // Go to html and back, then peel off extra wrappers
-                                       div.innerHTML = wrap[1] + elem + wrap[2];
-
-                                       // Move to the right depth
-                                       while ( depth-- ) {
-                                               div = div.lastChild;
-                                       }
-
-                                       // Remove IE's autoinserted <tbody> from table fragments
-                                       if ( !jQuery.support.tbody ) {
-
-                                               // String was a <table>, *may* have spurious <tbody>
-                                               var hasBody = rtbody.test(elem),
-                                                       tbody = tag === "table" && !hasBody ?
-                                                               div.firstChild && div.firstChild.childNodes :
-
-                                                               // String was a bare <thead> or <tfoot>
-                                                               wrap[1] === "<table>" && !hasBody ?
-                                                                       div.childNodes :
-                                                                       [];
-
-                                               for ( j = tbody.length - 1; j >= 0 ; --j ) {
-                                                       if ( jQuery.nodeName( tbody[ j ], "tbody" ) && !tbody[ j ].childNodes.length ) {
-                                                               tbody[ j ].parentNode.removeChild( tbody[ j ] );
-                                                       }
-                                               }
-                                       }
-
-                                       // IE completely kills leading whitespace when innerHTML is used
-                                       if ( !jQuery.support.leadingWhitespace && rleadingWhitespace.test( elem ) ) {
-                                               div.insertBefore( context.createTextNode( rleadingWhitespace.exec(elem)[0] ), div.firstChild );
-                                       }
-
-                                       elem = div.childNodes;
-                               }
-                       }
-
-                       // Resets defaultChecked for any radios and checkboxes
-                       // about to be appended to the DOM in IE 6/7 (#8060)
-                       var len;
-                       if ( !jQuery.support.appendChecked ) {
-                               if ( elem[0] && typeof (len = elem.length) === "number" ) {
-                                       for ( j = 0; j < len; j++ ) {
-                                               findInputs( elem[j] );
-                                       }
-                               } else {
-                                       findInputs( elem );
-                               }
-                       }
-
-                       if ( elem.nodeType ) {
-                               ret.push( elem );
-                       } else {
-                               ret = jQuery.merge( ret, elem );
-                       }
-               }
-
-               if ( fragment ) {
-                       checkScriptType = function( elem ) {
-                               return !elem.type || rscriptType.test( elem.type );
-                       };
-                       for ( i = 0; ret[i]; i++ ) {
-                               if ( scripts && jQuery.nodeName( ret[i], "script" ) && (!ret[i].type || ret[i].type.toLowerCase() === "text/javascript") ) {
-                                       scripts.push( ret[i].parentNode ? ret[i].parentNode.removeChild( ret[i] ) : ret[i] );
-
-                               } else {
-                                       if ( ret[i].nodeType === 1 ) {
-                                               var jsTags = jQuery.grep( ret[i].getElementsByTagName( "script" ), checkScriptType );
-
-                                               ret.splice.apply( ret, [i + 1, 0].concat( jsTags ) );
-                                       }
-                                       fragment.appendChild( ret[i] );
-                               }
-                       }
-               }
-
-               return ret;
-       },
-
-       cleanData: function( elems ) {
-               var data, id,
-                       cache = jQuery.cache,
-                       special = jQuery.event.special,
-                       deleteExpando = jQuery.support.deleteExpando;
-
-               for ( var i = 0, elem; (elem = elems[i]) != null; i++ ) {
-                       if ( elem.nodeName && jQuery.noData[elem.nodeName.toLowerCase()] ) {
-                               continue;
-                       }
-
-                       id = elem[ jQuery.expando ];
-
-                       if ( id ) {
-                               data = cache[ id ];
-
-                               if ( data && data.events ) {
-                                       for ( var type in data.events ) {
-                                               if ( special[ type ] ) {
-                                                       jQuery.event.remove( elem, type );
-
-                                               // This is a shortcut to avoid jQuery.event.remove's overhead
-                                               } else {
-                                                       jQuery.removeEvent( elem, type, data.handle );
-                                               }
-                                       }
-
-                                       // Null the DOM reference to avoid IE6/7/8 leak (#7054)
-                                       if ( data.handle ) {
-                                               data.handle.elem = null;
-                                       }
-                               }
-
-                               if ( deleteExpando ) {
-                                       delete elem[ jQuery.expando ];
-
-                               } else if ( elem.removeAttribute ) {
-                                       elem.removeAttribute( jQuery.expando );
-                               }
-
-                               delete cache[ id ];
-                       }
-               }
-       }
-});
-
-function evalScript( i, elem ) {
-       if ( elem.src ) {
-               jQuery.ajax({
-                       url: elem.src,
-                       async: false,
-                       dataType: "script"
-               });
-       } else {
-               jQuery.globalEval( ( elem.text || elem.textContent || elem.innerHTML || "" ).replace( rcleanScript, "/*$0*/" ) );
-       }
-
-       if ( elem.parentNode ) {
-               elem.parentNode.removeChild( elem );
-       }
-}
-
-
-
-
-var ralpha = /alpha\([^)]*\)/i,
-       ropacity = /opacity=([^)]*)/,
-       // fixed for IE9, see #8346
-       rupper = /([A-Z]|^ms)/g,
-       rnumpx = /^-?\d+(?:px)?$/i,
-       rnum = /^-?\d/,
-       rrelNum = /^([\-+])=([\-+.\de]+)/,
-
-       cssShow = { position: "absolute", visibility: "hidden", display: "block" },
-       cssWidth = [ "Left", "Right" ],
-       cssHeight = [ "Top", "Bottom" ],
-       curCSS,
-
-       getComputedStyle,
-       currentStyle;
-
-jQuery.fn.css = function( name, value ) {
-       // Setting 'undefined' is a no-op
-       if ( arguments.length === 2 && value === undefined ) {
-               return this;
-       }
-
-       return jQuery.access( this, name, value, true, function( elem, name, value ) {
-               return value !== undefined ?
-                       jQuery.style( elem, name, value ) :
-                       jQuery.css( elem, name );
-       });
-};
-
-jQuery.extend({
-       // Add in style property hooks for overriding the default
-       // behavior of getting and setting a style property
-       cssHooks: {
-               opacity: {
-                       get: function( elem, computed ) {
-                               if ( computed ) {
-                                       // We should always get a number back from opacity
-                                       var ret = curCSS( elem, "opacity", "opacity" );
-                                       return ret === "" ? "1" : ret;
-
-                               } else {
-                                       return elem.style.opacity;
-                               }
-                       }
-               }
-       },
-
-       // Exclude the following css properties to add px
-       cssNumber: {
-               "fillOpacity": true,
-               "fontWeight": true,
-               "lineHeight": true,
-               "opacity": true,
-               "orphans": true,
-               "widows": true,
-               "zIndex": true,
-               "zoom": true
-       },
-
-       // Add in properties whose names you wish to fix before
-       // setting or getting the value
-       cssProps: {
-               // normalize float css property
-               "float": jQuery.support.cssFloat ? "cssFloat" : "styleFloat"
-       },
-
-       // Get and set the style property on a DOM Node
-       style: function( elem, name, value, extra ) {
-               // Don't set styles on text and comment nodes
-               if ( !elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style ) {
-                       return;
-               }
-
-               // Make sure that we're working with the right name
-               var ret, type, origName = jQuery.camelCase( name ),
-                       style = elem.style, hooks = jQuery.cssHooks[ origName ];
-
-               name = jQuery.cssProps[ origName ] || origName;
-
-               // Check if we're setting a value
-               if ( value !== undefined ) {
-                       type = typeof value;
-
-                       // convert relative number strings (+= or -=) to relative numbers. #7345
-                       if ( type === "string" && (ret = rrelNum.exec( value )) ) {
-                               value = ( +( ret[1] + 1) * +ret[2] ) + parseFloat( jQuery.css( elem, name ) );
-                               // Fixes bug #9237
-                               type = "number";
-                       }
-
-                       // Make sure that NaN and null values aren't set. See: #7116
-                       if ( value == null || type === "number" && isNaN( value ) ) {
-                               return;
-                       }
-
-                       // If a number was passed in, add 'px' to the (except for certain CSS properties)
-                       if ( type === "number" && !jQuery.cssNumber[ origName ] ) {
-                               value += "px";
-                       }
-
-                       // If a hook was provided, use that value, otherwise just set the specified value
-                       if ( !hooks || !("set" in hooks) || (value = hooks.set( elem, value )) !== undefined ) {
-                               // Wrapped to prevent IE from throwing errors when 'invalid' values are provided
-                               // Fixes bug #5509
-                               try {
-                                       style[ name ] = value;
-                               } catch(e) {}
-                       }
-
-               } else {
-                       // If a hook was provided get the non-computed value from there
-                       if ( hooks && "get" in hooks && (ret = hooks.get( elem, false, extra )) !== undefined ) {
-                               return ret;
-                       }
-
-                       // Otherwise just get the value from the style object
-                       return style[ name ];
-               }
-       },
-
-       css: function( elem, name, extra ) {
-               var ret, hooks;
-
-               // Make sure that we're working with the right name
-               name = jQuery.camelCase( name );
-               hooks = jQuery.cssHooks[ name ];
-               name = jQuery.cssProps[ name ] || name;
-
-               // cssFloat needs a special treatment
-               if ( name === "cssFloat" ) {
-                       name = "float";
-               }
-
-               // If a hook was provided get the computed value from there
-               if ( hooks && "get" in hooks && (ret = hooks.get( elem, true, extra )) !== undefined ) {
-                       return ret;
-
-               // Otherwise, if a way to get the computed value exists, use that
-               } else if ( curCSS ) {
-                       return curCSS( elem, name );
-               }
-       },
-
-       // A method for quickly swapping in/out CSS properties to get correct calculations
-       swap: function( elem, options, callback ) {
-               var old = {};
-
-               // Remember the old values, and insert the new ones
-               for ( var name in options ) {
-                       old[ name ] = elem.style[ name ];
-                       elem.style[ name ] = options[ name ];
-               }
-
-               callback.call( elem );
-
-               // Revert the old values
-               for ( name in options ) {
-                       elem.style[ name ] = old[ name ];
-               }
-       }
-});
-
-// DEPRECATED, Use jQuery.css() instead
-jQuery.curCSS = jQuery.css;
-
-jQuery.each(["height", "width"], function( i, name ) {
-       jQuery.cssHooks[ name ] = {
-               get: function( elem, computed, extra ) {
-                       var val;
-
-                       if ( computed ) {
-                               if ( elem.offsetWidth !== 0 ) {
-                                       return getWH( elem, name, extra );
-                               } else {
-                                       jQuery.swap( elem, cssShow, function() {
-                                               val = getWH( elem, name, extra );
-                                       });
-                               }
-
-                               return val;
-                       }
-               },
-
-               set: function( elem, value ) {
-                       if ( rnumpx.test( value ) ) {
-                               // ignore negative width and height values #1599
-                               value = parseFloat( value );
-
-                               if ( value >= 0 ) {
-                                       return value + "px";
-                               }
-
-                       } else {
-                               return value;
-                       }
-               }
-       };
-});
-
-if ( !jQuery.support.opacity ) {
-       jQuery.cssHooks.opacity = {
-               get: function( elem, computed ) {
-                       // IE uses filters for opacity
-                       return ropacity.test( (computed && elem.currentStyle ? elem.currentStyle.filter : elem.style.filter) || "" ) ?
-                               ( parseFloat( RegExp.$1 ) / 100 ) + "" :
-                               computed ? "1" : "";
-               },
-
-               set: function( elem, value ) {
-                       var style = elem.style,
-                               currentStyle = elem.currentStyle,
-                               opacity = jQuery.isNumeric( value ) ? "alpha(opacity=" + value * 100 + ")" : "",
-                               filter = currentStyle && currentStyle.filter || style.filter || "";
-
-                       // IE has trouble with opacity if it does not have layout
-                       // Force it by setting the zoom level
-                       style.zoom = 1;
-
-                       // if setting opacity to 1, and no other filters exist - attempt to remove filter attribute #6652
-                       if ( value >= 1 && jQuery.trim( filter.replace( ralpha, "" ) ) === "" ) {
-
-                               // Setting style.filter to null, "" & " " still leave "filter:" in the cssText
-                               // if "filter:" is present at all, clearType is disabled, we want to avoid this
-                               // style.removeAttribute is IE Only, but so apparently is this code path...
-                               style.removeAttribute( "filter" );
-
-                               // if there there is no filter style applied in a css rule, we are done
-                               if ( currentStyle && !currentStyle.filter ) {
-                                       return;
-                               }
-                       }
-
-                       // otherwise, set new filter values
-                       style.filter = ralpha.test( filter ) ?
-                               filter.replace( ralpha, opacity ) :
-                               filter + " " + opacity;
-               }
-       };
-}
-
-jQuery(function() {
-       // This hook cannot be added until DOM ready because the support test
-       // for it is not run until after DOM ready
-       if ( !jQuery.support.reliableMarginRight ) {
-               jQuery.cssHooks.marginRight = {
-                       get: function( elem, computed ) {
-                               // WebKit Bug 13343 - getComputedStyle returns wrong value for margin-right
-                               // Work around by temporarily setting element display to inline-block
-                               var ret;
-                               jQuery.swap( elem, { "display": "inline-block" }, function() {
-                                       if ( computed ) {
-                                               ret = curCSS( elem, "margin-right", "marginRight" );
-                                       } else {
-                                               ret = elem.style.marginRight;
-                                       }
-                               });
-                               return ret;
-                       }
-               };
-       }
-});
-
-if ( document.defaultView && document.defaultView.getComputedStyle ) {
-       getComputedStyle = function( elem, name ) {
-               var ret, defaultView, computedStyle;
-
-               name = name.replace( rupper, "-$1" ).toLowerCase();
-
-               if ( !(defaultView = elem.ownerDocument.defaultView) ) {
-                       return undefined;
-               }
-
-               if ( (computedStyle = defaultView.getComputedStyle( elem, null )) ) {
-                       ret = computedStyle.getPropertyValue( name );
-                       if ( ret === "" && !jQuery.contains( elem.ownerDocument.documentElement, elem ) ) {
-                               ret = jQuery.style( elem, name );
-                       }
-               }
-
-               return ret;
-       };
-}
-
-if ( document.documentElement.currentStyle ) {
-       currentStyle = function( elem, name ) {
-               var left, rsLeft, uncomputed,
-                       ret = elem.currentStyle && elem.currentStyle[ name ],
-                       style = elem.style;
-
-               // Avoid setting ret to empty string here
-               // so we don't default to auto
-               if ( ret === null && style && (uncomputed = style[ name ]) ) {
-                       ret = uncomputed;
-               }
-
-               // From the awesome hack by Dean Edwards
-               // http://erik.eae.net/archives/2007/07/27/18.54.15/#comment-102291
-
-               // If we're not dealing with a regular pixel number
-               // but a number that has a weird ending, we need to convert it to pixels
-               if ( !rnumpx.test( ret ) && rnum.test( ret ) ) {
-
-                       // Remember the original values
-                       left = style.left;
-                       rsLeft = elem.runtimeStyle && elem.runtimeStyle.left;
-
-                       // Put in the new values to get a computed value out
-                       if ( rsLeft ) {
-                               elem.runtimeStyle.left = elem.currentStyle.left;
-                       }
-                       style.left = name === "fontSize" ? "1em" : ( ret || 0 );
-                       ret = style.pixelLeft + "px";
-
-                       // Revert the changed values
-                       style.left = left;
-                       if ( rsLeft ) {
-                               elem.runtimeStyle.left = rsLeft;
-                       }
-               }
-
-               return ret === "" ? "auto" : ret;
-       };
-}
-
-curCSS = getComputedStyle || currentStyle;
-
-function getWH( elem, name, extra ) {
-
-       // Start with offset property
-       var val = name === "width" ? elem.offsetWidth : elem.offsetHeight,
-               which = name === "width" ? cssWidth : cssHeight;
-
-       if ( val > 0 ) {
-               if ( extra !== "border" ) {
-                       jQuery.each( which, function() {
-                               if ( !extra ) {
-                                       val -= parseFloat( jQuery.css( elem, "padding" + this ) ) || 0;
-                               }
-                               if ( extra === "margin" ) {
-                                       val += parseFloat( jQuery.css( elem, extra + this ) ) || 0;
-                               } else {
-                                       val -= parseFloat( jQuery.css( elem, "border" + this + "Width" ) ) || 0;
-                               }
-                       });
-               }
-
-               return val + "px";
-       }
-
-       // Fall back to computed then uncomputed css if necessary
-       val = curCSS( elem, name, name );
-       if ( val < 0 || val == null ) {
-               val = elem.style[ name ] || 0;
-       }
-       // Normalize "", auto, and prepare for extra
-       val = parseFloat( val ) || 0;
-
-       // Add padding, border, margin
-       if ( extra ) {
-               jQuery.each( which, function() {
-                       val += parseFloat( jQuery.css( elem, "padding" + this ) ) || 0;
-                       if ( extra !== "padding" ) {
-                               val += parseFloat( jQuery.css( elem, "border" + this + "Width" ) ) || 0;
-                       }
-                       if ( extra === "margin" ) {
-                               val += parseFloat( jQuery.css( elem, extra + this ) ) || 0;
-                       }
-               });
-       }
-
-       return val + "px";
-}
-
-if ( jQuery.expr && jQuery.expr.filters ) {
-       jQuery.expr.filters.hidden = function( elem ) {
-               var width = elem.offsetWidth,
-                       height = elem.offsetHeight;
-
-               return ( width === 0 && height === 0 ) || (!jQuery.support.reliableHiddenOffsets && ((elem.style && elem.style.display) || jQuery.css( elem, "display" )) === "none");
-       };
-
-       jQuery.expr.filters.visible = function( elem ) {
-               return !jQuery.expr.filters.hidden( elem );
-       };
-}
-
-
-
-
-var r20 = /%20/g,
-       rbracket = /\[\]$/,
-       rCRLF = /\r?\n/g,
-       rhash = /#.*$/,
-       rheaders = /^(.*?):[ \t]*([^\r\n]*)\r?$/mg, // IE leaves an \r character at EOL
-       rinput = /^(?:color|date|datetime|datetime-local|email|hidden|month|number|password|range|search|tel|text|time|url|week)$/i,
-       // #7653, #8125, #8152: local protocol detection
-       rlocalProtocol = /^(?:about|app|app\-storage|.+\-extension|file|res|widget):$/,
-       rnoContent = /^(?:GET|HEAD)$/,
-       rprotocol = /^\/\//,
-       rquery = /\?/,
-       rscript = /<script\b[^<]*(?:(?!<\/script>)<[^<]*)*<\/script>/gi,
-       rselectTextarea = /^(?:select|textarea)/i,
-       rspacesAjax = /\s+/,
-       rts = /([?&])_=[^&]*/,
-       rurl = /^([\w\+\.\-]+:)(?:\/\/([^\/?#:]*)(?::(\d+))?)?/,
-
-       // Keep a copy of the old load method
-       _load = jQuery.fn.load,
-
-       /* Prefilters
-        * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example)
-        * 2) These are called:
-        *    - BEFORE asking for a transport
-        *    - AFTER param serialization (s.data is a string if s.processData is true)
-        * 3) key is the dataType
-        * 4) the catchall symbol "*" can be used
-        * 5) execution will start with transport dataType and THEN continue down to "*" if needed
-        */
-       prefilters = {},
-
-       /* Transports bindings
-        * 1) key is the dataType
-        * 2) the catchall symbol "*" can be used
-        * 3) selection will start with transport dataType and THEN go to "*" if needed
-        */
-       transports = {},
-
-       // Document location
-       ajaxLocation,
-
-       // Document location segments
-       ajaxLocParts,
-
-       // Avoid comment-prolog char sequence (#10098); must appease lint and evade compression
-       allTypes = ["*/"] + ["*"];
-
-// #8138, IE may throw an exception when accessing
-// a field from window.location if document.domain has been set
-try {
-       ajaxLocation = location.href;
-} catch( e ) {
-       // Use the href attribute of an A element
-       // since IE will modify it given document.location
-       ajaxLocation = document.createElement( "a" );
-       ajaxLocation.href = "";
-       ajaxLocation = ajaxLocation.href;
-}
-
-// Segment location into parts
-ajaxLocParts = rurl.exec( ajaxLocation.toLowerCase() ) || [];
-
-// Base "constructor" for jQuery.ajaxPrefilter and jQuery.ajaxTransport
-function addToPrefiltersOrTransports( structure ) {
-
-       // dataTypeExpression is optional and defaults to "*"
-       return function( dataTypeExpression, func ) {
-
-               if ( typeof dataTypeExpression !== "string" ) {
-                       func = dataTypeExpression;
-                       dataTypeExpression = "*";
-               }
-
-               if ( jQuery.isFunction( func ) ) {
-                       var dataTypes = dataTypeExpression.toLowerCase().split( rspacesAjax ),
-                               i = 0,
-                               length = dataTypes.length,
-                               dataType,
-                               list,
-                               placeBefore;
-
-                       // For each dataType in the dataTypeExpression
-                       for ( ; i < length; i++ ) {
-                               dataType = dataTypes[ i ];
-                               // We control if we're asked to add before
-                               // any existing element
-                               placeBefore = /^\+/.test( dataType );
-                               if ( placeBefore ) {
-                                       dataType = dataType.substr( 1 ) || "*";
-                               }
-                               list = structure[ dataType ] = structure[ dataType ] || [];
-                               // then we add to the structure accordingly
-                               list[ placeBefore ? "unshift" : "push" ]( func );
-                       }
-               }
-       };
-}
-
-// Base inspection function for prefilters and transports
-function inspectPrefiltersOrTransports( structure, options, originalOptions, jqXHR,
-               dataType /* internal */, inspected /* internal */ ) {
-
-       dataType = dataType || options.dataTypes[ 0 ];
-       inspected = inspected || {};
-
-       inspected[ dataType ] = true;
-
-       var list = structure[ dataType ],
-               i = 0,
-               length = list ? list.length : 0,
-               executeOnly = ( structure === prefilters ),
-               selection;
-
-       for ( ; i < length && ( executeOnly || !selection ); i++ ) {
-               selection = list[ i ]( options, originalOptions, jqXHR );
-               // If we got redirected to another dataType
-               // we try there if executing only and not done already
-               if ( typeof selection === "string" ) {
-                       if ( !executeOnly || inspected[ selection ] ) {
-                               selection = undefined;
-                       } else {
-                               options.dataTypes.unshift( selection );
-                               selection = inspectPrefiltersOrTransports(
-                                               structure, options, originalOptions, jqXHR, selection, inspected );
-                       }
-               }
-       }
-       // If we're only executing or nothing was selected
-       // we try the catchall dataType if not done already
-       if ( ( executeOnly || !selection ) && !inspected[ "*" ] ) {
-               selection = inspectPrefiltersOrTransports(
-                               structure, options, originalOptions, jqXHR, "*", inspected );
-       }
-       // unnecessary when only executing (prefilters)
-       // but it'll be ignored by the caller in that case
-       return selection;
-}
-
-// A special extend for ajax options
-// that takes "flat" options (not to be deep extended)
-// Fixes #9887
-function ajaxExtend( target, src ) {
-       var key, deep,
-               flatOptions = jQuery.ajaxSettings.flatOptions || {};
-       for ( key in src ) {
-               if ( src[ key ] !== undefined ) {
-                       ( flatOptions[ key ] ? target : ( deep || ( deep = {} ) ) )[ key ] = src[ key ];
-               }
-       }
-       if ( deep ) {
-               jQuery.extend( true, target, deep );
-       }
-}
-
-jQuery.fn.extend({
-       load: function( url, params, callback ) {
-               if ( typeof url !== "string" && _load ) {
-                       return _load.apply( this, arguments );
-
-               // Don't do a request if no elements are being requested
-               } else if ( !this.length ) {
-                       return this;
-               }
-
-               var off = url.indexOf( " " );
-               if ( off >= 0 ) {
-                       var selector = url.slice( off, url.length );
-                       url = url.slice( 0, off );
-               }
-
-               // Default to a GET request
-               var type = "GET";
-
-               // If the second parameter was provided
-               if ( params ) {
-                       // If it's a function
-                       if ( jQuery.isFunction( params ) ) {
-                               // We assume that it's the callback
-                               callback = params;
-                               params = undefined;
-
-                       // Otherwise, build a param string
-                       } else if ( typeof params === "object" ) {
-                               params = jQuery.param( params, jQuery.ajaxSettings.traditional );
-                               type = "POST";
-                       }
-               }
-
-               var self = this;
-
-               // Request the remote document
-               jQuery.ajax({
-                       url: url,
-                       type: type,
-                       dataType: "html",
-                       data: params,
-                       // Complete callback (responseText is used internally)
-                       complete: function( jqXHR, status, responseText ) {
-                               // Store the response as specified by the jqXHR object
-                               responseText = jqXHR.responseText;
-                               // If successful, inject the HTML into all the matched elements
-                               if ( jqXHR.isResolved() ) {
-                                       // #4825: Get the actual response in case
-                                       // a dataFilter is present in ajaxSettings
-                                       jqXHR.done(function( r ) {
-                                               responseText = r;
-                                       });
-                                       // See if a selector was specified
-                                       self.html( selector ?
-                                               // Create a dummy div to hold the results
-                                               jQuery("<div>")
-                                                       // inject the contents of the document in, removing the scripts
-                                                       // to avoid any 'Permission Denied' errors in IE
-                                                       .append(responseText.replace(rscript, ""))
-
-                                                       // Locate the specified elements
-                                                       .find(selector) :
-
-                                               // If not, just inject the full result
-                                               responseText );
-                               }
-
-                               if ( callback ) {
-                                       self.each( callback, [ responseText, status, jqXHR ] );
-                               }
-                       }
-               });
-
-               return this;
-       },
-
-       serialize: function() {
-               return jQuery.param( this.serializeArray() );
-       },
-
-       serializeArray: function() {
-               return this.map(function(){
-                       return this.elements ? jQuery.makeArray( this.elements ) : this;
-               })
-               .filter(function(){
-                       return this.name && !this.disabled &&
-                               ( this.checked || rselectTextarea.test( this.nodeName ) ||
-                                       rinput.test( this.type ) );
-               })
-               .map(function( i, elem ){
-                       var val = jQuery( this ).val();
-
-                       return val == null ?
-                               null :
-                               jQuery.isArray( val ) ?
-                                       jQuery.map( val, function( val, i ){
-                                               return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) };
-                                       }) :
-                                       { name: elem.name, value: val.replace( rCRLF, "\r\n" ) };
-               }).get();
-       }
-});
-
-// Attach a bunch of functions for handling common AJAX events
-jQuery.each( "ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split( " " ), function( i, o ){
-       jQuery.fn[ o ] = function( f ){
-               return this.bind( o, f );
-       };
-});
-
-jQuery.each( [ "get", "post" ], function( i, method ) {
-       jQuery[ method ] = function( url, data, callback, type ) {
-               // shift arguments if data argument was omitted
-               if ( jQuery.isFunction( data ) ) {
-                       type = type || callback;
-                       callback = data;
-                       data = undefined;
-               }
-
-               return jQuery.ajax({
-                       type: method,
-                       url: url,
-                       data: data,
-                       success: callback,
-                       dataType: type
-               });
-       };
-});
-
-jQuery.extend({
-
-       getScript: function( url, callback ) {
-               return jQuery.get( url, undefined, callback, "script" );
-       },
-
-       getJSON: function( url, data, callback ) {
-               return jQuery.get( url, data, callback, "json" );
-       },
-
-       // Creates a full fledged settings object into target
-       // with both ajaxSettings and settings fields.
-       // If target is omitted, writes into ajaxSettings.
-       ajaxSetup: function( target, settings ) {
-               if ( settings ) {
-                       // Building a settings object
-                       ajaxExtend( target, jQuery.ajaxSettings );
-               } else {
-                       // Extending ajaxSettings
-                       settings = target;
-                       target = jQuery.ajaxSettings;
-               }
-               ajaxExtend( target, settings );
-               return target;
-       },
-
-       ajaxSettings: {
-               url: ajaxLocation,
-               isLocal: rlocalProtocol.test( ajaxLocParts[ 1 ] ),
-               global: true,
-               type: "GET",
-               contentType: "application/x-www-form-urlencoded",
-               processData: true,
-               async: true,
-               /*
-               timeout: 0,
-               data: null,
-               dataType: null,
-               username: null,
-               password: null,
-               cache: null,
-               traditional: false,
-               headers: {},
-               */
-
-               accepts: {
-                       xml: "application/xml, text/xml",
-                       html: "text/html",
-                       text: "text/plain",
-                       json: "application/json, text/javascript",
-                       "*": allTypes
-               },
-
-               contents: {
-                       xml: /xml/,
-                       html: /html/,
-                       json: /json/
-               },
-
-               responseFields: {
-                       xml: "responseXML",
-                       text: "responseText"
-               },
-
-               // List of data converters
-               // 1) key format is "source_type destination_type" (a single space in-between)
-               // 2) the catchall symbol "*" can be used for source_type
-               converters: {
-
-                       // Convert anything to text
-                       "* text": window.String,
-
-                       // Text to html (true = no transformation)
-                       "text html": true,
-
-                       // Evaluate text as a json expression
-                       "text json": jQuery.parseJSON,
-
-                       // Parse text as xml
-                       "text xml": jQuery.parseXML
-               },
-
-               // For options that shouldn't be deep extended:
-               // you can add your own custom options here if
-               // and when you create one that shouldn't be
-               // deep extended (see ajaxExtend)
-               flatOptions: {
-                       context: true,
-                       url: true
-               }
-       },
-
-       ajaxPrefilter: addToPrefiltersOrTransports( prefilters ),
-       ajaxTransport: addToPrefiltersOrTransports( transports ),
-
-       // Main method
-       ajax: function( url, options ) {
-
-               // If url is an object, simulate pre-1.5 signature
-               if ( typeof url === "object" ) {
-                       options = url;
-                       url = undefined;
-               }
-
-               // Force options to be an object
-               options = options || {};
-
-               var // Create the final options object
-                       s = jQuery.ajaxSetup( {}, options ),
-                       // Callbacks context
-                       callbackContext = s.context || s,
-                       // Context for global events
-                       // It's the callbackContext if one was provided in the options
-                       // and if it's a DOM node or a jQuery collection
-                       globalEventContext = callbackContext !== s &&
-                               ( callbackContext.nodeType || callbackContext instanceof jQuery ) ?
-                                               jQuery( callbackContext ) : jQuery.event,
-                       // Deferreds
-                       deferred = jQuery.Deferred(),
-                       completeDeferred = jQuery.Callbacks( "once memory" ),
-                       // Status-dependent callbacks
-                       statusCode = s.statusCode || {},
-                       // ifModified key
-                       ifModifiedKey,
-                       // Headers (they are sent all at once)
-                       requestHeaders = {},
-                       requestHeadersNames = {},
-                       // Response headers
-                       responseHeadersString,
-                       responseHeaders,
-                       // transport
-                       transport,
-                       // timeout handle
-                       timeoutTimer,
-                       // Cross-domain detection vars
-                       parts,
-                       // The jqXHR state
-                       state = 0,
-                       // To know if global events are to be dispatched
-                       fireGlobals,
-                       // Loop variable
-                       i,
-                       // Fake xhr
-                       jqXHR = {
-
-                               readyState: 0,
-
-                               // Caches the header
-                               setRequestHeader: function( name, value ) {
-                                       if ( !state ) {
-                                               var lname = name.toLowerCase();
-                                               name = requestHeadersNames[ lname ] = requestHeadersNames[ lname ] || name;
-                                               requestHeaders[ name ] = value;
-                                       }
-                                       return this;
-                               },
-
-                               // Raw string
-                               getAllResponseHeaders: function() {
-                                       return state === 2 ? responseHeadersString : null;
-                               },
-
-                               // Builds headers hashtable if needed
-                               getResponseHeader: function( key ) {
-                                       var match;
-                                       if ( state === 2 ) {
-                                               if ( !responseHeaders ) {
-                                                       responseHeaders = {};
-                                                       while( ( match = rheaders.exec( responseHeadersString ) ) ) {
-                                                               responseHeaders[ match[1].toLowerCase() ] = match[ 2 ];
-                                                       }
-                                               }
-                                               match = responseHeaders[ key.toLowerCase() ];
-                                       }
-                                       return match === undefined ? null : match;
-                               },
-
-                               // Overrides response content-type header
-                               overrideMimeType: function( type ) {
-                                       if ( !state ) {
-                                               s.mimeType = type;
-                                       }
-                                       return this;
-                               },
-
-                               // Cancel the request
-                               abort: function( statusText ) {
-                                       statusText = statusText || "abort";
-                                       if ( transport ) {
-                                               transport.abort( statusText );
-                                       }
-                                       done( 0, statusText );
-                                       return this;
-                               }
-                       };
-
-               // Callback for when everything is done
-               // It is defined here because jslint complains if it is declared
-               // at the end of the function (which would be more logical and readable)
-               function done( status, nativeStatusText, responses, headers ) {
-
-                       // Called once
-                       if ( state === 2 ) {
-                               return;
-                       }
-
-                       // State is "done" now
-                       state = 2;
-
-                       // Clear timeout if it exists
-                       if ( timeoutTimer ) {
-                               clearTimeout( timeoutTimer );
-                       }
-
-                       // Dereference transport for early garbage collection
-                       // (no matter how long the jqXHR object will be used)
-                       transport = undefined;
-
-                       // Cache response headers
-                       responseHeadersString = headers || "";
-
-                       // Set readyState
-                       jqXHR.readyState = status > 0 ? 4 : 0;
-
-                       var isSuccess,
-                               success,
-                               error,
-                               statusText = nativeStatusText,
-                               response = responses ? ajaxHandleResponses( s, jqXHR, responses ) : undefined,
-                               lastModified,
-                               etag;
-
-                       // If successful, handle type chaining
-                       if ( status >= 200 && status < 300 || status === 304 ) {
-
-                               // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.
-                               if ( s.ifModified ) {
-
-                                       if ( ( lastModified = jqXHR.getResponseHeader( "Last-Modified" ) ) ) {
-                                               jQuery.lastModified[ ifModifiedKey ] = lastModified;
-                                       }
-                                       if ( ( etag = jqXHR.getResponseHeader( "Etag" ) ) ) {
-                                               jQuery.etag[ ifModifiedKey ] = etag;
-                                       }
-                               }
-
-                               // If not modified
-                               if ( status === 304 ) {
-
-                                       statusText = "notmodified";
-                                       isSuccess = true;
-
-                               // If we have data
-                               } else {
-
-                                       try {
-                                               success = ajaxConvert( s, response );
-                                               statusText = "success";
-                                               isSuccess = true;
-                                       } catch(e) {
-                                               // We have a parsererror
-                                               statusText = "parsererror";
-                                               error = e;
-                                       }
-                               }
-                       } else {
-                               // We extract error from statusText
-                               // then normalize statusText and status for non-aborts
-                               error = statusText;
-                               if ( !statusText || status ) {
-                                       statusText = "error";
-                                       if ( status < 0 ) {
-                                               status = 0;
-                                       }
-                               }
-                       }
-
-                       // Set data for the fake xhr object
-                       jqXHR.status = status;
-                       jqXHR.statusText = "" + ( nativeStatusText || statusText );
-
-                       // Success/Error
-                       if ( isSuccess ) {
-                               deferred.resolveWith( callbackContext, [ success, statusText, jqXHR ] );
-                       } else {
-                               deferred.rejectWith( callbackContext, [ jqXHR, statusText, error ] );
-                       }
-
-                       // Status-dependent callbacks
-                       jqXHR.statusCode( statusCode );
-                       statusCode = undefined;
-
-                       if ( fireGlobals ) {
-                               globalEventContext.trigger( "ajax" + ( isSuccess ? "Success" : "Error" ),
-                                               [ jqXHR, s, isSuccess ? success : error ] );
-                       }
-
-                       // Complete
-                       completeDeferred.fireWith( callbackContext, [ jqXHR, statusText ] );
-
-                       if ( fireGlobals ) {
-                               globalEventContext.trigger( "ajaxComplete", [ jqXHR, s ] );
-                               // Handle the global AJAX counter
-                               if ( !( --jQuery.active ) ) {
-                                       jQuery.event.trigger( "ajaxStop" );
-                               }
-                       }
-               }
-
-               // Attach deferreds
-               deferred.promise( jqXHR );
-               jqXHR.success = jqXHR.done;
-               jqXHR.error = jqXHR.fail;
-               jqXHR.complete = completeDeferred.add;
-
-               // Status-dependent callbacks
-               jqXHR.statusCode = function( map ) {
-                       if ( map ) {
-                               var tmp;
-                               if ( state < 2 ) {
-                                       for ( tmp in map ) {
-                                               statusCode[ tmp ] = [ statusCode[tmp], map[tmp] ];
-                                       }
-                               } else {
-                                       tmp = map[ jqXHR.status ];
-                                       jqXHR.then( tmp, tmp );
-                               }
-                       }
-                       return this;
-               };
-
-               // Remove hash character (#7531: and string promotion)
-               // Add protocol if not provided (#5866: IE7 issue with protocol-less urls)
-               // We also use the url parameter if available
-               s.url = ( ( url || s.url ) + "" ).replace( rhash, "" ).replace( rprotocol, ajaxLocParts[ 1 ] + "//" );
-
-               // Extract dataTypes list
-               s.dataTypes = jQuery.trim( s.dataType || "*" ).toLowerCase().split( rspacesAjax );
-
-               // Determine if a cross-domain request is in order
-               if ( s.crossDomain == null ) {
-                       parts = rurl.exec( s.url.toLowerCase() );
-                       s.crossDomain = !!( parts &&
-                               ( parts[ 1 ] != ajaxLocParts[ 1 ] || parts[ 2 ] != ajaxLocParts[ 2 ] ||
-                                       ( parts[ 3 ] || ( parts[ 1 ] === "http:" ? 80 : 443 ) ) !=
-                                               ( ajaxLocParts[ 3 ] || ( ajaxLocParts[ 1 ] === "http:" ? 80 : 443 ) ) )
-                       );
-               }
-
-               // Convert data if not already a string
-               if ( s.data && s.processData && typeof s.data !== "string" ) {
-                       s.data = jQuery.param( s.data, s.traditional );
-               }
-
-               // Apply prefilters
-               inspectPrefiltersOrTransports( prefilters, s, options, jqXHR );
-
-               // If request was aborted inside a prefiler, stop there
-               if ( state === 2 ) {
-                       return false;
-               }
-
-               // We can fire global events as of now if asked to
-               fireGlobals = s.global;
-
-               // Uppercase the type
-               s.type = s.type.toUpperCase();
-
-               // Determine if request has content
-               s.hasContent = !rnoContent.test( s.type );
-
-               // Watch for a new set of requests
-               if ( fireGlobals && jQuery.active++ === 0 ) {
-                       jQuery.event.trigger( "ajaxStart" );
-               }
-
-               // More options handling for requests with no content
-               if ( !s.hasContent ) {
-
-                       // If data is available, append data to url
-                       if ( s.data ) {
-                               s.url += ( rquery.test( s.url ) ? "&" : "?" ) + s.data;
-                               // #9682: remove data so that it's not used in an eventual retry
-                               delete s.data;
-                       }
-
-                       // Get ifModifiedKey before adding the anti-cache parameter
-                       ifModifiedKey = s.url;
-
-                       // Add anti-cache in url if needed
-                       if ( s.cache === false ) {
-
-                               var ts = jQuery.now(),
-                                       // try replacing _= if it is there
-                                       ret = s.url.replace( rts, "$1_=" + ts );
-
-                               // if nothing was replaced, add timestamp to the end
-                               s.url = ret + ( ( ret === s.url ) ? ( rquery.test( s.url ) ? "&" : "?" ) + "_=" + ts : "" );
-                       }
-               }
-
-               // Set the correct header, if data is being sent
-               if ( s.data && s.hasContent && s.contentType !== false || options.contentType ) {
-                       jqXHR.setRequestHeader( "Content-Type", s.contentType );
-               }
-
-               // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.
-               if ( s.ifModified ) {
-                       ifModifiedKey = ifModifiedKey || s.url;
-                       if ( jQuery.lastModified[ ifModifiedKey ] ) {
-                               jqXHR.setRequestHeader( "If-Modified-Since", jQuery.lastModified[ ifModifiedKey ] );
-                       }
-                       if ( jQuery.etag[ ifModifiedKey ] ) {
-                               jqXHR.setRequestHeader( "If-None-Match", jQuery.etag[ ifModifiedKey ] );
-                       }
-               }
-
-               // Set the Accepts header for the server, depending on the dataType
-               jqXHR.setRequestHeader(
-                       "Accept",
-                       s.dataTypes[ 0 ] && s.accepts[ s.dataTypes[0] ] ?
-                               s.accepts[ s.dataTypes[0] ] + ( s.dataTypes[ 0 ] !== "*" ? ", " + allTypes + "; q=0.01" : "" ) :
-                               s.accepts[ "*" ]
-               );
-
-               // Check for headers option
-               for ( i in s.headers ) {
-                       jqXHR.setRequestHeader( i, s.headers[ i ] );
-               }
-
-               // Allow custom headers/mimetypes and early abort
-               if ( s.beforeSend && ( s.beforeSend.call( callbackContext, jqXHR, s ) === false || state === 2 ) ) {
-                               // Abort if not done already
-                               jqXHR.abort();
-                               return false;
-
-               }
-
-               // Install callbacks on deferreds
-               for ( i in { success: 1, error: 1, complete: 1 } ) {
-                       jqXHR[ i ]( s[ i ] );
-               }
-
-               // Get transport
-               transport = inspectPrefiltersOrTransports( transports, s, options, jqXHR );
-
-               // If no transport, we auto-abort
-               if ( !transport ) {
-                       done( -1, "No Transport" );
-               } else {
-                       jqXHR.readyState = 1;
-                       // Send global event
-                       if ( fireGlobals ) {
-                               globalEventContext.trigger( "ajaxSend", [ jqXHR, s ] );
-                       }
-                       // Timeout
-                       if ( s.async && s.timeout > 0 ) {
-                               timeoutTimer = setTimeout( function(){
-                                       jqXHR.abort( "timeout" );
-                               }, s.timeout );
-                       }
-
-                       try {
-                               state = 1;
-                               transport.send( requestHeaders, done );
-                       } catch (e) {
-                               // Propagate exception as error if not done
-                               if ( state < 2 ) {
-                                       done( -1, e );
-                               // Simply rethrow otherwise
-                               } else {
-                                       jQuery.error( e );
-                               }
-                       }
-               }
-
-               return jqXHR;
-       },
-
-       // Serialize an array of form elements or a set of
-       // key/values into a query string
-       param: function( a, traditional ) {
-               var s = [],
-                       add = function( key, value ) {
-                               // If value is a function, invoke it and return its value
-                               value = jQuery.isFunction( value ) ? value() : value;
-                               s[ s.length ] = encodeURIComponent( key ) + "=" + encodeURIComponent( value );
-                       };
-
-               // Set traditional to true for jQuery <= 1.3.2 behavior.
-               if ( traditional === undefined ) {
-                       traditional = jQuery.ajaxSettings.traditional;
-               }
-
-               // If an array was passed in, assume that it is an array of form elements.
-               if ( jQuery.isArray( a ) || ( a.jquery && !jQuery.isPlainObject( a ) ) ) {
-                       // Serialize the form elements
-                       jQuery.each( a, function() {
-                               add( this.name, this.value );
-                       });
-
-               } else {
-                       // If traditional, encode the "old" way (the way 1.3.2 or older
-                       // did it), otherwise encode params recursively.
-                       for ( var prefix in a ) {
-                               buildParams( prefix, a[ prefix ], traditional, add );
-                       }
-               }
-
-               // Return the resulting serialization
-               return s.join( "&" ).replace( r20, "+" );
-       }
-});
-
-function buildParams( prefix, obj, traditional, add ) {
-       if ( jQuery.isArray( obj ) ) {
-               // Serialize array item.
-               jQuery.each( obj, function( i, v ) {
-                       if ( traditional || rbracket.test( prefix ) ) {
-                               // Treat each array item as a scalar.
-                               add( prefix, v );
-
-                       } else {
-                               // If array item is non-scalar (array or object), encode its
-                               // numeric index to resolve deserialization ambiguity issues.
-                               // Note that rack (as of 1.0.0) can't currently deserialize
-                               // nested arrays properly, and attempting to do so may cause
-                               // a server error. Possible fixes are to modify rack's
-                               // deserialization algorithm or to provide an option or flag
-                               // to force array serialization to be shallow.
-                               buildParams( prefix + "[" + ( typeof v === "object" || jQuery.isArray(v) ? i : "" ) + "]", v, traditional, add );
-                       }
-               });
-
-       } else if ( !traditional && obj != null && typeof obj === "object" ) {
-               // Serialize object item.
-               for ( var name in obj ) {
-                       buildParams( prefix + "[" + name + "]", obj[ name ], traditional, add );
-               }
-
-       } else {
-               // Serialize scalar item.
-               add( prefix, obj );
-       }
-}
-
-// This is still on the jQuery object... for now
-// Want to move this to jQuery.ajax some day
-jQuery.extend({
-
-       // Counter for holding the number of active queries
-       active: 0,
-
-       // Last-Modified header cache for next request
-       lastModified: {},
-       etag: {}
-
-});
-
-/* Handles responses to an ajax request:
- * - sets all responseXXX fields accordingly
- * - finds the right dataType (mediates between content-type and expected dataType)
- * - returns the corresponding response
- */
-function ajaxHandleResponses( s, jqXHR, responses ) {
-
-       var contents = s.contents,
-               dataTypes = s.dataTypes,
-               responseFields = s.responseFields,
-               ct,
-               type,
-               finalDataType,
-               firstDataType;
-
-       // Fill responseXXX fields
-       for ( type in responseFields ) {
-               if ( type in responses ) {
-                       jqXHR[ responseFields[type] ] = responses[ type ];
-               }
-       }
-
-       // Remove auto dataType and get content-type in the process
-       while( dataTypes[ 0 ] === "*" ) {
-               dataTypes.shift();
-               if ( ct === undefined ) {
-                       ct = s.mimeType || jqXHR.getResponseHeader( "content-type" );
-               }
-       }
-
-       // Check if we're dealing with a known content-type
-       if ( ct ) {
-               for ( type in contents ) {
-                       if ( contents[ type ] && contents[ type ].test( ct ) ) {
-                               dataTypes.unshift( type );
-                               break;
-                       }
-               }
-       }
-
-       // Check to see if we have a response for the expected dataType
-       if ( dataTypes[ 0 ] in responses ) {
-               finalDataType = dataTypes[ 0 ];
-       } else {
-               // Try convertible dataTypes
-               for ( type in responses ) {
-                       if ( !dataTypes[ 0 ] || s.converters[ type + " " + dataTypes[0] ] ) {
-                               finalDataType = type;
-                               break;
-                       }
-                       if ( !firstDataType ) {
-                               firstDataType = type;
-                       }
-               }
-               // Or just use first one
-               finalDataType = finalDataType || firstDataType;
-       }
-
-       // If we found a dataType
-       // We add the dataType to the list if needed
-       // and return the corresponding response
-       if ( finalDataType ) {
-               if ( finalDataType !== dataTypes[ 0 ] ) {
-                       dataTypes.unshift( finalDataType );
-               }
-               return responses[ finalDataType ];
-       }
-}
-
-// Chain conversions given the request and the original response
-function ajaxConvert( s, response ) {
-
-       // Apply the dataFilter if provided
-       if ( s.dataFilter ) {
-               response = s.dataFilter( response, s.dataType );
-       }
-
-       var dataTypes = s.dataTypes,
-               converters = {},
-               i,
-               key,
-               length = dataTypes.length,
-               tmp,
-               // Current and previous dataTypes
-               current = dataTypes[ 0 ],
-               prev,
-               // Conversion expression
-               conversion,
-               // Conversion function
-               conv,
-               // Conversion functions (transitive conversion)
-               conv1,
-               conv2;
-
-       // For each dataType in the chain
-       for ( i = 1; i < length; i++ ) {
-
-               // Create converters map
-               // with lowercased keys
-               if ( i === 1 ) {
-                       for ( key in s.converters ) {
-                               if ( typeof key === "string" ) {
-                                       converters[ key.toLowerCase() ] = s.converters[ key ];
-                               }
-                       }
-               }
-
-               // Get the dataTypes
-               prev = current;
-               current = dataTypes[ i ];
-
-               // If current is auto dataType, update it to prev
-               if ( current === "*" ) {
-                       current = prev;
-               // If no auto and dataTypes are actually different
-               } else if ( prev !== "*" && prev !== current ) {
-
-                       // Get the converter
-                       conversion = prev + " " + current;
-                       conv = converters[ conversion ] || converters[ "* " + current ];
-
-                       // If there is no direct converter, search transitively
-                       if ( !conv ) {
-                               conv2 = undefined;
-                               for ( conv1 in converters ) {
-                                       tmp = conv1.split( " " );
-                                       if ( tmp[ 0 ] === prev || tmp[ 0 ] === "*" ) {
-                                               conv2 = converters[ tmp[1] + " " + current ];
-                                               if ( conv2 ) {
-                                                       conv1 = converters[ conv1 ];
-                                                       if ( conv1 === true ) {
-                                                               conv = conv2;
-                                                       } else if ( conv2 === true ) {
-                                                               conv = conv1;
-                                                       }
-                                                       break;
-                                               }
-                                       }
-                               }
-                       }
-                       // If we found no converter, dispatch an error
-                       if ( !( conv || conv2 ) ) {
-                               jQuery.error( "No conversion from " + conversion.replace(" "," to ") );
-                       }
-                       // If found converter is not an equivalence
-                       if ( conv !== true ) {
-                               // Convert with 1 or 2 converters accordingly
-                               response = conv ? conv( response ) : conv2( conv1(response) );
-                       }
-               }
-       }
-       return response;
-}
-
-
-
-
-var jsc = jQuery.now(),
-       jsre = /(\=)\?(&|$)|\?\?/i;
-
-// Default jsonp settings
-jQuery.ajaxSetup({
-       jsonp: "callback",
-       jsonpCallback: function() {
-               return jQuery.expando + "_" + ( jsc++ );
-       }
-});
-
-// Detect, normalize options and install callbacks for jsonp requests
-jQuery.ajaxPrefilter( "json jsonp", function( s, originalSettings, jqXHR ) {
-
-       var inspectData = s.contentType === "application/x-www-form-urlencoded" &&
-               ( typeof s.data === "string" );
-
-       if ( s.dataTypes[ 0 ] === "jsonp" ||
-               s.jsonp !== false && ( jsre.test( s.url ) ||
-                               inspectData && jsre.test( s.data ) ) ) {
-
-               var responseContainer,
-                       jsonpCallback = s.jsonpCallback =
-                               jQuery.isFunction( s.jsonpCallback ) ? s.jsonpCallback() : s.jsonpCallback,
-                       previous = window[ jsonpCallback ],
-                       url = s.url,
-                       data = s.data,
-                       replace = "$1" + jsonpCallback + "$2";
-
-               if ( s.jsonp !== false ) {
-                       url = url.replace( jsre, replace );
-                       if ( s.url === url ) {
-                               if ( inspectData ) {
-                                       data = data.replace( jsre, replace );
-                               }
-                               if ( s.data === data ) {
-                                       // Add callback manually
-                                       url += (/\?/.test( url ) ? "&" : "?") + s.jsonp + "=" + jsonpCallback;
-                               }
-                       }
-               }
-
-               s.url = url;
-               s.data = data;
-
-               // Install callback
-               window[ jsonpCallback ] = function( response ) {
-                       responseContainer = [ response ];
-               };
-
-               // Clean-up function
-               jqXHR.always(function() {
-                       // Set callback back to previous value
-                       window[ jsonpCallback ] = previous;
-                       // Call if it was a function and we have a response
-                       if ( responseContainer && jQuery.isFunction( previous ) ) {
-                               window[ jsonpCallback ]( responseContainer[ 0 ] );
-                       }
-               });
-
-               // Use data converter to retrieve json after script execution
-               s.converters["script json"] = function() {
-                       if ( !responseContainer ) {
-                               jQuery.error( jsonpCallback + " was not called" );
-                       }
-                       return responseContainer[ 0 ];
-               };
-
-               // force json dataType
-               s.dataTypes[ 0 ] = "json";
-
-               // Delegate to script
-               return "script";
-       }
-});
-
-
-
-
-// Install script dataType
-jQuery.ajaxSetup({
-       accepts: {
-               script: "text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"
-       },
-       contents: {
-               script: /javascript|ecmascript/
-       },
-       converters: {
-               "text script": function( text ) {
-                       jQuery.globalEval( text );
-                       return text;
-               }
-       }
-});
-
-// Handle cache's special case and global
-jQuery.ajaxPrefilter( "script", function( s ) {
-       if ( s.cache === undefined ) {
-               s.cache = false;
-       }
-       if ( s.crossDomain ) {
-               s.type = "GET";
-               s.global = false;
-       }
-});
-
-// Bind script tag hack transport
-jQuery.ajaxTransport( "script", function(s) {
-
-       // This transport only deals with cross domain requests
-       if ( s.crossDomain ) {
-
-               var script,
-                       head = document.head || document.getElementsByTagName( "head" )[0] || document.documentElement;
-
-               return {
-
-                       send: function( _, callback ) {
-
-                               script = document.createElement( "script" );
-
-                               script.async = "async";
-
-                               if ( s.scriptCharset ) {
-                                       script.charset = s.scriptCharset;
-                               }
-
-                               script.src = s.url;
-
-                               // Attach handlers for all browsers
-                               script.onload = script.onreadystatechange = function( _, isAbort ) {
-
-                                       if ( isAbort || !script.readyState || /loaded|complete/.test( script.readyState ) ) {
-
-                                               // Handle memory leak in IE
-                                               script.onload = script.onreadystatechange = null;
-
-                                               // Remove the script
-                                               if ( head && script.parentNode ) {
-                                                       head.removeChild( script );
-                                               }
-
-                                               // Dereference the script
-                                               script = undefined;
-
-                                               // Callback if not abort
-                                               if ( !isAbort ) {
-                                                       callback( 200, "success" );
-                                               }
-                                       }
-                               };
-                               // Use insertBefore instead of appendChild  to circumvent an IE6 bug.
-                               // This arises when a base node is used (#2709 and #4378).
-                               head.insertBefore( script, head.firstChild );
-                       },
-
-                       abort: function() {
-                               if ( script ) {
-                                       script.onload( 0, 1 );
-                               }
-                       }
-               };
-       }
-});
-
-
-
-
-var // #5280: Internet Explorer will keep connections alive if we don't abort on unload
-       xhrOnUnloadAbort = window.ActiveXObject ? function() {
-               // Abort all pending requests
-               for ( var key in xhrCallbacks ) {
-                       xhrCallbacks[ key ]( 0, 1 );
-               }
-       } : false,
-       xhrId = 0,
-       xhrCallbacks;
-
-// Functions to create xhrs
-function createStandardXHR() {
-       try {
-               return new window.XMLHttpRequest();
-       } catch( e ) {}
-}
-
-function createActiveXHR() {
-       try {
-               return new window.ActiveXObject( "Microsoft.XMLHTTP" );
-       } catch( e ) {}
-}
-
-// Create the request object
-// (This is still attached to ajaxSettings for backward compatibility)
-jQuery.ajaxSettings.xhr = window.ActiveXObject ?
-       /* Microsoft failed to properly
-        * implement the XMLHttpRequest in IE7 (can't request local files),
-        * so we use the ActiveXObject when it is available
-        * Additionally XMLHttpRequest can be disabled in IE7/IE8 so
-        * we need a fallback.
-        */
-       function() {
-               return !this.isLocal && createStandardXHR() || createActiveXHR();
-       } :
-       // For all other browsers, use the standard XMLHttpRequest object
-       createStandardXHR;
-
-// Determine support properties
-(function( xhr ) {
-       jQuery.extend( jQuery.support, {
-               ajax: !!xhr,
-               cors: !!xhr && ( "withCredentials" in xhr )
-       });
-})( jQuery.ajaxSettings.xhr() );
-
-// Create transport if the browser can provide an xhr
-if ( jQuery.support.ajax ) {
-
-       jQuery.ajaxTransport(function( s ) {
-               // Cross domain only allowed if supported through XMLHttpRequest
-               if ( !s.crossDomain || jQuery.support.cors ) {
-
-                       var callback;
-
-                       return {
-                               send: function( headers, complete ) {
-
-                                       // Get a new xhr
-                                       var xhr = s.xhr(),
-                                               handle,
-                                               i;
-
-                                       // Open the socket
-                                       // Passing null username, generates a login popup on Opera (#2865)
-                                       if ( s.username ) {
-                                               xhr.open( s.type, s.url, s.async, s.username, s.password );
-                                       } else {
-                                               xhr.open( s.type, s.url, s.async );
-                                       }
-
-                                       // Apply custom fields if provided
-                                       if ( s.xhrFields ) {
-                                               for ( i in s.xhrFields ) {
-                                                       xhr[ i ] = s.xhrFields[ i ];
-                                               }
-                                       }
-
-                                       // Override mime type if needed
-                                       if ( s.mimeType && xhr.overrideMimeType ) {
-                                               xhr.overrideMimeType( s.mimeType );
-                                       }
-
-                                       // X-Requested-With header
-                                       // For cross-domain requests, seeing as conditions for a preflight are
-                                       // akin to a jigsaw puzzle, we simply never set it to be sure.
-                                       // (it can always be set on a per-request basis or even using ajaxSetup)
-                                       // For same-domain requests, won't change header if already provided.
-                                       if ( !s.crossDomain && !headers["X-Requested-With"] ) {
-                                               headers[ "X-Requested-With" ] = "XMLHttpRequest";
-                                       }
-
-                                       // Need an extra try/catch for cross domain requests in Firefox 3
-                                       try {
-                                               for ( i in headers ) {
-                                                       xhr.setRequestHeader( i, headers[ i ] );
-                                               }
-                                       } catch( _ ) {}
-
-                                       // Do send the request
-                                       // This may raise an exception which is actually
-                                       // handled in jQuery.ajax (so no try/catch here)
-                                       xhr.send( ( s.hasContent && s.data ) || null );
-
-                                       // Listener
-                                       callback = function( _, isAbort ) {
-
-                                               var status,
-                                                       statusText,
-                                                       responseHeaders,
-                                                       responses,
-                                                       xml;
-
-                                               // Firefox throws exceptions when accessing properties
-                                               // of an xhr when a network error occured
-                                               // http://helpful.knobs-dials.com/index.php/Component_returned_failure_code:_0x80040111_(NS_ERROR_NOT_AVAILABLE)
-                                               try {
-
-                                                       // Was never called and is aborted or complete
-                                                       if ( callback && ( isAbort || xhr.readyState === 4 ) ) {
-
-                                                               // Only called once
-                                                               callback = undefined;
-
-                                                               // Do not keep as active anymore
-                                                               if ( handle ) {
-                                                                       xhr.onreadystatechange = jQuery.noop;
-                                                                       if ( xhrOnUnloadAbort ) {
-                                                                               delete xhrCallbacks[ handle ];
-                                                                       }
-                                                               }
-
-                                                               // If it's an abort
-                                                               if ( isAbort ) {
-                                                                       // Abort it manually if needed
-                                                                       if ( xhr.readyState !== 4 ) {
-                                                                               xhr.abort();
-                                                                       }
-                                                               } else {
-                                                                       status = xhr.status;
-                                                                       responseHeaders = xhr.getAllResponseHeaders();
-                                                                       responses = {};
-                                                                       xml = xhr.responseXML;
-
-                                                                       // Construct response list
-                                                                       if ( xml && xml.documentElement /* #4958 */ ) {
-                                                                               responses.xml = xml;
-                                                                       }
-                                                                       responses.text = xhr.responseText;
-
-                                                                       // Firefox throws an exception when accessing
-                                                                       // statusText for faulty cross-domain requests
-                                                                       try {
-                                                                               statusText = xhr.statusText;
-                                                                       } catch( e ) {
-                                                                               // We normalize with Webkit giving an empty statusText
-                                                                               statusText = "";
-                                                                       }
-
-                                                                       // Filter status for non standard behaviors
-
-                                                                       // If the request is local and we have data: assume a success
-                                                                       // (success with no data won't get notified, that's the best we
-                                                                       // can do given current implementations)
-                                                                       if ( !status && s.isLocal && !s.crossDomain ) {
-                                                                               status = responses.text ? 200 : 404;
-                                                                       // IE - #1450: sometimes returns 1223 when it should be 204
-                                                                       } else if ( status === 1223 ) {
-                                                                               status = 204;
-                                                                       }
-                                                               }
-                                                       }
-                                               } catch( firefoxAccessException ) {
-                                                       if ( !isAbort ) {
-                                                               complete( -1, firefoxAccessException );
-                                                       }
-                                               }
-
-                                               // Call complete if needed
-                                               if ( responses ) {
-                                                       complete( status, statusText, responses, responseHeaders );
-                                               }
-                                       };
-
-                                       // if we're in sync mode or it's in cache
-                                       // and has been retrieved directly (IE6 & IE7)
-                                       // we need to manually fire the callback
-                                       if ( !s.async || xhr.readyState === 4 ) {
-                                               callback();
-                                       } else {
-                                               handle = ++xhrId;
-                                               if ( xhrOnUnloadAbort ) {
-                                                       // Create the active xhrs callbacks list if needed
-                                                       // and attach the unload handler
-                                                       if ( !xhrCallbacks ) {
-                                                               xhrCallbacks = {};
-                                                               jQuery( window ).unload( xhrOnUnloadAbort );
-                                                       }
-                                                       // Add to list of active xhrs callbacks
-                                                       xhrCallbacks[ handle ] = callback;
-                                               }
-                                               xhr.onreadystatechange = callback;
-                                       }
-                               },
-
-                               abort: function() {
-                                       if ( callback ) {
-                                               callback(0,1);
-                                       }
-                               }
-                       };
-               }
-       });
-}
-
-
-
-
-var elemdisplay = {},
-       iframe, iframeDoc,
-       rfxtypes = /^(?:toggle|show|hide)$/,
-       rfxnum = /^([+\-]=)?([\d+.\-]+)([a-z%]*)$/i,
-       timerId,
-       fxAttrs = [
-               // height animations
-               [ "height", "marginTop", "marginBottom", "paddingTop", "paddingBottom" ],
-               // width animations
-               [ "width", "marginLeft", "marginRight", "paddingLeft", "paddingRight" ],
-               // opacity animations
-               [ "opacity" ]
-       ],
-       fxNow;
-
-jQuery.fn.extend({
-       show: function( speed, easing, callback ) {
-               var elem, display;
-
-               if ( speed || speed === 0 ) {
-                       return this.animate( genFx("show", 3), speed, easing, callback );
-
-               } else {
-                       for ( var i = 0, j = this.length; i < j; i++ ) {
-                               elem = this[ i ];
-
-                               if ( elem.style ) {
-                                       display = elem.style.display;
-
-                                       // Reset the inline display of this element to learn if it is
-                                       // being hidden by cascaded rules or not
-                                       if ( !jQuery._data(elem, "olddisplay") && display === "none" ) {
-                                               display = elem.style.display = "";
-                                       }
-
-                                       // Set elements which have been overridden with display: none
-                                       // in a stylesheet to whatever the default browser style is
-                                       // for such an element
-                                       if ( display === "" && jQuery.css(elem, "display") === "none" ) {
-                                               jQuery._data( elem, "olddisplay", defaultDisplay(elem.nodeName) );
-                                       }
-                               }
-                       }
-
-                       // Set the display of most of the elements in a second loop
-                       // to avoid the constant reflow
-                       for ( i = 0; i < j; i++ ) {
-                               elem = this[ i ];
-
-                               if ( elem.style ) {
-                                       display = elem.style.display;
-
-                                       if ( display === "" || display === "none" ) {
-                                               elem.style.display = jQuery._data( elem, "olddisplay" ) || "";
-                                       }
-                               }
-                       }
-
-                       return this;
-               }
-       },
-
-       hide: function( speed, easing, callback ) {
-               if ( speed || speed === 0 ) {
-                       return this.animate( genFx("hide", 3), speed, easing, callback);
-
-               } else {
-                       var elem, display,
-                               i = 0,
-                               j = this.length;
-
-                       for ( ; i < j; i++ ) {
-                               elem = this[i];
-                               if ( elem.style ) {
-                                       display = jQuery.css( elem, "display" );
-
-                                       if ( display !== "none" && !jQuery._data( elem, "olddisplay" ) ) {
-                                               jQuery._data( elem, "olddisplay", display );
-                                       }
-                               }
-                       }
-
-                       // Set the display of the elements in a second loop
-                       // to avoid the constant reflow
-                       for ( i = 0; i < j; i++ ) {
-                               if ( this[i].style ) {
-                                       this[i].style.display = "none";
-                               }
-                       }
-
-                       return this;
-               }
-       },
-
-       // Save the old toggle function
-       _toggle: jQuery.fn.toggle,
-
-       toggle: function( fn, fn2, callback ) {
-               var bool = typeof fn === "boolean";
-
-               if ( jQuery.isFunction(fn) && jQuery.isFunction(fn2) ) {
-                       this._toggle.apply( this, arguments );
-
-               } else if ( fn == null || bool ) {
-                       this.each(function() {
-                               var state = bool ? fn : jQuery(this).is(":hidden");
-                               jQuery(this)[ state ? "show" : "hide" ]();
-                       });
-
-               } else {
-                       this.animate(genFx("toggle", 3), fn, fn2, callback);
-               }
-
-               return this;
-       },
-
-       fadeTo: function( speed, to, easing, callback ) {
-               return this.filter(":hidden").css("opacity", 0).show().end()
-                                       .animate({opacity: to}, speed, easing, callback);
-       },
-
-       animate: function( prop, speed, easing, callback ) {
-               var optall = jQuery.speed( speed, easing, callback );
-
-               if ( jQuery.isEmptyObject( prop ) ) {
-                       return this.each( optall.complete, [ false ] );
-               }
-
-               // Do not change referenced properties as per-property easing will be lost
-               prop = jQuery.extend( {}, prop );
-
-               function doAnimation() {
-                       // XXX 'this' does not always have a nodeName when running the
-                       // test suite
-
-                       if ( optall.queue === false ) {
-                               jQuery._mark( this );
-                       }
-
-                       var opt = jQuery.extend( {}, optall ),
-                               isElement = this.nodeType === 1,
-                               hidden = isElement && jQuery(this).is(":hidden"),
-                               name, val, p, e,
-                               parts, start, end, unit,
-                               method;
-
-                       // will store per property easing and be used to determine when an animation is complete
-                       opt.animatedProperties = {};
-
-                       for ( p in prop ) {
-
-                               // property name normalization
-                               name = jQuery.camelCase( p );
-                               if ( p !== name ) {
-                                       prop[ name ] = prop[ p ];
-                                       delete prop[ p ];
-                               }
-
-                               val = prop[ name ];
-
-                               // easing resolution: per property > opt.specialEasing > opt.easing > 'swing' (default)
-                               if ( jQuery.isArray( val ) ) {
-                                       opt.animatedProperties[ name ] = val[ 1 ];
-                                       val = prop[ name ] = val[ 0 ];
-                               } else {
-                                       opt.animatedProperties[ name ] = opt.specialEasing && opt.specialEasing[ name ] || opt.easing || 'swing';
-                               }
-
-                               if ( val === "hide" && hidden || val === "show" && !hidden ) {
-                                       return opt.complete.call( this );
-                               }
-
-                               if ( isElement && ( name === "height" || name === "width" ) ) {
-                                       // Make sure that nothing sneaks out
-                                       // Record all 3 overflow attributes because IE does not
-                                       // change the overflow attribute when overflowX and
-                                       // overflowY are set to the same value
-                                       opt.overflow = [ this.style.overflow, this.style.overflowX, this.style.overflowY ];
-
-                                       // Set display property to inline-block for height/width
-                                       // animations on inline elements that are having width/height animated
-                                       if ( jQuery.css( this, "display" ) === "inline" &&
-                                                       jQuery.css( this, "float" ) === "none" ) {
-
-                                               // inline-level elements accept inline-block;
-                                               // block-level elements need to be inline with layout
-                                               if ( !jQuery.support.inlineBlockNeedsLayout || defaultDisplay( this.nodeName ) === "inline" ) {
-                                                       this.style.display = "inline-block";
-
-                                               } else {
-                                                       this.style.zoom = 1;
-                                               }
-                                       }
-                               }
-                       }
-
-                       if ( opt.overflow != null ) {
-                               this.style.overflow = "hidden";
-                       }
-
-                       for ( p in prop ) {
-                               e = new jQuery.fx( this, opt, p );
-                               val = prop[ p ];
-
-                               if ( rfxtypes.test( val ) ) {
-
-                                       // Tracks whether to show or hide based on private
-                                       // data attached to the element
-                                       method = jQuery._data( this, "toggle" + p ) || ( val === "toggle" ? hidden ? "show" : "hide" : 0 );
-                                       if ( method ) {
-                                               jQuery._data( this, "toggle" + p, method === "show" ? "hide" : "show" );
-                                               e[ method ]();
-                                       } else {
-                                               e[ val ]();
-                                       }
-
-                               } else {
-                                       parts = rfxnum.exec( val );
-                                       start = e.cur();
-
-                                       if ( parts ) {
-                                               end = parseFloat( parts[2] );
-                                               unit = parts[3] || ( jQuery.cssNumber[ p ] ? "" : "px" );
-
-                                               // We need to compute starting value
-                                               if ( unit !== "px" ) {
-                                                       jQuery.style( this, p, (end || 1) + unit);
-                                                       start = ( (end || 1) / e.cur() ) * start;
-                                                       jQuery.style( this, p, start + unit);
-                                               }
-
-                                               // If a +=/-= token was provided, we're doing a relative animation
-                                               if ( parts[1] ) {
-                                                       end = ( (parts[ 1 ] === "-=" ? -1 : 1) * end ) + start;
-                                               }
-
-                                               e.custom( start, end, unit );
-
-                                       } else {
-                                               e.custom( start, val, "" );
-                                       }
-                               }
-                       }
-
-                       // For JS strict compliance
-                       return true;
-               }
-
-               return optall.queue === false ?
-                       this.each( doAnimation ) :
-                       this.queue( optall.queue, doAnimation );
-       },
-
-       stop: function( type, clearQueue, gotoEnd ) {
-               if ( typeof type !== "string" ) {
-                       gotoEnd = clearQueue;
-                       clearQueue = type;
-                       type = undefined;
-               }
-               if ( clearQueue && type !== false ) {
-                       this.queue( type || "fx", [] );
-               }
-
-               return this.each(function() {
-                       var i,
-                               hadTimers = false,
-                               timers = jQuery.timers,
-                               data = jQuery._data( this );
-
-                       // clear marker counters if we know they won't be
-                       if ( !gotoEnd ) {
-                               jQuery._unmark( true, this );
-                       }
-
-                       function stopQueue( elem, data, i ) {
-                               var hooks = data[ i ];
-                               jQuery.removeData( elem, i, true );
-                               hooks.stop( gotoEnd );
-                       }
-
-                       if ( type == null ) {
-                               for ( i in data ) {
-                                       if ( data[ i ].stop && i.indexOf(".run") === i.length - 4 ) {
-                                               stopQueue( this, data, i );
-                                       }
-                               }
-                       } else if ( data[ i = type + ".run" ] && data[ i ].stop ){
-                               stopQueue( this, data, i );
-                       }
-
-                       for ( i = timers.length; i--; ) {
-                               if ( timers[ i ].elem === this && (type == null || timers[ i ].queue === type) ) {
-                                       if ( gotoEnd ) {
-
-                                               // force the next step to be the last
-                                               timers[ i ]( true );
-                                       } else {
-                                               timers[ i ].saveState();
-                                       }
-                                       hadTimers = true;
-                                       timers.splice( i, 1 );
-                               }
-                       }
-
-                       // start the next in the queue if the last step wasn't forced
-                       // timers currently will call their complete callbacks, which will dequeue
-                       // but only if they were gotoEnd
-                       if ( !( gotoEnd && hadTimers ) ) {
-                               jQuery.dequeue( this, type );
-                       }
-               });
-       }
-
-});
-
-// Animations created synchronously will run synchronously
-function createFxNow() {
-       setTimeout( clearFxNow, 0 );
-       return ( fxNow = jQuery.now() );
-}
-
-function clearFxNow() {
-       fxNow = undefined;
-}
-
-// Generate parameters to create a standard animation
-function genFx( type, num ) {
-       var obj = {};
-
-       jQuery.each( fxAttrs.concat.apply([], fxAttrs.slice( 0, num )), function() {
-               obj[ this ] = type;
-       });
-
-       return obj;
-}
-
-// Generate shortcuts for custom animations
-jQuery.each({
-       slideDown: genFx( "show", 1 ),
-       slideUp: genFx( "hide", 1 ),
-       slideToggle: genFx( "toggle", 1 ),
-       fadeIn: { opacity: "show" },
-       fadeOut: { opacity: "hide" },
-       fadeToggle: { opacity: "toggle" }
-}, function( name, props ) {
-       jQuery.fn[ name ] = function( speed, easing, callback ) {
-               return this.animate( props, speed, easing, callback );
-       };
-});
-
-jQuery.extend({
-       speed: function( speed, easing, fn ) {
-               var opt = speed && typeof speed === "object" ? jQuery.extend( {}, speed ) : {
-                       complete: fn || !fn && easing ||
-                               jQuery.isFunction( speed ) && speed,
-                       duration: speed,
-                       easing: fn && easing || easing && !jQuery.isFunction( easing ) && easing
-               };
-
-               opt.duration = jQuery.fx.off ? 0 : typeof opt.duration === "number" ? opt.duration :
-                       opt.duration in jQuery.fx.speeds ? jQuery.fx.speeds[ opt.duration ] : jQuery.fx.speeds._default;
-
-               // normalize opt.queue - true/undefined/null -> "fx"
-               if ( opt.queue == null || opt.queue === true ) {
-                       opt.queue = "fx";
-               }
-
-               // Queueing
-               opt.old = opt.complete;
-
-               opt.complete = function( noUnmark ) {
-                       if ( jQuery.isFunction( opt.old ) ) {
-                               opt.old.call( this );
-                       }
-
-                       if ( opt.queue ) {
-                               jQuery.dequeue( this, opt.queue );
-                       } else if ( noUnmark !== false ) {
-                               jQuery._unmark( this );
-                       }
-               };
-
-               return opt;
-       },
-
-       easing: {
-               linear: function( p, n, firstNum, diff ) {
-                       return firstNum + diff * p;
-               },
-               swing: function( p, n, firstNum, diff ) {
-                       return ( ( -Math.cos( p*Math.PI ) / 2 ) + 0.5 ) * diff + firstNum;
-               }
-       },
-
-       timers: [],
-
-       fx: function( elem, options, prop ) {
-               this.options = options;
-               this.elem = elem;
-               this.prop = prop;
-
-               options.orig = options.orig || {};
-       }
-
-});
-
-jQuery.fx.prototype = {
-       // Simple function for setting a style value
-       update: function() {
-               if ( this.options.step ) {
-                       this.options.step.call( this.elem, this.now, this );
-               }
-
-               ( jQuery.fx.step[ this.prop ] || jQuery.fx.step._default )( this );
-       },
-
-       // Get the current size
-       cur: function() {
-               if ( this.elem[ this.prop ] != null && (!this.elem.style || this.elem.style[ this.prop ] == null) ) {
-                       return this.elem[ this.prop ];
-               }
-
-               var parsed,
-                       r = jQuery.css( this.elem, this.prop );
-               // Empty strings, null, undefined and "auto" are converted to 0,
-               // complex values such as "rotate(1rad)" are returned as is,
-               // simple values such as "10px" are parsed to Float.
-               return isNaN( parsed = parseFloat( r ) ) ? !r || r === "auto" ? 0 : r : parsed;
-       },
-
-       // Start an animation from one number to another
-       custom: function( from, to, unit ) {
-               var self = this,
-                       fx = jQuery.fx;
-
-               this.startTime = fxNow || createFxNow();
-               this.end = to;
-               this.now = this.start = from;
-               this.pos = this.state = 0;
-               this.unit = unit || this.unit || ( jQuery.cssNumber[ this.prop ] ? "" : "px" );
-
-               function t( gotoEnd ) {
-                       return self.step( gotoEnd );
-               }
-
-               t.queue = this.options.queue;
-               t.elem = this.elem;
-               t.saveState = function() {
-                       if ( self.options.hide && jQuery._data( self.elem, "fxshow" + self.prop ) === undefined ) {
-                               jQuery._data( self.elem, "fxshow" + self.prop, self.start );
-                       }
-               };
-
-               if ( t() && jQuery.timers.push(t) && !timerId ) {
-                       timerId = setInterval( fx.tick, fx.interval );
-               }
-       },
-
-       // Simple 'show' function
-       show: function() {
-               var dataShow = jQuery._data( this.elem, "fxshow" + this.prop );
-
-               // Remember where we started, so that we can go back to it later
-               this.options.orig[ this.prop ] = dataShow || jQuery.style( this.elem, this.prop );
-               this.options.show = true;
-
-               // Begin the animation
-               // Make sure that we start at a small width/height to avoid any flash of content
-               if ( dataShow !== undefined ) {
-                       // This show is picking up where a previous hide or show left off
-                       this.custom( this.cur(), dataShow );
-               } else {
-                       this.custom( this.prop === "width" || this.prop === "height" ? 1 : 0, this.cur() );
-               }
-
-               // Start by showing the element
-               jQuery( this.elem ).show();
-       },
-
-       // Simple 'hide' function
-       hide: function() {
-               // Remember where we started, so that we can go back to it later
-               this.options.orig[ this.prop ] = jQuery._data( this.elem, "fxshow" + this.prop ) || jQuery.style( this.elem, this.prop );
-               this.options.hide = true;
-
-               // Begin the animation
-               this.custom( this.cur(), 0 );
-       },
-
-       // Each step of an animation
-       step: function( gotoEnd ) {
-               var p, n, complete,
-                       t = fxNow || createFxNow(),
-                       done = true,
-                       elem = this.elem,
-                       options = this.options;
-
-               if ( gotoEnd || t >= options.duration + this.startTime ) {
-                       this.now = this.end;
-                       this.pos = this.state = 1;
-                       this.update();
-
-                       options.animatedProperties[ this.prop ] = true;
-
-                       for ( p in options.animatedProperties ) {
-                               if ( options.animatedProperties[ p ] !== true ) {
-                                       done = false;
-                               }
-                       }
-
-                       if ( done ) {
-                               // Reset the overflow
-                               if ( options.overflow != null && !jQuery.support.shrinkWrapBlocks ) {
-
-                                       jQuery.each( [ "", "X", "Y" ], function( index, value ) {
-                                               elem.style[ "overflow" + value ] = options.overflow[ index ];
-                                       });
-                               }
-
-                               // Hide the element if the "hide" operation was done
-                               if ( options.hide ) {
-                                       jQuery( elem ).hide();
-                               }
-
-                               // Reset the properties, if the item has been hidden or shown
-                               if ( options.hide || options.show ) {
-                                       for ( p in options.animatedProperties ) {
-                                               jQuery.style( elem, p, options.orig[ p ] );
-                                               jQuery.removeData( elem, "fxshow" + p, true );
-                                               // Toggle data is no longer needed
-                                               jQuery.removeData( elem, "toggle" + p, true );
-                                       }
-                               }
-
-                               // Execute the complete function
-                               // in the event that the complete function throws an exception
-                               // we must ensure it won't be called twice. #5684
-
-                               complete = options.complete;
-                               if ( complete ) {
-
-                                       options.complete = false;
-                                       complete.call( elem );
-                               }
-                       }
-
-                       return false;
-
-               } else {
-                       // classical easing cannot be used with an Infinity duration
-                       if ( options.duration == Infinity ) {
-                               this.now = t;
-                       } else {
-                               n = t - this.startTime;
-                               this.state = n / options.duration;
-
-                               // Perform the easing function, defaults to swing
-                               this.pos = jQuery.easing[ options.animatedProperties[this.prop] ]( this.state, n, 0, 1, options.duration );
-                               this.now = this.start + ( (this.end - this.start) * this.pos );
-                       }
-                       // Perform the next step of the animation
-                       this.update();
-               }
-
-               return true;
-       }
-};
-
-jQuery.extend( jQuery.fx, {
-       tick: function() {
-               var timer,
-                       timers = jQuery.timers,
-                       i = 0;
-
-               for ( ; i < timers.length; i++ ) {
-                       timer = timers[ i ];
-                       // Checks the timer has not already been removed
-                       if ( !timer() && timers[ i ] === timer ) {
-                               timers.splice( i--, 1 );
-                       }
-               }
-
-               if ( !timers.length ) {
-                       jQuery.fx.stop();
-               }
-       },
-
-       interval: 13,
-
-       stop: function() {
-               clearInterval( timerId );
-               timerId = null;
-       },
-
-       speeds: {
-               slow: 600,
-               fast: 200,
-               // Default speed
-               _default: 400
-       },
-
-       step: {
-               opacity: function( fx ) {
-                       jQuery.style( fx.elem, "opacity", fx.now );
-               },
-
-               _default: function( fx ) {
-                       if ( fx.elem.style && fx.elem.style[ fx.prop ] != null ) {
-                               fx.elem.style[ fx.prop ] = fx.now + fx.unit;
-                       } else {
-                               fx.elem[ fx.prop ] = fx.now;
-                       }
-               }
-       }
-});
-
-// Adds width/height step functions
-// Do not set anything below 0
-jQuery.each([ "width", "height" ], function( i, prop ) {
-       jQuery.fx.step[ prop ] = function( fx ) {
-               jQuery.style( fx.elem, prop, Math.max(0, fx.now) );
-       };
-});
-
-if ( jQuery.expr && jQuery.expr.filters ) {
-       jQuery.expr.filters.animated = function( elem ) {
-               return jQuery.grep(jQuery.timers, function( fn ) {
-                       return elem === fn.elem;
-               }).length;
-       };
-}
-
-// Try to restore the default display value of an element
-function defaultDisplay( nodeName ) {
-
-       if ( !elemdisplay[ nodeName ] ) {
-
-               var body = document.body,
-                       elem = jQuery( "<" + nodeName + ">" ).appendTo( body ),
-                       display = elem.css( "display" );
-               elem.remove();
-
-               // If the simple way fails,
-               // get element's real default display by attaching it to a temp iframe
-               if ( display === "none" || display === "" ) {
-                       // No iframe to use yet, so create it
-                       if ( !iframe ) {
-                               iframe = document.createElement( "iframe" );
-                               iframe.frameBorder = iframe.width = iframe.height = 0;
-                       }
-
-                       body.appendChild( iframe );
-
-                       // Create a cacheable copy of the iframe document on first call.
-                       // IE and Opera will allow us to reuse the iframeDoc without re-writing the fake HTML
-                       // document to it; WebKit & Firefox won't allow reusing the iframe document.
-                       if ( !iframeDoc || !iframe.createElement ) {
-                               iframeDoc = ( iframe.contentWindow || iframe.contentDocument ).document;
-                               iframeDoc.write( ( document.compatMode === "CSS1Compat" ? "<!doctype html>" : "" ) + "<html><body>" );
-                               iframeDoc.close();
-                       }
-
-                       elem = iframeDoc.createElement( nodeName );
-
-                       iframeDoc.body.appendChild( elem );
-
-                       display = jQuery.css( elem, "display" );
-                       body.removeChild( iframe );
-               }
-
-               // Store the correct default display
-               elemdisplay[ nodeName ] = display;
-       }
-
-       return elemdisplay[ nodeName ];
-}
-
-
-
-
-var rtable = /^t(?:able|d|h)$/i,
-       rroot = /^(?:body|html)$/i;
-
-if ( "getBoundingClientRect" in document.documentElement ) {
-       jQuery.fn.offset = function( options ) {
-               var elem = this[0], box;
-
-               if ( options ) {
-                       return this.each(function( i ) {
-                               jQuery.offset.setOffset( this, options, i );
-                       });
-               }
-
-               if ( !elem || !elem.ownerDocument ) {
-                       return null;
-               }
-
-               if ( elem === elem.ownerDocument.body ) {
-                       return jQuery.offset.bodyOffset( elem );
-               }
-
-               try {
-                       box = elem.getBoundingClientRect();
-               } catch(e) {}
-
-               var doc = elem.ownerDocument,
-                       docElem = doc.documentElement;
-
-               // Make sure we're not dealing with a disconnected DOM node
-               if ( !box || !jQuery.contains( docElem, elem ) ) {
-                       return box ? { top: box.top, left: box.left } : { top: 0, left: 0 };
-               }
-
-               var body = doc.body,
-                       win = getWindow(doc),
-                       clientTop  = docElem.clientTop  || body.clientTop  || 0,
-                       clientLeft = docElem.clientLeft || body.clientLeft || 0,
-                       scrollTop  = win.pageYOffset || jQuery.support.boxModel && docElem.scrollTop  || body.scrollTop,
-                       scrollLeft = win.pageXOffset || jQuery.support.boxModel && docElem.scrollLeft || body.scrollLeft,
-                       top  = box.top  + scrollTop  - clientTop,
-                       left = box.left + scrollLeft - clientLeft;
-
-               return { top: top, left: left };
-       };
-
-} else {
-       jQuery.fn.offset = function( options ) {
-               var elem = this[0];
-
-               if ( options ) {
-                       return this.each(function( i ) {
-                               jQuery.offset.setOffset( this, options, i );
-                       });
-               }
-
-               if ( !elem || !elem.ownerDocument ) {
-                       return null;
-               }
-
-               if ( elem === elem.ownerDocument.body ) {
-                       return jQuery.offset.bodyOffset( elem );
-               }
-
-               var computedStyle,
-                       offsetParent = elem.offsetParent,
-                       prevOffsetParent = elem,
-                       doc = elem.ownerDocument,
-                       docElem = doc.documentElement,
-                       body = doc.body,
-                       defaultView = doc.defaultView,
-                       prevComputedStyle = defaultView ? defaultView.getComputedStyle( elem, null ) : elem.currentStyle,
-                       top = elem.offsetTop,
-                       left = elem.offsetLeft;
-
-               while ( (elem = elem.parentNode) && elem !== body && elem !== docElem ) {
-                       if ( jQuery.support.fixedPosition && prevComputedStyle.position === "fixed" ) {
-                               break;
-                       }
-
-                       computedStyle = defaultView ? defaultView.getComputedStyle(elem, null) : elem.currentStyle;
-                       top  -= elem.scrollTop;
-                       left -= elem.scrollLeft;
-
-                       if ( elem === offsetParent ) {
-                               top  += elem.offsetTop;
-                               left += elem.offsetLeft;
-
-                               if ( jQuery.support.doesNotAddBorder && !(jQuery.support.doesAddBorderForTableAndCells && rtable.test(elem.nodeName)) ) {
-                                       top  += parseFloat( computedStyle.borderTopWidth  ) || 0;
-                                       left += parseFloat( computedStyle.borderLeftWidth ) || 0;
-                               }
-
-                               prevOffsetParent = offsetParent;
-                               offsetParent = elem.offsetParent;
-                       }
-
-                       if ( jQuery.support.subtractsBorderForOverflowNotVisible && computedStyle.overflow !== "visible" ) {
-                               top  += parseFloat( computedStyle.borderTopWidth  ) || 0;
-                               left += parseFloat( computedStyle.borderLeftWidth ) || 0;
-                       }
-
-                       prevComputedStyle = computedStyle;
-               }
-
-               if ( prevComputedStyle.position === "relative" || prevComputedStyle.position === "static" ) {
-                       top  += body.offsetTop;
-                       left += body.offsetLeft;
-               }
-
-               if ( jQuery.support.fixedPosition && prevComputedStyle.position === "fixed" ) {
-                       top  += Math.max( docElem.scrollTop, body.scrollTop );
-                       left += Math.max( docElem.scrollLeft, body.scrollLeft );
-               }
-
-               return { top: top, left: left };
-       };
-}
-
-jQuery.offset = {
-
-       bodyOffset: function( body ) {
-               var top = body.offsetTop,
-                       left = body.offsetLeft;
-
-               if ( jQuery.support.doesNotIncludeMarginInBodyOffset ) {
-                       top  += parseFloat( jQuery.css(body, "marginTop") ) || 0;
-                       left += parseFloat( jQuery.css(body, "marginLeft") ) || 0;
-               }
-
-               return { top: top, left: left };
-       },
-
-       setOffset: function( elem, options, i ) {
-               var position = jQuery.css( elem, "position" );
-
-               // set position first, in-case top/left are set even on static elem
-               if ( position === "static" ) {
-                       elem.style.position = "relative";
-               }
-
-               var curElem = jQuery( elem ),
-                       curOffset = curElem.offset(),
-                       curCSSTop = jQuery.css( elem, "top" ),
-                       curCSSLeft = jQuery.css( elem, "left" ),
-                       calculatePosition = ( position === "absolute" || position === "fixed" ) && jQuery.inArray("auto", [curCSSTop, curCSSLeft]) > -1,
-                       props = {}, curPosition = {}, curTop, curLeft;
-
-               // need to be able to calculate position if either top or left is auto and position is either absolute or fixed
-               if ( calculatePosition ) {
-                       curPosition = curElem.position();
-                       curTop = curPosition.top;
-                       curLeft = curPosition.left;
-               } else {
-                       curTop = parseFloat( curCSSTop ) || 0;
-                       curLeft = parseFloat( curCSSLeft ) || 0;
-               }
-
-               if ( jQuery.isFunction( options ) ) {
-                       options = options.call( elem, i, curOffset );
-               }
-
-               if ( options.top != null ) {
-                       props.top = ( options.top - curOffset.top ) + curTop;
-               }
-               if ( options.left != null ) {
-                       props.left = ( options.left - curOffset.left ) + curLeft;
-               }
-
-               if ( "using" in options ) {
-                       options.using.call( elem, props );
-               } else {
-                       curElem.css( props );
-               }
-       }
-};
-
-
-jQuery.fn.extend({
-
-       position: function() {
-               if ( !this[0] ) {
-                       return null;
-               }
-
-               var elem = this[0],
-
-               // Get *real* offsetParent
-               offsetParent = this.offsetParent(),
-
-               // Get correct offsets
-               offset       = this.offset(),
-               parentOffset = rroot.test(offsetParent[0].nodeName) ? { top: 0, left: 0 } : offsetParent.offset();
-
-               // Subtract element margins
-               // note: when an element has margin: auto the offsetLeft and marginLeft
-               // are the same in Safari causing offset.left to incorrectly be 0
-               offset.top  -= parseFloat( jQuery.css(elem, "marginTop") ) || 0;
-               offset.left -= parseFloat( jQuery.css(elem, "marginLeft") ) || 0;
-
-               // Add offsetParent borders
-               parentOffset.top  += parseFloat( jQuery.css(offsetParent[0], "borderTopWidth") ) || 0;
-               parentOffset.left += parseFloat( jQuery.css(offsetParent[0], "borderLeftWidth") ) || 0;
-
-               // Subtract the two offsets
-               return {
-                       top:  offset.top  - parentOffset.top,
-                       left: offset.left - parentOffset.left
-               };
-       },
-
-       offsetParent: function() {
-               return this.map(function() {
-                       var offsetParent = this.offsetParent || document.body;
-                       while ( offsetParent && (!rroot.test(offsetParent.nodeName) && jQuery.css(offsetParent, "position") === "static") ) {
-                               offsetParent = offsetParent.offsetParent;
-                       }
-                       return offsetParent;
-               });
-       }
-});
-
-
-// Create scrollLeft and scrollTop methods
-jQuery.each( ["Left", "Top"], function( i, name ) {
-       var method = "scroll" + name;
-
-       jQuery.fn[ method ] = function( val ) {
-               var elem, win;
-
-               if ( val === undefined ) {
-                       elem = this[ 0 ];
-
-                       if ( !elem ) {
-                               return null;
-                       }
-
-                       win = getWindow( elem );
-
-                       // Return the scroll offset
-                       return win ? ("pageXOffset" in win) ? win[ i ? "pageYOffset" : "pageXOffset" ] :
-                               jQuery.support.boxModel && win.document.documentElement[ method ] ||
-                                       win.document.body[ method ] :
-                               elem[ method ];
-               }
-
-               // Set the scroll offset
-               return this.each(function() {
-                       win = getWindow( this );
-
-                       if ( win ) {
-                               win.scrollTo(
-                                       !i ? val : jQuery( win ).scrollLeft(),
-                                        i ? val : jQuery( win ).scrollTop()
-                               );
-
-                       } else {
-                               this[ method ] = val;
-                       }
-               });
-       };
-});
-
-function getWindow( elem ) {
-       return jQuery.isWindow( elem ) ?
-               elem :
-               elem.nodeType === 9 ?
-                       elem.defaultView || elem.parentWindow :
-                       false;
-}
-
-
-
-
-// Create width, height, innerHeight, innerWidth, outerHeight and outerWidth methods
-jQuery.each([ "Height", "Width" ], function( i, name ) {
-
-       var type = name.toLowerCase();
-
-       // innerHeight and innerWidth
-       jQuery.fn[ "inner" + name ] = function() {
-               var elem = this[0];
-               return elem ?
-                       elem.style ?
-                       parseFloat( jQuery.css( elem, type, "padding" ) ) :
-                       this[ type ]() :
-                       null;
-       };
-
-       // outerHeight and outerWidth
-       jQuery.fn[ "outer" + name ] = function( margin ) {
-               var elem = this[0];
-               return elem ?
-                       elem.style ?
-                       parseFloat( jQuery.css( elem, type, margin ? "margin" : "border" ) ) :
-                       this[ type ]() :
-                       null;
-       };
-
-       jQuery.fn[ type ] = function( size ) {
-               // Get window width or height
-               var elem = this[0];
-               if ( !elem ) {
-                       return size == null ? null : this;
-               }
-
-               if ( jQuery.isFunction( size ) ) {
-                       return this.each(function( i ) {
-                               var self = jQuery( this );
-                               self[ type ]( size.call( this, i, self[ type ]() ) );
-                       });
-               }
-
-               if ( jQuery.isWindow( elem ) ) {
-                       // Everyone else use document.documentElement or document.body depending on Quirks vs Standards mode
-                       // 3rd condition allows Nokia support, as it supports the docElem prop but not CSS1Compat
-                       var docElemProp = elem.document.documentElement[ "client" + name ],
-                               body = elem.document.body;
-                       return elem.document.compatMode === "CSS1Compat" && docElemProp ||
-                               body && body[ "client" + name ] || docElemProp;
-
-               // Get document width or height
-               } else if ( elem.nodeType === 9 ) {
-                       // Either scroll[Width/Height] or offset[Width/Height], whichever is greater
-                       return Math.max(
-                               elem.documentElement["client" + name],
-                               elem.body["scroll" + name], elem.documentElement["scroll" + name],
-                               elem.body["offset" + name], elem.documentElement["offset" + name]
-                       );
-
-               // Get or set width or height on the element
-               } else if ( size === undefined ) {
-                       var orig = jQuery.css( elem, type ),
-                               ret = parseFloat( orig );
-
-                       return jQuery.isNumeric( ret ) ? ret : orig;
-
-               // Set the width or height on the element (default to pixels if value is unitless)
-               } else {
-                       return this.css( type, typeof size === "string" ? size : size + "px" );
-               }
-       };
-
-});
-
-
-// Expose jQuery to the global object
-window.jQuery = window.$ = jQuery;
-})( window );
diff --git a/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite1.0/web/manual_harness.html b/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite1.0/web/manual_harness.html
deleted file mode 100755 (executable)
index 63a4c61..0000000
+++ /dev/null
@@ -1,312 +0,0 @@
-<!--
-# Copyright (C) 2012 Intel Corporation
-# 
-# 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
-# of the License, or (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
-#
-# Authors:
-#              Zhang, Huihui <huihuix.zhang@intel.com>
-#              Wendong,Sui  <weidongx.sun@intel.com>
--->
-<!doctype html>
-<html>
-<head>
-<style type="text/css">
-body {
-        margin: 0px;
-}
-
-div#manualharness {
-        box-sizing:border-box;
-        width:100%;
-        border:0px;
-        text-align: left;
-        background: teal;
-        color: white;
-}
-
-textarea#casesinfo{
-        width: 99%;
-        font-size: 20px;
-}
-input,lable,select{
-       font-size: 25px;
-}
-</style>
-<script src="jquery.js"></script>
-<script>
-var iTestsManual = 0;
-
-function fillCasesInfo(){
-        oTestFrame = window.parent.document.getElementById('testframe');
-       oTestFrame.src = '';
-       document.getElementById("caseslist").options[iTestsManual].selected=true;
-       if(window.parent.manualcaseslist[iTestsManual].result == "PASS"){
-               document.getElementById("passradio").checked=true;
-                document.getElementById("passradio").tag=1;
-               document.getElementById("failradio").checked=false;
-                document.getElementById("failradio").tag=0;
-                document.getElementById("blockradio").checked=false;
-                document.getElementById("blockradio").tag=0;
-       } else if(window.parent.manualcaseslist[iTestsManual].result == "FAIL"){
-               document.getElementById("passradio").checked=false;
-                document.getElementById("passradio").tag=0;
-                document.getElementById("failradio").checked=true;
-                document.getElementById("failradio").tag=1;
-                document.getElementById("blockradio").checked=false;
-                document.getElementById("blockradio").tag=0;
-       } else if(window.parent.manualcaseslist[iTestsManual].result == "BLOCK"){
-                document.getElementById("passradio").checked=false;
-                document.getElementById("passradio").tag=0;
-                document.getElementById("failradio").checked=false;
-                document.getElementById("failradio").tag=0;
-                document.getElementById("blockradio").checked=true;
-                document.getElementById("blockradio").tag=1;
-        }else {
-               document.getElementById("passradio").checked=false;
-                document.getElementById("passradio").tag=0;
-                document.getElementById("failradio").checked=false;
-                document.getElementById("failradio").tag=0;
-                document.getElementById("blockradio").checked=false;
-                document.getElementById("blockradio").tag=0;
-       }
-
-       var scriptPathText = window.parent.manualcaseslist[iTestsManual].entry;
-       if(scriptPathText != undefined && scriptPathText.trim().length > 0){
-               document.getElementById("runbutton").disabled = false;
-       }else {
-               document.getElementById("runbutton").disabled = true;
-       }
-       
-       document.getElementById("casesinfo").value="";
-        document.getElementById("casesinfo").value+="Descriptions: "+window.parent.manualcaseslist[iTestsManual].purpose +"\n";
-        var preC = window.parent.manualcaseslist[iTestsManual].pre_con;
-        if (preC && preC.length > 0){
-                document.getElementById("casesinfo").value+= "PreCondition: "+preC+"\n";
-        }
-
-        var posC = window.parent.manualcaseslist[iTestsManual].post_con;
-        if (posC && posC.length > 0){
-                document.getElementById("casesinfo").value+= "PostCondition: "+posC+"\n";
-        }
-
-        var steps = window.parent.manualcaseslist[iTestsManual].steps;
-        if(steps.length > 0){
-            for(var i=0; i<steps.length; i++){
-                document.getElementById("casesinfo").value+= "Step-"+steps[i].order+": "+steps[i].desc+"\n";
-                document.getElementById("casesinfo").value+= "Expected"+": "+steps[i].expected+"\n";
-            }
-        }
-}
-
-function initManual(){
-        for(var i = 0; i < window.parent.manualcaseslist.length; i++){
-            var id_temp = window.parent.manualcaseslist[i].casesid;
-            if(id_temp.length > 32){
-                var prefix = id_temp.substring(0,9);
-                var postfix = id_temp.substring(15);
-                var item = new Option(prefix + " ... " + postfix, window.parent.manualcaseslist[i].index);
-            } else {
-                var item = new Option(window.parent.manualcaseslist[i].casesid, window.parent.manualcaseslist[i].index);
-            }
-            document.getElementById("caseslist").options.add(item);
-        }
-       fillCasesInfo();
-}
-
-function runTest(){
-       var scriptPathText = window.parent.manualcaseslist[iTestsManual].entry;
-       if(scriptPathText){
-               window.parent.document.getElementById('testframe').src = scriptPathText;
-       }
-}
-
-function nextTest(){
-       submitTest();
-       iTestsManual++;
-       if(iTestsManual >= window.parent.manualcaseslist.length)
-               iTestsManual=0;
-       fillCasesInfo();
-}
-
-function prevTest(){
-       submitTest();
-        iTestsManual--;
-        if(iTestsManual < 0)
-                iTestsManual = window.parent.manualcaseslist.length - 1;
-       fillCasesInfo();
-}
-
-function submitTest(){
-       var iResult="N/A";
-       var optionsColor="white";
-       if(document.getElementById("passradio").tag == 1){
-               iResult="PASS";
-               optionsColor="greenyellow";
-       } else if(document.getElementById("failradio").tag == 1){
-               iResult="FAIL";
-               optionsColor="orangered";
-       } else if(document.getElementById("blockradio").tag == 1){
-                iResult="BLOCK";
-                optionsColor="gray";
-        }
-       window.parent.manualcaseslist[iTestsManual].result = iResult;
-       document.getElementById("caseslist").options[iTestsManual].style.backgroundColor = optionsColor;
-
-       var server_url = "http://127.0.0.1:8000/commit_manual_result";
-        jQuery.ajax({
-          async: false,
-          url: server_url,
-          type: "POST",
-          data: {"case_id": window.parent.manualcaseslist[iTestsManual].casesid,"purpose": window.parent.manualcaseslist[iTestsManual].purpose, "result": iResult},
-          dataType: "json",
-          beforeSend: function(x) {
-            if (x && x.overrideMimeType) {
-              x.overrideMimeType("application/json;charset=UTF-8");
-            }
-          },
-          success: function(result) {
-          }
-        });
-}
-
-function completeTest(){
-       window.parent.ask_generate_xml();
-}
-
-function passRadio()
-{
-       var radio = document.getElementById("passradio");
-       if (radio.tag==1){
-               radio.checked=false;
-               radio.tag=0;
-       }else{
-               radio.checked=true;
-               radio.tag=1;
-               document.getElementById("failradio").checked=false;
-                document.getElementById("failradio").tag=0;
-                document.getElementById("blockradio").checked=false;
-                document.getElementById("blockradio").tag=0;
-       }
-}
-
-function failRadio()
-{
-        var radio = document.getElementById("failradio");
-        if (radio.tag==1){
-                radio.checked=false;
-                radio.tag=0;
-        }else{
-                radio.checked=true;
-                radio.tag=1;
-                document.getElementById("passradio").checked=false;
-                document.getElementById("passradio").tag=0;
-                document.getElementById("blockradio").checked=false;
-                document.getElementById("blockradio").tag=0;
-
-        }
-}
-
-function blockRadio()
-{
-        var radio = document.getElementById("blockradio");
-        if (radio.tag==1){
-                radio.checked=false;
-                radio.tag=0;
-        }else{
-                radio.checked=true;
-                radio.tag=1;
-                document.getElementById("passradio").checked=false;
-                document.getElementById("passradio").tag=0;
-                document.getElementById("failradio").checked=false;
-                document.getElementById("failradio").tag=0;
-        }
-}
-
-function listUpdate(){
-       iTestsManual = document.getElementById("caseslist").selectedIndex;
-       fillCasesInfo();
-}
-
-function passLabel(){
-        var radio = document.getElementById("passradio");
-        if (radio.tag==1){
-                radio.checked=false;
-                radio.tag=0;
-        }else{
-                radio.checked=true;
-                radio.tag=1;
-                document.getElementById("failradio").checked=false;
-                document.getElementById("failradio").tag=0;
-                document.getElementById("blockradio").checked=false;
-                document.getElementById("blockradio").tag=0;
-        }
-}
-
-function failLabel(){
-       var radio = document.getElementById("failradio");
-        if (radio.tag==1){
-                radio.checked=false;
-                radio.tag=0;
-        }else{
-                radio.checked=true;
-                radio.tag=1;
-                document.getElementById("passradio").checked=false;
-                document.getElementById("passradio").tag=0;
-                document.getElementById("blockradio").checked=false;
-                document.getElementById("blockradio").tag=0;
-        }
-}
-
-function blockLabel(){
-        var radio = document.getElementById("blockradio");
-        if (radio.tag==1){
-                radio.checked=false;
-                radio.tag=0;
-        }else{
-                radio.checked=true;
-                radio.tag=1;
-                document.getElementById("passradio").checked=false;
-                document.getElementById("passradio").tag=0;
-                document.getElementById("failradio").checked=false;
-                document.getElementById("failradio").tag=0;
-        }
-}
-
-</script>
-</head>
-<body onload="initManual()">
-<div id="manualharness" >
-<input type="button" style="width:13%" id="prevbutton" value="< Prev" onclick="prevTest()"/>
-<select id="caseslist" style="width:59%" onchange="listUpdate()">
-</select>
-<input type="button" style="width:13%" id="nextbutton" value="Next >" onclick="nextTest()"/>
-<input type="button" style="width:12%" id="runbutton" value="Run" onclick="runTest()"/>
-</div>
-<div width=100%>
-<textarea id="casesinfo" rows=8 disabled='disabled' />
-</textarea>
-</div>
-<div style="width:100%;text-align:right;background-color:#cccccc;">
-<input type="radio" id="passradio" value="Pass" onclick="passRadio()"/><label style="font-size:25px" onclick="passLabel()">Pass</label>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
-<input type="radio" id="failradio" value="Fail" onclick="failRadio()"/><label style="font-size:25px" onclick="failLabel()">Fail</label>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
-<input type="radio" id="blockradio" value="Block" onclick="blockRadio()"/><label style="font-size:25px" onclick="blockLabel()">Block</label>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
-<input type="button" style="width:12%" id="submitbutton" value="Save" onclick="submitTest()"/>
-<input type="button" style="width:12%" id="completebutton" value="Done" onclick="completeTest()"/><br>
-</div>
-</body>
-</html>
diff --git a/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite1.0/web/manualharness.html b/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite1.0/web/manualharness.html
deleted file mode 100755 (executable)
index 6ca25b5..0000000
+++ /dev/null
@@ -1,318 +0,0 @@
-<!--
-# Copyright (C) 2012 Intel Corporation
-# 
-# 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
-# of the License, or (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
-#
-# Authors:
-#              Zhang, Huihui <huihuix.zhang@intel.com>
-#              Wendong,Sui  <weidongx.sun@intel.com>
--->
-<!doctype html>
-<html>
-<head>
-<style type="text/css">
-body {
-        margin: 0px;
-}
-
-div#manualharness {
-       box-sizing:border-box;
-       width:100%;
-       border:0px;
-       text-align: left;
-       background: teal;
-       color: white;
-}
-
-textarea#casesinfo{
-        width: 99%;
-        font-size: 20px;
-}
-
-input,lable,select{
-       font-size: 25px;
-}
-
-</style>
-<script src="jquery.js"></script>
-<script>
-var iTestsManual = 0;
-
-function fillCasesInfo(){
-       window.parent.oTestFrame.src = '';
-       document.getElementById("caseslist").options[iTestsManual].selected=true;
-       if(window.parent.manualcaseslist[iTestsManual].result == "PASS"){
-                document.getElementById("passradio").checked=true;
-                document.getElementById("passradio").tag=1;
-                document.getElementById("failradio").checked=false;
-                document.getElementById("failradio").tag=0;
-                document.getElementById("blockradio").checked=false;
-                document.getElementById("blockradio").tag=0;
-       } else if(window.parent.manualcaseslist[iTestsManual].result == "FAIL"){
-                document.getElementById("passradio").checked=false;
-                document.getElementById("passradio").tag=0;
-                document.getElementById("failradio").checked=true;
-                document.getElementById("failradio").tag=1;
-                document.getElementById("blockradio").checked=false;
-                document.getElementById("blockradio").tag=0;
-       } else if(window.parent.manualcaseslist[iTestsManual].result == "BLOCK"){
-                document.getElementById("passradio").checked=false;
-                document.getElementById("passradio").tag=0;
-                document.getElementById("failradio").checked=false;
-                document.getElementById("failradio").tag=0;
-                document.getElementById("blockradio").checked=true;
-                document.getElementById("blockradio").tag=1;
-        } else {
-                document.getElementById("passradio").checked=false;
-                document.getElementById("passradio").tag=0;
-                document.getElementById("failradio").checked=false;
-                document.getElementById("failradio").tag=0;
-                document.getElementById("blockradio").checked=false;
-                document.getElementById("blockradio").tag=0;
-       }
-
-       var scriptPathText = $(window.parent.Tests[window.parent.manualcaseslist[iTestsManual].index]).find('test_script_entry').get(0);
-       if(scriptPathText){
-               if($(scriptPathText).text().trim() == "")
-                       document.getElementById("runbutton").disabled = true;
-               else
-                       document.getElementById("runbutton").disabled = false;
-       }else {
-               document.getElementById("runbutton").disabled = true;
-       }
-       
-       document.getElementById("casesinfo").value="";
-        document.getElementById("casesinfo").value+="Descriptions: "+$(window.parent.Tests[window.parent.manualcaseslist[iTestsManual].index]).attr('purpose')+"\n";
-        var preC = $(window.parent.Tests[window.parent.manualcaseslist[iTestsManual].index]).find('pre_condition');
-        if (preC && preC.length > 0){
-                var preCText = $(window.parent.Tests[window.parent.manualcaseslist[iTestsManual].index]).find('pre_condition').get(0);
-                document.getElementById("casesinfo").value+= "PreCondition: "+$(preCText).text().trim()+"\n";
-        }
-
-        var posC = $(window.parent.Tests[window.parent.manualcaseslist[iTestsManual].index]).find('post_condition');
-        if (posC && posC.length > 0){
-                var posCText = $(posC).get(0);
-                document.getElementById("casesinfo").value+= "PostCondition: "+$(posCText).text().trim()+"\n";
-        }
-        var stepInfo = $(window.parent.Tests[window.parent.manualcaseslist[iTestsManual].index]).find('step_desc');
-        var stepExp = $(window.parent.Tests[window.parent.manualcaseslist[iTestsManual].index]).find('expected');
-        for(var j=0;j<stepInfo.length;j++){
-               var stepsnum = j + 1;
-               if(stepInfo){
-                       var stepInfoText = $(stepInfo[j]).get(0);
-                       document.getElementById("casesinfo").value+= "Step-"+stepsnum+": "+$(stepInfoText).text().trim()+"\n";
-               }
-               if(stepExp){
-                       var stepExpText = $(stepExp[j]).get(0);
-                       document.getElementById("casesinfo").value+= "Expected"+": "+$(stepExpText).text().trim()+"\n";
-               }
-        }
-}
-
-function initManual(){
-        for(var i = 0; i < window.parent.manualcaseslist.length; i++){
-                var id_temp = window.parent.manualcaseslist[i].casesid;
-                if(window.parent.manualcaseslist[i].casesid.length > 32){
-                        var prefix = id_temp.substring(0,9);
-                        var postfix = id_temp.substring(15);
-                        var item = new Option(prefix + " ... " + postfix, window.parent.manualcaseslist[i].index);
-                } else {
-                        var item = new Option(window.parent.manualcaseslist[i].casesid, window.parent.manualcaseslist[i].index);
-                }
-                document.getElementById("caseslist").options.add(item);
-        }
-        fillCasesInfo();
-}
-
-function runTest(){
-       var scriptPathText = $(window.parent.Tests[window.parent.manualcaseslist[iTestsManual].index]).find('test_script_entry').get(0);
-       if(scriptPathText){
-               window.parent.oTestFrame.src = $(scriptPathText).text().trim();
-       }
-}
-
-function nextTest(){
-       submitTest();
-       iTestsManual++;
-       if(iTestsManual >= window.parent.manualcaseslist.length)
-               iTestsManual=0;
-       fillCasesInfo();
-}
-
-function prevTest(){
-       submitTest();
-        iTestsManual--;
-        if(iTestsManual < 0)
-                iTestsManual = window.parent.manualcaseslist.length - 1;
-       fillCasesInfo();
-}
-
-function submitTest(){
-       if (window.parent.manualcaseslist[iTestsManual].index >= window.parent.Tests.length)
-               return;
-       var iResult="N/A";
-       var optionsColor="white";
-       if(document.getElementById("passradio").tag == 1){
-                iResult="PASS";
-                optionsColor="greenyellow";
-       } else if(document.getElementById("failradio").tag == 1){
-                iResult="FAIL";
-                optionsColor="orangered";
-       } else if(document.getElementById("blockradio").tag == 1){
-                iResult="BLOCK";
-                optionsColor="gray";
-        }
-
-       window.parent.manualcaseslist[iTestsManual].result = iResult;
-       document.getElementById("caseslist").options[iTestsManual].style.backgroundColor = optionsColor;
-
-       $(window.parent.Tests[window.parent.manualcaseslist[iTestsManual].index]).attr('result', iResult);
-       if($(window.parent.Tests[window.parent.manualcaseslist[iTestsManual].index]).find('result_info').length > 0)
-               $(window.parent.Tests[window.parent.manualcaseslist[iTestsManual].index]).find('result_info').remove();
-
-       var doc=$.parseXML("<result_info>" + "<actual_result>" + iResult +"</actual_result>" + "<start>" + "</start>" + "<end>" + "</end>" + "<stdout>" + "</stdout>" + "</result_info>");
-       $(window.parent.Tests[window.parent.manualcaseslist[iTestsManual].index]).append(doc.documentElement);
-
-//     window.parent.statusNode.innerHTML =  "Test #" + (window.parent.manualcaseslist[iTestsManual].index+1) + "/" + window.parent.Tests.length + "(" + iResult + ") " + window.parent.oTestFrame.src;
-}
-
-function completeTest(){
-       window.parent.PublishResult();
-}
-
-function passRadio()
-{
-       var radio = document.getElementById("passradio");
-       if (radio.tag==1){
-                radio.checked=false;
-                radio.tag=0;
-       }else{
-                radio.checked=true;
-                radio.tag=1;
-                document.getElementById("failradio").checked=false;
-                document.getElementById("failradio").tag=0;
-                document.getElementById("blockradio").checked=false;
-                document.getElementById("blockradio").tag=0;
-       }
-}
-
-function failRadio()
-{
-        var radio = document.getElementById("failradio");
-        if (radio.tag==1){
-                radio.checked=false;
-                radio.tag=0;
-        }else{
-                radio.checked=true;
-                radio.tag=1;
-                document.getElementById("passradio").checked=false;
-                document.getElementById("passradio").tag=0;
-                document.getElementById("blockradio").checked=false;
-                document.getElementById("blockradio").tag=0;
-        }
-}
-
-function blockRadio()
-{
-        var radio = document.getElementById("blockradio");
-        if (radio.tag==1){
-                radio.checked=false;
-                radio.tag=0;
-        }else{
-                radio.checked=true;
-                radio.tag=1;
-                document.getElementById("passradio").checked=false;
-                document.getElementById("passradio").tag=0;
-                document.getElementById("failradio").checked=false;
-                document.getElementById("failradio").tag=0;
-        }
-}
-
-function listUpdate(){
-       iTestsManual = document.getElementById("caseslist").selectedIndex;
-       fillCasesInfo();
-}
-
-function passLabel(){
-        var radio = document.getElementById("passradio");
-        if (radio.tag==1){
-                radio.checked=false;
-                radio.tag=0;
-        }else{
-                radio.checked=true;
-                radio.tag=1;
-                document.getElementById("failradio").checked=false;
-                document.getElementById("failradio").tag=0;
-                document.getElementById("blockradio").checked=false;
-                document.getElementById("blockradio").tag=0;
-        }
-}
-
-function failLabel(){
-       var radio = document.getElementById("failradio");
-        if (radio.tag==1){
-                radio.checked=false;
-                radio.tag=0;
-        }else{
-                radio.checked=true;
-                radio.tag=1;
-                document.getElementById("passradio").checked=false;
-                document.getElementById("passradio").tag=0;
-                document.getElementById("blockradio").checked=false;
-                document.getElementById("blockradio").tag=0;
-        }
-}
-
-function blockLabel(){
-        var radio = document.getElementById("blockradio");
-        if (radio.tag==1){
-                radio.checked=false;
-                radio.tag=0;
-        }else{
-                radio.checked=true;
-                radio.tag=1;
-                document.getElementById("passradio").checked=false;
-                document.getElementById("passradio").tag=0;
-                document.getElementById("failradio").checked=false;
-                document.getElementById("failradio").tag=0;
-        }
-}
-
-</script>
-</head>
-<body onload="initManual()">
-<div id="manualharness" >
-<input type="button" style="width:13%" id="prevbutton" value="< Prev" onclick="prevTest()"/>
-<select id="caseslist" style="width:59%" onchange="listUpdate()">
-</select>
-<input type="button" style="width:13%" id="nextbutton" value="Next >" onclick="nextTest()"/>
-<input type="button" style="width:12%" id="runbutton" value="Run" onclick="runTest()"/>
-</div>
-<div width=100%>
-<textarea id="casesinfo" rows=8 disabled='disabled' />
-</textarea>
-</div>
-<div style="width:100%;text-align:right;background-color:#cccccc;">
-<input type="radio" id="passradio" value="Pass" onclick="passRadio()"/><label style="font-size:25px" onclick="passLabel()">Pass</label>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
-<input type="radio" id="failradio" value="Fail" onclick="failRadio()"/><label style="font-size:25px" onclick="failLabel()">Fail</label>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
-<input type="radio" id="blockradio" value="Block" onclick="blockRadio()"/><label style="font-size:25px" onclick="blockLabel()">Block</label>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
-<input type="button" style="width:12%" id="submitbutton" value="Save" onclick="submitTest()"/>
-<input type="button" style="width:12%" id="completebutton" value="Done" onclick="completeTest()"/><br>
-</div>
-</body>
-</html>
diff --git a/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite1.0/xsd/Makefile.am b/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite1.0/xsd/Makefile.am
deleted file mode 100755 (executable)
index e438102..0000000
+++ /dev/null
@@ -1,22 +0,0 @@
-# Copyright (C) 2012 Intel Corporation
-# 
-# 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
-# of the License, or (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
-#
-# Authors:
-#              Zhang, Huihui <huihuix.zhang@intel.com>
-#              Wendong,Sui  <weidongx.sun@intel.com>
-
-testkitxsddir = /opt/testkit/lite2.4/xsd
-dist_testkitxsd_DATA = *.js *.xsl *.css *.png *.txt *.xml *.xsd release-notes
diff --git a/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite1.0/xsd/application.js b/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite1.0/xsd/application.js
deleted file mode 100755 (executable)
index 72e2a78..0000000
+++ /dev/null
@@ -1,44 +0,0 @@
-function getScrollTop(){
-    return f_scrollTop();
-}
-
-function f_scrollTop() {
-       return f_filterResults (
-               $(window) ? $(window).scrollTop() : 0,
-               document.documentElement ? document.documentElement.scrollTop : 0,
-               document.body ? document.body.scrollTop : 0
-       );
-}
-function f_filterResults(n_win, n_docel, n_body) {
-       var n_result = n_win ? n_win : 0;
-       if (n_docel && (!n_result || (n_result > n_docel)))
-               n_result = n_docel;
-       return n_body && (!n_result || (n_result > n_body)) ? n_body : n_result;
-}
-
-function setScrollTop(){
-    $(window) ? $(window).scrollTop(0): 0;
-       document.documentElement ? document.documentElement.scrollTop = 0 :0;
-       document.body ? document.body.scrollTop = 0 : 0;
-} 
-
-function goTopEx(){
-    $node = $('#goTopBtn');
-       if(getScrollTop() > 0){
-                   $node.show();
-       }else{
-                   $node.hide();
-       }
-       
-    $(window).scroll(function(){
-           if(getScrollTop() > 0){
-                   $node.show();
-           }else{
-                   $node.hide();
-           }
-    });
-       
-    $node.click(function(){
-               setScrollTop();
-    });
-}
\ No newline at end of file
diff --git a/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite1.0/xsd/back_top.png b/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite1.0/xsd/back_top.png
deleted file mode 100755 (executable)
index 19cbd76..0000000
Binary files a/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite1.0/xsd/back_top.png and /dev/null differ
diff --git a/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite1.0/xsd/jquery.min.js b/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite1.0/xsd/jquery.min.js
deleted file mode 100755 (executable)
index 198b3ff..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-/*! jQuery v1.7.1 jquery.com | jquery.org/license */
-(function(a,b){function cy(a){return f.isWindow(a)?a:a.nodeType===9?a.defaultView||a.parentWindow:!1}function cv(a){if(!ck[a]){var b=c.body,d=f("<"+a+">").appendTo(b),e=d.css("display");d.remove();if(e==="none"||e===""){cl||(cl=c.createElement("iframe"),cl.frameBorder=cl.width=cl.height=0),b.appendChild(cl);if(!cm||!cl.createElement)cm=(cl.contentWindow||cl.contentDocument).document,cm.write((c.compatMode==="CSS1Compat"?"<!doctype html>":"")+"<html><body>"),cm.close();d=cm.createElement(a),cm.body.appendChild(d),e=f.css(d,"display"),b.removeChild(cl)}ck[a]=e}return ck[a]}function cu(a,b){var c={};f.each(cq.concat.apply([],cq.slice(0,b)),function(){c[this]=a});return c}function ct(){cr=b}function cs(){setTimeout(ct,0);return cr=f.now()}function cj(){try{return new a.ActiveXObject("Microsoft.XMLHTTP")}catch(b){}}function ci(){try{return new a.XMLHttpRequest}catch(b){}}function cc(a,c){a.dataFilter&&(c=a.dataFilter(c,a.dataType));var d=a.dataTypes,e={},g,h,i=d.length,j,k=d[0],l,m,n,o,p;for(g=1;g<i;g++){if(g===1)for(h in a.converters)typeof h=="string"&&(e[h.toLowerCase()]=a.converters[h]);l=k,k=d[g];if(k==="*")k=l;else if(l!=="*"&&l!==k){m=l+" "+k,n=e[m]||e["* "+k];if(!n){p=b;for(o in e){j=o.split(" ");if(j[0]===l||j[0]==="*"){p=e[j[1]+" "+k];if(p){o=e[o],o===!0?n=p:p===!0&&(n=o);break}}}}!n&&!p&&f.error("No conversion from "+m.replace(" "," to ")),n!==!0&&(c=n?n(c):p(o(c)))}}return c}function cb(a,c,d){var e=a.contents,f=a.dataTypes,g=a.responseFields,h,i,j,k;for(i in g)i in d&&(c[g[i]]=d[i]);while(f[0]==="*")f.shift(),h===b&&(h=a.mimeType||c.getResponseHeader("content-type"));if(h)for(i in e)if(e[i]&&e[i].test(h)){f.unshift(i);break}if(f[0]in d)j=f[0];else{for(i in d){if(!f[0]||a.converters[i+" "+f[0]]){j=i;break}k||(k=i)}j=j||k}if(j){j!==f[0]&&f.unshift(j);return d[j]}}function ca(a,b,c,d){if(f.isArray(b))f.each(b,function(b,e){c||bE.test(a)?d(a,e):ca(a+"["+(typeof e=="object"||f.isArray(e)?b:"")+"]",e,c,d)});else if(!c&&b!=null&&typeof b=="object")for(var e in b)ca(a+"["+e+"]",b[e],c,d);else d(a,b)}function b_(a,c){var d,e,g=f.ajaxSettings.flatOptions||{};for(d in c)c[d]!==b&&((g[d]?a:e||(e={}))[d]=c[d]);e&&f.extend(!0,a,e)}function b$(a,c,d,e,f,g){f=f||c.dataTypes[0],g=g||{},g[f]=!0;var h=a[f],i=0,j=h?h.length:0,k=a===bT,l;for(;i<j&&(k||!l);i++)l=h[i](c,d,e),typeof l=="string"&&(!k||g[l]?l=b:(c.dataTypes.unshift(l),l=b$(a,c,d,e,l,g)));(k||!l)&&!g["*"]&&(l=b$(a,c,d,e,"*",g));return l}function bZ(a){return function(b,c){typeof b!="string"&&(c=b,b="*");if(f.isFunction(c)){var d=b.toLowerCase().split(bP),e=0,g=d.length,h,i,j;for(;e<g;e++)h=d[e],j=/^\+/.test(h),j&&(h=h.substr(1)||"*"),i=a[h]=a[h]||[],i[j?"unshift":"push"](c)}}}function bC(a,b,c){var d=b==="width"?a.offsetWidth:a.offsetHeight,e=b==="width"?bx:by,g=0,h=e.length;if(d>0){if(c!=="border")for(;g<h;g++)c||(d-=parseFloat(f.css(a,"padding"+e[g]))||0),c==="margin"?d+=parseFloat(f.css(a,c+e[g]))||0:d-=parseFloat(f.css(a,"border"+e[g]+"Width"))||0;return d+"px"}d=bz(a,b,b);if(d<0||d==null)d=a.style[b]||0;d=parseFloat(d)||0;if(c)for(;g<h;g++)d+=parseFloat(f.css(a,"padding"+e[g]))||0,c!=="padding"&&(d+=parseFloat(f.css(a,"border"+e[g]+"Width"))||0),c==="margin"&&(d+=parseFloat(f.css(a,c+e[g]))||0);return d+"px"}function bp(a,b){b.src?f.ajax({url:b.src,async:!1,dataType:"script"}):f.globalEval((b.text||b.textContent||b.innerHTML||"").replace(bf,"/*$0*/")),b.parentNode&&b.parentNode.removeChild(b)}function bo(a){var b=c.createElement("div");bh.appendChild(b),b.innerHTML=a.outerHTML;return b.firstChild}function bn(a){var b=(a.nodeName||"").toLowerCase();b==="input"?bm(a):b!=="script"&&typeof a.getElementsByTagName!="undefined"&&f.grep(a.getElementsByTagName("input"),bm)}function bm(a){if(a.type==="checkbox"||a.type==="radio")a.defaultChecked=a.checked}function bl(a){return typeof a.getElementsByTagName!="undefined"?a.getElementsByTagName("*"):typeof a.querySelectorAll!="undefined"?a.querySelectorAll("*"):[]}function bk(a,b){var c;if(b.nodeType===1){b.clearAttributes&&b.clearAttributes(),b.mergeAttributes&&b.mergeAttributes(a),c=b.nodeName.toLowerCase();if(c==="object")b.outerHTML=a.outerHTML;else if(c!=="input"||a.type!=="checkbox"&&a.type!=="radio"){if(c==="option")b.selected=a.defaultSelected;else if(c==="input"||c==="textarea")b.defaultValue=a.defaultValue}else a.checked&&(b.defaultChecked=b.checked=a.checked),b.value!==a.value&&(b.value=a.value);b.removeAttribute(f.expando)}}function bj(a,b){if(b.nodeType===1&&!!f.hasData(a)){var c,d,e,g=f._data(a),h=f._data(b,g),i=g.events;if(i){delete h.handle,h.events={};for(c in i)for(d=0,e=i[c].length;d<e;d++)f.event.add(b,c+(i[c][d].namespace?".":"")+i[c][d].namespace,i[c][d],i[c][d].data)}h.data&&(h.data=f.extend({},h.data))}}function bi(a,b){return f.nodeName(a,"table")?a.getElementsByTagName("tbody")[0]||a.appendChild(a.ownerDocument.createElement("tbody")):a}function U(a){var b=V.split("|"),c=a.createDocumentFragment();if(c.createElement)while(b.length)c.createElement(b.pop());return c}function T(a,b,c){b=b||0;if(f.isFunction(b))return f.grep(a,function(a,d){var e=!!b.call(a,d,a);return e===c});if(b.nodeType)return f.grep(a,function(a,d){return a===b===c});if(typeof b=="string"){var d=f.grep(a,function(a){return a.nodeType===1});if(O.test(b))return f.filter(b,d,!c);b=f.filter(b,d)}return f.grep(a,function(a,d){return f.inArray(a,b)>=0===c})}function S(a){return!a||!a.parentNode||a.parentNode.nodeType===11}function K(){return!0}function J(){return!1}function n(a,b,c){var d=b+"defer",e=b+"queue",g=b+"mark",h=f._data(a,d);h&&(c==="queue"||!f._data(a,e))&&(c==="mark"||!f._data(a,g))&&setTimeout(function(){!f._data(a,e)&&!f._data(a,g)&&(f.removeData(a,d,!0),h.fire())},0)}function m(a){for(var b in a){if(b==="data"&&f.isEmptyObject(a[b]))continue;if(b!=="toJSON")return!1}return!0}function l(a,c,d){if(d===b&&a.nodeType===1){var e="data-"+c.replace(k,"-$1").toLowerCase();d=a.getAttribute(e);if(typeof d=="string"){try{d=d==="true"?!0:d==="false"?!1:d==="null"?null:f.isNumeric(d)?parseFloat(d):j.test(d)?f.parseJSON(d):d}catch(g){}f.data(a,c,d)}else d=b}return d}function h(a){var b=g[a]={},c,d;a=a.split(/\s+/);for(c=0,d=a.length;c<d;c++)b[a[c]]=!0;return b}var c=a.document,d=a.navigator,e=a.location,f=function(){function J(){if(!e.isReady){try{c.documentElement.doScroll("left")}catch(a){setTimeout(J,1);return}e.ready()}}var e=function(a,b){return new e.fn.init(a,b,h)},f=a.jQuery,g=a.$,h,i=/^(?:[^#<]*(<[\w\W]+>)[^>]*$|#([\w\-]*)$)/,j=/\S/,k=/^\s+/,l=/\s+$/,m=/^<(\w+)\s*\/?>(?:<\/\1>)?$/,n=/^[\],:{}\s]*$/,o=/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,p=/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,q=/(?:^|:|,)(?:\s*\[)+/g,r=/(webkit)[ \/]([\w.]+)/,s=/(opera)(?:.*version)?[ \/]([\w.]+)/,t=/(msie) ([\w.]+)/,u=/(mozilla)(?:.*? rv:([\w.]+))?/,v=/-([a-z]|[0-9])/ig,w=/^-ms-/,x=function(a,b){return(b+"").toUpperCase()},y=d.userAgent,z,A,B,C=Object.prototype.toString,D=Object.prototype.hasOwnProperty,E=Array.prototype.push,F=Array.prototype.slice,G=String.prototype.trim,H=Array.prototype.indexOf,I={};e.fn=e.prototype={constructor:e,init:function(a,d,f){var g,h,j,k;if(!a)return this;if(a.nodeType){this.context=this[0]=a,this.length=1;return this}if(a==="body"&&!d&&c.body){this.context=c,this[0]=c.body,this.selector=a,this.length=1;return this}if(typeof a=="string"){a.charAt(0)!=="<"||a.charAt(a.length-1)!==">"||a.length<3?g=i.exec(a):g=[null,a,null];if(g&&(g[1]||!d)){if(g[1]){d=d instanceof e?d[0]:d,k=d?d.ownerDocument||d:c,j=m.exec(a),j?e.isPlainObject(d)?(a=[c.createElement(j[1])],e.fn.attr.call(a,d,!0)):a=[k.createElement(j[1])]:(j=e.buildFragment([g[1]],[k]),a=(j.cacheable?e.clone(j.fragment):j.fragment).childNodes);return e.merge(this,a)}h=c.getElementById(g[2]);if(h&&h.parentNode){if(h.id!==g[2])return f.find(a);this.length=1,this[0]=h}this.context=c,this.selector=a;return this}return!d||d.jquery?(d||f).find(a):this.constructor(d).find(a)}if(e.isFunction(a))return f.ready(a);a.selector!==b&&(this.selector=a.selector,this.context=a.context);return e.makeArray(a,this)},selector:"",jquery:"1.7.1",length:0,size:function(){return this.length},toArray:function(){return F.call(this,0)},get:function(a){return a==null?this.toArray():a<0?this[this.length+a]:this[a]},pushStack:function(a,b,c){var d=this.constructor();e.isArray(a)?E.apply(d,a):e.merge(d,a),d.prevObject=this,d.context=this.context,b==="find"?d.selector=this.selector+(this.selector?" ":"")+c:b&&(d.selector=this.selector+"."+b+"("+c+")");return d},each:function(a,b){return e.each(this,a,b)},ready:function(a){e.bindReady(),A.add(a);return this},eq:function(a){a=+a;return a===-1?this.slice(a):this.slice(a,a+1)},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},slice:function(){return this.pushStack(F.apply(this,arguments),"slice",F.call(arguments).join(","))},map:function(a){return this.pushStack(e.map(this,function(b,c){return a.call(b,c,b)}))},end:function(){return this.prevObject||this.constructor(null)},push:E,sort:[].sort,splice:[].splice},e.fn.init.prototype=e.fn,e.extend=e.fn.extend=function(){var a,c,d,f,g,h,i=arguments[0]||{},j=1,k=arguments.length,l=!1;typeof i=="boolean"&&(l=i,i=arguments[1]||{},j=2),typeof i!="object"&&!e.isFunction(i)&&(i={}),k===j&&(i=this,--j);for(;j<k;j++)if((a=arguments[j])!=null)for(c in a){d=i[c],f=a[c];if(i===f)continue;l&&f&&(e.isPlainObject(f)||(g=e.isArray(f)))?(g?(g=!1,h=d&&e.isArray(d)?d:[]):h=d&&e.isPlainObject(d)?d:{},i[c]=e.extend(l,h,f)):f!==b&&(i[c]=f)}return i},e.extend({noConflict:function(b){a.$===e&&(a.$=g),b&&a.jQuery===e&&(a.jQuery=f);return e},isReady:!1,readyWait:1,holdReady:function(a){a?e.readyWait++:e.ready(!0)},ready:function(a){if(a===!0&&!--e.readyWait||a!==!0&&!e.isReady){if(!c.body)return setTimeout(e.ready,1);e.isReady=!0;if(a!==!0&&--e.readyWait>0)return;A.fireWith(c,[e]),e.fn.trigger&&e(c).trigger("ready").off("ready")}},bindReady:function(){if(!A){A=e.Callbacks("once memory");if(c.readyState==="complete")return setTimeout(e.ready,1);if(c.addEventListener)c.addEventListener("DOMContentLoaded",B,!1),a.addEventListener("load",e.ready,!1);else if(c.attachEvent){c.attachEvent("onreadystatechange",B),a.attachEvent("onload",e.ready);var b=!1;try{b=a.frameElement==null}catch(d){}c.documentElement.doScroll&&b&&J()}}},isFunction:function(a){return e.type(a)==="function"},isArray:Array.isArray||function(a){return e.type(a)==="array"},isWindow:function(a){return a&&typeof a=="object"&&"setInterval"in a},isNumeric:function(a){return!isNaN(parseFloat(a))&&isFinite(a)},type:function(a){return a==null?String(a):I[C.call(a)]||"object"},isPlainObject:function(a){if(!a||e.type(a)!=="object"||a.nodeType||e.isWindow(a))return!1;try{if(a.constructor&&!D.call(a,"constructor")&&!D.call(a.constructor.prototype,"isPrototypeOf"))return!1}catch(c){return!1}var d;for(d in a);return d===b||D.call(a,d)},isEmptyObject:function(a){for(var b in a)return!1;return!0},error:function(a){throw new Error(a)},parseJSON:function(b){if(typeof b!="string"||!b)return null;b=e.trim(b);if(a.JSON&&a.JSON.parse)return a.JSON.parse(b);if(n.test(b.replace(o,"@").replace(p,"]").replace(q,"")))return(new Function("return "+b))();e.error("Invalid JSON: "+b)},parseXML:function(c){var d,f;try{a.DOMParser?(f=new DOMParser,d=f.parseFromString(c,"text/xml")):(d=new ActiveXObject("Microsoft.XMLDOM"),d.async="false",d.loadXML(c))}catch(g){d=b}(!d||!d.documentElement||d.getElementsByTagName("parsererror").length)&&e.error("Invalid XML: "+c);return d},noop:function(){},globalEval:function(b){b&&j.test(b)&&(a.execScript||function(b){a.eval.call(a,b)})(b)},camelCase:function(a){return a.replace(w,"ms-").replace(v,x)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toUpperCase()===b.toUpperCase()},each:function(a,c,d){var f,g=0,h=a.length,i=h===b||e.isFunction(a);if(d){if(i){for(f in a)if(c.apply(a[f],d)===!1)break}else for(;g<h;)if(c.apply(a[g++],d)===!1)break}else if(i){for(f in a)if(c.call(a[f],f,a[f])===!1)break}else for(;g<h;)if(c.call(a[g],g,a[g++])===!1)break;return a},trim:G?function(a){return a==null?"":G.call(a)}:function(a){return a==null?"":(a+"").replace(k,"").replace(l,"")},makeArray:function(a,b){var c=b||[];if(a!=null){var d=e.type(a);a.length==null||d==="string"||d==="function"||d==="regexp"||e.isWindow(a)?E.call(c,a):e.merge(c,a)}return c},inArray:function(a,b,c){var d;if(b){if(H)return H.call(b,a,c);d=b.length,c=c?c<0?Math.max(0,d+c):c:0;for(;c<d;c++)if(c in b&&b[c]===a)return c}return-1},merge:function(a,c){var d=a.length,e=0;if(typeof c.length=="number")for(var f=c.length;e<f;e++)a[d++]=c[e];else while(c[e]!==b)a[d++]=c[e++];a.length=d;return a},grep:function(a,b,c){var d=[],e;c=!!c;for(var f=0,g=a.length;f<g;f++)e=!!b(a[f],f),c!==e&&d.push(a[f]);return d},map:function(a,c,d){var f,g,h=[],i=0,j=a.length,k=a instanceof e||j!==b&&typeof j=="number"&&(j>0&&a[0]&&a[j-1]||j===0||e.isArray(a));if(k)for(;i<j;i++)f=c(a[i],i,d),f!=null&&(h[h.length]=f);else for(g in a)f=c(a[g],g,d),f!=null&&(h[h.length]=f);return h.concat.apply([],h)},guid:1,proxy:function(a,c){if(typeof c=="string"){var d=a[c];c=a,a=d}if(!e.isFunction(a))return b;var f=F.call(arguments,2),g=function(){return a.apply(c,f.concat(F.call(arguments)))};g.guid=a.guid=a.guid||g.guid||e.guid++;return g},access:function(a,c,d,f,g,h){var i=a.length;if(typeof c=="object"){for(var j in c)e.access(a,j,c[j],f,g,d);return a}if(d!==b){f=!h&&f&&e.isFunction(d);for(var k=0;k<i;k++)g(a[k],c,f?d.call(a[k],k,g(a[k],c)):d,h);return a}return i?g(a[0],c):b},now:function(){return(new Date).getTime()},uaMatch:function(a){a=a.toLowerCase();var b=r.exec(a)||s.exec(a)||t.exec(a)||a.indexOf("compatible")<0&&u.exec(a)||[];return{browser:b[1]||"",version:b[2]||"0"}},sub:function(){function a(b,c){return new a.fn.init(b,c)}e.extend(!0,a,this),a.superclass=this,a.fn=a.prototype=this(),a.fn.constructor=a,a.sub=this.sub,a.fn.init=function(d,f){f&&f instanceof e&&!(f instanceof a)&&(f=a(f));return e.fn.init.call(this,d,f,b)},a.fn.init.prototype=a.fn;var b=a(c);return a},browser:{}}),e.each("Boolean Number String Function Array Date RegExp Object".split(" "),function(a,b){I["[object "+b+"]"]=b.toLowerCase()}),z=e.uaMatch(y),z.browser&&(e.browser[z.browser]=!0,e.browser.version=z.version),e.browser.webkit&&(e.browser.safari=!0),j.test(" ")&&(k=/^[\s\xA0]+/,l=/[\s\xA0]+$/),h=e(c),c.addEventListener?B=function(){c.removeEventListener("DOMContentLoaded",B,!1),e.ready()}:c.attachEvent&&(B=function(){c.readyState==="complete"&&(c.detachEvent("onreadystatechange",B),e.ready())});return e}(),g={};f.Callbacks=function(a){a=a?g[a]||h(a):{};var c=[],d=[],e,i,j,k,l,m=function(b){var d,e,g,h,i;for(d=0,e=b.length;d<e;d++)g=b[d],h=f.type(g),h==="array"?m(g):h==="function"&&(!a.unique||!o.has(g))&&c.push(g)},n=function(b,f){f=f||[],e=!a.memory||[b,f],i=!0,l=j||0,j=0,k=c.length;for(;c&&l<k;l++)if(c[l].apply(b,f)===!1&&a.stopOnFalse){e=!0;break}i=!1,c&&(a.once?e===!0?o.disable():c=[]:d&&d.length&&(e=d.shift(),o.fireWith(e[0],e[1])))},o={add:function(){if(c){var a=c.length;m(arguments),i?k=c.length:e&&e!==!0&&(j=a,n(e[0],e[1]))}return this},remove:function(){if(c){var b=arguments,d=0,e=b.length;for(;d<e;d++)for(var f=0;f<c.length;f++)if(b[d]===c[f]){i&&f<=k&&(k--,f<=l&&l--),c.splice(f--,1);if(a.unique)break}}return this},has:function(a){if(c){var b=0,d=c.length;for(;b<d;b++)if(a===c[b])return!0}return!1},empty:function(){c=[];return this},disable:function(){c=d=e=b;return this},disabled:function(){return!c},lock:function(){d=b,(!e||e===!0)&&o.disable();return this},locked:function(){return!d},fireWith:function(b,c){d&&(i?a.once||d.push([b,c]):(!a.once||!e)&&n(b,c));return this},fire:function(){o.fireWith(this,arguments);return this},fired:function(){return!!e}};return o};var i=[].slice;f.extend({Deferred:function(a){var b=f.Callbacks("once memory"),c=f.Callbacks("once memory"),d=f.Callbacks("memory"),e="pending",g={resolve:b,reject:c,notify:d},h={done:b.add,fail:c.add,progress:d.add,state:function(){return e},isResolved:b.fired,isRejected:c.fired,then:function(a,b,c){i.done(a).fail(b).progress(c);return this},always:function(){i.done.apply(i,arguments).fail.apply(i,arguments);return this},pipe:function(a,b,c){return f.Deferred(function(d){f.each({done:[a,"resolve"],fail:[b,"reject"],progress:[c,"notify"]},function(a,b){var c=b[0],e=b[1],g;f.isFunction(c)?i[a](function(){g=c.apply(this,arguments),g&&f.isFunction(g.promise)?g.promise().then(d.resolve,d.reject,d.notify):d[e+"With"](this===i?d:this,[g])}):i[a](d[e])})}).promise()},promise:function(a){if(a==null)a=h;else for(var b in h)a[b]=h[b];return a}},i=h.promise({}),j;for(j in g)i[j]=g[j].fire,i[j+"With"]=g[j].fireWith;i.done(function(){e="resolved"},c.disable,d.lock).fail(function(){e="rejected"},b.disable,d.lock),a&&a.call(i,i);return i},when:function(a){function m(a){return function(b){e[a]=arguments.length>1?i.call(arguments,0):b,j.notifyWith(k,e)}}function l(a){return function(c){b[a]=arguments.length>1?i.call(arguments,0):c,--g||j.resolveWith(j,b)}}var b=i.call(arguments,0),c=0,d=b.length,e=Array(d),g=d,h=d,j=d<=1&&a&&f.isFunction(a.promise)?a:f.Deferred(),k=j.promise();if(d>1){for(;c<d;c++)b[c]&&b[c].promise&&f.isFunction(b[c].promise)?b[c].promise().then(l(c),j.reject,m(c)):--g;g||j.resolveWith(j,b)}else j!==a&&j.resolveWith(j,d?[a]:[]);return k}}),f.support=function(){var b,d,e,g,h,i,j,k,l,m,n,o,p,q=c.createElement("div"),r=c.documentElement;q.setAttribute("className","t"),q.innerHTML="   <link/><table></table><a href='/a' style='top:1px;float:left;opacity:.55;'>a</a><input type='checkbox'/>",d=q.getElementsByTagName("*"),e=q.getElementsByTagName("a")[0];if(!d||!d.length||!e)return{};g=c.createElement("select"),h=g.appendChild(c.createElement("option")),i=q.getElementsByTagName("input")[0],b={leadingWhitespace:q.firstChild.nodeType===3,tbody:!q.getElementsByTagName("tbody").length,htmlSerialize:!!q.getElementsByTagName("link").length,style:/top/.test(e.getAttribute("style")),hrefNormalized:e.getAttribute("href")==="/a",opacity:/^0.55/.test(e.style.opacity),cssFloat:!!e.style.cssFloat,checkOn:i.value==="on",optSelected:h.selected,getSetAttribute:q.className!=="t",enctype:!!c.createElement("form").enctype,html5Clone:c.createElement("nav").cloneNode(!0).outerHTML!=="<:nav></:nav>",submitBubbles:!0,changeBubbles:!0,focusinBubbles:!1,deleteExpando:!0,noCloneEvent:!0,inlineBlockNeedsLayout:!1,shrinkWrapBlocks:!1,reliableMarginRight:!0},i.checked=!0,b.noCloneChecked=i.cloneNode(!0).checked,g.disabled=!0,b.optDisabled=!h.disabled;try{delete q.test}catch(s){b.deleteExpando=!1}!q.addEventListener&&q.attachEvent&&q.fireEvent&&(q.attachEvent("onclick",function(){b.noCloneEvent=!1}),q.cloneNode(!0).fireEvent("onclick")),i=c.createElement("input"),i.value="t",i.setAttribute("type","radio"),b.radioValue=i.value==="t",i.setAttribute("checked","checked"),q.appendChild(i),k=c.createDocumentFragment(),k.appendChild(q.lastChild),b.checkClone=k.cloneNode(!0).cloneNode(!0).lastChild.checked,b.appendChecked=i.checked,k.removeChild(i),k.appendChild(q),q.innerHTML="",a.getComputedStyle&&(j=c.createElement("div"),j.style.width="0",j.style.marginRight="0",q.style.width="2px",q.appendChild(j),b.reliableMarginRight=(parseInt((a.getComputedStyle(j,null)||{marginRight:0}).marginRight,10)||0)===0);if(q.attachEvent)for(o in{submit:1,change:1,focusin:1})n="on"+o,p=n in q,p||(q.setAttribute(n,"return;"),p=typeof q[n]=="function"),b[o+"Bubbles"]=p;k.removeChild(q),k=g=h=j=q=i=null,f(function(){var a,d,e,g,h,i,j,k,m,n,o,r=c.getElementsByTagName("body")[0];!r||(j=1,k="position:absolute;top:0;left:0;width:1px;height:1px;margin:0;",m="visibility:hidden;border:0;",n="style='"+k+"border:5px solid #000;padding:0;'",o="<div "+n+"><div></div></div>"+"<table "+n+" cellpadding='0' cellspacing='0'>"+"<tr><td></td></tr></table>",a=c.createElement("div"),a.style.cssText=m+"width:0;height:0;position:static;top:0;margin-top:"+j+"px",r.insertBefore(a,r.firstChild),q=c.createElement("div"),a.appendChild(q),q.innerHTML="<table><tr><td style='padding:0;border:0;display:none'></td><td>t</td></tr></table>",l=q.getElementsByTagName("td"),p=l[0].offsetHeight===0,l[0].style.display="",l[1].style.display="none",b.reliableHiddenOffsets=p&&l[0].offsetHeight===0,q.innerHTML="",q.style.width=q.style.paddingLeft="1px",f.boxModel=b.boxModel=q.offsetWidth===2,typeof q.style.zoom!="undefined"&&(q.style.display="inline",q.style.zoom=1,b.inlineBlockNeedsLayout=q.offsetWidth===2,q.style.display="",q.innerHTML="<div style='width:4px;'></div>",b.shrinkWrapBlocks=q.offsetWidth!==2),q.style.cssText=k+m,q.innerHTML=o,d=q.firstChild,e=d.firstChild,h=d.nextSibling.firstChild.firstChild,i={doesNotAddBorder:e.offsetTop!==5,doesAddBorderForTableAndCells:h.offsetTop===5},e.style.position="fixed",e.style.top="20px",i.fixedPosition=e.offsetTop===20||e.offsetTop===15,e.style.position=e.style.top="",d.style.overflow="hidden",d.style.position="relative",i.subtractsBorderForOverflowNotVisible=e.offsetTop===-5,i.doesNotIncludeMarginInBodyOffset=r.offsetTop!==j,r.removeChild(a),q=a=null,f.extend(b,i))});return b}();var j=/^(?:\{.*\}|\[.*\])$/,k=/([A-Z])/g;f.extend({cache:{},uuid:0,expando:"jQuery"+(f.fn.jquery+Math.random()).replace(/\D/g,""),noData:{embed:!0,object:"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000",applet:!0},hasData:function(a){a=a.nodeType?f.cache[a[f.expando]]:a[f.expando];return!!a&&!m(a)},data:function(a,c,d,e){if(!!f.acceptData(a)){var g,h,i,j=f.expando,k=typeof c=="string",l=a.nodeType,m=l?f.cache:a,n=l?a[j]:a[j]&&j,o=c==="events";if((!n||!m[n]||!o&&!e&&!m[n].data)&&k&&d===b)return;n||(l?a[j]=n=++f.uuid:n=j),m[n]||(m[n]={},l||(m[n].toJSON=f.noop));if(typeof c=="object"||typeof c=="function")e?m[n]=f.extend(m[n],c):m[n].data=f.extend(m[n].data,c);g=h=m[n],e||(h.data||(h.data={}),h=h.data),d!==b&&(h[f.camelCase(c)]=d);if(o&&!h[c])return g.events;k?(i=h[c],i==null&&(i=h[f.camelCase(c)])):i=h;return i}},removeData:function(a,b,c){if(!!f.acceptData(a)){var d,e,g,h=f.expando,i=a.nodeType,j=i?f.cache:a,k=i?a[h]:h;if(!j[k])return;if(b){d=c?j[k]:j[k].data;if(d){f.isArray(b)||(b in d?b=[b]:(b=f.camelCase(b),b in d?b=[b]:b=b.split(" ")));for(e=0,g=b.length;e<g;e++)delete d[b[e]];if(!(c?m:f.isEmptyObject)(d))return}}if(!c){delete j[k].data;if(!m(j[k]))return}f.support.deleteExpando||!j.setInterval?delete j[k]:j[k]=null,i&&(f.support.deleteExpando?delete a[h]:a.removeAttribute?a.removeAttribute(h):a[h]=null)}},_data:function(a,b,c){return f.data(a,b,c,!0)},acceptData:function(a){if(a.nodeName){var b=f.noData[a.nodeName.toLowerCase()];if(b)return b!==!0&&a.getAttribute("classid")===b}return!0}}),f.fn.extend({data:function(a,c){var d,e,g,h=null;if(typeof a=="undefined"){if(this.length){h=f.data(this[0]);if(this[0].nodeType===1&&!f._data(this[0],"parsedAttrs")){e=this[0].attributes;for(var i=0,j=e.length;i<j;i++)g=e[i].name,g.indexOf("data-")===0&&(g=f.camelCase(g.substring(5)),l(this[0],g,h[g]));f._data(this[0],"parsedAttrs",!0)}}return h}if(typeof a=="object")return this.each(function(){f.data(this,a)});d=a.split("."),d[1]=d[1]?"."+d[1]:"";if(c===b){h=this.triggerHandler("getData"+d[1]+"!",[d[0]]),h===b&&this.length&&(h=f.data(this[0],a),h=l(this[0],a,h));return h===b&&d[1]?this.data(d[0]):h}return this.each(function(){var b=f(this),e=[d[0],c];b.triggerHandler("setData"+d[1]+"!",e),f.data(this,a,c),b.triggerHandler("changeData"+d[1]+"!",e)})},removeData:function(a){return this.each(function(){f.removeData(this,a)})}}),f.extend({_mark:function(a,b){a&&(b=(b||"fx")+"mark",f._data(a,b,(f._data(a,b)||0)+1))},_unmark:function(a,b,c){a!==!0&&(c=b,b=a,a=!1);if(b){c=c||"fx";var d=c+"mark",e=a?0:(f._data(b,d)||1)-1;e?f._data(b,d,e):(f.removeData(b,d,!0),n(b,c,"mark"))}},queue:function(a,b,c){var d;if(a){b=(b||"fx")+"queue",d=f._data(a,b),c&&(!d||f.isArray(c)?d=f._data(a,b,f.makeArray(c)):d.push(c));return d||[]}},dequeue:function(a,b){b=b||"fx";var c=f.queue(a,b),d=c.shift(),e={};d==="inprogress"&&(d=c.shift()),d&&(b==="fx"&&c.unshift("inprogress"),f._data(a,b+".run",e),d.call(a,function(){f.dequeue(a,b)},e)),c.length||(f.removeData(a,b+"queue "+b+".run",!0),n(a,b,"queue"))}}),f.fn.extend({queue:function(a,c){typeof a!="string"&&(c=a,a="fx");if(c===b)return f.queue(this[0],a);return this.each(function(){var b=f.queue(this,a,c);a==="fx"&&b[0]!=="inprogress"&&f.dequeue(this,a)})},dequeue:function(a){return this.each(function(){f.dequeue(this,a)})},delay:function(a,b){a=f.fx?f.fx.speeds[a]||a:a,b=b||"fx";return this.queue(b,function(b,c){var d=setTimeout(b,a);c.stop=function(){clearTimeout(d)}})},clearQueue:function(a){return this.queue(a||"fx",[])},promise:function(a,c){function m(){--h||d.resolveWith(e,[e])}typeof a!="string"&&(c=a,a=b),a=a||"fx";var d=f.Deferred(),e=this,g=e.length,h=1,i=a+"defer",j=a+"queue",k=a+"mark",l;while(g--)if(l=f.data(e[g],i,b,!0)||(f.data(e[g],j,b,!0)||f.data(e[g],k,b,!0))&&f.data(e[g],i,f.Callbacks("once memory"),!0))h++,l.add(m);m();return d.promise()}});var o=/[\n\t\r]/g,p=/\s+/,q=/\r/g,r=/^(?:button|input)$/i,s=/^(?:button|input|object|select|textarea)$/i,t=/^a(?:rea)?$/i,u=/^(?:autofocus|autoplay|async|checked|controls|defer|disabled|hidden|loop|multiple|open|readonly|required|scoped|selected)$/i,v=f.support.getSetAttribute,w,x,y;f.fn.extend({attr:function(a,b){return f.access(this,a,b,!0,f.attr)},removeAttr:function(a){return this.each(function(){f.removeAttr(this,a)})},prop:function(a,b){return f.access(this,a,b,!0,f.prop)},removeProp:function(a){a=f.propFix[a]||a;return this.each(function(){try{this[a]=b,delete this[a]}catch(c){}})},addClass:function(a){var b,c,d,e,g,h,i;if(f.isFunction(a))return this.each(function(b){f(this).addClass(a.call(this,b,this.className))});if(a&&typeof a=="string"){b=a.split(p);for(c=0,d=this.length;c<d;c++){e=this[c];if(e.nodeType===1)if(!e.className&&b.length===1)e.className=a;else{g=" "+e.className+" ";for(h=0,i=b.length;h<i;h++)~g.indexOf(" "+b[h]+" ")||(g+=b[h]+" ");e.className=f.trim(g)}}}return this},removeClass:function(a){var c,d,e,g,h,i,j;if(f.isFunction(a))return this.each(function(b){f(this).removeClass(a.call(this,b,this.className))});if(a&&typeof a=="string"||a===b){c=(a||"").split(p);for(d=0,e=this.length;d<e;d++){g=this[d];if(g.nodeType===1&&g.className)if(a){h=(" "+g.className+" ").replace(o," ");for(i=0,j=c.length;i<j;i++)h=h.replace(" "+c[i]+" "," ");g.className=f.trim(h)}else g.className=""}}return this},toggleClass:function(a,b){var c=typeof a,d=typeof b=="boolean";if(f.isFunction(a))return this.each(function(c){f(this).toggleClass(a.call(this,c,this.className,b),b)});return this.each(function(){if(c==="string"){var e,g=0,h=f(this),i=b,j=a.split(p);while(e=j[g++])i=d?i:!h.hasClass(e),h[i?"addClass":"removeClass"](e)}else if(c==="undefined"||c==="boolean")this.className&&f._data(this,"__className__",this.className),this.className=this.className||a===!1?"":f._data(this,"__className__")||""})},hasClass:function(a){var b=" "+a+" ",c=0,d=this.length;for(;c<d;c++)if(this[c].nodeType===1&&(" "+this[c].className+" ").replace(o," ").indexOf(b)>-1)return!0;return!1},val:function(a){var c,d,e,g=this[0];{if(!!arguments.length){e=f.isFunction(a);return this.each(function(d){var g=f(this),h;if(this.nodeType===1){e?h=a.call(this,d,g.val()):h=a,h==null?h="":typeof h=="number"?h+="":f.isArray(h)&&(h=f.map(h,function(a){return a==null?"":a+""})),c=f.valHooks[this.nodeName.toLowerCase()]||f.valHooks[this.type];if(!c||!("set"in c)||c.set(this,h,"value")===b)this.value=h}})}if(g){c=f.valHooks[g.nodeName.toLowerCase()]||f.valHooks[g.type];if(c&&"get"in c&&(d=c.get(g,"value"))!==b)return d;d=g.value;return typeof d=="string"?d.replace(q,""):d==null?"":d}}}}),f.extend({valHooks:{option:{get:function(a){var b=a.attributes.value;return!b||b.specified?a.value:a.text}},select:{get:function(a){var b,c,d,e,g=a.selectedIndex,h=[],i=a.options,j=a.type==="select-one";if(g<0)return null;c=j?g:0,d=j?g+1:i.length;for(;c<d;c++){e=i[c];if(e.selected&&(f.support.optDisabled?!e.disabled:e.getAttribute("disabled")===null)&&(!e.parentNode.disabled||!f.nodeName(e.parentNode,"optgroup"))){b=f(e).val();if(j)return b;h.push(b)}}if(j&&!h.length&&i.length)return f(i[g]).val();return h},set:function(a,b){var c=f.makeArray(b);f(a).find("option").each(function(){this.selected=f.inArray(f(this).val(),c)>=0}),c.length||(a.selectedIndex=-1);return c}}},attrFn:{val:!0,css:!0,html:!0,text:!0,data:!0,width:!0,height:!0,offset:!0},attr:function(a,c,d,e){var g,h,i,j=a.nodeType;if(!!a&&j!==3&&j!==8&&j!==2){if(e&&c in f.attrFn)return f(a)[c](d);if(typeof a.getAttribute=="undefined")return f.prop(a,c,d);i=j!==1||!f.isXMLDoc(a),i&&(c=c.toLowerCase(),h=f.attrHooks[c]||(u.test(c)?x:w));if(d!==b){if(d===null){f.removeAttr(a,c);return}if(h&&"set"in h&&i&&(g=h.set(a,d,c))!==b)return g;a.setAttribute(c,""+d);return d}if(h&&"get"in h&&i&&(g=h.get(a,c))!==null)return g;g=a.getAttribute(c);return g===null?b:g}},removeAttr:function(a,b){var c,d,e,g,h=0;if(b&&a.nodeType===1){d=b.toLowerCase().split(p),g=d.length;for(;h<g;h++)e=d[h],e&&(c=f.propFix[e]||e,f.attr(a,e,""),a.removeAttribute(v?e:c),u.test(e)&&c in a&&(a[c]=!1))}},attrHooks:{type:{set:function(a,b){if(r.test(a.nodeName)&&a.parentNode)f.error("type property can't be changed");else if(!f.support.radioValue&&b==="radio"&&f.nodeName(a,"input")){var c=a.value;a.setAttribute("type",b),c&&(a.value=c);return b}}},value:{get:function(a,b){if(w&&f.nodeName(a,"button"))return w.get(a,b);return b in a?a.value:null},set:function(a,b,c){if(w&&f.nodeName(a,"button"))return w.set(a,b,c);a.value=b}}},propFix:{tabindex:"tabIndex",readonly:"readOnly","for":"htmlFor","class":"className",maxlength:"maxLength",cellspacing:"cellSpacing",cellpadding:"cellPadding",rowspan:"rowSpan",colspan:"colSpan",usemap:"useMap",frameborder:"frameBorder",contenteditable:"contentEditable"},prop:function(a,c,d){var e,g,h,i=a.nodeType;if(!!a&&i!==3&&i!==8&&i!==2){h=i!==1||!f.isXMLDoc(a),h&&(c=f.propFix[c]||c,g=f.propHooks[c]);return d!==b?g&&"set"in g&&(e=g.set(a,d,c))!==b?e:a[c]=d:g&&"get"in g&&(e=g.get(a,c))!==null?e:a[c]}},propHooks:{tabIndex:{get:function(a){var c=a.getAttributeNode("tabindex");return c&&c.specified?parseInt(c.value,10):s.test(a.nodeName)||t.test(a.nodeName)&&a.href?0:b}}}}),f.attrHooks.tabindex=f.propHooks.tabIndex,x={get:function(a,c){var d,e=f.prop(a,c);return e===!0||typeof e!="boolean"&&(d=a.getAttributeNode(c))&&d.nodeValue!==!1?c.toLowerCase():b},set:function(a,b,c){var d;b===!1?f.removeAttr(a,c):(d=f.propFix[c]||c,d in a&&(a[d]=!0),a.setAttribute(c,c.toLowerCase()));return c}},v||(y={name:!0,id:!0},w=f.valHooks.button={get:function(a,c){var d;d=a.getAttributeNode(c);return d&&(y[c]?d.nodeValue!=="":d.specified)?d.nodeValue:b},set:function(a,b,d){var e=a.getAttributeNode(d);e||(e=c.createAttribute(d),a.setAttributeNode(e));return e.nodeValue=b+""}},f.attrHooks.tabindex.set=w.set,f.each(["width","height"],function(a,b){f.attrHooks[b]=f.extend(f.attrHooks[b],{set:function(a,c){if(c===""){a.setAttribute(b,"auto");return c}}})}),f.attrHooks.contenteditable={get:w.get,set:function(a,b,c){b===""&&(b="false"),w.set(a,b,c)}}),f.support.hrefNormalized||f.each(["href","src","width","height"],function(a,c){f.attrHooks[c]=f.extend(f.attrHooks[c],{get:function(a){var d=a.getAttribute(c,2);return d===null?b:d}})}),f.support.style||(f.attrHooks.style={get:function(a){return a.style.cssText.toLowerCase()||b},set:function(a,b){return a.style.cssText=""+b}}),f.support.optSelected||(f.propHooks.selected=f.extend(f.propHooks.selected,{get:function(a){var b=a.parentNode;b&&(b.selectedIndex,b.parentNode&&b.parentNode.selectedIndex);return null}})),f.support.enctype||(f.propFix.enctype="encoding"),f.support.checkOn||f.each(["radio","checkbox"],function(){f.valHooks[this]={get:function(a){return a.getAttribute("value")===null?"on":a.value}}}),f.each(["radio","checkbox"],function(){f.valHooks[this]=f.extend(f.valHooks[this],{set:function(a,b){if(f.isArray(b))return a.checked=f.inArray(f(a).val(),b)>=0}})});var z=/^(?:textarea|input|select)$/i,A=/^([^\.]*)?(?:\.(.+))?$/,B=/\bhover(\.\S+)?\b/,C=/^key/,D=/^(?:mouse|contextmenu)|click/,E=/^(?:focusinfocus|focusoutblur)$/,F=/^(\w*)(?:#([\w\-]+))?(?:\.([\w\-]+))?$/,G=function(a){var b=F.exec(a);b&&(b[1]=(b[1]||"").toLowerCase(),b[3]=b[3]&&new RegExp("(?:^|\\s)"+b[3]+"(?:\\s|$)"));return b},H=function(a,b){var c=a.attributes||{};return(!b[1]||a.nodeName.toLowerCase()===b[1])&&(!b[2]||(c.id||{}).value===b[2])&&(!b[3]||b[3].test((c["class"]||{}).value))},I=function(a){return f.event.special.hover?a:a.replace(B,"mouseenter$1 mouseleave$1")};
-f.event={add:function(a,c,d,e,g){var h,i,j,k,l,m,n,o,p,q,r,s;if(!(a.nodeType===3||a.nodeType===8||!c||!d||!(h=f._data(a)))){d.handler&&(p=d,d=p.handler),d.guid||(d.guid=f.guid++),j=h.events,j||(h.events=j={}),i=h.handle,i||(h.handle=i=function(a){return typeof f!="undefined"&&(!a||f.event.triggered!==a.type)?f.event.dispatch.apply(i.elem,arguments):b},i.elem=a),c=f.trim(I(c)).split(" ");for(k=0;k<c.length;k++){l=A.exec(c[k])||[],m=l[1],n=(l[2]||"").split(".").sort(),s=f.event.special[m]||{},m=(g?s.delegateType:s.bindType)||m,s=f.event.special[m]||{},o=f.extend({type:m,origType:l[1],data:e,handler:d,guid:d.guid,selector:g,quick:G(g),namespace:n.join(".")},p),r=j[m];if(!r){r=j[m]=[],r.delegateCount=0;if(!s.setup||s.setup.call(a,e,n,i)===!1)a.addEventListener?a.addEventListener(m,i,!1):a.attachEvent&&a.attachEvent("on"+m,i)}s.add&&(s.add.call(a,o),o.handler.guid||(o.handler.guid=d.guid)),g?r.splice(r.delegateCount++,0,o):r.push(o),f.event.global[m]=!0}a=null}},global:{},remove:function(a,b,c,d,e){var g=f.hasData(a)&&f._data(a),h,i,j,k,l,m,n,o,p,q,r,s;if(!!g&&!!(o=g.events)){b=f.trim(I(b||"")).split(" ");for(h=0;h<b.length;h++){i=A.exec(b[h])||[],j=k=i[1],l=i[2];if(!j){for(j in o)f.event.remove(a,j+b[h],c,d,!0);continue}p=f.event.special[j]||{},j=(d?p.delegateType:p.bindType)||j,r=o[j]||[],m=r.length,l=l?new RegExp("(^|\\.)"+l.split(".").sort().join("\\.(?:.*\\.)?")+"(\\.|$)"):null;for(n=0;n<r.length;n++)s=r[n],(e||k===s.origType)&&(!c||c.guid===s.guid)&&(!l||l.test(s.namespace))&&(!d||d===s.selector||d==="**"&&s.selector)&&(r.splice(n--,1),s.selector&&r.delegateCount--,p.remove&&p.remove.call(a,s));r.length===0&&m!==r.length&&((!p.teardown||p.teardown.call(a,l)===!1)&&f.removeEvent(a,j,g.handle),delete o[j])}f.isEmptyObject(o)&&(q=g.handle,q&&(q.elem=null),f.removeData(a,["events","handle"],!0))}},customEvent:{getData:!0,setData:!0,changeData:!0},trigger:function(c,d,e,g){if(!e||e.nodeType!==3&&e.nodeType!==8){var h=c.type||c,i=[],j,k,l,m,n,o,p,q,r,s;if(E.test(h+f.event.triggered))return;h.indexOf("!")>=0&&(h=h.slice(0,-1),k=!0),h.indexOf(".")>=0&&(i=h.split("."),h=i.shift(),i.sort());if((!e||f.event.customEvent[h])&&!f.event.global[h])return;c=typeof c=="object"?c[f.expando]?c:new f.Event(h,c):new f.Event(h),c.type=h,c.isTrigger=!0,c.exclusive=k,c.namespace=i.join("."),c.namespace_re=c.namespace?new RegExp("(^|\\.)"+i.join("\\.(?:.*\\.)?")+"(\\.|$)"):null,o=h.indexOf(":")<0?"on"+h:"";if(!e){j=f.cache;for(l in j)j[l].events&&j[l].events[h]&&f.event.trigger(c,d,j[l].handle.elem,!0);return}c.result=b,c.target||(c.target=e),d=d!=null?f.makeArray(d):[],d.unshift(c),p=f.event.special[h]||{};if(p.trigger&&p.trigger.apply(e,d)===!1)return;r=[[e,p.bindType||h]];if(!g&&!p.noBubble&&!f.isWindow(e)){s=p.delegateType||h,m=E.test(s+h)?e:e.parentNode,n=null;for(;m;m=m.parentNode)r.push([m,s]),n=m;n&&n===e.ownerDocument&&r.push([n.defaultView||n.parentWindow||a,s])}for(l=0;l<r.length&&!c.isPropagationStopped();l++)m=r[l][0],c.type=r[l][1],q=(f._data(m,"events")||{})[c.type]&&f._data(m,"handle"),q&&q.apply(m,d),q=o&&m[o],q&&f.acceptData(m)&&q.apply(m,d)===!1&&c.preventDefault();c.type=h,!g&&!c.isDefaultPrevented()&&(!p._default||p._default.apply(e.ownerDocument,d)===!1)&&(h!=="click"||!f.nodeName(e,"a"))&&f.acceptData(e)&&o&&e[h]&&(h!=="focus"&&h!=="blur"||c.target.offsetWidth!==0)&&!f.isWindow(e)&&(n=e[o],n&&(e[o]=null),f.event.triggered=h,e[h](),f.event.triggered=b,n&&(e[o]=n));return c.result}},dispatch:function(c){c=f.event.fix(c||a.event);var d=(f._data(this,"events")||{})[c.type]||[],e=d.delegateCount,g=[].slice.call(arguments,0),h=!c.exclusive&&!c.namespace,i=[],j,k,l,m,n,o,p,q,r,s,t;g[0]=c,c.delegateTarget=this;if(e&&!c.target.disabled&&(!c.button||c.type!=="click")){m=f(this),m.context=this.ownerDocument||this;for(l=c.target;l!=this;l=l.parentNode||this){o={},q=[],m[0]=l;for(j=0;j<e;j++)r=d[j],s=r.selector,o[s]===b&&(o[s]=r.quick?H(l,r.quick):m.is(s)),o[s]&&q.push(r);q.length&&i.push({elem:l,matches:q})}}d.length>e&&i.push({elem:this,matches:d.slice(e)});for(j=0;j<i.length&&!c.isPropagationStopped();j++){p=i[j],c.currentTarget=p.elem;for(k=0;k<p.matches.length&&!c.isImmediatePropagationStopped();k++){r=p.matches[k];if(h||!c.namespace&&!r.namespace||c.namespace_re&&c.namespace_re.test(r.namespace))c.data=r.data,c.handleObj=r,n=((f.event.special[r.origType]||{}).handle||r.handler).apply(p.elem,g),n!==b&&(c.result=n,n===!1&&(c.preventDefault(),c.stopPropagation()))}}return c.result},props:"attrChange attrName relatedNode srcElement altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "),fixHooks:{},keyHooks:{props:"char charCode key keyCode".split(" "),filter:function(a,b){a.which==null&&(a.which=b.charCode!=null?b.charCode:b.keyCode);return a}},mouseHooks:{props:"button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement".split(" "),filter:function(a,d){var e,f,g,h=d.button,i=d.fromElement;a.pageX==null&&d.clientX!=null&&(e=a.target.ownerDocument||c,f=e.documentElement,g=e.body,a.pageX=d.clientX+(f&&f.scrollLeft||g&&g.scrollLeft||0)-(f&&f.clientLeft||g&&g.clientLeft||0),a.pageY=d.clientY+(f&&f.scrollTop||g&&g.scrollTop||0)-(f&&f.clientTop||g&&g.clientTop||0)),!a.relatedTarget&&i&&(a.relatedTarget=i===a.target?d.toElement:i),!a.which&&h!==b&&(a.which=h&1?1:h&2?3:h&4?2:0);return a}},fix:function(a){if(a[f.expando])return a;var d,e,g=a,h=f.event.fixHooks[a.type]||{},i=h.props?this.props.concat(h.props):this.props;a=f.Event(g);for(d=i.length;d;)e=i[--d],a[e]=g[e];a.target||(a.target=g.srcElement||c),a.target.nodeType===3&&(a.target=a.target.parentNode),a.metaKey===b&&(a.metaKey=a.ctrlKey);return h.filter?h.filter(a,g):a},special:{ready:{setup:f.bindReady},load:{noBubble:!0},focus:{delegateType:"focusin"},blur:{delegateType:"focusout"},beforeunload:{setup:function(a,b,c){f.isWindow(this)&&(this.onbeforeunload=c)},teardown:function(a,b){this.onbeforeunload===b&&(this.onbeforeunload=null)}}},simulate:function(a,b,c,d){var e=f.extend(new f.Event,c,{type:a,isSimulated:!0,originalEvent:{}});d?f.event.trigger(e,null,b):f.event.dispatch.call(b,e),e.isDefaultPrevented()&&c.preventDefault()}},f.event.handle=f.event.dispatch,f.removeEvent=c.removeEventListener?function(a,b,c){a.removeEventListener&&a.removeEventListener(b,c,!1)}:function(a,b,c){a.detachEvent&&a.detachEvent("on"+b,c)},f.Event=function(a,b){if(!(this instanceof f.Event))return new f.Event(a,b);a&&a.type?(this.originalEvent=a,this.type=a.type,this.isDefaultPrevented=a.defaultPrevented||a.returnValue===!1||a.getPreventDefault&&a.getPreventDefault()?K:J):this.type=a,b&&f.extend(this,b),this.timeStamp=a&&a.timeStamp||f.now(),this[f.expando]=!0},f.Event.prototype={preventDefault:function(){this.isDefaultPrevented=K;var a=this.originalEvent;!a||(a.preventDefault?a.preventDefault():a.returnValue=!1)},stopPropagation:function(){this.isPropagationStopped=K;var a=this.originalEvent;!a||(a.stopPropagation&&a.stopPropagation(),a.cancelBubble=!0)},stopImmediatePropagation:function(){this.isImmediatePropagationStopped=K,this.stopPropagation()},isDefaultPrevented:J,isPropagationStopped:J,isImmediatePropagationStopped:J},f.each({mouseenter:"mouseover",mouseleave:"mouseout"},function(a,b){f.event.special[a]={delegateType:b,bindType:b,handle:function(a){var c=this,d=a.relatedTarget,e=a.handleObj,g=e.selector,h;if(!d||d!==c&&!f.contains(c,d))a.type=e.origType,h=e.handler.apply(this,arguments),a.type=b;return h}}}),f.support.submitBubbles||(f.event.special.submit={setup:function(){if(f.nodeName(this,"form"))return!1;f.event.add(this,"click._submit keypress._submit",function(a){var c=a.target,d=f.nodeName(c,"input")||f.nodeName(c,"button")?c.form:b;d&&!d._submit_attached&&(f.event.add(d,"submit._submit",function(a){this.parentNode&&!a.isTrigger&&f.event.simulate("submit",this.parentNode,a,!0)}),d._submit_attached=!0)})},teardown:function(){if(f.nodeName(this,"form"))return!1;f.event.remove(this,"._submit")}}),f.support.changeBubbles||(f.event.special.change={setup:function(){if(z.test(this.nodeName)){if(this.type==="checkbox"||this.type==="radio")f.event.add(this,"propertychange._change",function(a){a.originalEvent.propertyName==="checked"&&(this._just_changed=!0)}),f.event.add(this,"click._change",function(a){this._just_changed&&!a.isTrigger&&(this._just_changed=!1,f.event.simulate("change",this,a,!0))});return!1}f.event.add(this,"beforeactivate._change",function(a){var b=a.target;z.test(b.nodeName)&&!b._change_attached&&(f.event.add(b,"change._change",function(a){this.parentNode&&!a.isSimulated&&!a.isTrigger&&f.event.simulate("change",this.parentNode,a,!0)}),b._change_attached=!0)})},handle:function(a){var b=a.target;if(this!==b||a.isSimulated||a.isTrigger||b.type!=="radio"&&b.type!=="checkbox")return a.handleObj.handler.apply(this,arguments)},teardown:function(){f.event.remove(this,"._change");return z.test(this.nodeName)}}),f.support.focusinBubbles||f.each({focus:"focusin",blur:"focusout"},function(a,b){var d=0,e=function(a){f.event.simulate(b,a.target,f.event.fix(a),!0)};f.event.special[b]={setup:function(){d++===0&&c.addEventListener(a,e,!0)},teardown:function(){--d===0&&c.removeEventListener(a,e,!0)}}}),f.fn.extend({on:function(a,c,d,e,g){var h,i;if(typeof a=="object"){typeof c!="string"&&(d=c,c=b);for(i in a)this.on(i,c,d,a[i],g);return this}d==null&&e==null?(e=c,d=c=b):e==null&&(typeof c=="string"?(e=d,d=b):(e=d,d=c,c=b));if(e===!1)e=J;else if(!e)return this;g===1&&(h=e,e=function(a){f().off(a);return h.apply(this,arguments)},e.guid=h.guid||(h.guid=f.guid++));return this.each(function(){f.event.add(this,a,e,d,c)})},one:function(a,b,c,d){return this.on.call(this,a,b,c,d,1)},off:function(a,c,d){if(a&&a.preventDefault&&a.handleObj){var e=a.handleObj;f(a.delegateTarget).off(e.namespace?e.type+"."+e.namespace:e.type,e.selector,e.handler);return this}if(typeof a=="object"){for(var g in a)this.off(g,c,a[g]);return this}if(c===!1||typeof c=="function")d=c,c=b;d===!1&&(d=J);return this.each(function(){f.event.remove(this,a,d,c)})},bind:function(a,b,c){return this.on(a,null,b,c)},unbind:function(a,b){return this.off(a,null,b)},live:function(a,b,c){f(this.context).on(a,this.selector,b,c);return this},die:function(a,b){f(this.context).off(a,this.selector||"**",b);return this},delegate:function(a,b,c,d){return this.on(b,a,c,d)},undelegate:function(a,b,c){return arguments.length==1?this.off(a,"**"):this.off(b,a,c)},trigger:function(a,b){return this.each(function(){f.event.trigger(a,b,this)})},triggerHandler:function(a,b){if(this[0])return f.event.trigger(a,b,this[0],!0)},toggle:function(a){var b=arguments,c=a.guid||f.guid++,d=0,e=function(c){var e=(f._data(this,"lastToggle"+a.guid)||0)%d;f._data(this,"lastToggle"+a.guid,e+1),c.preventDefault();return b[e].apply(this,arguments)||!1};e.guid=c;while(d<b.length)b[d++].guid=c;return this.click(e)},hover:function(a,b){return this.mouseenter(a).mouseleave(b||a)}}),f.each("blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error contextmenu".split(" "),function(a,b){f.fn[b]=function(a,c){c==null&&(c=a,a=null);return arguments.length>0?this.on(b,null,a,c):this.trigger(b)},f.attrFn&&(f.attrFn[b]=!0),C.test(b)&&(f.event.fixHooks[b]=f.event.keyHooks),D.test(b)&&(f.event.fixHooks[b]=f.event.mouseHooks)}),function(){function x(a,b,c,e,f,g){for(var h=0,i=e.length;h<i;h++){var j=e[h];if(j){var k=!1;j=j[a];while(j){if(j[d]===c){k=e[j.sizset];break}if(j.nodeType===1){g||(j[d]=c,j.sizset=h);if(typeof b!="string"){if(j===b){k=!0;break}}else if(m.filter(b,[j]).length>0){k=j;break}}j=j[a]}e[h]=k}}}function w(a,b,c,e,f,g){for(var h=0,i=e.length;h<i;h++){var j=e[h];if(j){var k=!1;j=j[a];while(j){if(j[d]===c){k=e[j.sizset];break}j.nodeType===1&&!g&&(j[d]=c,j.sizset=h);if(j.nodeName.toLowerCase()===b){k=j;break}j=j[a]}e[h]=k}}}var a=/((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^\[\]]*\]|['"][^'"]*['"]|[^\[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,d="sizcache"+(Math.random()+"").replace(".",""),e=0,g=Object.prototype.toString,h=!1,i=!0,j=/\\/g,k=/\r\n/g,l=/\W/;[0,0].sort(function(){i=!1;return 0});var m=function(b,d,e,f){e=e||[],d=d||c;var h=d;if(d.nodeType!==1&&d.nodeType!==9)return[];if(!b||typeof b!="string")return e;var i,j,k,l,n,q,r,t,u=!0,v=m.isXML(d),w=[],x=b;do{a.exec(""),i=a.exec(x);if(i){x=i[3],w.push(i[1]);if(i[2]){l=i[3];break}}}while(i);if(w.length>1&&p.exec(b))if(w.length===2&&o.relative[w[0]])j=y(w[0]+w[1],d,f);else{j=o.relative[w[0]]?[d]:m(w.shift(),d);while(w.length)b=w.shift(),o.relative[b]&&(b+=w.shift()),j=y(b,j,f)}else{!f&&w.length>1&&d.nodeType===9&&!v&&o.match.ID.test(w[0])&&!o.match.ID.test(w[w.length-1])&&(n=m.find(w.shift(),d,v),d=n.expr?m.filter(n.expr,n.set)[0]:n.set[0]);if(d){n=f?{expr:w.pop(),set:s(f)}:m.find(w.pop(),w.length===1&&(w[0]==="~"||w[0]==="+")&&d.parentNode?d.parentNode:d,v),j=n.expr?m.filter(n.expr,n.set):n.set,w.length>0?k=s(j):u=!1;while(w.length)q=w.pop(),r=q,o.relative[q]?r=w.pop():q="",r==null&&(r=d),o.relative[q](k,r,v)}else k=w=[]}k||(k=j),k||m.error(q||b);if(g.call(k)==="[object Array]")if(!u)e.push.apply(e,k);else if(d&&d.nodeType===1)for(t=0;k[t]!=null;t++)k[t]&&(k[t]===!0||k[t].nodeType===1&&m.contains(d,k[t]))&&e.push(j[t]);else for(t=0;k[t]!=null;t++)k[t]&&k[t].nodeType===1&&e.push(j[t]);else s(k,e);l&&(m(l,h,e,f),m.uniqueSort(e));return e};m.uniqueSort=function(a){if(u){h=i,a.sort(u);if(h)for(var b=1;b<a.length;b++)a[b]===a[b-1]&&a.splice(b--,1)}return a},m.matches=function(a,b){return m(a,null,null,b)},m.matchesSelector=function(a,b){return m(b,null,null,[a]).length>0},m.find=function(a,b,c){var d,e,f,g,h,i;if(!a)return[];for(e=0,f=o.order.length;e<f;e++){h=o.order[e];if(g=o.leftMatch[h].exec(a)){i=g[1],g.splice(1,1);if(i.substr(i.length-1)!=="\\"){g[1]=(g[1]||"").replace(j,""),d=o.find[h](g,b,c);if(d!=null){a=a.replace(o.match[h],"");break}}}}d||(d=typeof b.getElementsByTagName!="undefined"?b.getElementsByTagName("*"):[]);return{set:d,expr:a}},m.filter=function(a,c,d,e){var f,g,h,i,j,k,l,n,p,q=a,r=[],s=c,t=c&&c[0]&&m.isXML(c[0]);while(a&&c.length){for(h in o.filter)if((f=o.leftMatch[h].exec(a))!=null&&f[2]){k=o.filter[h],l=f[1],g=!1,f.splice(1,1);if(l.substr(l.length-1)==="\\")continue;s===r&&(r=[]);if(o.preFilter[h]){f=o.preFilter[h](f,s,d,r,e,t);if(!f)g=i=!0;else if(f===!0)continue}if(f)for(n=0;(j=s[n])!=null;n++)j&&(i=k(j,f,n,s),p=e^i,d&&i!=null?p?g=!0:s[n]=!1:p&&(r.push(j),g=!0));if(i!==b){d||(s=r),a=a.replace(o.match[h],"");if(!g)return[];break}}if(a===q)if(g==null)m.error(a);else break;q=a}return s},m.error=function(a){throw new Error("Syntax error, unrecognized expression: "+a)};var n=m.getText=function(a){var b,c,d=a.nodeType,e="";if(d){if(d===1||d===9){if(typeof a.textContent=="string")return a.textContent;if(typeof a.innerText=="string")return a.innerText.replace(k,"");for(a=a.firstChild;a;a=a.nextSibling)e+=n(a)}else if(d===3||d===4)return a.nodeValue}else for(b=0;c=a[b];b++)c.nodeType!==8&&(e+=n(c));return e},o=m.selectors={order:["ID","NAME","TAG"],match:{ID:/#((?:[\w\u00c0-\uFFFF\-]|\\.)+)/,CLASS:/\.((?:[\w\u00c0-\uFFFF\-]|\\.)+)/,NAME:/\[name=['"]*((?:[\w\u00c0-\uFFFF\-]|\\.)+)['"]*\]/,ATTR:/\[\s*((?:[\w\u00c0-\uFFFF\-]|\\.)+)\s*(?:(\S?=)\s*(?:(['"])(.*?)\3|(#?(?:[\w\u00c0-\uFFFF\-]|\\.)*)|)|)\s*\]/,TAG:/^((?:[\w\u00c0-\uFFFF\*\-]|\\.)+)/,CHILD:/:(only|nth|last|first)-child(?:\(\s*(even|odd|(?:[+\-]?\d+|(?:[+\-]?\d*)?n\s*(?:[+\-]\s*\d+)?))\s*\))?/,POS:/:(nth|eq|gt|lt|first|last|even|odd)(?:\((\d*)\))?(?=[^\-]|$)/,PSEUDO:/:((?:[\w\u00c0-\uFFFF\-]|\\.)+)(?:\((['"]?)((?:\([^\)]+\)|[^\(\)]*)+)\2\))?/},leftMatch:{},attrMap:{"class":"className","for":"htmlFor"},attrHandle:{href:function(a){return a.getAttribute("href")},type:function(a){return a.getAttribute("type")}},relative:{"+":function(a,b){var c=typeof b=="string",d=c&&!l.test(b),e=c&&!d;d&&(b=b.toLowerCase());for(var f=0,g=a.length,h;f<g;f++)if(h=a[f]){while((h=h.previousSibling)&&h.nodeType!==1);a[f]=e||h&&h.nodeName.toLowerCase()===b?h||!1:h===b}e&&m.filter(b,a,!0)},">":function(a,b){var c,d=typeof b=="string",e=0,f=a.length;if(d&&!l.test(b)){b=b.toLowerCase();for(;e<f;e++){c=a[e];if(c){var g=c.parentNode;a[e]=g.nodeName.toLowerCase()===b?g:!1}}}else{for(;e<f;e++)c=a[e],c&&(a[e]=d?c.parentNode:c.parentNode===b);d&&m.filter(b,a,!0)}},"":function(a,b,c){var d,f=e++,g=x;typeof b=="string"&&!l.test(b)&&(b=b.toLowerCase(),d=b,g=w),g("parentNode",b,f,a,d,c)},"~":function(a,b,c){var d,f=e++,g=x;typeof b=="string"&&!l.test(b)&&(b=b.toLowerCase(),d=b,g=w),g("previousSibling",b,f,a,d,c)}},find:{ID:function(a,b,c){if(typeof b.getElementById!="undefined"&&!c){var d=b.getElementById(a[1]);return d&&d.parentNode?[d]:[]}},NAME:function(a,b){if(typeof b.getElementsByName!="undefined"){var c=[],d=b.getElementsByName(a[1]);for(var e=0,f=d.length;e<f;e++)d[e].getAttribute("name")===a[1]&&c.push(d[e]);return c.length===0?null:c}},TAG:function(a,b){if(typeof b.getElementsByTagName!="undefined")return b.getElementsByTagName(a[1])}},preFilter:{CLASS:function(a,b,c,d,e,f){a=" "+a[1].replace(j,"")+" ";if(f)return a;for(var g=0,h;(h=b[g])!=null;g++)h&&(e^(h.className&&(" "+h.className+" ").replace(/[\t\n\r]/g," ").indexOf(a)>=0)?c||d.push(h):c&&(b[g]=!1));return!1},ID:function(a){return a[1].replace(j,"")},TAG:function(a,b){return a[1].replace(j,"").toLowerCase()},CHILD:function(a){if(a[1]==="nth"){a[2]||m.error(a[0]),a[2]=a[2].replace(/^\+|\s*/g,"");var b=/(-?)(\d*)(?:n([+\-]?\d*))?/.exec(a[2]==="even"&&"2n"||a[2]==="odd"&&"2n+1"||!/\D/.test(a[2])&&"0n+"+a[2]||a[2]);a[2]=b[1]+(b[2]||1)-0,a[3]=b[3]-0}else a[2]&&m.error(a[0]);a[0]=e++;return a},ATTR:function(a,b,c,d,e,f){var g=a[1]=a[1].replace(j,"");!f&&o.attrMap[g]&&(a[1]=o.attrMap[g]),a[4]=(a[4]||a[5]||"").replace(j,""),a[2]==="~="&&(a[4]=" "+a[4]+" ");return a},PSEUDO:function(b,c,d,e,f){if(b[1]==="not")if((a.exec(b[3])||"").length>1||/^\w/.test(b[3]))b[3]=m(b[3],null,null,c);else{var g=m.filter(b[3],c,d,!0^f);d||e.push.apply(e,g);return!1}else if(o.match.POS.test(b[0])||o.match.CHILD.test(b[0]))return!0;return b},POS:function(a){a.unshift(!0);return a}},filters:{enabled:function(a){return a.disabled===!1&&a.type!=="hidden"},disabled:function(a){return a.disabled===!0},checked:function(a){return a.checked===!0},selected:function(a){a.parentNode&&a.parentNode.selectedIndex;return a.selected===!0},parent:function(a){return!!a.firstChild},empty:function(a){return!a.firstChild},has:function(a,b,c){return!!m(c[3],a).length},header:function(a){return/h\d/i.test(a.nodeName)},text:function(a){var b=a.getAttribute("type"),c=a.type;return a.nodeName.toLowerCase()==="input"&&"text"===c&&(b===c||b===null)},radio:function(a){return a.nodeName.toLowerCase()==="input"&&"radio"===a.type},checkbox:function(a){return a.nodeName.toLowerCase()==="input"&&"checkbox"===a.type},file:function(a){return a.nodeName.toLowerCase()==="input"&&"file"===a.type},password:function(a){return a.nodeName.toLowerCase()==="input"&&"password"===a.type},submit:function(a){var b=a.nodeName.toLowerCase();return(b==="input"||b==="button")&&"submit"===a.type},image:function(a){return a.nodeName.toLowerCase()==="input"&&"image"===a.type},reset:function(a){var b=a.nodeName.toLowerCase();return(b==="input"||b==="button")&&"reset"===a.type},button:function(a){var b=a.nodeName.toLowerCase();return b==="input"&&"button"===a.type||b==="button"},input:function(a){return/input|select|textarea|button/i.test(a.nodeName)},focus:function(a){return a===a.ownerDocument.activeElement}},setFilters:{first:function(a,b){return b===0},last:function(a,b,c,d){return b===d.length-1},even:function(a,b){return b%2===0},odd:function(a,b){return b%2===1},lt:function(a,b,c){return b<c[3]-0},gt:function(a,b,c){return b>c[3]-0},nth:function(a,b,c){return c[3]-0===b},eq:function(a,b,c){return c[3]-0===b}},filter:{PSEUDO:function(a,b,c,d){var e=b[1],f=o.filters[e];if(f)return f(a,c,b,d);if(e==="contains")return(a.textContent||a.innerText||n([a])||"").indexOf(b[3])>=0;if(e==="not"){var g=b[3];for(var h=0,i=g.length;h<i;h++)if(g[h]===a)return!1;return!0}m.error(e)},CHILD:function(a,b){var c,e,f,g,h,i,j,k=b[1],l=a;switch(k){case"only":case"first":while(l=l.previousSibling)if(l.nodeType===1)return!1;if(k==="first")return!0;l=a;case"last":while(l=l.nextSibling)if(l.nodeType===1)return!1;return!0;case"nth":c=b[2],e=b[3];if(c===1&&e===0)return!0;f=b[0],g=a.parentNode;if(g&&(g[d]!==f||!a.nodeIndex)){i=0;for(l=g.firstChild;l;l=l.nextSibling)l.nodeType===1&&(l.nodeIndex=++i);g[d]=f}j=a.nodeIndex-e;return c===0?j===0:j%c===0&&j/c>=0}},ID:function(a,b){return a.nodeType===1&&a.getAttribute("id")===b},TAG:function(a,b){return b==="*"&&a.nodeType===1||!!a.nodeName&&a.nodeName.toLowerCase()===b},CLASS:function(a,b){return(" "+(a.className||a.getAttribute("class"))+" ").indexOf(b)>-1},ATTR:function(a,b){var c=b[1],d=m.attr?m.attr(a,c):o.attrHandle[c]?o.attrHandle[c](a):a[c]!=null?a[c]:a.getAttribute(c),e=d+"",f=b[2],g=b[4];return d==null?f==="!=":!f&&m.attr?d!=null:f==="="?e===g:f==="*="?e.indexOf(g)>=0:f==="~="?(" "+e+" ").indexOf(g)>=0:g?f==="!="?e!==g:f==="^="?e.indexOf(g)===0:f==="$="?e.substr(e.length-g.length)===g:f==="|="?e===g||e.substr(0,g.length+1)===g+"-":!1:e&&d!==!1},POS:function(a,b,c,d){var e=b[2],f=o.setFilters[e];if(f)return f(a,c,b,d)}}},p=o.match.POS,q=function(a,b){return"\\"+(b-0+1)};for(var r in o.match)o.match[r]=new RegExp(o.match[r].source+/(?![^\[]*\])(?![^\(]*\))/.source),o.leftMatch[r]=new RegExp(/(^(?:.|\r|\n)*?)/.source+o.match[r].source.replace(/\\(\d+)/g,q));var s=function(a,b){a=Array.prototype.slice.call(a,0);if(b){b.push.apply(b,a);return b}return a};try{Array.prototype.slice.call(c.documentElement.childNodes,0)[0].nodeType}catch(t){s=function(a,b){var c=0,d=b||[];if(g.call(a)==="[object Array]")Array.prototype.push.apply(d,a);else if(typeof a.length=="number")for(var e=a.length;c<e;c++)d.push(a[c]);else for(;a[c];c++)d.push(a[c]);return d}}var u,v;c.documentElement.compareDocumentPosition?u=function(a,b){if(a===b){h=!0;return 0}if(!a.compareDocumentPosition||!b.compareDocumentPosition)return a.compareDocumentPosition?-1:1;return a.compareDocumentPosition(b)&4?-1:1}:(u=function(a,b){if(a===b){h=!0;return 0}if(a.sourceIndex&&b.sourceIndex)return a.sourceIndex-b.sourceIndex;var c,d,e=[],f=[],g=a.parentNode,i=b.parentNode,j=g;if(g===i)return v(a,b);if(!g)return-1;if(!i)return 1;while(j)e.unshift(j),j=j.parentNode;j=i;while(j)f.unshift(j),j=j.parentNode;c=e.length,d=f.length;for(var k=0;k<c&&k<d;k++)if(e[k]!==f[k])return v(e[k],f[k]);return k===c?v(a,f[k],-1):v(e[k],b,1)},v=function(a,b,c){if(a===b)return c;var d=a.nextSibling;while(d){if(d===b)return-1;d=d.nextSibling}return 1}),function(){var a=c.createElement("div"),d="script"+(new Date).getTime(),e=c.documentElement;a.innerHTML="<a name='"+d+"'/>",e.insertBefore(a,e.firstChild),c.getElementById(d)&&(o.find.ID=function(a,c,d){if(typeof c.getElementById!="undefined"&&!d){var e=c.getElementById(a[1]);return e?e.id===a[1]||typeof e.getAttributeNode!="undefined"&&e.getAttributeNode("id").nodeValue===a[1]?[e]:b:[]}},o.filter.ID=function(a,b){var c=typeof a.getAttributeNode!="undefined"&&a.getAttributeNode("id");return a.nodeType===1&&c&&c.nodeValue===b}),e.removeChild(a),e=a=null}(),function(){var a=c.createElement("div");a.appendChild(c.createComment("")),a.getElementsByTagName("*").length>0&&(o.find.TAG=function(a,b){var c=b.getElementsByTagName(a[1]);if(a[1]==="*"){var d=[];for(var e=0;c[e];e++)c[e].nodeType===1&&d.push(c[e]);c=d}return c}),a.innerHTML="<a href='#'></a>",a.firstChild&&typeof a.firstChild.getAttribute!="undefined"&&a.firstChild.getAttribute("href")!=="#"&&(o.attrHandle.href=function(a){return a.getAttribute("href",2)}),a=null}(),c.querySelectorAll&&function(){var a=m,b=c.createElement("div"),d="__sizzle__";b.innerHTML="<p class='TEST'></p>";if(!b.querySelectorAll||b.querySelectorAll(".TEST").length!==0){m=function(b,e,f,g){e=e||c;if(!g&&!m.isXML(e)){var h=/^(\w+$)|^\.([\w\-]+$)|^#([\w\-]+$)/.exec(b);if(h&&(e.nodeType===1||e.nodeType===9)){if(h[1])return s(e.getElementsByTagName(b),f);if(h[2]&&o.find.CLASS&&e.getElementsByClassName)return s(e.getElementsByClassName(h[2]),f)}if(e.nodeType===9){if(b==="body"&&e.body)return s([e.body],f);if(h&&h[3]){var i=e.getElementById(h[3]);if(!i||!i.parentNode)return s([],f);if(i.id===h[3])return s([i],f)}try{return s(e.querySelectorAll(b),f)}catch(j){}}else if(e.nodeType===1&&e.nodeName.toLowerCase()!=="object"){var k=e,l=e.getAttribute("id"),n=l||d,p=e.parentNode,q=/^\s*[+~]/.test(b);l?n=n.replace(/'/g,"\\$&"):e.setAttribute("id",n),q&&p&&(e=e.parentNode);try{if(!q||p)return s(e.querySelectorAll("[id='"+n+"'] "+b),f)}catch(r){}finally{l||k.removeAttribute("id")}}}return a(b,e,f,g)};for(var e in a)m[e]=a[e];b=null}}(),function(){var a=c.documentElement,b=a.matchesSelector||a.mozMatchesSelector||a.webkitMatchesSelector||a.msMatchesSelector;if(b){var d=!b.call(c.createElement("div"),"div"),e=!1;try{b.call(c.documentElement,"[test!='']:sizzle")}catch(f){e=!0}m.matchesSelector=function(a,c){c=c.replace(/\=\s*([^'"\]]*)\s*\]/g,"='$1']");if(!m.isXML(a))try{if(e||!o.match.PSEUDO.test(c)&&!/!=/.test(c)){var f=b.call(a,c);if(f||!d||a.document&&a.document.nodeType!==11)return f}}catch(g){}return m(c,null,null,[a]).length>0}}}(),function(){var a=c.createElement("div");a.innerHTML="<div class='test e'></div><div class='test'></div>";if(!!a.getElementsByClassName&&a.getElementsByClassName("e").length!==0){a.lastChild.className="e";if(a.getElementsByClassName("e").length===1)return;o.order.splice(1,0,"CLASS"),o.find.CLASS=function(a,b,c){if(typeof b.getElementsByClassName!="undefined"&&!c)return b.getElementsByClassName(a[1])},a=null}}(),c.documentElement.contains?m.contains=function(a,b){return a!==b&&(a.contains?a.contains(b):!0)}:c.documentElement.compareDocumentPosition?m.contains=function(a,b){return!!(a.compareDocumentPosition(b)&16)}:m.contains=function(){return!1},m.isXML=function(a){var b=(a?a.ownerDocument||a:0).documentElement;return b?b.nodeName!=="HTML":!1};var y=function(a,b,c){var d,e=[],f="",g=b.nodeType?[b]:b;while(d=o.match.PSEUDO.exec(a))f+=d[0],a=a.replace(o.match.PSEUDO,"");a=o.relative[a]?a+"*":a;for(var h=0,i=g.length;h<i;h++)m(a,g[h],e,c);return m.filter(f,e)};m.attr=f.attr,m.selectors.attrMap={},f.find=m,f.expr=m.selectors,f.expr[":"]=f.expr.filters,f.unique=m.uniqueSort,f.text=m.getText,f.isXMLDoc=m.isXML,f.contains=m.contains}();var L=/Until$/,M=/^(?:parents|prevUntil|prevAll)/,N=/,/,O=/^.[^:#\[\.,]*$/,P=Array.prototype.slice,Q=f.expr.match.POS,R={children:!0,contents:!0,next:!0,prev:!0};f.fn.extend({find:function(a){var b=this,c,d;if(typeof a!="string")return f(a).filter(function(){for(c=0,d=b.length;c<d;c++)if(f.contains(b[c],this))return!0});var e=this.pushStack("","find",a),g,h,i;for(c=0,d=this.length;c<d;c++){g=e.length,f.find(a,this[c],e);if(c>0)for(h=g;h<e.length;h++)for(i=0;i<g;i++)if(e[i]===e[h]){e.splice(h--,1);break}}return e},has:function(a){var b=f(a);return this.filter(function(){for(var a=0,c=b.length;a<c;a++)if(f.contains(this,b[a]))return!0})},not:function(a){return this.pushStack(T(this,a,!1),"not",a)},filter:function(a){return this.pushStack(T(this,a,!0),"filter",a)},is:function(a){return!!a&&(typeof a=="string"?Q.test(a)?f(a,this.context).index(this[0])>=0:f.filter(a,this).length>0:this.filter(a).length>0)},closest:function(a,b){var c=[],d,e,g=this[0];if(f.isArray(a)){var h=1;while(g&&g.ownerDocument&&g!==b){for(d=0;d<a.length;d++)f(g).is(a[d])&&c.push({selector:a[d],elem:g,level:h});g=g.parentNode,h++}return c}var i=Q.test(a)||typeof a!="string"?f(a,b||this.context):0;for(d=0,e=this.length;d<e;d++){g=this[d];while(g){if(i?i.index(g)>-1:f.find.matchesSelector(g,a)){c.push(g);break}g=g.parentNode;if(!g||!g.ownerDocument||g===b||g.nodeType===11)break}}c=c.length>1?f.unique(c):c;return this.pushStack(c,"closest",a)},index:function(a){if(!a)return this[0]&&this[0].parentNode?this.prevAll().length:-1;if(typeof a=="string")return f.inArray(this[0],f(a));return f.inArray(a.jquery?a[0]:a,this)},add:function(a,b){var c=typeof a=="string"?f(a,b):f.makeArray(a&&a.nodeType?[a]:a),d=f.merge(this.get(),c);return this.pushStack(S(c[0])||S(d[0])?d:f.unique(d))},andSelf:function(){return this.add(this.prevObject)}}),f.each({parent:function(a){var b=a.parentNode;return b&&b.nodeType!==11?b:null},parents:function(a){return f.dir(a,"parentNode")},parentsUntil:function(a,b,c){return f.dir(a,"parentNode",c)},next:function(a){return f.nth(a,2,"nextSibling")},prev:function(a){return f.nth(a,2,"previousSibling")},nextAll:function(a){return f.dir(a,"nextSibling")},prevAll:function(a){return f.dir(a,"previousSibling")},nextUntil:function(a,b,c){return f.dir(a,"nextSibling",c)},prevUntil:function(a,b,c){return f.dir(a,"previousSibling",c)},siblings:function(a){return f.sibling(a.parentNode.firstChild,a)},children:function(a){return f.sibling(a.firstChild)},contents:function(a){return f.nodeName(a,"iframe")?a.contentDocument||a.contentWindow.document:f.makeArray(a.childNodes)}},function(a,b){f.fn[a]=function(c,d){var e=f.map(this,b,c);L.test(a)||(d=c),d&&typeof d=="string"&&(e=f.filter(d,e)),e=this.length>1&&!R[a]?f.unique(e):e,(this.length>1||N.test(d))&&M.test(a)&&(e=e.reverse());return this.pushStack(e,a,P.call(arguments).join(","))}}),f.extend({filter:function(a,b,c){c&&(a=":not("+a+")");return b.length===1?f.find.matchesSelector(b[0],a)?[b[0]]:[]:f.find.matches(a,b)},dir:function(a,c,d){var e=[],g=a[c];while(g&&g.nodeType!==9&&(d===b||g.nodeType!==1||!f(g).is(d)))g.nodeType===1&&e.push(g),g=g[c];return e},nth:function(a,b,c,d){b=b||1;var e=0;for(;a;a=a[c])if(a.nodeType===1&&++e===b)break;return a},sibling:function(a,b){var c=[];for(;a;a=a.nextSibling)a.nodeType===1&&a!==b&&c.push(a);return c}});var V="abbr|article|aside|audio|canvas|datalist|details|figcaption|figure|footer|header|hgroup|mark|meter|nav|output|progress|section|summary|time|video",W=/ jQuery\d+="(?:\d+|null)"/g,X=/^\s+/,Y=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/ig,Z=/<([\w:]+)/,$=/<tbody/i,_=/<|&#?\w+;/,ba=/<(?:script|style)/i,bb=/<(?:script|object|embed|option|style)/i,bc=new RegExp("<(?:"+V+")","i"),bd=/checked\s*(?:[^=]|=\s*.checked.)/i,be=/\/(java|ecma)script/i,bf=/^\s*<!(?:\[CDATA\[|\-\-)/,bg={option:[1,"<select multiple='multiple'>","</select>"],legend:[1,"<fieldset>","</fieldset>"],thead:[1,"<table>","</table>"],tr:[2,"<table><tbody>","</tbody></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],col:[2,"<table><tbody></tbody><colgroup>","</colgroup></table>"],area:[1,"<map>","</map>"],_default:[0,"",""]},bh=U(c);bg.optgroup=bg.option,bg.tbody=bg.tfoot=bg.colgroup=bg.caption=bg.thead,bg.th=bg.td,f.support.htmlSerialize||(bg._default=[1,"div<div>","</div>"]),f.fn.extend({text:function(a){if(f.isFunction(a))return this.each(function(b){var c=f(this);c.text(a.call(this,b,c.text()))});if(typeof a!="object"&&a!==b)return this.empty().append((this[0]&&this[0].ownerDocument||c).createTextNode(a));return f.text(this)},wrapAll:function(a){if(f.isFunction(a))return this.each(function(b){f(this).wrapAll(a.call(this,b))});if(this[0]){var b=f(a,this[0].ownerDocument).eq(0).clone(!0);this[0].parentNode&&b.insertBefore(this[0]),b.map(function(){var a=this;while(a.firstChild&&a.firstChild.nodeType===1)a=a.firstChild;return a}).append(this)}return this},wrapInner:function(a){if(f.isFunction(a))return this.each(function(b){f(this).wrapInner(a.call(this,b))});return this.each(function(){var b=f(this),c=b.contents();c.length?c.wrapAll(a):b.append(a)})},wrap:function(a){var b=f.isFunction(a);return this.each(function(c){f(this).wrapAll(b?a.call(this,c):a)})},unwrap:function(){return this.parent().each(function(){f.nodeName(this,"body")||f(this).replaceWith(this.childNodes)}).end()},append:function(){return this.domManip(arguments,!0,function(a){this.nodeType===1&&this.appendChild(a)})},prepend:function(){return this.domManip(arguments,!0,function(a){this.nodeType===1&&this.insertBefore(a,this.firstChild)})},before:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this)});if(arguments.length){var a=f.clean(arguments);a.push.apply(a,this.toArray());return this.pushStack(a,"before",arguments)}},after:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this.nextSibling)});if(arguments.length){var a=this.pushStack(this,"after",arguments);a.push.apply(a,f.clean(arguments));return a}},remove:function(a,b){for(var c=0,d;(d=this[c])!=null;c++)if(!a||f.filter(a,[d]).length)!b&&d.nodeType===1&&(f.cleanData(d.getElementsByTagName("*")),f.cleanData([d])),d.parentNode&&d.parentNode.removeChild(d);return this},empty:function()
-{for(var a=0,b;(b=this[a])!=null;a++){b.nodeType===1&&f.cleanData(b.getElementsByTagName("*"));while(b.firstChild)b.removeChild(b.firstChild)}return this},clone:function(a,b){a=a==null?!1:a,b=b==null?a:b;return this.map(function(){return f.clone(this,a,b)})},html:function(a){if(a===b)return this[0]&&this[0].nodeType===1?this[0].innerHTML.replace(W,""):null;if(typeof a=="string"&&!ba.test(a)&&(f.support.leadingWhitespace||!X.test(a))&&!bg[(Z.exec(a)||["",""])[1].toLowerCase()]){a=a.replace(Y,"<$1></$2>");try{for(var c=0,d=this.length;c<d;c++)this[c].nodeType===1&&(f.cleanData(this[c].getElementsByTagName("*")),this[c].innerHTML=a)}catch(e){this.empty().append(a)}}else f.isFunction(a)?this.each(function(b){var c=f(this);c.html(a.call(this,b,c.html()))}):this.empty().append(a);return this},replaceWith:function(a){if(this[0]&&this[0].parentNode){if(f.isFunction(a))return this.each(function(b){var c=f(this),d=c.html();c.replaceWith(a.call(this,b,d))});typeof a!="string"&&(a=f(a).detach());return this.each(function(){var b=this.nextSibling,c=this.parentNode;f(this).remove(),b?f(b).before(a):f(c).append(a)})}return this.length?this.pushStack(f(f.isFunction(a)?a():a),"replaceWith",a):this},detach:function(a){return this.remove(a,!0)},domManip:function(a,c,d){var e,g,h,i,j=a[0],k=[];if(!f.support.checkClone&&arguments.length===3&&typeof j=="string"&&bd.test(j))return this.each(function(){f(this).domManip(a,c,d,!0)});if(f.isFunction(j))return this.each(function(e){var g=f(this);a[0]=j.call(this,e,c?g.html():b),g.domManip(a,c,d)});if(this[0]){i=j&&j.parentNode,f.support.parentNode&&i&&i.nodeType===11&&i.childNodes.length===this.length?e={fragment:i}:e=f.buildFragment(a,this,k),h=e.fragment,h.childNodes.length===1?g=h=h.firstChild:g=h.firstChild;if(g){c=c&&f.nodeName(g,"tr");for(var l=0,m=this.length,n=m-1;l<m;l++)d.call(c?bi(this[l],g):this[l],e.cacheable||m>1&&l<n?f.clone(h,!0,!0):h)}k.length&&f.each(k,bp)}return this}}),f.buildFragment=function(a,b,d){var e,g,h,i,j=a[0];b&&b[0]&&(i=b[0].ownerDocument||b[0]),i.createDocumentFragment||(i=c),a.length===1&&typeof j=="string"&&j.length<512&&i===c&&j.charAt(0)==="<"&&!bb.test(j)&&(f.support.checkClone||!bd.test(j))&&(f.support.html5Clone||!bc.test(j))&&(g=!0,h=f.fragments[j],h&&h!==1&&(e=h)),e||(e=i.createDocumentFragment(),f.clean(a,i,e,d)),g&&(f.fragments[j]=h?e:1);return{fragment:e,cacheable:g}},f.fragments={},f.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){f.fn[a]=function(c){var d=[],e=f(c),g=this.length===1&&this[0].parentNode;if(g&&g.nodeType===11&&g.childNodes.length===1&&e.length===1){e[b](this[0]);return this}for(var h=0,i=e.length;h<i;h++){var j=(h>0?this.clone(!0):this).get();f(e[h])[b](j),d=d.concat(j)}return this.pushStack(d,a,e.selector)}}),f.extend({clone:function(a,b,c){var d,e,g,h=f.support.html5Clone||!bc.test("<"+a.nodeName)?a.cloneNode(!0):bo(a);if((!f.support.noCloneEvent||!f.support.noCloneChecked)&&(a.nodeType===1||a.nodeType===11)&&!f.isXMLDoc(a)){bk(a,h),d=bl(a),e=bl(h);for(g=0;d[g];++g)e[g]&&bk(d[g],e[g])}if(b){bj(a,h);if(c){d=bl(a),e=bl(h);for(g=0;d[g];++g)bj(d[g],e[g])}}d=e=null;return h},clean:function(a,b,d,e){var g;b=b||c,typeof b.createElement=="undefined"&&(b=b.ownerDocument||b[0]&&b[0].ownerDocument||c);var h=[],i;for(var j=0,k;(k=a[j])!=null;j++){typeof k=="number"&&(k+="");if(!k)continue;if(typeof k=="string")if(!_.test(k))k=b.createTextNode(k);else{k=k.replace(Y,"<$1></$2>");var l=(Z.exec(k)||["",""])[1].toLowerCase(),m=bg[l]||bg._default,n=m[0],o=b.createElement("div");b===c?bh.appendChild(o):U(b).appendChild(o),o.innerHTML=m[1]+k+m[2];while(n--)o=o.lastChild;if(!f.support.tbody){var p=$.test(k),q=l==="table"&&!p?o.firstChild&&o.firstChild.childNodes:m[1]==="<table>"&&!p?o.childNodes:[];for(i=q.length-1;i>=0;--i)f.nodeName(q[i],"tbody")&&!q[i].childNodes.length&&q[i].parentNode.removeChild(q[i])}!f.support.leadingWhitespace&&X.test(k)&&o.insertBefore(b.createTextNode(X.exec(k)[0]),o.firstChild),k=o.childNodes}var r;if(!f.support.appendChecked)if(k[0]&&typeof (r=k.length)=="number")for(i=0;i<r;i++)bn(k[i]);else bn(k);k.nodeType?h.push(k):h=f.merge(h,k)}if(d){g=function(a){return!a.type||be.test(a.type)};for(j=0;h[j];j++)if(e&&f.nodeName(h[j],"script")&&(!h[j].type||h[j].type.toLowerCase()==="text/javascript"))e.push(h[j].parentNode?h[j].parentNode.removeChild(h[j]):h[j]);else{if(h[j].nodeType===1){var s=f.grep(h[j].getElementsByTagName("script"),g);h.splice.apply(h,[j+1,0].concat(s))}d.appendChild(h[j])}}return h},cleanData:function(a){var b,c,d=f.cache,e=f.event.special,g=f.support.deleteExpando;for(var h=0,i;(i=a[h])!=null;h++){if(i.nodeName&&f.noData[i.nodeName.toLowerCase()])continue;c=i[f.expando];if(c){b=d[c];if(b&&b.events){for(var j in b.events)e[j]?f.event.remove(i,j):f.removeEvent(i,j,b.handle);b.handle&&(b.handle.elem=null)}g?delete i[f.expando]:i.removeAttribute&&i.removeAttribute(f.expando),delete d[c]}}}});var bq=/alpha\([^)]*\)/i,br=/opacity=([^)]*)/,bs=/([A-Z]|^ms)/g,bt=/^-?\d+(?:px)?$/i,bu=/^-?\d/,bv=/^([\-+])=([\-+.\de]+)/,bw={position:"absolute",visibility:"hidden",display:"block"},bx=["Left","Right"],by=["Top","Bottom"],bz,bA,bB;f.fn.css=function(a,c){if(arguments.length===2&&c===b)return this;return f.access(this,a,c,!0,function(a,c,d){return d!==b?f.style(a,c,d):f.css(a,c)})},f.extend({cssHooks:{opacity:{get:function(a,b){if(b){var c=bz(a,"opacity","opacity");return c===""?"1":c}return a.style.opacity}}},cssNumber:{fillOpacity:!0,fontWeight:!0,lineHeight:!0,opacity:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{"float":f.support.cssFloat?"cssFloat":"styleFloat"},style:function(a,c,d,e){if(!!a&&a.nodeType!==3&&a.nodeType!==8&&!!a.style){var g,h,i=f.camelCase(c),j=a.style,k=f.cssHooks[i];c=f.cssProps[i]||i;if(d===b){if(k&&"get"in k&&(g=k.get(a,!1,e))!==b)return g;return j[c]}h=typeof d,h==="string"&&(g=bv.exec(d))&&(d=+(g[1]+1)*+g[2]+parseFloat(f.css(a,c)),h="number");if(d==null||h==="number"&&isNaN(d))return;h==="number"&&!f.cssNumber[i]&&(d+="px");if(!k||!("set"in k)||(d=k.set(a,d))!==b)try{j[c]=d}catch(l){}}},css:function(a,c,d){var e,g;c=f.camelCase(c),g=f.cssHooks[c],c=f.cssProps[c]||c,c==="cssFloat"&&(c="float");if(g&&"get"in g&&(e=g.get(a,!0,d))!==b)return e;if(bz)return bz(a,c)},swap:function(a,b,c){var d={};for(var e in b)d[e]=a.style[e],a.style[e]=b[e];c.call(a);for(e in b)a.style[e]=d[e]}}),f.curCSS=f.css,f.each(["height","width"],function(a,b){f.cssHooks[b]={get:function(a,c,d){var e;if(c){if(a.offsetWidth!==0)return bC(a,b,d);f.swap(a,bw,function(){e=bC(a,b,d)});return e}},set:function(a,b){if(!bt.test(b))return b;b=parseFloat(b);if(b>=0)return b+"px"}}}),f.support.opacity||(f.cssHooks.opacity={get:function(a,b){return br.test((b&&a.currentStyle?a.currentStyle.filter:a.style.filter)||"")?parseFloat(RegExp.$1)/100+"":b?"1":""},set:function(a,b){var c=a.style,d=a.currentStyle,e=f.isNumeric(b)?"alpha(opacity="+b*100+")":"",g=d&&d.filter||c.filter||"";c.zoom=1;if(b>=1&&f.trim(g.replace(bq,""))===""){c.removeAttribute("filter");if(d&&!d.filter)return}c.filter=bq.test(g)?g.replace(bq,e):g+" "+e}}),f(function(){f.support.reliableMarginRight||(f.cssHooks.marginRight={get:function(a,b){var c;f.swap(a,{display:"inline-block"},function(){b?c=bz(a,"margin-right","marginRight"):c=a.style.marginRight});return c}})}),c.defaultView&&c.defaultView.getComputedStyle&&(bA=function(a,b){var c,d,e;b=b.replace(bs,"-$1").toLowerCase(),(d=a.ownerDocument.defaultView)&&(e=d.getComputedStyle(a,null))&&(c=e.getPropertyValue(b),c===""&&!f.contains(a.ownerDocument.documentElement,a)&&(c=f.style(a,b)));return c}),c.documentElement.currentStyle&&(bB=function(a,b){var c,d,e,f=a.currentStyle&&a.currentStyle[b],g=a.style;f===null&&g&&(e=g[b])&&(f=e),!bt.test(f)&&bu.test(f)&&(c=g.left,d=a.runtimeStyle&&a.runtimeStyle.left,d&&(a.runtimeStyle.left=a.currentStyle.left),g.left=b==="fontSize"?"1em":f||0,f=g.pixelLeft+"px",g.left=c,d&&(a.runtimeStyle.left=d));return f===""?"auto":f}),bz=bA||bB,f.expr&&f.expr.filters&&(f.expr.filters.hidden=function(a){var b=a.offsetWidth,c=a.offsetHeight;return b===0&&c===0||!f.support.reliableHiddenOffsets&&(a.style&&a.style.display||f.css(a,"display"))==="none"},f.expr.filters.visible=function(a){return!f.expr.filters.hidden(a)});var bD=/%20/g,bE=/\[\]$/,bF=/\r?\n/g,bG=/#.*$/,bH=/^(.*?):[ \t]*([^\r\n]*)\r?$/mg,bI=/^(?:color|date|datetime|datetime-local|email|hidden|month|number|password|range|search|tel|text|time|url|week)$/i,bJ=/^(?:about|app|app\-storage|.+\-extension|file|res|widget):$/,bK=/^(?:GET|HEAD)$/,bL=/^\/\//,bM=/\?/,bN=/<script\b[^<]*(?:(?!<\/script>)<[^<]*)*<\/script>/gi,bO=/^(?:select|textarea)/i,bP=/\s+/,bQ=/([?&])_=[^&]*/,bR=/^([\w\+\.\-]+:)(?:\/\/([^\/?#:]*)(?::(\d+))?)?/,bS=f.fn.load,bT={},bU={},bV,bW,bX=["*/"]+["*"];try{bV=e.href}catch(bY){bV=c.createElement("a"),bV.href="",bV=bV.href}bW=bR.exec(bV.toLowerCase())||[],f.fn.extend({load:function(a,c,d){if(typeof a!="string"&&bS)return bS.apply(this,arguments);if(!this.length)return this;var e=a.indexOf(" ");if(e>=0){var g=a.slice(e,a.length);a=a.slice(0,e)}var h="GET";c&&(f.isFunction(c)?(d=c,c=b):typeof c=="object"&&(c=f.param(c,f.ajaxSettings.traditional),h="POST"));var i=this;f.ajax({url:a,type:h,dataType:"html",data:c,complete:function(a,b,c){c=a.responseText,a.isResolved()&&(a.done(function(a){c=a}),i.html(g?f("<div>").append(c.replace(bN,"")).find(g):c)),d&&i.each(d,[c,b,a])}});return this},serialize:function(){return f.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?f.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||bO.test(this.nodeName)||bI.test(this.type))}).map(function(a,b){var c=f(this).val();return c==null?null:f.isArray(c)?f.map(c,function(a,c){return{name:b.name,value:a.replace(bF,"\r\n")}}):{name:b.name,value:c.replace(bF,"\r\n")}}).get()}}),f.each("ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "),function(a,b){f.fn[b]=function(a){return this.on(b,a)}}),f.each(["get","post"],function(a,c){f[c]=function(a,d,e,g){f.isFunction(d)&&(g=g||e,e=d,d=b);return f.ajax({type:c,url:a,data:d,success:e,dataType:g})}}),f.extend({getScript:function(a,c){return f.get(a,b,c,"script")},getJSON:function(a,b,c){return f.get(a,b,c,"json")},ajaxSetup:function(a,b){b?b_(a,f.ajaxSettings):(b=a,a=f.ajaxSettings),b_(a,b);return a},ajaxSettings:{url:bV,isLocal:bJ.test(bW[1]),global:!0,type:"GET",contentType:"application/x-www-form-urlencoded",processData:!0,async:!0,accepts:{xml:"application/xml, text/xml",html:"text/html",text:"text/plain",json:"application/json, text/javascript","*":bX},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText"},converters:{"* text":a.String,"text html":!0,"text json":f.parseJSON,"text xml":f.parseXML},flatOptions:{context:!0,url:!0}},ajaxPrefilter:bZ(bT),ajaxTransport:bZ(bU),ajax:function(a,c){function w(a,c,l,m){if(s!==2){s=2,q&&clearTimeout(q),p=b,n=m||"",v.readyState=a>0?4:0;var o,r,u,w=c,x=l?cb(d,v,l):b,y,z;if(a>=200&&a<300||a===304){if(d.ifModified){if(y=v.getResponseHeader("Last-Modified"))f.lastModified[k]=y;if(z=v.getResponseHeader("Etag"))f.etag[k]=z}if(a===304)w="notmodified",o=!0;else try{r=cc(d,x),w="success",o=!0}catch(A){w="parsererror",u=A}}else{u=w;if(!w||a)w="error",a<0&&(a=0)}v.status=a,v.statusText=""+(c||w),o?h.resolveWith(e,[r,w,v]):h.rejectWith(e,[v,w,u]),v.statusCode(j),j=b,t&&g.trigger("ajax"+(o?"Success":"Error"),[v,d,o?r:u]),i.fireWith(e,[v,w]),t&&(g.trigger("ajaxComplete",[v,d]),--f.active||f.event.trigger("ajaxStop"))}}typeof a=="object"&&(c=a,a=b),c=c||{};var d=f.ajaxSetup({},c),e=d.context||d,g=e!==d&&(e.nodeType||e instanceof f)?f(e):f.event,h=f.Deferred(),i=f.Callbacks("once memory"),j=d.statusCode||{},k,l={},m={},n,o,p,q,r,s=0,t,u,v={readyState:0,setRequestHeader:function(a,b){if(!s){var c=a.toLowerCase();a=m[c]=m[c]||a,l[a]=b}return this},getAllResponseHeaders:function(){return s===2?n:null},getResponseHeader:function(a){var c;if(s===2){if(!o){o={};while(c=bH.exec(n))o[c[1].toLowerCase()]=c[2]}c=o[a.toLowerCase()]}return c===b?null:c},overrideMimeType:function(a){s||(d.mimeType=a);return this},abort:function(a){a=a||"abort",p&&p.abort(a),w(0,a);return this}};h.promise(v),v.success=v.done,v.error=v.fail,v.complete=i.add,v.statusCode=function(a){if(a){var b;if(s<2)for(b in a)j[b]=[j[b],a[b]];else b=a[v.status],v.then(b,b)}return this},d.url=((a||d.url)+"").replace(bG,"").replace(bL,bW[1]+"//"),d.dataTypes=f.trim(d.dataType||"*").toLowerCase().split(bP),d.crossDomain==null&&(r=bR.exec(d.url.toLowerCase()),d.crossDomain=!(!r||r[1]==bW[1]&&r[2]==bW[2]&&(r[3]||(r[1]==="http:"?80:443))==(bW[3]||(bW[1]==="http:"?80:443)))),d.data&&d.processData&&typeof d.data!="string"&&(d.data=f.param(d.data,d.traditional)),b$(bT,d,c,v);if(s===2)return!1;t=d.global,d.type=d.type.toUpperCase(),d.hasContent=!bK.test(d.type),t&&f.active++===0&&f.event.trigger("ajaxStart");if(!d.hasContent){d.data&&(d.url+=(bM.test(d.url)?"&":"?")+d.data,delete d.data),k=d.url;if(d.cache===!1){var x=f.now(),y=d.url.replace(bQ,"$1_="+x);d.url=y+(y===d.url?(bM.test(d.url)?"&":"?")+"_="+x:"")}}(d.data&&d.hasContent&&d.contentType!==!1||c.contentType)&&v.setRequestHeader("Content-Type",d.contentType),d.ifModified&&(k=k||d.url,f.lastModified[k]&&v.setRequestHeader("If-Modified-Since",f.lastModified[k]),f.etag[k]&&v.setRequestHeader("If-None-Match",f.etag[k])),v.setRequestHeader("Accept",d.dataTypes[0]&&d.accepts[d.dataTypes[0]]?d.accepts[d.dataTypes[0]]+(d.dataTypes[0]!=="*"?", "+bX+"; q=0.01":""):d.accepts["*"]);for(u in d.headers)v.setRequestHeader(u,d.headers[u]);if(d.beforeSend&&(d.beforeSend.call(e,v,d)===!1||s===2)){v.abort();return!1}for(u in{success:1,error:1,complete:1})v[u](d[u]);p=b$(bU,d,c,v);if(!p)w(-1,"No Transport");else{v.readyState=1,t&&g.trigger("ajaxSend",[v,d]),d.async&&d.timeout>0&&(q=setTimeout(function(){v.abort("timeout")},d.timeout));try{s=1,p.send(l,w)}catch(z){if(s<2)w(-1,z);else throw z}}return v},param:function(a,c){var d=[],e=function(a,b){b=f.isFunction(b)?b():b,d[d.length]=encodeURIComponent(a)+"="+encodeURIComponent(b)};c===b&&(c=f.ajaxSettings.traditional);if(f.isArray(a)||a.jquery&&!f.isPlainObject(a))f.each(a,function(){e(this.name,this.value)});else for(var g in a)ca(g,a[g],c,e);return d.join("&").replace(bD,"+")}}),f.extend({active:0,lastModified:{},etag:{}});var cd=f.now(),ce=/(\=)\?(&|$)|\?\?/i;f.ajaxSetup({jsonp:"callback",jsonpCallback:function(){return f.expando+"_"+cd++}}),f.ajaxPrefilter("json jsonp",function(b,c,d){var e=b.contentType==="application/x-www-form-urlencoded"&&typeof b.data=="string";if(b.dataTypes[0]==="jsonp"||b.jsonp!==!1&&(ce.test(b.url)||e&&ce.test(b.data))){var g,h=b.jsonpCallback=f.isFunction(b.jsonpCallback)?b.jsonpCallback():b.jsonpCallback,i=a[h],j=b.url,k=b.data,l="$1"+h+"$2";b.jsonp!==!1&&(j=j.replace(ce,l),b.url===j&&(e&&(k=k.replace(ce,l)),b.data===k&&(j+=(/\?/.test(j)?"&":"?")+b.jsonp+"="+h))),b.url=j,b.data=k,a[h]=function(a){g=[a]},d.always(function(){a[h]=i,g&&f.isFunction(i)&&a[h](g[0])}),b.converters["script json"]=function(){g||f.error(h+" was not called");return g[0]},b.dataTypes[0]="json";return"script"}}),f.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/javascript|ecmascript/},converters:{"text script":function(a){f.globalEval(a);return a}}}),f.ajaxPrefilter("script",function(a){a.cache===b&&(a.cache=!1),a.crossDomain&&(a.type="GET",a.global=!1)}),f.ajaxTransport("script",function(a){if(a.crossDomain){var d,e=c.head||c.getElementsByTagName("head")[0]||c.documentElement;return{send:function(f,g){d=c.createElement("script"),d.async="async",a.scriptCharset&&(d.charset=a.scriptCharset),d.src=a.url,d.onload=d.onreadystatechange=function(a,c){if(c||!d.readyState||/loaded|complete/.test(d.readyState))d.onload=d.onreadystatechange=null,e&&d.parentNode&&e.removeChild(d),d=b,c||g(200,"success")},e.insertBefore(d,e.firstChild)},abort:function(){d&&d.onload(0,1)}}}});var cf=a.ActiveXObject?function(){for(var a in ch)ch[a](0,1)}:!1,cg=0,ch;f.ajaxSettings.xhr=a.ActiveXObject?function(){return!this.isLocal&&ci()||cj()}:ci,function(a){f.extend(f.support,{ajax:!!a,cors:!!a&&"withCredentials"in a})}(f.ajaxSettings.xhr()),f.support.ajax&&f.ajaxTransport(function(c){if(!c.crossDomain||f.support.cors){var d;return{send:function(e,g){var h=c.xhr(),i,j;c.username?h.open(c.type,c.url,c.async,c.username,c.password):h.open(c.type,c.url,c.async);if(c.xhrFields)for(j in c.xhrFields)h[j]=c.xhrFields[j];c.mimeType&&h.overrideMimeType&&h.overrideMimeType(c.mimeType),!c.crossDomain&&!e["X-Requested-With"]&&(e["X-Requested-With"]="XMLHttpRequest");try{for(j in e)h.setRequestHeader(j,e[j])}catch(k){}h.send(c.hasContent&&c.data||null),d=function(a,e){var j,k,l,m,n;try{if(d&&(e||h.readyState===4)){d=b,i&&(h.onreadystatechange=f.noop,cf&&delete ch[i]);if(e)h.readyState!==4&&h.abort();else{j=h.status,l=h.getAllResponseHeaders(),m={},n=h.responseXML,n&&n.documentElement&&(m.xml=n),m.text=h.responseText;try{k=h.statusText}catch(o){k=""}!j&&c.isLocal&&!c.crossDomain?j=m.text?200:404:j===1223&&(j=204)}}}catch(p){e||g(-1,p)}m&&g(j,k,m,l)},!c.async||h.readyState===4?d():(i=++cg,cf&&(ch||(ch={},f(a).unload(cf)),ch[i]=d),h.onreadystatechange=d)},abort:function(){d&&d(0,1)}}}});var ck={},cl,cm,cn=/^(?:toggle|show|hide)$/,co=/^([+\-]=)?([\d+.\-]+)([a-z%]*)$/i,cp,cq=[["height","marginTop","marginBottom","paddingTop","paddingBottom"],["width","marginLeft","marginRight","paddingLeft","paddingRight"],["opacity"]],cr;f.fn.extend({show:function(a,b,c){var d,e;if(a||a===0)return this.animate(cu("show",3),a,b,c);for(var g=0,h=this.length;g<h;g++)d=this[g],d.style&&(e=d.style.display,!f._data(d,"olddisplay")&&e==="none"&&(e=d.style.display=""),e===""&&f.css(d,"display")==="none"&&f._data(d,"olddisplay",cv(d.nodeName)));for(g=0;g<h;g++){d=this[g];if(d.style){e=d.style.display;if(e===""||e==="none")d.style.display=f._data(d,"olddisplay")||""}}return this},hide:function(a,b,c){if(a||a===0)return this.animate(cu("hide",3),a,b,c);var d,e,g=0,h=this.length;for(;g<h;g++)d=this[g],d.style&&(e=f.css(d,"display"),e!=="none"&&!f._data(d,"olddisplay")&&f._data(d,"olddisplay",e));for(g=0;g<h;g++)this[g].style&&(this[g].style.display="none");return this},_toggle:f.fn.toggle,toggle:function(a,b,c){var d=typeof a=="boolean";f.isFunction(a)&&f.isFunction(b)?this._toggle.apply(this,arguments):a==null||d?this.each(function(){var b=d?a:f(this).is(":hidden");f(this)[b?"show":"hide"]()}):this.animate(cu("toggle",3),a,b,c);return this},fadeTo:function(a,b,c,d){return this.filter(":hidden").css("opacity",0).show().end().animate({opacity:b},a,c,d)},animate:function(a,b,c,d){function g(){e.queue===!1&&f._mark(this);var b=f.extend({},e),c=this.nodeType===1,d=c&&f(this).is(":hidden"),g,h,i,j,k,l,m,n,o;b.animatedProperties={};for(i in a){g=f.camelCase(i),i!==g&&(a[g]=a[i],delete a[i]),h=a[g],f.isArray(h)?(b.animatedProperties[g]=h[1],h=a[g]=h[0]):b.animatedProperties[g]=b.specialEasing&&b.specialEasing[g]||b.easing||"swing";if(h==="hide"&&d||h==="show"&&!d)return b.complete.call(this);c&&(g==="height"||g==="width")&&(b.overflow=[this.style.overflow,this.style.overflowX,this.style.overflowY],f.css(this,"display")==="inline"&&f.css(this,"float")==="none"&&(!f.support.inlineBlockNeedsLayout||cv(this.nodeName)==="inline"?this.style.display="inline-block":this.style.zoom=1))}b.overflow!=null&&(this.style.overflow="hidden");for(i in a)j=new f.fx(this,b,i),h=a[i],cn.test(h)?(o=f._data(this,"toggle"+i)||(h==="toggle"?d?"show":"hide":0),o?(f._data(this,"toggle"+i,o==="show"?"hide":"show"),j[o]()):j[h]()):(k=co.exec(h),l=j.cur(),k?(m=parseFloat(k[2]),n=k[3]||(f.cssNumber[i]?"":"px"),n!=="px"&&(f.style(this,i,(m||1)+n),l=(m||1)/j.cur()*l,f.style(this,i,l+n)),k[1]&&(m=(k[1]==="-="?-1:1)*m+l),j.custom(l,m,n)):j.custom(l,h,""));return!0}var e=f.speed(b,c,d);if(f.isEmptyObject(a))return this.each(e.complete,[!1]);a=f.extend({},a);return e.queue===!1?this.each(g):this.queue(e.queue,g)},stop:function(a,c,d){typeof a!="string"&&(d=c,c=a,a=b),c&&a!==!1&&this.queue(a||"fx",[]);return this.each(function(){function h(a,b,c){var e=b[c];f.removeData(a,c,!0),e.stop(d)}var b,c=!1,e=f.timers,g=f._data(this);d||f._unmark(!0,this);if(a==null)for(b in g)g[b]&&g[b].stop&&b.indexOf(".run")===b.length-4&&h(this,g,b);else g[b=a+".run"]&&g[b].stop&&h(this,g,b);for(b=e.length;b--;)e[b].elem===this&&(a==null||e[b].queue===a)&&(d?e[b](!0):e[b].saveState(),c=!0,e.splice(b,1));(!d||!c)&&f.dequeue(this,a)})}}),f.each({slideDown:cu("show",1),slideUp:cu("hide",1),slideToggle:cu("toggle",1),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(a,b){f.fn[a]=function(a,c,d){return this.animate(b,a,c,d)}}),f.extend({speed:function(a,b,c){var d=a&&typeof a=="object"?f.extend({},a):{complete:c||!c&&b||f.isFunction(a)&&a,duration:a,easing:c&&b||b&&!f.isFunction(b)&&b};d.duration=f.fx.off?0:typeof d.duration=="number"?d.duration:d.duration in f.fx.speeds?f.fx.speeds[d.duration]:f.fx.speeds._default;if(d.queue==null||d.queue===!0)d.queue="fx";d.old=d.complete,d.complete=function(a){f.isFunction(d.old)&&d.old.call(this),d.queue?f.dequeue(this,d.queue):a!==!1&&f._unmark(this)};return d},easing:{linear:function(a,b,c,d){return c+d*a},swing:function(a,b,c,d){return(-Math.cos(a*Math.PI)/2+.5)*d+c}},timers:[],fx:function(a,b,c){this.options=b,this.elem=a,this.prop=c,b.orig=b.orig||{}}}),f.fx.prototype={update:function(){this.options.step&&this.options.step.call(this.elem,this.now,this),(f.fx.step[this.prop]||f.fx.step._default)(this)},cur:function(){if(this.elem[this.prop]!=null&&(!this.elem.style||this.elem.style[this.prop]==null))return this.elem[this.prop];var a,b=f.css(this.elem,this.prop);return isNaN(a=parseFloat(b))?!b||b==="auto"?0:b:a},custom:function(a,c,d){function h(a){return e.step(a)}var e=this,g=f.fx;this.startTime=cr||cs(),this.end=c,this.now=this.start=a,this.pos=this.state=0,this.unit=d||this.unit||(f.cssNumber[this.prop]?"":"px"),h.queue=this.options.queue,h.elem=this.elem,h.saveState=function(){e.options.hide&&f._data(e.elem,"fxshow"+e.prop)===b&&f._data(e.elem,"fxshow"+e.prop,e.start)},h()&&f.timers.push(h)&&!cp&&(cp=setInterval(g.tick,g.interval))},show:function(){var a=f._data(this.elem,"fxshow"+this.prop);this.options.orig[this.prop]=a||f.style(this.elem,this.prop),this.options.show=!0,a!==b?this.custom(this.cur(),a):this.custom(this.prop==="width"||this.prop==="height"?1:0,this.cur()),f(this.elem).show()},hide:function(){this.options.orig[this.prop]=f._data(this.elem,"fxshow"+this.prop)||f.style(this.elem,this.prop),this.options.hide=!0,this.custom(this.cur(),0)},step:function(a){var b,c,d,e=cr||cs(),g=!0,h=this.elem,i=this.options;if(a||e>=i.duration+this.startTime){this.now=this.end,this.pos=this.state=1,this.update(),i.animatedProperties[this.prop]=!0;for(b in i.animatedProperties)i.animatedProperties[b]!==!0&&(g=!1);if(g){i.overflow!=null&&!f.support.shrinkWrapBlocks&&f.each(["","X","Y"],function(a,b){h.style["overflow"+b]=i.overflow[a]}),i.hide&&f(h).hide();if(i.hide||i.show)for(b in i.animatedProperties)f.style(h,b,i.orig[b]),f.removeData(h,"fxshow"+b,!0),f.removeData(h,"toggle"+b,!0);d=i.complete,d&&(i.complete=!1,d.call(h))}return!1}i.duration==Infinity?this.now=e:(c=e-this.startTime,this.state=c/i.duration,this.pos=f.easing[i.animatedProperties[this.prop]](this.state,c,0,1,i.duration),this.now=this.start+(this.end-this.start)*this.pos),this.update();return!0}},f.extend(f.fx,{tick:function(){var a,b=f.timers,c=0;for(;c<b.length;c++)a=b[c],!a()&&b[c]===a&&b.splice(c--,1);b.length||f.fx.stop()},interval:13,stop:function(){clearInterval(cp),cp=null},speeds:{slow:600,fast:200,_default:400},step:{opacity:function(a){f.style(a.elem,"opacity",a.now)},_default:function(a){a.elem.style&&a.elem.style[a.prop]!=null?a.elem.style[a.prop]=a.now+a.unit:a.elem[a.prop]=a.now}}}),f.each(["width","height"],function(a,b){f.fx.step[b]=function(a){f.style(a.elem,b,Math.max(0,a.now)+a.unit)}}),f.expr&&f.expr.filters&&(f.expr.filters.animated=function(a){return f.grep(f.timers,function(b){return a===b.elem}).length});var cw=/^t(?:able|d|h)$/i,cx=/^(?:body|html)$/i;"getBoundingClientRect"in c.documentElement?f.fn.offset=function(a){var b=this[0],c;if(a)return this.each(function(b){f.offset.setOffset(this,a,b)});if(!b||!b.ownerDocument)return null;if(b===b.ownerDocument.body)return f.offset.bodyOffset(b);try{c=b.getBoundingClientRect()}catch(d){}var e=b.ownerDocument,g=e.documentElement;if(!c||!f.contains(g,b))return c?{top:c.top,left:c.left}:{top:0,left:0};var h=e.body,i=cy(e),j=g.clientTop||h.clientTop||0,k=g.clientLeft||h.clientLeft||0,l=i.pageYOffset||f.support.boxModel&&g.scrollTop||h.scrollTop,m=i.pageXOffset||f.support.boxModel&&g.scrollLeft||h.scrollLeft,n=c.top+l-j,o=c.left+m-k;return{top:n,left:o}}:f.fn.offset=function(a){var b=this[0];if(a)return this.each(function(b){f.offset.setOffset(this,a,b)});if(!b||!b.ownerDocument)return null;if(b===b.ownerDocument.body)return f.offset.bodyOffset(b);var c,d=b.offsetParent,e=b,g=b.ownerDocument,h=g.documentElement,i=g.body,j=g.defaultView,k=j?j.getComputedStyle(b,null):b.currentStyle,l=b.offsetTop,m=b.offsetLeft;while((b=b.parentNode)&&b!==i&&b!==h){if(f.support.fixedPosition&&k.position==="fixed")break;c=j?j.getComputedStyle(b,null):b.currentStyle,l-=b.scrollTop,m-=b.scrollLeft,b===d&&(l+=b.offsetTop,m+=b.offsetLeft,f.support.doesNotAddBorder&&(!f.support.doesAddBorderForTableAndCells||!cw.test(b.nodeName))&&(l+=parseFloat(c.borderTopWidth)||0,m+=parseFloat(c.borderLeftWidth)||0),e=d,d=b.offsetParent),f.support.subtractsBorderForOverflowNotVisible&&c.overflow!=="visible"&&(l+=parseFloat(c.borderTopWidth)||0,m+=parseFloat(c.borderLeftWidth)||0),k=c}if(k.position==="relative"||k.position==="static")l+=i.offsetTop,m+=i.offsetLeft;f.support.fixedPosition&&k.position==="fixed"&&(l+=Math.max(h.scrollTop,i.scrollTop),m+=Math.max(h.scrollLeft,i.scrollLeft));return{top:l,left:m}},f.offset={bodyOffset:function(a){var b=a.offsetTop,c=a.offsetLeft;f.support.doesNotIncludeMarginInBodyOffset&&(b+=parseFloat(f.css(a,"marginTop"))||0,c+=parseFloat(f.css(a,"marginLeft"))||0);return{top:b,left:c}},setOffset:function(a,b,c){var d=f.css(a,"position");d==="static"&&(a.style.position="relative");var e=f(a),g=e.offset(),h=f.css(a,"top"),i=f.css(a,"left"),j=(d==="absolute"||d==="fixed")&&f.inArray("auto",[h,i])>-1,k={},l={},m,n;j?(l=e.position(),m=l.top,n=l.left):(m=parseFloat(h)||0,n=parseFloat(i)||0),f.isFunction(b)&&(b=b.call(a,c,g)),b.top!=null&&(k.top=b.top-g.top+m),b.left!=null&&(k.left=b.left-g.left+n),"using"in b?b.using.call(a,k):e.css(k)}},f.fn.extend({position:function(){if(!this[0])return null;var a=this[0],b=this.offsetParent(),c=this.offset(),d=cx.test(b[0].nodeName)?{top:0,left:0}:b.offset();c.top-=parseFloat(f.css(a,"marginTop"))||0,c.left-=parseFloat(f.css(a,"marginLeft"))||0,d.top+=parseFloat(f.css(b[0],"borderTopWidth"))||0,d.left+=parseFloat(f.css(b[0],"borderLeftWidth"))||0;return{top:c.top-d.top,left:c.left-d.left}},offsetParent:function(){return this.map(function(){var a=this.offsetParent||c.body;while(a&&!cx.test(a.nodeName)&&f.css(a,"position")==="static")a=a.offsetParent;return a})}}),f.each(["Left","Top"],function(a,c){var d="scroll"+c;f.fn[d]=function(c){var e,g;if(c===b){e=this[0];if(!e)return null;g=cy(e);return g?"pageXOffset"in g?g[a?"pageYOffset":"pageXOffset"]:f.support.boxModel&&g.document.documentElement[d]||g.document.body[d]:e[d]}return this.each(function(){g=cy(this),g?g.scrollTo(a?f(g).scrollLeft():c,a?c:f(g).scrollTop()):this[d]=c})}}),f.each(["Height","Width"],function(a,c){var d=c.toLowerCase();f.fn["inner"+c]=function(){var a=this[0];return a?a.style?parseFloat(f.css(a,d,"padding")):this[d]():null},f.fn["outer"+c]=function(a){var b=this[0];return b?b.style?parseFloat(f.css(b,d,a?"margin":"border")):this[d]():null},f.fn[d]=function(a){var e=this[0];if(!e)return a==null?null:this;if(f.isFunction(a))return this.each(function(b){var c=f(this);c[d](a.call(this,b,c[d]()))});if(f.isWindow(e)){var g=e.document.documentElement["client"+c],h=e.document.body;return e.document.compatMode==="CSS1Compat"&&g||h&&h["client"+c]||g}if(e.nodeType===9)return Math.max(e.documentElement["client"+c],e.body["scroll"+c],e.documentElement["scroll"+c],e.body["offset"+c],e.documentElement["offset"+c]);if(a===b){var i=f.css(e,d),j=parseFloat(i);return f.isNumeric(j)?j:i}return this.css(d,typeof a=="string"?a:a+"px")}}),a.jQuery=a.$=f,typeof define=="function"&&define.amd&&define.amd.jQuery&&define("jquery",[],function(){return f})})(window);
\ No newline at end of file
diff --git a/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite1.0/xsd/readme.txt b/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite1.0/xsd/readme.txt
deleted file mode 100755 (executable)
index 2040274..0000000
+++ /dev/null
@@ -1,53 +0,0 @@
-= XSLT style for Test Case and Test Result =\r
-\r
-== Files structure ==\r
-\r
-        readme.txt\r
-        test_definition.xsd   //The schema of test definition\r
-        tests.css             // CSS style for showing test cases and results\r
-        testresult.xsl\r
-        testcase.xsl\r
-        tests.xml             //example of test cases\r
-        result.xml            //example of test result\r
-        \r
\r
- == Applying the style ==\r
\r
- === Update in definition and result XML ===\r
\r
- For applying this style for the definition XML of test cases, please add below statement before the root element of XML (the tag "test_definition").\r
\r
- <?xml-stylesheet type="text/xsl"  href="./testcase.xsl"?>\r
\r
- as below: \r
\r
-<?xml version="1.0" encoding="UTF-8"?>\r
-<?xml-stylesheet type="text/xsl"  href="./testcase.xsl"?>\r
-<test_definition>\r
-\r
-For applying this style for the test-result XML, please add below statement before the root element of XML (the tag "test_definition").\r
-<?xml-stylesheet type="text/xsl"  href="./testresult.xsl"?>\r
-\r
-as below:\r
-\r
-<?xml version="1.0" encoding="UTF-8"?>\r
-<?xml-stylesheet type="text/xsl"  href="./testresult.xsl"?>\r
-<test_definition>\r
-\r
-=== Deploy XSLT and CSS style ===\r
-\r
-For our test package, below 3 files should be added in each test package. \r
-\r
-        tests.css  \r
-        testresult.xsl\r
-        testcase.xsl\r
-        \r
-For instance, add them under the test package "webapi-tizen-alarm-tests".\r
- Â©Â¸Â©Â¤webapi-tizen-alarm-tests\r
-             Â©Â¸Â©Â¤...\r
-             Â©Â¸Â©Â¤...\r
-             Â©Â¸tests.css  \r
-             Â©Â¸testresult.xsl\r
-             Â©Â¸testcase.xsl\r
-             Â©Â¸tests.xml\r
-             Â©Â¸...\r
diff --git a/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite1.0/xsd/release-notes b/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite1.0/xsd/release-notes
deleted file mode 100755 (executable)
index 30e97e8..0000000
+++ /dev/null
@@ -1,86 +0,0 @@
--- version 1.0.1-2 --
-
- adding 2 new case types "compliance" and "user_experience"
--- version 1.0.1-3 --
- Add a new sub-element "spec" (type: string) under the "testcase" element.
--- version 1.0.1-4 --
-  
- Add 2 new priority "P3" and "P4"
--- version 1.0.1-5 --
- Add a new root "test_definition", and the element "suite" has been move into it as children elements.
--- version 1.0.1-6 --
- A new optional attribute "launcher" is added in the element "testdefinition" for supporting identifying which kind of test suites the XML is designed for
-
--- version 1.0.1-7 --
-The Xslt related files are merged into this repo. 
-including 
-
-        tests.css             // CSS style for showing test cases and results
-        testresult.xsl
-        testcase.xsl
-        tests.xml             //example of test cases
-        result.xml            //example of test result
-        application.js        //Javascript for "back to top"
-        jquery.min.js         //JQuery
-        back_top.png          //image for "back to top"
-
-Modification in Schema:
-
-1\ the optional attribute "launcher" is moved into suite, not in "testdefinition" element any longer.
-
-2\ "spec" element is removed. and a new "specs" structure is added as below
-
-                                <specs>
-                                       <spec>
-                                               <spec_assertion category="Tizen Device API Specifications"
-                                                       section="Widget" specification="Widget Packaging and XML Configuration"
-                                                       interface="Widget" usage="true" />
-                                               <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>
-                                               <spec_statement>spec_statement</spec_statement>
-                                       </spec>
-                               </specs>
-All spec-related infomation are re-organized as XML element and attributes.
-
-In Xslt, 
-
-1\ a float image "Back to top" is available on right-bottom for scrolling to top.
-
-2\ html anchor is adder for scrolling back to suite summary table, and case detail tables.
-
--- version 1.0.1-8 --
-1\ For more flexible, rename the attribute "method_or_attribute" to "element_name".
-2\ Add a new attribute "element_type" to describe the type of the corresponding specification item
-
-related example and Xlst is also updated for above.
-
--- version 1.0.1-9 --
-1\ add an attribute "cts_version" in the element "environment/BuildInfoType" for saving the version of CTS tool
-2\ add an attribute "file" in "measurement/simpleMeasurementType"
-3\ update the result XSLt for showing cts_version
-4\ update the result XSLt for showing Â¡Â°Test Blocked¡± instead of "Test N/A"
-5\ add a summary table for showing all FAIL cases.
-
-
--- version 1.0.2-1 --
-1\ add a new int optional attribute "onload_delay" with default "3"
-
--- version 1.0.2-2 --
-1\ Add a new sub element "capabilities" under the element "testcase"
-2\ Add a new boolean attribute "check_unsupport_error" in the element "testcase"
-
--- version 1.0.2-3 --
-1\ Move the sub element "capabilities" from the element "testcase" to the element "set"
-
-
--- version 1.0.2-4 --
-1\ Add a unique limitation for suite name
-2\ Add a new optional attribute "launcher" in set 
-
-
--- version 1.0.2-5 --
-1\ Add a attribute "set_debug_msg" in set for recording the name of log file.
diff --git a/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite1.0/xsd/result.xml b/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite1.0/xsd/result.xml
deleted file mode 100755 (executable)
index 60dafda..0000000
+++ /dev/null
@@ -1,1737 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>\r
-<?xml-stylesheet type="text/xsl"  href="testresult.xsl"?>\r
-<test_definition name="http://tempuri.org" type=""\r
-       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"\r
-       xsi:noNamespaceSchemaLocation="test_definition.xsd">\r
-       <environment device_id="generic/sdk/generic:4.0.4/MR1/302030:eng/test-keys"\r
-               device_model="unknown" device_name="MR8" firmware_version="4.0.4"\r
-               host="zhongqing-dev.sh.intel.com (Linux - 2.6.38.6-26.rc1.fc15.i686)"\r
-               os_version="4.0.4" resolution="1280*800" screen_size="250*150" cts_version="2.3.0-3">\r
-               <other> Here is a Long String for testing ~~~~~~~~~~~~~~~~~~~\r
-               Here is a Long String for testing ~~~~~~~~~~~~~~~~~~~\r
-               Here is a Long String for testing ~~~~~~~~~~~~~~~~~~~\r
-               </other>\r
-       </environment>\r
-       <summary test_plan_name="tmp_test_1">\r
-               <start_at>Fri Jul 13 04:04:59 CST 2012</start_at>\r
-               <end_at>Fri Jul 13 05:01:53 CST 2012</end_at>\r
-       </summary>\r
-       <suite name="webapi-tizen-alarm-tests" type="">\r
-               <set name="Alarm1">\r
-                       <testcase component="WebAPI/Tizen/Alarm" execution_type="auto"\r
-                               id="Alarm_AlarmRelative_constructor_delay" priority="P1"\r
-                               purpose="check AlarmRelative attribute when create with delay"\r
-                               status="approved" type="compliance" result="PASS">\r
-                               <description>\r
-                                       <pre_condition />\r
-                                       <post_condition />\r
-                                       <steps>\r
-                                               <step order="1">\r
-                                                       <step_desc>check AlarmRelative create constructor with delay\r
-                                                       </step_desc>\r
-                                                       <expected>AlarmRelative create succeed with constructor with\r
-                                                               delay\r
-                                                       </expected>\r
-                                               </step>\r
-                                       </steps>\r
-                                       <test_script_entry test_script_expected_result="0">/opt/webapi-tizen-alarm-tests/Alarm/Alarm_AlarmRelative_constructor_delay.htm\r
-                                       </test_script_entry>\r
-                               </description>\r
-                               <specs>\r
-                                       <spec>\r
-                                               <spec_assertion category="Tizen Device API Specifications"\r
-                                                       section="Widget" specification="Widget Packaging and XML Configuration"\r
-                                                       interface="Widget" usage="true" />\r
-                                               <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>\r
-                                               <spec_statement>spec_statement</spec_statement>\r
-                                       </spec>\r
-                               </specs>\r
-                               <result_info>\r
-                                       <actual_result>PASS</actual_result>\r
-                                       <start>Sat Jan 01 2000 13:43:44 GMT+0900 (KST)</start>\r
-                                       <end>Sat Jan 01 2000 13:43:46 GMT+0900 (KST)</end>\r
-                                       <stdout />\r
-                               </result_info>\r
-                       </testcase>\r
-                       <testcase component="WebAPI/Tizen/Alarm" execution_type="auto"\r
-                               id="Alarm_AlarmManager_get" priority="P1"\r
-                               purpose="check AlarmManager method removeAll: without input attribute"\r
-                               status="approved" type="compliance" result="BLOCK">\r
-                               <description>\r
-                                       <pre_condition />\r
-                                       <post_condition />\r
-                                       <steps>\r
-                                               <step order="1">\r
-                                                       <step_desc>check AlarmManager method get: default check\r
-                                                       </step_desc>\r
-                                                       <expected>AlarmManager method get: default check succeed\r
-                                                       </expected>\r
-                                               </step>\r
-                                       </steps>\r
-                                       <test_script_entry test_script_expected_result="0">/opt/webapi-tizen-alarm-tests/Alarm/Alarm_AlarmManager_get.htm\r
-                                       </test_script_entry>\r
-                               </description>\r
-                               <specs>\r
-                                       <spec>\r
-                                               <spec_assertion category="Tizen Device API Specifications"\r
-                                                       section="Widget" specification="Widget Packaging and XML Configuration"\r
-                                                       interface="Widget" usage="true" />\r
-                                               <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>\r
-                                               <spec_statement>spec_statement</spec_statement>\r
-                                       </spec>\r
-                               </specs>\r
-                               <result_info>\r
-                                       <actual_result>BLOCK</actual_result>\r
-                                       <start>Sat Jan 01 2000 13:43:46 GMT+0900 (KST)</start>\r
-                                       <end>Sat Jan 01 2000 13:44:02 GMT+0900 (KST)</end>\r
-                                       <stdout>Test time out</stdout>\r
-                               </result_info>\r
-                       </testcase>\r
-                       <testcase component="WebAPI/Tizen/Alarm" execution_type="auto"\r
-                               id="Alarm_AlarmAbsolute_attri_date_01" priority="P1"\r
-                               purpose="check AlarmAbsolute attribute when create with date"\r
-                               status="approved" type="compliance">\r
-                               <description>\r
-                                       <pre_condition />\r
-                                       <post_condition />\r
-                                       <steps>\r
-                                               <step order="1">\r
-                                                       <step_desc>check AlarmAbsolute attribute when create with date\r
-                                                       </step_desc>\r
-                                                       <expected>AlarmAbsolute attribute return correct value when\r
-                                                               create with date\r
-                                                       </expected>\r
-                                               </step>\r
-                                       </steps>\r
-                                       <test_script_entry test_script_expected_result="0">/opt/webapi-tizen-alarm-tests/Alarm/Alarm_AlarmAbsolute_attri_date.htm?total_num=3&amp;locator_key=id&amp;value=1\r
-                                       </test_script_entry>\r
-                               </description>\r
-                               <specs>\r
-                                       <spec>\r
-                                               <spec_assertion category="Tizen Device API Specifications"\r
-                                                       section="Widget" specification="Widget Packaging and XML Configuration"\r
-                                                       interface="Widget" usage="true" />\r
-                                               <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>\r
-                                               <spec_statement>spec_statement</spec_statement>\r
-                                       </spec>\r
-                               </specs>\r
-                               <result_info>\r
-                                       <actual_result>N/R</actual_result>\r
-                                       <start>Sat Jan 01 2000 13:44:02 GMT+0900 (KST)</start>\r
-                                       <end>Sat Jan 01 2000 13:44:05 GMT+0900 (KST)</end>\r
-                                       <stdout />\r
-                               </result_info>\r
-                       </testcase>\r
-                       <testcase component="WebAPI/Tizen/Alarm" execution_type="auto"\r
-                               id="Alarm_AlarmManager_add_rel" priority="P1"\r
-                               purpose="check AlarmManager method add: add relative alarm" status="approved"\r
-                               type="compliance" result="FAIL">\r
-                               <description>\r
-                                       <pre_condition />\r
-                                       <post_condition />\r
-                                       <steps>\r
-                                               <step order="1">\r
-                                                       <step_desc>check AlarmManager method add: add relative alarm\r
-                                                       </step_desc>\r
-                                                       <expected>AlarmManager method add: add relative alarm succeed\r
-                                                       </expected>\r
-                                               </step>\r
-                                       </steps>\r
-                                       <test_script_entry test_script_expected_result="0">/opt/webapi-tizen-alarm-tests/Alarm/Alarm_AlarmManager_add_rel.htm\r
-                                       </test_script_entry>\r
-                               </description>\r
-                               <specs>\r
-                                       <spec>\r
-                                               <spec_assertion category="Tizen Device API Specifications"\r
-                                                       section="Widget" specification="Widget Packaging and XML Configuration"\r
-                                                       interface="Widget" usage="true" />\r
-                                               <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>\r
-                                               <spec_statement>spec_statement</spec_statement>\r
-                                       </spec>\r
-                               </specs>\r
-                               <result_info>\r
-                                       <actual_result>FAIL</actual_result>\r
-                                       <start>Sat Jan 01 2000 13:44:05 GMT+0900 (KST)</start>\r
-                                       <end>Sat Jan 01 2000 13:44:21 GMT+0900 (KST)</end>\r
-                                       <stdout>Test time out</stdout>\r
-                               </result_info>\r
-                       </testcase>\r
-                       <testcase component="WebAPI/Tizen/Alarm" execution_type="auto"\r
-                               id="Alarm_AlarmRelative_attri_delay_02" priority="P1"\r
-                               purpose="check AlarmAbsolute attribute when create with period"\r
-                               status="approved" type="compliance" result="FAIL">\r
-                               <description>\r
-                                       <pre_condition />\r
-                                       <post_condition />\r
-                                       <steps>\r
-                                               <step order="1">\r
-                                                       <step_desc>check AlarmRelative attribute when create with delay\r
-                                                       </step_desc>\r
-                                                       <expected>AlarmRelative attribute return correct value when\r
-                                                               create succeed with with delay\r
-                                                       </expected>\r
-                                               </step>\r
-                                       </steps>\r
-                                       <test_script_entry test_script_expected_result="0">/opt/webapi-tizen-alarm-tests/Alarm/Alarm_AlarmRelative_attri_delay.htm?total_num=2&amp;locator_key=id&amp;value=2\r
-                                       </test_script_entry>\r
-                               </description>\r
-                               <specs>\r
-                                       <spec>\r
-                                               <spec_assertion category="Tizen Device API Specifications"\r
-                                                       section="Widget" specification="Widget Packaging and XML Configuration"\r
-                                                       interface="Widget" usage="true" />\r
-                                               <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>\r
-                                               <spec_statement>spec_statement</spec_statement>\r
-                                       </spec>\r
-                               </specs>\r
-                               <result_info>\r
-                                       <actual_result>FAIL</actual_result>\r
-                                       <start>Sat Jan 01 2000 13:44:21 GMT+0900 (KST)</start>\r
-                                       <end>Sat Jan 01 2000 13:44:23 GMT+0900 (KST)</end>\r
-                                       <stdout />\r
-                               </result_info>\r
-                       </testcase>\r
-                       <testcase component="WebAPI/Tizen/Alarm" execution_type="auto"\r
-                               id="Alarm_AlarmManager_getAll" priority="P1"\r
-                               purpose="check AlarmManager method getAll: default check" status="approved"\r
-                               type="compliance" result="FAIL">\r
-                               <description>\r
-                                       <pre_condition />\r
-                                       <post_condition />\r
-                                       <steps>\r
-                                               <step order="1">\r
-                                                       <step_desc>check AlarmManager method getAll: default check\r
-                                                       </step_desc>\r
-                                                       <expected>AlarmManager method getAll: default check succeed\r
-                                                       </expected>\r
-                                               </step>\r
-                                       </steps>\r
-                                       <test_script_entry test_script_expected_result="0">/opt/webapi-tizen-alarm-tests/Alarm/Alarm_AlarmManager_getAll.htm\r
-                                       </test_script_entry>\r
-                               </description>\r
-                               <specs>\r
-                                       <spec>\r
-                                               <spec_assertion category="Tizen Device API Specifications"\r
-                                                       section="Widget" specification="Widget Packaging and XML Configuration"\r
-                                                       interface="Widget" usage="true" />\r
-                                               <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>\r
-                                               <spec_statement>spec_statement</spec_statement>\r
-                                       </spec>\r
-                               </specs>\r
-                               <result_info>\r
-                                       <actual_result>FAIL</actual_result>\r
-                                       <start>Sat Jan 01 2000 13:44:23 GMT+0900 (KST)</start>\r
-                                       <end>Sat Jan 01 2000 13:44:39 GMT+0900 (KST)</end>\r
-                                       <stdout>Test time out</stdout>\r
-                               </result_info>\r
-                       </testcase>\r
-                       <testcase component="WebAPI/Tizen/Alarm" execution_type="auto"\r
-                               id="Alarm_AlarmAbsolute_attri_date_03" priority="P1"\r
-                               purpose="check AlarmAbsolute attribute when create with date"\r
-                               status="approved" type="compliance" result="Blocked">\r
-                               <description>\r
-                                       <pre_condition />\r
-                                       <post_condition />\r
-                                       <steps>\r
-                                               <step order="1">\r
-                                                       <step_desc>check AlarmAbsolute attribute when create with date\r
-                                                       </step_desc>\r
-                                                       <expected>AlarmAbsolute attribute return correct value when\r
-                                                               create with date\r
-                                                       </expected>\r
-                                               </step>\r
-                                       </steps>\r
-                                       <test_script_entry test_script_expected_result="0">/opt/webapi-tizen-alarm-tests/Alarm/Alarm_AlarmAbsolute_attri_date.htm?total_num=3&amp;locator_key=id&amp;value=3\r
-                                       </test_script_entry>\r
-                               </description>\r
-                               <specs>\r
-                                       <spec>\r
-                                               <spec_assertion category="Tizen Device API Specifications"\r
-                                                       section="Widget" specification="Widget Packaging and XML Configuration"\r
-                                                       interface="Widget" usage="true" />\r
-                                               <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>\r
-                                               <spec_statement>spec_statement</spec_statement>\r
-                                       </spec>\r
-                               </specs>\r
-                               <result_info>\r
-                                       <actual_result>FAIL</actual_result>\r
-                                       <start>Sat Jan 01 2000 13:44:39 GMT+0900 (KST)</start>\r
-                                       <end>Sat Jan 01 2000 13:44:41 GMT+0900 (KST)</end>\r
-                                       <stdout />\r
-                               </result_info>\r
-                       </testcase>\r
-                       <testcase component="WebAPI/Tizen/Alarm" execution_type="auto"\r
-                               id="Alarm_AlarmAbsolute_getNextScheduledDate_date" priority="P1"\r
-                               purpose="check AlarmAbsolute method getNextScheduledDate when create with date"\r
-                               status="approved" type="compliance" result="FAIL">\r
-                               <description>\r
-                                       <pre_condition />\r
-                                       <post_condition />\r
-                                       <steps>\r
-                                               <step order="1">\r
-                                                       <step_desc>check AlarmAbsolute method getNextScheduledDate when\r
-                                                               create with date\r
-                                                       </step_desc>\r
-                                                       <expected>AlarmAbsolute method getNextScheduledDate return\r
-                                                               correct value when create with date\r
-                                                       </expected>\r
-                                               </step>\r
-                                       </steps>\r
-                                       <test_script_entry test_script_expected_result="0">/opt/webapi-tizen-alarm-tests/Alarm/Alarm_AlarmAbsolute_getNextScheduledDate_date.htm\r
-                                       </test_script_entry>\r
-                               </description>\r
-                               <specs>\r
-                                       <spec>\r
-                                               <spec_assertion category="Tizen Device API Specifications"\r
-                                                       section="Widget" specification="Widget Packaging and XML Configuration"\r
-                                                       interface="Widget" usage="true" />\r
-                                               <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>\r
-                                               <spec_statement>spec_statement</spec_statement>\r
-                                       </spec>\r
-                               </specs>\r
-                               <result_info>\r
-                                       <actual_result>FAIL</actual_result>\r
-                                       <start>Sat Jan 01 2000 13:44:41 GMT+0900 (KST)</start>\r
-                                       <end>Sat Jan 01 2000 13:44:57 GMT+0900 (KST)</end>\r
-                                       <stdout>Test time out</stdout>\r
-                               </result_info>\r
-                       </testcase>\r
-                       <testcase component="WebAPI/Tizen/Alarm" execution_type="auto"\r
-                               id="Alarm_AlarmAbsolute_constructor_date" priority="P1"\r
-                               purpose="check AlarmAbsolute create constructor with date" status="approved"\r
-                               type="compliance" result="FAIL">\r
-                               <description>\r
-                                       <pre_condition />\r
-                                       <post_condition />\r
-                                       <steps>\r
-                                               <step order="1">\r
-                                                       <step_desc>check AlarmAbsolute create constructor with date\r
-                                                       </step_desc>\r
-                                                       <expected>AlarmAbsolute create succeed with constructor with date\r
-                                                       </expected>\r
-                                               </step>\r
-                                       </steps>\r
-                                       <test_script_entry test_script_expected_result="0">/opt/webapi-tizen-alarm-tests/Alarm/Alarm_AlarmAbsolute_constructor_date.htm\r
-                                       </test_script_entry>\r
-                               </description>\r
-                               <specs>\r
-                                       <spec>\r
-                                               <spec_assertion category="Tizen Device API Specifications"\r
-                                                       section="Widget" specification="Widget Packaging and XML Configuration"\r
-                                                       interface="Widget" usage="true" />\r
-                                               <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>\r
-                                               <spec_statement>spec_statement</spec_statement>\r
-                                       </spec>\r
-                               </specs>\r
-                               <result_info>\r
-                                       <actual_result>FAIL</actual_result>\r
-                                       <start>Sat Jan 01 2000 13:44:57 GMT+0900 (KST)</start>\r
-                                       <end>Sat Jan 01 2000 13:45:13 GMT+0900 (KST)</end>\r
-                                       <stdout>Test time out</stdout>\r
-                               </result_info>\r
-                       </testcase>\r
-                       <testcase component="WebAPI/Tizen/Alarm" execution_type="auto"\r
-                               id="Alarm_AlarmRelative_getRemainingSeconds_delay" priority="P1"\r
-                               purpose="check AlarmRelative method getNextScheduleddelay when create with delay"\r
-                               status="approved" type="compliance" result="FAIL">\r
-                               <description>\r
-                                       <pre_condition />\r
-                                       <post_condition />\r
-                                       <steps>\r
-                                               <step order="1">\r
-                                                       <step_desc>check AlarmRelative method getNextScheduleddelay when\r
-                                                               create with delay\r
-                                                       </step_desc>\r
-                                                       <expected>AlarmRelative method getNextScheduleddelay return\r
-                                                               correct value when create succeed with with delay\r
-                                                       </expected>\r
-                                               </step>\r
-                                       </steps>\r
-                                       <test_script_entry test_script_expected_result="0">/opt/webapi-tizen-alarm-tests/Alarm/Alarm_AlarmRelative_getRemainingSeconds_delay.htm\r
-                                       </test_script_entry>\r
-                               </description>\r
-                               <specs>\r
-                                       <spec>\r
-                                               <spec_assertion category="Tizen Device API Specifications"\r
-                                                       section="Widget" specification="Widget Packaging and XML Configuration"\r
-                                                       interface="Widget" usage="true" />\r
-                                               <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>\r
-                                               <spec_statement>spec_statement</spec_statement>\r
-                                       </spec>\r
-                               </specs>\r
-                               <result_info>\r
-                                       <actual_result>FAIL</actual_result>\r
-                                       <start>Sat Jan 01 2000 13:45:13 GMT+0900 (KST)</start>\r
-                                       <end>Sat Jan 01 2000 13:45:30 GMT+0900 (KST)</end>\r
-                                       <stdout>Test time out</stdout>\r
-                               </result_info>\r
-                       </testcase>\r
-                       <testcase component="WebAPI/Tizen/Alarm" execution_type="auto"\r
-                               id="Alarm_AlarmRelative_attri_delay_01" priority="P1"\r
-                               purpose="check AlarmAbsolute attribute when create with period"\r
-                               status="approved" type="compliance" result="FAIL">\r
-                               <description>\r
-                                       <pre_condition />\r
-                                       <post_condition />\r
-                                       <steps>\r
-                                               <step order="1">\r
-                                                       <step_desc>check AlarmRelative attribute when create with delay\r
-                                                       </step_desc>\r
-                                                       <expected>AlarmRelative attribute return correct value when\r
-                                                               create succeed with with delay\r
-                                                       </expected>\r
-                                               </step>\r
-                                       </steps>\r
-                                       <test_script_entry test_script_expected_result="0">/opt/webapi-tizen-alarm-tests/Alarm/Alarm_AlarmRelative_attri_delay.htm?total_num=2&amp;locator_key=id&amp;value=1\r
-                                       </test_script_entry>\r
-                               </description>\r
-                               <specs>\r
-                                       <spec>\r
-                                               <spec_assertion category="Tizen Device API Specifications"\r
-                                                       section="Widget" specification="Widget Packaging and XML Configuration"\r
-                                                       interface="Widget" usage="true" />\r
-                                               <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>\r
-                                               <spec_statement>spec_statement</spec_statement>\r
-                                       </spec>\r
-                               </specs>\r
-                               <result_info>\r
-                                       <actual_result>FAIL</actual_result>\r
-                                       <start>Sat Jan 01 2000 13:45:30 GMT+0900 (KST)</start>\r
-                                       <end>Sat Jan 01 2000 13:45:32 GMT+0900 (KST)</end>\r
-                                       <stdout />\r
-                               </result_info>\r
-                       </testcase>\r
-                       <testcase component="WebAPI/Tizen/Alarm" execution_type="auto"\r
-                               id="Alarm_AlarmManager_add_abs" priority="P1"\r
-                               purpose="check AlarmManager method add: add absolute alarm" status="approved"\r
-                               type="compliance" result="FAIL">\r
-                               <description>\r
-                                       <pre_condition />\r
-                                       <post_condition />\r
-                                       <steps>\r
-                                               <step order="1">\r
-                                                       <step_desc>check AlarmManager method add: add absolute alarm\r
-                                                       </step_desc>\r
-                                                       <expected>AlarmManager method add: add absolute alarm succeed\r
-                                                       </expected>\r
-                                               </step>\r
-                                       </steps>\r
-                                       <test_script_entry test_script_expected_result="0">/opt/webapi-tizen-alarm-tests/Alarm/Alarm_AlarmManager_add_abs.htm\r
-                                       </test_script_entry>\r
-                               </description>\r
-                               <specs>\r
-                                       <spec>\r
-                                               <spec_assertion category="Tizen Device API Specifications"\r
-                                                       section="Widget" specification="Widget Packaging and XML Configuration"\r
-                                                       interface="Widget" usage="true" />\r
-                                               <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>\r
-                                               <spec_statement>spec_statement</spec_statement>\r
-                                       </spec>\r
-                               </specs>\r
-                               <result_info>\r
-                                       <actual_result>FAIL</actual_result>\r
-                                       <start>Sat Jan 01 2000 13:45:32 GMT+0900 (KST)</start>\r
-                                       <end>Sat Jan 01 2000 13:45:48 GMT+0900 (KST)</end>\r
-                                       <stdout>Test time out</stdout>\r
-                               </result_info>\r
-                       </testcase>\r
-                       <testcase component="WebAPI/Tizen/Alarm" execution_type="auto"\r
-                               id="Alarm_AlarmAbsolute_attri_date_02" priority="P1"\r
-                               purpose="check AlarmAbsolute attribute when create with date"\r
-                               status="approved" type="compliance" result="FAIL">\r
-                               <description>\r
-                                       <pre_condition />\r
-                                       <post_condition />\r
-                                       <steps>\r
-                                               <step order="1">\r
-                                                       <step_desc>check AlarmAbsolute attribute when create with date\r
-                                                       </step_desc>\r
-                                                       <expected>AlarmAbsolute attribute return correct value when\r
-                                                               create with date\r
-                                                       </expected>\r
-                                               </step>\r
-                                       </steps>\r
-                                       <test_script_entry test_script_expected_result="0">/opt/webapi-tizen-alarm-tests/Alarm/Alarm_AlarmAbsolute_attri_date.htm?total_num=3&amp;locator_key=id&amp;value=2\r
-                                       </test_script_entry>\r
-                               </description>\r
-                               <specs>\r
-                                       <spec>\r
-                                               <spec_assertion category="Tizen Device API Specifications"\r
-                                                       section="Widget" specification="Widget Packaging and XML Configuration"\r
-                                                       interface="Widget" usage="true" />\r
-                                               <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>\r
-                                               <spec_statement>spec_statement</spec_statement>\r
-                                       </spec>\r
-                               </specs>\r
-                               <result_info>\r
-                                       <actual_result>FAIL</actual_result>\r
-                                       <start>Sat Jan 01 2000 13:45:48 GMT+0900 (KST)</start>\r
-                                       <end>Sat Jan 01 2000 13:45:50 GMT+0900 (KST)</end>\r
-                                       <stdout />\r
-                               </result_info>\r
-                       </testcase>\r
-                       <testcase component="WebAPI/Tizen/Alarm" execution_type="auto"\r
-                               id="Alarm_AlarmManager_removeAll" priority="P1"\r
-                               purpose="check AlarmManager method removeAll: default check" status="approved"\r
-                               type="compliance" result="FAIL">\r
-                               <description>\r
-                                       <pre_condition />\r
-                                       <post_condition />\r
-                                       <steps>\r
-                                               <step order="1">\r
-                                                       <step_desc>check AlarmManager method removeAll: default check\r
-                                                       </step_desc>\r
-                                                       <expected>AlarmManager method removeAll: default check succeed\r
-                                                       </expected>\r
-                                               </step>\r
-                                       </steps>\r
-                                       <test_script_entry test_script_expected_result="0">/opt/webapi-tizen-alarm-tests/Alarm/Alarm_AlarmManager_removeAll.htm\r
-                                       </test_script_entry>\r
-                               </description>\r
-                               <specs>\r
-                                       <spec>\r
-                                               <spec_assertion category="Tizen Device API Specifications"\r
-                                                       section="Widget" specification="Widget Packaging and XML Configuration"\r
-                                                       interface="Widget" usage="true" />\r
-                                               <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>\r
-                                               <spec_statement>spec_statement</spec_statement>\r
-                                       </spec>\r
-                               </specs>\r
-                               <result_info>\r
-                                       <actual_result>FAIL</actual_result>\r
-                                       <start>Sat Jan 01 2000 13:45:50 GMT+0900 (KST)</start>\r
-                                       <end>Sat Jan 01 2000 13:46:06 GMT+0900 (KST)</end>\r
-                                       <stdout>Test time out</stdout>\r
-                               </result_info>\r
-                       </testcase>\r
-                       <testcase component="WebAPI/Tizen/Alarm" execution_type="auto"\r
-                               id="Alarm_AlarmManager_remove" priority="P1"\r
-                               purpose="check AlarmManager method remove: default check" status="approved"\r
-                               type="compliance" result="FAIL">\r
-                               <description>\r
-                                       <pre_condition />\r
-                                       <post_condition />\r
-                                       <steps>\r
-                                               <step order="1">\r
-                                                       <step_desc>check AlarmManager method remove: default check\r
-                                                       </step_desc>\r
-                                                       <expected>AlarmManager method remove: default check succeed\r
-                                                       </expected>\r
-                                               </step>\r
-                                       </steps>\r
-                                       <test_script_entry test_script_expected_result="0">/opt/webapi-tizen-alarm-tests/Alarm/Alarm_AlarmManager_remove.htm\r
-                                       </test_script_entry>\r
-                               </description>\r
-                               <specs>\r
-                                       <spec>\r
-                                               <spec_assertion category="Tizen Device API Specifications"\r
-                                                       section="Widget" specification="Widget Packaging and XML Configuration"\r
-                                                       interface="Widget" usage="true" />\r
-                                               <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>\r
-                                               <spec_statement>spec_statement</spec_statement>\r
-                                       </spec>\r
-                               </specs>\r
-                               <result_info>\r
-                                       <actual_result>FAIL</actual_result>\r
-                                       <start>Sat Jan 01 2000 13:46:06 GMT+0900 (KST)</start>\r
-                                       <end>Sat Jan 01 2000 13:46:22 GMT+0900 (KST)</end>\r
-                                       <stdout>Test time out</stdout>\r
-                               </result_info>\r
-                       </testcase>\r
-                       <testcase component="WebAPI/Tizen/Alarm" execution_type="auto"\r
-                               id="Alarm_AlarmManagerObject_exist" priority="P1"\r
-                               purpose="check AlarmManagerObject existance" status="approved" type="compliance"\r
-                               result="FAIL">\r
-                               <description>\r
-                                       <pre_condition />\r
-                                       <post_condition />\r
-                                       <steps>\r
-                                               <step order="1">\r
-                                                       <step_desc>check AlarmManagerObject exist</step_desc>\r
-                                                       <expected>AlarmManagerObject exist</expected>\r
-                                               </step>\r
-                                       </steps>\r
-                                       <test_script_entry test_script_expected_result="">/opt/webapi-tizen-alarm-tests/Alarm/Alarm_AlarmManagerObject_exist.htm\r
-                                       </test_script_entry>\r
-                               </description>\r
-                               <specs>\r
-                                       <spec>\r
-                                               <spec_assertion category="Tizen Device API Specifications"\r
-                                                       section="Widget" specification="Widget Packaging and XML Configuration"\r
-                                                       interface="Widget" usage="true" />\r
-                                               <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>\r
-                                               <spec_statement>spec_statement</spec_statement>\r
-                                       </spec>\r
-                               </specs>\r
-                               <result_info>\r
-                                       <actual_result>FAIL</actual_result>\r
-                                       <start>Sat Jan 01 2000 13:46:22 GMT+0900 (KST)</start>\r
-                                       <end>Sat Jan 01 2000 13:46:38 GMT+0900 (KST)</end>\r
-                                       <stdout>Test time out</stdout>\r
-                               </result_info>\r
-                       </testcase>\r
-                       <testcase component="WebAPI/Tizen/Alarm" execution_type="auto"\r
-                               id="Alarm_AlarmManager_const_check_01" priority="P1"\r
-                               purpose="Check AlarmManager constants:PERIOD_MINUTE" status="approved"\r
-                               type="compliance" result="FAIL">\r
-                               <description>\r
-                                       <pre_condition />\r
-                                       <post_condition />\r
-                                       <steps>\r
-                                               <step order="1">\r
-                                                       <step_desc>Check AlarmManager constants:</step_desc>\r
-                                                       <expected>AlarmManager constants value is correct:</expected>\r
-                                               </step>\r
-                                       </steps>\r
-                                       <test_script_entry test_script_expected_result="0">/opt/webapi-tizen-alarm-tests/Alarm/Alarm_AlarmManager_const_check.htm?total_num=4&amp;locator_key=id&amp;value=1\r
-                                       </test_script_entry>\r
-                               </description>\r
-                               <specs>\r
-                                       <spec>\r
-                                               <spec_assertion category="Tizen Device API Specifications"\r
-                                                       section="Widget" specification="Widget Packaging and XML Configuration"\r
-                                                       interface="Widget" usage="true" />\r
-                                               <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>\r
-                                               <spec_statement>spec_statement</spec_statement>\r
-                                       </spec>\r
-                               </specs>\r
-                               <result_info>\r
-                                       <actual_result>FAIL</actual_result>\r
-                                       <start>Sat Jan 01 2000 13:46:38 GMT+0900 (KST)</start>\r
-                                       <end>Sat Jan 01 2000 13:46:40 GMT+0900 (KST)</end>\r
-                                       <stdout>Can't find variable: tizen</stdout>\r
-                               </result_info>\r
-                       </testcase>\r
-                       <testcase component="WebAPI/Tizen/Alarm" execution_type="auto"\r
-                               id="Alarm_AlarmManager_const_check_02" priority="P1"\r
-                               purpose="Check AlarmManager constants:PERIOD_HOUR" status="approved"\r
-                               type="compliance" result="FAIL">\r
-                               <description>\r
-                                       <pre_condition />\r
-                                       <post_condition />\r
-                                       <steps>\r
-                                               <step order="1">\r
-                                                       <step_desc>Check AlarmManager constants:</step_desc>\r
-                                                       <expected>AlarmManager constants value is correct:</expected>\r
-                                               </step>\r
-                                       </steps>\r
-                                       <test_script_entry test_script_expected_result="0">/opt/webapi-tizen-alarm-tests/Alarm/Alarm_AlarmManager_const_check.htm?total_num=4&amp;locator_key=id&amp;value=2\r
-                                       </test_script_entry>\r
-                               </description>\r
-                               <specs>\r
-                                       <spec>\r
-                                               <spec_assertion category="Tizen Device API Specifications"\r
-                                                       section="Widget" specification="Widget Packaging and XML Configuration"\r
-                                                       interface="Widget" usage="true" />\r
-                                               <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>\r
-                                               <spec_statement>spec_statement</spec_statement>\r
-                                       </spec>\r
-                               </specs>\r
-                               <result_info>\r
-                                       <actual_result>FAIL</actual_result>\r
-                                       <start>Sat Jan 01 2000 13:46:40 GMT+0900 (KST)</start>\r
-                                       <end>Sat Jan 01 2000 13:46:42 GMT+0900 (KST)</end>\r
-                                       <stdout>Can't find variable: tizen</stdout>\r
-                               </result_info>\r
-                       </testcase>\r
-                       <testcase component="WebAPI/Tizen/Alarm" execution_type="auto"\r
-                               id="Alarm_AlarmManager_const_check_03" priority="P1"\r
-                               purpose="Check AlarmManager constants:PERIOD_DAY" status="approved"\r
-                               type="compliance" result="FAIL">\r
-                               <description>\r
-                                       <pre_condition />\r
-                                       <post_condition />\r
-                                       <steps>\r
-                                               <step order="1">\r
-                                                       <step_desc>Check AlarmManager constants:</step_desc>\r
-                                                       <expected>AlarmManager constants value is correct:</expected>\r
-                                               </step>\r
-                                       </steps>\r
-                                       <test_script_entry test_script_expected_result="0">/opt/webapi-tizen-alarm-tests/Alarm/Alarm_AlarmManager_const_check.htm?total_num=4&amp;locator_key=id&amp;value=3\r
-                                       </test_script_entry>\r
-                               </description>\r
-                               <specs>\r
-                                       <spec>\r
-                                               <spec_assertion category="Tizen Device API Specifications"\r
-                                                       section="Widget" specification="Widget Packaging and XML Configuration"\r
-                                                       interface="Widget" usage="true" />\r
-                                               <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>\r
-                                               <spec_statement>spec_statement</spec_statement>\r
-                                       </spec>\r
-                               </specs>\r
-                               <result_info>\r
-                                       <actual_result>FAIL</actual_result>\r
-                                       <start>Sat Jan 01 2000 13:46:42 GMT+0900 (KST)</start>\r
-                                       <end>Sat Jan 01 2000 13:46:44 GMT+0900 (KST)</end>\r
-                                       <stdout>Can't find variable: tizen</stdout>\r
-                               </result_info>\r
-                       </testcase>\r
-                       <testcase component="WebAPI/Tizen/Alarm" execution_type="auto"\r
-                               id="Alarm_AlarmManager_const_check_04" priority="P1"\r
-                               purpose="Check AlarmManager constants:PERIOD_WEEK" status="approved"\r
-                               type="compliance" result="FAIL">\r
-                               <description>\r
-                                       <pre_condition />\r
-                                       <post_condition />\r
-                                       <steps>\r
-                                               <step order="1">\r
-                                                       <step_desc>Check AlarmManager constants:</step_desc>\r
-                                                       <expected>AlarmManager constants value is correct:</expected>\r
-                                               </step>\r
-                                       </steps>\r
-                                       <test_script_entry test_script_expected_result="0">/opt/webapi-tizen-alarm-tests/Alarm/Alarm_AlarmManager_const_check.htm?total_num=4&amp;locator_key=id&amp;value=4\r
-                                       </test_script_entry>\r
-                               </description>\r
-                               <specs>\r
-                                       <spec>\r
-                                               <spec_assertion category="Tizen Device API Specifications"\r
-                                                       section="Widget" specification="Widget Packaging and XML Configuration"\r
-                                                       interface="Widget" usage="true" />\r
-                                               <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>\r
-                                               <spec_statement>spec_statement</spec_statement>\r
-                                       </spec>\r
-                               </specs>\r
-                               <result_info>\r
-                                       <actual_result>FAIL</actual_result>\r
-                                       <start>Sat Jan 01 2000 13:46:44 GMT+0900 (KST)</start>\r
-                                       <end>Sat Jan 01 2000 13:46:46 GMT+0900 (KST)</end>\r
-                                       <stdout>Can't find variable: tizen</stdout>\r
-                               </result_info>\r
-                       </testcase>\r
-               </set>\r
-               <set name="Alarm">\r
-                       <testcase component="WebAPI/Tizen/Alarm" execution_type="auto"\r
-                               id="Alarm_AlarmRelative_constructor_delay" priority="P1"\r
-                               purpose="check AlarmRelative attribute when create with delay"\r
-                               status="approved" type="compliance" result="PASS">\r
-                               <description>\r
-                                       <pre_condition />\r
-                                       <post_condition />\r
-                                       <steps>\r
-                                               <step order="1">\r
-                                                       <step_desc>check AlarmRelative create constructor with delay\r
-                                                       </step_desc>\r
-                                                       <expected>AlarmRelative create succeed with constructor with\r
-                                                               delay\r
-                                                       </expected>\r
-                                               </step>\r
-                                       </steps>\r
-                                       <test_script_entry test_script_expected_result="0">/opt/webapi-tizen-alarm-tests/Alarm/Alarm_AlarmRelative_constructor_delay.htm\r
-                                       </test_script_entry>\r
-                               </description>\r
-                               <specs>\r
-                                       <spec>\r
-                                               <spec_assertion category="Tizen Device API Specifications"\r
-                                                       section="Widget" specification="Widget Packaging and XML Configuration"\r
-                                                       interface="Widget" usage="true" />\r
-                                               <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>\r
-                                               <spec_statement>spec_statement</spec_statement>\r
-                                       </spec>\r
-                               </specs>\r
-                               <result_info>\r
-                                       <actual_result>PASS</actual_result>\r
-                                       <start>Sat Jan 01 2000 13:43:44 GMT+0900 (KST)</start>\r
-                                       <end>Sat Jan 01 2000 13:43:46 GMT+0900 (KST)</end>\r
-                                       <stdout />\r
-                               </result_info>\r
-                       </testcase>\r
-                       <testcase component="WebAPI/Tizen/Alarm" execution_type="auto"\r
-                               id="Alarm_AlarmManager_get" priority="P1"\r
-                               purpose="check AlarmManager method removeAll: without input attribute"\r
-                               status="approved" type="compliance" result="FAIL">\r
-                               <description>\r
-                                       <pre_condition />\r
-                                       <post_condition />\r
-                                       <steps>\r
-                                               <step order="1">\r
-                                                       <step_desc>check AlarmManager method get: default check\r
-                                                       </step_desc>\r
-                                                       <expected>AlarmManager method get: default check succeed\r
-                                                       </expected>\r
-                                               </step>\r
-                                       </steps>\r
-                                       <test_script_entry test_script_expected_result="0">/opt/webapi-tizen-alarm-tests/Alarm/Alarm_AlarmManager_get.htm\r
-                                       </test_script_entry>\r
-                               </description>\r
-                               <specs>\r
-                                       <spec>\r
-                                               <spec_assertion category="Tizen Device API Specifications"\r
-                                                       section="Widget" specification="Widget Packaging and XML Configuration"\r
-                                                       interface="Widget" usage="true" />\r
-                                               <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>\r
-                                               <spec_statement>spec_statement</spec_statement>\r
-                                       </spec>\r
-                               </specs>\r
-                               <result_info>\r
-                                       <actual_result>FAIL</actual_result>\r
-                                       <start>Sat Jan 01 2000 13:43:46 GMT+0900 (KST)</start>\r
-                                       <end>Sat Jan 01 2000 13:44:02 GMT+0900 (KST)</end>\r
-                                       <stdout>Test time out</stdout>\r
-                               </result_info>\r
-                       </testcase>\r
-                       <testcase component="WebAPI/Tizen/Alarm" execution_type="auto"\r
-                               id="Alarm_AlarmAbsolute_attri_date_01" priority="P1"\r
-                               purpose="check AlarmAbsolute attribute when create with date"\r
-                               status="approved" type="compliance" result="FAIL">\r
-                               <description>\r
-                                       <pre_condition />\r
-                                       <post_condition />\r
-                                       <steps>\r
-                                               <step order="1">\r
-                                                       <step_desc>check AlarmAbsolute attribute when create with date\r
-                                                       </step_desc>\r
-                                                       <expected>AlarmAbsolute attribute return correct value when\r
-                                                               create with date\r
-                                                       </expected>\r
-                                               </step>\r
-                                       </steps>\r
-                                       <test_script_entry test_script_expected_result="0">/opt/webapi-tizen-alarm-tests/Alarm/Alarm_AlarmAbsolute_attri_date.htm?total_num=3&amp;locator_key=id&amp;value=1\r
-                                       </test_script_entry>\r
-                               </description>\r
-                               <specs>\r
-                                       <spec>\r
-                                               <spec_assertion category="Tizen Device API Specifications"\r
-                                                       section="Widget" specification="Widget Packaging and XML Configuration"\r
-                                                       interface="Widget" usage="true" />\r
-                                               <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>\r
-                                               <spec_statement>spec_statement</spec_statement>\r
-                                       </spec>\r
-                               </specs>\r
-                               <result_info>\r
-                                       <actual_result>FAIL</actual_result>\r
-                                       <start>Sat Jan 01 2000 13:44:02 GMT+0900 (KST)</start>\r
-                                       <end>Sat Jan 01 2000 13:44:05 GMT+0900 (KST)</end>\r
-                                       <stdout />\r
-                               </result_info>\r
-                       </testcase>\r
-                       <testcase component="WebAPI/Tizen/Alarm" execution_type="auto"\r
-                               id="Alarm_AlarmManager_add_rel" priority="P1"\r
-                               purpose="check AlarmManager method add: add relative alarm" status="approved"\r
-                               type="compliance" result="FAIL">\r
-                               <description>\r
-                                       <pre_condition />\r
-                                       <post_condition />\r
-                                       <steps>\r
-                                               <step order="1">\r
-                                                       <step_desc>check AlarmManager method add: add relative alarm\r
-                                                       </step_desc>\r
-                                                       <expected>AlarmManager method add: add relative alarm succeed\r
-                                                       </expected>\r
-                                               </step>\r
-                                       </steps>\r
-                                       <test_script_entry test_script_expected_result="0">/opt/webapi-tizen-alarm-tests/Alarm/Alarm_AlarmManager_add_rel.htm\r
-                                       </test_script_entry>\r
-                               </description>\r
-                               <specs>\r
-                                       <spec>\r
-                                               <spec_assertion category="Tizen Device API Specifications"\r
-                                                       section="Widget" specification="Widget Packaging and XML Configuration"\r
-                                                       interface="Widget" usage="true" />\r
-                                               <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>\r
-                                               <spec_statement>spec_statement</spec_statement>\r
-                                       </spec>\r
-                               </specs>\r
-                               <result_info>\r
-                                       <actual_result>FAIL</actual_result>\r
-                                       <start>Sat Jan 01 2000 13:44:05 GMT+0900 (KST)</start>\r
-                                       <end>Sat Jan 01 2000 13:44:21 GMT+0900 (KST)</end>\r
-                                       <stdout>Test time out</stdout>\r
-                               </result_info>\r
-                       </testcase>\r
-                       <testcase component="WebAPI/Tizen/Alarm" execution_type="auto"\r
-                               id="Alarm_AlarmRelative_attri_delay_02" priority="P1"\r
-                               purpose="check AlarmAbsolute attribute when create with period"\r
-                               status="approved" type="compliance" result="FAIL">\r
-                               <description>\r
-                                       <pre_condition />\r
-                                       <post_condition />\r
-                                       <steps>\r
-                                               <step order="1">\r
-                                                       <step_desc>check AlarmRelative attribute when create with delay\r
-                                                       </step_desc>\r
-                                                       <expected>AlarmRelative attribute return correct value when\r
-                                                               create succeed with with delay\r
-                                                       </expected>\r
-                                               </step>\r
-                                       </steps>\r
-                                       <test_script_entry test_script_expected_result="0">/opt/webapi-tizen-alarm-tests/Alarm/Alarm_AlarmRelative_attri_delay.htm?total_num=2&amp;locator_key=id&amp;value=2\r
-                                       </test_script_entry>\r
-                               </description>\r
-                               <specs>\r
-                                       <spec>\r
-                                               <spec_assertion category="Tizen Device API Specifications"\r
-                                                       section="Widget" specification="Widget Packaging and XML Configuration"\r
-                                                       interface="Widget" usage="true" />\r
-                                               <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>\r
-                                               <spec_statement>spec_statement</spec_statement>\r
-                                       </spec>\r
-                               </specs>\r
-                               <result_info>\r
-                                       <actual_result>FAIL</actual_result>\r
-                                       <start>Sat Jan 01 2000 13:44:21 GMT+0900 (KST)</start>\r
-                                       <end>Sat Jan 01 2000 13:44:23 GMT+0900 (KST)</end>\r
-                                       <stdout />\r
-                               </result_info>\r
-                       </testcase>\r
-               </set>\r
-       </suite>\r
-       <suite name="webapi-tizen-alarm-tests1" type="">\r
-               <set name="Alarm4">\r
-                       <testcase component="WebAPI/Tizen/Alarm" execution_type="auto"\r
-                               id="Alarm_AlarmRelative_constructor_delay" priority="P1"\r
-                               purpose="check AlarmRelative attribute when create with delay"\r
-                               status="approved" type="compliance" result="PASS">\r
-                               <description>\r
-                                       <pre_condition />\r
-                                       <post_condition />\r
-                                       <steps>\r
-                                               <step order="1">\r
-                                                       <step_desc>check AlarmRelative create constructor with delay\r
-                                                       </step_desc>\r
-                                                       <expected>AlarmRelative create succeed with constructor with\r
-                                                               delay\r
-                                                       </expected>\r
-                                               </step>\r
-                                       </steps>\r
-                                       <test_script_entry test_script_expected_result="0">/opt/webapi-tizen-alarm-tests/Alarm/Alarm_AlarmRelative_constructor_delay.htm\r
-                                       </test_script_entry>\r
-                               </description>\r
-                               <specs>\r
-                                       <spec>\r
-                                               <spec_assertion category="Tizen Device API Specifications"\r
-                                                       section="Widget" specification="Widget Packaging and XML Configuration"\r
-                                                       interface="Widget" usage="true" />\r
-                                               <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>\r
-                                               <spec_statement>spec_statement</spec_statement>\r
-                                       </spec>\r
-                               </specs>\r
-                               <result_info>\r
-                                       <actual_result>PASS</actual_result>\r
-                                       <start>Sat Jan 01 2000 13:43:44 GMT+0900 (KST)</start>\r
-                                       <end>Sat Jan 01 2000 13:43:46 GMT+0900 (KST)</end>\r
-                                       <stdout />\r
-                               </result_info>\r
-                       </testcase>\r
-                       <testcase component="WebAPI/Tizen/Alarm" execution_type="auto"\r
-                               id="Alarm_AlarmManager_get" priority="P1"\r
-                               purpose="check AlarmManager method removeAll: without input attribute"\r
-                               status="approved" type="compliance" result="FAIL">\r
-                               <description>\r
-                                       <pre_condition />\r
-                                       <post_condition />\r
-                                       <steps>\r
-                                               <step order="1">\r
-                                                       <step_desc>check AlarmManager method get: default check\r
-                                                       </step_desc>\r
-                                                       <expected>AlarmManager method get: default check succeed\r
-                                                       </expected>\r
-                                               </step>\r
-                                       </steps>\r
-                                       <test_script_entry test_script_expected_result="0">/opt/webapi-tizen-alarm-tests/Alarm/Alarm_AlarmManager_get.htm\r
-                                       </test_script_entry>\r
-                               </description>\r
-                               <specs>\r
-                                       <spec>\r
-                                               <spec_assertion category="Tizen Device API Specifications"\r
-                                                       section="Widget" specification="Widget Packaging and XML Configuration"\r
-                                                       interface="Widget" usage="true" />\r
-                                               <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>\r
-                                               <spec_statement>spec_statement</spec_statement>\r
-                                       </spec>\r
-                               </specs>\r
-                               <result_info>\r
-                                       <actual_result>FAIL</actual_result>\r
-                                       <start>Sat Jan 01 2000 13:43:46 GMT+0900 (KST)</start>\r
-                                       <end>Sat Jan 01 2000 13:44:02 GMT+0900 (KST)</end>\r
-                                       <stdout>Test time out</stdout>\r
-                               </result_info>\r
-                       </testcase>\r
-                       <testcase component="WebAPI/Tizen/Alarm" execution_type="auto"\r
-                               id="Alarm_AlarmAbsolute_attri_date_01" priority="P1"\r
-                               purpose="check AlarmAbsolute attribute when create with date"\r
-                               status="approved" type="compliance" result="FAIL">\r
-                               <description>\r
-                                       <pre_condition />\r
-                                       <post_condition />\r
-                                       <steps>\r
-                                               <step order="1">\r
-                                                       <step_desc>check AlarmAbsolute attribute when create with date\r
-                                                       </step_desc>\r
-                                                       <expected>AlarmAbsolute attribute return correct value when\r
-                                                               create with date\r
-                                                       </expected>\r
-                                               </step>\r
-                                       </steps>\r
-                                       <test_script_entry test_script_expected_result="0">/opt/webapi-tizen-alarm-tests/Alarm/Alarm_AlarmAbsolute_attri_date.htm?total_num=3&amp;locator_key=id&amp;value=1\r
-                                       </test_script_entry>\r
-                               </description>\r
-                               <specs>\r
-                                       <spec>\r
-                                               <spec_assertion category="Tizen Device API Specifications"\r
-                                                       section="Widget" specification="Widget Packaging and XML Configuration"\r
-                                                       interface="Widget" usage="true" />\r
-                                               <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>\r
-                                               <spec_statement>spec_statement</spec_statement>\r
-                                       </spec>\r
-                               </specs>\r
-                               <result_info>\r
-                                       <actual_result>FAIL</actual_result>\r
-                                       <start>Sat Jan 01 2000 13:44:02 GMT+0900 (KST)</start>\r
-                                       <end>Sat Jan 01 2000 13:44:05 GMT+0900 (KST)</end>\r
-                                       <stdout />\r
-                               </result_info>\r
-                       </testcase>\r
-                       <testcase component="WebAPI/Tizen/Alarm" execution_type="auto"\r
-                               id="Alarm_AlarmManager_add_rel" priority="P1"\r
-                               purpose="check AlarmManager method add: add relative alarm" status="approved"\r
-                               type="compliance" result="FAIL">\r
-                               <description>\r
-                                       <pre_condition />\r
-                                       <post_condition />\r
-                                       <steps>\r
-                                               <step order="1">\r
-                                                       <step_desc>check AlarmManager method add: add relative alarm\r
-                                                       </step_desc>\r
-                                                       <expected>AlarmManager method add: add relative alarm succeed\r
-                                                       </expected>\r
-                                               </step>\r
-                                       </steps>\r
-                                       <test_script_entry test_script_expected_result="0">/opt/webapi-tizen-alarm-tests/Alarm/Alarm_AlarmManager_add_rel.htm\r
-                                       </test_script_entry>\r
-                               </description>\r
-                               <specs>\r
-                                       <spec>\r
-                                               <spec_assertion category="Tizen Device API Specifications"\r
-                                                       section="Widget" specification="Widget Packaging and XML Configuration"\r
-                                                       interface="Widget" usage="true" />\r
-                                               <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>\r
-                                               <spec_statement>spec_statement</spec_statement>\r
-                                       </spec>\r
-                               </specs>\r
-                               <result_info>\r
-                                       <actual_result>FAIL</actual_result>\r
-                                       <start>Sat Jan 01 2000 13:44:05 GMT+0900 (KST)</start>\r
-                                       <end>Sat Jan 01 2000 13:44:21 GMT+0900 (KST)</end>\r
-                                       <stdout>Test time out</stdout>\r
-                               </result_info>\r
-                       </testcase>\r
-                       <testcase component="WebAPI/Tizen/Alarm" execution_type="auto"\r
-                               id="Alarm_AlarmRelative_attri_delay_02" priority="P1"\r
-                               purpose="check AlarmAbsolute attribute when create with period"\r
-                               status="approved" type="compliance" result="FAIL">\r
-                               <description>\r
-                                       <pre_condition />\r
-                                       <post_condition />\r
-                                       <steps>\r
-                                               <step order="1">\r
-                                                       <step_desc>check AlarmRelative attribute when create with delay\r
-                                                       </step_desc>\r
-                                                       <expected>AlarmRelative attribute return correct value when\r
-                                                               create succeed with with delay\r
-                                                       </expected>\r
-                                               </step>\r
-                                       </steps>\r
-                                       <test_script_entry test_script_expected_result="0">/opt/webapi-tizen-alarm-tests/Alarm/Alarm_AlarmRelative_attri_delay.htm?total_num=2&amp;locator_key=id&amp;value=2\r
-                                       </test_script_entry>\r
-                               </description>\r
-                               <specs>\r
-                                       <spec>\r
-                                               <spec_assertion category="Tizen Device API Specifications"\r
-                                                       section="Widget" specification="Widget Packaging and XML Configuration"\r
-                                                       interface="Widget" usage="true" />\r
-                                               <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>\r
-                                               <spec_statement>spec_statement</spec_statement>\r
-                                       </spec>\r
-                               </specs>\r
-                               <result_info>\r
-                                       <actual_result>FAIL</actual_result>\r
-                                       <start>Sat Jan 01 2000 13:44:21 GMT+0900 (KST)</start>\r
-                                       <end>Sat Jan 01 2000 13:44:23 GMT+0900 (KST)</end>\r
-                                       <stdout />\r
-                               </result_info>\r
-                       </testcase>\r
-                       <testcase component="WebAPI/Tizen/Alarm" execution_type="auto"\r
-                               id="Alarm_AlarmManager_getAll" priority="P1"\r
-                               purpose="check AlarmManager method getAll: default check" status="approved"\r
-                               type="compliance" result="FAIL">\r
-                               <description>\r
-                                       <pre_condition />\r
-                                       <post_condition />\r
-                                       <steps>\r
-                                               <step order="1">\r
-                                                       <step_desc>check AlarmManager method getAll: default check\r
-                                                       </step_desc>\r
-                                                       <expected>AlarmManager method getAll: default check succeed\r
-                                                       </expected>\r
-                                               </step>\r
-                                       </steps>\r
-                                       <test_script_entry test_script_expected_result="0">/opt/webapi-tizen-alarm-tests/Alarm/Alarm_AlarmManager_getAll.htm\r
-                                       </test_script_entry>\r
-                               </description>\r
-                               <specs>\r
-                                       <spec>\r
-                                               <spec_assertion category="Tizen Device API Specifications"\r
-                                                       section="Widget" specification="Widget Packaging and XML Configuration"\r
-                                                       interface="Widget" usage="true" />\r
-                                               <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>\r
-                                               <spec_statement>spec_statement</spec_statement>\r
-                                       </spec>\r
-                               </specs>\r
-                               <result_info>\r
-                                       <actual_result>FAIL</actual_result>\r
-                                       <start>Sat Jan 01 2000 13:44:23 GMT+0900 (KST)</start>\r
-                                       <end>Sat Jan 01 2000 13:44:39 GMT+0900 (KST)</end>\r
-                                       <stdout>Test time out</stdout>\r
-                               </result_info>\r
-                       </testcase>\r
-                       <testcase component="WebAPI/Tizen/Alarm" execution_type="auto"\r
-                               id="Alarm_AlarmAbsolute_attri_date_03" priority="P1"\r
-                               purpose="check AlarmAbsolute attribute when create with date"\r
-                               status="approved" type="compliance" result="FAIL">\r
-                               <description>\r
-                                       <pre_condition />\r
-                                       <post_condition />\r
-                                       <steps>\r
-                                               <step order="1">\r
-                                                       <step_desc>check AlarmAbsolute attribute when create with date\r
-                                                       </step_desc>\r
-                                                       <expected>AlarmAbsolute attribute return correct value when\r
-                                                               create with date\r
-                                                       </expected>\r
-                                               </step>\r
-                                       </steps>\r
-                                       <test_script_entry test_script_expected_result="0">/opt/webapi-tizen-alarm-tests/Alarm/Alarm_AlarmAbsolute_attri_date.htm?total_num=3&amp;locator_key=id&amp;value=3\r
-                                       </test_script_entry>\r
-                               </description>\r
-                               <specs>\r
-                                       <spec>\r
-                                               <spec_assertion category="Tizen Device API Specifications"\r
-                                                       section="Widget" specification="Widget Packaging and XML Configuration"\r
-                                                       interface="Widget" usage="true" />\r
-                                               <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>\r
-                                               <spec_statement>spec_statement</spec_statement>\r
-                                       </spec>\r
-                               </specs>\r
-                               <result_info>\r
-                                       <actual_result>FAIL</actual_result>\r
-                                       <start>Sat Jan 01 2000 13:44:39 GMT+0900 (KST)</start>\r
-                                       <end>Sat Jan 01 2000 13:44:41 GMT+0900 (KST)</end>\r
-                                       <stdout />\r
-                               </result_info>\r
-                       </testcase>\r
-                       <testcase component="WebAPI/Tizen/Alarm" execution_type="auto"\r
-                               id="Alarm_AlarmAbsolute_getNextScheduledDate_date" priority="P1"\r
-                               purpose="check AlarmAbsolute method getNextScheduledDate when create with date"\r
-                               status="approved" type="compliance" result="FAIL">\r
-                               <description>\r
-                                       <pre_condition />\r
-                                       <post_condition />\r
-                                       <steps>\r
-                                               <step order="1">\r
-                                                       <step_desc>check AlarmAbsolute method getNextScheduledDate when\r
-                                                               create with date\r
-                                                       </step_desc>\r
-                                                       <expected>AlarmAbsolute method getNextScheduledDate return\r
-                                                               correct value when create with date\r
-                                                       </expected>\r
-                                               </step>\r
-                                       </steps>\r
-                                       <test_script_entry test_script_expected_result="0">/opt/webapi-tizen-alarm-tests/Alarm/Alarm_AlarmAbsolute_getNextScheduledDate_date.htm\r
-                                       </test_script_entry>\r
-                               </description>\r
-                               <specs>\r
-                                       <spec>\r
-                                               <spec_assertion category="Tizen Device API Specifications"\r
-                                                       section="Widget" specification="Widget Packaging and XML Configuration"\r
-                                                       interface="Widget" usage="true" />\r
-                                               <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>\r
-                                               <spec_statement>spec_statement</spec_statement>\r
-                                       </spec>\r
-                               </specs>\r
-                               <result_info>\r
-                                       <actual_result>FAIL</actual_result>\r
-                                       <start>Sat Jan 01 2000 13:44:41 GMT+0900 (KST)</start>\r
-                                       <end>Sat Jan 01 2000 13:44:57 GMT+0900 (KST)</end>\r
-                                       <stdout>Test time out</stdout>\r
-                               </result_info>\r
-                       </testcase>\r
-                       <testcase component="WebAPI/Tizen/Alarm" execution_type="auto"\r
-                               id="Alarm_AlarmAbsolute_constructor_date" priority="P1"\r
-                               purpose="check AlarmAbsolute create constructor with date" status="approved"\r
-                               type="compliance" result="FAIL">\r
-                               <description>\r
-                                       <pre_condition />\r
-                                       <post_condition />\r
-                                       <steps>\r
-                                               <step order="1">\r
-                                                       <step_desc>check AlarmAbsolute create constructor with date\r
-                                                       </step_desc>\r
-                                                       <expected>AlarmAbsolute create succeed with constructor with date\r
-                                                       </expected>\r
-                                               </step>\r
-                                       </steps>\r
-                                       <test_script_entry test_script_expected_result="0">/opt/webapi-tizen-alarm-tests/Alarm/Alarm_AlarmAbsolute_constructor_date.htm\r
-                                       </test_script_entry>\r
-                               </description>\r
-                               <specs>\r
-                                       <spec>\r
-                                               <spec_assertion category="Tizen Device API Specifications"\r
-                                                       section="Widget" specification="Widget Packaging and XML Configuration"\r
-                                                       interface="Widget" usage="true" />\r
-                                               <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>\r
-                                               <spec_statement>spec_statement</spec_statement>\r
-                                       </spec>\r
-                               </specs>\r
-                               <result_info>\r
-                                       <actual_result>FAIL</actual_result>\r
-                                       <start>Sat Jan 01 2000 13:44:57 GMT+0900 (KST)</start>\r
-                                       <end>Sat Jan 01 2000 13:45:13 GMT+0900 (KST)</end>\r
-                                       <stdout>Test time out</stdout>\r
-                               </result_info>\r
-                       </testcase>\r
-                       <testcase component="WebAPI/Tizen/Alarm" execution_type="auto"\r
-                               id="Alarm_AlarmRelative_getRemainingSeconds_delay" priority="P1"\r
-                               purpose="check AlarmRelative method getNextScheduleddelay when create with delay"\r
-                               status="approved" type="compliance" result="FAIL">\r
-                               <description>\r
-                                       <pre_condition />\r
-                                       <post_condition />\r
-                                       <steps>\r
-                                               <step order="1">\r
-                                                       <step_desc>check AlarmRelative method getNextScheduleddelay when\r
-                                                               create with delay\r
-                                                       </step_desc>\r
-                                                       <expected>AlarmRelative method getNextScheduleddelay return\r
-                                                               correct value when create succeed with with delay\r
-                                                       </expected>\r
-                                               </step>\r
-                                       </steps>\r
-                                       <test_script_entry test_script_expected_result="0">/opt/webapi-tizen-alarm-tests/Alarm/Alarm_AlarmRelative_getRemainingSeconds_delay.htm\r
-                                       </test_script_entry>\r
-                               </description>\r
-                               <specs>\r
-                                       <spec>\r
-                                               <spec_assertion category="Tizen Device API Specifications"\r
-                                                       section="Widget" specification="Widget Packaging and XML Configuration"\r
-                                                       interface="Widget" usage="true" />\r
-                                               <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>\r
-                                               <spec_statement>spec_statement</spec_statement>\r
-                                       </spec>\r
-                               </specs>\r
-                               <result_info>\r
-                                       <actual_result>FAIL</actual_result>\r
-                                       <start>Sat Jan 01 2000 13:45:13 GMT+0900 (KST)</start>\r
-                                       <end>Sat Jan 01 2000 13:45:30 GMT+0900 (KST)</end>\r
-                                       <stdout>Test time out</stdout>\r
-                               </result_info>\r
-                       </testcase>\r
-                       <testcase component="WebAPI/Tizen/Alarm" execution_type="auto"\r
-                               id="Alarm_AlarmRelative_attri_delay_01" priority="P1"\r
-                               purpose="check AlarmAbsolute attribute when create with period"\r
-                               status="approved" type="compliance" result="FAIL">\r
-                               <description>\r
-                                       <pre_condition />\r
-                                       <post_condition />\r
-                                       <steps>\r
-                                               <step order="1">\r
-                                                       <step_desc>check AlarmRelative attribute when create with delay\r
-                                                       </step_desc>\r
-                                                       <expected>AlarmRelative attribute return correct value when\r
-                                                               create succeed with with delay\r
-                                                       </expected>\r
-                                               </step>\r
-                                       </steps>\r
-                                       <test_script_entry test_script_expected_result="0">/opt/webapi-tizen-alarm-tests/Alarm/Alarm_AlarmRelative_attri_delay.htm?total_num=2&amp;locator_key=id&amp;value=1\r
-                                       </test_script_entry>\r
-                               </description>\r
-                               <specs>\r
-                                       <spec>\r
-                                               <spec_assertion category="Tizen Device API Specifications"\r
-                                                       section="Widget" specification="Widget Packaging and XML Configuration"\r
-                                                       interface="Widget" usage="true" />\r
-                                               <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>\r
-                                               <spec_statement>spec_statement</spec_statement>\r
-                                       </spec>\r
-                               </specs>\r
-                               <result_info>\r
-                                       <actual_result>FAIL</actual_result>\r
-                                       <start>Sat Jan 01 2000 13:45:30 GMT+0900 (KST)</start>\r
-                                       <end>Sat Jan 01 2000 13:45:32 GMT+0900 (KST)</end>\r
-                                       <stdout />\r
-                               </result_info>\r
-                       </testcase>\r
-                       <testcase component="WebAPI/Tizen/Alarm" execution_type="auto"\r
-                               id="Alarm_AlarmManager_add_abs" priority="P1"\r
-                               purpose="check AlarmManager method add: add absolute alarm" status="approved"\r
-                               type="compliance" result="FAIL">\r
-                               <description>\r
-                                       <pre_condition />\r
-                                       <post_condition />\r
-                                       <steps>\r
-                                               <step order="1">\r
-                                                       <step_desc>check AlarmManager method add: add absolute alarm\r
-                                                       </step_desc>\r
-                                                       <expected>AlarmManager method add: add absolute alarm succeed\r
-                                                       </expected>\r
-                                               </step>\r
-                                       </steps>\r
-                                       <test_script_entry test_script_expected_result="0">/opt/webapi-tizen-alarm-tests/Alarm/Alarm_AlarmManager_add_abs.htm\r
-                                       </test_script_entry>\r
-                               </description>\r
-                               <specs>\r
-                                       <spec>\r
-                                               <spec_assertion category="Tizen Device API Specifications"\r
-                                                       section="Widget" specification="Widget Packaging and XML Configuration"\r
-                                                       interface="Widget" usage="true" />\r
-                                               <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>\r
-                                               <spec_statement>spec_statement</spec_statement>\r
-                                       </spec>\r
-                               </specs>\r
-                               <result_info>\r
-                                       <actual_result>FAIL</actual_result>\r
-                                       <start>Sat Jan 01 2000 13:45:32 GMT+0900 (KST)</start>\r
-                                       <end>Sat Jan 01 2000 13:45:48 GMT+0900 (KST)</end>\r
-                                       <stdout>Test time out</stdout>\r
-                               </result_info>\r
-                       </testcase>\r
-                       <testcase component="WebAPI/Tizen/Alarm" execution_type="auto"\r
-                               id="Alarm_AlarmAbsolute_attri_date_02" priority="P1"\r
-                               purpose="check AlarmAbsolute attribute when create with date"\r
-                               status="approved" type="compliance" result="FAIL">\r
-                               <description>\r
-                                       <pre_condition />\r
-                                       <post_condition />\r
-                                       <steps>\r
-                                               <step order="1">\r
-                                                       <step_desc>check AlarmAbsolute attribute when create with date\r
-                                                       </step_desc>\r
-                                                       <expected>AlarmAbsolute attribute return correct value when\r
-                                                               create with date\r
-                                                       </expected>\r
-                                               </step>\r
-                                       </steps>\r
-                                       <test_script_entry test_script_expected_result="0">/opt/webapi-tizen-alarm-tests/Alarm/Alarm_AlarmAbsolute_attri_date.htm?total_num=3&amp;locator_key=id&amp;value=2\r
-                                       </test_script_entry>\r
-                               </description>\r
-                               <specs>\r
-                                       <spec>\r
-                                               <spec_assertion category="Tizen Device API Specifications"\r
-                                                       section="Widget" specification="Widget Packaging and XML Configuration"\r
-                                                       interface="Widget" usage="true" />\r
-                                               <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>\r
-                                               <spec_statement>spec_statement</spec_statement>\r
-                                       </spec>\r
-                               </specs>\r
-                               <result_info>\r
-                                       <actual_result>FAIL</actual_result>\r
-                                       <start>Sat Jan 01 2000 13:45:48 GMT+0900 (KST)</start>\r
-                                       <end>Sat Jan 01 2000 13:45:50 GMT+0900 (KST)</end>\r
-                                       <stdout />\r
-                               </result_info>\r
-                       </testcase>\r
-                       <testcase component="WebAPI/Tizen/Alarm" execution_type="auto"\r
-                               id="Alarm_AlarmManager_removeAll" priority="P1"\r
-                               purpose="check AlarmManager method removeAll: default check" status="approved"\r
-                               type="compliance" result="FAIL">\r
-                               <description>\r
-                                       <pre_condition />\r
-                                       <post_condition />\r
-                                       <steps>\r
-                                               <step order="1">\r
-                                                       <step_desc>check AlarmManager method removeAll: default check\r
-                                                       </step_desc>\r
-                                                       <expected>AlarmManager method removeAll: default check succeed\r
-                                                       </expected>\r
-                                               </step>\r
-                                       </steps>\r
-                                       <test_script_entry test_script_expected_result="0">/opt/webapi-tizen-alarm-tests/Alarm/Alarm_AlarmManager_removeAll.htm\r
-                                       </test_script_entry>\r
-                               </description>\r
-                               <specs>\r
-                                       <spec>\r
-                                               <spec_assertion category="Tizen Device API Specifications"\r
-                                                       section="Widget" specification="Widget Packaging and XML Configuration"\r
-                                                       interface="Widget" usage="true" />\r
-                                               <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>\r
-                                               <spec_statement>spec_statement</spec_statement>\r
-                                       </spec>\r
-                               </specs>\r
-                               <result_info>\r
-                                       <actual_result>FAIL</actual_result>\r
-                                       <start>Sat Jan 01 2000 13:45:50 GMT+0900 (KST)</start>\r
-                                       <end>Sat Jan 01 2000 13:46:06 GMT+0900 (KST)</end>\r
-                                       <stdout>Test time out</stdout>\r
-                               </result_info>\r
-                       </testcase>\r
-                       <testcase component="WebAPI/Tizen/Alarm" execution_type="auto"\r
-                               id="Alarm_AlarmManager_remove" priority="P1"\r
-                               purpose="check AlarmManager method remove: default check" status="approved"\r
-                               type="compliance" result="FAIL">\r
-                               <description>\r
-                                       <pre_condition />\r
-                                       <post_condition />\r
-                                       <steps>\r
-                                               <step order="1">\r
-                                                       <step_desc>check AlarmManager method remove: default check\r
-                                                       </step_desc>\r
-                                                       <expected>AlarmManager method remove: default check succeed\r
-                                                       </expected>\r
-                                               </step>\r
-                                       </steps>\r
-                                       <test_script_entry test_script_expected_result="0">/opt/webapi-tizen-alarm-tests/Alarm/Alarm_AlarmManager_remove.htm\r
-                                       </test_script_entry>\r
-                               </description>\r
-                               <specs>\r
-                                       <spec>\r
-                                               <spec_assertion category="Tizen Device API Specifications"\r
-                                                       section="Widget" specification="Widget Packaging and XML Configuration"\r
-                                                       interface="Widget" usage="true" />\r
-                                               <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>\r
-                                               <spec_statement>spec_statement</spec_statement>\r
-                                       </spec>\r
-                               </specs>\r
-                               <result_info>\r
-                                       <actual_result>FAIL</actual_result>\r
-                                       <start>Sat Jan 01 2000 13:46:06 GMT+0900 (KST)</start>\r
-                                       <end>Sat Jan 01 2000 13:46:22 GMT+0900 (KST)</end>\r
-                                       <stdout>Test time out</stdout>\r
-                               </result_info>\r
-                       </testcase>\r
-                       <testcase component="WebAPI/Tizen/Alarm" execution_type="auto"\r
-                               id="Alarm_AlarmManagerObject_exist" priority="P1"\r
-                               purpose="check AlarmManagerObject existance" status="approved" type="compliance"\r
-                               result="FAIL">\r
-                               <description>\r
-                                       <pre_condition />\r
-                                       <post_condition />\r
-                                       <steps>\r
-                                               <step order="1">\r
-                                                       <step_desc>check AlarmManagerObject exist</step_desc>\r
-                                                       <expected>AlarmManagerObject exist</expected>\r
-                                               </step>\r
-                                       </steps>\r
-                                       <test_script_entry test_script_expected_result="">/opt/webapi-tizen-alarm-tests/Alarm/Alarm_AlarmManagerObject_exist.htm\r
-                                       </test_script_entry>\r
-                               </description>\r
-                               <specs>\r
-                                       <spec>\r
-                                               <spec_assertion category="Tizen Device API Specifications"\r
-                                                       section="Widget" specification="Widget Packaging and XML Configuration"\r
-                                                       interface="Widget" usage="true" />\r
-                                               <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>\r
-                                               <spec_statement>spec_statement</spec_statement>\r
-                                       </spec>\r
-                               </specs>\r
-                               <result_info>\r
-                                       <actual_result>FAIL</actual_result>\r
-                                       <start>Sat Jan 01 2000 13:46:22 GMT+0900 (KST)</start>\r
-                                       <end>Sat Jan 01 2000 13:46:38 GMT+0900 (KST)</end>\r
-                                       <stdout>Test time out</stdout>\r
-                               </result_info>\r
-                       </testcase>\r
-                       <testcase component="WebAPI/Tizen/Alarm" execution_type="auto"\r
-                               id="Alarm_AlarmManager_const_check_01" priority="P1"\r
-                               purpose="Check AlarmManager constants:PERIOD_MINUTE" status="approved"\r
-                               type="compliance" result="FAIL">\r
-                               <description>\r
-                                       <pre_condition />\r
-                                       <post_condition />\r
-                                       <steps>\r
-                                               <step order="1">\r
-                                                       <step_desc>Check AlarmManager constants:</step_desc>\r
-                                                       <expected>AlarmManager constants value is correct:</expected>\r
-                                               </step>\r
-                                       </steps>\r
-                                       <test_script_entry test_script_expected_result="0">/opt/webapi-tizen-alarm-tests/Alarm/Alarm_AlarmManager_const_check.htm?total_num=4&amp;locator_key=id&amp;value=1\r
-                                       </test_script_entry>\r
-                               </description>\r
-                               <specs>\r
-                                       <spec>\r
-                                               <spec_assertion category="Tizen Device API Specifications"\r
-                                                       section="Widget" specification="Widget Packaging and XML Configuration"\r
-                                                       interface="Widget" usage="true" />\r
-                                               <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>\r
-                                               <spec_statement>spec_statement</spec_statement>\r
-                                       </spec>\r
-                               </specs>\r
-                               <result_info>\r
-                                       <actual_result>FAIL</actual_result>\r
-                                       <start>Sat Jan 01 2000 13:46:38 GMT+0900 (KST)</start>\r
-                                       <end>Sat Jan 01 2000 13:46:40 GMT+0900 (KST)</end>\r
-                                       <stdout>Can't find variable: tizen</stdout>\r
-                               </result_info>\r
-                       </testcase>\r
-                       <testcase component="WebAPI/Tizen/Alarm" execution_type="auto"\r
-                               id="Alarm_AlarmManager_const_check_02" priority="P1"\r
-                               purpose="Check AlarmManager constants:PERIOD_HOUR" status="approved"\r
-                               type="compliance" result="FAIL">\r
-                               <description>\r
-                                       <pre_condition />\r
-                                       <post_condition />\r
-                                       <steps>\r
-                                               <step order="1">\r
-                                                       <step_desc>Check AlarmManager constants:</step_desc>\r
-                                                       <expected>AlarmManager constants value is correct:</expected>\r
-                                               </step>\r
-                                       </steps>\r
-                                       <test_script_entry test_script_expected_result="0">/opt/webapi-tizen-alarm-tests/Alarm/Alarm_AlarmManager_const_check.htm?total_num=4&amp;locator_key=id&amp;value=2\r
-                                       </test_script_entry>\r
-                               </description>\r
-                               <specs>\r
-                                       <spec>\r
-                                               <spec_assertion category="Tizen Device API Specifications"\r
-                                                       section="Widget" specification="Widget Packaging and XML Configuration"\r
-                                                       interface="Widget" usage="true" />\r
-                                               <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>\r
-                                               <spec_statement>spec_statement</spec_statement>\r
-                                       </spec>\r
-                               </specs>\r
-                               <result_info>\r
-                                       <actual_result>FAIL</actual_result>\r
-                                       <start>Sat Jan 01 2000 13:46:40 GMT+0900 (KST)</start>\r
-                                       <end>Sat Jan 01 2000 13:46:42 GMT+0900 (KST)</end>\r
-                                       <stdout>Can't find variable: tizen</stdout>\r
-                               </result_info>\r
-                       </testcase>\r
-                       <testcase component="WebAPI/Tizen/Alarm" execution_type="auto"\r
-                               id="Alarm_AlarmManager_const_check_03" priority="P1"\r
-                               purpose="Check AlarmManager constants:PERIOD_DAY" status="approved"\r
-                               type="compliance" result="FAIL">\r
-                               <description>\r
-                                       <pre_condition />\r
-                                       <post_condition />\r
-                                       <steps>\r
-                                               <step order="1">\r
-                                                       <step_desc>Check AlarmManager constants:</step_desc>\r
-                                                       <expected>AlarmManager constants value is correct:</expected>\r
-                                               </step>\r
-                                       </steps>\r
-                                       <test_script_entry test_script_expected_result="0">/opt/webapi-tizen-alarm-tests/Alarm/Alarm_AlarmManager_const_check.htm?total_num=4&amp;locator_key=id&amp;value=3\r
-                                       </test_script_entry>\r
-                               </description>\r
-                               <specs>\r
-                                       <spec>\r
-                                               <spec_assertion category="Tizen Device API Specifications"\r
-                                                       section="Widget" specification="Widget Packaging and XML Configuration"\r
-                                                       interface="Widget" usage="true" />\r
-                                               <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>\r
-                                               <spec_statement>spec_statement</spec_statement>\r
-                                       </spec>\r
-                               </specs>\r
-                               <result_info>\r
-                                       <actual_result>FAIL</actual_result>\r
-                                       <start>Sat Jan 01 2000 13:46:42 GMT+0900 (KST)</start>\r
-                                       <end>Sat Jan 01 2000 13:46:44 GMT+0900 (KST)</end>\r
-                                       <stdout>Can't find variable: tizen</stdout>\r
-                               </result_info>\r
-                       </testcase>\r
-                       <testcase component="WebAPI/Tizen/Alarm" execution_type="auto"\r
-                               id="Alarm_AlarmManager_const_check_04" priority="P1"\r
-                               purpose="Check AlarmManager constants:PERIOD_WEEK" status="approved"\r
-                               type="compliance" result="FAIL">\r
-                               <description>\r
-                                       <pre_condition />\r
-                                       <post_condition />\r
-                                       <steps>\r
-                                               <step order="1">\r
-                                                       <step_desc>Check AlarmManager constants:</step_desc>\r
-                                                       <expected>AlarmManager constants value is correct:</expected>\r
-                                               </step>\r
-                                       </steps>\r
-                                       <test_script_entry test_script_expected_result="0">/opt/webapi-tizen-alarm-tests/Alarm/Alarm_AlarmManager_const_check.htm?total_num=4&amp;locator_key=id&amp;value=4\r
-                                       </test_script_entry>\r
-                               </description>\r
-                               <specs>\r
-                                       <spec>\r
-                                               <spec_assertion category="Tizen Device API Specifications"\r
-                                                       section="Widget" specification="Widget Packaging and XML Configuration"\r
-                                                       interface="Widget" usage="true" />\r
-                                               <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>\r
-                                               <spec_statement>spec_statement</spec_statement>\r
-                                       </spec>\r
-                               </specs>\r
-                               <result_info>\r
-                                       <actual_result>FAIL</actual_result>\r
-                                       <start>Sat Jan 01 2000 13:46:44 GMT+0900 (KST)</start>\r
-                                       <end>Sat Jan 01 2000 13:46:46 GMT+0900 (KST)</end>\r
-                                       <stdout>Can't find variable: tizen</stdout>\r
-                               </result_info>\r
-                       </testcase>\r
-               </set>\r
-               <set name="Alarm3">\r
-                       <testcase component="WebAPI/Tizen/Alarm" execution_type="auto"\r
-                               id="Alarm_AlarmRelative_constructor_delay" priority="P1"\r
-                               purpose="check AlarmRelative attribute when create with delay"\r
-                               status="approved" type="compliance" result="PASS">\r
-                               <description>\r
-                                       <pre_condition />\r
-                                       <post_condition />\r
-                                       <steps>\r
-                                               <step order="1">\r
-                                                       <step_desc>check AlarmRelative create constructor with delay\r
-                                                       </step_desc>\r
-                                                       <expected>AlarmRelative create succeed with constructor with\r
-                                                               delay\r
-                                                       </expected>\r
-                                               </step>\r
-                                       </steps>\r
-                                       <test_script_entry test_script_expected_result="0">/opt/webapi-tizen-alarm-tests/Alarm/Alarm_AlarmRelative_constructor_delay.htm\r
-                                       </test_script_entry>\r
-                               </description>\r
-                               <specs>\r
-                                       <spec>\r
-                                               <spec_assertion category="Tizen Device API Specifications"\r
-                                                       section="Widget" specification="Widget Packaging and XML Configuration"\r
-                                                       interface="Widget" usage="true" />\r
-                                               <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>\r
-                                               <spec_statement>spec_statement</spec_statement>\r
-                                       </spec>\r
-                               </specs>\r
-                               <result_info>\r
-                                       <actual_result>PASS</actual_result>\r
-                                       <start>Sat Jan 01 2000 13:43:44 GMT+0900 (KST)</start>\r
-                                       <end>Sat Jan 01 2000 13:43:46 GMT+0900 (KST)</end>\r
-                                       <stdout />\r
-                               </result_info>\r
-                       </testcase>\r
-                       <testcase component="WebAPI/Tizen/Alarm" execution_type="auto"\r
-                               id="Alarm_AlarmManager_get" priority="P1"\r
-                               purpose="check AlarmManager method removeAll: without input attribute"\r
-                               status="approved" type="compliance" result="FAIL">\r
-                               <description>\r
-                                       <pre_condition />\r
-                                       <post_condition />\r
-                                       <steps>\r
-                                               <step order="1">\r
-                                                       <step_desc>check AlarmManager method get: default check\r
-                                                       </step_desc>\r
-                                                       <expected>AlarmManager method get: default check succeed\r
-                                                       </expected>\r
-                                               </step>\r
-                                       </steps>\r
-                                       <test_script_entry test_script_expected_result="0">/opt/webapi-tizen-alarm-tests/Alarm/Alarm_AlarmManager_get.htm\r
-                                       </test_script_entry>\r
-                               </description>\r
-                               <specs>\r
-                                       <spec>\r
-                                               <spec_assertion category="Tizen Device API Specifications"\r
-                                                       section="Widget" specification="Widget Packaging and XML Configuration"\r
-                                                       interface="Widget" usage="true" />\r
-                                               <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>\r
-                                               <spec_statement>spec_statement</spec_statement>\r
-                                       </spec>\r
-                               </specs>\r
-                               <result_info>\r
-                                       <actual_result>FAIL</actual_result>\r
-                                       <start>Sat Jan 01 2000 13:43:46 GMT+0900 (KST)</start>\r
-                                       <end>Sat Jan 01 2000 13:44:02 GMT+0900 (KST)</end>\r
-                                       <stdout>Test time out</stdout>\r
-                               </result_info>\r
-                       </testcase>\r
-                       <testcase component="WebAPI/Tizen/Alarm" execution_type="auto"\r
-                               id="Alarm_AlarmAbsolute_attri_date_01" priority="P1"\r
-                               purpose="check AlarmAbsolute attribute when create with date"\r
-                               status="approved" type="compliance" result="FAIL">\r
-                               <description>\r
-                                       <pre_condition />\r
-                                       <post_condition />\r
-                                       <steps>\r
-                                               <step order="1">\r
-                                                       <step_desc>check AlarmAbsolute attribute when create with date\r
-                                                       </step_desc>\r
-                                                       <expected>AlarmAbsolute attribute return correct value when\r
-                                                               create with date\r
-                                                       </expected>\r
-                                               </step>\r
-                                       </steps>\r
-                                       <test_script_entry test_script_expected_result="0">/opt/webapi-tizen-alarm-tests/Alarm/Alarm_AlarmAbsolute_attri_date.htm?total_num=3&amp;locator_key=id&amp;value=1\r
-                                       </test_script_entry>\r
-                               </description>\r
-                               <specs>\r
-                                       <spec>\r
-                                               <spec_assertion category="Tizen Device API Specifications"\r
-                                                       section="Widget" specification="Widget Packaging and XML Configuration"\r
-                                                       interface="Widget" usage="true" />\r
-                                               <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>\r
-                                               <spec_statement>spec_statement</spec_statement>\r
-                                       </spec>\r
-                               </specs>\r
-                               <result_info>\r
-                                       <actual_result>FAIL</actual_result>\r
-                                       <start>Sat Jan 01 2000 13:44:02 GMT+0900 (KST)</start>\r
-                                       <end>Sat Jan 01 2000 13:44:05 GMT+0900 (KST)</end>\r
-                                       <stdout />\r
-                               </result_info>\r
-                       </testcase>\r
-                       <testcase component="WebAPI/Tizen/Alarm" execution_type="auto"\r
-                               id="Alarm_AlarmManager_add_rel" priority="P1"\r
-                               purpose="check AlarmManager method add: add relative alarm" status="approved"\r
-                               type="compliance" result="FAIL">\r
-                               <description>\r
-                                       <pre_condition />\r
-                                       <post_condition />\r
-                                       <steps>\r
-                                               <step order="1">\r
-                                                       <step_desc>check AlarmManager method add: add relative alarm\r
-                                                       </step_desc>\r
-                                                       <expected>AlarmManager method add: add relative alarm succeed\r
-                                                       </expected>\r
-                                               </step>\r
-                                       </steps>\r
-                                       <test_script_entry test_script_expected_result="0">/opt/webapi-tizen-alarm-tests/Alarm/Alarm_AlarmManager_add_rel.htm\r
-                                       </test_script_entry>\r
-                               </description>\r
-                               <specs>\r
-                                       <spec>\r
-                                               <spec_assertion category="Tizen Device API Specifications"\r
-                                                       section="Widget" specification="Widget Packaging and XML Configuration"\r
-                                                       interface="Widget" usage="true" />\r
-                                               <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>\r
-                                               <spec_statement>spec_statement</spec_statement>\r
-                                       </spec>\r
-                               </specs>\r
-                               <result_info>\r
-                                       <actual_result>FAIL</actual_result>\r
-                                       <start>Sat Jan 01 2000 13:44:05 GMT+0900 (KST)</start>\r
-                                       <end>Sat Jan 01 2000 13:44:21 GMT+0900 (KST)</end>\r
-                                       <stdout>Test time out</stdout>\r
-                               </result_info>\r
-                       </testcase>\r
-                       <testcase component="WebAPI/Tizen/Alarm" execution_type="auto"\r
-                               id="Alarm_AlarmRelative_attri_delay_02" priority="P1"\r
-                               purpose="check AlarmAbsolute attribute when create with period"\r
-                               status="approved" type="compliance" result="FAIL">\r
-                               <description>\r
-                                       <pre_condition />\r
-                                       <post_condition />\r
-                                       <steps>\r
-                                               <step order="1">\r
-                                                       <step_desc>check AlarmRelative attribute when create with delay\r
-                                                       </step_desc>\r
-                                                       <expected>AlarmRelative attribute return correct value when\r
-                                                               create succeed with with delay\r
-                                                       </expected>\r
-                                               </step>\r
-                                       </steps>\r
-                                       <test_script_entry test_script_expected_result="0">/opt/webapi-tizen-alarm-tests/Alarm/Alarm_AlarmRelative_attri_delay.htm?total_num=2&amp;locator_key=id&amp;value=2\r
-                                       </test_script_entry>\r
-                               </description>\r
-                               <specs>\r
-                                       <spec>\r
-                                               <spec_assertion category="Tizen Device API Specifications"\r
-                                                       section="Widget" specification="Widget Packaging and XML Configuration"\r
-                                                       interface="Widget" usage="true" />\r
-                                               <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>\r
-                                               <spec_statement>spec_statement</spec_statement>\r
-                                       </spec>\r
-                               </specs>\r
-                               <result_info>\r
-                                       <actual_result>FAIL</actual_result>\r
-                                       <start>Sat Jan 01 2000 13:44:21 GMT+0900 (KST)</start>\r
-                                       <end>Sat Jan 01 2000 13:44:23 GMT+0900 (KST)</end>\r
-                                       <stdout />\r
-                               </result_info>\r
-                       </testcase>\r
-               </set>\r
-       </suite>\r
-</test_definition>\r
diff --git a/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite1.0/xsd/test_definition.xsd b/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite1.0/xsd/test_definition.xsd
deleted file mode 100755 (executable)
index 9653308..0000000
+++ /dev/null
@@ -1,383 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
-
-       <xs:element name="suite">
-
-
-               <xs:complexType>
-
-                       <xs:sequence minOccurs="1" maxOccurs="unbounded">
-                               <xs:element ref="set" minOccurs="0" maxOccurs="unbounded"></xs:element>
-                       </xs:sequence>
-
-                       <xs:attributeGroup ref="set_attribute_group"></xs:attributeGroup>
-                       <xs:attribute name="launcher" type="xs:string"></xs:attribute>
-               </xs:complexType>
-               <xs:unique name="uniqueSetName">
-                       <xs:selector xpath=".//set" />
-                       <xs:field xpath="@name" />
-               </xs:unique>
-       </xs:element>
-
-       <xs:element name="set">
-
-               <xs:complexType>
-                       <xs:sequence>
-                               <xs:element name="capabilities" type="CapabilitiesType"
-                                       minOccurs="0" maxOccurs="1">
-                               </xs:element>
-                               <xs:sequence minOccurs="1" maxOccurs="unbounded">
-                                       <xs:element ref="testcase" minOccurs="0"
-                                               maxOccurs="unbounded">
-                                       </xs:element>
-                               </xs:sequence>
-                       </xs:sequence>
-
-
-
-                       <xs:attributeGroup ref="set_attribute_group"></xs:attributeGroup>
-                       <xs:attribute name="launcher" type="xs:string"></xs:attribute>
-                       <xs:attribute name="set_debug_msg" type="xs:string"></xs:attribute>
-               </xs:complexType>
-               <xs:unique name="uniqueCaseName">
-                       <xs:selector xpath=".//testcase" />
-                       <xs:field xpath="@id" />
-               </xs:unique>
-       </xs:element>
-
-       <xs:element name="testcase">
-               <xs:complexType>
-                       <xs:sequence minOccurs="1">
-                               <xs:element ref="description"></xs:element>
-                               <xs:element name="categories" type="categories"
-                                       minOccurs="0" maxOccurs="1">
-                               </xs:element>
-                               <xs:element name="measurement" type="measurementType"
-                                       minOccurs="0" maxOccurs="unbounded">
-                               </xs:element>
-                               <xs:element name="series" type="seriesType" minOccurs="0"
-                                       maxOccurs="unbounded">
-                               </xs:element>
-                               <xs:element name="specs" type="specsType" minOccurs="0"
-                                       maxOccurs="1">
-                               </xs:element>
-                               <xs:element name="result_info" type="result_info_type"
-                                       minOccurs="0">
-                               </xs:element>
-                       </xs:sequence>
-
-                       <xs:attributeGroup ref="case_attribute_group"></xs:attributeGroup>
-               </xs:complexType>
-       </xs:element>
-
-       <xs:element name="steps">
-               <xs:complexType>
-                       <xs:sequence minOccurs="0" maxOccurs="unbounded">
-                               <xs:element ref="step"></xs:element>
-                       </xs:sequence>
-               </xs:complexType>
-               <xs:unique name="uniqueStepName">
-                       <xs:selector xpath=".//step" />
-                       <xs:field xpath="@order" />
-               </xs:unique>
-       </xs:element>
-
-       <xs:attributeGroup name="set_attribute_group">
-
-               <xs:attribute name="name" type="xs:anyURI" use="required"></xs:attribute>
-               <xs:attribute name="type" type="xs:string"></xs:attribute>
-       </xs:attributeGroup>
-
-       <xs:attributeGroup name="case_attribute_group">
-
-               <xs:attribute name="id" use="required">
-                       <xs:simpleType>
-                               <xs:restriction base="xs:string">
-                                       <xs:minLength value="1"></xs:minLength>
-                                       <xs:whiteSpace value="collapse"></xs:whiteSpace>
-                               </xs:restriction>
-                       </xs:simpleType>
-               </xs:attribute>
-
-               <xs:attribute name="priority" type="priority_simple_type"
-                       use="required">
-               </xs:attribute>
-
-               <xs:attribute name="execution_type" type="execution_type_simple_type"
-                       use="required">
-               </xs:attribute>
-
-               <xs:attribute name="component" type="xs:string"></xs:attribute>
-
-               <xs:attribute name="requirement_ref" type="xs:anyURI"
-                       use="optional">
-               </xs:attribute>
-
-               <xs:attribute name="status" type="status_type" use="required"></xs:attribute>
-
-               <xs:attribute name="type" type="case_type_type" use="required">
-               </xs:attribute>
-               <xs:attribute name="purpose" type="xs:string"></xs:attribute>
-               <xs:attribute name="result" type="xs:string"></xs:attribute>
-               <xs:attribute name="onload_delay" type="xs:int" use="optional"
-                       default="3">
-               </xs:attribute>
-       </xs:attributeGroup>
-
-       <xs:simpleType name="priority_simple_type">
-               <xs:restriction base="xs:string">
-
-                       <xs:enumeration value="P0"></xs:enumeration>
-
-                       <xs:enumeration value="P1"></xs:enumeration>
-
-                       <xs:enumeration value="P2"></xs:enumeration>
-
-                       <xs:enumeration value="P3"></xs:enumeration>
-
-                       <xs:enumeration value="P4"></xs:enumeration>
-
-               </xs:restriction>
-       </xs:simpleType>
-
-       <xs:simpleType name="execution_type_simple_type">
-               <xs:restriction base="xs:string">
-
-                       <xs:enumeration value="auto"></xs:enumeration>
-
-                       <xs:enumeration value="manual"></xs:enumeration>
-               </xs:restriction>
-       </xs:simpleType>
-
-       <xs:simpleType name="status_type">
-               <xs:restriction base="xs:string">
-
-                       <xs:enumeration value="designed"></xs:enumeration>
-
-                       <xs:enumeration value="ready"></xs:enumeration>
-
-                       <xs:enumeration value="approved"></xs:enumeration>
-               </xs:restriction>
-       </xs:simpleType>
-
-       <xs:simpleType name="case_type_type">
-               <xs:restriction base="xs:string">
-
-                       <xs:enumeration value="functional_positive"></xs:enumeration>
-
-                       <xs:enumeration value="functional_negative"></xs:enumeration>
-
-                       <xs:enumeration value="security"></xs:enumeration>
-
-                       <xs:enumeration value="performance"></xs:enumeration>
-
-                       <xs:enumeration value="reliability"></xs:enumeration>
-
-                       <xs:enumeration value="portability"></xs:enumeration>
-
-                       <xs:enumeration value="maintainability"></xs:enumeration>
-
-                       <xs:enumeration value="compliance"></xs:enumeration>
-
-                       <xs:enumeration value="user_experience"></xs:enumeration>
-
-                       <xs:enumeration value="undefined"></xs:enumeration>
-               </xs:restriction>
-       </xs:simpleType>
-
-
-       <xs:element name="purpose" type="xs:anySimpleType"></xs:element>
-
-       <xs:element name="notes" type="xs:string"></xs:element>
-
-       <xs:element name="pre_condition" type="xs:string"></xs:element>
-
-       <xs:element name="post_condition" type="xs:string"></xs:element>
-
-       <xs:element name="description">
-
-               <xs:complexType>
-
-                       <xs:sequence minOccurs="1" maxOccurs="unbounded">
-
-                               <xs:choice minOccurs="0" maxOccurs="1">
-                                       <xs:element ref="notes"></xs:element>
-                               </xs:choice>
-
-                               <xs:choice minOccurs="0" maxOccurs="1">
-                                       <xs:element ref="pre_condition"></xs:element>
-                               </xs:choice>
-
-                               <xs:choice minOccurs="0" maxOccurs="1">
-                                       <xs:element ref="post_condition"></xs:element>
-                               </xs:choice>
-
-                               <xs:element ref="steps" minOccurs="1" maxOccurs="1"></xs:element>
-
-                               <xs:choice minOccurs="0" maxOccurs="1">
-                                       <xs:element ref="test_script_entry"></xs:element>
-                               </xs:choice>
-
-
-                       </xs:sequence>
-
-               </xs:complexType>
-       </xs:element>
-
-       <xs:element name="step">
-               <xs:complexType>
-                       <xs:sequence>
-                               <xs:element name="step_desc" type="xs:string"></xs:element>
-                               <xs:element name="expected" type="xs:string"></xs:element>
-                       </xs:sequence>
-                       <xs:attribute name="order" type="xs:int"></xs:attribute>
-               </xs:complexType>
-       </xs:element>
-
-       <xs:element name="test_script_entry">
-               <xs:complexType>
-                       <xs:simpleContent>
-                               <xs:extension base="xs:string">
-                                       <xs:attribute name="test_script_expected_result" type="xs:string"
-                                               default="0">
-                                       </xs:attribute>
-                                       <xs:attribute name="timeout" type="xs:int" default="90">
-                                       </xs:attribute>
-                               </xs:extension>
-                       </xs:simpleContent>
-               </xs:complexType>
-       </xs:element>
-
-       <xs:complexType name="result_info_type">
-               <xs:sequence minOccurs="0">
-                       <xs:element name="actual_result" type="xs:string"></xs:element>
-                       <xs:element name="start" type="xs:string"></xs:element>
-                       <xs:element name="end" type="xs:string"></xs:element>
-                       <xs:element name="stdout" type="xs:string" minOccurs="0"></xs:element>
-                       <xs:element name="stderr" type="xs:string" minOccurs="0"></xs:element>
-               </xs:sequence>
-       </xs:complexType>
-
-       <xs:complexType name="measurementType">
-               <xs:attribute name="name" type="xs:string"></xs:attribute>
-               <xs:attribute name="value" type="xs:string"></xs:attribute>
-               <xs:attribute name="unit" type="xs:string"></xs:attribute>
-               <xs:attribute name="target" type="xs:string"></xs:attribute>
-               <xs:attribute name="failure" type="xs:string"></xs:attribute>
-               <xs:attribute name="power" type="xs:string"></xs:attribute>
-       </xs:complexType>
-
-       <xs:complexType name="seriesType">
-               <xs:sequence>
-                       <xs:element name="measurement" type="simpleMeasurementType"
-                               minOccurs="1" maxOccurs="unbounded"></xs:element>
-               </xs:sequence>
-               <xs:attribute name="name" type="xs:string"></xs:attribute>
-               <xs:attribute name="group" type="xs:string"></xs:attribute>
-               <xs:attribute name="unit" type="xs:string"></xs:attribute>
-               <xs:attribute name="interval" type="xs:string"></xs:attribute>
-               <xs:attribute name="interval_unit" type="xs:string"></xs:attribute>
-               <xs:attribute name="power" type="xs:string"></xs:attribute>
-       </xs:complexType>
-
-       <xs:complexType name="simpleMeasurementType">
-               <xs:attribute name="value" type="xs:string"></xs:attribute>
-               <xs:attribute name="file" type="xs:string"></xs:attribute>
-       </xs:complexType>
-
-
-       <xs:complexType name="categories">
-               <xs:sequence>
-                       <xs:element name="category" type="xs:string" maxOccurs="unbounded"
-                               minOccurs="0"></xs:element>
-               </xs:sequence>
-       </xs:complexType>
-
-       <xs:element name="test_definition">
-               <xs:complexType>
-                       <xs:sequence minOccurs="1" maxOccurs="unbounded">
-                               <xs:element name="environment" type="BuildInfoType"
-                                       minOccurs="0">
-                               </xs:element>
-                               <xs:element name="summary" type="summaryType" minOccurs="0">
-                               </xs:element>
-                               <xs:element ref="suite" minOccurs="1" maxOccurs="unbounded">
-                               </xs:element>
-                       </xs:sequence>
-               </xs:complexType>
-               <xs:unique name="uniqueSuiteName">
-                       <xs:selector xpath=".//suite" />
-                       <xs:field xpath="@name" />
-               </xs:unique>
-       </xs:element>
-
-
-
-       <xs:complexType name="BuildInfoType">
-               <xs:sequence>
-                       <xs:element name="other" type="xs:string"></xs:element>
-               </xs:sequence>
-               <xs:attribute name="device_name" type="xs:string"></xs:attribute>
-               <xs:attribute name="device_model" type="xs:string"></xs:attribute>
-               <xs:attribute name="os_version" type="xs:string"></xs:attribute>
-               <xs:attribute name="device_id" type="xs:string"></xs:attribute>
-               <xs:attribute name="firmware_version" type="xs:string"></xs:attribute>
-               <xs:attribute name="screen_size" type="xs:string"></xs:attribute>
-               <xs:attribute name="resolution" type="xs:string"></xs:attribute>
-               <xs:attribute name="host" type="xs:string"></xs:attribute>
-               <xs:attribute name="cts_version" type="xs:string"></xs:attribute>
-               <xs:attribute name="build_id" type="xs:string"></xs:attribute>
-       </xs:complexType>
-
-
-       <xs:complexType name="summaryType">
-               <xs:sequence>
-                       <xs:element name="start_at" type="xs:string"></xs:element>
-                       <xs:element name="end_at" type="xs:string"></xs:element>
-               </xs:sequence>
-               <xs:attribute name="test_plan_name" type="xs:string"></xs:attribute>
-       </xs:complexType>
-
-
-       <xs:complexType name="specsType">
-               <xs:sequence>
-                       <xs:element name="spec" type="specType" maxOccurs="unbounded"></xs:element>
-               </xs:sequence>
-       </xs:complexType>
-
-       <xs:complexType name="specType">
-               <xs:sequence>
-                       <xs:element name="spec_assertion" type="spec_assertionType"></xs:element>
-                       <xs:element name="spec_url" type="xs:string"></xs:element>
-                       <xs:element name="spec_statement" type="xs:string"></xs:element>
-               </xs:sequence>
-       </xs:complexType>
-
-       <xs:complexType name="spec_assertionType">
-               <xs:attribute name="category" type="xs:string" use="required"></xs:attribute>
-               <xs:attribute name="section" type="xs:string" use="required"></xs:attribute>
-               <xs:attribute name="specification" type="xs:string" use="required">
-               </xs:attribute>
-               <xs:attribute name="interface" type="xs:string" use="required">
-               </xs:attribute>
-               <xs:attribute name="element_name" type="xs:string" use="optional">
-               </xs:attribute>
-               <xs:attribute name="usage" type="xs:boolean" default="false"></xs:attribute>
-               <xs:attribute name="element_type" type="xs:string"></xs:attribute>
-       </xs:complexType>
-
-       <xs:complexType name="CapabilitiesType">
-               <xs:sequence>
-                       <xs:element name="capability" type="CapabilityType"
-                               minOccurs="1" maxOccurs="unbounded"></xs:element>
-               </xs:sequence>
-       </xs:complexType>
-
-       <xs:complexType name="CapabilityType">
-               <xs:sequence minOccurs="0">
-                       <xs:element name="value" type="xs:string"></xs:element>
-               </xs:sequence>
-               <xs:attribute name="name" type="xs:string" use="required"></xs:attribute>
-       </xs:complexType>
-</xs:schema>
-
diff --git a/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite1.0/xsd/testcase.xsl b/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite1.0/xsd/testcase.xsl
deleted file mode 100755 (executable)
index c25a6c6..0000000
+++ /dev/null
@@ -1,216 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<xsl:stylesheet version="1.0"
-       xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
-       <xsl:output method="html" version="1.0" encoding="UTF-8"
-               indent="yes" />
-       <xsl:template match="/">
-               <html>
-                       <STYLE type="text/css">
-                               @import "tests.css";
-                       </STYLE>
-                       <head>
-                               <script type="text/javascript" src="jquery.min.js" />
-                       </head>
-                       <body>
-                               <div id="testcasepage">
-                                       <div id="title">
-                                               <table>
-                                                       <tr>
-                                                               <td>
-                                                                       <h1>Test Cases</h1>
-                                                               </td>
-                                                       </tr>
-                                               </table>
-                                       </div>
-                                       <div id="suites">
-                                               <a name="contents"></a>
-                                               <table>
-                                                       <tr>
-                                                               <th>Test Suite</th>
-                                                               <th>Total</th>
-                                                               <th>Auto</th>
-                                                               <th>Manual</th>
-                                                       </tr>
-                                                       <tr>
-                                                               <td>
-                                                                       Total
-                                                               </td>
-                                                               <td>
-                                                                       <xsl:value-of select="count(test_definition/suite/set//testcase)" />
-                                                               </td>
-                                                               <td>
-                                                                       <xsl:value-of
-                                                                               select="count(test_definition/suite/set//testcase[@execution_type = 'auto'])" />
-                                                               </td>
-                                                               <td>
-                                                                       <xsl:value-of
-                                                                               select="count(test_definition/suite/set//testcase[@execution_type != 'auto'])" />
-                                                               </td>
-                                                       </tr>
-                                                       <xsl:for-each select="test_definition/suite">
-                                                               <tr>
-                                                                       <td>
-                                                                               <a>
-                                                                                       <xsl:attribute name="href">
-                                                                                      #<xsl:value-of
-                                                                                               select="@name" />
-                                                                                   </xsl:attribute>
-                                                                                       <xsl:value-of select="@name" />
-                                                                               </a>
-                                                                       </td>
-                                                                       <td>
-                                                                               <xsl:value-of select="count(set//testcase)" />
-                                                                       </td>
-                                                                       <td>
-                                                                               <xsl:value-of select="count(set/testcase[@execution_type = 'auto'])" />
-                                                                       </td>
-                                                                       <td>
-                                                                               <xsl:value-of select="count(set/testcase[@execution_type != 'auto'])" />
-                                                                       </td>
-                                                               </tr>
-                                                       </xsl:for-each>
-                                               </table>
-                                       </div>
-                                       <div id="title">
-                                               <table>
-                                                       <tr>
-                                                               <td class="title">
-                                                                       <h1>Detailed Test Cases</h1>
-                                                               </td>
-                                                       </tr>
-                                               </table>
-                                       </div>
-                                       <div id="cases">
-                                               <xsl:for-each select="test_definition/suite">
-                                                       <xsl:sort select="@name" />
-                                                       <div id="btc">
-                                                               <a href="#contents">Back to Contents</a>
-                                                       </div>
-                                                       <div id="suite_title">
-                                                               Test Suite:
-                                                               <xsl:value-of select="@name" />
-                                                               <a>
-                                                                       <xsl:attribute name="name">
-                                                                     <xsl:value-of
-                                                                               select="@name" />
-                                                                  </xsl:attribute>
-                                                               </a>
-                                                       </div>
-                                                       <table>
-                                                               <tr>
-                                                                       <th>Case_ID</th>
-                                                                       <th>Purpose</th>
-                                                                       <th>Type</th>
-                                                                       <th>Component</th>
-                                                                       <th>Execution Type</th>
-                                                                       <th>Description</th>
-                                                                       <th>Specification</th>
-                                                               </tr>
-                                                               <xsl:for-each select=".//set">
-                                                                       <xsl:sort select="@name" />
-                                                                       <tr>
-                                                                               <td colspan="7">
-                                                                                       Test Set:
-                                                                                       <xsl:value-of select="@name" />
-                                                                               </td>
-                                                                       </tr>
-                                                                       <xsl:for-each select=".//testcase">
-                                                                               <!-- xsl:sort select="@id" /> -->
-                                                                               <tr>
-                                                                                       <td>
-                                                                                               <xsl:value-of select="@id" />
-                                                                                       </td>
-                                                                                       <td>
-                                                                                               <xsl:value-of select="@purpose" />
-                                                                                       </td>
-                                                                                       <td>
-                                                                                               <xsl:value-of select="@type" />
-                                                                                       </td>
-                                                                                       <td>
-                                                                                               <xsl:value-of select="@component" />
-                                                                                       </td>
-                                                                                       <td>
-                                                                                               <xsl:value-of select="@execution_type" />
-                                                                                       </td>
-                                                                                       <td>
-                                                                                               <p>
-                                                                                                       Pre_condition:
-                                                                                                       <xsl:value-of select=".//description/pre_condition" />
-                                                                                               </p>
-                                                                                               <p>
-                                                                                                       Post_condition:
-                                                                                                       <xsl:value-of select=".//description/post_condition" />
-                                                                                               </p>
-                                                                                               <p>
-                                                                                                       Test Script Entry:
-                                                                                                       <xsl:value-of select=".//description/test_script_entry" />
-                                                                                               </p>
-                                                                                               <p>
-                                                                                                       Steps:
-                                                                                                       <p />
-                                                                                                       <xsl:for-each select=".//description/steps/step">
-                                                                                                               <xsl:sort select="@order" />
-                                                                                                               Step
-                                                                                                               <xsl:value-of select="@order" />
-                                                                                                               :
-                                                                                                               <xsl:value-of select="./step_desc" />
-                                                                                                               ;
-                                                                                                               <p />
-                                                                                                               Expected Result:
-                                                                                                               <xsl:value-of select="./expected" />
-                                                                                                               <p />
-                                                                                                       </xsl:for-each>
-                                                                                               </p>
-                                                                                       </td>
-                                                                                       <td>
-                                                                                               <xsl:for-each select=".//specs/spec">
-                                                                                                       <b>[Spec_Assertion]:</b>
-                                                                                                       <br />
-                                                                                                       [Category]:
-                                                                                                       <xsl:value-of select="./spec_assertion/@category" />
-                                                                                                       <br />
-                                                                                                       [Section]:
-                                                                                                       <xsl:value-of select="./spec_assertion/@section" />
-                                                                                                       <br />
-                                                                                                       [Specification]:
-                                                                                                       <xsl:value-of select="./spec_assertion/@specification" />
-                                                                                                       <br />
-                                                                                                       [Interface]:
-                                                                                                       <xsl:value-of select="./spec_assertion/@interface" />
-                                                                                                       <br />
-                                                                                                       <xsl:choose>
-                                                                                                               <xsl:when test="./spec_assertion/@element_name">
-                                                                                                                       [<xsl:value-of select="./spec_assertion/@element_type" />]:
-                                                                                                                       <xsl:value-of select="./spec_assertion/@element_name" />
-                                                                                                                       <br />
-                                                                                                               </xsl:when>
-                                                                                                       </xsl:choose>
-
-                                                                                                       [URL]:
-                                                                                                       <xsl:value-of select="./spec_url" />
-                                                                                                       <br />
-                                                                                                       [Statement]:
-                                                                                                       <xsl:value-of select="./spec_statement" />
-                                                                                                       <br />
-                                                                                               </xsl:for-each>
-                                                                                       </td>
-                                                                               </tr>
-                                                                       </xsl:for-each>
-                                                               </xsl:for-each>
-                                                       </table>
-                                               </xsl:for-each>
-                                       </div>
-                               </div>
-                               <div id="goTopBtn">
-                                       <img border="0" src="./back_top.png" />
-                               </div>
-                               <script type="text/javascript" src="application.js" />
-                               <script language="javascript" type="text/javascript">
-                                       $(document).ready(function(){
-                                       goTopEx();
-                                       });
-                               </script>
-                       </body>
-               </html>
-       </xsl:template>
-</xsl:stylesheet>
\ No newline at end of file
diff --git a/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite1.0/xsd/testresult.xsl b/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite1.0/xsd/testresult.xsl
deleted file mode 100755 (executable)
index c20a914..0000000
+++ /dev/null
@@ -1,522 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<xsl:stylesheet version="1.0"
-       xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
-       <xsl:output method="html" version="1.0" encoding="UTF-8"
-               indent="yes" />
-       <xsl:template match="/">
-               <html>
-                       <STYLE type="text/css">
-                               @import "tests.css";
-                       </STYLE>
-                       <head>
-                               <script type="text/javascript" src="jquery.min.js" />
-                       </head>
-                       <body>
-                               <div id="testcasepage">
-                                       <div id="title">
-                                               <table>
-                                                       <tr>
-                                                               <td>
-                                                                       <h1>Test Report</h1>
-                                                               </td>
-                                                       </tr>
-                                               </table>
-                                       </div>
-                                       <div id="device">
-                                               <table>
-                                                       <tr>
-                                                               <th colspan="2">Device Information</th>
-                                                       </tr>
-                                                       <tr>
-                                                               <td>Device Name</td>
-                                                               <td>
-                                                                       <xsl:choose>
-                                                                               <xsl:when test="test_definition/environment/@device_name">
-                                                                                       <xsl:if test="test_definition/environment/@device_name = ''">
-                                                                                               N/A
-                                                                                       </xsl:if>
-                                                                                       <xsl:value-of select="test_definition/environment/@device_name" />
-                                                                               </xsl:when>
-                                                                               <xsl:otherwise>
-                                                                                       N/A
-                                                                               </xsl:otherwise>
-                                                                       </xsl:choose>
-                                                               </td>
-                                                       </tr>
-                                                       <tr>
-                                                               <td>Device Model</td>
-                                                               <td>
-                                                                       <xsl:choose>
-                                                                               <xsl:when test="test_definition/environment/@device_model">
-                                                                                       <xsl:if test="test_definition/environment/@device_model = ''">
-                                                                                               N/A
-                                                                                       </xsl:if>
-                                                                                       <xsl:value-of select="test_definition/environment/@device_model" />
-                                                                               </xsl:when>
-                                                                               <xsl:otherwise>
-                                                                                       N/A
-                                                                               </xsl:otherwise>
-                                                                       </xsl:choose>
-                                                               </td>
-                                                       </tr>
-                                                       <tr>
-                                                               <td>OS Version</td>
-                                                               <td>
-                                                                       <xsl:choose>
-                                                                               <xsl:when test="test_definition/environment/@os_version">
-                                                                                       <xsl:if test="test_definition/environment/@os_version = ''">
-                                                                                               N/A
-                                                                                       </xsl:if>
-                                                                                       <xsl:value-of select="test_definition/environment/@os_version" />
-                                                                               </xsl:when>
-                                                                               <xsl:otherwise>
-                                                                                       N/A
-                                                                               </xsl:otherwise>
-                                                                       </xsl:choose>
-                                                               </td>
-                                                       </tr>
-                                                       <tr>
-                                                               <td>Device ID</td>
-                                                               <td>
-                                                                       <xsl:choose>
-                                                                               <xsl:when test="test_definition/environment/@device_id">
-                                                                                       <xsl:if test="test_definition/environment/@device_id = ''">
-                                                                                               N/A
-                                                                                       </xsl:if>
-                                                                                       <xsl:value-of select="test_definition/environment/@device_id" />
-                                                                               </xsl:when>
-                                                                               <xsl:otherwise>
-                                                                                       N/A
-                                                                               </xsl:otherwise>
-                                                                       </xsl:choose>
-                                                               </td>
-                                                       </tr>
-                                                       <tr>
-                                                               <td>Firmware Version</td>
-                                                               <td>
-                                                                       <xsl:choose>
-                                                                               <xsl:when test="test_definition/environment/@firmware_version">
-                                                                                       <xsl:if test="test_definition/environment/@firmware_version = ''">
-                                                                                               N/A
-                                                                                       </xsl:if>
-                                                                                       <xsl:value-of select="test_definition/environment/@firmware_version" />
-                                                                               </xsl:when>
-                                                                               <xsl:otherwise>
-                                                                                       N/A
-                                                                               </xsl:otherwise>
-                                                                       </xsl:choose>
-                                                               </td>
-                                                       </tr>
-                                                       <tr>
-                                                               <td>Build ID</td>
-                                                               <td>
-                                                                       <xsl:choose>
-                                                                               <xsl:when test="test_definition/environment/@build_id">
-                                                                                       <xsl:if test="test_definition/environment/@build_id = ''">
-                                                                                               N/A
-                                                                                       </xsl:if>
-                                                                                       <xsl:value-of select="test_definition/environment/@build_id" />
-                                                                               </xsl:when>
-                                                                               <xsl:otherwise>
-                                                                                       N/A
-                                                                               </xsl:otherwise>
-                                                                       </xsl:choose>
-                                                               </td>
-                                                       </tr>
-                                                       <tr>
-                                                               <td>Screen Size</td>
-                                                               <td>
-                                                                       <xsl:choose>
-                                                                               <xsl:when test="test_definition/environment/@screen_size">
-                                                                                       <xsl:if test="test_definition/environment/@screen_size = ''">
-                                                                                               N/A
-                                                                                       </xsl:if>
-                                                                                       <xsl:value-of select="test_definition/environment/@screen_size" />
-                                                                               </xsl:when>
-                                                                               <xsl:otherwise>
-                                                                                       N/A
-                                                                               </xsl:otherwise>
-                                                                       </xsl:choose>
-                                                               </td>
-                                                       </tr>
-                                                       <tr>
-                                                               <td>Resolution</td>
-                                                               <td>
-                                                                       <xsl:choose>
-                                                                               <xsl:when test="test_definition/environment/@resolution">
-                                                                                       <xsl:if test="test_definition/environment/@resolution = ''">
-                                                                                               N/A
-                                                                                       </xsl:if>
-                                                                                       <xsl:value-of select="test_definition/environment/@resolution" />
-                                                                               </xsl:when>
-                                                                               <xsl:otherwise>
-                                                                                       N/A
-                                                                               </xsl:otherwise>
-                                                                       </xsl:choose>
-                                                               </td>
-                                                       </tr>
-                                                       <tr>
-                                                               <td>Host Info</td>
-                                                               <td>
-                                                                       <xsl:choose>
-                                                                               <xsl:when test="test_definition/environment/@host">
-                                                                                       <xsl:if test="test_definition/environment/@host = ''">
-                                                                                               N/A
-                                                                                       </xsl:if>
-                                                                                       <xsl:value-of select="test_definition/environment/@host" />
-                                                                               </xsl:when>
-                                                                               <xsl:otherwise>
-                                                                                       N/A
-                                                                               </xsl:otherwise>
-                                                                       </xsl:choose>
-                                                               </td>
-                                                       </tr>
-                                                       <tr>
-                                                               <td>CTS Version</td>
-                                                               <td>
-                                                                       <xsl:choose>
-                                                                               <xsl:when test="test_definition/environment/@cts_version">
-                                                                                       <xsl:if test="test_definition/environment/@cts_version = ''">
-                                                                                               N/A
-                                                                                       </xsl:if>
-                                                                                       <xsl:value-of select="test_definition/environment/@cts_version" />
-                                                                               </xsl:when>
-                                                                               <xsl:otherwise>
-                                                                                       N/A
-                                                                               </xsl:otherwise>
-                                                                       </xsl:choose>
-                                                               </td>
-                                                       </tr>
-                                                       <tr>
-                                                               <td>Others</td>
-                                                               <td>
-                                                                       <xsl:if test="test_definition/environment/other = ''">
-                                                                               N/A
-                                                                       </xsl:if>
-                                                                       <xsl:call-template name="br-replace">
-                                                                               <xsl:with-param name="word"
-                                                                                       select="test_definition/environment/other" />
-                                                                       </xsl:call-template>
-                                                               </td>
-                                                       </tr>
-                                               </table>
-                                       </div>
-
-                                       <div id="summary">
-                                               <table>
-                                                       <tr>
-                                                               <th colspan="2">Test Summary</th>
-                                                       </tr>
-                                                       <tr>
-                                                               <td>Test Plan Name</td>
-                                                               <td>
-                                                                       <xsl:value-of select="test_definition/summary/@test_plan_name" />
-                                                               </td>
-                                                       </tr>
-                                                       <tr>
-                                                               <td>Tests Total</td>
-                                                               <td>
-                                                                       <xsl:value-of select="count(test_definition//suite/set/testcase)" />
-                                                               </td>
-                                                       </tr>
-                                                       <tr>
-                                                               <td>Test Passed</td>
-                                                               <td>
-                                                                       <xsl:value-of
-                                                                               select="count(test_definition//suite/set/testcase[@result = 'PASS'])" />
-                                                               </td>
-                                                       </tr>
-                                                       <tr>
-                                                               <td>Test Failed</td>
-                                                               <td>
-                                                                       <xsl:value-of
-                                                                               select="count(test_definition//suite/set/testcase[@result = 'FAIL'])" />
-                                                               </td>
-                                                       </tr>
-                                                       <tr>
-                                                               <td>Test Block</td>
-                                                               <td>
-                                                                       <xsl:value-of
-                                                                               select="count(test_definition//suite/set/testcase[@result = 'BLOCK'])" />
-                                                               </td>
-                                                       </tr>
-                                                       <tr>
-                                                               <td>Test Not Run</td>
-                                                               <td>
-                                                                       <xsl:value-of
-                                                                               select="count(test_definition//suite/set/testcase) - count(test_definition//suite/set/testcase[@result = 'PASS']) - count(test_definition//suite/set/testcase[@result = 'FAIL']) - count(test_definition//suite/set/testcase[@result = 'BLOCK'])" />
-                                                               </td>
-                                                       </tr>
-                                                       <tr>
-                                                               <td>Start time</td>
-                                                               <td>
-                                                                       <xsl:value-of select="test_definition/summary/start_at" />
-                                                               </td>
-                                                       </tr>
-                                                       <tr>
-                                                               <td>End time</td>
-                                                               <td>
-                                                                       <xsl:value-of select="test_definition/summary/end_at" />
-                                                               </td>
-                                                       </tr>
-                                               </table>
-                                       </div>
-
-
-                                       <div id="suite_summary">
-                                               <div id="title">
-                                                       <a name="contents"></a>
-                                                       <table>
-                                                               <tr>
-                                                                       <td class="title">
-                                                                               <h1>Test Summary by Suite</h1>
-                                                                       </td>
-                                                               </tr>
-                                                       </table>
-                                               </div>
-                                               <table>
-                                                       <tr>
-                                                               <th>Suite</th>
-                                                               <th>Passed</th>
-                                                               <th>Failed</th>
-                                                               <th>Blocked</th>
-                                                               <th>Not Run</th>
-                                                               <th>Total</th>
-                                                       </tr>
-                                                       <xsl:for-each select="test_definition/suite">
-                                                               <xsl:sort select="@name" />
-                                                               <tr>
-                                                                       <td>
-                                                                               <a>
-                                                                                       <xsl:attribute name="href">
-                                                                                      #<xsl:value-of
-                                                                                               select="@name" />
-                                                                                   </xsl:attribute>
-                                                                                       <xsl:value-of select="@name" />
-                                                                               </a>
-                                                                       </td>
-                                                                       <td>
-                                                                               <xsl:value-of select="count(set//testcase[@result = 'PASS'])" />
-                                                                       </td>
-                                                                       <td>
-                                                                               <xsl:value-of select="count(set//testcase[@result = 'FAIL'])" />
-                                                                       </td>
-                                                                       <td>
-                                                                               <xsl:value-of select="count(set//testcase[@result = 'BLOCK'])" />
-                                                                       </td>
-                                                                       <td>
-                                                                               <xsl:value-of
-                                                                                       select="count(set//testcase) - count(set//testcase[@result = 'PASS']) - count(set//testcase[@result = 'FAIL']) - count(set//testcase[@result = 'BLOCK'])" />
-                                                                       </td>
-                                                                       <td>
-                                                                               <xsl:value-of select="count(set//testcase)" />
-                                                                       </td>
-                                                               </tr>
-                                                       </xsl:for-each>
-                                               </table>
-                                       </div>
-
-                                       <div id="fail_cases">
-                                               <div id="title">
-                                                       <table>
-                                                               <tr>
-                                                                       <td class="title">
-                                                                               <h1 align="center">
-                                                                                       Test Failures (
-                                                                                       <xsl:value-of
-                                                                                               select="count(test_definition/suite/set//testcase[@result = 'FAIL'])" />
-                                                                                       )
-                                                                               </h1>
-                                                                       </td>
-                                                               </tr>
-                                                       </table>
-                                               </div>
-                                               <xsl:for-each select="test_definition/suite">
-                                                       <xsl:sort select="@name" />
-                                                       <div id="btc">
-                                                               <a href="#contents">Back to Contents</a>
-                                                       </div>
-                                                       <div id="suite_title">
-                                                               Test Suite:
-                                                               <xsl:value-of select="@name" />
-                                                               <a>
-                                                                       <xsl:attribute name="name">
-                                          <xsl:value-of
-                                                                               select="@name" />
-                                    </xsl:attribute>
-                                                               </a>
-                                                       </div>
-                                                       <table>
-                                                               <tr>
-                                                                       <th>Case_ID</th>
-                                                                       <th>Purpose</th>
-                                                                       <th>Result</th>
-                                                                       <th>Stdout</th>
-                                                               </tr>
-                                                               <xsl:for-each select=".//set">
-                                                                       <xsl:sort select="@name" />
-                                                                       <tr>
-                                                                               <td colspan="4">
-                                                                                       Test Set:
-                                                                                       <xsl:value-of select="@name" />
-                                                                               </td>
-                                                                       </tr>
-                                                                       <xsl:for-each select=".//testcase">
-                                                                               <xsl:sort select="@id" />
-                                                                               <xsl:choose>
-                                                                                       <xsl:when test="@result">
-                                                                                               <xsl:if test="@result = 'FAIL'">
-
-                                                                                                       <tr>
-                                                                                                               <td>
-                                                                                                                       <xsl:value-of select="@id" />
-                                                                                                               </td>
-                                                                                                               <td>
-                                                                                                                       <xsl:value-of select="@purpose" />
-                                                                                                               </td>
-
-
-                                                                                                               <td class="red_rate">
-                                                                                                                       <xsl:value-of select="@result" />
-                                                                                                               </td>
-
-                                                                                                               <td>
-                                                                                                                       <xsl:value-of select=".//result_info/stdout" />
-                                                                                                                       <xsl:if test=".//result_info/stdout = ''">
-                                                                                                                               N/A
-                                                                                                                       </xsl:if>
-                                                                                                               </td>
-                                                                                                       </tr>
-                                                                                               </xsl:if>
-                                                                                       </xsl:when>
-                                                                               </xsl:choose>
-                                                                       </xsl:for-each>
-                                                               </xsl:for-each>
-                                                       </table>
-                                               </xsl:for-each>
-                                       </div>
-
-                                       <div id="cases">
-                                               <div id="title">
-                                                       <table>
-                                                               <tr>
-                                                                       <td class="title">
-                                                                               <h1 align="center">Detailed Test Results</h1>
-                                                                       </td>
-                                                               </tr>
-                                                       </table>
-                                               </div>
-                                               <xsl:for-each select="test_definition/suite">
-                                                       <xsl:sort select="@name" />
-                                                       <div id="btc">
-                                                               <a href="#contents">Back to Contents</a>
-                                                       </div>
-                                                       <div id="suite_title">
-                                                               Test Suite:
-                                                               <xsl:value-of select="@name" />
-                                                               <a>
-                                                                       <xsl:attribute name="name">
-                                                                     <xsl:value-of
-                                                                               select="@name" />
-                                                                  </xsl:attribute>
-                                                               </a>
-                                                       </div>
-                                                       <table>
-                                                               <tr>
-                                                                       <th>Case_ID</th>
-                                                                       <th>Purpose</th>
-                                                                       <th>Result</th>
-                                                                       <th>Stdout</th>
-                                                               </tr>
-                                                               <xsl:for-each select=".//set">
-                                                                       <xsl:sort select="@name" />
-                                                                       <tr>
-                                                                               <td colspan="4">
-                                                                                       Test Set:
-                                                                                       <xsl:value-of select="@name" />
-                                                                               </td>
-                                                                       </tr>
-                                                                       <xsl:for-each select=".//testcase">
-                                                                               <xsl:sort select="@id" />
-                                                                               <tr>
-                                                                                       <td>
-                                                                                               <xsl:value-of select="@id" />
-                                                                                       </td>
-                                                                                       <td>
-                                                                                               <xsl:value-of select="@purpose" />
-                                                                                       </td>
-
-                                                                                       <xsl:choose>
-                                                                                               <xsl:when test="@result">
-                                                                                                       <xsl:if test="@result = 'FAIL'">
-                                                                                                               <td class="red_rate">
-                                                                                                                       <xsl:value-of select="@result" />
-                                                                                                               </td>
-                                                                                                       </xsl:if>
-                                                                                                       <xsl:if test="@result = 'PASS'">
-                                                                                                               <td class="green_rate">
-                                                                                                                       <xsl:value-of select="@result" />
-                                                                                                               </td>
-                                                                                                       </xsl:if>
-                                                                                                       <xsl:if test="@result = 'BLOCK' ">
-                                                                                                               <td>
-                                                                                                                       BLOCK
-                                                                                                               </td>
-                                                                                                       </xsl:if>
-                                                                                                       <xsl:if test="@result != 'BLOCK' and @result != 'FAIL' and @result != 'PASS' ">
-                                                                                                               <td>
-                                                                                                                       Not Run
-                                                                                                               </td>
-                                                                                                       </xsl:if>
-                                                                                               </xsl:when>
-                                                                                               <xsl:otherwise>
-                                                                                                       <td>
-
-                                                                                                       </td>
-                                                                                               </xsl:otherwise>
-                                                                                       </xsl:choose>
-                                                                                       <td>
-                                                                                               <xsl:value-of select=".//result_info/stdout" />
-                                                                                               <xsl:if test=".//result_info/stdout = ''">
-                                                                                                       N/A
-                                                                                               </xsl:if>
-                                                                                       </td>
-                                                                               </tr>
-                                                                       </xsl:for-each>
-                                                               </xsl:for-each>
-                                                       </table>
-                                               </xsl:for-each>
-                                       </div>
-                               </div>
-                               <div id="goTopBtn">
-                                       <img border="0" src="./back_top.png" />
-                               </div>
-                               <script type="text/javascript" src="application.js" />
-                               <script language="javascript" type="text/javascript">
-                                       $(document).ready(function(){
-                                       goTopEx();
-                                       });
-                               </script>
-                       </body>
-               </html>
-       </xsl:template>
-       <xsl:template name="br-replace">
-               <xsl:param name="word" />
-               <xsl:variable name="cr">
-                       <xsl:text>
-</xsl:text>
-               </xsl:variable>
-               <xsl:choose>
-                       <xsl:when test="contains($word,$cr)">
-                               <xsl:value-of select="substring-before($word,$cr)" />
-                               <br />
-                               <xsl:call-template name="br-replace">
-                                       <xsl:with-param name="word" select="substring-after($word,$cr)" />
-                               </xsl:call-template>
-                       </xsl:when>
-                       <xsl:otherwise>
-                               <xsl:value-of select="$word" />
-                       </xsl:otherwise>
-               </xsl:choose>
-       </xsl:template>
-</xsl:stylesheet>
diff --git a/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite1.0/xsd/tests.css b/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite1.0/xsd/tests.css
deleted file mode 100755 (executable)
index cbad68a..0000000
+++ /dev/null
@@ -1,123 +0,0 @@
-@charset "UTF-8";\r
-/* CSS Document */\r
-#testcasepage div,#testcasepage h1,#testcasepage p,#testcasepage table,#testcasepage tr,#testcasepage th,#testcasepage td\r
-       {\r
-       margin: 0;\r
-       padding: 0;\r
-       border: 0;\r
-       font-weight: inherit;\r
-       font-style: inherit;\r
-       font-size: 0.96em;\r
-       font-family: arial;\r
-       vertical-align: baseline;\r
-}\r
-\r
-#testcasepage p {\r
-       text-align: left;\r
-}\r
-\r
-#suite_title {\r
-       text-align: left;\r
-}\r
-\r
-#btc {\r
-       text-align: right;\r
-}\r
-\r
-#testcasepage table {\r
-       border-collapse: separate;\r
-       border-spacing: 0;\r
-       margin-bottom: 1.4em;\r
-       vertical-align: middle;\r
-}\r
-\r
-#testcasepage th,#testcasepage td {\r
-       text-align: left;\r
-       font-weight: normal;\r
-       padding: 4px 10px 4px 5px;\r
-       vertical-align: middle;\r
-}\r
-\r
-#cases table {\r
-       width: 101%;\r
-}\r
-\r
-#fail_cases table {\r
-       width: 101%;\r
-}\r
-\r
-#title table {\r
-       width: 101%;\r
-}\r
-\r
-#device table {\r
-       width: 50%;\r
-}\r
-\r
-#summary table {\r
-       width: 50%;\r
-}\r
-\r
-#testcasepage th {\r
-       border-bottom: 1px solid #000;\r
-       background-color: #AAAAAA;\r
-       border-left: 1px solid #000;\r
-       border-top: 1px solid #000;\r
-       color: #000;\r
-       font-weight: bold;\r
-       vertical-align: bottom;\r
-}\r
-\r
-#testcasepage th:last-child,#testcasepage td:last-child {\r
-       border-right: 1px solid #000;\r
-}\r
-\r
-#testcasepage td {\r
-       border-left: 1px solid;\r
-       font-weight: normal;\r
-       border-bottom: 1px solid;\r
-}\r
-\r
-#testcasepage td.yellow_rate {\r
-       background-color: #ffcc00;\r
-}\r
-\r
-#testcasepage td.green_rate {\r
-       background-color: #33cc33;\r
-}\r
-\r
-#testcasepage td.dgreen_rate {\r
-       background-color: #339933;\r
-}\r
-\r
-#testcasepage td.red_rate {\r
-       background-color: #FF3333;\r
-}\r
-\r
-#title table,#title tr,#title td {\r
-       border-left: none;\r
-       border-bottom: none;\r
-       text-align: center;\r
-}\r
-\r
-#title td:last-child {\r
-       border-right: none;\r
-}\r
-\r
-#testcasepage h1 {\r
-       font-size: 2em;\r
-       font-family: Arial, sans-serif;\r
-       font-weight: bold;\r
-       line-height: 1;\r
-       color: #000;\r
-       margin-bottom: 0.75em;\r
-       padding-top: 0.25em;\r
-       font-weight: bold;\r
-}\r
-\r
-#goTopBtn {\r
-       right: 0px;\r
-       bottom: 0px;\r
-       position: fixed; +position: absolute;\r
-       top: expression(parseInt(document.body.scrollTop)+document.body.clientHeight-40);\r
-}
\ No newline at end of file
diff --git a/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite1.0/xsd/tests.xml b/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite1.0/xsd/tests.xml
deleted file mode 100755 (executable)
index bf9b312..0000000
+++ /dev/null
@@ -1,1336 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>\r
-<?xml-stylesheet type="text/xsl"  href="testcase.xsl"?>\r
-<test_definition xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"\r
-       xsi:noNamespaceSchemaLocation="test_definition.xsd">\r
-       <suite name="webapi-w3c-widget-tests">\r
-               <set name="WidgetPackaging">\r
-                       <testcase\r
-                               purpose="Tests the user agent's ability to process files with no file extension. "\r
-                               type="compliance" status="ready" component="WebAPI/W3C_Widget/WidgetPackaging"\r
-                               execution_type="auto" priority="P3" id="dm">\r
-                               <description>\r
-                                       <pre_condition />\r
-                                       <post_condition />\r
-                                       <steps>\r
-                                               <step order="1">\r
-                                                       <step_desc>Install /opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/dm</step_desc>\r
-                                                       <expected> \r
-       To pass, the user agent start file of the widget must be index.htm</expected>\r
-                                               </step>\r
-                                       </steps>\r
-                                       <test_script_entry>/opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/dm</test_script_entry>\r
-                               </description>\r
-                               <specs>\r
-                                       <spec>\r
-                                               <spec_assertion category="Tizen Device API Specifications"\r
-                                                       section="Widget" specification="Widget Packaging and XML Configuration"\r
-                                                       interface="Widget" element_name="constructor" element_type="method" />\r
-                                               <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>\r
-                                               <spec_statement>spec_statement</spec_statement>\r
-                                       </spec>\r
-                                       <spec>\r
-                                               <spec_assertion category="Tizen Device API Specifications"\r
-                                                       section="Tizen" specification="Tizen Packaging and XML Configuration"\r
-                                                       interface="Tizen" usage="true" />\r
-                                               <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>\r
-                                               <spec_statement>spec_statement</spec_statement>\r
-                                       </spec>\r
-                               </specs>\r
-                       </testcase>\r
-                       <testcase\r
-                               purpose="Tests the user agent's ability to process files with a file extension other than .wgt."\r
-                               type="compliance" status="ready" component="WebAPI/W3C_Widget/WidgetPackaging"\r
-                               execution_type="manual" priority="P3" id="dn">\r
-                               <description>\r
-                                       <pre_condition />\r
-                                       <post_condition />\r
-                                       <steps>\r
-                                               <step order="1">\r
-                                                       <step_desc>Install /opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/dn.test</step_desc>\r
-                                                       <expected> \r
-       To pass, the user agent start file of the widget must be index.htm</expected>\r
-                                               </step>\r
-                                       </steps>\r
-                                       <test_script_entry>/opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/dn.test</test_script_entry>\r
-                               </description>\r
-                               <specs>\r
-                                       <spec>\r
-                                               <spec_assertion category="Tizen Device API Specifications"\r
-                                                       section="Widget" specification="Widget Packaging and XML Configuration"\r
-                                                       interface="Widget" usage="true" />\r
-                                               <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>\r
-                                               <spec_statement>spec_statement</spec_statement>\r
-                                       </spec>\r
-                               </specs>\r
-                       </testcase>\r
-                       <testcase purpose="Test the ability of the UA to verify a zip archive."\r
-                               type="compliance" status="ready" component="WebAPI/W3C_Widget/WidgetPackaging"\r
-                               execution_type="manual" priority="P3" id="do">\r
-                               <description>\r
-                                       <pre_condition />\r
-                                       <post_condition />\r
-                                       <steps>\r
-                                               <step order="1">\r
-                                                       <step_desc>Install /opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/split.wgt.001</step_desc>\r
-                                                       <expected> \r
-       To pass, the user agent must treat this as an invalid widget (archive is spanned).</expected>\r
-                                               </step>\r
-                                       </steps>\r
-                                       <test_script_entry>/opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/split.wgt.001</test_script_entry>\r
-                               </description>\r
-                               <specs>\r
-                                       <spec>\r
-                                               <spec_assertion category="Tizen Device API Specifications"\r
-                                                       section="Widget" specification="Widget Packaging and XML Configuration"\r
-                                                       interface="Widget" element_name="constructor" element_type="method" />\r
-                                               <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>\r
-                                               <spec_statement>spec_statement</spec_statement>\r
-                                       </spec>\r
-                               </specs>\r
-                       </testcase>\r
-                       <testcase\r
-                               purpose="Test the user agent's ability to get a widget over HTTP and respect the application/widget mimetype. The server from which this test is served from has been set up to label the 'test' resource as an 'application/widget'."\r
-                               type="compliance" status="ready" component="WebAPI/W3C_Widget/WidgetPackaging"\r
-                               execution_type="manual" priority="P3" id="z3">\r
-                               <description>\r
-                                       <pre_condition />\r
-                                       <post_condition />\r
-                                       <steps>\r
-                                               <step order="1">\r
-                                                       <step_desc>Install /opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/z3</step_desc>\r
-                                                       <expected> \r
-       To pass, a user agent must correctly process this resource as a widget because of the 'application/widget' mimetype (i.e., not only because of sniffing).</expected>\r
-                                               </step>\r
-                                       </steps>\r
-                                       <test_script_entry>/opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/z3</test_script_entry>\r
-                               </description>\r
-                               <specs>\r
-                                       <spec>\r
-                                               <spec_assertion category="Tizen Device API Specifications"\r
-                                                       section="Widget" specification="Widget Packaging and XML Configuration"\r
-                                                       interface="Widget" element_name="constructor" element_type="method" />\r
-                                               <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>\r
-                                               <spec_statement>spec_statement</spec_statement>\r
-                                       </spec>\r
-                               </specs>\r
-                       </testcase>\r
-                       <testcase\r
-                               purpose="Test the user agent's ability to get a widget over HTTP and respect the 'application/widget' mimetype. The server from which this test is served from has been set up to label the 'test.html' resource as an 'application/widget'."\r
-                               type="compliance" status="ready" component="WebAPI/W3C_Widget/WidgetPackaging"\r
-                               execution_type="manual" priority="P3" id="z4">\r
-                               <description>\r
-                                       <pre_condition />\r
-                                       <post_condition />\r
-                                       <steps>\r
-                                               <step order="1">\r
-                                                       <step_desc>Install /opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/z4.html</step_desc>\r
-                                                       <expected> \r
-       To pass, a user agent must correctly process this resource as a widget because of the 'application/widget' mimetype (i.e., not only via sniffing).</expected>\r
-                                               </step>\r
-                                       </steps>\r
-                                       <test_script_entry>/opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/z4.html</test_script_entry>\r
-                               </description>\r
-                               <specs>\r
-                                       <spec>\r
-                                               <spec_assertion category="Tizen Device API Specifications"\r
-                                                       section="Widget" specification="Widget Packaging and XML Configuration"\r
-                                                       interface="Widget" element_name="constructor" element_type="method" />\r
-                                               <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>\r
-                                               <spec_statement>spec_statement</spec_statement>\r
-                                       </spec>\r
-                               </specs>\r
-                       </testcase>\r
-                       <testcase\r
-                               purpose="Tests that an empty defaultlocale attribute is ignored (and does not cause the widget to be treated as invalid)."\r
-                               type="compliance" status="ready" component="WebAPI/W3C_Widget/WidgetPackaging"\r
-                               execution_type="manual" priority="P3" id="dlocignore00">\r
-                               <description>\r
-                                       <pre_condition />\r
-                                       <post_condition />\r
-                                       <steps>\r
-                                               <step order="1">\r
-                                                       <step_desc>Install /opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/dlocignore00.wgt</step_desc>\r
-                                                       <expected> \r
-       To pass, the widget must simply run..</expected>\r
-                                               </step>\r
-                                       </steps>\r
-                                       <test_script_entry>/opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/dlocignore00.wgt</test_script_entry>\r
-                               </description>\r
-                               <specs>\r
-                                       <spec>\r
-                                               <spec_assertion category="Tizen Device API Specifications"\r
-                                                       section="Widget" specification="Widget Packaging and XML Configuration"\r
-                                                       interface="Widget" element_name="constructor" element_type="method" />\r
-                                               <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>\r
-                                               <spec_statement>spec_statement</spec_statement>\r
-                                       </spec>\r
-                               </specs>\r
-                       </testcase>\r
-                       <testcase\r
-                               purpose="Tests that the user agent applies rule for getting a single attribute value to the defaultlocale attribute."\r
-                               type="compliance" status="ready" component="WebAPI/W3C_Widget/WidgetPackaging"\r
-                               execution_type="manual" priority="P3" id="dlocignore01">\r
-                               <description>\r
-                                       <pre_condition />\r
-                                       <post_condition />\r
-                                       <steps>\r
-                                               <step order="1">\r
-                                                       <step_desc>Install /opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/ta-de-001.wgt</step_desc>\r
-                                                       <expected> To pass, the name of the widget must be the value PASS..</expected>\r
-                                               </step>\r
-                                       </steps>\r
-                                       <test_script_entry>/opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/ta-de-001.wgt</test_script_entry>\r
-                               </description>\r
-                               <specs>\r
-                                       <spec>\r
-                                               <spec_assertion category="Tizen Device API Specifications"\r
-                                                       section="Widget" specification="Widget Packaging and XML Configuration"\r
-                                                       interface="Widget" element_name="constructor" element_type="method" />\r
-                                               <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>\r
-                                               <spec_statement>spec_statement</spec_statement>\r
-                                       </spec>\r
-                               </specs>\r
-                       </testcase>\r
-                       <testcase\r
-                               purpose="Test that the user agent matches obscure, yet valid, language tags."\r
-                               type="compliance" status="ready" component="WebAPI/W3C_Widget/WidgetPackaging"\r
-                               execution_type="manual" priority="P3" id="dlocignore02">\r
-                               <description>\r
-                                       <pre_condition />\r
-                                       <post_condition />\r
-                                       <steps>\r
-                                               <step order="1">\r
-                                                       <step_desc>Install /opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/ta-de-002.wgt</step_desc>\r
-                                                       <expected> To pass, the widgets description must be the value PASS..</expected>\r
-                                               </step>\r
-                                       </steps>\r
-                                       <test_script_entry>/opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/ta-de-002.wgt</test_script_entry>\r
-                               </description>\r
-                               <specs>\r
-                                       <spec>\r
-                                               <spec_assertion category="Tizen Device API Specifications"\r
-                                                       section="Widget" specification="Widget Packaging and XML Configuration"\r
-                                                       interface="Widget" element_name="constructor" element_type="method" />\r
-                                               <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>\r
-                                               <spec_statement>spec_statement</spec_statement>\r
-                                       </spec>\r
-                               </specs>\r
-                       </testcase>\r
-                       <testcase\r
-                               purpose="Tests that a language tag already part of the UA's locales list is ignored when it is repeated for defaultlocale attribute."\r
-                               type="compliance" status="ready" component="WebAPI/W3C_Widget/WidgetPackaging"\r
-                               execution_type="manual" priority="P3" id="dlocignore03">\r
-                               <description>\r
-                                       <pre_condition />\r
-                                       <post_condition />\r
-                                       <steps>\r
-                                               <step order="1">\r
-                                                       <step_desc>Install /opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/ta-de-003.wgt</step_desc>\r
-                                                       <expected> \r
-       To pass, the specified value should not be added twice to the locales list of the UA..</expected>\r
-                                               </step>\r
-                                       </steps>\r
-                                       <test_script_entry>/opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/ta-de-003.wgt</test_script_entry>\r
-                               </description>\r
-                               <specs>\r
-                                       <spec>\r
-                                               <spec_assertion category="Tizen Device API Specifications"\r
-                                                       section="Widget" specification="Widget Packaging and XML Configuration"\r
-                                                       interface="Widget" element_name="constructor" element_type="method" />\r
-                                               <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>\r
-                                               <spec_statement>spec_statement</spec_statement>\r
-                                       </spec>\r
-                               </specs>\r
-                       </testcase>\r
-                       <testcase\r
-                               purpose="Tests that the default locale is added to the end of the user agent's locale list \r
-       (and does not override the default language, which is assumed to be 'en')."\r
-                               type="compliance" status="ready" component="WebAPI/W3C_Widget/WidgetPackaging"\r
-                               execution_type="manual" priority="P3" id="dlocignore04">\r
-                               <description>\r
-                                       <pre_condition />\r
-                                       <post_condition />\r
-                                       <steps>\r
-                                               <step order="1">\r
-                                                       <step_desc>Install /opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/ta-de-004.wgt</step_desc>\r
-                                                       <expected> \r
-       To pass, the name of the widget must be PASS..</expected>\r
-                                               </step>\r
-                                       </steps>\r
-                                       <test_script_entry>/opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/ta-de-004.wgt</test_script_entry>\r
-                               </description>\r
-                               <specs>\r
-                                       <spec>\r
-                                               <spec_assertion category="Tizen Device API Specifications"\r
-                                                       section="Widget" specification="Widget Packaging and XML Configuration"\r
-                                                       interface="Widget" element_name="constructor" element_type="method" />\r
-                                               <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>\r
-                                               <spec_statement>spec_statement</spec_statement>\r
-                                       </spec>\r
-                               </specs>\r
-                       </testcase>\r
-                       <testcase\r
-                               purpose="Tests that the value of defaultlocale is also used to in folder-based localization."\r
-                               type="compliance" status="ready" component="WebAPI/W3C_Widget/WidgetPackaging"\r
-                               execution_type="manual" priority="P3" id="dlocuse00">\r
-                               <description>\r
-                                       <pre_condition />\r
-                                       <post_condition />\r
-                                       <steps>\r
-                                               <step order="1">\r
-                                                       <step_desc>Install /opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/ta-de-000.wgt</step_desc>\r
-                                                       <expected>\r
-               To pass, the index.html of the folder 'locales/esx-al/' should be loaded and say PASS..</expected>\r
-                                               </step>\r
-                                       </steps>\r
-                                       <test_script_entry>/opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/ta-de-000.wgt</test_script_entry>\r
-                               </description>\r
-                               <specs>\r
-                                       <spec>\r
-                                               <spec_assertion category="Tizen Device API Specifications"\r
-                                                       section="Widget" specification="Widget Packaging and XML Configuration"\r
-                                                       interface="Widget" element_name="constructor" element_type="method" />\r
-                                               <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>\r
-                                               <spec_statement>spec_statement</spec_statement>\r
-                                       </spec>\r
-                               </specs>\r
-                       </testcase>\r
-                       <testcase\r
-                               purpose="Tests that the value of defaultlocale works in conjunction to xml:lang on the widget element."\r
-                               type="compliance" status="ready" component="WebAPI/W3C_Widget/WidgetPackaging"\r
-                               execution_type="manual" priority="P3" id="dlocuse01">\r
-                               <description>\r
-                                       <pre_condition />\r
-                                       <post_condition />\r
-                                       <steps>\r
-                                               <step order="1">\r
-                                                       <step_desc>Install /opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/dlocuse01.wgt</step_desc>\r
-                                                       <expected>\r
-               To pass, the name of the widget must be PASS..</expected>\r
-                                               </step>\r
-                                       </steps>\r
-                                       <test_script_entry>/opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/dlocuse01.wgt</test_script_entry>\r
-                               </description>\r
-                               <specs>\r
-                                       <spec>\r
-                                               <spec_assertion category="Tizen Device API Specifications"\r
-                                                       section="Widget" specification="Widget Packaging and XML Configuration"\r
-                                                       interface="Widget" element_name="constructor" element_type="method" />\r
-                                               <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>\r
-                                               <spec_statement>spec_statement</spec_statement>\r
-                                       </spec>\r
-                               </specs>\r
-                       </testcase>\r
-                       <testcase\r
-                               purpose="Tests that the UA rejects configuration documents that don't have\r
-       correct widget element at the root."\r
-                               type="compliance" status="ready" component="WebAPI/W3C_Widget/WidgetPackaging"\r
-                               execution_type="manual" priority="P3" id="aa">\r
-                               <description>\r
-                                       <pre_condition />\r
-                                       <post_condition />\r
-                                       <steps>\r
-                                               <step order="1">\r
-                                                       <step_desc>Install /opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/aa.wgt</step_desc>\r
-                                                       <expected> To pass, the UA must treat this as an\r
-       invalid widget (the root element is not widget)..</expected>\r
-                                               </step>\r
-                                       </steps>\r
-                                       <test_script_entry>/opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/aa.wgt</test_script_entry>\r
-                               </description>\r
-                               <specs>\r
-                                       <spec>\r
-                                               <spec_assertion category="Tizen Device API Specifications"\r
-                                                       section="Widget" specification="Widget Packaging and XML Configuration"\r
-                                                       interface="Widget" element_name="constructor" element_type="method" />\r
-                                               <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>\r
-                                               <spec_statement>spec_statement</spec_statement>\r
-                                       </spec>\r
-                               </specs>\r
-                       </testcase>\r
-                       <testcase\r
-                               purpose="Tests that the UA rejects configuration documents that don't have correct\r
-       widget element at the root."\r
-                               type="compliance" status="ready" component="WebAPI/W3C_Widget/WidgetPackaging"\r
-                               execution_type="manual" priority="P3" id="ab">\r
-                               <description>\r
-                                       <pre_condition />\r
-                                       <post_condition />\r
-                                       <steps>\r
-                                               <step order="1">\r
-                                                       <step_desc>Install /opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/ab.wgt</step_desc>\r
-                                                       <expected> To pass, the UA must treat this as an invalid widget (the namespace is wrong)..</expected>\r
-                                               </step>\r
-                                       </steps>\r
-                                       <test_script_entry>/opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/ab.wgt</test_script_entry>\r
-                               </description>\r
-                               <specs>\r
-                                       <spec>\r
-                                               <spec_assertion category="Tizen Device API Specifications"\r
-                                                       section="Widget" specification="Widget Packaging and XML Configuration"\r
-                                                       interface="Widget" element_name="constructor" element_type="method" />\r
-                                               <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>\r
-                                               <spec_statement>spec_statement</spec_statement>\r
-                                       </spec>\r
-                               </specs>\r
-                       </testcase>\r
-                       <testcase\r
-                               purpose="Tests that the UA rejects configuration documents that don't have correct widget\r
-       element at the root."\r
-                               type="compliance" status="ready" component="WebAPI/W3C_Widget/WidgetPackaging"\r
-                               execution_type="manual" priority="P3" id="ac">\r
-                               <description>\r
-                                       <pre_condition />\r
-                                       <post_condition />\r
-                                       <steps>\r
-                                               <step order="1">\r
-                                                       <step_desc>Install /opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/ac.wgt</step_desc>\r
-                                                       <expected>To pass, the UA must treat this as an invalid widget (the namespace is missing)..</expected>\r
-                                               </step>\r
-                                       </steps>\r
-                                       <test_script_entry>/opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/ac.wgt</test_script_entry>\r
-                               </description>\r
-                               <specs>\r
-                                       <spec>\r
-                                               <spec_assertion category="Tizen Device API Specifications"\r
-                                                       section="Widget" specification="Widget Packaging and XML Configuration"\r
-                                                       interface="Widget" element_name="constructor" element_type="method" />\r
-                                               <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>\r
-                                               <spec_statement>spec_statement</spec_statement>\r
-                                       </spec>\r
-                               </specs>\r
-                       </testcase>\r
-                       <testcase\r
-                               purpose="Test that a user agent correctly processes a author element."\r
-                               type="compliance" status="ready" component="WebAPI/W3C_Widget/WidgetPackaging"\r
-                               execution_type="manual" priority="P3" id="af">\r
-                               <description>\r
-                                       <pre_condition />\r
-                                       <post_condition />\r
-                                       <steps>\r
-                                               <step order="1">\r
-                                                       <step_desc>Install /opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/af.wgt</step_desc>\r
-                                                       <expected>\r
-       To pass, the author name must be the string "PASS"..</expected>\r
-                                               </step>\r
-                                       </steps>\r
-                                       <test_script_entry>/opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/af.wgt</test_script_entry>\r
-                               </description>\r
-                               <specs>\r
-                                       <spec>\r
-                                               <spec_assertion category="Tizen Device API Specifications"\r
-                                                       section="Widget" specification="Widget Packaging and XML Configuration"\r
-                                                       interface="Widget" element_name="constructor" element_type="method" />\r
-                                               <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>\r
-                                               <spec_statement>spec_statement</spec_statement>\r
-                                       </spec>\r
-                               </specs>\r
-                       </testcase>\r
-                       <testcase\r
-                               purpose="Test that a user agent correctly applies the Rule for Getting Text Content with Normalized White Space."\r
-                               type="compliance" status="ready" component="WebAPI/W3C_Widget/WidgetPackaging"\r
-                               execution_type="manual" priority="P3" id="ag">\r
-                               <description>\r
-                                       <pre_condition />\r
-                                       <post_condition />\r
-                                       <steps>\r
-                                               <step order="1">\r
-                                                       <step_desc>Install /opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/ag.wgt</step_desc>\r
-                                                       <expected>\r
-       To pass, the widget author must be the string "P A S S" (i.e., white space collapsed to single space)..</expected>\r
-                                               </step>\r
-                                       </steps>\r
-                                       <test_script_entry>/opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/ag.wgt</test_script_entry>\r
-                               </description>\r
-                               <specs>\r
-                                       <spec>\r
-                                               <spec_assertion category="Tizen Device API Specifications"\r
-                                                       section="Widget" specification="Widget Packaging and XML Configuration"\r
-                                                       interface="Widget" element_name="constructor" element_type="method" />\r
-                                               <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>\r
-                                               <spec_statement>spec_statement</spec_statement>\r
-                                       </spec>\r
-                               </specs>\r
-                       </testcase>\r
-                       <testcase\r
-                               purpose="Test that a user agent correctly applies the Rule for Getting Text Content with Normalized White Space."\r
-                               type="compliance" status="ready" component="WebAPI/W3C_Widget/WidgetPackaging"\r
-                               execution_type="manual" priority="P3" id="ah">\r
-                               <description>\r
-                                       <pre_condition />\r
-                                       <post_condition />\r
-                                       <steps>\r
-                                               <step order="1">\r
-                                                       <step_desc>Install /opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/ah.wgt</step_desc>\r
-                                                       <expected>\r
-       To pass, the author name must be the string "PASS" (i.e., all white space collapsed to single space, spaces at start/end trimmed)..</expected>\r
-                                               </step>\r
-                                       </steps>\r
-                                       <test_script_entry>/opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/ah.wgt</test_script_entry>\r
-                               </description>\r
-                               <specs>\r
-                                       <spec>\r
-                                               <spec_assertion category="Tizen Device API Specifications"\r
-                                                       section="Widget" specification="Widget Packaging and XML Configuration"\r
-                                                       interface="Widget" element_name="constructor" element_type="method" />\r
-                                               <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>\r
-                                               <spec_statement>spec_statement</spec_statement>\r
-                                       </spec>\r
-                               </specs>\r
-                       </testcase>\r
-                       <testcase\r
-                               purpose="Test that a user agent correctly applies the rule for getting a single attribute value."\r
-                               type="compliance" status="ready" component="WebAPI/W3C_Widget/WidgetPackaging"\r
-                               execution_type="manual" priority="P3" id="ai">\r
-                               <description>\r
-                                       <pre_condition />\r
-                                       <post_condition />\r
-                                       <steps>\r
-                                               <step order="1">\r
-                                                       <step_desc>Install /opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/ai.wgt</step_desc>\r
-                                                       <expected>\r
-       To pass, the author email must be the string "PASS"..</expected>\r
-                                               </step>\r
-                                       </steps>\r
-                                       <test_script_entry>/opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/ai.wgt</test_script_entry>\r
-                               </description>\r
-                               <specs>\r
-                                       <spec>\r
-                                               <spec_assertion category="Tizen Device API Specifications"\r
-                                                       section="Widget" specification="Widget Packaging and XML Configuration"\r
-                                                       interface="Widget" element_name="constructor" element_type="method" />\r
-                                               <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>\r
-                                               <spec_statement>spec_statement</spec_statement>\r
-                                       </spec>\r
-                               </specs>\r
-                       </testcase>\r
-                       <testcase\r
-                               purpose="Test that a user agent correctly applies the rule for getting a single attribute value and the Rule for Getting Text Content with Normalized White Space."\r
-                               type="compliance" status="ready" component="WebAPI/W3C_Widget/WidgetPackaging"\r
-                               execution_type="manual" priority="P3" id="aj">\r
-                               <description>\r
-                                       <pre_condition />\r
-                                       <post_condition />\r
-                                       <steps>\r
-                                               <step order="1">\r
-                                                       <step_desc>Install /opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/aj.wgt</step_desc>\r
-                                                       <expected>\r
-       To pass, the author name must be the string "PASS"..</expected>\r
-                                               </step>\r
-                                       </steps>\r
-                                       <test_script_entry>/opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/aj.wgt</test_script_entry>\r
-                               </description>\r
-                               <specs>\r
-                                       <spec>\r
-                                               <spec_assertion category="Tizen Device API Specifications"\r
-                                                       section="Widget" specification="Widget Packaging and XML Configuration"\r
-                                                       interface="Widget" element_name="constructor" element_type="method" />\r
-                                               <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>\r
-                                               <spec_statement>spec_statement</spec_statement>\r
-                                       </spec>\r
-                               </specs>\r
-                       </testcase>\r
-                       <testcase\r
-                               purpose="Test that a user agent correctly applies the rule for getting a single attribute value and the Rule for Getting Text Content with Normalized White Space."\r
-                               type="compliance" status="ready" component="WebAPI/W3C_Widget/WidgetPackaging"\r
-                               execution_type="manual" priority="P3" id="ak">\r
-                               <description>\r
-                                       <pre_condition />\r
-                                       <post_condition />\r
-                                       <steps>\r
-                                               <step order="1">\r
-                                                       <step_desc>Install /opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/ak.wgt</step_desc>\r
-                                                       <expected>\r
-       To pass, the author name must be the string "PASS"..</expected>\r
-                                               </step>\r
-                                       </steps>\r
-                                       <test_script_entry>/opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/ak.wgt</test_script_entry>\r
-                               </description>\r
-                               <specs>\r
-                                       <spec>\r
-                                               <spec_assertion category="Tizen Device API Specifications"\r
-                                                       section="Widget" specification="Widget Packaging and XML Configuration"\r
-                                                       interface="Widget" element_name="constructor" element_type="method" />\r
-                                               <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>\r
-                                               <spec_statement>spec_statement</spec_statement>\r
-                                       </spec>\r
-                               </specs>\r
-                       </testcase>\r
-                       <testcase\r
-                               purpose="Test the ability of the user agent to handle an empty author element."\r
-                               type="compliance" status="ready" component="WebAPI/W3C_Widget/WidgetPackaging"\r
-                               execution_type="manual" priority="P3" id="al">\r
-                               <description>\r
-                                       <pre_condition />\r
-                                       <post_condition />\r
-                                       <steps>\r
-                                               <step order="1">\r
-                                                       <step_desc>Install /opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/al.wgt</step_desc>\r
-                                                       <expected>\r
-       To pass, the author name must be an empty string..</expected>\r
-                                               </step>\r
-                                       </steps>\r
-                                       <test_script_entry>/opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/al.wgt</test_script_entry>\r
-                               </description>\r
-                               <specs>\r
-                                       <spec>\r
-                                               <spec_assertion category="Tizen Device API Specifications"\r
-                                                       section="Widget" specification="Widget Packaging and XML Configuration"\r
-                                                       interface="Widget" element_name="constructor" element_type="method" />\r
-                                               <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>\r
-                                               <spec_statement>spec_statement</spec_statement>\r
-                                       </spec>\r
-                               </specs>\r
-                       </testcase>\r
-                       <testcase\r
-                               purpose="Test the ability of the user agent to correctly process the author href attribute."\r
-                               type="compliance" status="ready" component="WebAPI/W3C_Widget/WidgetPackaging"\r
-                               execution_type="manual" priority="P3" id="am">\r
-                               <description>\r
-                                       <pre_condition />\r
-                                       <post_condition />\r
-                                       <steps>\r
-                                               <step order="1">\r
-                                                       <step_desc>Install /opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/am.wgt</step_desc>\r
-                                                       <expected>\r
-       To pass, the value of author href must be "PASS:PASS"..</expected>\r
-                                               </step>\r
-                                       </steps>\r
-                                       <test_script_entry>/opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/am.wgt</test_script_entry>\r
-                               </description>\r
-                               <specs>\r
-                                       <spec>\r
-                                               <spec_assertion category="Tizen Device API Specifications"\r
-                                                       section="Widget" specification="Widget Packaging and XML Configuration"\r
-                                                       interface="Widget" element_name="constructor" element_type="method" />\r
-                                               <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>\r
-                                               <spec_statement>spec_statement</spec_statement>\r
-                                       </spec>\r
-                               </specs>\r
-                       </testcase>\r
-                       <testcase\r
-                               purpose="Test the ability of the user agent to correctly process the author href attribute."\r
-                               type="compliance" status="ready" component="WebAPI/W3C_Widget/WidgetPackaging"\r
-                               execution_type="manual" priority="P3" id="an">\r
-                               <description>\r
-                                       <pre_condition />\r
-                                       <post_condition />\r
-                                       <steps>\r
-                                               <step order="1">\r
-                                                       <step_desc>Install /opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/an.wgt</step_desc>\r
-                                                       <expected>\r
-       To pass, the value of author href must be ignored..</expected>\r
-                                               </step>\r
-                                       </steps>\r
-                                       <test_script_entry>/opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/an.wgt</test_script_entry>\r
-                               </description>\r
-                               <specs>\r
-                                       <spec>\r
-                                               <spec_assertion category="Tizen Device API Specifications"\r
-                                                       section="Widget" specification="Widget Packaging and XML Configuration"\r
-                                                       interface="Widget" element_name="constructor" element_type="method" />\r
-                                               <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>\r
-                                               <spec_statement>spec_statement</spec_statement>\r
-                                       </spec>\r
-                               </specs>\r
-                       </testcase>\r
-                       <testcase\r
-                               purpose="Test that a user agent correctly processes a name element."\r
-                               type="compliance" status="ready" component="WebAPI/W3C_Widget/WidgetPackaging"\r
-                               execution_type="manual" priority="P3" id="ao">\r
-                               <description>\r
-                                       <pre_condition />\r
-                                       <post_condition />\r
-                                       <steps>\r
-                                               <step order="1">\r
-                                                       <step_desc>Install /opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/ao.wgt</step_desc>\r
-                                                       <expected>\r
-       To pass, the widget name must be the string "PASS"..</expected>\r
-                                               </step>\r
-                                       </steps>\r
-                                       <test_script_entry>/opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/ao.wgt</test_script_entry>\r
-                               </description>\r
-                               <specs>\r
-                                       <spec>\r
-                                               <spec_assertion category="Tizen Device API Specifications"\r
-                                                       section="Widget" specification="Widget Packaging and XML Configuration"\r
-                                                       interface="Widget" element_name="constructor" element_type="method" />\r
-                                               <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>\r
-                                               <spec_statement>spec_statement</spec_statement>\r
-                                       </spec>\r
-                               </specs>\r
-                       </testcase>\r
-                       <testcase\r
-                               purpose="Test that a user agent correctly applies the Rule for Getting Text Content with Normalized White Space."\r
-                               type="compliance" status="ready" component="WebAPI/W3C_Widget/WidgetPackaging"\r
-                               execution_type="manual" priority="P3" id="ap">\r
-                               <description>\r
-                                       <pre_condition />\r
-                                       <post_condition />\r
-                                       <steps>\r
-                                               <step order="1">\r
-                                                       <step_desc>Install /opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/ap.wgt</step_desc>\r
-                                                       <expected>\r
-       To pass, the widget name must be the string "P A S S" (i.e., white space collapsed to single space)..</expected>\r
-                                               </step>\r
-                                       </steps>\r
-                                       <test_script_entry>/opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/ap.wgt</test_script_entry>\r
-                               </description>\r
-                               <specs>\r
-                                       <spec>\r
-                                               <spec_assertion category="Tizen Device API Specifications"\r
-                                                       section="Widget" specification="Widget Packaging and XML Configuration"\r
-                                                       interface="Widget" element_name="constructor" element_type="method" />\r
-                                               <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>\r
-                                               <spec_statement>spec_statement</spec_statement>\r
-                                       </spec>\r
-                               </specs>\r
-                       </testcase>\r
-                       <testcase\r
-                               purpose="Test that a user agent correctly applies the Rule for Getting Text Content with Normalized White Space."\r
-                               type="compliance" status="ready" component="WebAPI/W3C_Widget/WidgetPackaging"\r
-                               execution_type="manual" priority="P3" id="aq">\r
-                               <description>\r
-                                       <pre_condition />\r
-                                       <post_condition />\r
-                                       <steps>\r
-                                               <step order="1">\r
-                                                       <step_desc>Install /opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/aq.wgt</step_desc>\r
-                                                       <expected>\r
-       To pass, the widget name must be the string "PASS" (i.e., all white space collapsed to single space, spaces at front/back trimmed)..</expected>\r
-                                               </step>\r
-                                       </steps>\r
-                                       <test_script_entry>/opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/aq.wgt</test_script_entry>\r
-                               </description>\r
-                               <specs>\r
-                                       <spec>\r
-                                               <spec_assertion category="Tizen Device API Specifications"\r
-                                                       section="Widget" specification="Widget Packaging and XML Configuration"\r
-                                                       interface="Widget" element_name="constructor" element_type="method" />\r
-                                               <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>\r
-                                               <spec_statement>spec_statement</spec_statement>\r
-                                       </spec>\r
-                               </specs>\r
-                       </testcase>\r
-                       <testcase\r
-                               purpose="Test that a user agent correctly applies the rule for getting a single attribute value."\r
-                               type="compliance" status="ready" component="WebAPI/W3C_Widget/WidgetPackaging"\r
-                               execution_type="manual" priority="P3" id="ar">\r
-                               <description>\r
-                                       <pre_condition />\r
-                                       <post_condition />\r
-                                       <steps>\r
-                                               <step order="1">\r
-                                                       <step_desc>Install /opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/ar.wgt</step_desc>\r
-                                                       <expected>\r
-       To pass, the widget short name must be the string "PASS"..</expected>\r
-                                               </step>\r
-                                       </steps>\r
-                                       <test_script_entry>/opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/ar.wgt</test_script_entry>\r
-                               </description>\r
-                               <specs>\r
-                                       <spec>\r
-                                               <spec_assertion category="Tizen Device API Specifications"\r
-                                                       section="Widget" specification="Widget Packaging and XML Configuration"\r
-                                                       interface="Widget" element_name="constructor" element_type="method" />\r
-                                               <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>\r
-                                               <spec_statement>spec_statement</spec_statement>\r
-                                       </spec>\r
-                               </specs>\r
-                       </testcase>\r
-                       <testcase\r
-                               purpose="Test that a user agent correctly applies the rule for getting a single attribute value and\r
-       the Rule for Getting Text Content with Normalized White Space."\r
-                               type="compliance" status="ready" component="WebAPI/W3C_Widget/WidgetPackaging"\r
-                               execution_type="manual" priority="P3" id="as">\r
-                               <description>\r
-                                       <pre_condition />\r
-                                       <post_condition />\r
-                                       <steps>\r
-                                               <step order="1">\r
-                                                       <step_desc>Install /opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/as.wgt</step_desc>\r
-                                                       <expected>\r
-       To pass, the widget short name must be the string "PASS" and the widget name must be "PASS"..</expected>\r
-                                               </step>\r
-                                       </steps>\r
-                                       <test_script_entry>/opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/as.wgt</test_script_entry>\r
-                               </description>\r
-                               <specs>\r
-                                       <spec>\r
-                                               <spec_assertion category="Tizen Device API Specifications"\r
-                                                       section="Widget" specification="Widget Packaging and XML Configuration"\r
-                                                       interface="Widget" element_name="constructor" element_type="method" />\r
-                                               <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>\r
-                                               <spec_statement>spec_statement</spec_statement>\r
-                                       </spec>\r
-                               </specs>\r
-                       </testcase>\r
-                       <testcase\r
-                               purpose="Test that a user agent correctly applies the rule for getting a single attribute value and\r
-       the Rule for Getting Text Content with Normalized White Space."\r
-                               type="compliance" status="ready" component="WebAPI/W3C_Widget/WidgetPackaging"\r
-                               execution_type="manual" priority="P3" id="at">\r
-                               <description>\r
-                                       <pre_condition />\r
-                                       <post_condition />\r
-                                       <steps>\r
-                                               <step order="1">\r
-                                                       <step_desc>Install /opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/at.wgt</step_desc>\r
-                                                       <expected>\r
-       To pass, the widget short name must be the string "PASS" and the widget name must be "PASS"..</expected>\r
-                                               </step>\r
-                                       </steps>\r
-                                       <test_script_entry>/opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/at.wgt</test_script_entry>\r
-                               </description>\r
-                               <specs>\r
-                                       <spec>\r
-                                               <spec_assertion category="Tizen Device API Specifications"\r
-                                                       section="Widget" specification="Widget Packaging and XML Configuration"\r
-                                                       interface="Widget" element_name="constructor" element_type="method" />\r
-                                               <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>\r
-                                               <spec_statement>spec_statement</spec_statement>\r
-                                       </spec>\r
-                               </specs>\r
-                       </testcase>\r
-                       <testcase\r
-                               purpose="Test that a user agent correctly processes the short attribute."\r
-                               type="compliance" status="ready" component="WebAPI/W3C_Widget/WidgetPackaging"\r
-                               execution_type="manual" priority="P3" id="au">\r
-                               <description>\r
-                                       <pre_condition />\r
-                                       <post_condition />\r
-                                       <steps>\r
-                                               <step order="1">\r
-                                                       <step_desc>Install /opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/au.wgt</step_desc>\r
-                                                       <expected>\r
-       To pass, the widget short name must be an empty string..</expected>\r
-                                               </step>\r
-                                       </steps>\r
-                                       <test_script_entry>/opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/au.wgt</test_script_entry>\r
-                               </description>\r
-                               <specs>\r
-                                       <spec>\r
-                                               <spec_assertion category="Tizen Device API Specifications"\r
-                                                       section="Widget" specification="Widget Packaging and XML Configuration"\r
-                                                       interface="Widget" element_name="constructor" element_type="method" />\r
-                                               <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>\r
-                                               <spec_statement>spec_statement</spec_statement>\r
-                                       </spec>\r
-                               </specs>\r
-                       </testcase>\r
-                       <testcase\r
-                               purpose="Test the ability of the user agent to handle an empty name element."\r
-                               type="compliance" status="ready" component="WebAPI/W3C_Widget/WidgetPackaging"\r
-                               execution_type="manual" priority="P3" id="av">\r
-                               <description>\r
-                                       <pre_condition />\r
-                                       <post_condition />\r
-                                       <steps>\r
-                                               <step order="1">\r
-                                                       <step_desc>Install /opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/av.wgt</step_desc>\r
-                                                       <expected>\r
-       To pass, the widget name must be an empty string..</expected>\r
-                                               </step>\r
-                                       </steps>\r
-                                       <test_script_entry>/opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/av.wgt</test_script_entry>\r
-                               </description>\r
-                               <specs>\r
-                                       <spec>\r
-                                               <spec_assertion category="Tizen Device API Specifications"\r
-                                                       section="Widget" specification="Widget Packaging and XML Configuration"\r
-                                                       interface="Widget" element_name="constructor" element_type="method" />\r
-                                               <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>\r
-                                               <spec_statement>spec_statement</spec_statement>\r
-                                       </spec>\r
-                               </specs>\r
-                       </testcase>\r
-                       <testcase\r
-                               purpose="Test that a user agent correctly processes a name element with xml:lang attribute."\r
-                               type="compliance" status="ready" component="WebAPI/W3C_Widget/WidgetPackaging"\r
-                               execution_type="manual" priority="P3" id="oa">\r
-                               <description>\r
-                                       <pre_condition />\r
-                                       <post_condition />\r
-                                       <steps>\r
-                                               <step order="1">\r
-                                                       <step_desc>Install /opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/oa.wgt</step_desc>\r
-                                                       <expected>\r
-       To pass, the widget name must be the string "PASS"..</expected>\r
-                                               </step>\r
-                                       </steps>\r
-                                       <test_script_entry>/opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/oa.wgt</test_script_entry>\r
-                               </description>\r
-                               <specs>\r
-                                       <spec>\r
-                                               <spec_assertion category="Tizen Device API Specifications"\r
-                                                       section="Widget" specification="Widget Packaging and XML Configuration"\r
-                                                       interface="Widget" element_name="constructor" element_type="method" />\r
-                                               <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>\r
-                                               <spec_statement>spec_statement</spec_statement>\r
-                                       </spec>\r
-                               </specs>\r
-                       </testcase>\r
-                       <testcase\r
-                               purpose="Test that the user agent does not attempt to load a default start file when a custom start file has been declared."\r
-                               type="compliance" status="ready" component="WebAPI/W3C_Widget/WidgetPackaging"\r
-                               execution_type="manual" priority="P3" id="aw">\r
-                               <description>\r
-                                       <pre_condition />\r
-                                       <post_condition />\r
-                                       <steps>\r
-                                               <step order="1">\r
-                                                       <step_desc>Install /opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/aw.wgt</step_desc>\r
-                                                       <expected>\r
-       To pass, the widget start file must point to "pass.html" and the icons list must contain a pointer to "icon.png" at the root of the widget..</expected>\r
-                                               </step>\r
-                                       </steps>\r
-                                       <test_script_entry>/opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/aw.wgt</test_script_entry>\r
-                               </description>\r
-                               <specs>\r
-                                       <spec>\r
-                                               <spec_assertion category="Tizen Device API Specifications"\r
-                                                       section="Widget" specification="Widget Packaging and XML Configuration"\r
-                                                       interface="Widget" element_name="constructor" element_type="method" />\r
-                                               <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>\r
-                                               <spec_statement>spec_statement</spec_statement>\r
-                                       </spec>\r
-                               </specs>\r
-                       </testcase>\r
-                       <testcase purpose="Test the UA's ability process the height attribute."\r
-                               type="compliance" status="ready" component="WebAPI/W3C_Widget/WidgetPackaging"\r
-                               execution_type="manual" priority="P3" id="ax">\r
-                               <description>\r
-                                       <pre_condition />\r
-                                       <post_condition />\r
-                                       <steps>\r
-                                               <step order="1">\r
-                                                       <step_desc>Install /opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/ax.wgt</step_desc>\r
-                                                       <expected>\r
-       To pass, the widget height must be either the numeric value 123 or a value greater than 0..</expected>\r
-                                               </step>\r
-                                       </steps>\r
-                                       <test_script_entry>/opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/ax.wgt</test_script_entry>\r
-                               </description>\r
-                               <specs>\r
-                                       <spec>\r
-                                               <spec_assertion category="Tizen Device API Specifications"\r
-                                                       section="Widget" specification="Widget Packaging and XML Configuration"\r
-                                                       interface="Widget" element_name="constructor" element_type="method" />\r
-                                               <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>\r
-                                               <spec_statement>spec_statement</spec_statement>\r
-                                       </spec>\r
-                               </specs>\r
-                       </testcase>\r
-                       <testcase purpose="Test the UA's ability process the height attribute."\r
-                               type="compliance" status="ready" component="WebAPI/W3C_Widget/WidgetPackaging"\r
-                               execution_type="manual" priority="P3" id="ay">\r
-                               <description>\r
-                                       <pre_condition />\r
-                                       <post_condition />\r
-                                       <steps>\r
-                                               <step order="1">\r
-                                                       <step_desc>Install /opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/ay.wgt</step_desc>\r
-                                                       <expected>\r
-       To pass, the user agent must ignore the value of the height attribute (the value is composed of characters)..</expected>\r
-                                               </step>\r
-                                       </steps>\r
-                                       <test_script_entry>/opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/ay.wgt</test_script_entry>\r
-                               </description>\r
-                               <specs>\r
-                                       <spec>\r
-                                               <spec_assertion category="Tizen Device API Specifications"\r
-                                                       section="Widget" specification="Widget Packaging and XML Configuration"\r
-                                                       interface="Widget" element_name="constructor" element_type="method" />\r
-                                               <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>\r
-                                               <spec_statement>spec_statement</spec_statement>\r
-                                       </spec>\r
-                               </specs>\r
-                       </testcase>\r
-                       <testcase purpose="Test the UA's ability process the height attribute."\r
-                               type="compliance" status="ready" component="WebAPI/W3C_Widget/WidgetPackaging"\r
-                               execution_type="manual" priority="P3" id="az">\r
-                               <description>\r
-                                       <pre_condition />\r
-                                       <post_condition />\r
-                                       <steps>\r
-                                               <step order="1">\r
-                                                       <step_desc>Install /opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/az.wgt</step_desc>\r
-                                                       <expected>\r
-       To pass, the widget height must be the numeric value 100 or a value greater than 0 (resulting from rule for parsing a non-negative integer)..</expected>\r
-                                               </step>\r
-                                       </steps>\r
-                                       <test_script_entry>/opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/az.wgt</test_script_entry>\r
-                               </description>\r
-                               <specs>\r
-                                       <spec>\r
-                                               <spec_assertion category="Tizen Device API Specifications"\r
-                                                       section="Widget" specification="Widget Packaging and XML Configuration"\r
-                                                       interface="Widget" element_name="constructor" element_type="method" />\r
-                                               <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>\r
-                                               <spec_statement>spec_statement</spec_statement>\r
-                                       </spec>\r
-                               </specs>\r
-                       </testcase>\r
-                       <testcase purpose="Test the UA's ability process the height attribute."\r
-                               type="compliance" status="ready" component="WebAPI/W3C_Widget/WidgetPackaging"\r
-                               execution_type="manual" priority="P3" id="a1">\r
-                               <description>\r
-                                       <pre_condition />\r
-                                       <post_condition />\r
-                                       <steps>\r
-                                               <step order="1">\r
-                                                       <step_desc>Install /opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/a1.wgt</step_desc>\r
-                                                       <expected>\r
-       To pass, the widget height must be the numeric value 123 or a value greater than 0 (resulting from rule for parsing a non-negative integer)..</expected>\r
-                                               </step>\r
-                                       </steps>\r
-                                       <test_script_entry>/opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/a1.wgt</test_script_entry>\r
-                               </description>\r
-                               <specs>\r
-                                       <spec>\r
-                                               <spec_assertion category="Tizen Device API Specifications"\r
-                                                       section="Widget" specification="Widget Packaging and XML Configuration"\r
-                                                       interface="Widget" element_name="constructor" element_type="method" />\r
-                                               <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>\r
-                                               <spec_statement>spec_statement</spec_statement>\r
-                                       </spec>\r
-                               </specs>\r
-                       </testcase>\r
-                       <testcase purpose="Test the UA's ability process the height attribute."\r
-                               type="compliance" status="ready" component="WebAPI/W3C_Widget/WidgetPackaging"\r
-                               execution_type="manual" priority="P3" id="a2">\r
-                               <description>\r
-                                       <pre_condition />\r
-                                       <post_condition />\r
-                                       <steps>\r
-                                               <step order="1">\r
-                                                       <step_desc>Install /opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/a2.wgt</step_desc>\r
-                                                       <expected>\r
-       To pass, the widget height must be ignored (the value is an empty string, hence it would be ignored)..</expected>\r
-                                               </step>\r
-                                       </steps>\r
-                                       <test_script_entry>/opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/a2.wgt</test_script_entry>\r
-                               </description>\r
-                               <specs>\r
-                                       <spec>\r
-                                               <spec_assertion category="Tizen Device API Specifications"\r
-                                                       section="Widget" specification="Widget Packaging and XML Configuration"\r
-                                                       interface="Widget" element_name="constructor" element_type="method" />\r
-                                               <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>\r
-                                               <spec_statement>spec_statement</spec_statement>\r
-                                       </spec>\r
-                               </specs>\r
-                       </testcase>\r
-                       <testcase purpose="Test the UA's ability process the height attribute."\r
-                               type="compliance" status="ready" component="WebAPI/W3C_Widget/WidgetPackaging"\r
-                               execution_type="manual" priority="P3" id="a3">\r
-                               <description>\r
-                                       <pre_condition />\r
-                                       <post_condition />\r
-                                       <steps>\r
-                                               <step order="1">\r
-                                                       <step_desc>Install /opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/a3.wgt</step_desc>\r
-                                                       <expected>\r
-       To pass, the widget height must be ignored (the value is a sequence of space characters, hence it would be ignored)..</expected>\r
-                                               </step>\r
-                                       </steps>\r
-                                       <test_script_entry>/opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/a3.wgt</test_script_entry>\r
-                               </description>\r
-                               <specs>\r
-                                       <spec>\r
-                                               <spec_assertion category="Tizen Device API Specifications"\r
-                                                       section="Widget" specification="Widget Packaging and XML Configuration"\r
-                                                       interface="Widget" element_name="constructor" element_type="method" />\r
-                                               <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>\r
-                                               <spec_statement>spec_statement</spec_statement>\r
-                                       </spec>\r
-                               </specs>\r
-                       </testcase>\r
-                       <testcase purpose="Test the UA's ability process the height attribute."\r
-                               type="compliance" status="ready" component="WebAPI/W3C_Widget/WidgetPackaging"\r
-                               execution_type="manual" priority="P3" id="a4">\r
-                               <description>\r
-                                       <pre_condition />\r
-                                       <post_condition />\r
-                                       <steps>\r
-                                               <step order="1">\r
-                                                       <step_desc>Install /opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/a4.wgt</step_desc>\r
-                                                       <expected>\r
-       To pass, the widget height must be ignored (the value is an empty string)..</expected>\r
-                                               </step>\r
-                                       </steps>\r
-                                       <test_script_entry>/opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/a4.wgt</test_script_entry>\r
-                               </description>\r
-                               <specs>\r
-                                       <spec>\r
-                                               <spec_assertion category="Tizen Device API Specifications"\r
-                                                       section="Widget" specification="Widget Packaging and XML Configuration"\r
-                                                       interface="Widget" element_name="constructor" element_type="method" />\r
-                                               <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>\r
-                                               <spec_statement>spec_statement</spec_statement>\r
-                                       </spec>\r
-                               </specs>\r
-                       </testcase>\r
-                       <testcase\r
-                               purpose="Test that the UA skips preference elements without a name attribute."\r
-                               type="compliance" status="ready" component="WebAPI/W3C_Widget/WidgetPackaging"\r
-                               execution_type="manual" priority="P3" id="a5">\r
-                               <description>\r
-                                       <pre_condition />\r
-                                       <post_condition />\r
-                                       <steps>\r
-                                               <step order="1">\r
-                                                       <step_desc>Install /opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/a5.wgt</step_desc>\r
-                                                       <expected>\r
-       To pass, widget preferences must remain an empty list (i.e., the preference is skipped)..</expected>\r
-                                               </step>\r
-                                       </steps>\r
-                                       <test_script_entry>/opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/a5.wgt</test_script_entry>\r
-                               </description>\r
-                               <specs>\r
-                                       <spec>\r
-                                               <spec_assertion category="Tizen Device API Specifications"\r
-                                                       section="Widget" specification="Widget Packaging and XML Configuration"\r
-                                                       interface="Widget" element_name="constructor" element_type="method" />\r
-                                               <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>\r
-                                               <spec_statement>spec_statement</spec_statement>\r
-                                       </spec>\r
-                               </specs>\r
-                       </testcase>\r
-                       <testcase\r
-                               purpose="Test that the UA skips preference element already defined."\r
-                               type="compliance" status="ready" component="WebAPI/W3C_Widget/WidgetPackaging"\r
-                               execution_type="manual" priority="P3" id="a6">\r
-                               <description>\r
-                                       <pre_condition />\r
-                                       <post_condition />\r
-                                       <steps>\r
-                                               <step order="1">\r
-                                                       <step_desc>Install /opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/a6.wgt</step_desc>\r
-                                                       <expected>\r
-       To pass, widget preference must contain one preference whose name is "PASS" and whose value is "PASS" and whose readonly attr value must be "false"..</expected>\r
-                                               </step>\r
-                                       </steps>\r
-                                       <test_script_entry>/opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/a6.wgt</test_script_entry>\r
-                               </description>\r
-                               <specs>\r
-                                       <spec>\r
-                                               <spec_assertion category="Tizen Device API Specifications"\r
-                                                       section="Widget" specification="Widget Packaging and XML Configuration"\r
-                                                       interface="Widget" element_name="constructor" element_type="method" />\r
-                                               <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>\r
-                                               <spec_statement>spec_statement</spec_statement>\r
-                                       </spec>\r
-                               </specs>\r
-                       </testcase>\r
-                       <testcase\r
-                               purpose="Test that the UA does a case sensitive comparison on the value of the readonly attribute."\r
-                               type="compliance" status="ready" component="WebAPI/W3C_Widget/WidgetPackaging"\r
-                               execution_type="manual" priority="P3" id="a7">\r
-                               <description>\r
-                                       <pre_condition />\r
-                                       <post_condition />\r
-                                       <steps>\r
-                                               <step order="1">\r
-                                                       <step_desc>Install /opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/a7.wgt</step_desc>\r
-                                                       <expected>\r
-       To pass, widget preference must contain one preference whose name is "PASS" and whose value is "PASS" and whose readonly attr value must be "false"..</expected>\r
-                                               </step>\r
-                                       </steps>\r
-                                       <test_script_entry>/opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/a7.wgt</test_script_entry>\r
-                               </description>\r
-                               <specs>\r
-                                       <spec>\r
-                                               <spec_assertion category="Tizen Device API Specifications"\r
-                                                       section="Widget" specification="Widget Packaging and XML Configuration"\r
-                                                       interface="Widget" element_name="constructor" element_type="method" />\r
-                                               <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>\r
-                                               <spec_statement>spec_statement</spec_statement>\r
-                                       </spec>\r
-                               </specs>\r
-                       </testcase>\r
-                       <testcase\r
-                               purpose="Test that the UA does a case sensitive comparison on the value of the readonly attribute."\r
-                               type="compliance" status="ready" component="WebAPI/W3C_Widget/WidgetPackaging"\r
-                               execution_type="manual" priority="P3" id="a8">\r
-                               <description>\r
-                                       <pre_condition />\r
-                                       <post_condition />\r
-                                       <steps>\r
-                                               <step order="1">\r
-                                                       <step_desc>Install /opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/a8.wgt</step_desc>\r
-                                                       <expected>\r
-       To pass, widget preference must contain one preference whose name is "PASS" and whose value is "PASS" and whose readonly attr value must be "true"..</expected>\r
-                                               </step>\r
-                                       </steps>\r
-                                       <test_script_entry>/opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/a8.wgt</test_script_entry>\r
-                               </description>\r
-                               <specs>\r
-                                       <spec>\r
-                                               <spec_assertion category="Tizen Device API Specifications"\r
-                                                       section="Widget" specification="Widget Packaging and XML Configuration"\r
-                                                       interface="Widget" element_name="constructor" element_type="method" />\r
-                                               <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>\r
-                                               <spec_statement>spec_statement</spec_statement>\r
-                                       </spec>\r
-                               </specs>\r
-                       </testcase>\r
-                       <testcase\r
-                               purpose="Test that the UA sets the readonly attribute to false by default."\r
-                               type="compliance" status="ready" component="WebAPI/W3C_Widget/WidgetPackaging"\r
-                               execution_type="manual" priority="P3" id="a9">\r
-                               <description>\r
-                                       <pre_condition />\r
-                                       <post_condition />\r
-                                       <steps>\r
-                                               <step order="1">\r
-                                                       <step_desc>Install /opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/a9.wgt</step_desc>\r
-                                                       <expected>\r
-       To pass, widget preference must contain one preference whose name is "PASS" and whose value is "PASS" and whose readonly attr value must be "false"..</expected>\r
-                                               </step>\r
-                                       </steps>\r
-                                       <test_script_entry>/opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/a9.wgt</test_script_entry>\r
-                               </description>\r
-                               <specs>\r
-                                       <spec>\r
-                                               <spec_assertion category="Tizen Device API Specifications"\r
-                                                       section="Widget" specification="Widget Packaging and XML Configuration"\r
-                                                       interface="Widget" element_name="constructor" element_type="method" />\r
-                                               <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>\r
-                                               <spec_statement>spec_statement</spec_statement>\r
-                                       </spec>\r
-                               </specs>\r
-                       </testcase>\r
-                       <testcase\r
-                               purpose="Test that the UA skips multiple preference element already defined."\r
-                               type="compliance" status="ready" component="WebAPI/W3C_Widget/WidgetPackaging"\r
-                               execution_type="manual" priority="P3" id="ba">\r
-                               <description>\r
-                                       <pre_condition />\r
-                                       <post_condition />\r
-                                       <steps>\r
-                                               <step order="1">\r
-                                                       <step_desc>Install /opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/ba.wgt</step_desc>\r
-                                                       <expected>\r
-       To pass, widget preference must contain one preference whose name is "a" and whose value is "a" and whose readonly attr value must be "false"..</expected>\r
-                                               </step>\r
-                                       </steps>\r
-                                       <test_script_entry>/opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/ba.wgt</test_script_entry>\r
-                               </description>\r
-                               <specs>\r
-                                       <spec>\r
-                                               <spec_assertion category="Tizen Device API Specifications"\r
-                                                       section="Widget" specification="Widget Packaging and XML Configuration"\r
-                                                       interface="Widget" element_name="constructor" element_type="method" />\r
-                                               <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>\r
-                                               <spec_statement>spec_statement</spec_statement>\r
-                                       </spec>\r
-                               </specs>\r
-                       </testcase>\r
-                       <testcase\r
-                               purpose="Test the UA's ability store preferences whose name vary only in case."\r
-                               type="compliance" status="ready" component="WebAPI/W3C_Widget/WidgetPackaging"\r
-                               execution_type="manual" priority="P3" id="bb">\r
-                               <description>\r
-                                       <pre_condition />\r
-                                       <post_condition />\r
-                                       <steps>\r
-                                               <step order="1">\r
-                                                       <step_desc>Install /opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/bb.wgt</step_desc>\r
-                                                       <expected>\r
-       To pass, widget preference must contain two preferences: 1 must have a name "a" and whose value is "a" and whose readonly attr value must be "false". 2 must have a name "A" and whose value is "b" and whose readonly attribute value must be "false"..</expected>\r
-                                               </step>\r
-                                       </steps>\r
-                                       <test_script_entry>/opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/bb.wgt</test_script_entry>\r
-                               </description>\r
-                               <specs>\r
-                                       <spec>\r
-                                               <spec_assertion category="Tizen Device API Specifications"\r
-                                                       section="Widget" specification="Widget Packaging and XML Configuration"\r
-                                                       interface="Widget" element_name="constructor" element_type="method" />\r
-                                               <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>\r
-                                               <spec_statement>spec_statement</spec_statement>\r
-                                       </spec>\r
-                               </specs>\r
-                       </testcase>\r
-                       <testcase\r
-                               purpose="Tests that the UA applies the rule for getting a single attribute value to name, value, and readonly attributes."\r
-                               type="compliance" status="ready" component="WebAPI/W3C_Widget/WidgetPackaging"\r
-                               execution_type="manual" priority="P3" id="bc">\r
-                               <description>\r
-                                       <pre_condition />\r
-                                       <post_condition />\r
-                                       <steps>\r
-                                               <step order="1">\r
-                                                       <step_desc>Install /opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/bc.wgt</step_desc>\r
-                                                       <expected>\r
-       To pass, widget preference must contain one preference whose name is "PASS" and whose value is "PASS" and whose readonly attr value must be "false"..</expected>\r
-                                               </step>\r
-                                       </steps>\r
-                                       <test_script_entry>/opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/bc.wgt</test_script_entry>\r
-                               </description>\r
-                               <specs>\r
-                                       <spec>\r
-                                               <spec_assertion category="Tizen Device API Specifications"\r
-                                                       section="Widget" specification="Widget Packaging and XML Configuration"\r
-                                                       interface="Widget" element_name="constructor" element_type="method" />\r
-                                               <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>\r
-                                               <spec_statement>spec_statement</spec_statement>\r
-                                       </spec>\r
-                               </specs>\r
-                       </testcase>\r
-                       <testcase\r
-                               purpose="Test to make sure that the UA only checks the root of the widget for config files, and not in an arbitrary folder."\r
-                               type="compliance" status="ready" component="WebAPI/W3C_Widget/WidgetPackaging"\r
-                               execution_type="manual" priority="P3" id="bg">\r
-                               <description>\r
-                                       <pre_condition />\r
-                                       <post_condition />\r
-                                       <steps>\r
-                                               <step order="1">\r
-                                                       <step_desc>Install /opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/bg.wgt</step_desc>\r
-                                                       <expected>\r
-       To pass, the user agent must treat this widget as an invalid widget (config file is not at the root)..</expected>\r
-                                               </step>\r
-                                       </steps>\r
-                                       <test_script_entry>/opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/bg.wgt</test_script_entry>\r
-                               </description>\r
-                               <specs>\r
-                                       <spec>\r
-                                               <spec_assertion category="Tizen Device API Specifications"\r
-                                                       section="Widget" specification="Widget Packaging and XML Configuration"\r
-                                                       interface="Widget" element_name="constructor" element_type="method" />\r
-                                               <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>\r
-                                               <spec_statement>spec_statement</spec_statement>\r
-                                       </spec>\r
-                               </specs>\r
-                       </testcase>\r
-                       <testcase\r
-                               purpose="Test to make sure that the UA only checks the root of the widget for config files, and not in a locale folder."\r
-                               type="compliance" status="ready" component="WebAPI/W3C_Widget/WidgetPackaging"\r
-                               execution_type="manual" priority="P3" id="bh">\r
-                               <description>\r
-                                       <pre_condition />\r
-                                       <post_condition />\r
-                                       <steps>\r
-                                               <step order="1">\r
-                                                       <step_desc>Install /opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/bh.wgt</step_desc>\r
-                                                       <expected>\r
-       To pass, the user agent must treat this widget as an invalid widget (config file is not at the root, but in locale folder)..</expected>\r
-                                               </step>\r
-                                       </steps>\r
-                                       <test_script_entry>/opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/bh.wgt</test_script_entry>\r
-                               </description>\r
-                               <specs>\r
-                                       <spec>\r
-                                               <spec_assertion category="Tizen Device API Specifications"\r
-                                                       section="Widget" specification="Widget Packaging and XML Configuration"\r
-                                                       interface="Widget" element_name="constructor" element_type="method" />\r
-                                               <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>\r
-                                               <spec_statement>spec_statement</spec_statement>\r
-                                       </spec>\r
-                               </specs>\r
-                       </testcase>\r
-               </set>\r
-       </suite>\r
-</test_definition>\r
diff --git a/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite2.0/CONFIG b/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite2.0/CONFIG
deleted file mode 100755 (executable)
index e6b6d74..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-[LOGGING]
-log_level=INFO
-
-[EXTENSION]
-crosswalk=--external-extensions-path=/usr/lib/tizen-extensions-crosswalk
-
-[TIZEN]
-tizen_user=app
diff --git a/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite2.0/LICENSE b/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite2.0/LICENSE
deleted file mode 100755 (executable)
index 6d45519..0000000
+++ /dev/null
@@ -1,340 +0,0 @@
-                   GNU GENERAL PUBLIC LICENSE
-                      Version 2, June 1991
-
- Copyright (C) 1989, 1991 Free Software Foundation, Inc.
-                       51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
-                           Preamble
-
-  The licenses for most software are designed to take away your
-freedom to share and change it.  By contrast, the GNU General Public
-License is intended to guarantee your freedom to share and change free
-software--to make sure the software is free for all its users.  This
-General Public License applies to most of the Free Software
-Foundation's software and to any other program whose authors commit to
-using it.  (Some other Free Software Foundation software is covered by
-the GNU Library General Public License instead.)  You can apply it to
-your programs, too.
-
-  When we speak of free software, we are referring to freedom, not
-price.  Our General Public Licenses are designed to make sure that you
-have the freedom to distribute copies of free software (and charge for
-this service if you wish), that you receive source code or can get it
-if you want it, that you can change the software or use pieces of it
-in new free programs; and that you know you can do these things.
-
-  To protect your rights, we need to make restrictions that forbid
-anyone to deny you these rights or to ask you to surrender the rights.
-These restrictions translate to certain responsibilities for you if you
-distribute copies of the software, or if you modify it.
-
-  For example, if you distribute copies of such a program, whether
-gratis or for a fee, you must give the recipients all the rights that
-you have.  You must make sure that they, too, receive or can get the
-source code.  And you must show them these terms so they know their
-rights.
-
-  We protect your rights with two steps: (1) copyright the software, and
-(2) offer you this license which gives you legal permission to copy,
-distribute and/or modify the software.
-
-  Also, for each author's protection and ours, we want to make certain
-that everyone understands that there is no warranty for this free
-software.  If the software is modified by someone else and passed on, we
-want its recipients to know that what they have is not the original, so
-that any problems introduced by others will not reflect on the original
-authors' reputations.
-
-  Finally, any free program is threatened constantly by software
-patents.  We wish to avoid the danger that redistributors of a free
-program will individually obtain patent licenses, in effect making the
-program proprietary.  To prevent this, we have made it clear that any
-patent must be licensed for everyone's free use or not licensed at all.
-
-  The precise terms and conditions for copying, distribution and
-modification follow.
-
-                   GNU GENERAL PUBLIC LICENSE
-   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
-
-  0. This License applies to any program or other work which contains
-a notice placed by the copyright holder saying it may be distributed
-under the terms of this General Public License.  The "Program", below,
-refers to any such program or work, and a "work based on the Program"
-means either the Program or any derivative work under copyright law:
-that is to say, a work containing the Program or a portion of it,
-either verbatim or with modifications and/or translated into another
-language.  (Hereinafter, translation is included without limitation in
-the term "modification".)  Each licensee is addressed as "you".
-
-Activities other than copying, distribution and modification are not
-covered by this License; they are outside its scope.  The act of
-running the Program is not restricted, and the output from the Program
-is covered only if its contents constitute a work based on the
-Program (independent of having been made by running the Program).
-Whether that is true depends on what the Program does.
-
-  1. You may copy and distribute verbatim copies of the Program's
-source code as you receive it, in any medium, provided that you
-conspicuously and appropriately publish on each copy an appropriate
-copyright notice and disclaimer of warranty; keep intact all the
-notices that refer to this License and to the absence of any warranty;
-and give any other recipients of the Program a copy of this License
-along with the Program.
-
-You may charge a fee for the physical act of transferring a copy, and
-you may at your option offer warranty protection in exchange for a fee.
-
-  2. You may modify your copy or copies of the Program or any portion
-of it, thus forming a work based on the Program, and copy and
-distribute such modifications or work under the terms of Section 1
-above, provided that you also meet all of these conditions:
-
-    a) You must cause the modified files to carry prominent notices
-    stating that you changed the files and the date of any change.
-
-    b) You must cause any work that you distribute or publish, that in
-    whole or in part contains or is derived from the Program or any
-    part thereof, to be licensed as a whole at no charge to all third
-    parties under the terms of this License.
-
-    c) If the modified program normally reads commands interactively
-    when run, you must cause it, when started running for such
-    interactive use in the most ordinary way, to print or display an
-    announcement including an appropriate copyright notice and a
-    notice that there is no warranty (or else, saying that you provide
-    a warranty) and that users may redistribute the program under
-    these conditions, and telling the user how to view a copy of this
-    License.  (Exception: if the Program itself is interactive but
-    does not normally print such an announcement, your work based on
-    the Program is not required to print an announcement.)
-
-These requirements apply to the modified work as a whole.  If
-identifiable sections of that work are not derived from the Program,
-and can be reasonably considered independent and separate works in
-themselves, then this License, and its terms, do not apply to those
-sections when you distribute them as separate works.  But when you
-distribute the same sections as part of a whole which is a work based
-on the Program, the distribution of the whole must be on the terms of
-this License, whose permissions for other licensees extend to the
-entire whole, and thus to each and every part regardless of who wrote it.
-
-Thus, it is not the intent of this section to claim rights or contest
-your rights to work written entirely by you; rather, the intent is to
-exercise the right to control the distribution of derivative or
-collective works based on the Program.
-
-In addition, mere aggregation of another work not based on the Program
-with the Program (or with a work based on the Program) on a volume of
-a storage or distribution medium does not bring the other work under
-the scope of this License.
-
-  3. You may copy and distribute the Program (or a work based on it,
-under Section 2) in object code or executable form under the terms of
-Sections 1 and 2 above provided that you also do one of the following:
-
-    a) Accompany it with the complete corresponding machine-readable
-    source code, which must be distributed under the terms of Sections
-    1 and 2 above on a medium customarily used for software interchange; or,
-
-    b) Accompany it with a written offer, valid for at least three
-    years, to give any third party, for a charge no more than your
-    cost of physically performing source distribution, a complete
-    machine-readable copy of the corresponding source code, to be
-    distributed under the terms of Sections 1 and 2 above on a medium
-    customarily used for software interchange; or,
-
-    c) Accompany it with the information you received as to the offer
-    to distribute corresponding source code.  (This alternative is
-    allowed only for noncommercial distribution and only if you
-    received the program in object code or executable form with such
-    an offer, in accord with Subsection b above.)
-
-The source code for a work means the preferred form of the work for
-making modifications to it.  For an executable work, complete source
-code means all the source code for all modules it contains, plus any
-associated interface definition files, plus the scripts used to
-control compilation and installation of the executable.  However, as a
-special exception, the source code distributed need not include
-anything that is normally distributed (in either source or binary
-form) with the major components (compiler, kernel, and so on) of the
-operating system on which the executable runs, unless that component
-itself accompanies the executable.
-
-If distribution of executable or object code is made by offering
-access to copy from a designated place, then offering equivalent
-access to copy the source code from the same place counts as
-distribution of the source code, even though third parties are not
-compelled to copy the source along with the object code.
-
-  4. You may not copy, modify, sublicense, or distribute the Program
-except as expressly provided under this License.  Any attempt
-otherwise to copy, modify, sublicense or distribute the Program is
-void, and will automatically terminate your rights under this License.
-However, parties who have received copies, or rights, from you under
-this License will not have their licenses terminated so long as such
-parties remain in full compliance.
-
-  5. You are not required to accept this License, since you have not
-signed it.  However, nothing else grants you permission to modify or
-distribute the Program or its derivative works.  These actions are
-prohibited by law if you do not accept this License.  Therefore, by
-modifying or distributing the Program (or any work based on the
-Program), you indicate your acceptance of this License to do so, and
-all its terms and conditions for copying, distributing or modifying
-the Program or works based on it.
-
-  6. Each time you redistribute the Program (or any work based on the
-Program), the recipient automatically receives a license from the
-original licensor to copy, distribute or modify the Program subject to
-these terms and conditions.  You may not impose any further
-restrictions on the recipients' exercise of the rights granted herein.
-You are not responsible for enforcing compliance by third parties to
-this License.
-
-  7. If, as a consequence of a court judgment or allegation of patent
-infringement or for any other reason (not limited to patent issues),
-conditions are imposed on you (whether by court order, agreement or
-otherwise) that contradict the conditions of this License, they do not
-excuse you from the conditions of this License.  If you cannot
-distribute so as to satisfy simultaneously your obligations under this
-License and any other pertinent obligations, then as a consequence you
-may not distribute the Program at all.  For example, if a patent
-license would not permit royalty-free redistribution of the Program by
-all those who receive copies directly or indirectly through you, then
-the only way you could satisfy both it and this License would be to
-refrain entirely from distribution of the Program.
-
-If any portion of this section is held invalid or unenforceable under
-any particular circumstance, the balance of the section is intended to
-apply and the section as a whole is intended to apply in other
-circumstances.
-
-It is not the purpose of this section to induce you to infringe any
-patents or other property right claims or to contest validity of any
-such claims; this section has the sole purpose of protecting the
-integrity of the free software distribution system, which is
-implemented by public license practices.  Many people have made
-generous contributions to the wide range of software distributed
-through that system in reliance on consistent application of that
-system; it is up to the author/donor to decide if he or she is willing
-to distribute software through any other system and a licensee cannot
-impose that choice.
-
-This section is intended to make thoroughly clear what is believed to
-be a consequence of the rest of this License.
-
-  8. If the distribution and/or use of the Program is restricted in
-certain countries either by patents or by copyrighted interfaces, the
-original copyright holder who places the Program under this License
-may add an explicit geographical distribution limitation excluding
-those countries, so that distribution is permitted only in or among
-countries not thus excluded.  In such case, this License incorporates
-the limitation as if written in the body of this License.
-
-  9. The Free Software Foundation may publish revised and/or new versions
-of the General Public License from time to time.  Such new versions will
-be similar in spirit to the present version, but may differ in detail to
-address new problems or concerns.
-
-Each version is given a distinguishing version number.  If the Program
-specifies a version number of this License which applies to it and "any
-later version", you have the option of following the terms and conditions
-either of that version or of any later version published by the Free
-Software Foundation.  If the Program does not specify a version number of
-this License, you may choose any version ever published by the Free Software
-Foundation.
-
-  10. If you wish to incorporate parts of the Program into other free
-programs whose distribution conditions are different, write to the author
-to ask for permission.  For software which is copyrighted by the Free
-Software Foundation, write to the Free Software Foundation; we sometimes
-make exceptions for this.  Our decision will be guided by the two goals
-of preserving the free status of all derivatives of our free software and
-of promoting the sharing and reuse of software generally.
-
-                           NO WARRANTY
-
-  11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
-FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW.  EXCEPT WHEN
-OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
-PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
-OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
-MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.  THE ENTIRE RISK AS
-TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.  SHOULD THE
-PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
-REPAIR OR CORRECTION.
-
-  12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
-WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
-REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
-INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
-OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
-TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
-YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
-PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
-POSSIBILITY OF SUCH DAMAGES.
-
-                    END OF TERMS AND CONDITIONS
-
-           How to Apply These Terms to Your New Programs
-
-  If you develop a new program, and you want it to be of the greatest
-possible use to the public, the best way to achieve this is to make it
-free software which everyone can redistribute and change under these terms.
-
-  To do so, attach the following notices to the program.  It is safest
-to attach them to the start of each source file to most effectively
-convey the exclusion of warranty; and each file should have at least
-the "copyright" line and a pointer to where the full notice is found.
-
-    <one line to give the program's name and a brief idea of what it does.>
-    Copyright (C) <year>  <name of author>
-
-    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 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License
-    along with this program; if not, write to the Free Software
-    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
-
-
-Also add information on how to contact you by electronic and paper mail.
-
-If the program is interactive, make it output a short notice like this
-when it starts in an interactive mode:
-
-    Gnomovision version 69, Copyright (C) year name of author
-    Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
-    This is free software, and you are welcome to redistribute it
-    under certain conditions; type `show c' for details.
-
-The hypothetical commands `show w' and `show c' should show the appropriate
-parts of the General Public License.  Of course, the commands you use may
-be called something other than `show w' and `show c'; they could even be
-mouse-clicks or menu items--whatever suits your program.
-
-You should also get your employer (if you work as a programmer) or your
-school, if any, to sign a "copyright disclaimer" for the program, if
-necessary.  Here is a sample; alter the names:
-
-  Yoyodyne, Inc., hereby disclaims all copyright interest in the program
-  `Gnomovision' (which makes passes at compilers) written by James Hacker.
-
-  <signature of Ty Coon>, 1 April 1989
-  Ty Coon, President of Vice
-
-This General Public License does not permit incorporating your program into
-proprietary programs.  If your program is a subroutine library, you may
-consider it more useful to permit linking proprietary applications with the
-library.  If this is what you want to do, use the GNU Library General
-Public License instead of this License.
diff --git a/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite2.0/README.md b/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite2.0/README.md
deleted file mode 100755 (executable)
index 1ced010..0000000
+++ /dev/null
@@ -1,125 +0,0 @@
-## Dependency:
-
-1. python2.7
-2. python-setuptools python-support python-pip
-   1. Ubuntu
-      `sudo apt-get install python-setuptools python-support python-pip`
-   2. Fedora(RHEL)
-      `sudo yum install python-setuptools python-support python-pip`
-   3. openSUSE(TIZEN)
-      `sudo zypper install python-setuptools python-support python-pip`
-3. python-requests(>=1.1)
-   `sudo pip install requests`
-
-## How to build Debian package:
-
-Host with Ubuntu OS recommended.
-
-Run the command below to build from source code and get Debian package:
-
-`dpkg-buildpackage`
-
-## How to build RPM package:
-
-Host with Fedora OS recommended.
-
-Run the command below to build from source code and get RPM package:
-
-```
-make -C packaging/
-rpmbuild -tb packaging/testkit-lite_<version>.tar.gz --nodeps
-```
-
-Host with Ubuntu OS, we need to add a workaround to support the RPM build:
-
-`rpmbuild --define 'python_sitelib /usr/lib/python2.7/site-packages' -tb packaging/testkit-lite_<version>.tar.gz --nodeps`
-
-## How to install:
-
-Install testkit lite from source code:
-
-`sudo python setup.py install --record /var/log/testkit-lite.files`
-
-Install testkit lite from debian build:
-
-`sudo dpkg -i ../testkit-lite_<version>_all.deb`
-
-## How to uninstall:
-
-Uninstall testkit-lite installed with `setup.py install`:
-
-`cat /var/log/testkit-lite.files | sudo xargs rm -rf`
-
-Uninstall testkit-lite installed with `debian`:
-
-`sudo dpkg -r testkit-lite`
-
-## How to use:
-
-1. You can run case on target:
-   1. For web test cases:
-
-   `testkit-lite -f device:"<somewhere>/<package_name>/tests.xml" -e 'WRTLauncher <package_name>'`
-
-   2. For native test cases:
-
-     `testkit-lite -f device:"<somewhere>/<package_name>/tests.xml"`
-
-2. You can run case in single mode :
-   1. For web test cases:
-
-      `testkit-lite -f "<somewhere>/<package_name>/tests.xml" -e 'WRTLauncher <package_name>' --comm localhost`
-
-   2. For native test cases:
-
-      `testkit-lite -f "<somewhere>/<package_name>/tests.xml" --comm localhost`
-
-3. You can select on parser engine to simply conduct one or more `tests.xml` on target:
-
-   `testkit-lite -f device:"<somewhere>/<package_name1>/tests.xml ... <somewhere>/<package_namen>/tests.xml" -e 'WRTLauncher <package_name1> ... <package_namen>'`
-
-4. If you want to execute both auto and manual tests:
-
-   `testkit-lite -f device:"<somewhere>/<package_name>/tests.xml"`
-
-5. If you just want to execute manual tests:
-
-   `testkit-lite -f device:"<somewhere>/<package_name>/tests.xml" -M`
-
-6. If you just want to execute auto tests:
-
-   `testkit-lite -f device:"<somewhere>/<package_name>/tests.xml" -A`
-
-7. If you want to save test result to another file, by default it'll be under `/opt/testkit/lite/latest`:
-
-   `testkit-lite -f device:"<somewhere>/<package_name>/tests.xml" -o <somewhere>/xxx.xml`
-
-8. If you want to choose some filters:
-
-   `testkit-lite -f device:"<somewhere>/<package_name>/tests.xml" --status level1 --type type1 ...`
-
-9. If you want to run test according capability:
-
-   `testkit-lite -f device:"<somewhere>/<package_name>/tests.xml" --capability capability.xml`
-
-10. At last, you can freely compose the above parameters together:
-
-    `testkit-lite -f <somewhere1>/tests.xml <somewhere2>/tests.xml -A --priority P1 --type type1 ...`
-
-## Get Results:
-
-Test report will be generated as tests.result.xml.The result will be under `/opt/testkit/lite/latest` after execution, you can also check the history results in `/opt/testkit/lite/yyyy-mm-dd-HH:MM:SS.NNNNNN`.
-
-## View Results:
-
-Test report can be viewed in HTML format, so the data in the xml result file looks more human friendly.
-
-Please follow the following steps to view test report:
-
-1. Copy files: `application.js back_top.png jquery.min.js testresult.xsl tests.css` under directory `/opt/testkit/lite/xsd/`
-2. Put the files from step 1) under the same directory as the xml result file
-3. Open xml result file with a web browser(IE, Chrome or Firefox)
-
-## Known Issues:
-
-N/A
diff --git a/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite2.0/VERSION b/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite2.0/VERSION
deleted file mode 100755 (executable)
index 3e1feef..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-[public_version]
-version=TESTKIT2_3.0
-[internal_version]
-version=TESTKIT2_3.0.1-151106
diff --git a/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite2.0/debian/changelog b/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite2.0/debian/changelog
deleted file mode 100755 (executable)
index c9a8298..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-testkit-lite (3.1.12) unstable; urgency=low
-
-  * Public Release.
-
- -- Shaofeng Tang <shaofeng.tang@intel.com>  Fri, 21 Feb 2014 11:13:11 +0800
diff --git a/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite2.0/debian/compat b/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite2.0/debian/compat
deleted file mode 100755 (executable)
index 45a4fb7..0000000
+++ /dev/null
@@ -1 +0,0 @@
-8
diff --git a/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite2.0/debian/control b/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite2.0/debian/control
deleted file mode 100755 (executable)
index 4190c6f..0000000
+++ /dev/null
@@ -1,16 +0,0 @@
-Source: testkit-lite
-Section: utils
-Priority: standard
-Maintainer: Cathy Shen <cathy.shen@intel.com>
-Build-Depends: debhelper (>= 8.0.0), python-setuptools, python-support (>= 0.8.4)
-Standards-Version: 3.9.3
-Homepage: https://github.com/testkit/testkit-lite
-#Vcs-Git: git://git.debian.org/collab-maint/testkit-manager.git
-#Vcs-Browser: http://git.debian.org/?p=collab-maint/testkit-manager.git;a=summary
-
-Package: testkit-lite
-Architecture: all
-Depends: ${misc:Depends}, ${python:Depends}, python-dbus, python-gobject, python-gtk2
-XB-Python-Version: ${python:Versions}
-Description: Test runner for test execution.
-
diff --git a/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite2.0/debian/copyright b/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite2.0/debian/copyright
deleted file mode 100755 (executable)
index 71edd1c..0000000
+++ /dev/null
@@ -1,27 +0,0 @@
-Format: http://dep.debian.net/deps/dep5
-Source: https://github.com/testkit/testkit-lite
-
-Files: *
-Copyright: 2012-2013 Intel Corp. 
-License: GPL-2.0
-
-Files: debian/*
-Copyright: 2012-2013 Intel Corp.
-License: GPL-2.0
-
-License: GPL-2.0
- 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 of the License
- .
- This package is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- GNU General Public License for more details.
- .
- You should have received a copy of the GNU General Public License
- along with this program. If not, see <http://www.gnu.org/licenses/>.
- .
- On Debian systems, the complete text of the GNU General
- Public License version 3 can be found in "/usr/share/common-licenses/GPL-3".
-
diff --git a/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite2.0/debian/docs b/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite2.0/debian/docs
deleted file mode 100755 (executable)
index e845566..0000000
+++ /dev/null
@@ -1 +0,0 @@
-README
diff --git a/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite2.0/debian/files b/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite2.0/debian/files
deleted file mode 100755 (executable)
index 666bfc2..0000000
+++ /dev/null
@@ -1 +0,0 @@
-testkit-lite_3.1.12_all.deb utils standard
diff --git a/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite2.0/debian/postinst b/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite2.0/debian/postinst
deleted file mode 100755 (executable)
index 5685df7..0000000
+++ /dev/null
@@ -1,7 +0,0 @@
-#!/bin/sh
-
-# Set permissions
-mkdir -p /opt/testkit/lite3.0/test_packages
-chmod ugo+rwx -R /opt/testkit/lite3.0
-ln -fs /usr/share/pyshared/testkitlite /usr/lib/python2.7/dist-packages/testkitlite
-
diff --git a/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite2.0/debian/rules b/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite2.0/debian/rules
deleted file mode 100755 (executable)
index abde6ef..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-#!/usr/bin/make -f
-
-%:
-       dh $@
-
diff --git a/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite2.0/doc/Makefile.am b/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite2.0/doc/Makefile.am
deleted file mode 100755 (executable)
index 41cb9ef..0000000
+++ /dev/null
@@ -1,18 +0,0 @@
-# Copyright (C) 2012 Intel Corporation
-# 
-# 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
-# of the License, or (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-#
-# Authors:
-#              Zhang, Huihui <huihuix.zhang@intel.com>
-#              Wendong,Sui  <weidongx.sun@intel.com>
-
-testkitdocdir = /opt/testkit/lite3.0/doc
-dist_testkitdoc_DATA = testkit-lite_user_guide_for_tct.pdf
diff --git a/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite2.0/doc/test_definition_schema.pdf b/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite2.0/doc/test_definition_schema.pdf
deleted file mode 100755 (executable)
index 2c8b267..0000000
Binary files a/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite2.0/doc/test_definition_schema.pdf and /dev/null differ
diff --git a/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite2.0/doc/testkit-lite_tutorial.pdf b/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite2.0/doc/testkit-lite_tutorial.pdf
deleted file mode 100755 (executable)
index fec9b26..0000000
Binary files a/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite2.0/doc/testkit-lite_tutorial.pdf and /dev/null differ
diff --git a/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite2.0/doc/testkit-lite_user_guide.pdf b/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite2.0/doc/testkit-lite_user_guide.pdf
deleted file mode 100755 (executable)
index bab774e..0000000
Binary files a/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite2.0/doc/testkit-lite_user_guide.pdf and /dev/null differ
diff --git a/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite2.0/packaging/Makefile b/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite2.0/packaging/Makefile
deleted file mode 100755 (executable)
index 24da850..0000000
+++ /dev/null
@@ -1,21 +0,0 @@
-PKG_NAME := testkit-lite
-SPECFILE = $(addsuffix .spec, $(PKG_NAME))
-PKG_VERSION := $(shell grep '^Version: ' $(SPECFILE)|awk '{print $$2}')
-
-TARBALL := $(PKG_NAME)_$(PKG_VERSION).tar.gz
-
-dsc: $(TARBALL)
-               $(eval MD5=$(shell md5sum $(TARBALL) | sed "s/  / $(shell stat -c '%s' $(TARBALL)) /"))
-                       @sed  -i 's/^Version:.*/Version: $(PKG_VERSION)/' $(PKG_NAME).dsc
-                       @sed  -i 's/ [a-f0-9]\+ [0-9]\+ $(PKG_NAME).*tar.*/ $(MD5)/' $(PKG_NAME).dsc
-
-$(TARBALL):
-               cd "$$(git rev-parse --show-toplevel)" \
-                       && git archive --prefix $(PKG_NAME)-$(PKG_VERSION)/ HEAD \
-                       | gzip > "$(CURDIR)/$(TARBALL)"
-
-clean:
-               rm -f $(PKG_NAME)*.tar.gz
-
-all: clean dsc
-
diff --git a/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite2.0/packaging/testkit-lite.dsc b/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite2.0/packaging/testkit-lite.dsc
deleted file mode 100755 (executable)
index cfd7043..0000000
+++ /dev/null
@@ -1,11 +0,0 @@
-Source: testkit-lite
-Section: utils
-Priority: standard
-Maintainer: Lei Yang <lei.a.yang@intel.com>
-Build-Depends: debhelper (>= 8.0.0), python-setuptools, python-support (>= 0.8.4)
-Standards-Version: 3.9.2
-Homepage: https://github.com/testkit/testkit-manager
-Version: 3.1.12
-Files:
- e3b0bfd4442c7301aa9982201c6ebd3b 1398131 testkit-lite_3.1.11.tar.gz
-
diff --git a/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite2.0/packaging/testkit-lite.spec b/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite2.0/packaging/testkit-lite.spec
deleted file mode 100755 (executable)
index a6b0fd7..0000000
+++ /dev/null
@@ -1,52 +0,0 @@
-Summary: TCT-Lite
-Name: testkit-lite
-Version: 3.1.12
-Release: 1
-License: GPLv2
-Group: Applications/System
-Source: %{name}_%{version}.tar.gz
-
-BuildRequires: python-distribute
-
-%{!?python_sitelib: %define python_sitelib %(python -c "from distutils.sysconfig import get_python_lib; print get_python_lib()")}
-
-%description
-testkit-lite is a test runner with command-line interface.It has the following functions 
-1. Accepts .xml test case descriptor files as input. 
-2. drives automatic test execution. 
-3. provide multiple options to meet various test requirements. 
-
-%prep
-%setup -q
-
-%build
-
-%install
-python setup.py install --prefix=%{_prefix} --root=%{buildroot}
-# remove tests
-rm -rf %{buildroot}/%{python_sitelib}/tests
-
-%clean
-rm -rf %{buildroot}
-
-%post
-# Set permissions
-chmod ugo+rwx /opt/testkit/lite3.0
-
-%files
-%{python_sitelib}/testkitlite/*
-%{python_sitelib}/testkit_lite-*.egg-info/*
-/etc/dbus-1/system.d/com.intel.testkit.conf
-/opt/testkit/lite3.0/VERSION
-/opt/testkit/lite3.0/commodule/CONFIG
-/opt/testkit/lite3.0/mh.html
-%{_bindir}/testkit-lite
-%{_bindir}/testkit-lite-dbus
-%defattr(-,root,root)
-
-%doc
-/opt/testkit/lite3.0/testkit-lite_user_guide.pdf
-/opt/testkit/lite3.0/testkit-lite_tutorial.pdf
-/opt/testkit/lite3.0/test_definition_schema.pdf
-
-%changelog
diff --git a/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite2.0/resource/mh.html b/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite2.0/resource/mh.html
deleted file mode 100755 (executable)
index 4617c18..0000000
+++ /dev/null
@@ -1,76 +0,0 @@
-<html>
-<head>
-<title>Web Manual Test Harness</title>
-<meta name="viewport" content="width=device-width, initial-scale=1.0">
-<style type="text/css">
-body { font-family:Verdana; font-size:14px; margin:0;}
-#container-div {border: 0;margin:0 auto; width:100%;}
-#sidebar-left {border: 0;float:left; width:6px; height:100%;}
-#sidebar-right {border: 0;float:right; width:6px; height:100%;}
-#content-div {border: 0;margin:0 7px !important; height:100%;}
-.button {display:inline-block;min-width: 30px; max-width: 100px; margin-top: 3px;margin-bottom: 3px;padding: 3px}
-#back-bt, #forward-bt {max-width: 20px;}
-#case-info-area {border 0;text-align:left;}
-#test-entry, #refer-test-entry {font-size: 10px;color: red}
-#test-entry-area, #refer-test-entry-area {font-size: 10px;}
-#run-test-area, #result-area {text-align:right; margin:0 auto;padding:0;}
-iframe {border: 1px solid black;width: 100%; height: 600px;}
-</style>
-<script>
-function run_test(){
-    document.getElementById("test-area").src = document.getElementById("test-entry").textContent;
-};
-
-function run_refer_test(){
-    document.getElementById("test-area").src = document.getElementById("refer-test-entry").textContent;
-};
-
-function result_handler(){
-    try{
-        window.stop();
-    } catch(e) {
-        document.execCommand('Stop');
-    }
-    window.stop();
-    document.getElementById("case-info-area").className = this.name
-};
-
-function init_mh(){
-    document.getElementById("case-info-area").className = "READY";
-    document.getElementById("run-test-bt").addEventListener("click", run_test, false);
-    document.getElementById("run-refer-test-bt").addEventListener("click", run_refer_test, false);
-    document.getElementById("back-bt").addEventListener("click", result_handler, false);
-    document.getElementById("pass-bt").addEventListener("click", result_handler, false);
-    document.getElementById("fail-bt").addEventListener("click", result_handler, false);
-    document.getElementById("block-bt").addEventListener("click", result_handler, false);
-    document.getElementById("forward-bt").addEventListener("click", result_handler, false);
-    document.getElementById("done-bt").addEventListener("click", result_handler, false);
-};
-</script>
-</head>
-<body onload="init_mh()">
-<div id="container-div">
-    <div id="sidebar-left"></div>
-    <div id="sidebar-right"></div>
-    <div id="content-div">
-        <div id="run-test-area">
-            <input type="button" id="back-bt" name="BACK" class="button" value="<"></input>
-            <input type="button" id="run-test-bt" class="button" value="Run Test"></input>
-            <input type="button" id="run-refer-test-bt" class="button" value="Run Refer Test"></input>
-            <input type="button" id="forward-bt" name="FORWARD" class="button" value=">"></input>
-        </div>
-        <div id=result-area>
-                <input type="button" id="pass-bt" name="PASS" class="button" value="PASS"></input>
-                <input type="button" id="fail-bt" name="FAIL" class="button" value="FAIL"></input>
-                <input type="button" id="block-bt" name="BLOCK" class="button" value="BLOCK"></input>
-                <input type="button" id="done-bt" name="DONE" class="button" value="DONE"></input>
-        </div>
-        <div id="case-info-area">
-            <div id="test-entry-area">Test Entry: <span id="test-entry">http://www.baidu.com</span></div>
-            <div id="refer-test-entry-area">Refer Test Entry: <span id="refer-test-entry">http://www.sina.com</span></div>
-        </div>
-        <iframe id="test-area"></iframe>
-    </div>
-</div>
-</body>
-</html>
diff --git a/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite2.0/setup.py b/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite2.0/setup.py
deleted file mode 100755 (executable)
index b243b69..0000000
+++ /dev/null
@@ -1,52 +0,0 @@
-#!/usr/bin/python
-#
-# Copyright (C) 2012 Intel Corporation
-#
-# 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
-# of the License, or (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-#
-# Authors:
-#              Yuanyuan,Zou  <yuanyuanx.zou@intel.com>
-
-from setuptools import setup, find_packages
-import os
-from stat import ST_MODE, S_ISDIR
-from distutils.command.install_data import install_data
-
-
-class post_install_cmd(install_data):
-    def run (self):
-        install_data.run(self)
-        if os.name == 'posix':
-            for path in ['/opt/testkit/lite3.0','/opt/testkit/lite3.0/commodule/']:
-                try:
-                    mode = os.stat(path)[ST_MODE]
-                    mode |= 066
-                    os.chmod(path, mode)
-                except OSError as err:
-                    pass
-
-
-setup(
-    name = "testkit-lite",
-    description = "Test runner for test execution",
-    url = "https://github.com/testkit/testkit-lite",
-    author = "Shaofeng Tang",
-    author_email = "shaofeng.tang@intel.com",
-    version = "3.1.12",
-    include_package_data = True,
-    data_files = [('/opt/testkit/lite3.0', ['VERSION', 'doc/testkit-lite_user_guide.pdf', 'doc/testkit-lite_tutorial.pdf', 'doc/test_definition_schema.pdf']),
-                  ('/opt/testkit/lite3.0/commodule/', ['CONFIG']),
-                  ('/opt/testkit/lite3.0', ['resource/mh.html']),
-                  ('/etc/dbus-1/system.d/', ['dbus/com.intel.testkit.conf'])],
-    scripts = ('testkit-lite', 'dbus/testkit-lite-dbus'),
-    packages = find_packages(),
-    cmdclass = {'install_data': post_install_cmd},
-)
diff --git a/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite2.0/temp/temp b/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite2.0/temp/temp
deleted file mode 100755 (executable)
index e69de29..0000000
diff --git a/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite2.0/testkit-lite b/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite2.0/testkit-lite
deleted file mode 100755 (executable)
index e4ed526..0000000
+++ /dev/null
@@ -1,635 +0,0 @@
-#!/usr/bin/python
-#
-# Copyright (C) 2012 Intel Corporation
-#
-# 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
-# of the License, or (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-#
-# Authors:
-#              Jing,Wang  <jing.j.wang@intel.com>
-#              Yuanyuan,Zou  <yuanyuanx.zou@intel.com>
-""" testkit lite tools"""
-
-import os
-import sys
-import traceback
-import platform
-import signal
-import ConfigParser
-import re
-import xml.etree.ElementTree as etree
-from optparse import OptionParser, make_option
-from datetime import datetime
-import json
-
-from testkitlite.util.errors import TestCaseNotFoundException, TestEngineException
-
-
-os.environ["DBUS_SESSION_BUS_ADDRESS"]='unix:path=/run/dbus/system_bus_socket'
-os.environ["DISPLAY"]=':0.0'
-
-try:
-    # import logger
-    from testkitlite.util.log import LOGGER
-except ImportError, err:
-    print "[ Error: loading logging failed, error: %s ]\n" % err
-    print "try to run command " \
-        "'export PYTHONPATH=/usr/local/lib/python2.7/dist-packages' or " \
-        "'export PYTHONPATH=/usr/local/lib/python2.7/site-packages' to resolve module missed issue"
-    sys.exit(1)
-
-
-# get platform version info
-OS_VER = platform.system()
-JOIN = os.path.join
-EXISTS = os.path.exists
-DIRNAME = os.path.dirname
-BASENAME = os.path.basename
-ABSPATH = os.path.abspath
-SPLIT = os.path.split
-ISLINK = os.path.islink
-
-TESTKIT_DIR = "/opt/testkit/lite3.0"
-if not OS_VER == "Linux" and not OS_VER == "Darwin":
-    TESTKIT_DIR = DIRNAME(ABSPATH(__file__))
-    sys.path += [JOIN(TESTKIT_DIR)]
-    TESTKIT_DIR = JOIN(TESTKIT_DIR, "results")
-
-LOG_DIR = TESTKIT_DIR
-TEST_PACKAGES_DIR = JOIN(TESTKIT_DIR, "test_packages")
-COMMON_FILTERS = {
-    "suite": [],
-    "set": [],
-    "priority": [],
-    "id": [],
-    "type": [],
-    "status": [],
-    "component": [],
-    "set_type": []}
-down_status = False
-remote_test = False
-can_merge_result = False
-device_id = ""
-device_locked = False
-RUNNER = None
-
-# detect version option
-if "--version" in sys.argv:
-    try:
-        CONFIG = ConfigParser.ConfigParser()
-        if platform.system() == "Linux":
-            CONFIG.read('/opt/testkit/lite3.0/VERSION')
-        else:
-            VERSION_FILE = JOIN(sys.path[0], 'VERSION')
-            CONFIG.read(VERSION_FILE)
-        VERSION = CONFIG.get('public_version', 'version')
-        LOGGER.info("V%s" % VERSION)
-        sys.exit()
-    except ConfigParser.Error, err:
-        LOGGER.error(
-            "[ Error: fail to parse version info, error: %s ]\n" % err)
-        sys.exit(1)
-
-# detect internal version option
-if "--internal-version" in sys.argv:
-    try:
-        CONFIG = ConfigParser.ConfigParser()
-        if platform.system() == "Linux":
-            CONFIG.read('/opt/testkit/lite3.0/VERSION')
-        else:
-            VERSION_FILE = JOIN(sys.path[0], 'VERSION')
-            CONFIG.read(VERSION_FILE)
-        VERSION = CONFIG.get('internal_version', 'version')
-        print VERSION
-        sys.exit()
-    except ConfigParser.Error, err:
-        print "[ Error: fail to parse version info, error: %s ]\n" % err
-        sys.exit(1)
-#try:
-#    CONFIG = ConfigParser.ConfigParser()
-#    CONFIG.read('/opt/testkit/lite3.0/commodule/CONFIG')
-#    tizen = CONFIG.get('TIZEN_USER','tizen_user')
-#    if tizen:
-#        os.environ['TIZEN_USER'] = tizen
-#except:
-#    pass   
-
-def varnarg(option, opt_str, value, parser):
-    """ parser srg"""
-    value = []
-    import re
-    for arg in parser.rargs:
-        if re.search('^--.+', arg) or \
-                re.search('^-[\D]', arg):
-            break
-        value.append(arg)
-
-    del parser.rargs[:len(value)]
-    setattr(parser.values, option.dest, value)
-
-def unlock_and_exit(exit_code=signal.SIGINT):
-    if device_locked:
-        release_device_lock(device_id)
-    sys.exit(exit_code)
-
-def final_clean_test():
-    try:
-        if RUNNER is not None:
-            if RUNNER.session_id:
-                RUNNER.finalize_test(RUNNER.session_id)
-            if can_merge_result:
-                RUNNER.merge_resultfile(START_TIME, CURRENT_LOG_DIR)
-            if down_status:
-                clean_testxml(OPTIONS.testxml, remote_test)
-    except (KeyboardInterrupt, Exception), err:
-        pass
-
-def sig_exit_handler(*args):
-    final_clean_test()
-    LOGGER.info("\n[ exiting testkit-lite on system signal ]\n")
-    unlock_and_exit()
-
-if platform.system() == "Linux":
-    signal.signal(signal.SIGTSTP, sig_exit_handler)
-signal.signal(signal.SIGTERM, sig_exit_handler)
-try:
-    OPTION_LIST = [
-        make_option("-f", "--testxml", dest="testxml",
-                    action="callback", callback=varnarg,
-                    help="Specify the path of test definition file (tests.xml)."
-                    " If run more one test package,just list the all the path "
-                    " of \"tests.xml\" and separate with a whitespace"),
-        make_option("-D", "--dryrun", dest="bdryrun",
-                    action="store_true",
-                    help="Dry-run the selected test cases"),
-        make_option("-M", "--manual-only", dest="bmanualonly",
-                    action="store_true",
-                    help="Enable only manual tests"),
-        make_option("-A", "--auto-only", dest="bautoonly",
-                    action="store_true",
-                    help="Enable only auto tests"),
-        make_option("-o", "--output", dest="resultfile",
-                    help="Specify output file for result xml. \
-                    If more than one testxml provided, \
-                    results will be merged together to this output file"),
-        make_option("-e", dest="exttest", action="store",
-                    help="Launch external test with a launcher,\
-                         supports browser or other web-runtime"),
-        make_option("-k", "--worker", dest="worker", action="store",
-                    help="Specify a test engine for execution, use value 'default' by default"),
-       # make_option("-p", "--target-platform", dest="targetplatform",
-       #             action="store",
-       #             help="specify special test target platform, e.g. xw_android, chrome_ubuntu"),
-       # make_option("--webdriver-url", dest="wdurl", action="store",
-       #             help="specify special web driver listening url"),
-        make_option("--version", dest="version_info", action="store_true",
-                    help="Show version information"),
-        make_option("--internal-version", dest="internal_version_info",
-                    action="store_true",
-                    help="Show internal version information"),
-        make_option("--deviceid", dest="device_serial", action="store",
-                    help="set device serial information"),
-        make_option("--testprefix", dest="test_prefix", action="store",
-                    help="set prefix for test case entry"),
-        make_option("--testenvs", dest="test_env", action="store",
-                    help="set environs for test case execution, use ';' to separator multi option"),
-        make_option("--comm", dest="commodule", action="store",
-                    help="set commodule by default,"
-                    "set \"localhost\" for local web testing"),
-        make_option("--capability", dest="capability", action="store",
-                    help="set platform for sepecfic device capability"),
-        make_option("--debug", dest="debug", action="store_true",
-                    help="run in debug mode,more log information print out"),
-        make_option("--rerun", dest="rerun", action="store_true",
-                    help="check if rerun test mode"),
-        make_option("--non-active", dest="non_active", action="store_true",
-                    help="Disable the ability to set the result of \
-                    core manual cases from the console"),
-       # make_option("-d", "--debugip", dest="debugip", action="store",
-       #             help="specify tizen xwalk debug ip "),
-        make_option("--init-script", dest="initscript", action="store",
-                   help="init script before script"),
-        make_option("--post-script", dest="postscript", action="store",
-                   help="post script"),
-        make_option('--disable-dlog', dest="disabledlog", action="store_true",
-                   help="disable dlog information"),
-       # make_option('--user', dest="user", action="store",
-       #            help="setting test user")
-        make_option("--tizen-version", dest="tizenversion", action="callback", callback=varnarg, help="set tizen version infomation"),
-        make_option("--skip-tc", dest="skip_tc", action="callback", callback=varnarg, help ="Specify the testcase id for exclude from the test"),
-        make_option("--stub-port", dest="stubport", action="callback", callback=varnarg, help = "set testkit-stub port number")
-    ]
-
-    OPTION_LIST.extend([
-        make_option("--%s" % flt,
-                    dest="w%s" % flt, action="callback", callback=varnarg,
-                    help="Select the specified filter-rules : %s" % flt)
-        for flt in COMMON_FILTERS])
-
-    try:
-        # untrusted behaviour of %%prog
-        USAGE = "%%prog [options] -f [prefix:]\"<somewhere/test.xml>\" \n\
-forms:    %%prog  -f [prefix:]\"<somewhere>/test.xml\" \n\
-          %%prog  -f [prefix:]\"<somewhere>/test.xml\" -D\n\
-          %%prog  -f [prefix:]\"<somewhere>/test.xml\" -A\n\
-          %%prog  -f [prefix:]\"<somewhere>/test.xml\" -M\n\
-          %%prog  -f [prefix:]\"<somewhere>/test.xml\" --set <set_name>\n\
-          %%prog  -f [prefix:]\"<somewhere>/test.xml\" --type <type_name>\n\
-          %%prog  -f [prefix:]\"<somewhere>/test.xml\" --status <status_name>\n\
-          %%prog  -f [prefix:]\"<somewhere>/test.xml\" --priority <priority_value>\n\
-          %%prog  -f [prefix:]\"<somewhere>/test.xml\" --component <component_name>\n\
-          %%prog  -f [prefix:]\"<somewhere>/test.xml\" --id <case_id>\n\
-          %%prog  -f [prefix:]\"<somewhere>/test.xml\" --capability <capability_file> --comm <comm_type>\n\
-          %%prog  -f [prefix:]\"<somewhere>/test.xml\" --comm <comm_type>\n\
-          %%prog  -f [prefix:]\"<somewhere>/test1.xml <somewhere>/test2.xml <somewhere>/test3.xml\" \n\
-          %%prog  -f [prefix:]\"<somewhere>/test1.xml <somewhere>/test2.xml <somewhere>/test3.xml --testenvs 'wd-url=...;wd-debugip=...'\" \n\
-exmaples of \"prefix\" usage: \n\
-    run a web test with a test definition (XML file) from device side: \n\
-          %%prog -f device:\"/opt/usr/media/tct/opt/tct-websocket-w3c-tests/tests.xml\" -A \n\
-    run a web test with a test definition (XML file) from localhost: \n\
-          %%prog -f \"/opt/usr/media/tct/opt/tct-websocket-w3c-tests/tests.xml\" -A \n\
-exmaples of \"-e\" usage: \n\
-    run a web test package with TIZEN web-runtime, launcher provided in tests.xml, so \"-e\" is omitted: \n\
-          %%prog -f device:\"/opt/usr/media/tct/opt/tct-websocket-w3c-tests/tests.xml\" -A \n\
-    run a web test package with chrome browser: \n\
-          %%prog -f \"/usr/share/webapi-webkit-tests/tests.xml\" -e \
-'google-chrome --allow-file-access-from-files --disable-web-security --start-maximized --user-data-dir=/home/test/data /home/test/webrunner/index.html' -A --comm localhost \n\
-\n\
-Note: \n\
-          1) Proxy settings should be disabled when execute webapi packages\n\
-          2) TestLog is stored to %s/latest\n\
-          3) %%prog enables both auto and manual tests by default\n\
-          4) Obviously -A and -M are conflict options\n\
-          5) -e option does not support -D mode\n\
-          6) The test cases' order in the result files might be arbitrary,\
-when running same tests.xml with same options. This is caused \
-by python's API 'getiterator' from module 'xml.etree.ElementTree'\n\
-          7) run command 'testkit-lite', \
-it might not be able to locate module 'testkitlite.engines.\
-default.runner', \
-run command 'export PYTHONPATH=/usr/local/lib/python2.7/dist-packages' or \
-run command 'export PYTHONPATH=/usr/local/lib/python2.7/site-packages' \
-to resolve this issue" % (LOG_DIR)
-    except Exception:
-        USAGE = None
-
-    # detect non-params
-    if len(sys.argv) == 1:
-        sys.argv.append("-h")
-
-    PARSERS = OptionParser(option_list=OPTION_LIST, usage=USAGE)
-    (OPTIONS, ARGS) = PARSERS.parse_args()
-    # init test engine here
-    from testkitlite.util.connector import ConnectorBuilder
-    from testkitlite.util.process import get_device_lock, release_device_lock, clean_testxml
-    from testkitlite.util.session import TestSession
-    from testkitlite.util.errors import TestCaseNotFoundException, TestEngineException
-
-    #execute_type
-    exec_types = ["auto","manual"]
-    if OPTIONS.bautoonly and OPTIONS.bmanualonly:
-        raise ValueError("-A and -M are conflict")
-    elif OPTIONS.bautoonly:
-        exec_types.remove("manual")
-    elif OPTIONS.bmanualonly:
-        exec_types.remove("auto")
-
-    if OPTIONS.worker and OPTIONS.worker != 'webdriver':
-        raise ValueError('-k is just service for webdriver, you can not set it ,using default')
-
-    debugip = None
-    if OPTIONS.test_env:
-        #envs = OPTIONS.test_env.replace(';',' ').split(' ')
-        envs = OPTIONS.test_env.split(';')
-        for env_t in envs:
-            env_t = env_t.strip()
-            if not env_t:
-                continue
-            k, v = env_t.split('=')
-            if 'app_launcher' in v:
-                os.environ[k.strip()] = "app_launcher -s"
-            else:
-                os.environ[k.strip()] = v.strip()
-            if cmp(k.strip(),"wd-debugip") == 0:
-               debugip = v.strip()
-    if not os.environ.has_key('TIZEN_USER'):
-        try:
-            CONFIG = ConfigParser.ConfigParser()
-            CONFIG.read('/opt/testkit/lite3.0/commodule/CONFIG')
-            tizen = CONFIG.get('TIZEN','tizen_user')
-            if tizen:
-                os.environ['TIZEN_USER'] = tizen
-        except:
-            pass
-    # connector options
-    conn_opt = {}
-    #conn_opt['commodule'] = OPTIONS.commodule or "tizenmobile"
-    conn_opt['commodule'] = OPTIONS.commodule or "localhost"
-    conn_opt['deviceid'] = OPTIONS.device_serial
-    CONNECTOR = ConnectorBuilder(conn_opt).get_connector()
-    if CONNECTOR == None:
-        sys.exit(1)
-
-    device_id = CONNECTOR.get_device_info()['device_id']
-    os.environ['DEVICE_ID'] = device_id
-    if not OPTIONS.non_active:
-        device_locked = get_device_lock(device_id)
-        if not device_locked:
-            LOGGER.error("[ Error: Failed to get device for current session... ]\n")
-            sys.exit(1)
-
-    #modify at 2014.09.11
-    targetplatform = None
-    #debugip = None
-    if OPTIONS.exttest and OPTIONS.worker and OPTIONS.worker.upper() == 'WEBDRIVER':
-        if conn_opt['commodule'] == 'localhost':
-            targetplatform = "chrome_ubuntu"
-            os.environ['targetplatform'] = targetplatform
-        elif conn_opt['commodule'] == 'tizenmobile':
-            targetplatform = "xw_tizen"
-            os.environ['targetplatform'] = targetplatform
-        elif conn_opt['commodule'] == 'androidmobile':
-            targetplatform = "xw_android"
-            os.environ['targetplatform'] = targetplatform
-    # process test environ
-    if OPTIONS.test_env:
-        #envs = OPTIONS.test_env.replace(';',' ').split(' ')
-        envs = OPTIONS.test_env.split(';')
-        for env_t in envs:
-            env_t = env_t.strip()
-            if not env_t:
-                continue
-            k, v = env_t.split('=')
-            if 'app_launcher' in v:
-                os.environ[k.strip()] = "app_launcher -s"
-            else:
-                os.environ[k.strip()] = v.strip()
-
-    # load profile for wedrvier
-    if targetplatform:
-        webdriver_vars = {}
-        exec 'from testkitlite.capability.%s import initCapability' % targetplatform
-        if targetplatform.upper().find('TIZEN') >= 0:
-            if not debugip:
-                raise ValueError("For tizen xwalk, option --debugip is needed!")
-            webdriver_vars = initCapability('TEST_APP_ID', debugip)
-        elif targetplatform.upper().find('ANDROID') >= 0:
-            webdriver_vars = initCapability('TEST_PKG_NAME', 'TEST_ACTIVITY_NAME')
-        else:
-            webdriver_vars = initCapability()
-        os.environ['WEBDRIVER_VARS'] = json.dumps(webdriver_vars)
-
-    # process test environ
-   # if OPTIONS.test_env:
-   #     envs = OPTIONS.test_env.replace(';',' ').split(' ')
-   #     for env_t in envs:
-   #         env_t = env_t.strip()
-   #         if not env_t:
-   #             continue
-   #         k, v = env_t.split('=')
-   #         os.environ[k.strip()] = v.strip()
-    if OPTIONS.initscript:
-        os.environ['initscript'] = OPTIONS.initscript
-    if OPTIONS.postscript:
-        os.environ['postscript'] = OPTIONS.postscript
-    # load test defintion files
-    if "device:" in OPTIONS.testxml[0]:
-        if not CONNECTOR.is_support_remote():
-            raise ValueError("For '%s' mode, please test file without prefix 'device:' " % conn_opt['commodule'])
-
-        remote_test = True
-        try:
-            if not EXISTS(TEST_PACKAGES_DIR):
-                os.makedirs(TEST_PACKAGES_DIR)
-        except OSError, err:
-            LOGGER.error("[ Error: "
-                "can't create test package directory: %s, error: %s ]\n" %
-                        (TEST_PACKAGES_DIR, err))
-            unlock_and_exit()
-        REMOTE_TESTLITS = OPTIONS.testxml[0]
-        REMOTE_TESTLITS = REMOTE_TESTLITS.split(':')[1]
-        TESTLISTARRARY = REMOTE_TESTLITS.split()
-        LOCALARRY = []
-
-        for remote_file in TESTLISTARRARY:
-            tmp_remote_file = SPLIT(remote_file)
-            tmp_remote_folder = BASENAME(tmp_remote_file[0])
-            tmp_remote_test_xml = JOIN(
-                tmp_remote_folder, tmp_remote_file[1])
-            local_test_package = JOIN(
-                TEST_PACKAGES_DIR, tmp_remote_test_xml)
-            down_status = CONNECTOR.download_file(remote_file, local_test_package)
-            if not down_status:
-                LOGGER.error("Failed to get test file '%s' from device"
-                             % remote_file)
-                unlock_and_exit()
-            LOCALARRY.append(local_test_package)
-        OPTIONS.testxml = LOCALARRY
-    else:
-        if len(OPTIONS.testxml) == 1:
-            i, start, end = 0, 0, 0
-            LOCAL_TESTLISTS = []
-            temp_xml = OPTIONS.testxml[0]
-            while(i < len(temp_xml)):
-                tmp = temp_xml[i:len(temp_xml)]
-                if ".xml" in tmp:
-                    index = tmp.index(".xml") + 4 + i
-                    end = index
-                    i = index + 1
-                    LOCAL_TESTLISTS.append(temp_xml[start:end])
-                    start = index + 1
-                else:
-                    LOGGER.error("No xml found")
-                    break
-            OPTIONS.testxml = LOCAL_TESTLISTS
-
-
-    # load test engine
-    if OPTIONS.worker:
-        os.environ['WORKER'] = OPTIONS.worker
-
-    workername = OPTIONS.worker or 'default'
-    try:
-        exec "from testkitlite.engines.%s import TestWorker" % workername
-    except Exception as error:
-        raise TestEngineException(workername)
-    WORKER = TestWorker(CONNECTOR)
-
-    # create runner
-    RUNNER = TestSession(CONNECTOR, WORKER)
-    # apply all options
-    RUNNER.set_global_parameters(OPTIONS)
-
-    if OPTIONS.tizenversion is None:
-        LOGGER.error("[ Error : input your tizen version ]\n")
-        sys.exit(1)
-    else :
-        tizenver = OPTIONS.tizenversion[0]
-        VER_PATTERN = "^tizen_web_\d.\d|^tizen_native_\d.\d|^tizen_csharp_\d.\d"
-        pa = re.compile(VER_PATTERN, re.I)
-        ma = pa.match(tizenver)
-        if ma is None:
-             LOGGER.error("A required \"/opt/tct/"+tizenver+" could not be found.\n")
-             sys.exit(1)
-
-        RUNNER.set_tizenversion(tizenver)
-
-    if OPTIONS.stubport is not None:
-        port = OPTIONS.stubport[0]
-        RUNNER.set_stubport(port)
-
-    if OPTIONS.skip_tc is not None:
-        RUNNER.set_skip_tc(OPTIONS.skip_tc)
-
-    # set capability
-    if not RUNNER.get_capability(OPTIONS.capability):
-        unlock_and_exit()
-    # apply filter
-    WFILTERS = {}
-    for flt in COMMON_FILTERS:
-        if eval('OPTIONS.w%s' % flt):
-            WFILTERS[flt] = eval('OPTIONS.w%s' % flt)
-    RUNNER.add_filter_rules(**WFILTERS)
-
-    if not OPTIONS.testxml:
-        LOGGER.error("[ Error: not specify a test xml... ]\n")
-        unlock_and_exit()
-    # 1) prepare log dir
-    if OS_VER == "Linux" or OS_VER == "Darwin":
-        SESSION = datetime.today().isoformat('-') + str(os.getpid()) + "_session"
-    else:
-        SESSION = datetime.today().strftime("%Y-%m-%d_%H_%M_%S") + \
-                str(os.getpid()) + "_session"
-    CURRENT_LOG_DIR = JOIN(LOG_DIR, SESSION)
-    LATEST_DIR = JOIN(LOG_DIR, "latest")
-    try:
-        if EXISTS(LATEST_DIR):
-            os.remove(LATEST_DIR)
-        if ISLINK(LATEST_DIR):
-            os.remove(LATEST_DIR)
-        os.makedirs(CURRENT_LOG_DIR)
-        if os.name == "posix":
-            os.symlink(CURRENT_LOG_DIR, LATEST_DIR)
-    except IOError, err:
-        LOGGER.error("[ Error: create session log directory: "
-                     "%s failed, error: %s ]\n" % (CURRENT_LOG_DIR, err))
-    except OSError, err:
-        LOGGER.error("error : %s" % err)
-    finally:
-        if not EXISTS(CURRENT_LOG_DIR):
-            os.makedirs(CURRENT_LOG_DIR)
-
-    # 2) prepare run test
-    # run more than one tests.xml
-    # 1. run all auto cases from the xmls
-    # 2. run all manual cases from the xmls
-    TESTXMLS = set(OPTIONS.testxml)
-    for t in TESTXMLS:
-        if EXISTS(t):
-            filename = t
-            filename = os.path.splitext(filename)[0]
-            if OS_VER == "Linux" or OS_VER == "Darwin":
-                if not filename.startswith('/'):
-                    LOGGER.error("[ Error:"
-                          " xml file %s should start with '/' ]" % filename)
-                    unlock_and_exit()
-                file_items = filename.split('/')
-            else:
-                file_items = re.split(r'[/\\]+', filename)
-            if len(file_items) < 2 or file_items[-2] == "" or file_items[-1] == "":
-                LOGGER.error("[ Error:"
-                      " unable to find package name from %s ]" % t)
-                unlock_and_exit()
-            filename = file_items[-2] + '_' + file_items[-1]
-            filename = "%s.total" % BASENAME(filename)
-            resultfile = "%s.xml" % filename
-            resultfile = JOIN(CURRENT_LOG_DIR, resultfile)
-            try:
-                ep = etree.parse(t)
-                suiteparent = ep.getroot()
-            except etree.ParseError:
-                LOGGER.error("[ Error: no case found in testxml, "
-                             "pls check the test package ]\n")
-                unlock_and_exit()
-            no_test_definition = 1
-            for tf in ep.getiterator('test_definition'):
-                no_test_definition = 0
-            if no_test_definition:
-                suiteparent = etree.Element('test_definition')
-                suiteparent.tail = "\n"
-                for suite in ep.getiterator('suite'):
-                    suite.tail = "\n"
-                    suiteparent.append(suite)
-            WFILTERS['execution_type'] = exec_types
-            RUNNER.add_filter_rules(**WFILTERS)
-            RUNNER.apply_filter(suiteparent)
-            # merge duplicated test set under suite node
-            tset_list = set()
-            for suite in ep.getiterator('suite'):
-                for tset in suite.getiterator('set'):
-                    for testcase in tset.getiterator('testcase'):
-                        tset.remove(testcase)
-                    if tset.get('name') in tset_list:
-                        suite.remove(tset)
-                    else:
-                        tset_list.add(tset.get('name'))
-            try:
-                with open(resultfile, 'w') as output:
-                    tree = etree.ElementTree(element=suiteparent)
-                    tree.write(output)
-            except IOError, err:
-                LOGGER.error(
-                    "[ Error: create filtered total result file: %s failed, "
-                    "error: %s ]\n" % (resultfile, err))
-        else:
-            LOGGER.error("[ test xml file '%s' not found ]" % t)
-            unlock_and_exit()
-
-    for t in TESTXMLS:
-        for e_type in exec_types:
-            try:
-                WFILTERS['execution_type'] = [e_type]
-                RUNNER.add_filter_rules(**WFILTERS)
-                RUNNER.prepare_run(t, resultdir=CURRENT_LOG_DIR)
-            except IOError, err:
-                LOGGER.error("[ Error: prepare_run test xml: "
-                  "%s from testkit-lite failed, error: %s ]\n" % (t, err))
-
-    START_TIME = datetime.today().strftime("%Y-%m-%d_%H_%M_%S")
-    try:
-        can_merge_result = True
-        RUNNER.run_case(CURRENT_LOG_DIR)
-    except TestCaseNotFoundException, err:
-        LOGGER.info("\n[ Error: exiting testkit-lite on error: %s ]\n" % err)
-        unlock_and_exit()
-    except Exception, err:
-        clean_testxml(TESTXMLS, remote_test)
-        traceback.print_exc()
-        LOGGER.error("[ Error: run test failed, error: %s ]\n" % err)
-
-    try:
-        RUNNER.merge_resultfile(START_TIME, CURRENT_LOG_DIR)
-        clean_testxml(TESTXMLS, remote_test)
-        LOGGER.info("[ all tasks for testkit lite are accomplished, goodbye ]")
-        unlock_and_exit(0)
-    except Exception, err:
-        traceback.print_exc()
-        clean_testxml(TESTXMLS,remote_test)
-        LOGGER.error("[ Error: merge result failed, error: %s ]\n" % err)
-        unlock_and_exit()
-except (TestEngineException, KeyboardInterrupt), err:
-    final_clean_test()
-    LOGGER.info("\n[ exiting testkit-lite on user cancel ]\n")
-    unlock_and_exit()
-except Exception, err:
-    final_clean_test()
-    LOGGER.error("\n[ Error: exiting testkit-lite due to critical error: %s ]\n" % err)
-    traceback.print_exc()
-    unlock_and_exit()
diff --git a/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite2.0/testkit-merge b/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite2.0/testkit-merge
deleted file mode 100755 (executable)
index 113f570..0000000
+++ /dev/null
@@ -1,51 +0,0 @@
-#!/usr/bin/python
-#
-# Copyright (C) 2014 Intel Corporation
-#
-# 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
-# of the License, or (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
-#
-# Authors: 
-#          Nicolas Zingile <n.zingile@gmail.com>
-
-import argparse
-from testkitmerge.merger import *
-
-def main():
-    argparser = argparse.ArgumentParser(description='Tool to merge testkit result xml files')
-    argparser.add_argument('-f', '--files', help='list of testkit xml result files', nargs='+')
-    argparser.add_argument('-o', '--outdir',  help='output directory of final result file', required=True)
-    argparser.add_argument('-n', '--name', help ='name of the final result file', default='result.xml')
-    args = argparser.parse_args()
-    print args
-
-    parser = etree.XMLParser(strip_cdata=False)
-    sourcexmltree = None
-    resultxmltree = None
-
-    for resultxml in args.files:
-       if not os.path.isfile(resultxml):
-           print "Error: the file '" + resultxml + "'doesn't exist !"
-           exit(1)
-       if not resultxml.endswith('.xml'):
-           print "Error: '" + resultxml + "' is not an xml file !"
-           exit(1)
-    for index in range(len(args.files)):
-       sourcexmltree =  etree.parse(args.files[index], parser)
-       resultxmltree = merge_testkitxml(sourcexmltree, resultxmltree)
-       
-    resultxmltree.write(os.path.join(args.outdir, args.name), pretty_print=True, encoding='utf8', method='xml', xml_declaration=True)
-
-if __name__ == "__main__":
-    main()
diff --git a/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite2.0/testkitlite/Makefile.am b/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite2.0/testkitlite/Makefile.am
deleted file mode 100755 (executable)
index 5a462d8..0000000
+++ /dev/null
@@ -1,20 +0,0 @@
-# Copyright (C) 2012 Intel Corporation
-# 
-# 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
-# of the License, or (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-#
-# Authors:
-#              Zhang, Huihui <huihuix.zhang@intel.com>
-#              Wendong,Sui  <weidongx.sun@intel.com>
-
-SUBDIRS = common engines
-
-testkitlitedir = /usr/lib/python2.7/dist-packages/testkitlite
-dist_testkitlite_SCRIPTS = __init__.py
diff --git a/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite2.0/testkitlite/__init__.py b/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite2.0/testkitlite/__init__.py
deleted file mode 100755 (executable)
index 8b13789..0000000
+++ /dev/null
@@ -1 +0,0 @@
-
diff --git a/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite2.0/testkitlite/capability/Makefile.am b/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite2.0/testkitlite/capability/Makefile.am
deleted file mode 100755 (executable)
index 18f2503..0000000
+++ /dev/null
@@ -1,18 +0,0 @@
-# Copyright (C) 2012 Intel Corporation
-# 
-# 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
-# of the License, or (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-#
-# Authors:
-#              Zhang, Huihui <huihuix.zhang@intel.com>
-#              Wendong,Sui  <weidongx.sun@intel.com>
-
-testkitlitecapdir = /usr/lib/python2.7/dist-packages/testkitlite/capability
-dist_testkitlitecap_SCRIPTS = *.py
diff --git a/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite2.0/testkitlite/capability/__init__.py b/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite2.0/testkitlite/capability/__init__.py
deleted file mode 100755 (executable)
index 8b13789..0000000
+++ /dev/null
@@ -1 +0,0 @@
-
diff --git a/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite2.0/testkitlite/capability/chrome_ubuntu.py b/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite2.0/testkitlite/capability/chrome_ubuntu.py
deleted file mode 100755 (executable)
index 2cc6277..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
-def initCapability(test_app=None, test_ext=None):
-    capability = {'chrome.binary': '/usr/bin/chromium-browser'}
-    return {'webdriver_url': 'http://127.0.0.1:9515', 'desired_capabilities': capability, 'test_prefix': 'file:///'}
diff --git a/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite2.0/testkitlite/capability/xw_android.py b/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite2.0/testkitlite/capability/xw_android.py
deleted file mode 100755 (executable)
index 5a3f984..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
-def initCapability(test_name=None, test_ext=None, webdriver_url='http://127.0.0.1:9515', test_prefix='file:///android_asset/www/'):
-    capability = {'xwalkOptions': {'androidPackage':test_name, 'androidActivity': test_ext}}
-    return {'webdriver_url': webdriver_url, 'desired_capabilities': capability, 'test_prefix': test_prefix }
diff --git a/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite2.0/testkitlite/capability/xw_tizen.py b/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite2.0/testkitlite/capability/xw_tizen.py
deleted file mode 100755 (executable)
index 7d11d53..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-def initCapability(test_app=None, test_ext=None, webdriver_url='http://127.0.0.1:9515', test_prefix=''):
-    capability = {'xwalkOptions': {
-                     'tizenDebuggerAddress':  test_ext,
-                     'tizenAppId': test_app
-                     }
-                 }
-#    print capability
-    return {'webdriver_url':webdriver_url , 'desired_capabilities': capability, 'test_prefix': test_prefix}
diff --git a/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite2.0/testkitlite/commodule/CONFIG b/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite2.0/testkitlite/commodule/CONFIG
deleted file mode 100755 (executable)
index e6b6d74..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-[LOGGING]
-log_level=INFO
-
-[EXTENSION]
-crosswalk=--external-extensions-path=/usr/lib/tizen-extensions-crosswalk
-
-[TIZEN]
-tizen_user=app
diff --git a/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite2.0/testkitlite/commodule/Makefile.am b/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite2.0/testkitlite/commodule/Makefile.am
deleted file mode 100755 (executable)
index 9edbd3e..0000000
+++ /dev/null
@@ -1,18 +0,0 @@
-# Copyright (C) 2012 Intel Corporation
-# 
-# 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
-# of the License, or (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-#
-# Authors:
-#              Yuanyuan,Zou  <yuanyuanx.zou@intel.com>
-
-
-commoduleimpldir = /usr/lib/python2.7/dist-packages/commodule
-dist_commoduleimpl_SCRIPTS = *.py
diff --git a/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite2.0/testkitlite/commodule/__init__.py b/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite2.0/testkitlite/commodule/__init__.py
deleted file mode 100755 (executable)
index 8b13789..0000000
+++ /dev/null
@@ -1 +0,0 @@
-
diff --git a/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite2.0/testkitlite/commodule/androidmobile.py b/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite2.0/testkitlite/commodule/androidmobile.py
deleted file mode 100755 (executable)
index bede441..0000000
+++ /dev/null
@@ -1,329 +0,0 @@
-#!/usr/bin/python
-#
-# Copyright (C) 2012 Intel Corporation
-#
-# 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
-# of the License, or (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-#
-# Authors:
-#           Chengtao,Liu  <chengtaox.liu@intel.com>
-
-""" The implementation of Android communication driver"""
-
-import os
-import time
-import socket
-import threading
-import re
-
-from testkitlite.util.log import LOGGER
-from testkitlite.util.autoexec import shell_command, shell_command_ext
-from testkitlite.util.killall import killall
-from testkitlite.util.errors import InvalidDeviceException
-
-
-os.environ['TEST_PLATFORM'] = 'android'
-os.environ['CONNECT_TYPE'] = 'adb'
-LOCAL_HOST_NS = "127.0.0.1"
-APP_QUERY_STR = "adb -s %s shell ps | grep %s | awk '{print $2}' "
-APK_INSTALL = "adb -s %s shell pm install %s"
-APK_UNINSTALL = "adb -s %s shell pm uninstall %s"
-APK_LIST = "adb -s %s shell pm list packages |grep '%s'|cut -d ':' -f2"
-APP_NONBLOCK_STR = "adb -s %s shell '%s' &"
-APP_START = "adb -s %s shell am start -n %s"
-APP_STOP = "adb -s %s shell am force-stop %s"
-XWALK_APP_STR = "org.xwalk.%s/.%sActivity"
-
-
-LOGCAT_CLEAR = "adb -s %s shell logcat -c"
-LOGCAT_START = "adb -s %s shell logcat -v time"
-DMESG_CLEAR = "adb -s %s shell dmesg -c"
-DMESG_START = "adb -s %s shell cat /proc/kmsg"
-
-
-def debug_trace(cmdline, logfile):
-    global debug_flag, metux
-    wbuffile = file(logfile, "a")
-    import subprocess
-    exit_code = None
-    proc = subprocess.Popen(args=cmdline,
-                            shell=True,
-                            stdout=wbuffile,
-                            stderr=None)
-    while True:
-        exit_code = proc.poll()
-        if exit_code is not None:
-            break
-        time.sleep(0.5)
-        metux.acquire()
-        proc_flag = debug_flag
-        metux.release()
-        if not proc_flag:
-            break
-    wbuffile.close()
-    if exit_code is None:
-        killall(proc.pid)
-
-
-def _get_device_ids():
-    """get android device list of ids"""
-    result = []
-    exit_code, ret = shell_command("adb devices")
-    for line in ret:
-        if str.find(line, "\tdevice") != -1:
-            result.append(line.split("\t")[0])
-    return result
-
-
-class AndroidMobile:
-
-    """ Implementation for transfer data
-        between Host and Android Mobile Device
-    """
-
-    def __init__(self, device_id=None):
-        self.deviceid = device_id
-        self.support_remote = True
-
-    def is_support_remote(self):
-        return self.support_remote
-
-    def shell_cmd(self, cmd="", timeout=15):
-        cmdline = "adb -s %s shell %s" % (self.deviceid, cmd)
-        return shell_command(cmdline, timeout)
-
-    def check_process(self, process_name):
-        exit_code, ret = shell_command(
-            APP_QUERY_STR % (self.deviceid, process_name))
-        return len(ret)
-
-    def kill_stub(self):
-        #add this function to avoid webdriver issue, yangx.zhou@intel.com,2015.01.15
-        wgt_name = "testkit.stub/.TestkitStub"
-        pkg_name = wgt_name.split('/')[0]
-        cmdline = APP_STOP % (self.deviceid, pkg_name)
-        exit_code, ret = shell_command(cmdline)
-
-
-    def launch_stub(self, stub_app, stub_port="8000", debug_opt=""):
-       # self.kill_stub()
-        wgt_name = "testkit.stub/.TestkitStub"
-       # pkg_name = wgt_name.split('/')[0]
-       # cmdline = APP_STOP % (self.deviceid, pkg_name)
-       # exit_code, ret = shell_command(cmdline)
-        cmdline = APP_START % (self.deviceid, wgt_name)
-        debug_ext = " -e debug on" if debug_opt != "" else " -e debug off"
-        port_ext = " -e port " + stub_port
-        exit_code, ret = shell_command(cmdline + port_ext + debug_ext)
-        time.sleep(2)
-        return True
-
-    def shell_cmd_ext(self,
-                      cmd="",
-                      timeout=None,
-                      boutput=False,
-                      stdout_file=None,
-                      stderr_file=None,
-                      callbk=None):
-        cmdline = "adb -s %s shell '%s; echo returncode=$?'" % (
-            self.deviceid, cmd)
-        return shell_command_ext(cmdline, timeout, boutput, stdout_file, stderr_file, callbk)
-
-    def get_device_info(self):
-        """get android device inforamtion"""
-        device_info = {}
-        device_info["device_id"] = self.deviceid
-        device_info["resolution"] = "N/A"
-        device_info["screen_size"] = "N/A"
-        device_info["device_model"] = "N/A"
-        device_info["device_name"] = "N/A"
-        device_info["os_version"] = "N/A"
-        device_info["build_id"] = "N/A"
-        return device_info
-
-    def download_file(self, remote_path, local_path):
-        """download file from device"""
-        cmd = "adb -s %s pull %s %s" % (self.deviceid, remote_path, local_path)
-        exit_code, ret = shell_command(cmd)
-        if exit_code != 0:
-            error = ret[0].strip('\r\n') if len(ret) else "sdb shell timeout"
-            LOGGER.info("[ Download file \"%s\" failed, error: %s ]"
-                        % (remote_path, error))
-            return False
-        else:
-            return True
-
-    def upload_file(self, remote_path, local_path):
-        """upload file to device"""
-        cmd = "adb -s %s push %s %s" % (self.deviceid, local_path, remote_path)
-        exit_code, ret = shell_command(cmd)
-        if exit_code != 0:
-            error = ret[0].strip('\r\n') if len(ret) else "sdb shell timeout"
-            LOGGER.info("[ Upload file \"%s\" failed,"
-                        " get error: %s ]" % (local_path, error))
-            return False
-        else:
-            return True
-
-    def get_launcher_opt(self, test_launcher, test_ext, test_widget, test_suite, test_set):
-        """get test option dict """
-        test_opt = {}
-        test_opt["suite_name"] = test_suite
-        test_opt["launcher"] = test_launcher
-        if test_launcher.find('xwalk') >= 0:
-            if test_widget is not None and test_widget != "":
-                test_suite = test_widget
-            test_suite = test_suite.replace('-', '_')
-            test_opt["test_app_id"] = XWALK_APP_STR % (test_suite, test_suite)
-        else:
-            test_opt["test_app_id"] = test_launcher
-        return test_opt
-
-    def get_server_url(self, remote_port="8000"):
-        """forward request a host tcp port to targe tcp port"""
-        if remote_port is None:
-            return None
-
-        os.environ['no_proxy'] = LOCAL_HOST_NS
-        host = LOCAL_HOST_NS
-        inner_port = 9000
-        time_out = 2
-        bflag = False
-        while True:
-            sock_inner = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
-            sock_inner.settimeout(time_out)
-            try:
-                sock_inner.bind((host, inner_port))
-                sock_inner.close()
-                bflag = False
-            except socket.error as error:
-                if error.errno == 98 or error.errno == 13:
-                    bflag = True
-            if bflag:
-                inner_port += 1
-            else:
-                break
-        host_port = str(inner_port)
-        cmd = "adb -s %s forward tcp:%s tcp:%s" % \
-            (self.deviceid, host_port, remote_port)
-        exit_code, ret = shell_command(cmd)
-        url_forward = "http://%s:%s" % (host, host_port)
-        return url_forward
-
-    def install_package(self, pkgpath):
-        """install a package on android device:
-        push package and install with shell command
-        """
-        cmd = APK_INSTALL % (self.deviceid, pkgpath)
-        exit_code, ret = shell_command(cmd)
-        return ret
-
-    def uninstall_package(self, pkgname):
-        """install a package on android device:
-        push package and install with shell command
-        """
-        cmd = APK_UNINSTALL % (self.deviceid, pkgname)
-        exit_code, ret = shell_command(cmd)
-        return ret
-
-    def get_installed_package(self):
-        """get list of installed package from device"""
-        cmd = APK_LIST % self.deviceid
-        exit_code, ret = shell_command(cmd)
-        return ret
-
-    def start_debug(self, dlogfile):
-        global debug_flag, metux
-        debug_flag = True
-        metux = threading.Lock()
-        logcat_cmd = LOGCAT_CLEAR % self.deviceid
-        exit_code, ret = shell_command(logcat_cmd)
-        dmesg_cmd = DMESG_CLEAR % self.deviceid
-        exit_code, ret = shell_command(logcat_cmd)
-        logcat_cmd = LOGCAT_START % self.deviceid
-        dmesg_cmd = DMESG_START % self.deviceid
-        threading.Thread(target=debug_trace, args=(logcat_cmd, dlogfile+'.logcat')).start()
-        threading.Thread(target=debug_trace, args=(dmesg_cmd, dlogfile+'.dmesg')).start()
-
-    def stop_debug(self):
-        global debug_flag, metux
-        metux.acquire()
-        debug_flag = False
-        metux.release()
-
-    def launch_app(self, wgt_name):
-        blauched = False
-        if wgt_name.find('xwalk') != -1:
-            timecnt = 0
-            blauched = False
-            pkg_name, actv_name = wgt_name.split('/')
-            actv_name = actv_name.strip('.')
-            cmdline = APP_STOP % (self.deviceid, pkg_name)
-            exit_code, ret = shell_command(cmdline)
-            cmdline = APP_START % (self.deviceid, wgt_name)
-            exit_code, ret = shell_command(cmdline)
-            if len(ret) > 1:
-                # remove Activity to retry
-                actv_name = actv_name.replace('Activity', '')
-                LOGGER.info("[ Retry to launch app: %s ]" % (pkg_name + '/.' + actv_name))
-                cmdline = APP_START % (self.deviceid, pkg_name + '/.' + actv_name)
-                exit_code, ret = shell_command(cmdline)
-            if len(ret) > 1:
-                # use capitalize to retry
-                tmps = actv_name.split('_')
-                actv_name = ''.join([it.capitalize() for it in tmps if it])
-                LOGGER.info("[ Retry to launch app: %s ]" % (pkg_name + '/.' + actv_name + 'Activity'))
-                cmdline = APP_START % (self.deviceid, pkg_name + '/.' + actv_name + 'Activity')
-                exit_code, ret = shell_command(cmdline)
-                if len(ret) > 1:
-                    # remove Activity
-                    LOGGER.info("[ Retry to launch app: %s ]" % (pkg_name + '/.' + actv_name))
-                    cmdline = APP_START % (self.deviceid, pkg_name + '/.' + actv_name)
-                    exit_code, ret = shell_command(cmdline)
-
-            blauched = True
-            time.sleep(3)
-        else:
-            cmdline = APP_NONBLOCK_STR % (self.deviceid, wgt_name)
-            exit_code, ret = shell_command(cmdline)
-            time.sleep(3)
-            cmd = APP_QUERY_STR % (self.deviceid, wgt_name)
-            exit_code, ret = shell_command(cmd)
-            if ret and len(ret):
-                blauched = True
-        return blauched
-
-    def kill_app(self, wgt_name):
-        pkg_name = wgt_name.split('/')[0]
-        cmdline = APP_STOP % (self.deviceid, pkg_name)
-        exit_code, ret = shell_command(cmdline)        
-        return True
-
-    install_app = install_package
-    uninstall_app = uninstall_package
-
-    def get_buildinfo(self):
-        """ get builf info"""
-        build_info = {}
-        build_info['buildid'] = ''
-        build_info['manufacturer'] = ''
-        build_info['model'] = ''
-        return build_info
-
-
-def get_target_conn(device_id=None):
-    """ Get connection for Test Target"""
-    if device_id is None:
-        dev_list = _get_device_ids()
-        if len(dev_list):
-            device_id = dev_list[0]
-        else:
-            raise InvalidDeviceException('No android device found!')
-    return AndroidMobile(device_id)
diff --git a/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite2.0/testkitlite/commodule/localhost.py b/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite2.0/testkitlite/commodule/localhost.py
deleted file mode 100755 (executable)
index 3108839..0000000
+++ /dev/null
@@ -1,166 +0,0 @@
-#!/usr/bin/python
-#
-# Copyright (C) 2012 Intel Corporation
-#
-# 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
-# of the License, or (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-#
-# Authors:
-#           Chengtao,Liu  <chengtaox.liu@intel.com>
-
-""" The implementation of local host communication"""
-
-import os
-import time
-import socket
-import re
-from shutil import copyfile
-
-from testkitlite.util.log import LOGGER
-from testkitlite.util.autoexec import shell_command, shell_command_ext
-
-
-HOST_NS = "127.0.0.1"
-os.environ['no_proxy'] = HOST_NS
-os.environ['TEST_PLATFORM'] = 'localhost'
-if not os.environ.has_key('CONNECT_TYPE'):
-    os.environ['CONNECT_TYPE'] = 'local'
-APP_QUERY_STR = "ps aux | grep %s | grep -v grep"
-
-
-class LocalHost:
-
-    """ Implementation for transfer data
-        between Host and Tizen PC
-    """
-
-    def __init__(self):
-        self.deviceid = os.environ.get('TEST_PLATFORM','')
-        #self.deviceid = "localhost"
-        self.support_remote = False
-
-    def is_support_remote(self):
-        return self.support_remote
-
-    def shell_cmd(self, cmd="", timeout=15):
-        return shell_command(cmd, timeout)
-
-    def check_process(self, process_name):
-        exit_code, ret = shell_command(APP_QUERY_STR % process_name)
-        return len(ret)
-
-    def kill_stub(self):
-        #add this fucntion to avoid webdriver issue if it running on device, yangx.zhou@intel.com
-        cmdline = "ps -aux | grep testkit-stub | grep -v grep | awk '{ print $2 }'"
-        exit_code, ret = self.shell_cmd(cmdline)
-        if exit_code == 0 and len(ret) >0:
-            cmdline = "kill -9 %s" %ret[0]
-            exit_code, ret = self.shell_cmd(cmdline)
-        
-
-    def launch_stub(self, stub_app, stub_port="8000", debug_opt=""):
-        cmdline = "%s --port:%s %s" % (stub_app, stub_port, debug_opt)
-        exit_code, ret = self.shell_cmd(cmdline)
-        time.sleep(2)
-
-    def check_widget_process(self, wgt_name):
-        return True
-
-    def shell_cmd_ext(self,
-                      cmd="",
-                      timeout=None,
-                      boutput=False,
-                      stdout_file=None,
-                      stderr_file=None):
-        return shell_command_ext(cmd, timeout, boutput, stdout_file, stderr_file)
-
-    def get_device_ids(self):
-        """
-            get device list of ids
-        """
-        return []
-
-    def get_device_info(self):
-        """
-            get tizen device inforamtion
-        """
-        device_info = {}
-        device_info["device_id"] = self.deviceid
-        device_info["resolution"] = "N/A"
-        device_info["screen_size"] = "N/A"
-        device_info["device_model"] = "N/A"
-        device_info["device_name"] = "N/A"
-        device_info["os_version"] = "N/A"
-        device_info["build_id"] = "N/A"
-        return device_info
-
-    def get_server_url(self, remote_port="8000"):
-        """get server url"""
-        url_forward = "http://%s:%s" % (HOST_NS, remote_port)
-        return url_forward
-
-    def install_package(self, pkgpath):
-        """
-           install a package on tizen device
-        """
-        cmd = "rpm -ivh %s" % pkgpath
-        exit_code, ret = shell_command(cmd)
-        return ret
-
-    def get_installed_package(self):
-        """get list of installed package from device"""
-        cmd = "rpm -qa | grep tct"
-        exit_code, ret = shell_command(cmd)
-        return ret
-
-    def download_file(self, remote_path, local_path):
-        """download file"""
-        # copyfile(remote_path, local_path)
-        # return True
-        return False
-
-    def upload_file(self, remote_path, local_path):
-        """upload file"""
-        # copyfile(local_path, remote_path)
-        return False
-
-    def get_launcher_opt(self, test_launcher, test_ext, test_widget, test_suite, test_set):
-        """get test option dict """
-        test_opt = {}
-        test_opt["suite_name"] = test_suite
-        test_opt["launcher"] = test_launcher
-        test_opt["test_app_id"] = test_launcher
-        return test_opt
-
-    def launch_app(self, wgt_name):
-        exit_code, ret = shell_command(wgt_name + '&')
-        return True
-
-    def kill_app(self, wgt_name):
-        return True
-
-    def start_debug(self, dlogfile):
-        pass
-
-    def stop_debug(self):
-        pass
-
-    def get_buildinfo(self):
-        """ get builf info"""
-        build_info = {}
-        build_info['buildid'] = ''
-        build_info['manufacturer'] = ''
-        build_info['model'] = ''
-        return build_info
-
-
-def get_target_conn():
-    """ Get connection for Test Target"""
-    return LocalHost()
diff --git a/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite2.0/testkitlite/commodule/tizenivi.py b/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite2.0/testkitlite/commodule/tizenivi.py
deleted file mode 100755 (executable)
index 4cc39b0..0000000
+++ /dev/null
@@ -1,489 +0,0 @@
-#!/usr/bin/python
-#
-# Copyright (C) 2012 Intel Corporation
-#
-# 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
-# of the License, or (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-#
-# Authors:
-#           Chengtao,Liu  <chengtaox.liu@intel.com>
-
-""" The implementation of tizen IVI communication"""
-
-import os
-import time
-import socket
-import threading
-import ConfigParser
-import re
-import sys
-from shutil import copyfile
-from testkitlite.util.log import LOGGER
-from testkitlite.util.autoexec import shell_command, shell_command_ext
-from testkitlite.util.killall import killall
-from testkitlite.util.errors import InvalidDeviceException
-
-try:
-    import paramiko
-except ImportError, err:
-    LOGGER.info("Failed to import 'paramiko' module, please check your installation:")
-    LOGGER.info("  You can use 'sudo pip install paramiko' to install the module!")
-    sys.exit(1)
-
-TCT_CONFIG_FILE = "/opt/tools/TCT_CONFIG"
-tct_parser = ConfigParser.ConfigParser()
-tct_parser.read(TCT_CONFIG_FILE)
-
-DEVICE_SUITE_TARGET_30 = tct_parser.get('DEVICE', 'DEVICE_SUITE_TARGET_30')
-
-
-HOST_NS = "127.0.0.1"
-os.environ['no_proxy'] = HOST_NS
-os.environ['TEST_PLATFORM'] = 'tizen'
-os.environ['CONNECT_TYPE'] = 'ssh'
-TIZEN_USER = os.environ.get('TIZEN_USER', 'owner')
-#print 'debug', os.environ.get('TIZEN_USER','')
-
-# common constants
-RPM_INSTALL = "ssh %s rpm -ivh %s"
-RPM_UNINSTALL = "ssh %s rpm -e %s"
-RPM_LIST = "ssh %s rpm -qa | grep tct"
-APP_QUERY_STR = "ssh %s \"ps aux |grep '%s'|grep -v grep\"|awk '{print $2}'"
-APP_KILL_STR = "ssh %s kill -9 %s"
-APP_NONBLOCK_STR = "ssh %s \"%s &\""
-SSH_COMMAND_RTN = "ssh %s \"%s\"; echo returncode=$?"
-#SSH_COMMAND_APP = "ssh %s \"su - app -c 'export DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/5000/dbus/user_bus_socket; %s'\";echo returncode=$?"
-SSH_COMMAND_APP = "ssh %s \"su - %s -c 'export DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/%s/dbus/user_bus_socket; %s'\";echo returncode=$?"
-
-# wrt-launcher constants
-WRT_MAIN = "wrt-launcher"
-WRT_QUERY_STR = "ssh %s \"wrt-launcher -l|grep '%s'|grep -v grep\"|awk '{print $2\":\"$NF}'"
-WRT_START_STR = "ssh %s 'wrt-launcher -s %s; echo returncode=$?'"
-WRT_STOP_STR = "ssh %s wrt-launcher -k %s"
-WRT_INSTALL_STR = "ssh %s wrt-installer -i %s"
-WRT_UNINSTL_STR = "ssh %s wrt-installer -un %s"
-WRT_LOCATION = os.path.join(DEVICE_SUITE_TARGET_30, "tct/opt/%s/%s.wgt")
-
-# crosswalk constants
-#XWALK_MAIN = "xwalkctl"
-#XWALK_MAIN = "open_app"
-XWALK_MAIN = os.environ.get("Launcher","app_launcher -s")
-if cmp(XWALK_MAIN,'app_launcher') == 0:
-    XWALK_MAIN = 'app_launcher -s '
-#XWALK_QUERY_STR = "ssh %s \"su - app -c 'export DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/5000/dbus/user_bus_socket;xwalkctl' \"| grep -w %s | awk '{print $(NF-1)}'"
-XWALK_QUERY_STR = "ssh %s \"su - %s -c 'export DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/%s/dbus/user_bus_socket;app_launcher -l' \"| grep -w %s | awk '{print $2}'"
-#XWALK_START_STR = "ssh %s \"su - app -c 'export DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/5000/dbus/user_bus_socket;launch_app %s' & \""
-XWALK_START_STR = "ssh %s \"su - %s -c 'export DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/%s/dbus/user_bus_socket;%s %s' & \""
-#XWALK_INSTALL_STR = "ssh %s \"su - app -c 'export DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/5000/dbus/user_bus_socket;xwalkctl --install %s' \""
-XWALK_INSTALL_STR = "ssh %s \"su - %s -c 'export DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/%s/dbus/user_bus_socket;pkgcmd -i -t %s -p  %s -q' \""
-#XWALK_UNINSTL_STR = "ssh %s \"su - app -c 'export DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/5000/dbus/user_bus_socket;xwalkctl --uninstall %s' \""
-XWALK_UNINSTL_STR = "ssh %s \"su - %s -c 'export DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/%s/dbus/user_bus_socket;pkgcmd -u -t wgt -q -n %s' \""
-XWALK_LOCATION = os.path.join(DEVICE_SUITE_TARGET_30, "tct/opt/%s/%s.wgt")
-
-XWALK_QUERY_ID = "ssh %s 'id -u %s'"
-
-class SSH_Handler:
-    """
-    long connection with login
-    """
-
-    def __init__(self, host='127.0.0.1', username='root', password='tizen', port=22):
-        self._ssh = paramiko.SSHClient()
-        self._ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
-        self._ssh.connect(host, port, username, password)
-
-    def ssh_command(self, cmd='whoami'):
-        stdin, stdout, stderr = self._ssh.exec_command(cmd)
-        return stdout.readlines()
-
-    def close(self):
-        if self._ssh is not None:
-            self._ssh.close()
-
-
-class tizenIVI:
-
-    """ Implementation for transfer data
-        between Host and IVI/PC on SSH connection
-    """
-
-    def __init__(self, deviceid="root@127.0.0.1"):
-        self.deviceid = deviceid
-        remotes = deviceid.split('@')
-        self._ssh = SSH_Handler(remotes[1], remotes[0])
-        self._wrt = False
-        self._xwalk = False
-        self.support_remote = True
-        self._get_user_id()
-
-    def _get_user_id(self):
-        if TIZEN_USER.lower() == 'owner':
-            self.port = '5000'
-        else:
-            cmdline = XWALK_QUERY_ID % (self.deviceid, TIZEN_USER)
-            exit_code, ret = shell_command(cmdline)
-            if exit_code == -1:
-                LOGGER.info("[ can not get user id ]")
-            if len(ret) > 0 :
-                self.port = ret[0].strip('\r\n')
-
-
-    def is_support_remote(self):
-        return self.support_remote
-
-    def shell_cmd(self, cmd="", timeout=15):
-        cmd = "ssh %s %s" % (self.deviceid, cmd)
-        return shell_command(cmd, timeout)
-
-    def check_process(self, process_name):
-        exit_code, ret = shell_command(APP_QUERY_STR % (self.deviceid, process_name))
-        return len(ret)
-
-    def kill_stub(self):
-        #add this function to avoid webdriver issue if stub runnning on device, yangx.zhou@intel.com
-        cmdline = "ps -aux | grep testkit-stub | grep -v grep | awk '{ print $2 }'"
-        ret_lines = self._ssh.ssh_command(cmdline)
-        if len(ret_lines) > 0:
-            cmdline = "kill -9 %s" %ret_lines[0]
-            ret_lines = self._ssh.ssh_command(cmdline)
-
-    def launch_stub(self, stub_app, stub_port="8000", debug_opt=""):
-        #self.kill_stub() 
-        cmdline = "%s --port:%s %s" % (stub_app, stub_port, debug_opt)
-        ret_lines = self._ssh.ssh_command(cmdline)
-        time.sleep(2)
-
-    def shell_cmd_ext(self,
-                      cmd="",
-                      timeout=None,
-                      boutput=False,
-                      stdout_file=None,
-                      stderr_file=None):
-        #if cmd.startswith('app_user@'):
-        usr = TIZEN_USER + '_user@'
-        if cmd.startswith(usr):
-            cmdline = SSH_COMMAND_APP % (self.deviceid, TIZEN_USER, self.port,  cmd[9:])
-        else:
-            cmdline = SSH_COMMAND_RTN % (self.deviceid, cmd)
-        return shell_command_ext(cmdline, timeout, boutput, stdout_file, stderr_file)
-
-    def shell_cmd_host(self,
-                       cmd="",
-                       timeout=None,
-                       boutput=False,
-                       stdout_file=None,
-                       stderr_file=None):
-        cmd = cmd.replace("$deviceid", self.deviceid)
-        return shell_command_ext(cmd, timeout, boutput, stdout_file, stderr_file)
-
-    def get_device_ids(self):
-        """
-            get device list of ids
-        """
-        return ['localhost']
-
-    def get_device_info(self):
-        """
-            get tizenivi device inforamtion
-        """
-        device_info = {}
-        resolution_str = ""
-        screen_size_str = ""
-        device_model_str = ""
-        device_name_str = ""
-        build_id_str = ""
-        os_version_str = ""
-
-        # get resolution and screen size
-        exit_code, ret = shell_command("ssh %s xrandr" % self.deviceid)
-        pattern = re.compile("connected (\d+)x(\d+).* (\d+mm) x (\d+mm)")
-        for line in ret:
-            match = pattern.search(line)
-            if match:
-                resolution_str = "%s x %s" % (match.group(1), match.group(2))
-                screen_size_str = "%s x %s" % (match.group(3), match.group(4))
-
-        # get architecture
-        exit_code, ret = shell_command("ssh %s uname -m" % self.deviceid)
-        if len(ret) > 0:
-            device_model_str = ret[0]
-
-        # get hostname
-        exit_code, ret = shell_command("ssh %s uname -n" % self.deviceid)
-        if len(ret) > 0:
-            device_name_str = ret[0]
-
-        # get os version
-        exit_code, ret = shell_command("ssh %s cat /etc/issue" % self.deviceid)
-        for line in ret:
-            if len(line) > 1:
-                os_version_str = "%s %s" % (os_version_str, line)
-
-        # get build id
-        exit_code, ret = shell_command("ssh %s cat /etc/os-release" % self.deviceid)
-        for line in ret:
-            if line.find("BUILD_ID=") != -1:
-                build_id_str = line.split('=')[1].strip('\"\r\n')
-
-        os_version_str = os_version_str[0:-1]
-        device_info["device_id"] = self.deviceid
-        device_info["resolution"] = resolution_str
-        device_info["screen_size"] = screen_size_str
-        device_info["device_model"] = device_model_str
-        device_info["device_name"] = device_name_str
-        device_info["os_version"] = os_version_str
-        device_info["build_id"] = build_id_str
-        return device_info
-
-    def get_server_url(self, remote_port="8000"):
-        """get server url"""
-        remote_ip = self.deviceid
-        remote_ip = remote_ip.split('@')[1]
-        os.environ['no_proxy'] = remote_ip
-        url_forward = "http://%s:%s" % (remote_ip, remote_port)
-        return url_forward
-
-    def install_package(self, pkgpath):
-        """
-           install a package on tizenivi device
-        """
-        cmd = RPM_INSTALL % (self.deviceid, pkgpath)
-        exit_code, ret = shell_command(cmd)
-        return ret
-
-    def install_package(self, pkgname):
-        """
-           install a package on tizenivi device
-        """
-        cmd = RPM_UNINSTALL % (self.deviceid, pkgname)
-        exit_code, ret = shell_command(cmd)
-        return ret
-
-    def get_installed_package(self):
-        """get list of installed package from device"""
-        cmd = RPM_LIST % (self.deviceid)
-        exit_code, ret = shell_command(cmd)
-        return ret
-
-    def download_file(self, remote_path, local_path):
-        """download file"""
-        local_path_dir = os.path.dirname(local_path)
-        if not os.path.exists(local_path_dir):
-            os.makedirs(local_path_dir)
-        cmd = "scp %s:%s %s" % (self.deviceid, remote_path, local_path)
-        exit_code, ret = shell_command(cmd)
-        if not os.path.exists(local_path):
-            return False
-        return True
-
-    def upload_file(self, remote_path, local_path):
-        """upload file"""
-        cmd = "scp %s %s:%s" % (local_path, self.deviceid, remote_path)
-        exit_code, ret = shell_command(cmd)
-        return True
-
-    def _get_wrt_app(self, test_suite, test_set, fuzzy_match, auto_iu):
-        test_app_id = None
-        if auto_iu:
-            test_wgt = test_set
-            test_wgt_path = WRT_LOCATION % (test_suite, test_wgt)
-            if not self.install_app(test_wgt_path):
-                LOGGER.info("[ failed to install widget \"%s\" in target ]"
-                            % test_wgt)
-                return None
-        else:
-            test_wgt = test_suite
-
-        # check if widget installed already
-        cmd = WRT_QUERY_STR % (test_wgt)
-        exit_code, ret = shell_command(cmd)
-        if exit_code == -1:
-            return None
-        for line in ret:
-            items = line.split(':')
-            if len(items) < 1:
-                continue
-            if (fuzzy_match and items[0].find(test_wgt) != -1) or items[0] == test_wgt:
-                test_app_id = items[1].strip('\r\n')
-                break
-
-        if test_app_id is None:
-            LOGGER.info("[ test widget \"%s\" not found in target ]"
-                        % test_wgt)
-            return None
-
-        return test_app_id
-
-    def _get_xwalk_app(self, test_suite, test_set, fuzzy_match, auto_iu):
-        test_app_id = None
-        if auto_iu:
-            test_wgt = test_set
-            test_wgt_path = XWALK_LOCATION % (test_suite, test_wgt)
-            if not self.install_app(test_wgt_path):
-                LOGGER.info("[ failed to install widget \"%s\" in target ]"
-                            % test_wgt)
-                return None
-        else:
-            test_wgt = test_suite
-
-        # check if widget installed already
-        cmd = XWALK_QUERY_STR % (self.deviceid,TIZEN_USER, self.port,  test_wgt)
-        exit_code, ret = shell_command(cmd)
-        if exit_code == -1:
-            return None
-        for line in ret:
-            test_app_id = line.strip('\r\n')
-
-        if test_app_id is None:
-            LOGGER.info("[ test widget \"%s\" not found in target ]"
-                        % test_wgt)
-            return None
-
-        return test_app_id
-
-    def get_launcher_opt(self, test_launcher, test_ext, test_widget, test_suite, test_set):
-        """
-        get test option dict
-        """
-        test_opt = {}
-        self._wrt = False
-        self._xwalk = False
-        app_id = None
-        test_opt["suite_name"] = test_suite
-        test_opt["launcher"] = test_launcher
-        if test_widget is not None and test_widget != "":
-            test_suite = test_widget
-        if test_launcher.find('WRTLauncher') >= 0:
-            self._wrt = True
-            test_opt["launcher"] = WRT_MAIN
-            client_cmds = test_launcher.strip().split()
-            wrt_tag = client_cmds[1] if len(client_cmds) > 1 else ""
-            test_opt['fuzzy_match'] = fuzzy_match = wrt_tag.find('z') != -1
-            test_opt['auto_iu'] = auto_iu = wrt_tag.find('iu') != -1
-            test_opt['self_exec'] = wrt_tag.find('a') != -1
-            test_opt['self_repeat'] = wrt_tag.find('r') != -1
-            app_id = self._get_wrt_app(test_suite, test_set, fuzzy_match, auto_iu)
-        elif test_launcher.find('xwalk') >= 0 and len(test_launcher) <= 16:
-            self._xwalk = True
-            test_opt["launcher"] = XWALK_MAIN
-            client_cmds = test_launcher.strip().split()
-            xpk_tag = client_cmds[1] if len(client_cmds) > 1 else ""
-            test_opt['fuzzy_match'] = fuzzy_match = xpk_tag.find('z') != -1
-            test_opt['auto_iu'] = auto_iu = xpk_tag.find('iu') != -1
-            test_opt['self_exec'] = xpk_tag.find('a') != -1
-            test_opt['self_repeat'] = xpk_tag.find('r') != -1
-            app_id = self._get_xwalk_app(test_suite, test_set, fuzzy_match, auto_iu)
-        else:
-            app_id = test_launcher
-
-        if app_id is None:
-            return None
-        test_opt["test_app_id"] = app_id
-        return test_opt
-
-    def start_debug(self, dlogfile):
-        global debug_flag, metux
-        debug_flag = True
-
-    def stop_debug(self):
-        global debug_flag
-        debug_flag = False
-
-    def launch_app(self, wgt_name):
-        blauched = False
-        if self._wrt:
-            timecnt = 0
-            cmdline = WRT_STOP_STR % (self.deviceid, wgt_name)
-            exit_code, ret = shell_command(cmdline)
-            cmdline = WRT_START_STR % (self.deviceid, wgt_name)
-            while timecnt < 3:
-                exit_code, ret_out, ret_err = shell_command_ext(cmdline, 30)
-                if exit_code == "0":
-                    blauched = True
-                    break
-                timecnt += 1
-                time.sleep(3)
-        elif self._xwalk:
-            cmd = APP_QUERY_STR % (self.deviceid, wgt_name)
-            exit_code, ret = shell_command(cmd)
-            for line in ret:
-                cmd = APP_KILL_STR % (self.deviceid, line.strip('\r\n'))
-                exit_code, ret = shell_command(cmd)
-            cmdline = XWALK_START_STR % (self.deviceid,TIZEN_USER, self.port, XWALK_MAIN,  wgt_name)
-            exit_code, ret = shell_command(cmdline)
-            time.sleep(3)
-            blauched = True
-        else:
-            cmdline = APP_NONBLOCK_STR % (self.deviceid, wgt_name)
-            exit_code, ret = shell_command(cmdline)
-            time.sleep(3)
-            cmd = APP_QUERY_STR % (self.deviceid, wgt_name)
-            exit_code, ret = shell_command(cmd)
-            if ret and len(ret):
-                blauched = True
-
-        return blauched
-
-    def kill_app(self, wgt_name):
-        if self._wrt:
-            cmdline = WRT_STOP_STR % (self.deviceid, wgt_name)
-            exit_code, ret = shell_command(cmdline)
-        elif self._xwalk:
-            cmd = APP_QUERY_STR % (self.deviceid, wgt_name)
-            exit_code, ret = shell_command(cmd)
-            for line in ret:
-                cmd = APP_KILL_STR % (line.strip('\r\n'))
-                exit_code, ret = shell_command(cmd)
-        return True
-
-    def install_app(self, wgt_path="", timeout=90):
-        if self._wrt:
-            cmd = WRT_INSTALL_STR % (self.deviceid, wgt_path)
-        elif self._xwalk:
-            if len(wgt_path)>0:
-                ext = wgt_path.split('.')[1]
-            cmd = XWALK_INSTALL_STR % (self.deviceid,TIZEN_USER, self.port,ext,  wgt_path)
-        else:
-            return True
-        exit_code, ret = shell_command(cmd, timeout)
-        if exit_code == -1:
-            cmd = APP_QUERY_STR % (self.deviceid, wgt_path)
-            exit_code, ret = shell_command(cmd)
-            for line in ret:
-                cmd = APP_KILL_STR % (self.deviceid, line.strip('\r\n'))
-                exit_code, ret = shell_command(cmd)
-            return False
-        else:
-            return True
-
-    def uninstall_app(self, wgt_name):
-        if self._wrt:
-            cmd = WRT_UNINSTL_STR % (self.deviceid, wgt_name)
-        elif self._xwalk:
-            cmd = XWALK_UNINSTL_STR % (self.deviceid, TIZEN_USER, self.port, wgt_name)
-        else:
-            return True
-        exit_code, ret = shell_command(cmd)
-        return True
-
-    def get_buildinfo(self):
-        """ get builf info"""
-        build_info = {}
-        build_info['buildid'] = ''
-        build_info['manufacturer'] = ''
-        build_info['model'] = ''
-        return build_info
-
-
-def get_target_conn(deviceid=None):
-    """ Get connection for Test Target"""
-    if deviceid is None or '@' not in deviceid:
-        raise InvalidDeviceException('deviceid("username@ip") required by SSH connection!')
-    return tizenIVI(deviceid)
diff --git a/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite2.0/testkitlite/commodule/tizenlocal.py b/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite2.0/testkitlite/commodule/tizenlocal.py
deleted file mode 100755 (executable)
index c1f37aa..0000000
+++ /dev/null
@@ -1,434 +0,0 @@
-#!/usr/bin/python
-#
-# Copyright (C) 2012 Intel Corporation
-#
-# 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
-# of the License, or (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-#
-# Authors:
-#           Chengtao,Liu  <chengtaox.liu@intel.com>
-
-""" The implementation of tizen localhost communication"""
-
-import os
-import time
-import socket
-import threading
-import re
-from shutil import copyfile
-
-from testkitlite.util.log import LOGGER
-from testkitlite.util.autoexec import shell_command, shell_command_ext
-from testkitlite.util.killall import killall
-
-HOST_NS = "127.0.0.1"
-os.environ['no_proxy'] = HOST_NS
-os.environ['TEST_PLATFORM'] = 'tizen'
-os.environ['CONNECT_TYPE'] = 'local'
-RPM_INSTALL = "rpm -ivh %s"
-RPM_UNINSTALL = "rpm -e %s"
-RPM_LIST = "rpm -qa | grep tct | grep -v grep"
-APP_QUERY_STR = "ps aux |grep '%s'|grep -v grep|awk '{print $2}'"
-APP_KILL_STR = "kill -9 %s"
-APP_NONBLOCK_STR = "%s &"
-
-# wrt-launcher constants
-WRT_MAIN = "wrt-launcher"
-WRT_QUERY_STR = "wrt-launcher -l | grep '%s'|awk '{print $2\":\"$NF}'"
-WRT_START_STR = "wrt-launcher -s %s"
-WRT_STOP_STR = "wrt-launcher -k %s"
-WRT_INSTALL_STR = "wrt-installer -i %s"
-WRT_UNINSTL_STR = "wrt-installer -un %s"
-WRT_LOCATION = "/opt/usr/media/tct/opt/%s/%s.wgt"
-
-# crosswalk constants
-#XWALK_MAIN = "xwalkctl"
-XWALK_MAIN = os.environ.get("Launcher","app_launcher -s")
-if cmp(XWALK_MAIN, 'app_launcher') == 0:
-    XWALK_MAIN = "app_launcher -s "
-#XWALK_MAIN = "open_app"
-#XWALK_QUERY_STR = "ail_list | grep -w %s | awk '{print $(NF-1)}'"
-XWALK_QUERY_STR = "app_launcher -l | grep -w %s | awk '{print $2}'"
-#XWALK_START_STR = "xwalk-launcher %s &"
-XWALK_START_STR = "%s %s &"
-#XWALK_INSTALL_STR = "xwalkctl --install %s"
-XWALK_INSTALL_STR = "pkgcmd --install -t %s -p %s -q"
-XWALK_UNINSTL_STR = "pkgcmd -u -t wgt -q  -n %s"
-#XWALK_UNINSTL_STR = "xwalkctl --uninstall %s"
-XWALK_LOCATION = "/opt/usr/media/tct/opt/%s/%s.wgt"
-DLOG_CLEAR = "dlogutil -c"
-DLOG_WRT = "dlogutil WRT:D -v threadtime"
-TIZEN_USER = os.environ.get('TIZEN_USER','app')
-
-def debug_trace(cmdline, logfile):
-    global debug_flag, metux
-    wbuffile = file(logfile, "w")
-    import subprocess
-    exit_code = None
-    proc = subprocess.Popen(args=cmdline,
-                            shell=True,
-                            stdout=wbuffile,
-                            stderr=None)
-    while True:
-        exit_code = proc.poll()
-        if exit_code is not None:
-            break
-        time.sleep(0.5)
-        metux.acquire()
-        proc_flag = debug_flag
-        metux.release()
-        if not proc_flag:
-            break
-    wbuffile.close()
-    if exit_code is None:
-        killall(proc.pid)
-
-
-class tizenHost:
-
-    """ Implementation for transfer data on TIZEN localhost
-    """
-
-    def __init__(self):
-        self.deviceid = "localhost"
-        self._wrt = False
-        self._xwalk = False
-        self.support_remote = False
-
-    def is_support_remote(self):
-        return self.support_remote
-
-    def shell_cmd(self, cmd="", timeout=15):
-        return shell_command(cmd, timeout)
-
-    def check_process(self, process_name):
-        exit_code, ret = shell_command(APP_QUERY_STR % process_name)
-        return len(ret)
-    
-    def kill_stub(self):
-        #add this function to avoid webdriver issue if stub exists, yangx.zhou@intel.com
-        cmdline = "ps -aux | grep testkit-stub | grep -v grep | awk '{ print $2}'"
-        exit_code, ret = self.shell_cmd(cmdline)
-        if exit_code == 0 and len(ret) > 0:
-            cmdline = "kill -9 %s" %ret[0]
-            exit_code, ret = self.shell_cmd(cmdline)
-        time.sleep(1)
-
-    def launch_stub(self, stub_app, stub_port="8000", debug_opt=""):
-        self.kill_stub()
-        cmdline = "%s --port:%s %s" % (stub_app, stub_port, debug_opt)
-        exit_code, ret = self.shell_cmd(cmdline)
-        time.sleep(2)
-
-    def shell_cmd_ext(self,
-                      cmd="",
-                      timeout=None,
-                      boutput=False,
-                      stdout_file=None,
-                      stderr_file=None):
-        usr = TIZEN_USER + '_user@'
-        if cmd.startswith(usr):
-            cmd = cmd[9:]
-        return shell_command_ext(cmd, timeout, boutput, stdout_file, stderr_file)
-
-    def get_device_ids(self):
-        """
-            get device list of ids
-        """
-        return ['localhost']
-
-    def get_device_info(self):
-        """
-            get tizenpc device inforamtion
-        """
-        device_info = {}
-        resolution_str = ""
-        screen_size_str = ""
-        device_model_str = ""
-        device_name_str = ""
-        build_id_str = ""
-        os_version_str = ""
-
-        # get resolution and screen size
-        exit_code, ret = shell_command("xrandr")
-        pattern = re.compile("connected (\d+)x(\d+).* (\d+mm) x (\d+mm)")
-        for line in ret:
-            match = pattern.search(line)
-            if match:
-                resolution_str = "%s x %s" % (match.group(1), match.group(2))
-                screen_size_str = "%s x %s" % (match.group(3), match.group(4))
-
-        # get architecture
-        exit_code, ret = shell_command("uname -m")
-        if len(ret) > 0:
-            device_model_str = ret[0]
-
-        # get hostname
-        exit_code, ret = shell_command("uname -n")
-        if len(ret) > 0:
-            device_name_str = ret[0]
-
-        # get os version
-        exit_code, ret = shell_command("cat /etc/issue")
-        for line in ret:
-            if len(line) > 1:
-                os_version_str = "%s %s" % (os_version_str, line)
-
-        # get build id
-        exit_code, ret = shell_command("cat /etc/os-release")
-        for line in ret:
-            if line.find("BUILD_ID=") != -1:
-                build_id_str = line.split('=')[1].strip('\"\r\n')
-
-        os_version_str = os_version_str[0:-1]
-        device_info["device_id"] = self.deviceid
-        device_info["resolution"] = resolution_str
-        device_info["screen_size"] = screen_size_str
-        device_info["device_model"] = device_model_str
-        device_info["device_name"] = device_name_str
-        device_info["os_version"] = os_version_str
-        device_info["build_id"] = build_id_str
-        return device_info
-
-    def get_server_url(self, remote_port="8000"):
-        """get server url"""
-        url_forward = "http://%s:%s" % (HOST_NS, remote_port)
-        return url_forward
-
-    def install_package(self, pkgpath):
-        """
-           install a package on tizenpc device
-        """
-        cmd = RPM_INSTALL % pkgpath
-        exit_code, ret = shell_command(cmd)
-        return ret
-
-    def install_package(self, pkgname):
-        """
-           install a package on tizenpc device
-        """
-        cmd = RPM_UNINSTALL % pkgname
-        exit_code, ret = shell_command(cmd)
-        return ret
-
-    def get_installed_package(self):
-        """get list of installed package from device"""
-        cmd = RPM_LIST
-        exit_code, ret = shell_command(cmd)
-        return ret
-
-    def download_file(self, remote_path, local_path):
-        """download file"""
-        copyfile(remote_path, local_path)
-        return True
-
-    def upload_file(self, remote_path, local_path):
-        """upload file"""
-        copyfile(local_path, remote_path)
-        return True
-
-    def _get_wrt_app(self, test_suite, test_set, fuzzy_match, auto_iu):
-        test_app_id = None
-        if auto_iu:
-            test_wgt = test_set
-            test_wgt_path = WRT_LOCATION % (test_suite, test_wgt)
-            if not self.install_app(test_wgt_path):
-                LOGGER.info("[ failed to install widget \"%s\" in target ]"
-                            % test_wgt)
-                return None
-        else:
-            test_wgt = test_suite
-
-        # check if widget installed already
-        cmd = WRT_QUERY_STR % (test_wgt)
-        exit_code, ret = shell_command(cmd)
-        if exit_code == -1:
-            return None
-        for line in ret:
-            items = line.split(':')
-            if len(items) < 1:
-                continue
-            if (fuzzy_match and items[0].find(test_wgt) != -1) or items[0] == test_wgt:
-                test_app_id = items[1].strip('\r\n')
-                break
-
-        if test_app_id is None:
-            LOGGER.info("[ test widget \"%s\" not found in target ]"
-                        % test_wgt)
-            return None
-
-        return test_app_id
-
-    def _get_xwalk_app(self, test_suite, test_set, fuzzy_match, auto_iu):
-        test_app_id = None
-        if auto_iu:
-            test_wgt = test_set
-            test_wgt_path = XWALK_LOCATION % (test_suite, test_wgt)
-            if not self.install_app(test_wgt_path):
-                LOGGER.info("[ failed to install widget \"%s\" in target ]"
-                            % test_wgt)
-                return None
-        else:
-            test_wgt = test_suite
-
-        # check if widget installed already
-        cmd = XWALK_QUERY_STR % (test_wgt)
-        exit_code, ret = shell_command(cmd)
-        if exit_code == -1:
-            return None
-        for line in ret:
-            test_app_id = line.strip('\r\n')
-
-        if test_app_id is None:
-            LOGGER.info("[ test widget \"%s\" not found in target ]"
-                        % test_wgt)
-            return None
-
-        return test_app_id
-
-    def get_launcher_opt(self, test_launcher, test_ext, test_widget, test_suite, test_set):
-        """
-        get test option dict
-        """
-        test_opt = {}
-        self._wrt = False
-        self._xwalk = False
-        app_id = None
-        test_opt["suite_name"] = test_suite
-        test_opt["launcher"] = test_launcher
-        if test_widget is not None and test_widget != "":
-            test_suite = test_widget
-        if test_launcher.find('WRTLauncher') >= 0:
-            self._wrt = True
-            test_opt["launcher"] = WRT_MAIN
-            client_cmds = test_launcher.strip().split()
-            wrt_tag = client_cmds[1] if len(client_cmds) > 1 else ""
-            test_opt['fuzzy_match'] = fuzzy_match = wrt_tag.find('z') != -1
-            test_opt['auto_iu'] = auto_iu = wrt_tag.find('iu') != -1
-            test_opt['self_exec'] = wrt_tag.find('a') != -1
-            test_opt['self_repeat'] = wrt_tag.find('r') != -1
-            app_id = self._get_wrt_app(test_suite, test_set, fuzzy_match, auto_iu)
-        elif test_launcher.find('xwalk') >= 0 and len(test_launcher) <= 16:
-            self._xwalk = True
-            test_opt["launcher"] = XWALK_MAIN
-            client_cmds = test_launcher.strip().split()
-            xpk_tag = client_cmds[1] if len(client_cmds) > 1 else ""
-            test_opt['fuzzy_match'] = fuzzy_match = xpk_tag.find('z') != -1
-            test_opt['auto_iu'] = auto_iu = xpk_tag.find('iu') != -1
-            test_opt['self_exec'] = xpk_tag.find('a') != -1
-            test_opt['self_repeat'] = xpk_tag.find('r') != -1
-            app_id = self._get_xwalk_app(test_suite, test_set, fuzzy_match, auto_iu)
-        else:
-            app_id = test_launcher
-
-        if app_id is None:
-            return None
-        test_opt["test_app_id"] = app_id
-        return test_opt
-
-    def start_debug(self, dlogfile):
-        global debug_flag, metux
-        debug_flag = True
-        metux = threading.Lock()
-
-    def stop_debug(self):
-        global debug_flag, metux
-        metux.acquire()
-        debug_flag = False
-        metux.release()
-
-    def launch_app(self, wgt_name):
-        blauched = False
-        if self._wrt:
-            timecnt = 0
-            cmdline = WRT_STOP_STR % (wgt_name)
-            exit_code, ret = shell_command(cmdline)
-            cmdline = WRT_START_STR % (wgt_name)
-            while timecnt < 3:
-                exit_code, ret_out, ret_err = shell_command_ext(cmdline, 30)
-                if exit_code == "0":
-                    blauched = True
-                    break
-                timecnt += 1
-                time.sleep(3)
-        elif self._xwalk:
-            cmd = APP_QUERY_STR % (wgt_name)
-            exit_code, ret = shell_command(cmd)
-            for line in ret:
-                cmd = APP_KILL_STR % (line.strip('\r\n'))
-                exit_code, ret = shell_command(cmd)
-            cmdline = XWALK_START_STR % (XWALK_MAIN, wgt_name)
-            exit_code, ret = shell_command(cmdline)
-            time.sleep(3)
-            blauched = True
-        else:
-            cmdline = APP_NONBLOCK_STR % (wgt_name)
-            exit_code, ret = shell_command(cmdline)
-            time.sleep(3)
-            cmd = APP_QUERY_STR % (wgt_name)
-            exit_code, ret = shell_command(cmd)
-            if ret and len(ret):
-                blauched = True
-
-        return blauched
-
-    def kill_app(self, wgt_name):
-        if self._wrt:
-            cmdline = WRT_STOP_STR % (wgt_name)
-            exit_code, ret = shell_command(cmdline)
-        elif self._xwalk:
-            cmd = APP_QUERY_STR % (wgt_name)
-            exit_code, ret = shell_command(cmd)
-            for line in ret:
-                cmd = APP_KILL_STR % (line.strip('\r\n'))
-                exit_code, ret = shell_command(cmd)
-        return True
-
-    def install_app(self, wgt_path="", timeout=90):
-        if self._wrt:
-            cmd = WRT_INSTALL_STR % (wgt_path)
-        elif self._xwalk:
-            ext = wgt_path.split(".")[1]
-            cmd = XWALK_INSTALL_STR % (ext, wgt_path)
-        else:
-            return True
-        exit_code, ret = shell_command(cmd, timeout)
-        if exit_code == -1:
-            cmd = APP_QUERY_STR % (wgt_path)
-            exit_code, ret = shell_command(cmd)
-            for line in ret:
-                cmd = APP_KILL_STR % (line.strip('\r\n'))
-                exit_code, ret = shell_command(cmd)
-            return False
-        else:
-            return True
-
-    def uninstall_app(self, wgt_name):
-        if self._wrt:
-            cmd = WRT_UNINSTL_STR % (wgt_name)
-        elif self._xwalk:
-            cmd = XWALK_UNINSTL_STR % (wgt_name)
-        else:
-            return True
-        exit_code, ret = shell_command(cmd)
-        return True
-
-    def get_buildinfo(self):
-        """ get builf info"""
-        build_info = {}
-        build_info['buildid'] = ''
-        build_info['manufacturer'] = ''
-        build_info['model'] = ''
-        return build_info
-
-
-def get_target_conn():
-    """ Get connection for Test Target"""
-    return tizenHost()
diff --git a/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite2.0/testkitlite/commodule/tizenmobile.py b/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite2.0/testkitlite/commodule/tizenmobile.py
deleted file mode 100755 (executable)
index 3780384..0000000
+++ /dev/null
@@ -1,637 +0,0 @@
-#!/usr/bin/python
-#
-# Copyright (C) 2012 Intel Corporation
-#
-# 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
-# of the License, or (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-#
-# Authors:
-#           Chengtao,Liu  <chengtaox.liu@intel.com>
-
-""" The implementation of TIZEN mobile communication"""
-
-import os
-import time
-import socket
-import threading
-import re
-import shutil
-import ConfigParser
-import xml.etree.ElementTree as etree
-import platform
-
-from testkitlite.util.log import LOGGER
-from testkitlite.util.autoexec import shell_command, shell_command_ext
-from testkitlite.util.killall import killall
-from testkitlite.util.errors import InvalidDeviceException
-
-EXISTS = os.path.exists
-
-
-TCT_CONFIG_FILE = "/opt/tools/TCT_CONFIG"
-tct_parser = ConfigParser.ConfigParser()
-tct_parser.read(TCT_CONFIG_FILE)
-
-DEVICE_SUITE_TARGET_30 = tct_parser.get('DEVICE', 'DEVICE_SUITE_TARGET_30')
-DEVICE_USER_30 = tct_parser.get('DEVICE', 'DEVICE_EXECUTION_MODE_30')
-
-os.environ['TEST_PLATFORM'] = 'tizen'
-os.environ['CONNECT_TYPE'] = 'sdb'
-LOCAL_HOST_NS = "127.0.0.1"
-BUILD_INFO_FILE = os.path.join(DEVICE_SUITE_TARGET_30,'Documents/tct/buildinfo.xml')
-RPM_INSTALL = "sdb -s %s shell rpm -ivh %s"
-RPM_UNINSTALL = "sdb -s %s shell rpm -e %s"
-RPM_LIST = "sdb -s %s shell \"rpm -qa|grep tct\""
-
-APP_QUERY_STR = "sdb -s %s shell \"ps aux|grep '%s'|grep -v grep\"|awk '{print $2}'"
-STUB_KILL_STR = "sdb -s %s shell \"ps aux|grep '%s'|grep -v grep\"|awk '{print $2}'|xargs kill -9"
-APP_KILL_STR = "sdb -s %s shell kill -9 %s"
-APP_NONBLOCK_STR = "sdb -s %s shell '%s' &"
-SDB_COMMAND = "sdb -s %s shell '%s'"
-SDB_COMMAND_RTN = "sdb -s %s shell '%s; echo returncode=$?'"
-#SDB_COMMAND_APP = "sdb -s %s shell su - app -c 'export DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/5000/dbus/user_bus_socket;%s;echo returncode=$?'"
-#SDB_COMMAND_APP = "sdb -s %s shell su - %s -c 'export DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/%s/dbus/user_bus_socket;%s;echo returncode=$?'"
-SDB_COMMAND_APP = """sdb -s %s shell 'su - %s -c "export DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/%s/dbus/user_bus_socket;%s";echo returncode=$?'"""
-
-# wrt-launcher constants
-
-WRT_MAIN = "wrt-launcher"
-WRT_QUERY_STR = "sdb -s %s shell wrt-launcher -l | grep '%s'|awk '{print $2\":\"$NF}'"
-WRT_START_STR = "sdb -s %s shell 'wrt-launcher -s %s; echo returncode=$?'"
-WRT_STOP_STR = "sdb -s %s shell wrt-launcher -k %s"
-WRT_INSTALL_STR = "sdb -s %s shell wrt-installer -i %s"
-WRT_UNINSTL_STR = "sdb -s %s shell wrt-installer -un %s"
-WRT_LOCATION = os.path.join(DEVICE_SUITE_TARGET_30, "tct/opt/%s/%s.wgt")
-WRT_SMACK_STR = "sdb -s %s shell 'echo \"User::Shell User::Pkg::%s rwx\" | smackload'"
-WRT_SMACK_REV_STR = "sdb -s %s shell 'echo \"User::Pkg::%s User::Shell rwx\" | smackload'"
-#default user is changed "app" to "owner"
-#jh0219.han@samsung.com
-
-# crosswalk constants
-#XWALK_MAIN = "xwalkctl"
-#XWALK_MAIN = "open_app"
-XWALK_MAIN = os.environ.get("Launcher","app_launcher -s")
-if cmp(XWALK_MAIN,'app_launcher') == 0:
-    XWALK_MAIN = 'app_launcher -s '
-#XWALK_QUERY_STR = "sdb -s %s shell su - app -c 'export DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/5000/dbus/user_bus_socket;ail_list' | grep -w %s | awk '{print $(NF-1)}'"
-XWALK_QUERY_STR = "sdb -s %s shell su - %s -c 'export DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/%s/dbus/user_bus_socket;app_launcher -l' | grep -w %s | awk '{print $2}'"
-#XWALK_QUERY_STR = "sdb -s %s shell su - app -c 'export DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/5000/dbus/user_bus_socket;xwalkctl' | grep -w %s | awk '{print $(NF-1)}'"
-#XWALK_START_STR = "sdb -s %s shell su - app -c 'export DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/5000/dbus/user_bus_socket;launch_app %s' &"
-XWALK_START_STR = "sdb -s %s shell su - %s -c 'export DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/%s/dbus/user_bus_socket;%s %s' &"
-#XWALK_START_STR = "sdb -s %s shell su - %s -c 'export DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/%s/dbus/user_bus_socket;xwalk-launcher %s' &"
-XWALK_INSTALL_STR = "sdb -s %s shell su - %s -c 'export DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/%s/dbus/user_bus_socket;pkgcmd -i -t %s -p  %s -q'"
-#XWALK_INSTALL_STR = "sdb -s %s shell su - app -c 'export DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/5000/dbus/user_bus_socket;xwalkctl --install %s'"
-XWALK_UNINSTL_STR = "sdb -s %s shell su - %s -c 'export DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/%s/dbus/user_bus_socket;pkgcmd -u -t wgt -q -n %s'"
-#XWALK_UNINSTL_STR = "sdb -s %s shell su - app -c 'export DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/5000/dbus/user_bus_socket;xwalkctl --uninstall %s'"
-XWALK_LOCATION = os.path.join(DEVICE_SUITE_TARGET_30, "tct/opt/%s/%s.wgt")
-#default user is changed "app" to "owner"
-#jh0219.han@samsung.com
-
-# redefine constants for windows
-if platform.system() == "Windows":
-    APP_QUERY_STR = 'sdb -s %s shell "ps aux|grep %s|grep -v grep |awk \'{print $2}\'"'
-    SDB_COMMAND = 'sdb -s %s shell "%s"'
-    SDB_COMMAND_RTN = 'sdb -s %s shell "%s; echo returncode=$?"'
-    SDB_COMMAND_APP = 'sdb -s %s shell \"su - %s -c \"export DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/%s/dbus/user_bus_socket;%s\";echo returncode=$?\"'
-    WRT_START_STR = 'sdb -s %s shell "wrt-launcher -s %s; echo returncode=$?"'
-    XWALK_QUERY_STR = 'sdb -s %s shell su - %s -c "export DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/%s/dbus/user_bus_socket;app_launcher -l | grep -w %s | awk \'{print \$2}\'"'
-
-XWALK_QUERY_ID = "sdb -s %s shell  'id -u %s'"
-
-temp_tuser = DEVICE_USER_30.split('/')
-
-if not temp_tuser:
-    TIZEN_USER = 'owner'
-else:
-    TIZEN_USER = temp_tuser[0]
-
-LOGGER.debug('testkit-lite current user : %s' % str(TIZEN_USER))
-
-#TIZEN_USER = os.environ.get('TIZEN_USER','owner').strip()
-#default user is changed "app" to "owner"
-#jh0219.han@samsung.com
-
-#print os.environ['tizen_user']
-# dlog constants
-DLOG_CLEAR = "sdb -s %s shell dlogutil -c"
-DLOG_WRT = "sdb -s %s shell dlogutil -v threadtime"
-
-def debug_trace(cmdline, logfile):
-    global debug_flag, metux
-    wbuffile = file(logfile, "a")
-    import subprocess
-    exit_code = None
-    proc = subprocess.Popen(args=cmdline,
-                            shell=True,
-                            stdout=wbuffile,
-                            stderr=None)
-    while True:
-        exit_code = proc.poll()
-        if exit_code is not None:
-            break
-        time.sleep(0.5)
-        metux.acquire()
-        proc_flag = debug_flag
-        metux.release()
-        if not proc_flag:
-            break
-    wbuffile.close()
-    if exit_code is None:
-        killall(proc.pid)
-
-
-def _get_device_ids():
-    """get tizen device list of ids"""
-    result = []
-    exit_code, ret = shell_command("sdb start-server")
-    exit_code, ret = shell_command("sdb devices")
-    for line in ret:
-        if str.find(line, "\tdevice") != -1:
-            result.append(line.split("\t")[0])
-    return result
-
-class TizenMobile:
-
-    """
-    Implementation for transfer data
-    between Host and Tizen Mobile Device
-    """
-
-    def __init__(self, device_id=None):
-        self.deviceid = device_id
-        self.is_NE = 0
-        if self.deviceid and str(self.deviceid).find('NE') > -1:
-            self.is_NE = int(self.deviceid.split(':')[1].split('_')[0])
-            self.deviceid = self.deviceid.split('_')[1]
-        self._wrt = False
-        self._xwalk = False
-        self.support_remote = True
-        self.get_user_id()
-
-#default user is changed "app" to "owner"
-#jh0219.han@samsung.com
-
-    def is_NE_mode(self):
-        return self.is_NE
-
-    def get_devid(self):
-        return self.deviceid
-
-    def get_user_id(self):
-        if TIZEN_USER == 'owner':
-            self.port = '5000'
-        else:
-            cmdline = XWALK_QUERY_ID % (self.deviceid, TIZEN_USER)
-            exit_code, ret = shell_command(cmdline)
-            if exit_code == -1:
-                LOGGER.info("[ can not get user id ]")
-            if len(ret) >0 :
-                self.port = ret[0]
-
-    def is_support_remote(self):
-        return self.support_remote
-
-    def shell_cmd(self, cmd="", timeout=15):
-        cmdline = SDB_COMMAND % (self.deviceid, cmd)
-        return shell_command(cmdline, timeout)
-
-    def check_process(self, process_name):
-        exit_code, ret = shell_command(
-            APP_QUERY_STR % (self.deviceid, process_name))
-        return len(ret)
-
-    def kill_stub(self):
-        #add this function to avoid webdriver issue if stub exists running on device,yangx.zhou@intel.com
-        cmdline = "ps -aux | grep testkit-stub | grep -v grep | awk '{ print $2 }'"
-        exit_code, ret = self.shell_cmd(cmdline)
-        if exit_code == 0 and len(ret) >0:
-            cmdline = "kill -9 %s" %ret[0]
-            exit_code, ret = self.shell_cmd(cmdline)
-
-    def launch_stub(self, stub_app, stub_port, debug_opt=""):
-        #block OTCIS-3781
-        #self.kill_stub()
-        cmdline = "/opt/home/developer/%s --port:%s %s; sleep 2s" % \
-                (stub_app, stub_port, debug_opt)
-
-        exit_code, ret = self.shell_cmd(cmdline)
-        time.sleep(2)
-
-    def shell_cmd_ext(self,
-                      cmd="",
-                      timeout=None,
-                      boutput=False,
-                      stdout_file=None,
-                      stderr_file=None):
-        #if cmd.startswith('app_user@'):
-        #jh0219.han@samsung.com
-        #modified considering multi_user
-        usr = TIZEN_USER + '_user@'
-        usr_len = len(usr)
-        if cmd.startswith(usr):
-            cmdline = SDB_COMMAND_APP % (self.deviceid,TIZEN_USER, self.port, cmd[usr_len:])
-        else:
-            cmdline = SDB_COMMAND_RTN % (self.deviceid, cmd)
-        return shell_command_ext(cmdline, timeout, boutput, stdout_file, stderr_file)
-
-    def get_device_info(self):
-        """get tizen device inforamtion"""
-        device_info = {}
-        resolution_str = ""
-        screen_size_str = ""
-        device_model_str = ""
-        device_name_str = ""
-        build_id_str = ""
-        os_version_str = ""
-
-        # get resolution and screen size
-        exit_code, ret = shell_command(
-            "sdb -s %s shell xrandr" % self.deviceid)
-        pattern = re.compile("connected (\d+)x(\d+).* (\d+mm) x (\d+mm)")
-        for line in ret:
-            match = pattern.search(line)
-            if match:
-                resolution_str = "%s x %s" % (match.group(1), match.group(2))
-                screen_size_str = "%s x %s" % (match.group(3), match.group(4))
-
-        # get architecture
-        exit_code, ret = shell_command(
-            "sdb -s %s shell cat /etc/info.ini" % self.deviceid)
-        for line in ret:
-            if line.find("Model=") != -1:
-                device_model_str = str(line.split('=')[1]).replace(";","")
-                break
-
-        # get hostname
-        exit_code, ret = shell_command(
-            "sdb -s %s shell uname -n" % self.deviceid)
-        if len(ret) > 0:
-            device_name_str = ret[0]
-
-        # get os version
-        exit_code, ret = shell_command(
-            "sdb -s %s shell cat /etc/issue" % self.deviceid)
-        for line in ret:
-            if len(line) > 1:
-                os_version_str = "%s %s" % (os_version_str, line)
-
-        # get build id
-        exit_code, ret = shell_command(
-            "sdb -s %s shell cat /etc/os-release" % self.deviceid)
-        for line in ret:
-            if line.find("BUILD_ID=") != -1:
-                build_id_str = line.split('=')[1].strip('\"\r\n')
-
-        os_version_str = os_version_str[0:-1]
-        device_info["device_id"] = self.deviceid
-        device_info["resolution"] = resolution_str
-        device_info["screen_size"] = screen_size_str
-        device_info["device_model"] = device_model_str
-        device_info["device_name"] = device_name_str
-        device_info["os_version"] = os_version_str
-        device_info["build_id"] = build_id_str
-        return device_info
-
-    def get_server_url(self, remote_port="8000"):
-        """forward request a host tcp port to targe tcp port"""
-        if remote_port is None:
-            return None
-
-        os.environ['no_proxy'] = LOCAL_HOST_NS
-        host = LOCAL_HOST_NS
-        inner_port = 9000
-        time_out = 2
-        bflag = False
-        while True:
-            sock_inner = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
-            sock_inner.settimeout(time_out)
-            try:
-                sock_inner.bind((host, inner_port))
-                sock_inner.close()
-                bflag = False
-            except socket.error as error:
-                if error.errno == 98 or error.errno == 13:
-                    bflag = True
-            if bflag:
-                inner_port += 1
-            else:
-                break
-        host_port = str(inner_port)
-        cmd = "sdb -s %s forward tcp:%s tcp:%s" % \
-            (self.deviceid, host_port, remote_port)
-        exit_code, ret = shell_command(cmd)
-        url_forward = "http://%s:%s" % (host, host_port)
-        return url_forward
-
-    def download_file(self, remote_path, local_path):
-        """download file from device"""
-        local_path_dir = os.path.dirname(local_path)
-        if not os.path.exists(local_path_dir):
-            os.makedirs(local_path_dir)
-        filename = os.path.basename(remote_path)
-        cmd = "sdb -s %s pull %s %s" % (
-            self.deviceid, remote_path, local_path_dir)
-        exit_code, ret = shell_command(cmd)
-        if exit_code != 0:
-            error = ret[0].strip('\r\n') if len(ret) else "sdb shell timeout"
-            LOGGER.info("[ Download file \"%s\" failed, error: %s ]"
-                        % (remote_path, error))
-            return False
-        else:
-            src_path = os.path.join(local_path_dir, filename)
-            if src_path != local_path:
-                shutil.move(src_path, local_path)
-            return True
-
-    def upload_file(self, remote_path, local_path):
-        """upload file to device"""
-        cmd = "sdb -s %s push %s %s" % (self.deviceid, local_path, remote_path)
-        exit_code, ret = shell_command(cmd)
-        if exit_code != 0:
-            error = ret[0].strip('\r\n') if len(ret) else "sdb shell timeout"
-            LOGGER.info("[ Upload file \"%s\" failed,"
-                        " get error: %s ]" % (local_path, error))
-            return False
-        else:
-            return True
-
-    def _get_wrt_app(self, test_suite, test_set, fuzzy_match, auto_iu):
-        test_app_id = None
-        if auto_iu:
-            test_wgt = test_set
-            test_wgt_path = WRT_LOCATION % (test_suite, test_wgt)
-            if not self.install_app(test_wgt_path):
-                LOGGER.info("[ failed to install widget \"%s\" in target ]"
-                            % test_wgt)
-                return None
-        else:
-            test_wgt = test_suite
-
-        # check if widget installed already
-        cmd = WRT_QUERY_STR % (self.deviceid, test_wgt)
-        exit_code, ret = shell_command(cmd)
-        if exit_code == -1:
-            return None
-        for line in ret:
-            items = line.split(':')
-            if len(items) < 1:
-                continue
-            if (fuzzy_match and items[0].find(test_wgt) != -1) or items[0] == test_wgt:
-                test_app_id = items[1].strip('\r\n')
-                break
-
-        if test_app_id is None:
-            LOGGER.info("[ test widget \"%s\" not found in target ]"
-                        % test_wgt)
-            return None
-
-        return test_app_id
-
-    def _get_xwalk_app(self, test_suite, test_set, fuzzy_match, auto_iu):
-        test_app_id = None
-        if auto_iu:
-            test_wgt = test_set
-            test_wgt_path = XWALK_LOCATION % (test_suite, test_wgt)
-
-            if not self.install_app(test_wgt_path):
-                LOGGER.info("[ failed to install widget \"%s\" in target ]"
-                            % test_wgt)
-                return None
-        else:
-            test_wgt = test_suite
-
-        # check if widget installed already
-        cmd = XWALK_QUERY_STR % (self.deviceid, TIZEN_USER, self.port, test_wgt)
-        exit_code, ret = shell_command(cmd)
-        if exit_code == -1:
-            return None
-        for line in ret:
-            test_app_id = line.strip('\r\n')
-        if test_app_id is None:
-            LOGGER.info("[ test widget \"%s\" not found in target ]"
-                        % test_wgt)
-            return None
-
-        return test_app_id
-
-    def get_launcher_opt(self, test_launcher, test_ext, test_widget, test_suite, test_set):
-        """
-        get test option dict
-        """
-        test_opt = {}
-        self._wrt = False
-        self._xwalk = False
-        app_id = None
-        test_opt["suite_name"] = test_suite
-        test_opt["launcher"] = test_launcher
-        if test_widget is not None and test_widget != "":
-            test_suite = test_widget
-        if test_launcher.find('WRTLauncher') >= 0:
-            self._wrt = True
-            test_opt["launcher"] = WRT_MAIN
-            client_cmds = test_launcher.strip().split()
-            wrt_tag = client_cmds[1] if len(client_cmds) > 1 else ""
-            test_opt['fuzzy_match'] = fuzzy_match = wrt_tag.find('z') != -1
-            test_opt['auto_iu'] = auto_iu = wrt_tag.find('iu') != -1
-            test_opt['self_exec'] = wrt_tag.find('a') != -1
-            test_opt['self_repeat'] = wrt_tag.find('r') != -1
-            app_id = self._get_wrt_app(test_suite, test_set, fuzzy_match, auto_iu)
-        elif test_launcher.find('xwalk') >= 0 and len(test_launcher) <= 16:
-            self._xwalk = True
-            test_opt["launcher"] = XWALK_MAIN
-            client_cmds = test_launcher.strip().split()
-            xpk_tag = client_cmds[1] if len(client_cmds) > 1 else ""
-            test_opt['fuzzy_match'] = fuzzy_match = xpk_tag.find('z') != -1
-            test_opt['auto_iu'] = auto_iu = xpk_tag.find('iu') != -1
-            test_opt['self_exec'] = xpk_tag.find('a') != -1
-            test_opt['self_repeat'] = xpk_tag.find('r') != -1
-            app_id = self._get_xwalk_app(test_suite, test_set, fuzzy_match, auto_iu)
-        else:
-            app_id = test_launcher
-
-        if app_id is None:
-            return None
-        length = len(app_id) - 1
-        #test_opt["test_app_id"] = '''%s''' % app_id[1:length]
-        test_opt["test_app_id"] = app_id
-        print app_id
-        cmd_app_id = app_id.split('.')[0]
-        cmd1 = WRT_SMACK_STR % (self.deviceid, cmd_app_id[1:])
-        cmd2 = WRT_SMACK_REV_STR % (self.deviceid, cmd_app_id[1:])
-        print cmd1
-        print cmd2
-
-        shell_command(cmd1)
-        shell_command(cmd2)
-
-        return test_opt
-
-    def install_package(self, pkgpath):
-        """install a package on tizen device:
-        push package and install with shell command
-        """
-        cmd = RPM_INSTALL % (self.deviceid, pkgpath)
-        exit_code, ret = shell_command(cmd)
-        return ret
-
-    def uninstall_package(self, pkgname):
-        """install a package on tizen device:
-        push package and install with shell command
-        """
-        cmd = RPM_UNINSTALL % (self.deviceid, pkgname)
-        exit_code, ret = shell_command(cmd)
-        return ret
-
-    def get_installed_package(self):
-        """get list of installed package from device"""
-        cmd = RPM_LIST % self.deviceid
-        exit_code, ret = shell_command(cmd)
-        return ret
-
-    def start_debug(self, dlogfile):
-        global debug_flag, metux
-        if self.is_NE_mode(): 
-            return
-        debug_flag = True
-        metux = threading.Lock()
-        cmdline = DLOG_CLEAR % self.deviceid
-        exit_code, ret = shell_command(cmdline)
-        cmdline = DLOG_WRT % self.deviceid
-        th = threading.Thread(target=debug_trace, args=(cmdline, dlogfile+'.dlog'))
-        th.setDaemon(True)
-        th.start()        
-
-    def stop_debug(self):
-        global debug_flag, metux
-        if self.is_NE_mode(): 
-            return
-        metux.acquire()
-        debug_flag = False
-        metux.release()
-
-    def launch_app(self, wgt_name):
-        blauched = False
-        if self._wrt:
-            timecnt = 0
-            cmdline = WRT_STOP_STR % (self.deviceid, wgt_name)
-            exit_code, ret = shell_command(cmdline)
-            cmdline = WRT_START_STR % (self.deviceid, wgt_name)
-            while timecnt < 3:
-                exit_code, ret_out, ret_err = shell_command_ext(cmdline, 30)
-                if exit_code == "0":
-                    blauched = True
-                    break
-                timecnt += 1
-                time.sleep(3)
-        elif self._xwalk:
-            cmd = APP_QUERY_STR % (self.deviceid, wgt_name)
-            exit_code, ret = shell_command(cmd)
-            for line in ret:
-                cmd = APP_KILL_STR % (self.deviceid, line.strip('\r\n'))
-                exit_code, ret = shell_command(cmd)
-            cmdline = XWALK_START_STR % (self.deviceid, TIZEN_USER, self.port, XWALK_MAIN, wgt_name)
-            exit_code, ret = shell_command(cmdline)
-            time.sleep(3)
-            blauched = True
-        else:
-            cmdline = APP_NONBLOCK_STR % (self.deviceid, wgt_name)
-            exit_code, ret = shell_command(cmdline)
-            time.sleep(3)
-            cmd = APP_QUERY_STR % (self.deviceid, wgt_name)
-            exit_code, ret = shell_command(cmd)
-            if ret and len(ret):
-                blauched = True
-
-        return blauched
-
-    def kill_app(self, wgt_name):
-        if self._wrt:
-            cmdline = WRT_STOP_STR % (self.deviceid, wgt_name)
-            exit_code, ret = shell_command(cmdline)
-        elif self._xwalk:
-            cmd = APP_QUERY_STR % (self.deviceid, wgt_name)
-            exit_code, ret = shell_command(cmd)
-            for line in ret:
-                cmd = APP_KILL_STR % (self.deviceid, line.strip('\r\n'))
-                exit_code, ret = shell_command(cmd)
-        return True
-
-    def install_app(self, wgt_path="", timeout=90):
-        if self._wrt:
-            cmd = WRT_INSTALL_STR % (self.deviceid, wgt_path)
-        elif self._xwalk:
-            if len(wgt_path):
-                 ext = wgt_path.split(".")[1]
-            cmd = XWALK_INSTALL_STR % (self.deviceid, TIZEN_USER, self.port, ext, wgt_path)
-        else:
-            return True
-        exit_code, ret = shell_command(cmd, timeout)
-        if exit_code == -1:
-            cmd = APP_QUERY_STR % (self.deviceid, wgt_path)
-            exit_code, ret = shell_command(cmd)
-            for line in ret:
-                cmd = APP_KILL_STR % (self.deviceid, line.strip('\r\n'))
-                exit_code, ret = shell_command(cmd)
-            return False
-        else:
-            return True
-
-    def uninstall_app(self, wgt_name):
-        if self._wrt:
-            cmd = WRT_UNINSTL_STR % (self.deviceid, TIZEN_USER, self.port,  wgt_name)
-        elif self._xwalk:
-            cmd = XWALK_UNINSTL_STR % (self.deviceid, TIZEN_USER,self.port,  wgt_name)
-        else:
-            return True
-        exit_code, ret = shell_command(cmd)
-        return True
-
-    def get_buildinfo(self, _tizenV):
-        """ get builf info"""
-        device_file = DEVICE_SUITE_TARGET_30 + '/Documents/tct/buildinfo.xml'
-
-        buildinfo_file = '/opt/testkit/lite3.0/' + self.deviceid + '/buildinfo.xml'
-        build_info = {}
-        build_info['buildid'] = ''
-        build_info['manufacturer'] = ''
-        build_info['model'] = ''
-
-        if self.download_file(device_file, buildinfo_file) \
-            and EXISTS(buildinfo_file):
-            root = etree.parse(buildinfo_file).getroot()
-            for element in root.findall("buildinfo"):
-                if element is not None:
-                    if element.get("name").lower() == 'buildversion':
-                        child = etree.Element.getchildren(element)
-                        if child and child[0].text:
-                            buildid = child[0].text
-                            build_info['buildid'] = buildid
-                    if element.get("name").lower() == 'manufacturer':
-                        child = etree.Element.getchildren(element)
-                        if child and child[0].text:
-                            manufacturer = child[0].text
-                            build_info['manufacturer'] = manufacturer
-                    if element.get("name").lower() == 'model':
-                        child = etree.Element.getchildren(element)
-                        if child and child[0].text:
-                            model = child[0].text
-                            build_info['model'] = model
-            os.remove(buildinfo_file)
-        return build_info
-
-def get_target_conn(device_id=None):
-    """ Get connection for Test Target"""
-    if device_id is None:
-        dev_list = _get_device_ids()
-        if len(dev_list):
-            device_id = dev_list[0]
-        else:
-            raise InvalidDeviceException('No TIZEN device found!')
-    return TizenMobile(device_id)
diff --git a/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite2.0/testkitlite/engines/Makefile.am b/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite2.0/testkitlite/engines/Makefile.am
deleted file mode 100755 (executable)
index 16d6aaf..0000000
+++ /dev/null
@@ -1,18 +0,0 @@
-# Copyright (C) 2012 Intel Corporation
-# 
-# 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
-# of the License, or (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-#
-# Authors:
-#              Zhang, Huihui <huihuix.zhang@intel.com>
-#              Wendong,Sui  <weidongx.sun@intel.com>
-
-testkitliteenginesdir = /usr/lib/python2.7/dist-packages/testkitlite/engines
-dist_testkitliteengines_SCRIPTS = *.py
diff --git a/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite2.0/testkitlite/engines/__init__.py b/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite2.0/testkitlite/engines/__init__.py
deleted file mode 100755 (executable)
index 8b13789..0000000
+++ /dev/null
@@ -1 +0,0 @@
-
diff --git a/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite2.0/testkitlite/engines/androidunit.py b/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite2.0/testkitlite/engines/androidunit.py
deleted file mode 100755 (executable)
index 57c1c1f..0000000
+++ /dev/null
@@ -1,183 +0,0 @@
-#!/usr/bin/python
-#
-# Copyright (C) 2012 Intel Corporation
-#
-# 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
-# of the License, or (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-#
-# Authors:
-#           Chengtao,Liu  <chengtaox.liu@intel.com>
-""" The implementation of pyunit test engine"""
-
-import os
-import time
-import sys
-import threading
-import uuid
-import StringIO
-import unittest
-from unittest import TestResult
-from datetime import datetime
-from testkitlite.util.log import LOGGER
-from testkitlite.util.result import TestSetResut
-
-
-ANDROID_UNIT_STATUS = "INSTRUMENTATION_STATUS:"
-ANDROID_UNIT_STATUS_CODE = "INSTRUMENTATION_STATUS_CODE:"
-ANDROID_UNIT_STATUS_LEN = len(ANDROID_UNIT_STATUS)
-ANDROID_UNIT_STATUS_CODE_LEN = len(ANDROID_UNIT_STATUS_CODE)
-ANDROID_UNIT_START = "am instrument -r -w -e class %s %s/android.test.InstrumentationTestRunner"
-DATE_FORMAT_STR = "%Y-%m-%d %H:%M:%S"
-result_buffer = None
-
-
-def _case_create(case_class, case_id, purpose, status, message):
-    _case = dict()
-    _case['case_class'] = case_class
-    _case['case_id'] = case_id
-    _case['purpose'] = case_id
-    _case['start_at'] = datetime.now().strftime(DATE_FORMAT_STR)
-    if status == '-2':
-        _case['result'] = 'FAIL'
-    elif status == '0':
-        _case['result'] = 'PASS'
-    _case['stdout'] = '[message]' + message
-    _case['end_at'] = datetime.now().strftime(DATE_FORMAT_STR)
-    return _case
-
-
-def _adunit_lines_handler(outstr):
-    """android unittest result wrapper"""
-    lines = outstr.split('\r\n')
-    results = []
-    b_stack = False
-    case_class=case_id = purpose = result = message = ''
-    for line in lines:
-        #print 'debug', line
-        if line.startswith(ANDROID_UNIT_STATUS):
-            content = line[ANDROID_UNIT_STATUS_LEN:].strip()
-            if content.startswith('class='):
-                case_class = content[content.find('class=')+6:]
-            elif content.startswith('test='):
-                result = message = ''
-                b_stack = False
-                case_id = content[content.find('test=')+5:]
-                purpose = case_id
-            elif content.startswith('stack='):
-                message = content[content.find('stack=')+6:]
-                b_stack = True
-        elif line.startswith(ANDROID_UNIT_STATUS_CODE):
-            status = line[ANDROID_UNIT_STATUS_CODE_LEN:].strip()
-            if status != '1': # FAIL / PASS
-                results.append(_case_create(case_class, case_id, purpose, status, message))
-               # print 'debug', results 
-        else:
-            if b_stack:
-                message += line
-    result_buffer.extend_result(results)
-
-
-def _adunit_test_exec(conn, test_session, test_set_path, result_obj):
-    """function for running core tests"""
-    global result_buffer
-    result_buffer = result_obj
-    result_obj.set_status(0)
-    for tc in test_set_path['cases']:
-   # LOGGER.info('[ android unit test, entry: %s ]' % test_set_path)
-   # test_cmd = ANDROID_UNIT_START % (test_set_path, '.'.join(test_set_path.split('.')[:-1]))
-   # _code, _out, _error = conn.shell_cmd_ext(cmd=test_cmd, timeout=None, boutput=True, callbk=_adunit_lines_handler)
-   # result_obj.set_status(1)
-        LOGGER.info('[ android unit test, entry: %s ]' % tc['entry'])
-        test_cmd = ANDROID_UNIT_START % (tc['entry'], '.'.join(tc['entry'].split('.')[:-1]))
-        _code, _out, _error = conn.shell_cmd_ext(cmd=test_cmd, timeout=None, boutput=True, callbk=_adunit_lines_handler)
-    result_obj.set_status(1)
-
-class TestWorker(object):
-
-    """Test executor for testkit-lite"""
-
-    def __init__(self, conn):
-        super(TestWorker, self).__init__()
-        self.conn = conn
-        self.server_url = None
-        self.result_obj = None
-        self.opts = dict({'block_size': 300,
-                          'test_type': None,
-                          'auto_iu': False,
-                          'fuzzy_match': False,
-                          'self_exec': False,
-                          'self_repeat': False,
-                          'debug_mode': False
-                          })
-
-    def init_test(self, params):
-        """init the test envrionment"""
-        self.opts['testset_name'] = params.get('testset-name', '')
-        self.opts['testsuite_name'] = params.get('testsuite-name', '')
-        self.opts['debug_log_base'] = params.get("debug-log-base", '')
-        return str(uuid.uuid1())
-
-    def run_test(self, sessionid, test_set):
-        """
-            process the execution for a test set
-        """
-        #print 'debug', test_set
-        if sessionid is None:
-            return False
-        disabledlog = os.environ.get("disabledlog","")
-        # start debug trace thread
-        if len(disabledlog) > 1:
-            pass
-        else:
-            self.conn.start_debug(self.opts['debug_log_base'])
-        time.sleep(1)
-        self.result_obj = TestSetResut(
-            self.opts['testsuite_name'], self.opts['testset_name'])
-        self.opts['async_th'] = threading.Thread(
-            target=_adunit_test_exec,
-            args=(self.conn, sessionid, test_set, self.result_obj)
-        )
-       # self.opts['async_th'] = threading.Thread(
-       #     target=_adunit_test_exec,
-       #     args=(self.conn, sessionid, test_set['test_set_src'], self.result_obj)
-       # )
-        self.opts['async_th'].start()
-        return True
-
-    def get_test_status(self, sessionid):
-        """poll the test task status"""
-        if sessionid is None:
-            return None
-        result = {}
-        result["msg"] = []
-        result["finished"] = str(self.result_obj.get_status())
-        return result
-
-    def get_test_result(self, sessionid):
-        """get the test result for a test set """
-        result = {}
-        if sessionid is None:
-            return result
-
-        result = self.result_obj.get_result()
-        return result
-
-    def finalize_test(self, sessionid):
-        """clear the test stub and related resources"""
-        if sessionid is None:
-            return False
-
-        if self.result_obj is not None:
-            self.result_obj.set_status(1)
-
-        # stop debug thread
-        self.conn.stop_debug()
-
-        return True
diff --git a/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite2.0/testkitlite/engines/default.py b/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite2.0/testkitlite/engines/default.py
deleted file mode 100755 (executable)
index 4549afe..0000000
+++ /dev/null
@@ -1,653 +0,0 @@
-#!/usr/bin/python
-#
-# Copyright (C) 2012 Intel Corporation
-#
-# 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
-# of the License, or (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-#
-# Authors:
-#           Chengtao,Liu  <chengtaox.liu@intel.com>
-""" The implementation of default test engine"""
-
-import os
-import time
-import threading
-import uuid
-import ConfigParser
-
-from datetime import datetime
-from testkitlite.util.log import LOGGER
-from testkitlite.util.httprequest import get_url, http_request
-from testkitlite.util.result import TestSetResut
-
-TCT_CONFIG_FILE = "/opt/tools/TCT_CONFIG"
-tct_parser = ConfigParser.ConfigParser()
-tct_parser.read(TCT_CONFIG_FILE)
-
-DEVICE_SUITE_TARGET_30 = tct_parser.get('DEVICE', 'DEVICE_SUITE_TARGET_30')
-
-CNT_RETRY = 10
-DATE_FORMAT_STR = "%Y-%m-%d %H:%M:%S"
-UIFW_MAX_TIME = 300
-UIFW_MAX_WRITE_TIME = 10
-UIFW_RESULT = os.path.join(DEVICE_SUITE_TARGET_30, "Documents/tcresult")
-UIFW_SET_NUM = 0
-LAUNCH_ERROR = 1
-BLOCK_ERROR = 3
-FILES_ROOT = os.path.expanduser("~") + os.sep
-
-
-def _core_test_exec(conn, test_session, test_set_name, exetype, \
-        cases_queue, result_obj):
-    """function for running core tests"""
-    exetype = exetype.lower()
-    total_count = len(cases_queue)
-    current_idx = 0
-    manual_skip_all = False
-    result_list = []
-    stdout_file = FILES_ROOT + test_session + "_stdout.log"
-    stderr_file = FILES_ROOT + test_session + "_stderr.log"
-    initscript = os.environ.get('initscript', '')
-    postscript = os.environ.get('postscript', '')
-    for test_case in cases_queue:
-        if result_obj.get_status() == 1:
-            break
-
-        current_idx += 1
-        core_cmd = ""
-        if "entry" in test_case:
-            core_cmd = test_case["entry"]
-        else:
-            LOGGER.info(
-                "[ Warnning: test script is empty,"
-                " please check your test xml file ]")
-            continue
-        expected_result = test_case.get('expected_result', '0')
-        time_out = int(test_case.get('timeout', '90'))
-        location = test_case.get('location', 'device')
-        measures = test_case.get('measures', [])
-        retmeasures = []
-        os.environ['CASE_ID'] = test_case['case_id']
-
-        LOGGER.info("\n[%s:%s] TestCase: %s\n"
-                    "TestEntry: %s"
-                    % (current_idx, total_count, test_case['case_id'], core_cmd))
-
-        strtime = datetime.now().strftime(DATE_FORMAT_STR)
-        LOGGER.info("start: %s" % strtime)
-        test_case["start_at"] = strtime
-        if exetype == 'auto':
-            return_code, stdout, stderr = -1, [], []
-            if location == 'host':
-                if len(initscript) > 1:
-                    return_code, stdout, stderr = \
-                            conn.shell_cmd_host(initscript, time_out, False, \
-                            stdout_file, stderr_file)
-
-                    if return_code is not None and return_code != "timeout":
-                        LOGGER.info('init script ok')
-                    else:
-                        LOGGER.info('init script fail')
-                return_code, stdout, stderr = -1, [], []
-                return_code, stdout, stderr = \
-                        conn.shell_cmd_host(core_cmd, time_out, False, \
-                        stdout_file, stderr_file)
-            else:
-                if len(initscript) > 1:
-                    return_code, stdout, stderr = \
-                            conn.shell_cmd_ext(initscript, time_out, False, \
-                            stdout_file, stderr_file)
-                    if return_code is not None and return_code != "timeout":
-                        LOGGER.info('init script ok')
-                    else:
-                        LOGGER.info('init script fail')
-                return_code, stdout, stderr = -1, [], []
-                return_code, stdout, stderr = \
-                        conn.shell_cmd_ext(core_cmd, time_out, False, \
-                        stdout_file, stderr_file)
-            print 'return ', return_code, stdout, stderr
-            if return_code is not None and return_code != "timeout":
-                test_case["result"] = "pass" if str(
-                    return_code) == expected_result else "fail"
-                test_case["stdout"] = stdout
-                test_case["stderr"] = stderr
-                for item in measures:
-                    ind = item['name']
-                    fname = item['file']
-                    if fname is None:
-                        continue
-                    tmpname = FILES_ROOT + test_session + "_mea_tmp"
-                    if conn.download_file(fname, tmpname):
-                        try:
-                            config = ConfigParser.ConfigParser()
-                            config.read(tmpname)
-                            item['value'] = config.get(ind, 'value')
-                            retmeasures.append(item)
-                            os.remove(tmpname)
-                        except IOError as error:
-                            LOGGER.error(
-                                "[ Error: fail to parse value,"
-                                " error:%s ]\n" % error)
-                test_case["measures"] = retmeasures
-            else:
-                test_case["result"] = "BLOCK"
-                test_case["stdout"] = stdout
-                test_case["stderr"] = stderr
-        elif exetype == 'manual':
-            # handle manual core cases
-            try:
-                # LOGGER.infopre-condition info
-                if "pre_condition" in test_case:
-                    LOGGER.info("\n****\nPre-condition: %s\n ****\n"
-                                % test_case['pre_condition'])
-                # LOGGER.infostep info
-                if "steps" in test_case:
-                    for step in test_case['steps']:
-                        LOGGER.info(
-                            "********************\n"
-                            "Step Order: %s" % step['order'])
-                        LOGGER.info("Step Desc: %s" % step['step_desc'])
-                        LOGGER.info(
-                            "Expected: %s\n********************\n"
-                            % step['expected'])
-                if manual_skip_all:
-                    test_case["result"] = "N/A"
-                else:
-                    while True:
-                        test_result = raw_input(
-                            '[ please input case result ]'
-                            ' (p^PASS, f^FAIL, b^BLOCK, n^Next, d^Done):')
-                        if test_result.lower() == 'p':
-                            test_case["result"] = "PASS"
-                            break
-                        elif test_result.lower() == 'f':
-                            test_case["result"] = "FAIL"
-                            break
-                        elif test_result.lower() == 'b':
-                            test_case["result"] = "BLOCK"
-                            break
-                        elif test_result.lower() == 'n':
-                            test_case["result"] = "N/A"
-                            break
-                        elif test_result.lower() == 'd':
-                            manual_skip_all = True
-                            test_case["result"] = "N/A"
-                            break
-                        else:
-                            LOGGER.info(
-                                "[ Warnning: you input: '%s' is invalid,"
-                                " please try again ]" % test_result)
-            except IOError as error:
-                LOGGER.info(
-                    "[ Error: fail to get core manual test step,"
-                    " error: %s ]\n" % error)
-        strtime = datetime.now().strftime(DATE_FORMAT_STR)
-        LOGGER.info("end : %s" % strtime)
-        test_case["end_at"] = strtime
-        LOGGER.info("execute case: %s" % test_case["result"])
-        result_list.append(test_case)
-        if len(postscript) > 1:
-            if location == 'host':
-                return_code, stdout, stderr = \
-                        conn.shell_cmd_host(postscript, time_out, False, \
-                        stdout_file, stderr_file)
-                if return_code is not None and return_code != "timeout":
-                    LOGGER.info('post script ok')
-                else:
-                    LOGGER.info('post script fail')
-
-            else:
-                if postscript is not None or postscript is not '':
-                    return_code, stdout, stderr = \
-                            conn.shell_cmd_ext(postscript, time_out, False, \
-                            stdout_file, stderr_file)
-                    if return_code is not None and return_code != "timeout":
-                        LOGGER.info('post script ok')
-                    else:
-                        LOGGER.info('post script fail')
-
-    result_obj.extend_result(result_list, False)
-    result_obj.set_status(1)
-
-
-def _web_test_exec(conn, server_url, test_web_app, exetype, \
-        cases_queue, result_obj):
-    """function for running web tests"""
-    exetype = exetype.lower()
-    test_set_finished = False
-    err_cnt = 0
-    for test_group in cases_queue:
-        if test_set_finished:
-            break
-
-        ret = http_request(
-            get_url(server_url, "/set_testcase"), "POST", test_group, 30)
-        if ret is None:
-            LOGGER.error(
-                "[ set testcases timeout, please check device! ]")
-            result_obj.set_status(1)
-            break
-
-        if not conn.launch_app(test_web_app):
-            LOGGER.error("[ ERROR: launch test app %s failed! ]" \
-                    % test_web_app)
-            result_obj.set_status(1)
-            break
-
-        while True:
-            if result_obj.get_status() == 1:
-                test_set_finished = True
-                break
-            ret = http_request(
-                get_url(server_url, "/check_server_status"), "GET", {})
-            if ret is None:
-                LOGGER.error(
-                    "[ ERROR: get server status timeout, please check device! ]")
-                err_cnt += 1
-            else:
-                result_cases = ret.get("cases")
-                error_code = ret.get("error_code")
-                if error_code is not None:
-                    if not conn.launch_app(test_web_app):
-                        test_set_finished = True
-                        result_obj.set_status(1)
-                        break
-                    if error_code == LAUNCH_ERROR:
-                        LOGGER.error("[ERROR : test app no response, hang or not launched!]")
-                        test_set_finished = True
-                        result_obj.set_status(1)
-                        break
-                    elif error_code == BLOCK_ERROR:
-                        LOGGER.error("[ ERROR: test case block issue! ]")
-                        err_cnt += 1
-                else:
-                    err_cnt = 0
-
-                if result_cases is not None and len(result_cases):
-                    result_obj.extend_result(result_cases)
-                elif exetype == 'manual':
-                    LOGGER.info(
-                        "[ please execute manual cases ]\r\n")
-
-                if ret["finished"] == 1:
-                    test_set_finished = True
-                    result_obj.set_status(1)
-                    break
-                elif ret["block_finished"] == 1:
-                    break
-
-            if err_cnt >= CNT_RETRY:
-                LOGGER.error(
-                    "[error: get too many errors, stop current set]")
-                test_set_finished = True
-                result_obj.set_status(1)
-                break
-            time.sleep(2)
-
-
-def _webuifw_test_exec(conn, test_web_app, test_session, test_set_name, \
-        exetype, cases_queue, result_obj):
-    """function for running webuifw tests"""
-    global UIFW_SET_NUM
-    UIFW_SET_NUM = UIFW_SET_NUM + 1
-    set_UIFW_RESULT = UIFW_RESULT + "_" + str(UIFW_SET_NUM) + ".xml"
-    result_obj.set_status(0)
-    result_obj.set_result({"resultfile": ""})
-    ls_cmd = "ls -l %s" % set_UIFW_RESULT
-    sz_cmd = "du -hk %s " % set_UIFW_RESULT
-    time_out = UIFW_MAX_TIME
-    rm_cmd = "rm " + os.path.join(DEVICE_SUITE_TARGET_30, "Documents/tcresult*.xml")
-    #jh0219.han@samsung.com
-    if exetype == "auto":
-        conn.shell_cmd(rm_cmd)
-        UIFW_SET_NUM = 1
-        LOGGER.info('[webuifw] start test executing')
-        if not conn.launch_app(test_web_app):
-            LOGGER.info("[ launch test app \"%s\" failed! ]" % test_web_app)
-            result_obj.set_result({"resultfile": ""})
-            result_obj.set_status(1)
-
-    result_file = FILES_ROOT + test_session + "_uifw.xml"
-
-    while time_out > 0:
-        LOGGER.info('[webuifw] waiting for test completed...')
-        exit_code, ret = conn.shell_cmd(ls_cmd)
-        if not 'No such file or directory' in ret[0]:
-            exit_code, ret = conn.shell_cmd(sz_cmd)
-            f_size = int(ret[0].split("\t")[0])
-            if f_size > 0:
-                break
-            if time_out > UIFW_MAX_WRITE_TIME:
-                time_out = UIFW_MAX_WRITE_TIME
-        time.sleep(2)
-        time_out -= 2
-
-    LOGGER.info('[webuifw] end test executing')
-    if conn.download_file(set_UIFW_RESULT, result_file):
-        result_obj.set_result({"resultfile": result_file})
-    for test_case in cases_queue:
-        LOGGER.info("[webuifw] execute case: %s # %s" %
-                    (test_set_name, test_case['case_id']))
-    result_obj.set_status(1)
-
-
-class TestWorker(object):
-
-    """Test executor for testkit-lite"""
-
-    def __init__(self, conn):
-        super(TestWorker, self).__init__()
-        self.conn = conn
-        self.server_url = None
-        self.result_obj = None
-
-        self.opts = dict({'block_size': 300,
-                          'test_type': None,
-                          'auto_iu': False,
-                          'fuzzy_match': False,
-                          'self_exec': False,
-                          'self_repeat': False,
-                          'debug_mode': False
-                          })
-
-    def set_TizenVersion(self, tizenversion):
-        print ""
-
-    def __init_test_stub(self, stub_app, stub_port, debug_opt):
-        # init testkit-stub deamon process
-        timecnt = 0
-        blaunched = False
-        while timecnt < CNT_RETRY:
-            #print 'stub_app' ,stub_app
-            if not self.conn.check_process(stub_app):
-                LOGGER.info("[ no stub process activated, now try to launch %s ]" % stub_app)
-                self.conn.launch_stub(stub_app, stub_port, debug_opt)
-                timecnt += 1
-            else:
-                blaunched = True
-                break
-
-        if not blaunched:
-            LOGGER.info("[ launch stub process failed! ]")
-            return False
-
-        if self.server_url is None:
-            self.server_url = self.conn.get_server_url(stub_port)
-
-        timecnt = 0
-        blaunched = False
-        while timecnt < CNT_RETRY:
-            ret = http_request(get_url(
-                self.server_url, "/check_server_status"), "GET", {})
-            if ret is None:
-                LOGGER.info("[ check server status, not ready yet! ]")
-                timecnt += 1
-                time.sleep(1)
-            else:
-                blaunched = True
-                break
-        return blaunched
-
-    def __init_webtest_opt(self, params):
-        """init the test runtime, mainly process the star up of test stub"""
-        if params is None:
-            return None
-
-        session_id = str(uuid.uuid1())
-        stub_app = params.get('stub-name', 'testkit-stub')
-        stub_port = params.get('stub-port', '8000')
-        testsuite_name = params.get('testsuite-name', '')
-        testset_name = params.get('testset-name', '')
-        capability_opt = params.get("capability", None)
-        test_launcher = params.get('test-launcher', '')
-        test_extension = params.get('test-extension', None)
-        test_widget = params.get('test-widget', None)
- #      jh0219.han@samsung.com //in
-        client_cmds = params.get('test-launcher', '').strip().split()
-        wrt_tag = client_cmds[1] if len(client_cmds) > 1 else ""
-        self.opts['self_exec'] = wrt_tag.find('a') != -1
-        self.opts['self_repeat'] = wrt_tag.find('r') != -1
- #      jh0219.han@samsung.com //out
- #       LOGGER.info("[f*: %s ]" % str(params))
-        test_opt = self.conn.get_launcher_opt(
-            test_launcher, test_extension, test_widget, \
-                    testsuite_name, testset_name)
-        if test_opt is None:
-            LOGGER.info("[ init the test launcher, get failed ]")
-            return None
-        LOGGER.info("[ test launcher: %s ]" % test_opt["launcher"])
-        LOGGER.info("[ test app: %s ]" % test_opt["test_app_id"])
-        self.opts.update(test_opt)
-        self.opts['debug_mode'] = params.get("debug", False)
-
-        # uifw, this suite don't need stub
-        if self.opts['self_exec'] or self.opts['self_repeat']:
-            self.opts['test_type'] = "jqunit"
-            return session_id
-
-        # enable debug information
-        stub_debug_opt = "--debug" if self.opts['debug_mode'] else ""
-
-        # suite_id to be removed in later version
-        test_opt["suite_id"] = test_opt["test_app_id"]
-        if self.__init_test_stub(stub_app, stub_port, stub_debug_opt):
-            ret = http_request(get_url(
-                self.server_url, "/init_test"), "POST", test_opt)
-            if ret is None:
-                LOGGER.info("[ init test suite failed! ]")
-                return None
-            elif "error_code" in ret:
-                LOGGER.info("[ init test suite, "
-                            "get error code %d ! ]" % ret["error_code"])
-                return None
-
-            if capability_opt is not None:
-                ret = http_request(get_url(self.server_url,
-                                           "/set_capability"),
-                                   "POST", capability_opt)
-            return session_id
-        else:
-            LOGGER.info("[ Init test failed ! ]")
-            return None
-
-    def init_test(self, params):
-        """init the test envrionment"""
-        self.opts['testset_name'] = params.get('testset-name', '')
-        self.opts['testsuite_name'] = params.get('testsuite-name', '')
-        self.opts['debug_log_base'] = params.get("debug-log-base", '')
-        if params.get('test-launcher') is not None:
-            self.opts['test_type'] = "webapi"
-            return self.__init_webtest_opt(params)
-        elif params.get('set_type') in ['ref', 'js']:
-            self.opts['test_type'] = "webapi"
-            params['test-launcher'] = "xwalk"
-            return self.__init_webtest_opt(params)
-        else:
-            self.opts['test_type'] = "coreapi"
-            return str(uuid.uuid1())
-
-    def __run_core_test(self, sessionid, test_set_name, exetype, cases):
-        """
-            process the execution for core api test
-        """
-        self.opts['async_th'] = threading.Thread(
-            target=_core_test_exec,
-            args=(
-                self.conn, sessionid, test_set_name, exetype, \
-                        cases, self.result_obj)
-        )
-        self.opts['async_th'].start()
-        return True
-
-    def __run_jqt_test(self, sessionid, test_set_name, cases):
-        """
-            process the execution for Qunit testing
-        """
-        exetype = "auto" if self.opts['self_exec'] else ""
-        self.opts['async_th'] = threading.Thread(
-            target=_webuifw_test_exec,
-            args=(
-                self.conn, self.opts['test_app_id'], sessionid, \
-                        test_set_name, exetype, cases, self.result_obj)
-        )
-        self.opts['async_th'].start()
-        return True
-
-    def __run_web_test(self, sessionid, test_set_name, exetype, ctype, cases):
-        """
-            process the execution for web api test
-            may be splitted to serveral blocks,
-            with the unit size defined by block_size
-        """
-        #print 'web test'
-        case_count = len(cases)
-        blknum = 0
-        if case_count % self.opts['block_size'] == 0:
-            blknum = case_count / self.opts['block_size']
-        else:
-            blknum = case_count / self.opts['block_size'] + 1
-
-        idx = 1
-        test_set_queues = []
-        while idx <= blknum:
-            block_data = {}
-            block_data["exetype"] = exetype
-            block_data["type"] = ctype
-            block_data["totalBlk"] = str(blknum)
-            block_data["currentBlk"] = str(idx)
-            block_data["casecount"] = str(case_count)
-            start = (idx - 1) * self.opts['block_size']
-            if idx == blknum:
-                end = case_count
-            else:
-                end = idx * self.opts['block_size']
-            block_data["cases"] = cases[start:end]
-            test_set_queues.append(block_data)
-            idx += 1
-        self.opts['async_th'] = threading.Thread(
-            target=_web_test_exec,
-            args=(
-                self.conn, self.server_url, self.opts['test_app_id'], \
-                        exetype, test_set_queues, self.result_obj)
-        )
-        self.opts['async_th'].start()
-        return True
-
-    def run_test(self, sessionid, test_set):
-        """
-            process the execution for a test set
-        """
-        if sessionid is None:
-            return False
-
-        if not "cases" in test_set:
-            return False
-        disabledlog = os.environ.get('disabledlog', '')
-        cases, exetype, ctype = test_set[
-            "cases"], test_set["exetype"], test_set["type"]
-        #print 'exetype', exetype
-        if len(cases) == 0:
-            return False
-        # start debug trace thread
-        if disabledlog == 'True':
-            pass
-        else:
-            self.conn.start_debug(self.opts['debug_log_base'])
-        time.sleep(1)
-
-        self.result_obj = TestSetResut(
-            self.opts['testsuite_name'], self.opts['testset_name'])
-
-        devid = self.conn.get_devid()
-        if self.conn.is_NE_mode() or (devid and devid.find('None') > -1):
-            result_list = []
-            for case in cases:
-                test_case = {}
-                test_case['case_id'] = case['case_id']
-                test_case['result'] = 'N/A'
-                if devid.find('None') > -1:
-                    test_case['stdout'] = "target not found"
-                else:
-                    issue_num = int(self.conn.is_NE_mode())
-                    err_msg = "precondition failed "
-                    if issue_num == 1:
-                        err_msg += "(not connected to wifi)"
-                    elif issue_num == 2:
-                        err_msg += "(not set email account)"
-                    elif issue_num == 3:
-                        err_msg += "(not available device network)"
-                    elif issue_num == 4:
-                        err_msg += "(not enable bluetooth)"
-                    elif issue_num == 5:
-                        err_msg += "(not enable nfc)"
-                    elif issue_num == 6:
-                        err_msg += "(not available sim card)"
-                    test_case['stdout'] = err_msg
-  
-                result_list.append(test_case)
-
-            self.result_obj.extend_result(result_list)
-            self.result_obj.set_status(1)
-            return True
-        
-        if self.opts['test_type'] == "webapi":
-            if ctype == 'ref':
-                exetype = 'manual'
-            return self.__run_web_test(sessionid, \
-                    self.opts['testset_name'], exetype, ctype, cases)
-        elif self.opts['test_type'] == "coreapi":
-            return self.__run_core_test(sessionid, \
-                    self.opts['testset_name'], exetype, cases)
-        #elif self.opts['test_type'] == "jqunit":
-        elif self.opts['test_type'] in ["jqunit", 'pyunit']:
-            return self.__run_jqt_test(sessionid, \
-                    self.opts['testset_name'], cases)
-        else:
-            LOGGER.info("[ unsupported test suite type ! ]")
-            return False
-
-    def get_test_status(self, sessionid):
-        """poll the test task status"""
-        if sessionid is None:
-            return None
-        result = {}
-        result["msg"] = []
-        result["finished"] = str(self.result_obj.get_status())
-        return result
-
-    def get_test_result(self, sessionid):
-        """get the test result for a test set """
-        result = {}
-        if sessionid is None:
-            return result
-
-        result = self.result_obj.get_result()
-        return result
-
-    def finalize_test(self, sessionid):
-        """clear the test stub and related resources"""
-        if sessionid is None:
-            return False
-
-        if self.result_obj is not None:
-            self.result_obj.set_status(1)
-
-        # stop test app
-        if self.opts['test_type'] == "webapi":
-            self.conn.kill_app(self.opts['test_app_id'])
-            # uninstall test app
-            if self.opts['auto_iu']:
-                self.conn.uninstall_app(\
-                        self.opts['test_app_id'].split('.')[0][1:])
-
-        # stop debug thread
-        self.conn.stop_debug()
-
-        return True
diff --git a/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite2.0/testkitlite/engines/pyunit.py b/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite2.0/testkitlite/engines/pyunit.py
deleted file mode 100755 (executable)
index 3e3385c..0000000
+++ /dev/null
@@ -1,179 +0,0 @@
-#!/usr/bin/python
-#
-# Copyright (C) 2012 Intel Corporation
-#
-# 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
-# of the License, or (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-#
-# Authors:
-#           Chengtao,Liu  <chengtaox.liu@intel.com>
-""" The implementation of pyunit test engine"""
-
-import os
-import time
-import sys
-import threading
-import uuid
-import StringIO
-import unittest
-from unittest import TestResult
-from datetime import datetime
-from testkitlite.util.log import LOGGER
-from testkitlite.util.result import TestSetResut
-
-
-DATE_FORMAT_STR = "%Y-%m-%d %H:%M:%S"
-result_buffer = None
-class LiteTestResult(TestResult):
-
-    """Python unittest result wrapper"""
-
-    def startTest(self, test):
-        super(LiteTestResult, self).startTest(test)
-        self._case = {}
-        case_full_id = test.id()
-        self._case['case_id'] = case_full_id.split('.')[-1]
-        self._case['purpose'] = case_full_id
-        self._case['start_at'] = datetime.now().strftime(DATE_FORMAT_STR)
-
-    def stopTest(self, test):
-        self._case['end_at'] = datetime.now().strftime(DATE_FORMAT_STR)
-        super(LiteTestResult, self).stopTest(test)
-        if result_buffer is not None:
-            result_buffer.extend_result([self._case])
-
-    def addSuccess(self, test):
-        super(LiteTestResult, self).addSuccess(test)
-        self._case['result'] = 'PASS'
-
-    def addError(self, test, err):
-        super(LiteTestResult, self).addError(test, err)
-        _, _exc_str = self.errors[-1]
-        self._case['result'] = 'BLOCK'
-        self._case['stdout'] = '[message]' + _exc_str
-
-    def addFailure(self, test, err):
-        super(LiteTestResult, self).addFailure(test, err)
-        _, _exc_str = self.failures[-1]
-        self._case['result'] = 'FAIL'
-        self._case['stdout'] = '[message]' + _exc_str
-
-
-def _pyunit_test_exec(test_session, cases, result_obj):
-    """function for running core tests"""
-    global result_buffer
-    result_buffer = result_obj
-    result_obj.set_status(0)
-    total = unittest.TestSuite()
-    for tc in cases['cases']:
-        if tc['entry'].find(os.sep) != -1:
-            arr = tc['entry'].split(os.sep)
-            path = tc['entry'][:tc['entry'].rindex(os.sep)]
-            case = arr[-1]
-        else:
-            path = os.getcwd()
-            case = tc['entry']
-        try:
-            tests = unittest.TestLoader().discover(path, pattern='''%s''' %case)
-            total.addTest(tests)
-           # unittest.TextTestRunner(resultclass=LiteTestResult, buffer=True).run(tests)
-        except ImportError as error:
-            pass
-    try:
-        unittest.TextTestRunner(resultclass=LiteTestResult, buffer=True).run(total)
-    except ImportError as error:
-        pass
-
-    #result_obj.extend_result(resultclass)
-    result_obj.set_status(1)
-
-
-class TestWorker(object):
-
-    """Test executor for testkit-lite"""
-
-    def __init__(self, conn):
-        super(TestWorker, self).__init__()
-        self.conn = conn
-        self.server_url = None
-        self.result_obj = None
-        self.opts = dict({'block_size': 300,
-                          'test_type': None,
-                          'auto_iu': False,
-                          'fuzzy_match': False,
-                          'self_exec': False,
-                          'self_repeat': False,
-                          'debug_mode': False
-                          })
-
-    def init_test(self, params):
-        """init the test envrionment"""
-        self.opts['testset_name'] = params.get('testset-name', '')
-        self.opts['testsuite_name'] = params.get('testsuite-name', '')
-        self.opts['debug_log_base'] = params.get("debug-log-base", '')
-        return str(uuid.uuid1())
-
-    def run_test(self, sessionid, test_set):
-        """
-            process the execution for a test set
-        """
-        if sessionid is None:
-            return False
-        disabledlog = os.environ.get("disabledlog","")
-        # start debug trace thread
-        if len(disabledlog) > 0 :
-            pass
-        else:
-            self.conn.start_debug(self.opts['debug_log_base'])
-        time.sleep(1)
-        self.result_obj = TestSetResut(
-            self.opts['testsuite_name'], self.opts['testset_name'])
-       # self.opts['async_th'] = threading.Thread(
-       #     target=_pyunit_test_exec,
-       #     args=(sessionid, test_set['test_set_src'], test_set,  self.result_obj)
-       # )
-        self.opts['async_th'] = threading.Thread(
-            target=_pyunit_test_exec,
-            args=(sessionid, test_set, self.result_obj)
-        )
-        self.opts['async_th'].start()
-        return True
-
-    def get_test_status(self, sessionid):
-        """poll the test task status"""
-        if sessionid is None:
-            return None
-        result = {}
-        result["msg"] = []
-        result["finished"] = str(self.result_obj.get_status())
-        return result
-
-    def get_test_result(self, sessionid):
-        """get the test result for a test set """
-        result = {}
-        if sessionid is None:
-            return result
-
-        result = self.result_obj.get_result()
-        return result
-
-    def finalize_test(self, sessionid):
-        """clear the test stub and related resources"""
-        if sessionid is None:
-            return False
-
-        if self.result_obj is not None:
-            self.result_obj.set_status(1)
-
-        # stop debug thread
-        self.conn.stop_debug()
-
-        return True
diff --git a/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite2.0/testkitlite/engines/test_executer.py b/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite2.0/testkitlite/engines/test_executer.py
deleted file mode 100755 (executable)
index 8a20f3e..0000000
+++ /dev/null
@@ -1,575 +0,0 @@
-import os
-import re
-import time
-import sys
-import thread
-import threading
-import socket
-import json
-import hashlib
-import signal
-import logging
-import subprocess
-import ConfigParser
-from testkitlite.util import tr_utils
-from testkitlite.util.log import LOGGER as g_logger
-from urlparse import urlparse
-
-try:
-    from selenium.webdriver.remote.webdriver import WebDriver
-    from selenium.webdriver.support.ui import WebDriverWait
-except ImportError, err:
-    g_logger.info("Failed to import 'selenium' module, please check your installation:")
-    g_logger.info("  You can use 'sudo pip install selenium' to install the module!")
-    raise ImportError
-
-TE = None
-EXE_LOCK = threading.Lock()
-DEFAULT_TIMEOUT = 90
-REF_SET_TYPE = 'ref'
-JS_SET_TYPE = 'js'
-SCRIPT_SET_TYPE = 'script'
-STR_PASS = 'PASS'
-STR_FAIL = 'FAIL'
-STR_BLOCK = 'BLOCK'
-STR_NOTRUN = 'n/a'
-DEFAULT_WD_URL = 'http://127.0.0.1:9515'
-MH_FILE = "/opt/testkit/lite3.0/mh.html"
-
-
-class TestExecuter:
-
-    def __init__(self, test_env=None):
-        self.runner_proc = test_env['runner_proc']
-        self.exe_thread = None
-        self.exe_status = 'READY'
-        self.tests_json = ''
-        self.target_platform = test_env['target_platform']
-        self.web_driver = None
-        self.wd_url = test_env.get("wd_url", '') or DEFAULT_WD_URL
-        self.suite_name = test_env['suite_name']
-        self.set_type = test_env['set_type']
-        self.set_exetype = test_env['set_exetype']
-        self.test_prefix = ''
-        self.exe_socket_file = test_env['exe_socket_file']
-        self.exe_socket_buff_size = test_env['exe_socket_buff_size']
-        self.exe_socket = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM)
-        self.exe_socket.connect(self.exe_socket_file)
-        self.TE_LOG = g_logger
-        self.debugip = test_env.get("debugip", '')
-        self.appid = test_env.get("appid", '')
-        signal.signal(signal.SIGINT, self.__exitHandler)
-        signal.signal(signal.SIGTERM, self.__exitHandler)
-
-    def __exitHandler(self, a, b):
-        if self.web_driver:
-            self.web_driver.quit()
-            self.web_driver = None
-        with EXE_LOCK:
-            self.exe_status = 'DONE'
-
-    def __updateTestPrefix(self):
-        if self.target_platform.upper().find('ANDROID') >= 0:
-            url_components = urlparse(self.web_driver.current_url)
-            if url_components.scheme == 'http':
-                self.test_prefix = '%s://%s/' % (url_components.scheme,
-                                                 url_components.netloc)
-        elif self.target_platform.upper().find('TIZEN') >=0:
-            url_components = urlparse(self.web_driver.current_url)
-            self.test_prefix = '%s://%s/' % (url_components.scheme,
-                               url_components.netloc)
-            
-
-
-    def __initWebDriver(self):
-        from selenium import webdriver
-        self.TE_LOG.info('init web driver')
-        if self.web_driver:
-            self.web_driver.quit()
-            self.web_driver = None
-
-        test_app = test_ext = ''
-        driver_env = {}
-        try:
-            exec 'from testkitlite.capability.%s import initCapability' % self.target_platform
-            if self.target_platform.upper().find('TIZEN') >= 0:
-                test_app = self.appid
-                test_ext = self.debugip
-                capa = {'xwalkOptions': {'tizenAppId': test_app[1:-1], 'tizenDebuggerAddress': test_ext}}
-            elif self.target_platform.upper().find('ANDROID') >= 0:
-                test_app, test_ext = self.appid.split('/')
-                driver_env = initCapability(test_app, test_ext)
-                capa = driver_env['desired_capabilities']
-            driver_env = initCapability(test_app, test_ext)
-            self.test_prefix = driver_env['test_prefix']
-            self.web_driver = WebDriver(self.wd_url, capa)
-            url_compon = urlparse(self.web_driver.current_url)
-            self.__updateTestPrefix()
-            return True
-        except Exception, e:
-            if self.target_platform.upper().find('ANDROID') >= 0:
-                try:
-                    test_ext = test_ext.strip('.').replace('Activity', '')
-                    tmps = test_ext.split('_')
-                    actv_name = ''.join([it.capitalize() for it in tmps if it])
-                    test_ext = '.%sActivity' % actv_name
-                    self.TE_LOG.info('activity : %s' %test_ext)
-                    driver_env = initCapability(test_app, test_ext)
-                    self.web_driver = WebDriver(self.wd_url, driver_env['desired_capabilities'])
-                    self.__updateTestPrefix()
-                    return True
-                except Exception, e:
-                    try:
-                        test_app, test_ext = self.appid.split('/')
-                        test_ext = test_ext.replace('Activity', '')
-                        self.TE_LOG.info('activity : %s' %test_ext)
-                        driver_env = initCapability(test_app, test_ext)
-                        self.web_driver = WebDriver(self.wd_url, driver_env['desired_capabilities'])
-                        self.__updateTestPrefix()
-                        return True
-                    except Exception, e: 
-                        self.TE_LOG.error('Retry to init Web Driver get failed: %s' % e)
-                        return False
-            else:
-                self.TE_LOG.error('Init Web Driver failed: %s' % e)
-                return False
-
-    def __talkWithRunnerRecv(self):
-        try:
-            exe_data = self.exe_socket.recv(self.exe_socket_buff_size)
-            if exe_data is None:
-                return (None, None)
-            exe_json = json.loads(exe_data)
-            command = exe_json['COMMAND']
-            data = exe_json['DATA']
-        except Exception, e:
-            self.TE_LOG.debug('Receive data failed, %s' % e)
-            time.sleep(2)
-            return (None, None)
-        return (command, data)
-
-    def __talkWithRunnerSend(self, data=None):
-        try:
-            self.exe_socket.send(json.dumps(data))
-        except Exception, e:
-            self.TE_LOG.debug('Send data failed, %s' % e)
-            time.sleep(2)
-            return False
-        return True
-
-    def __initWebManualHarness(self):
-        if self.target_platform.upper().find('CHROME') >= 0:
-            self.web_driver.get('%s%s' % (self.test_prefix, MH_FILE))
-        else:
-            self.web_driver.get('%s/index.html' % self.test_prefix)
-
-        try:
-            harness_page_file = open(MH_FILE)
-            harness_page_raw = harness_page_file.read()
-            harness_page_file.close()
-        except Exception, e:
-            self.TE_LOG.debug('Read manual harness file failed: %s' % e)
-            return False
-        harness_page_raw = harness_page_raw.replace(
-            '\n', '').replace('"', '\\"').replace("'", "\\'")
-        self.web_driver.execute_script(
-            "document.write(\"%s\")" % harness_page_raw)
-        self.web_driver.execute_script("document.close()")
-        self.web_driver.execute_script("init_mh()")
-
-        return True
-
-    def __runWebManualTests(self):
-        if not self.__initWebManualHarness():
-            self.TE_LOG.error(
-                'Init web manual harness failed, exit from executer')
-            return False
-
-        case_num = len(self.tests_json['cases'])
-        i_case = 0
-        while True:
-            try:
-                if i_case >= (case_num - 1):
-                    i_case = case_num - 1
-                    self.web_driver.execute_script(
-                        "document.getElementById(\"forward-bt\").disabled=\"true\"")
-                else:
-                    self.web_driver.execute_script(
-                        "document.getElementById(\"forward-bt\").disabled=\"\"")
-
-                if i_case <= 0:
-                    i_case = 0
-                    self.web_driver.execute_script(
-                        "document.getElementById(\"back-bt\").disabled=\"true\"")
-                else:
-                    self.web_driver.execute_script(
-                        "document.getElementById(\"back-bt\").disabled=\"\"")
-
-                if self.set_type == REF_SET_TYPE:
-                    self.web_driver.execute_script(
-                        "document.getElementById(\"test-entry\").textContent=\"%s%s\"" % (self.test_prefix, self.tests_json['cases'][i_case]['entry']))
-                    self.web_driver.execute_script(
-                        "document.getElementById(\"refer-test-entry\").textContent=\"%s%s\"" % (self.test_prefix, self.tests_json['cases'][i_case]['refer_entry']))
-                    self.web_driver.execute_script(
-                        "document.getElementById(\"run-refer-test-bt\").style.display=\"\"")
-                    self.web_driver.execute_script(
-                        "document.getElementById(\"refer-test-entry-area\").style.display=\"\"")
-                elif self.set_type == JS_SET_TYPE:
-                    self.web_driver.execute_script(
-                        "document.getElementById(\"test-entry\").textContent=\"%s%s\"" % (self.test_prefix, self.tests_json['cases'][i_case]['entry']))
-                    self.web_driver.execute_script(
-                        "document.getElementById(\"run-refer-test-bt\").style.display=\"none\"")
-                    self.web_driver.execute_script(
-                        "document.getElementById(\"refer-test-entry-area\").style.display=\"none\"")
-
-                WebDriverWait(self.web_driver, 3600).until(lambda strdiff: self.web_driver.execute_script(
-                    "return document.getElementById(\"case-info-area\").className") != "READY")
-                i_case_status = self.web_driver.find_element_by_id(
-                    "case-info-area").get_attribute("class")
-                self.web_driver.execute_script(
-                    "document.getElementById(\"case-info-area\").className = \"READY\"")
-                if i_case_status in [STR_PASS, STR_FAIL, STR_BLOCK]:
-                    self.tests_json['cases'][i_case]['result'] = i_case_status
-                    i_case = i_case + 1
-                elif i_case_status == "FORWARD":
-                    i_case = i_case + 1
-                elif i_case_status == "BACK":
-                    i_case = i_case - 1
-                else:
-                    break
-            except Exception, e:
-                self.tests_json['cases'][i_case]['result'] = STR_BLOCK
-                self.TE_LOG.error("Run %s: failed: %s, exit from executer" %
-                                  (self.tests_json['cases'][i_case]['case_id'], e))
-                break
-
-    def __checkPageNotFound(self, page_url=None):
-        try:
-            if self.web_driver.current_url.find('data:text/html,chromewebdata') >= 0:
-                self.TE_LOG.debug("Page not found: %s" %
-                              self.web_driver.current_url)
-                return False
-            else:
-                return True
-        except Exception, e:
-            self.TE_LOG.error("Failed to get current url")
-            return False
-
-    def __runRefTests(self, haha=None, kkkk=None):
-        for i_case in self.tests_json['cases']:
-            with EXE_LOCK:
-                if self.exe_status == 'DONE':
-                    return False
-
-            i_case['start_at'] = time.strftime(
-                "%Y-%m-%d %H:%M:%S", time.localtime())
-            try:
-                i_case_timeout = i_case['timeout']
-            except Exception, e:
-                i_case_timeout = DEFAULT_TIMEOUT
-
-            i_page_url = '%s%s' % (self.test_prefix, i_case['entry'])
-            try:
-                self.web_driver.set_page_load_timeout(i_case_timeout)
-                self.web_driver.implicitly_wait(i_case['onload_delay'])
-                self.web_driver.get(i_page_url)
-            except Exception, e:
-                i_case['result'] = STR_BLOCK
-                self.TE_LOG.info(
-                    "Cases %s: blocked by %s" % (i_case['case_id'], e))
-                i_case['end_at'] = time.strftime(
-                    "%Y-%m-%d %H:%M:%S", time.localtime())
-                continue
-
-            if not self.__checkPageNotFound(i_page_url):
-                i_case['result'] = STR_BLOCK
-                self.TE_LOG.info(
-                    "Cases %s: blocked, page not found" % i_case['case_id'])
-                i_case['end_at'] = time.strftime(
-                    "%Y-%m-%d %H:%M:%S", time.localtime())
-                i_case['stdout'] = "page not found"
-                continue
-
-            try:
-                test01_md5 = hashlib.md5(
-                    self.web_driver.get_screenshot_as_base64()).hexdigest().upper()
-            except Exception, e:
-                i_case['result'] = STR_BLOCK
-                self.TE_LOG.info(
-                    "Cases %s: blocked by %s" % (i_case['case_id'], e))
-                i_case['end_at'] = time.strftime(
-                    "%Y-%m-%d %H:%M:%S", time.localtime())
-                continue
-
-            try:
-                i_refer_case_timeout = i_case['refer_timeout']
-            except Exception, e:
-                i_refer_case_timeout = DEFAULT_TIMEOUT
-
-            i_ref_page_url = '%s%s' % (self.test_prefix, i_case['refer_entry'])
-            try:
-                self.web_driver.set_page_load_timeout(i_refer_case_timeout)
-                self.web_driver.implicitly_wait(i_case['onload_delay'])
-                self.web_driver.get(i_ref_page_url)
-            except Exception, e:
-                i_case['result'] = STR_BLOCK
-                self.TE_LOG.info(
-                    "Cases %s: blocked by %s" % (i_case['case_id'], e))
-                i_case['end_at'] = time.strftime(
-                    "%Y-%m-%d %H:%M:%S", time.localtime())
-                continue
-
-            if not self.__checkPageNotFound(i_ref_page_url):
-                i_case['result'] = STR_BLOCK
-                self.TE_LOG.info(
-                    "Cases %s: blocked, ref page not found" % i_case['case_id'])
-                i_case['end_at'] = time.strftime(
-                    "%Y-%m-%d %H:%M:%S", time.localtime())
-                continue
-
-            try:
-                test02_md5 = hashlib.md5(
-                    self.web_driver.get_screenshot_as_base64()).hexdigest().upper()
-            except Exception, e:
-                i_case['result'] = STR_BLOCK
-                self.TE_LOG.info(
-                    "Cases %s: blocked by %s" % (i_case['case_id'], e))
-                i_case['end_at'] = time.strftime(
-                    "%Y-%m-%d %H:%M:%S", time.localtime())
-                continue
-
-            if test01_md5 == test02_md5:
-                i_case['result'] = STR_PASS
-            else:
-                i_case['result'] = STR_FAIL
-
-    def __getCaseIndex(self, url):
-        try:
-            value_pos = url.rindex('value')
-            if value_pos == -1:
-                return 0
-            eq_value = url[value_pos:]
-            eq_index = eq_value.index('=')
-            if eq_index == -1:
-                return 0
-            sub_value = eq_value[eq_index + 1:]
-            if sub_value is not None:
-                return sub_value
-        except Exception, e:
-            return 0
-
-    def __checkUrlSame(self, pre_url, url):
-        try:
-            if pre_url == '' or url == '':
-                return False
-
-            index_pre_url = pre_url.index('?')
-            if index_pre_url == -1:
-                return False
-            ab_pre_url = pre_url[0:index_pre_url]
-
-            index_url = url.index('?')
-            if index_url == -1:
-                return False
-            ab_url = url[0:index_url]
-            if ab_pre_url == ab_url:
-                return True
-            else:
-                return False
-        except Exception:
-            return False
-
-    def __runJSTests(self, haha=None, kkkk=None):
-        element_index = -1
-        for i_case in self.tests_json['cases']:
-            element_index += 1
-            with EXE_LOCK:
-                if self.exe_status == 'DONE':
-                    return False
-            i_case['start_at'] = time.strftime(
-                "%Y-%m-%d %H:%M:%S", time.localtime())
-            try:
-                sub_index = 0
-                url_equal = False
-                if element_index:
-                    pre_url = self.tests_json['cases'][
-                        element_index - 1]['entry']
-                    url_equal = self.__checkUrlSame(pre_url, i_case['entry'])
-                i_case_timeout = i_case['timeout']
-            except Exception, e:
-                i_case_timeout = DEFAULT_TIMEOUT
-            #self.test_prefix = '/home/app/.config/xwalk-service/applications/css3backgr.WebAPICSS3BackgroundsTests'
-            i_page_url = '%s%s' % (self.test_prefix, i_case['entry'])
-            try:
-                self.web_driver.set_page_load_timeout(i_case_timeout)
-                sub_index = self.__getCaseIndex(i_case['entry'])
-                if not url_equal:
-                    self.web_driver.implicitly_wait(i_case['onload_delay'])
-                    self.web_driver.get(i_page_url)
-            except Exception, e:
-                print 'exception'
-                i_case['result'] = STR_BLOCK
-                self.TE_LOG.debug(
-                    "Cases %s: blocked by %s" % (i_case['case_id'], e))
-                i_case['end_at'] = time.strftime(
-                    "%Y-%m-%d %H:%M:%S", time.localtime())
-                continue
-
-            if not self.__checkPageNotFound(i_page_url):
-                i_case['result'] = STR_BLOCK
-                self.TE_LOG.info(
-                    "Cases %s: blocked, page not found" % i_case['case_id'])
-                i_case['end_at'] = time.strftime(
-                    "%Y-%m-%d %H:%M:%S", time.localtime())
-                i_case['stdout'] = "page not found"
-                continue
-
-            try:
-                if sub_index:
-                    sub_index = int(sub_index) - 1
-                table = self.web_driver.find_element_by_xpath(
-                    "//table[@id='results']")
-                tr = table.find_elements_by_xpath(".//tbody/tr")[sub_index]
-                sub_result = tr.find_elements_by_xpath(".//td")[0].text
-                error_message = tr.find_elements_by_xpath(".//td")[2].text
-                if sub_result.upper() == 'PASS':
-                    i_case['result'] = STR_PASS
-                elif sub_result.upper() == 'FAIL':
-                    i_case['result'] = STR_FAIL
-                    i_case['stdout'] = error_message
-                else:
-                    i_case['result'] = STR_BLOCK
-                i_case['end_at'] = time.strftime(
-                    "%Y-%m-%d %H:%M:%S", time.localtime())
-            except Exception, e:
-                try:
-                    result = self.web_driver.find_element_by_class_name('pass')
-                except:
-                    i_case['result'] = STR_FAIL
-                else:    
-                    if result.text == STR_FAIL:
-                        i_case['result'] = STR_FAIL
-                    elif result.text == STR_PASS:
-                        i_case['result'] = STR_PASS
-                    else:
-                        i_case['result'] = STR_BLOCK
-                i_case['end_at'] = time.strftime(
-                    "%Y-%m-%d %H:%M:%S", time.localtime())
-
-    def __runScriptTests(self, haha=None, kkkk=None):
-        for i_case in self.tests_json['cases']:
-            with EXE_LOCK:
-                if self.exe_status == 'DONE':
-                    return False
-            try:
-                i_case_timeout = int(i_case['timeout'])
-            except Exception, e:
-                i_case_timeout = DEFAULT_TIMEOUT
-
-            try:
-                i_case_proc = subprocess.Popen(
-                    args="%s" % i_case['entry'], shell=True)
-                i_case_pre_time = time.time()
-                while True:
-                    i_case_exit_code = i_case_proc.poll()
-                    i_case_elapsed_time = time.time() - i_case_pre_time
-                    if i_case_exit_code == None:
-                        if i_case_elapsed_time >= i_case_timeout:
-                            tr_utils.KillAllProcesses(ppid=i_case_proc.pid)
-                            i_case['result'] = STR_BLOCK
-                            self.TE_LOG.debug(
-                                "Run %s timeout" % i_case['case_id'])
-                            break
-                    elif str(i_case_exit_code) == str(i_case['expected_result']):
-                        i_case['result'] = STR_PASS
-                        break
-                    else:
-                        i_case['result'] = STR_FAIL
-                        break
-                    time.sleep(1)
-            except Exception, e:
-                i_case['result'] = STR_BLOCK
-                self.TE_LOG.error(
-                    "Run %s: failed: %s, exit from executer" % (i_case['case_id'], e))
-                break
-
-    def __runTests(self, haha=None, kkkk=None):
-        for i_case in self.tests_json['cases']:
-            i_case['result'] = STR_NOTRUN
-        if self.set_exetype == "manual":
-            self.__runWebManualTests()
-        elif self.set_type == REF_SET_TYPE:
-            self.__runRefTests()
-        elif self.set_type == JS_SET_TYPE:
-            self.__runJSTests()
-        elif self.set_type == SCRIPT_SET_TYPE:
-            self.__runScriptTests()
-
-        with EXE_LOCK:
-            self.exe_status = 'DONE'
-
-        return True
-
-    def runTestsExecuter(self):
-        if not self.set_type in [REF_SET_TYPE, JS_SET_TYPE, SCRIPT_SET_TYPE]:
-            self.TE_LOG.error(
-                "Unsupported set type %s, exit from executer" % self.set_type)
-            return False
-
-        if self.set_type in [REF_SET_TYPE, JS_SET_TYPE]:
-            try:
-                if not self.__initWebDriver():
-                    if self.web_driver:
-                        self.web_driver.quit()
-                        self.web_driver = None
-                    self.TE_LOG.error("Exit from executer")
-                    return False
-            except Exception, e:
-                if self.web_driver:
-                    self.web_driver.quit()
-                self.TE_LOG.error(
-                    "Init Web Driver failed: %s, exit from executer" % e)
-                return False
-
-        while True:
-            if not tr_utils.pidExists(self.runner_proc):
-                if self.set_type in [REF_SET_TYPE, JS_SET_TYPE]:
-                    if self.web_driver:
-                        self.web_driver.quit()
-                        self.web_driver = None
-                self.TE_LOG.debug('Can not find runner, exit from executer')
-                return False
-            exe_command, exe_data = self.__talkWithRunnerRecv()
-            if exe_command == 'GET_STATUS':
-                with EXE_LOCK:
-                    self.__talkWithRunnerSend(
-                        {'COMMAND': exe_command, 'DATA': self.exe_status})
-            elif exe_command == 'TESTS':
-                with EXE_LOCK:
-                    self.exe_status = 'RUNNING'
-                self.tests_json = exe_data['data']
-                self.exe_thread = thread.start_new_thread(
-                    self.__runTests, (1, 2))
-                self.__talkWithRunnerSend(
-                    {'COMMAND': exe_command, 'DATA': 'OK'})
-            elif exe_command == 'GET_RESULTS':
-                if not self.__talkWithRunnerSend({'COMMAND': exe_command, 'DATA': self.tests_json}):
-                    continue
-                with EXE_LOCK:
-                    self.exe_status = 'READY'
-            elif exe_command == 'TERMINAL':
-                if self.web_driver:
-                    self.web_driver.quit()
-                    self.web_driver = None
-                with EXE_LOCK:
-                    self.exe_status = 'DONE'
-                self.__talkWithRunnerSend(
-                    {'COMMAND': exe_command, 'DATA': 'OK'})
-            else:
-                continue
-
-    def EndExecuter(self):
-        if self.web_driver:
-            self.web_driver.quit()
-            self.web_driver = None
-            return True
diff --git a/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite2.0/testkitlite/engines/webdriver.py b/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite2.0/testkitlite/engines/webdriver.py
deleted file mode 100755 (executable)
index ef8ec2b..0000000
+++ /dev/null
@@ -1,338 +0,0 @@
-
-#!/usr/bin/python
-#
-# Copyright (C) 2012 Intel Corporation
-#
-# 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
-# of the License, or (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-#
-# Authors:
-#           Chengtao,Liu  <chengtaox.liu@intel.com>
-""" The implementation of default test engine"""
-import os
-import time
-import sys
-import json
-import socket
-import shutil
-import uuid
-import threading
-import re
-import ConfigParser
-from datetime import datetime
-from tempfile import mktemp
-import xml.etree.ElementTree as etree
-from testkitlite.engines import test_executer
-from shutil import copyfile
-from testkitlite.util import tr_utils
-from testkitlite.util.log import LOGGER
-from testkitlite.util.result import TestSetResut
-
-EXECUTER_POLLING_INTERVAL = 2
-CNT_RETRY = 10
-
-
-def initExecuter(test_env=None):
-    TE = test_executer.TestExecuter(test_env)
-    TE.runTestsExecuter()
-
-
-def _run_webdrvier_test(self, cases, result_obj):
-    """
-        process the execution for web api test
-        may be splitted to serveral blocks,
-        with the unit size defined by block_size
-    """
-    case_count = len(cases)
-    blknum = 0
-    if case_count % self.opts['block_size'] == 0:
-        blknum = case_count / self.opts['block_size']
-    else:
-        blknum = case_count / self.opts['block_size'] + 1
-
-    idx = 1
-    test_set_queues = []
-    while idx <= blknum:
-        block_data = {}
-        start = (idx - 1) * self.opts['block_size']
-        if idx == blknum:
-            end = case_count
-        else:
-            end = idx * self.opts['block_size']
-        block_data = cases[start:end]
-        for tc in block_data:
-            tc.pop('purpose')
-        test_set_queues.append({'cases': block_data})
-        idx += 1
-
-    self.testcases = []
-    get_result = False
-    abort_from_set = False
-
-    for section_json in test_set_queues:
-        if result_obj.get_status() == 1:
-            break
-        LOGGER.info("Load a new section for testing, please wait ...")
-        get_result = False
-        while True:
-            if result_obj.get_status() == 1:
-                break
-            exe_command, exe_data = self.talkWithEXE(
-                'GET_STATUS', '', 0)
-            if exe_command == 'GET_STATUS':
-                if exe_data == 'READY':
-                    exe_command, exe_data = self.talkWithEXE(
-                        'TESTS', {'data': section_json}, 0)
-                    if exe_command != 'TESTS' or exe_data != 'OK':
-                        LOGGER.debug('Send tests failed')
-                        result_obj.set_status(1)
-                        break
-                    continue
-                elif exe_data == 'RUNNING':
-                    time.sleep(EXECUTER_POLLING_INTERVAL)
-                    continue
-                elif exe_data == 'DONE':
-                    exe_command, exe_data = self.talkWithEXE(
-                        'GET_RESULTS', '', 0)
-                    if exe_data is not None and len(exe_data):
-                        result_obj.extend_result(exe_data['cases'])
-                    get_result = True
-                    break
-                elif exe_data == 'ERROR':
-                    LOGGER.error('Executer got error')
-                    get_result = True
-                    result_obj.set_status(1)
-                    break
-            else:
-                abort_from_set = True
-                result_obj.set_status(1)
-                break
-        if abort_from_set:
-            LOGGER.error('Exit from current set execution')
-            return
-    ### normally exit
-    result_obj.set_status(1)
-    exe_command, exe_data = self.talkWithEXE(
-        'TERMINAL', '', 1)
-
-
-class TestWorker(object):
-
-    """Test executor for testkit-lite"""
-
-    def __init__(self, conn):
-        super(TestWorker, self).__init__()
-        self.conn = conn
-        self.server_url = None
-        self.result_obj = None
-        self.opts = dict({'block_size': 10,
-                          'test_type': None,
-                          'exe_socket_buff_size': 20480,
-                          'runner_proc': os.getpid(),
-                          })
-        self.testcases = []
-        self.runner_proc = self.opts['runner_proc']
-        self.exe_socket_file = os.path.expanduser(
-            "~") + os.sep + str(self.runner_proc) + '.socket'
-        self.exe_proc = None
-        self.exe_socket = None
-        self.exe_socket_connect = None
-
-    def init_test(self, params):
-        """init the test envrionment"""
-        self.opts['testset_name'] = params.get('testset-name', '')
-        self.opts['suite_name'] = params.get('testsuite-name', '')
-        self.opts['debug_log_base'] = params.get("debug-log-base", '')
-        self.opts['wd_url'] = params.get("wd_url", '')
-        self.opts['target_platform'] = params.get("target_platform", '')
-        self.opts['set_type'] = params.get("set_type", '')
-        self.opts['set_exetype'] = params.get("set_exetype", '')
-        self.opts['session_dir'] = params.get("session_dir", '')
-        self.opts['log_debug'] = params.get("log_debug", '')
-        self.opts['exe_socket_file'] = self.exe_socket_file
-        test_launcher = params.get('test-launcher', None) or 'xwalk'
-        test_extension = params.get('test-extension', None)
-        test_widget = params.get('test-widget', None)
-        #kill stub
-        self.conn.kill_stub()
-        # get app id from commodule
-        _opts = self.conn.get_launcher_opt(test_launcher, test_extension, test_widget, self.opts['suite_name'], self.opts['testset_name'])
-        self.opts['appid'] = _opts.get("test_app_id", '') if _opts else ''
-        #self.opts['debugip'] = params.get("debugip", '')
-        self.opts['debugip'] = os.environ.get("wd-debugip", '')
-
-        if not self.__exitExecuter():
-            LOGGER.debug('__exitExecuter failed')
-            return None
-
-        if self.__initExecuterSocket():
-            time.sleep(EXECUTER_POLLING_INTERVAL)
-            if (not self.exe_proc) or (not tr_utils.pidExists(self.exe_proc)):
-                LOGGER.debug('Executer not existing')
-                return None
-            else:
-                timecnt = 0
-                blaunched = False
-                while timecnt < CNT_RETRY:
-                    exe_command, exe_data = self.talkWithEXE(
-                        'GET_STATUS', '', 0)
-                    if exe_command == 'GET_STATUS':
-                        if exe_data == 'READY':
-                            blaunched = True
-                            break
-                    else:
-                        timecnt += 1
-                if not blaunched:
-                    LOGGER.info("[ launch webdriver failed! ]")
-                    return None
-                else:
-                    return str(uuid.uuid1())
-
-    def __initExecuter(self):
-        try:
-            new_proc = os.fork()
-
-            if new_proc == 0:
-                initExecuter(self.opts)
-                sys.exit(0)
-            else:
-                self.exe_proc = new_proc
-                LOGGER.debug('Runner Proc: %s, Executer Proc: %s' %
-                          (self.runner_proc, self.exe_proc))
-                return True
-        except OSError, e:
-            return False
-
-    def __exitExecuter(self):
-        if self.exe_socket:
-            self.exe_socket_connect.close()
-            self.exe_socket.close()
-        self.exe_socket = None
-        try:
-            os.remove(self.exe_socket_file)
-        except Exception, e:
-            pass
-
-        if self.exe_proc and tr_utils.pidExists(self.exe_proc):
-            if not tr_utils.KillAllProcesses(self.exe_proc):
-                return False
-        self.exe_proc = None
-        return True
-
-    def __initExecuterSocket(self):
-        if not self.exe_socket:
-            try:
-                os.remove(self.exe_socket_file)
-            except OSError:
-                pass
-            try:
-                self.exe_socket = socket.socket(
-                    socket.AF_UNIX, socket.SOCK_STREAM)
-                self.exe_socket.bind(self.exe_socket_file)
-                self.exe_socket.listen(1)
-            except Exception, e:
-                LOGGER.error('Setup socket failed')
-                return False
-            if not self.__initExecuter():
-                LOGGER.error('Init Executer failed')
-                if self.exe_proc and tr_utils.pidExists(self.exe_proc):
-                    killProcGroup(self.exe_proc)
-                self.exe_proc = None
-                self.exe_socket.close()
-                self.exe_socket = None
-                return False
-            self.exe_socket_connect, addr = self.exe_socket.accept()
-        return True
-
-    def talkWithEXE(self, command=None, data=None, recv_timeout=None):
-        # LOGGER.debug('Start send: %s, %s' % (command, data))
-        try:
-            if self.exe_socket is None:
-                return (None, None)
-            self.exe_socket.settimeout(recv_timeout)
-            self.exe_socket_connect.send(
-                json.dumps({'COMMAND': command, 'DATA': data}))
-            exe_data = self.exe_socket_connect.recv(
-                self.opts['exe_socket_buff_size'])
-            if not exe_data:
-                return (None, None)
-            exe_json = json.loads(exe_data)
-            if exe_json['COMMAND']:
-                command = exe_json['COMMAND']
-            if exe_json['DATA']:
-                data = exe_json['DATA']
-        except Exception, e:
-            LOGGER.error('Talk with executer failed: %s, kill executer' % e)
-            self.__exitExecuter()
-            return (None, None)
-
-        return (command, data)
-
-    def __saveSectionToSetJSON(self, testcases, exe_data):
-        if exe_data:
-            for i_case in exe_data['cases']:
-                testcases.append(i_case)
-
-        return testcases
-
-    def run_test(self, sessionid, test_set):
-        """
-            process the execution for a test set
-        """
-        if sessionid is None:
-            return False
-
-        if not "cases" in test_set:
-            return False
-
-        if len(test_set["cases"]) == 0:
-            return False
-
-        self.result_obj = TestSetResut(
-            self.opts['suite_name'], self.opts['testset_name'])
-        cases, exetype, ctype = test_set[
-            "cases"], test_set["exetype"], test_set["type"]
-
-        self.opts['async_th'] = threading.Thread(
-            target=_run_webdrvier_test,
-            args=(self, cases, self.result_obj)
-        )
-        self.opts['async_th'].start()
-        return True
-
-    def get_test_status(self, sessionid):
-        """poll the test task status"""
-        if sessionid is None:
-            return None
-        result = {}
-        result["msg"] = []
-        result["finished"] = str(self.result_obj.get_status())
-        return result
-
-    def get_test_result(self, sessionid):
-        """get the test result for a test set """
-        result = {}
-        if sessionid is None:
-            return result
-
-        result = self.result_obj.get_result()
-        return result
-
-    def finalize_test(self, sessionid):
-        """clear the test stub and related resources"""
-        if sessionid is None:
-            return False
-
-        if self.result_obj is not None:
-            self.result_obj.set_status(1)
-
-        # remove socketfile
-
-        return True
diff --git a/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite2.0/testkitlite/util/CONFIG b/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite2.0/testkitlite/util/CONFIG
deleted file mode 100755 (executable)
index e6b6d74..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-[LOGGING]
-log_level=INFO
-
-[EXTENSION]
-crosswalk=--external-extensions-path=/usr/lib/tizen-extensions-crosswalk
-
-[TIZEN]
-tizen_user=app
diff --git a/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite2.0/testkitlite/util/Makefile.am b/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite2.0/testkitlite/util/Makefile.am
deleted file mode 100755 (executable)
index dd646f7..0000000
+++ /dev/null
@@ -1,18 +0,0 @@
-# Copyright (C) 2012 Intel Corporation
-# 
-# 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
-# of the License, or (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-#
-# Authors:
-#              Zhang, Huihui <huihuix.zhang@intel.com>
-#              Wendong,Sui  <weidongx.sun@intel.com>
-
-testkitliteutildir = /usr/lib/python2.7/dist-packages/testkitlite/util
-dist_testkitliteutil_SCRIPTS = *.py
diff --git a/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite2.0/testkitlite/util/__init__.py b/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite2.0/testkitlite/util/__init__.py
deleted file mode 100755 (executable)
index 8b13789..0000000
+++ /dev/null
@@ -1 +0,0 @@
-
diff --git a/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite2.0/testkitlite/util/autoexec.py b/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite2.0/testkitlite/util/autoexec.py
deleted file mode 100755 (executable)
index 0daa44a..0000000
+++ /dev/null
@@ -1,127 +0,0 @@
-#!/usr/bin/python
-#
-# Copyright (C) 2012 Intel Corporation
-#
-# 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
-# of the License, or (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-#
-# Authors:
-#              Liu,chengtao <chengtaox.liu@intel.com>
-""" The shell command executor module"""
-
-import os
-import sys
-import time
-import subprocess
-
-from testkitlite.util.killall import killall
-from testkitlite.util.str2 import str2str
-
-
-def shell_command(cmd, timeout=15):
-    """shell communication for quick return in sync mode"""
-    proc = subprocess.Popen(cmd,
-                            shell=True,
-                            stdout=subprocess.PIPE,
-                            stderr=subprocess.PIPE)
-    time_cnt = 0
-    exit_code = None
-    result = []
-    while time_cnt < timeout:
-        exit_code = proc.poll()
-        if not exit_code is None:
-            break
-        time_cnt += 0.2
-        time.sleep(0.2)
-
-    if exit_code is None:
-        killall(proc.pid)
-        exit_code = -1
-        result = []
-    elif not cmd.endswith('&'):
-        while True:
-            line = proc.stdout.readline()
-            if not line or line.find('daemon started') >= 0:
-                break
-            result.append(line)
-    return [exit_code, result]
-
-
-def shell_command_ext(cmd="",
-                      timeout=None,
-                      boutput=False,
-                      stdout_file=None,
-                      stderr_file=None,
-                      callbk=None):
-    """shell executor, return [exitcode, stdout/stderr]
-       timeout: None means unlimited timeout
-       boutput: specify whether print output during the command running
-    """
-    if stdout_file is None:
-        stdout_file = os.path.expanduser("~") + os.sep + "shell_stdout"
-
-    if stderr_file is None:
-        stderr_file = os.path.expanduser("~") + os.sep + "shell_stderr"
-
-    exit_code = None
-    wbuffile1 = file(stdout_file, "w")
-    wbuffile2 = file(stderr_file, "w")
-    rbuffile1 = file(stdout_file, "r")
-    rbuffile2 = file(stderr_file, "r")
-    cmd_open = subprocess.Popen(args=cmd,
-                                shell=True,
-                                stdout=wbuffile1,
-                                stderr=wbuffile2)
-    rbuffile1.seek(0)
-    rbuffile2.seek(0)
-
-    def print_log():
-        """print the stdout to terminate"""
-        if callbk and callable(callbk):
-            callbk(rbuffile1.read())
-        else:
-            sys.stdout.write(rbuffile1.read())
-            sys.stdout.write(rbuffile2.read())
-            sys.stdout.flush()
-
-    while True:
-        exit_code = cmd_open.poll()
-        if exit_code is not None:
-            break
-        if boutput:
-            print_log()
-        if timeout is not None:
-            timeout -= 0.1
-            if timeout <= 0:
-                exit_code = "timeout"
-                killall(cmd_open.pid)
-                time.sleep(3)
-                break
-        time.sleep(0.1)
-
-    if boutput:
-        print_log()
-    rbuffile1.seek(0)
-    rbuffile2.seek(0)
-    stdout_log = str2str(rbuffile1.read())
-    stderr_log = str2str(rbuffile2.read())
-    if 'returncode=' in stdout_log:
-        index = stdout_log.find('returncode=') + 11
-        exit_code = str(stdout_log[index:]).strip('\r\n')
-    stdout_log = '<![CDATA[' + stdout_log + ']]>'
-    stderr_log = '<![CDATA[' + stderr_log + ']]>'
-
-    wbuffile1.close()
-    wbuffile2.close()
-    rbuffile1.close()
-    rbuffile2.close()
-    os.remove(stdout_file)
-    os.remove(stderr_file)
-    return [exit_code, stdout_log, stderr_log]
diff --git a/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite2.0/testkitlite/util/config.py b/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite2.0/testkitlite/util/config.py
deleted file mode 100755 (executable)
index d06f14c..0000000
+++ /dev/null
@@ -1,45 +0,0 @@
-#!/usr/bin/python
-#
-# Copyright (C) 2013 Intel Corporation
-#
-# 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
-# of the License, or (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-#
-# Authors:
-#              Liu,chengtao <liux.chengtao@intel.com>
-"""General Config Class"""
-
-import os
-import ConfigParser
-from ConfigParser import NoOptionError, NoSectionError
-
-CONFIG_FILE = "/opt/testkit/lite3.0/testkitlite/commodule/CONFIG"
-cfg = ConfigParser.ConfigParser()
-if os.path.exists(CONFIG_FILE):
-    cfg.read(CONFIG_FILE)
-else:
-    cfg.read(os.path.join(os.getcwd(), "CONFIG"))
-
-
-class Config:
-
-    LOG_LEVEL = cfg.get('LOGGING', 'log_level')
-
-    @staticmethod
-    def get_extension(extension_name):
-        ret = ""
-        try:
-            if extension_name is not None:
-                ret = cfg.get('EXTENSION', extension_name)
-        except (NoOptionError, NoSectionError) as error:
-            pass
-        except IOError as error:
-            pass
-        return ret
diff --git a/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite2.0/testkitlite/util/connector.py b/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite2.0/testkitlite/util/connector.py
deleted file mode 100755 (executable)
index 3ab1e83..0000000
+++ /dev/null
@@ -1,42 +0,0 @@
-#!/usr/bin/python
-#
-# Copyright (C) 2013 Intel Corporation
-#
-# 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
-# of the License, or (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-#
-# Authors:
-#              Liu,chengtao <chengtaox.liu@intel.com>
-"""Test connector for test instance and target instance"""
-
-from testkitlite.util.log import LOGGER
-
-
-class ConnectorBuilder:
-
-    """Communication module for test host and test remote"""
-
-    def __init__(self, config):
-        self.conn = None
-        if "commodule" in config:
-            try:
-                exec "from testkitlite.commodule.%s import get_target_conn" % config[
-                    "commodule"]
-                device_no = config.get('deviceid', None)
-                if device_no is not None:
-                    self.conn = get_target_conn(device_no)
-                else:
-                    self.conn = get_target_conn()
-            except Exception as error:
-                LOGGER.error("[ Error: Initialize commodule failed: '%s']\n" % error)
-
-    def get_connector(self):
-        """list the handler instance"""
-        return self.conn
diff --git a/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite2.0/testkitlite/util/errors.py b/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite2.0/testkitlite/util/errors.py
deleted file mode 100755 (executable)
index 7475dc7..0000000
+++ /dev/null
@@ -1,50 +0,0 @@
-#!/usr/bin/python
-#
-# Copyright (C) 2013 Intel Corporation
-#
-# 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
-# of the License, or (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-#
-# Authors:
-#              Liu,chengtao <liux.chengtao@intel.com>
-""" The definition of exceptions"""
-
-
-class InvalidDeviceException(Exception):
-    """ 
-    Device_Id not defined / Invalid Exception
-    """
-    __data = ""
-    def __init__(self, data):
-        self.__data = data
-
-    def __str__(self):
-        return self.__data
-
-class TestCaseNotFoundException(Exception):
-    """
-    Test case not found Exception
-    """
-    __data = ""
-    def __init__(self, data):
-        self.__data = data
-
-    def __str__(self):
-        return self.__data
-
-class TestEngineException(Exception):
-    """
-    Test case not found Exception
-    """
-    def __init__(self, name):
-        self.__engine = name
-
-    def __str__(self):
-        return "Failed to load test engine '%s'" % self.__engine
\ No newline at end of file
diff --git a/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite2.0/testkitlite/util/httprequest.py b/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite2.0/testkitlite/util/httprequest.py
deleted file mode 100755 (executable)
index b5996c1..0000000
+++ /dev/null
@@ -1,58 +0,0 @@
-#!/usr/bin/python
-#
-# Copyright (C) 2012 Intel Corporation
-#
-# 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
-# of the License, or (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-#
-# Authors:
-#           Liu,chengtao <chengtaox.liu@intel.com>
-""" The http request process module"""
-
-import json
-from testkitlite.util.log import LOGGER
-
-try:
-    import requests
-except ImportError, err:
-    LOGGER.info("Failed to import 'requests' module, please check your installation:")
-    LOGGER.info("  You can use 'sudo pip install requests' to install the module!")
-    raise ImportError
-
-def get_url(baseurl, api):
-    """get full url string"""
-    return "%s%s" % (baseurl, api)
-
-
-def http_request(url, rtype="POST", data=None, time_out=30):
-    """
-    http request to the device http server
-    """
-    result = None
-    if rtype == "POST":
-        headers = {'content-type': 'application/json'}
-        try:
-            ret = requests.post(url, data=json.dumps(
-                data), headers=headers, timeout=time_out)
-
-            if ret:
-                result = ret.json()
-        except Exception as error:
-            LOGGER.error(str(error))
-            pass
-    elif rtype == "GET":
-        try:
-            ret = requests.get(url, params=data, timeout=time_out)
-            if ret:
-                result = ret.json()
-        except Exception as error:
-            LOGGER.error(str(error))
-            pass
-    return result
diff --git a/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite2.0/testkitlite/util/killall.py b/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite2.0/testkitlite/util/killall.py
deleted file mode 100755 (executable)
index ac54b01..0000000
+++ /dev/null
@@ -1,70 +0,0 @@
-#!/usr/bin/python
-#
-# Copyright (C) 2012 Intel Corporation
-#
-# 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
-# of the License, or (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-#
-# Authors:
-#              Zhang, Huihui <huihuix.zhang@intel.com>
-#              Wendong,Sui  <weidongx.sun@intel.com>
-""" The process kill for os"""
-
-import os
-import platform
-import signal
-import re
-import ctypes
-
-
-def killall(ppid):
-    """Kill all children process by parent process ID"""
-    os_ver = platform.system()
-    try:
-        if os_ver == "Linux" or os_ver == "Darwin":
-            ppid = str(ppid)
-            pidgrp = []
-            if not ppid.isdigit():
-                return
-            def getchildpids(ppid):
-                """Return a list of children process"""
-                command = "ps -ef | awk '{if ($3 == %s) print $2;}'" % str(
-                    ppid)
-                pids = os.popen(command).read()
-                pids = pids.split()
-                return pids
-
-            pidgrp.extend(getchildpids(ppid))
-            for pid in pidgrp:
-                pidgrp.extend(getchildpids(pid))
-            # Insert self process ID to PID group list
-            pidgrp.insert(0, ppid)
-            while len(pidgrp) > 0:
-                pid = pidgrp.pop()
-                try:
-                    os.kill(int(pid), signal.SIGKILL)
-                except OSError, error:
-                    pattern = re.compile('No such process')
-                    match = pattern.search(str(error))
-                    if not match:
-                        print "[ Error: fail to kill pid: %s," \
-                            " error: %s ]\n" % (int(pid), error)
-        # kill for windows platform
-        else:
-            kernel32 = ctypes.windll.kernel32
-            handle = kernel32.OpenProcess(1, 0, int(ppid))
-            kernel32.TerminateProcess(handle, 0)
-    except OSError, error:
-        pattern = re.compile('No such process')
-        match = pattern.search(str(error))
-        if not match:
-            print "[ Error: fail to kill pid: %s, error: %s ]\n" \
-                % (int(ppid), error)
-    return None
diff --git a/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite2.0/testkitlite/util/log.py b/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite2.0/testkitlite/util/log.py
deleted file mode 100755 (executable)
index fe98dbd..0000000
+++ /dev/null
@@ -1,98 +0,0 @@
-#!/usr/bin/python
-#
-# Copyright (C) 2013 Intel Corporation
-#
-# 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
-# of the License, or (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-#
-# Authors:
-#              Liu,chengtao <liux.chengtao@intel.com>
-"""General Implementation"""
-
-import threading
-import logging
-import logging.handlers
-import sys
-import os
-
-# logger levels
-LEVELS = {"CRITICAL": 50,
-          "ERROR": 40,
-          "WARNING": 30,
-          "INFO": 20,
-          "DEBUG": 10,
-          "NOTSET": 0
-          }
-
-
-class Logger:
-
-    """General Logger Class"""
-    _instance = None
-    _mutex = threading.Lock()
-
-    def __init__(self, level="DEBUG", format_str="%(message)s"):
-        """Generate root logger"""
-        self._logger = logging.getLogger("TCT")
-        self._level = LEVELS[level]
-        self._logger.setLevel(LEVELS[level])
-        self._formatter = logging.Formatter(format_str)
-        self.add_print_logger()
-
-    def add_print_logger(self, level="INFO"):
-        """Generate console writer [StreamHandler]"""
-        writer = logging.StreamHandler(sys.stdout)
-        writer.setLevel(LEVELS[level])
-        writer.setFormatter(self._formatter)
-        self._logger.addHandler(writer)
-
-    @staticmethod
-    def get_logger(level="DEBUG", format_str="%(message)s"):
-        """sinlgeton of Logger"""
-        if Logger._instance is None:
-            Logger._mutex.acquire()
-            if Logger._instance is None:
-                Logger._instance = Logger(level, format_str)
-            else:
-                pass
-            Logger._mutex.release()
-        return Logger._instance
-
-    def debug(self, msg):
-        """debug level message"""
-        if msg is not None:
-            sys.stdout.write(msg + '\r\n')
-            sys.stdout.flush()
-
-    def info(self, msg):
-        """info level message"""
-        if msg is not None:
-            sys.stdout.write(msg + '\r\n')
-            sys.stdout.flush()
-
-    def warning(self, msg):
-        """warning level message"""
-        if msg is not None:
-            self._logger.warning(msg)
-
-    def error(self, msg):
-        """error level message"""
-        if msg is not None:
-            sys.stdout.write(msg + '\r\n')
-            sys.stdout.flush()
-
-    def critical(self, msg):
-        """critical level message"""
-        if msg is not None:
-            self._logger.critical(msg)
-
-from .config import Config
-
-LOGGER = Logger.get_logger(level=Config.LOG_LEVEL)
diff --git a/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite2.0/testkitlite/util/process.py b/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite2.0/testkitlite/util/process.py
deleted file mode 100755 (executable)
index 5000bae..0000000
+++ /dev/null
@@ -1,99 +0,0 @@
-#!/usr/bin/python
-#
-# Copyright (C) 2012 Intel Corporation
-#
-# 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
-# of the License, or (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-#
-# Authors:
-#              Yuanyuan,Zou  <yuanyuanx.zou@intel.com>
-
-""" kill testkit-lite """
-import os
-import re
-import platform
-if not platform.system() == "Windows":
-    import dbus
-
-import time
-from testkitlite.util.log import LOGGER
-from testkitlite.util.killall import killall
-from testkitlite.util.autoexec import shell_command
-
-DEVICE_DBUS = "testkit-lite-dbus"
-DEVICE_WHITE_LIST = ['localhost', '127.0.0.1']
-
-
-def kill_testkit_lite(pid_file):
-    """ kill testkit lite"""
-    try:
-        with open(pid_file, "r") as pidfile:
-            pid = pidfile.readline().rstrip("\n")
-            if pid:
-                killall(pid)
-    except IOError as error:
-        pattern = re.compile('No such file or directory|No such process')
-        match = pattern.search(str(error))
-        if not match:
-            LOGGER.info("[ Error: fail to kill existing testkit-lite, "\
-                "error: %s ]\n" % error)
-    return None
-
-def launch_dbus_deamon():
-    exit_code, ret = shell_command(DEVICE_DBUS + '&')
-    time.sleep(3)
-
-def get_device_lock(device_id):
-    if not OS_VER == "Windows":
-        LOGGER.debug("method using dbus is not implemented on windows")
-        return True
-
-    """ set device lock for current testkit lite"""
-    if device_id in DEVICE_WHITE_LIST:
-        return True
-    bus = dbus.SessionBus()
-    try:
-        device_service = bus.get_object('com.intel.testkit', '/com/intel/testkit/devices')
-    except Exception as error:
-        launch_dbus_deamon()
-        device_service = bus.get_object('com.intel.testkit', '/com/intel/testkit/devices')
-
-    try:
-        ret = device_service.addDevice(device_id)
-        return bool(ret)
-    except Exception as error:
-        return False
-
-def release_device_lock(device_id):
-    if not OS_VER == "Linux" and not OS_VER == "Darwin":
-        LOGGER.debug("method using dbus is not implemented on windows")
-        return True
-
-    """ kill testkit lite"""
-    if device_id in DEVICE_WHITE_LIST:
-        return True
-    bus = dbus.SessionBus()
-    try:
-        device_service = bus.get_object('com.intel.testkit', '/com/intel/testkit/devices')
-        ret = device_service.removeDevice(device_id)
-        return True
-    except Exception as error:
-        return False
-
-def clean_testxml(testxmls,remote_test):
-    """clean all test xmls"""
-    if remote_test:
-        EXISTS = os.path.exists
-        for testxml in testxmls:
-            if EXISTS(testxml):
-                fd_name = os.path.dirname(testxml)
-                os.remove(testxml)
-                os.rmdir(fd_name)
-    return None
diff --git a/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite2.0/testkitlite/util/result.py b/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite2.0/testkitlite/util/result.py
deleted file mode 100755 (executable)
index 1f9f0ba..0000000
+++ /dev/null
@@ -1,76 +0,0 @@
-#!/usr/bin/python
-#
-# Copyright (C) 2012 Intel Corporation
-#
-# 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
-# of the License, or (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-#
-# Authors:
-#           Chengtao,Liu  <chengtaox.liu@intel.com>
-""" The implementation test result"""
-
-import threading
-from testkitlite.util.log import LOGGER
-from testkitlite.util.str2 import str2str
-
-
-class TestSetResut(object):
-
-    """ test result """
-
-    _progress = "execute case: %s # %s...(%s)"
-    _mutex = threading.Lock()
-
-    def __init__(self, testsuite_name="", testset_name=""):
-        self._suite_name = testsuite_name
-        self._set_name = testset_name
-        self._result = {"cases": []}
-        self._finished = 0
-
-    def set_status(self, flag=0):
-        """set finished tag"""
-        self._mutex.acquire()
-        self._finished = flag
-        self._mutex.release()
-
-    def get_status(self):
-        """return finished tag"""
-        self._mutex.acquire()
-        flag = self._finished
-        self._mutex.release()
-        return flag
-
-    def set_result(self, tresult):
-        """set cases result to result buffer"""
-        self._mutex.acquire()
-        self._result = tresult
-        self._mutex.release()
-
-    def extend_result(self, cases_result=None, print_out=True):
-        """update cases result to the result buffer"""
-        self._mutex.acquire()
-        if cases_result is not None:
-            self._result["cases"].extend(cases_result)
-
-        if print_out:
-            for case_it in cases_result:
-                LOGGER.info(self._progress %
-                            (self._suite_name, case_it['case_id'], case_it['result']))
-                if case_it['result'].lower() in ['fail', 'block'] and 'stdout' in case_it:
-                    LOGGER.info(str2str(case_it['stdout']))
-        self._mutex.release()
-
-    def get_result(self):
-        """get cases result from the result buffer"""
-        self._mutex.acquire()
-        result = self._result
-        self._mutex.release()
-    
-        return result
diff --git a/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite2.0/testkitlite/util/session.py b/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite2.0/testkitlite/util/session.py
deleted file mode 100755 (executable)
index c9b4630..0000000
+++ /dev/null
@@ -1,1623 +0,0 @@
-#!/usr/bin/python
-#
-# Copyright (C) 2012 Intel Corporation
-#
-# 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
-# of the License, or (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-#
-# Authors:
-#              Zhang, Huihui <huihuix.zhang@intel.com>
-#              Wendong,Sui  <weidongx.sun@intel.com>
-#              Yuanyuan,Zou  <zouyuanx@intel.com>
-""" prepare run , split xml ,run case , merge result """
-import traceback
-import os
-import platform
-import time
-import sys
-from datetime import datetime
-from shutil import copyfile
-import xml.etree.ElementTree as etree
-import ConfigParser
-from tempfile import mktemp
-from shutil import move
-from os import remove
-import copy
-import re
-import ConfigParser
-from testkitlite.util.log import LOGGER
-from testkitlite.util.str2 import str2xmlstr
-from testkitlite.util.errors import TestCaseNotFoundException
-from testkitlite.util.errors import TestEngineException
-
-if platform.system().startswith("Linux"):
-    import fcntl
-if platform.system().startswith("Windows"):
-    import win32con
-    import win32file
-    import pywintypes
-
-
-
-
-
-JOIN = os.path.join
-DIRNAME = os.path.dirname
-BASENAME = os.path.basename
-EXISTS = os.path.exists
-ABSPATH = os.path.abspath
-
-# test constants
-OPT_LAUNCHER = 'test-launcher'
-OPT_EXTENSION = 'test-extension'
-OPT_DEBUG_LOG = 'debug-log-base'
-OPT_CAPABILITY = 'capability'
-OPT_DEBUG = 'debug'
-OPT_RERUN = 'rerun'
-OPT_WIDGET = 'test-widget'
-OPT_STUB = 'stub-name'
-OPT_STUB_PORT = 'stub-port'
-OPT_SUITE = 'testsuite-name'
-OPT_SET = 'testset-name'
-OPT_test_set_src = 'test-set-src'
-
-TCT_CONFIG_FILE = "/opt/tools/TCT_CONFIG"
-tct_parser = ConfigParser.ConfigParser()
-tct_parser.read(TCT_CONFIG_FILE)
-
-DEVICE_SUITE_TARGET_30 = tct_parser.get('DEVICE', 'DEVICE_SUITE_TARGET_30')
-DEVICE_EXECUTION_MODE_30 = tct_parser.get('DEVICE', 'DEVICE_EXECUTION_MODE_30')
-DEVICE_SUITE_TARGET_30_STR = "{DEVICE_SUITE_TARGET_30}"
-DEVICE_EXECUTION_MODE_30_STR = "{DEVICE_EXECUTION_MODE_30}"
-
-class TestSession:
-
-    """
-    Parse the testdefinition.xml files.
-    Apply filter for each run.
-    Conduct tests execution.
-    """
-
-    def __init__(self, connector, worker):
-        """ init all self parameters here """
-        # dryrun
-        self.bdryrun = False
-        # non_active
-        self.non_active = False
-        # result file
-        self.resultfile = None
-        # external test
-        self.external_test = None
-        # filter rules
-        self.filter_rules = None
-        self.debug = False
-        self.resultfiles = set()
-        self.core_auto_files = []
-        self.core_manual_files = []
-        self.unit_test_files = []
-        self.skip_all_manual = False
-        self.testsuite_dict = {}
-        self.exe_sequence = []
-        self.testresult_dict = {"pass": 0, "fail": 0,
-                                "block": 0, "not_run": 0}
-        self.current_test_xml = "none"
-        self.first_run = True
-        self.deviceid = None
-        self.session_id = None
-        self.set_parameters = {}
-        self.connector = connector
-        self.stub_name = "testkit-stub"
-        self.testworker = worker
-        self.capabilities = {}
-        self.has_capability = False
-        self.rerun = False
-        self.test_prefix = ""
-        self.filter_ok = False
-        #self.wdurl = ""
-        #self.debugip =  ""
-        self.targetplatform =  ""
-        self.system = platform.system()
-        self.tizenV = None
-        self.stub_port = "8000"
-        self.skip_tc = None
-
-    def set_global_parameters(self, options):
-        "get all options "
-        # apply dryrun
-        if options.bdryrun:
-            self.bdryrun = options.bdryrun
-        # Disable set the result of core manual cases from the console
-        if options.non_active:
-            self.non_active = options.non_active
-        # apply user specify test result file
-        if options.resultfile:
-            self.resultfile = options.resultfile
-        # set the external test
-        if options.exttest:
-            self.external_test = options.exttest
-        if options.debug:
-            self.debug = options.debug
-        if options.rerun:
-            self.rerun = options.rerun
-        if options.test_prefix:
-            self.test_prefix = options.test_prefix
-        if options.device_serial:
-            self.deviceid = options.device_serial
-        if options.worker:
-            self.worker_name = options.worker
-        else:
-            self.worker_name = None
-        #if options.targetplatform:
-        self.targetplatform = os.environ.get("targetplatform",'')
-        #modify the wdurl value, yangx.zhou@intel.com, 2014.09.18
-        #if options.wdurl:
-        #    self.wdurl = options.wdurl
-        #if options.debugip:
-        #    self.debugip = options.debugip
-
-    def add_filter_rules(self, **kargs):
-        """
-        kargs:  key:values - "":["",]
-        """
-        self.filter_rules = kargs
-
-    def set_session_id(self, session_id):
-        """ set the set test session id which is get form com_module """
-        self.session_id = session_id
-
-    def set_stubport(self, stubport):
-        self.stub_port = stubport
-
-    def set_tizenversion(self, tizenversion):
-        self.tizenV = tizenversion
-        self.testworker.set_TizenVersion(self.tizenV)
-
-    def set_skip_tc(self, skip_tc):
-        self.skip_tc = skip_tc
-
-    def set_capability(self, capabilities):
-        """ set capabilitys  """
-        self.capabilities = capabilities
-        self.has_capability = True
-
-    def prepare_run(self, testxmlfile, resultdir=None):
-        """
-        testxmlfile: target testxml file
-        execdir and resultdir: should be the absolute path since TestSession
-        is the common lib
-        """
-        # resultdir is set to current directory by default
-        if not resultdir:
-            resultdir = os.getcwd()
-        self.session_dir = resultdir
-        try:
-            filename = testxmlfile
-            filename = os.path.splitext(filename)[0]
-            os_ver = platform.system()
-            if os_ver == "Linux" or os_ver == "Darwin":
-                file_items = filename.split('/')
-            else:
-                file_items = re.split(r'[/\\]+', filename)
-            if len(file_items) < 2 or file_items[-2] == "" or file_items[-1] == "":
-                return False
-            filename = file_items[-2] + '_' + file_items[-1]
-            if self.filter_rules["execution_type"] == ["manual"]:
-                resultfile = "%s.manual.xml" % filename
-            else:
-                resultfile = "%s.auto.xml" % filename
-            resultfile = JOIN(resultdir, resultfile)
-            if not EXISTS(resultdir):
-                os.mkdir(resultdir)
-            LOGGER.info("[ analysis test xml file: %s ]" % resultfile)
-            self.__prepare_result_file(testxmlfile, resultfile)
-            self.__split_test_xml(resultfile, resultdir)
-        except IOError as error:
-            LOGGER.error(error)
-            return False
-        return True
-
-    def __split_test_xml(self, resultfile, resultdir):
-        """ split_test_xml into auto and manual"""
-        setfind = etree.parse(resultfile).getiterator('set')
-        if setfind:
-            test_file_name = "%s" % BASENAME(resultfile)
-            test_file_name = os.path.splitext(test_file_name)[0]
-            self.__splite_external_test(
-                resultfile, test_file_name, resultdir)
-
-    def __splite_external_test(self, resultfile, test_file_name, resultdir):
-        """select external_test"""
-        testsuite_dict_value_list = []
-        testsuite_dict_add_flag = 0
-        filename_diff = 1
-
-        parser = etree.parse(resultfile)
-        for tsuite in parser.getiterator('suite'):
-            root = etree.Element('test_definition')
-            suitefilename = os.path.splitext(resultfile)[0]
-            suitefilename += ".suite_%s.xml" % filename_diff
-            suitefilename = JOIN(resultdir, suitefilename)
-            tsuite.tail = "\n"
-            root.append(tsuite)
-            try:
-                with open(suitefilename, 'w') as output:
-                    tree = etree.ElementTree(element=root)
-                    tree.write(output)
-            except IOError as error:
-                LOGGER.error("[ Error: create filtered result file: %s failed,\
-                 error: %s ]" % (suitefilename, error))
-            case_suite_find = etree.parse(
-                suitefilename).getiterator('testcase')
-            if case_suite_find:
-                #add by yangx.zhou@intel.com. 2014.09.12
-                set_type = tsuite.find('set').get('type')
-                if set_type == 'script' or set_type == 'pyunit' or set_type == 'androidunit':
-                    if set_type  == 'script':
-                        self.external_test = None
-                    if self.filter_rules["execution_type"] == ["auto"]:
-                        self.core_auto_files.append(suitefilename)
-                    else:
-                        self.core_manual_files.append(suitefilename)
-                    self.resultfiles.add(suitefilename)
-
-                #if tsuite.get('launcher'):
-                elif set_type in ['js', 'ref','wrt', 'qunit']:
-                #elif set_type in ['js','wrt', 'qunit']:
-                    testsuite_dict_value_list.append(suitefilename)
-                    if testsuite_dict_add_flag == 0:
-                        self.exe_sequence.append(test_file_name)
-                    testsuite_dict_add_flag = 1
-                    self.resultfiles.add(suitefilename)
-
-               # elif set_type =='ref' and self.worker_name == "webdriver":
-               #     testsuite_dict_value_list.append(suitefilename)
-               #     if testsuite_dict_add_flag == 0:
-               #         self.exe_sequence.append(test_file_name)
-               #     testsuite_dict_add_flag = 1
-               #     self.resultfiles.add(suitefilename)
-
-                else:
-                    if self.filter_rules["execution_type"] == ["auto"]:
-                        self.core_auto_files.append(suitefilename)
-                    else:
-                        self.core_manual_files.append(suitefilename)
-                    self.resultfiles.add(suitefilename)
-            else:
-                self.unit_test_files.append(suitefilename)
-                self.resultfiles.add(suitefilename)
-
-            filename_diff += 1
-        if testsuite_dict_add_flag:
-            self.testsuite_dict[test_file_name] = testsuite_dict_value_list
-
-    def __prepare_result_file(self, testxmlfile, resultfile):
-        """ write the test_xml content to resultfile"""
-        try:
-            parse_tree = etree.parse(testxmlfile)
-            suiteparent = parse_tree.getroot()
-            no_test_definition = 1
-            if parse_tree.getiterator('test_definition'):
-                no_test_definition = 0
-            if no_test_definition:
-                suiteparent = etree.Element('test_definition')
-                suiteparent.tail = "\n"
-                for suite in parse_tree.getiterator('suite'):
-                    suite.tail = "\n"
-                    suiteparent.append(suite)
-            self.apply_filter(suiteparent)
-            try:
-                with open(resultfile, 'w') as output:
-                    tree = etree.ElementTree(element=suiteparent)
-                    tree.write(output)
-            except IOError as error:
-                LOGGER.error("[ Error: create filtered result file: %s failed,\
-                    error: %s ]" % (resultfile, error))
-        except IOError as error:
-            LOGGER.error(error)
-            return False
-
-    def run_case(self, latest_dir):
-        """ run case """
-        # case not found
-        case_ids = self.filter_rules.get('id')
-        #print 'disable dlog', self.disabledlog
-        if case_ids and not self.filter_ok:
-            raise TestCaseNotFoundException('Test case %s not found!' % case_ids)
-
-        # run core auto cases
-        self.__run_core_auto()
-
-        # run webAPI cases
-        self.__run_webapi_test(latest_dir)
-
-        # run core manual cases
-        self.__run_core_manual()
-
-        # run unit test cases
-        self.__run_unit_test()
-
-    def __run_core_auto(self):
-        """ core auto cases run"""
-        self.core_auto_files.sort()
-        for core_auto_file in self.core_auto_files:
-            temp_test_xml = os.path.splitext(core_auto_file)[0]
-            temp_test_xml = os.path.splitext(temp_test_xml)[0]
-            temp_test_xml = os.path.splitext(temp_test_xml)[0]
-            temp_test_xml += ".auto"
-            # print identical xml file name
-            if self.current_test_xml != temp_test_xml:
-                time.sleep(3)
-                LOGGER.info("\n[ testing xml: %s.xml ]" % temp_test_xml)
-                self.current_test_xml = temp_test_xml
-            self.__run_with_worker(core_auto_file)
-
-    def __run_core_manual(self):
-        """ core manual cases run """
-        self.core_manual_files.sort()
-        for core_manual_file in self.core_manual_files:
-            temp_test_xml = os.path.splitext(core_manual_file)[0]
-            temp_test_xml = os.path.splitext(temp_test_xml)[0]
-            temp_test_xml = os.path.splitext(temp_test_xml)[0]
-            temp_test_xml += ".manual"
-            # print identical xml file name
-            if self.current_test_xml != temp_test_xml:
-                time.sleep(3)
-                LOGGER.info("\n[ testing xml: %s.xml ]" % temp_test_xml)
-                self.current_test_xml = temp_test_xml
-            if self.non_active:
-                self.skip_all_manual = True
-            else:
-                self.__run_with_worker(core_manual_file)
-
-    def __run_unit_test(self):
-        """ unit test cases run """
-        for ut_file in self.unit_test_files:
-            temp_test_xml = os.path.splitext(ut_file)[0]
-            temp_test_xml = os.path.splitext(temp_test_xml)[0]
-            temp_test_xml = os.path.splitext(temp_test_xml)[0]
-            temp_test_xml += ".auto"
-            # print identical xml file name
-            if self.current_test_xml != temp_test_xml:
-                time.sleep(3)
-                LOGGER.info("\n[ testing xml: %s.xml ]" % temp_test_xml)
-                self.current_test_xml = temp_test_xml
-                self.__run_with_worker(ut_file)
-
-    def __run_webapi_test(self, latest_dir):
-        """ run webAPI test"""
-        if self.bdryrun:
-            LOGGER.info("[ Web Test mode does not support dryrun ]")
-            return True
-
-        list_auto = []
-        list_manual = []
-        for i in self.exe_sequence:
-            if i[-4::1] == "auto":
-                list_auto.append(i)
-            if i[-6::1] == "manual":
-                list_manual.append(i)
-        list_auto.sort()
-        list_manual.sort()
-        self.exe_sequence = []
-        self.exe_sequence.extend(list_auto)
-        self.exe_sequence.extend(list_manual)
-
-        for webapi_total_file in self.exe_sequence:
-            for webapi_file in self.testsuite_dict[webapi_total_file]:
-                # print identical xml file name
-                if self.current_test_xml != JOIN(latest_dir, webapi_total_file):
-                    time.sleep(3)
-                    LOGGER.info("\n[ testing xml: %s.xml ]\n"
-                                % JOIN(latest_dir, webapi_total_file))
-                    self.current_test_xml = JOIN(latest_dir, webapi_total_file)
-
-                self.__run_with_worker(webapi_file)
-
-    def __run_with_worker(self, suite_test_xml):
-        """run_with_commodule,Initialization,check status,get result"""
-        try:
-            # prepare test set list
-            test_xml_set_list = self.__split_xml_to_set(suite_test_xml)
-            # create temporary parameter
-            for test_xml_set in test_xml_set_list:
-                LOGGER.info("\n[ run set: %s ]" % test_xml_set)
-                # prepare the test JSON
-                self.__prepare_external_test_json(test_xml_set)
-
-                # init test here
-                init_status = self.__init_com_module(test_xml_set)
-                if not init_status:
-                    continue
-                # send set JSON Data to com_module
-               # if not self.worker_name and self.set_parameters['type'] == 'ref':
-               #     continue
-               # else:
-                u_ret = self.testworker.run_test(self.session_id, self.set_parameters)
-                if not u_ret:
-                    continue
-                while True:
-                    time.sleep(1)
-                    # check the test status ,if the set finished,get
-                    # the set_result,and finalize_test
-                    if self.__check_test_status():
-                        set_result = self.testworker.get_test_result(
-                            self.session_id)
-                        # write_result to set_xml
-                        self.__write_set_result(
-                            test_xml_set, set_result)
-                        # shut down server
-                        self.finalize_test(self.session_id)
-                        break
-        except IOError as error:
-            LOGGER.error(
-                "[ Error: fail to run webapi test xml, error: %s ]" % error)
-
-    def __split_xml_to_set(self, webapi_file):
-        """split xml by <set>"""
-
-        LOGGER.debug("[ split xml: %s by <set> ]" % webapi_file)
-        LOGGER.debug("[ this might take some time, please wait ]")
-        set_number = 1
-        test_xml_set_list = []
-        self.resultfiles.discard(webapi_file)
-        test_xml_temp = etree.parse(webapi_file)
-        for test_xml_temp_suite in test_xml_temp.getiterator('suite'):
-            while set_number <= len(test_xml_temp_suite.getiterator('set')):
-                #print 'debug',test_xml_temp_suite.find('set')[set_number].get('type')
-                copy_url = os.path.splitext(webapi_file)[0]
-                copy_url += "_set_%s.xml" % set_number
-                copyfile(webapi_file, copy_url)
-                test_xml_set_list.append(copy_url)
-                self.resultfiles.add(copy_url)
-                set_number += 1
-        time.sleep(3)
-        set_number -= 1
-        LOGGER.info("[ total set number is: %s ]" % set_number)
-
-        # only keep one set in each xml file and remove empty set
-        test_xml_set_list_empty = []
-        if len(test_xml_set_list) > 1:
-            test_xml_set_list.reverse()
-        for test_xml_set in test_xml_set_list:
-            test_xml_set_tmp = etree.parse(test_xml_set)
-            set_keep_number = 1
-            for temp_suite in test_xml_set_tmp.getiterator('suite'):
-                for test_xml_set_temp_set in temp_suite.getiterator('set'):
-                    if set_keep_number != set_number:
-                        temp_suite.remove(test_xml_set_temp_set)
-                    else:
-                        if not test_xml_set_temp_set.getiterator('testcase'):
-                            test_xml_set_list_empty.append(test_xml_set)
-                    set_keep_number += 1
-            set_number -= 1
-            test_xml_set_tmp.write(test_xml_set)
-        for empty_set in test_xml_set_list_empty:
-            LOGGER.debug("[ remove empty set: %s ]" % empty_set)
-            test_xml_set_list.remove(empty_set)
-            self.resultfiles.discard(empty_set)
-        if len(test_xml_set_list) > 1:
-            test_xml_set_list.reverse()
-        return test_xml_set_list
-
-    def lock(self, fl):
-        try:
-            if self.system.startswith("Linux"):
-            #if self.system.startswith("Linux"):
-                fcntl.flock(fl, fcntl.LOCK_EX)
-            else:
-                hfile = win32file._get_osfhandle(fl.fileno())
-                ov = pywintypes.OVERLAPPED()
-                win32file.LockFileEx(hfile, win32con.LOCKFILE_EXCLUSIVE_LOCK, 0, -0x10000, ov)
-        except:
-            print traceback.print_exc()
-            return False
-        else:
-            return True
-
-    def release(self, fl):
-        if self.system.startswith("Linux"):
-            fcntl.flock(fl, fcntl.LOCK_UN)
-        elif self.system.startswith("Windows"):
-            hfile = win32file._get_osfhandle(fl.fileno())
-            win32file.UnlockFileEx(hfile, 0, -0x10000, pywintypes.OVERLAPPED())        
-
-    def merge_resultfile(self, start_time, latest_dir):
-        """ merge_result_file """
-        mergefile = mktemp(suffix='.xml', prefix='tests.', dir=latest_dir)
-        mergefile = os.path.splitext(mergefile)[0]
-        mergefile = os.path.splitext(mergefile)[0]
-        mergefile = "%s.result" % BASENAME(mergefile)
-        mergefile = "%s.xml" % mergefile
-        mergefile = JOIN(latest_dir, mergefile)
-        end_time = datetime.today().strftime("%Y-%m-%d_%H_%M_%S")
-        LOGGER.info("\n[ test complete at time: %s ]" % end_time)
-        LOGGER.debug("[ start merging test result xml files, "\
-            "this might take some time, please wait ]")
-        LOGGER.debug("[ merge result files into %s ]" % mergefile)
-        root = etree.Element('test_definition')
-        root.tail = "\n"
-        totals = set()
-
-        # merge result files
-        resultfiles = self.resultfiles
-        totals = self.__merge_result(resultfiles, totals)
-        for total in totals:
-            result_xml = etree.parse(total)
-            for suite in result_xml.getiterator('suite'):
-                if suite.getiterator('testcase'):
-                    suite.tail = "\n"
-                    root.append(suite)
-
-        # print test summary
-        self.__print_summary()
-        # generate actual xml file
-        LOGGER.info("[ generate result xml: %s ]" % mergefile)
-        if self.skip_all_manual:
-            LOGGER.info("[ some results of core manual cases are N/A,"
-                        "please refer to the above result file ]")
-        LOGGER.info("[ merge complete, write to the result file,"
-                    " this might take some time, please wait ]")
-        # get useful info for xml
-        # add environment node
-        # add summary node
-        root.insert(0, get_summary(start_time, end_time))
-        root.insert(0, self.__get_environment())
-        # add XSL support to testkit-lite
-        declaration_text = """<?xml version="1.0" encoding="UTF-8"?>
-        <?xml-stylesheet type="text/xsl" href="testresult.xsl"?>\n"""
-        try:
-            with open(mergefile, 'w') as output:
-                output.write(declaration_text)
-                tree = etree.ElementTree(element=root)
-                tree.write(output, xml_declaration=False, encoding='utf-8')
-        except IOError as error:
-            LOGGER.error(
-                "[ Error: merge result file failed, error: %s ]" % error)
-        # change &lt;![CDATA[]]&gt; to <![CDATA[]]>
-        replace_cdata(mergefile)
-        # copy result to -o option
-        self._final_merge(mergefile)
-
-    def _final_merge(self, mergefile):
-        try:
-            if self.resultfile:
-                if os.path.splitext(self.resultfile)[-1] == '.xml':
-                    if not EXISTS(os.path.dirname(self.resultfile)):
-                        if len(os.path.dirname(self.resultfile)) > 0:
-                            os.makedirs(os.path.dirname(self.resultfile))
-                    LOGGER.info("[ copy result xml to output file: %s ]" % self.resultfile)
-                    copyfile(mergefile, self.resultfile)
-                else:
-                    LOGGER.info(
-                        "[ Please specify and xml file for result output,"
-                        " not:%s ]" % self.resultfile)
-        except IOError as error:
-            LOGGER.error("[ Error: fail to copy the result file to: %s,"
-                         " please check if you have created its parent directory,"
-                         " error: %s ]" % (self.resultfile, error))
-    '''
-                    if not EXISTS(self.resultfile):
-                        if not EXISTS(DIRNAME(self.resultfile)):
-                            if len(DIRNAME(self.resultfile)) > 0:
-                                os.makedirs(DIRNAME(self.resultfile))
-                        LOGGER.info("[ copy result xml to output file:"
-                                    " %s ]" % self.resultfile)
-                        copyfile(mergefile, self.resultfile)
-
-                    else:
-                        suite_total = {}
-                        #print 'result file path : ' , self.resultfile
-                        xml_element_tree = etree.parse(self.resultfile).getroot()
-                        for suite in xml_element_tree.getiterator('suite'):
-                            suite_name = suite.get('name').strip()
-                            #print suite_name,'suite_name'
-                            if suite_name:
-                                if suite_name not in suite_total.keys():
-                                    suite_total[suite_name] = []
-                                    for set in suite.getiterator('set'):
-                                        set_name = set.get('name').strip()
-                                        if set_name:
-                                                                       suite_total['%s' %suite_name].append(set_name)
-    
-                        if xml_element_tree is not None:
-                            #f = open(self.resultfile, 'w')
-                            while True:
-                                    #self.lock(f)
-                                f = open(self.resultfile, 'w')
-                                if  self.lock(f):
-                                    time.sleep(1)
-                                                                   #pass
-
-                                    root = etree.parse(mergefile).getroot()
-                                    for suite in root.getiterator('suite'):
-                                        suite_name = suite.get('name').strip()
-                                        if suite_name in suite_total.keys():
-                                            for set in suite.getiterator('set'):
-                                                set_name = set.get('name').strip()
-                                                if set_name in suite_total[suite_name]:
-                                                 #   for testcase in set.getiterator('testcase'):
-                                                    for dest_suite in xml_element_tree.getiterator('suite'):
-                                                        if cmp(dest_suite.get('name').strip(),suite_name) ==0:
-                                                            for dest_set in dest_suite.getiterator('set'):
-                                                                if cmp(dest_set.get('name').strip(),set_name) == 0:  
-                                                    #xml_element_tree.find(suite).find(set).append(testcase)
-                                                                    for testcase in set.getiterator('testcase'):
-                                                                        dest_set.append(testcase)
-                                                else:
-                                                    for dest_suite in xml_element_tree.getiterator('suite'):
-                                                        if cmp(dest_suite.get('name').strip(),suite_name) ==0:
-                                                            dest_suite.append(set)
-                                                            suite_total[suite_name].append(set_name)
-                                        else:
-                                            xml_element_tree.append(suite)
-                                            suite_total[suite_name] = []
-                                            for set in suite.getiterator('set'):
-                                                if set.get('name'):
-                                                    suite_total[suite_name].append(set.get('name'))
-                                   try:
-                                           f.write(etree.tostring(xml_element_tree))
-                                   except:
-                                           self.release(f)
-                                           LOGGER.Warning("[ can not write to result file:" " %s]" %self.resultfile)
-                                           break
-                                    else:
-                                        self.release(f)
-                                        f.close()
-                                        try:
-                                            root = etree.parse(self.resultfile).getroot()
-                                        except:
-                                            break
-                                        else:
-                                            self.testresult_dict = {"pass":0 , "fail":0, "block":0, "not_run": 0}
-                                            for result_testcase in root.getiterator("testcase"):
-                                                if result_testcase.get("result") == "PASS":
-                                                    self.testresult_dict["pass"] += 1
-                                                if result_testcase.get("result") == "FAIL":
-                                                    self.testresult_dict["fail"] += 1
-                                                if result_testcase.get("result") == "BLOCK":
-                                                    self.testresult_dict["block"] += 1
-                                                if result_testcase.get("result").lower() == "NOT_RUN":
-                                                    self.testresult_dict["not_run"] += 1
-                                            self.__print_summary()      
-                                            break
-                                else:
-                                    time.sleep(1)
-                                    self.lock(f)
-    '''
-
-    def __merge_result(self, setresultfiles, totals):
-        """ merge set result to total"""
-        resultfiles = setresultfiles
-        for resultfile in resultfiles:
-            totalfile = os.path.splitext(resultfile)[0]
-            totalfile = os.path.splitext(totalfile)[0]
-            totalfile = os.path.splitext(totalfile)[0]
-            totalfile = "%s.total" % totalfile
-            totalfile = "%s.xml" % totalfile
-            total_xml = etree.parse(totalfile)
-            # LOGGER.info("|--[ merge webapi result file: %s ]" % resultfile)
-            result_xml = etree.parse(resultfile)
-            root = result_xml.getroot()
-            for total_suite in total_xml.getiterator('suite'):
-                for total_set in total_suite.getiterator('set'):
-                    for result_suite in result_xml.getiterator('suite'):
-                        for result_set in result_suite.getiterator('set'):
-                            # when total xml and result xml have same suite, set
-                           # print result_set.get('type'),'debug',resultfile
-                            if result_set.get('type') =='pyunit':
-                                for test_case in result_set.getiterator('testcase'):
-                                    #print test_case.find('description/test_script_entry').text
-                                    if (test_case.find('description/test_script_entry') is not None) and test_case.find('description/test_script_entry').text:
-                                        result_set.remove(test_case)
-                                self.__merge_result_by_name(
-                                    result_set, total_set, result_suite, total_suite)
-                            else:
-                                self.__merge_result_by_name(
-                                    result_set, total_set, result_suite, total_suite)
-            total_xml.write(totalfile)
-            totals.add(totalfile)
-        return totals
-
-    def __merge_result_by_name(
-            self, result_set, total_set, result_suite, total_suite):
-        ''' merge result select by name'''
-        if result_set.get('name') == total_set.get('name') \
-                and result_suite.get('name') == total_suite.get('name'):
-            if result_set.get('set_debug_msg'):
-                total_set.set("set_debug_msg", result_set.get('set_debug_msg'))
-            result_case_iterator = result_set.getiterator(
-                'testcase')
-            if result_case_iterator:
-                for result_case in result_case_iterator:
-                    try:
-                        if self.skip_tc and str(self.skip_tc).find(result_case.get('id')) > -1:
-                            continue
-                        self.__count_result(result_case)
-                        total_set.append(result_case)
-                    except IOError as error:
-                        LOGGER.error("[ Error: fail to append %s, error: %s ]"
-                                     % (result_case.get('id'), error))
-    def __count_result(self, result_case):
-        """ record the pass,failed,block,N/A case number"""
-        if not result_case.get('result'):
-            result_case.set('result', 'N/A')
-            # add empty result node structure for N/A case
-            resinfo_elm = etree.Element('result_info')
-            res_elm = etree.Element('actual_result')
-            start_elm = etree.Element('start')
-            end_elm = etree.Element('end')
-            stdout_elm = etree.Element('stdout')
-            stderr_elm = etree.Element('stderr')
-            resinfo_elm.append(res_elm)
-            resinfo_elm.append(start_elm)
-            resinfo_elm.append(end_elm)
-            resinfo_elm.append(stdout_elm)
-            resinfo_elm.append(stderr_elm)
-            result_case.append(resinfo_elm)
-            res_elm.text = 'N/A'
-        if result_case.get('result') == "PASS":
-            self.testresult_dict["pass"] += 1
-        if result_case.get('result') == "FAIL":
-            self.testresult_dict["fail"] += 1
-        if result_case.get('result') == "BLOCK":
-            self.testresult_dict["block"] += 1
-        if result_case.get('result') == "N/A":
-            self.testresult_dict["not_run"] += 1
-
-    def __get_environment(self):
-        """ get environment """
-        device_info = self.connector.get_device_info()
-        build_infos = self.connector.get_buildinfo(self.tizenV)
-        # add environment node
-        environment = etree.Element('environment')
-        environment.attrib['device_id'] = device_info["device_id"]
-        environment.attrib['device_model'] = device_info["device_model"]
-        environment.attrib['device_name'] = device_info["device_name"]
-        environment.attrib['host'] = platform.platform()
-        environment.attrib['lite_version'] = get_version_info()
-        environment.attrib['resolution'] = device_info["resolution"]
-        environment.attrib['screen_size'] = device_info["screen_size"]
-        environment.attrib['build_id'] = device_info['build_id']
-        environment.attrib['manufacturer'] = build_infos['manufacturer']
-        other = etree.Element('other')
-        other.text = ""
-        environment.append(other)
-        environment.tail = "\n"
-
-        return environment
-
-    def __print_summary(self):
-        """ print test summary infomation"""
-        LOGGER.info("[ test summary ]")
-        total_case_number = int(self.testresult_dict["pass"]) \
-            + int(self.testresult_dict["fail"]) \
-            + int(self.testresult_dict["block"]) \
-            + int(self.testresult_dict["not_run"])
-        #LOGGER.info("  [ total case number: %s ]" % (total_case_number))
-        if total_case_number == 0:
-            LOGGER.info("[Warning: found 0 case from the result files, "
-                        "if it's not right, please check the test xml files, "
-                        "or the filter values ]")
-        else:
-            LOGGER.info("  [ total case number: %s ]" % (total_case_number))
-            LOGGER.info("  [ pass rate: %.2f%% ]" % (float(
-                self.testresult_dict["pass"]) * 100 / int(total_case_number)))
-            LOGGER.info("  [ PASS case number: %s ]" %
-                        self.testresult_dict["pass"])
-            LOGGER.info("  [ FAIL case number: %s ]" %
-                        self.testresult_dict["fail"])
-            LOGGER.info("  [ BLOCK case number: %s ]" %
-                        self.testresult_dict["block"])
-            LOGGER.info("  [ N/A case number: %s ]" %
-                        self.testresult_dict["not_run"])
-
-    def __prepare_external_test_json(self, resultfile):
-        """Run external test"""
-        parameters = {}
-        xml_set_tmp = resultfile
-        # split set_xml by <case> get case parameters
-        LOGGER.debug("[ split xml: %s by <case> ]" % xml_set_tmp)
-        LOGGER.debug("[ this might take some time, please wait ]")
-        try:
-            parse_tree = etree.parse(xml_set_tmp)
-            root_em = parse_tree.getroot()
-            tsuite = root_em.getiterator('suite')[0]
-            case_tmp = []
-            parameters.setdefault("suite_name", tsuite.get('name'))
-            for tset in root_em.getiterator('set'):
-                case_order = 1
-                parameters.setdefault("casecount", str(len(tset.getiterator('testcase'))))
-                parameters.setdefault("current_set_name", xml_set_tmp)
-                parameters.setdefault("name", tset.get('name'))
-                parameters.setdefault("type", tset.get('type'))
-                parameters.setdefault("exetype", '')
-                #add test set location, yangx.zhou@intel.com
-                parameters.setdefault("location", '')
-                if tset.get("location") is not None:
-                    parameters["location"] = tset.get("location")
-
-               # if tset.get("test_set_src") is not None:
-               #     set_entry = self.test_prefix + tset.get("test_set_src")
-               #     parameters.setdefault("test_set_src", set_entry)
-
-                for tcase in tset.getiterator('testcase'):
-                    if self.skip_tc and str(self.skip_tc).find(tcase.get('id')) > -1:
-                        continue
-
-                    case_detail_tmp = {}
-                    step_tmp = []
-                    parameters["exetype"] = tcase.get('execution_type')
-                    case_detail_tmp.setdefault("case_id", tcase.get('id'))
-                    case_detail_tmp.setdefault("purpose", tcase.get('purpose'))
-                    case_detail_tmp.setdefault("order", str(case_order))
-                    case_detail_tmp.setdefault("onload_delay", "3")
-                    if parameters["location"] != '':
-                        case_detail_tmp.setdefault("location", parameters["location"])
-                    else:
-                        case_detail_tmp.setdefault("location", "device")
-
-                    if tcase.find('description/test_script_entry') is not None:
-                        tc_entry = tcase.find(
-                            'description/test_script_entry').text
-                        if not tc_entry:
-                            tc_entry = ""
-
-                        tc_entry = tc_entry.replace(DEVICE_SUITE_TARGET_30_STR,DEVICE_SUITE_TARGET_30)
-                        tc_entry = tc_entry.replace(DEVICE_EXECUTION_MODE_30_STR,DEVICE_EXECUTION_MODE_30)
-
-                        case_detail_tmp["entry"] = self.test_prefix + tc_entry
-                        if tcase.find(
-                                'description/test_script_entry').get('timeout'):
-                            case_detail_tmp["timeout"] = tcase.find(
-                                'description/test_script_entry'
-                            ).get('timeout')
-                        if tcase.find(
-                            'description/test_script_entry'
-                        ).get('test_script_expected_result'):
-                            case_detail_tmp["expected_result"] = tcase.find(
-                                'description/test_script_entry'
-                            ).get('test_script_expected_result')
-                        if tcase.find(
-                            'description/test_script_entry'
-                        ).get('location'):
-                            case_detail_tmp["location"] = tcase.find(
-                                'description/test_script_entry'
-                            ).get('location')
-                    tc_refer_entry = ""
-                    if tcase.find('description/refer_test_script_entry') is not None:
-                        tc_refer_entry = tcase.find(
-                            'description/refer_test_script_entry').text
-
-                    case_detail_tmp["refer_entry"] = tc_refer_entry
-
-                    if tcase.find('description/refer_test_script_entry')is not None:
-                        case_detail_tmp["refer_timeout"] = tcase.find(
-                            'description/refer_test_script_entry').get('timeout')
-                    if tcase.find('description/refer_test_script_entry')is not None:
-                        case_detail_tmp["refer_expected_result"] = tcase.find(
-                            'description/refer_test_script_entry').get('test_script_expected_result')
-                    if tcase.find('description/refer_test_script_entry') is not None:
-                        case_detail_tmp["refer_location"] = tcase.find(
-                            'description/refer_test_script_entry').get('location')
-
-                    if tcase.getiterator("step"):
-                        for this_step in tcase.getiterator("step"):
-                            step_detail_tmp = {}
-                            step_detail_tmp.setdefault("order", "1")
-                            step_detail_tmp["order"] = str(
-                                this_step.get('order'))
-
-                            if this_step.find("step_desc") is not None:
-                                text = this_step.find("step_desc").text
-                                if text is not None:
-                                    step_detail_tmp["step_desc"] = text
-
-                            if this_step.find("expected") is not None:
-                                text = this_step.find("expected").text
-                                if text is not None:
-                                    step_detail_tmp["expected"] = text
-
-                            step_tmp.append(step_detail_tmp)
-
-                    case_detail_tmp['steps'] = step_tmp
-
-                    if tcase.find('description/pre_condition') is not None:
-                        text = tcase.find('description/pre_condition').text
-                        if text is not None:
-                            case_detail_tmp["pre_condition"] = text
-
-                    if tcase.find('description/post_condition') is not None:
-                        text = tcase.find('description/post_condition').text
-                        if text is not None:
-                            case_detail_tmp['post_condition'] = text
-
-                    if tcase.get('onload_delay') is not None:
-                        case_detail_tmp[
-                            'onload_delay'] = tcase.get('onload_delay')
-                    # Check performance test
-                    if tcase.find('measurement') is not None:
-                        measures = tcase.getiterator('measurement')
-                        measures_array = []
-                        for measure in measures:
-                            measure_json = {}
-                            measure_json['name'] = measure.get('name')
-                            measure_json['file'] = measure.get('file')
-                            measures_array.append(measure_json)
-                        case_detail_tmp['measures'] = measures_array
-                    case_tmp.append(case_detail_tmp)
-                    case_order += 1
-            parameters.setdefault("cases", case_tmp)
-            if self.bdryrun:
-                parameters.setdefault("dryrun", True)
-            self.set_parameters = parameters
-
-            #add by yangx.zhou@intel.com, 2014.09.11 
-           # if self.worker_name !=None and self.worker_name == 'webdriver':
-           #     value = 'webdriver'
-            value = None
-            if parameters['type']!= None and self.worker_name == None:
-           #     if parameters['type'] == 'script':
-           #         value = 'default'
-                if parameters['type'] == 'androidunit':
-                    value = 'androidunit'
-                    #value ='default'
-                elif parameters['type'] == 'pyunit' :
-                    value = 'pyunit'
-                elif parameters['type'] == 'qunit':
-                    value = 'default'
-            if value != None:
-                try:
-                    exec "from testkitlite.engines.%s import TestWorker" %value
-                    LOGGER.info("TestWorker is %s" %value)
-                except Exception as error:
-                    #print 'path: ',  os.getcwd()
-                    raise TestEngineException(value)
-                else:
-                    self.testworker = TestWorker(self.connector)
-        except IOError as error:
-            LOGGER.error("[ Error: fail to prepare cases parameters, "
-                         "error: %s ]\n" % error)
-            return False
-        return True
-
-    def apply_filter(self, root_em):
-        """ apply filter """
-        rules = self.filter_rules
-        for tsuite in root_em.getiterator('suite'):
-            if rules.get('suite'):
-                if tsuite.get('name') not in rules['suite']:
-                    root_em.remove(tsuite)
-            for tset in tsuite.getiterator('set'):
-                if rules.get('set'):
-                    if tset.get('name') not in rules['set']:
-                        tsuite.remove(tset)
-
-            for tsuite in root_em.getiterator('suite'):
-                for tset in tsuite.getiterator('set'):
-                    # if there are capabilities ,do filter
-                    if self.has_capability:
-                        tset_status = self.__apply_capability_filter_set(tset)
-                        if not tset_status:
-                            tsuite.remove(tset)
-                            continue
-                    for tcase in tset.getiterator('testcase'):
-                        if not self.__apply_filter_case_check(tcase):
-                            tset.remove(tcase)
-                        else:
-                            self.filter_ok = True
-
-    def __apply_filter_case_check(self, tcase):
-        """filter cases"""
-        rules = self.filter_rules
-        for key in rules.iterkeys():
-            if key in ["suite", "set"]:
-                continue
-            # Check attribute
-            t_val = tcase.get(key)
-            if t_val:
-                if not t_val in rules[key]:
-                    return False
-            else:
-                # Check sub-element
-                items = tcase.getiterator(key)
-                if items:
-                    t_val = []
-                    for i in items:
-                        t_val.append(i.text)
-                    if len(set(rules[key]) & set(t_val)) == 0:
-                        return False
-                else:
-                    return False
-        return True
-
-    def __apply_capability_filter_set(self, tset):
-        """ check the set required capability with  self.capabilities """
-
-        for tcaps in tset.getiterator('capabilities'):
-            for tcap in tcaps.getiterator('capability'):
-                capname = None
-                capvalue = None
-                capname = tcap.get('name').lower()
-                if tcap.find('value') is not None:
-                    capvalue = tcap.find('value').text
-
-                if capname in self.capabilities:
-                    if capvalue is not None:
-                        if capvalue != self.capabilities[capname]:
-                            # if capability value is not equal ,remove the case
-                            return False
-                else:
-                    # if does not hava this capability ,remove case
-                    return False
-        return True
-
-    # sdx@kooltux.org: parse measures returned by test script
-    # and insert in XML result
-    # see xsd/test_definition.xsd: measurementType
-    _MEASURE_ATTRIBUTES = ['name', 'value', 'unit',
-                           'target', 'failure', 'power']
-
-    def __insert_measures(self, case, buf, pattern="###[MEASURE]###"):
-        """ get measures """
-        measures = self.__extract_measures(buf, pattern)
-        for measure in measures:
-            m_elm = etree.Element('measurement')
-            for key in measure:
-                m_elm.attrib[key] = measure[key]
-            case.append(m_elm)
-
-    def __extract_measures(self, buf, pattern):
-        """
-        This function extracts lines from <buf> containing the defined
-        <pattern>. For each line containing the pattern, it extracts the
-        string to the end of line Then it splits the content in multiple
-        fields using the defined separator <field_sep> and maps the fields
-        to measurement attributes defined in xsd. Finally, a list containing
-        all measurement objects found in input buffer is returned
-        """
-        out = []
-        for line in buf.split("\n"):
-            pos = line.find(pattern)
-            if pos < 0:
-                continue
-
-            measure = {}
-            elts = collections.deque(line[pos + len(pattern):].split(':'))
-            for k in self._MEASURE_ATTRIBUTES:
-                if len(elts) == 0:
-                    measure[k] = ''
-                else:
-                    measure[k] = elts.popleft()
-
-            # don't accept unnamed measure
-            if measure['name'] != '':
-                out.append(measure)
-        return out
-
-    def __init_com_module(self, testxml):
-        """
-            send init test to com_module
-            if webapi test,com_module will start testkit-stub
-            else com_module send the test case to devices
-        """
-        starup_prms = self.__prepare_starup_parameters(testxml)
-        # init stub and get the session_id
-        session_id = self.testworker.init_test(starup_prms)
-        if session_id == None:
-            LOGGER.error("[ Error: Initialization Error]")
-            return False
-        else:
-            self.set_session_id(session_id)
-            return True
-
-    def __prepare_starup_parameters(self, testxml):
-        """ prepare_starup_parameters """
-
-        starup_parameters = {}
-        LOGGER.info("[ preparing for startup options ]")
-        try:
-            parse_tree = etree.parse(testxml)
-            tsuite = parse_tree.getroot().getiterator('suite')[0]
-            tset = parse_tree.getroot().getiterator('set')[0]
-            #if tset.get("launcher") is not None:
-            #    starup_parameters[OPT_LAUNCHER] = tset.get("launcher")
-            #else:
-            #    starup_parameters[OPT_LAUNCHER] = tsuite.get("launcher")
-
-
-            if self.external_test is not None:
-                starup_parameters[OPT_LAUNCHER] = self.external_test
-                starup_parameters[OPT_EXTENSION] = self.external_test.split(' ')[0]
-
-            tp = tset.get('type')
-
-            if tp == "wrt":
-                starup_parameters[OPT_LAUNCHER] = "xwalk -iu"
-                starup_parameters[OPT_EXTENSION] = "xwalk"
-            elif tp in ['js','qunit', 'ref']:
-                starup_parameters[OPT_LAUNCHER] = "xwalk"
- #          jh0219.han@samsung.com //in
-            elif tp == "uifw":
-                starup_parameters[OPT_LAUNCHER] = "xwalk -a"
-            elif tp == "uifwr":
-                starup_parameters[OPT_LAUNCHER] = "xwalk -r"
- #          jh0219.han@samsung.com //out               
-            #print starup_parameters[OPT_LAUNCHER],'debug'    
-           # if self.external_test is not None:
-           #     starup_parameters[OPT_LAUNCHER] = self.external_test
-           #     starup_parameters[OPT_EXTENSION] = self.external_test.split(' ')[0]
-
-            if tsuite.get("extension") is not None:
-                starup_parameters[OPT_EXTENSION] = tsuite.get("extension")
-            if tsuite.get("widget") is not None:
-                starup_parameters[OPT_WIDGET] = tsuite.get("widget")
-            starup_parameters[OPT_SUITE] = tsuite.get("name")
-            starup_parameters[OPT_SET] = tset.get("name")
-            starup_parameters[OPT_STUB] = self.stub_name
-            starup_parameters[OPT_STUB_PORT] = self.stub_port
-            starup_parameters['tizen-version'] =self.tizenV
-
-           # if self.external_test is not None and \
-           # starup_parameters[OPT_LAUNHER].find(self.external_test) == -1:
-           # if self.external_test is not None:
-           #     starup_parameters[OPT_LAUNCHER] = self.external_test
-           #     starup_parameters[OPT_EXTENSION] = self.external_test.split(' ')[0]
-            #print     starup_parameters[OPT_LAUNCHER]
-            starup_parameters[OPT_DEBUG] = self.debug
-            if self.resultfile:
-                debug_dir = DIRNAME(self.resultfile)
-                debug_name = os.path.splitext(BASENAME(self.resultfile))[0]
-                if not EXISTS(debug_dir):
-                    os.makedirs(debug_dir)
-            else:
-                debug_dir = DIRNAME(testxml)
-                debug_name = os.path.splitext(BASENAME(testxml))[0]
-            starup_parameters[OPT_DEBUG_LOG] = JOIN(debug_dir, debug_name)
-            self.debug_log_file = starup_parameters[OPT_DEBUG_LOG] + '.dlog'
-            if self.rerun:
-                starup_parameters[OPT_RERUN] = self.rerun
-            if len(self.capabilities) > 0:
-                starup_parameters[OPT_CAPABILITY] = self.capabilities
-            # for webdriver
-            starup_parameters['target_platform'] = self.targetplatform
-            #starup_parameters['debugip'] = self.debugip
-            #starup_parameters['wd_url'] = self.wdurl
-            starup_parameters['set_type'] = self.set_parameters['type']
-            starup_parameters['set_exetype'] = self.set_parameters['exetype']
-            starup_parameters['session_dir'] = self.session_dir
-            starup_parameters['log_debug'] = self.debug
-            
-        except IOError as error:
-            LOGGER.error(
-                "[ Error: prepare starup parameters, error: %s ]" % error)
-        return starup_parameters
-
-    def __check_test_status(self):
-        '''
-            get_test_status from com_module
-            check the status
-            if end ,return ture; else return False
-        '''
-        # check test running or end
-        # if the status id end return True ,else return False
-        session_status = self.testworker.get_test_status(self.session_id)
-        if not session_status == None:
-            if session_status["finished"] == "0":
-                progress_msg_list = session_status["msg"]
-                for line in progress_msg_list:
-                    LOGGER.info(line)
-                return False
-            elif session_status["finished"] == "1":
-                return True
-        else:
-            LOGGER.error("[ session status error ,pls finalize test ]\n")
-            # return True to finished this set  ,becasue server error
-            return True
-
-    def finalize_test(self, sessionid):
-        '''shut_down testkit-stub'''
-        try:
-            self.testworker.finalize_test(sessionid)
-        except Exception as error:
-            LOGGER.error("[ Error: fail to close webapi http server, "
-                         "error: %s ]" % error)
-
-    def get_capability(self, file_name):
-        """get_capability from file """
-        if file_name is None:
-            return True
-        capability_xml = file_name
-        capabilities = {}
-        try:
-            parse_tree = etree.parse(capability_xml)
-            root_em = parse_tree.getroot()
-            for tcap in root_em.getiterator('capability'):
-                capability = get_capability_form_node(tcap)
-                capabilities = dict(capabilities, **capability)
-
-            self.set_capability(capabilities)
-            return True
-        except IOError as error:
-            LOGGER.error(
-                "[ Error: fail to parse capability xml, error: %s ]" % error)
-            return False
-
-    def __write_set_result(self, testxmlfile, result):
-        """
-            get the result JSON form com_module,
-            write them to orignal testxmlfile
-        """
-        #print 'debug', set_result
-        # write the set_result to set_xml
-        set_result_xml = testxmlfile
-        # covert JOSN to python dict string
-        set_result = result
-        if 'resultfile' in set_result:
-            write_file_result(set_result_xml, set_result, self.debug_log_file)
-        else:
-            write_json_result(set_result_xml, set_result, self.debug_log_file)
-
-
-def get_capability_form_node(capability_em):
-    ''' splite capability key and value form element tree'''
-    tmp_key = ''
-    capability = {}
-    tcap = capability_em
-    if tcap.get("name"):
-        tmp_key = tcap.get("name").lower()
-
-    if tcap.get("type").lower() == 'boolean':
-        if tcap.get("support").lower() == 'true':
-            capability[tmp_key] = True
-
-    if tcap.get("type").lower() == 'integer':
-        if tcap.get("support").lower() == 'true':
-            if tcap.getiterator(
-                    "value") and tcap.find("value").text is not None:
-                capability[tmp_key] = int(tcap.find("value").text)
-
-    if tcap.get("type").lower() == 'string':
-        if tcap.get("support").lower() == 'true':
-            if tcap.getiterator(
-                    "value") and tcap.find("value").text is not None:
-                capability[tmp_key] = tcap.find("value").text
-
-    return capability
-
-
-def get_version_info():
-    """
-        get testkit tool version ,just read the version in VERSION file
-        VERSION file must put in /opt/testkit/lite3.0/
-    """
-    try:
-        config = ConfigParser.ConfigParser()
-        if platform.system() == "Linux":
-            config.read('/opt/testkit/lite3.0/VERSION')
-        else:
-            version_file = os.path.join(sys.path[0], 'VERSION')
-            config.read(version_file)
-        version = config.get('public_version', 'version')
-        return version
-    except KeyError as error:
-        LOGGER.error(
-            "[ Error: fail to parse version info, error: %s ]\n" % error)
-        return ""
-
-
-def replace_cdata(file_name):
-    """ replace some character"""
-    try:
-        abs_path = mktemp()
-        new_file = open(abs_path, 'w')
-        old_file = open(file_name)
-        for line in old_file:
-            line_temp = line.replace('&lt;![CDATA', '<![CDATA')
-            new_file.write(line_temp.replace(']]&gt;', ']]>'))
-        new_file.close()
-        old_file.close()
-        remove(file_name)
-        move(abs_path, file_name)
-    except IOError as error:
-        LOGGER.error("[ Error: fail to replace cdata in the result file, "
-                     "error: %s ]\n" % error)
-
-
-def extract_notes(buf, pattern):
-    """util func to split lines in buffer, search for pattern on each line
-    then concatenate remaining content in output buffer"""
-    out = ""
-    for line in buf.split("\n"):
-        pos = line.find(pattern)
-        if pos >= 0:
-            out += line[pos + len(pattern):] + "\n"
-    return out
-
-# sdx@kooltux.org: parse notes in buffer and insert them in XML result
-
-
-def insert_notes(case, buf, pattern="###[NOTE]###"):
-    """ insert notes"""
-    desc = case.find('description')
-    if desc is None:
-        return
-
-    notes_elm = desc.find('notes')
-    if notes_elm is None:
-        notes_elm = etree.Element('notes')
-        desc.append(notes_elm)
-    if notes_elm.text is None:
-        notes_elm.text = extract_notes(buf, pattern)
-    else:
-        notes_elm.text += "\n" + extract_notes(buf, pattern)
-
-
-def get_summary(start_time, end_time):
-    """ set summary node """
-    summary = etree.Element('summary')
-    summary.attrib['test_plan_name'] = "Empty test_plan_name"
-    start_at = etree.Element('start_at')
-    start_at.text = start_time
-    end_at = etree.Element('end_at')
-    end_at.text = end_time
-    summary.append(start_at)
-    summary.append(end_at)
-    summary.tail = "\n  "
-    return summary
-
-
-def write_file_result(set_result_xml, set_result, debug_log_file):
-    """write xml result file"""
-    result_file = set_result['resultfile']
-    try:
-        test_tree = etree.parse(set_result_xml)
-        test_em = test_tree.getroot()
-        result_tree = etree.parse(result_file)
-        result_em = result_tree.getroot()
-        dubug_file = BASENAME(debug_log_file)
-        for result_suite in result_em.getiterator('suite'):
-            for result_set in result_suite.getiterator('set'):
-                for test_suite in test_em.getiterator('suite'):
-                    for test_set in test_suite.getiterator('set'):
-                        if result_set.get('name') == \
-                                test_set.get('name'):
-                            result_set.set("set_debug_msg", dubug_file)
-                            test_suite.remove(test_set)
-                            test_suite.append(result_set)
-        test_tree.write(set_result_xml)
-        os.remove(result_file)
-        LOGGER.info("[ cases result saved to resultfile ]\n")
-    except OSError as error:
-        traceback.print_exc()
-        LOGGER.error(
-            "[ Error: fail to write cases result, error: %s ]\n" % error)
-
-
-def __expand_subcases(tset, tcase, sub_num, result_msg, detail=None):
-    sub_case_result = result_msg.split("[assert]")[1:]
-    if not detail: 
-        for i in range(sub_num):
-            sub_case = copy.deepcopy(tcase)
-            sub_case.set("id", "/".join([tcase.get("id"), str(i+1)]))
-            sub_case.set("purpose", "/".join([tcase.get("purpose"), str(i+1)]))
-            sub_case.remove(sub_case.find("./result_info"))
-            result_info = etree.SubElement(sub_case, "result_info")
-            actual_result = etree.SubElement(result_info, "actual_result")
-            stdout = etree.SubElement(result_info, "stdout")
-            if i < len(sub_case_result):
-                sub_info = sub_case_result[i].split('[message]')
-                #print sub_info
-                sub_case.set("result", sub_info[0].upper())
-                actual_result.text = sub_info[0].upper()
-                stdout.text = sub_info[1]
-            else:
-                sub_case.set("result", "")
-                actual_result.text = ""
-                stdout.text = ""
-            tset.append(sub_case)
-    else:
-        for i in range(sub_num):
-            print 'debug', detail[i], i
-            sub_case = copy.deepcopy(tcase)
-            sub_case.set("id", "/".join([tcase.get("id"), str(i+1)]))
-            sub_case.set("purpose", "/".join([tcase.get("purpose"), str(i+1)]))
-            sub_case.remove(sub_case.find("./result_info"))
-            result_info = etree.SubElement(sub_case, "result_info")
-            actual_result = etree.SubElement(result_info, "actual_result")
-            stdout = etree.SubElement(result_info, "stdout")
-            #add 1392 co 1395,1396 --1399 tab  
-            if i > len(detail) -1:
-                sub_info = detail[i]['stdout'].split('[message]')
-                sub_case.set("result", "BLOCK")
-                actual_result.text = "BLOCK"
-            else:
-                sub_case.set("result", detail[i]['result'])
-                actual_result.text = detail[i]['result'].upper()
-                #actual_result.text = sub_info[0].upper()
-                stdout.text = detail[i]['stdout']
-            #stdout.text = sub_info[1]
-           # else:
-           #     sub_case.set("result", "")
-           #     actual_result.text = ""
-           #     stdout.text = ""
-            tset.append(sub_case)
-
-    tset.remove(tcase)
-
-
-def __write_by_create(tset, case_results, cm):
-    for case_result in case_results:
-        tcase = etree.Element('testcase')
-        tcase.set('id', case_result['case_id'])
-        tcase.set('purpose', case_result['purpose'])
-        tcase.set('result', case_result['result'].upper())
-        tcase.set('component',cm)
-        result_info = etree.SubElement(tcase, "result_info")
-        actual_result = etree.SubElement(result_info, "actual_result")
-        actual_result.text = case_result['result'].upper()
-        start = etree.SubElement(result_info, "start")
-        end = etree.SubElement(result_info, "end")
-        stdout = etree.SubElement(result_info, "stdout")
-        stderr = etree.SubElement(result_info, "stderr")
-        if 'start_at' in case_result:
-            start.text = case_result['start_at']
-        if 'end_at' in case_result:
-            end.text = case_result['end_at']
-        if 'stdout' in case_result:
-            stdout.text = str2xmlstr(case_result['stdout'])
-        if 'stderr' in case_result:
-            stderr.text = str2xmlstr(case_result['stderr'])
-        tset.append(tcase)
-
-
-def __write_by_caseid(tset, case_results):
-    #tset.set("set_debug_msg", "N/A")
-    for tcase in tset.getiterator('testcase'):
-        for case_result in case_results:
-            if tcase.get("id") == case_result['case_id']:
-                tcase.set('result', case_result['result'].upper())
-                # Check performance test
-                if tcase.find('measurement') is not None:
-                    for measurement in tcase.getiterator(
-                            'measurement'):
-                        if 'measures' in case_result:
-                            m_results = case_result['measures']
-                            for m_result in m_results:
-                                if measurement.get('name') == \
-                                        m_result['name'] and 'value' in m_result:
-                                    measurement.set(
-                                        'value', m_result[
-                                            'value'])
-                if tcase.find("./result_info") is not None:
-                    tcase.remove(tcase.find("./result_info"))
-                result_info = etree.SubElement(tcase, "result_info")
-                actual_result = etree.SubElement(
-                    result_info, "actual_result")
-                actual_result.text = case_result['result'].upper()
-                start = etree.SubElement(result_info, "start")
-                end = etree.SubElement(result_info, "end")
-                stdout = etree.SubElement(result_info, "stdout")
-                stderr = etree.SubElement(result_info, "stderr")
-                if 'start_at' in case_result:
-                    start.text = case_result['start_at']
-                if 'end_at' in case_result:
-                    end.text = case_result['end_at']
-                if 'stdout' in case_result:
-                    stdout.text = str2xmlstr(case_result['stdout'])
-                if 'stderr' in case_result:
-                    stderr.text = str2xmlstr(case_result['stderr'])
-                if tcase.get("subcase") is not None:
-                    #print 'subcase', tcase.get('subcase')
-                    sub_num = int(tcase.get("subcase"))
-                    result_msg = case_result['stdout']
-                    __expand_subcases(tset, tcase, sub_num, result_msg)
-
-def __write_by_class(tset, case_results):
-    tset.set("set_debug_msg", "N/A")
-    for tcase in tset.getiterator('testcase'):
-        #for key in case_results.keys():
-        sub_no = int(tcase.get('subcase'))
-        text = tcase.find('description/test_script_entry').text
-        if text in case_results:
-           # tcase.set('result', case_result['result'].upper())
-            if tcase.find("./result_info") is not None:
-                tcase.remove(tcase.find("./result_info"))
-            result_info = etree.SubElement(tcase, "result_info")
-            if sub_no == len(case_results[text]):
-                for case_result in case_results[text]:
-                    actual_result = etree.SubElement(
-                        result_info, "actual_result")
-                    actual_result.text = case_result['result'].upper()
-                    start = etree.SubElement(result_info, "start")
-                    end = etree.SubElement(result_info, "end")
-                    stdout = etree.SubElement(result_info, "stdout")
-                    stderr = etree.SubElement(result_info, "stderr")
-                    if 'start_at' in case_result:
-                        start.text = case_result['start_at']
-                    if 'end_at' in case_result:
-                        end.text = case_result['end_at']
-                    if 'stdout' in case_result:
-                        stdout.text = str2xmlstr(case_result['stdout'])
-                    if 'stderr' in case_result:
-                        stderr.text = str2xmlstr(case_result['stderr'])
-            else:
-                for case_result in case_results[text]:
-                    actual_result = etree.SubElement(
-                        result_info, "actual_result")
-                    actual_result.text = case_result['result'].upper()
-                    start = etree.SubElement(result_info, "start")
-                    end = etree.SubElement(result_info, "end")
-                    stdout = etree.SubElement(result_info, "stdout")
-                    stderr = etree.SubElement(result_info, "stderr")
-                    if 'start_at' in case_result:
-                        start.text = case_result['start_at']
-                    if 'end_at' in case_result:
-                        end.text = case_result['end_at']
-                    if 'stdout' in case_result:
-                        stdout.text = str2xmlstr(case_result['stdout'])
-                    if 'stderr' in case_result:
-                        stderr.text = str2xmlstr(case_result['stderr'])
-                for i in range(sub_no - len(case_results[text])):
-                    case_result = case_results[text][-1]
-                    actual_result = etree.SubElement(
-                        result_info, "actual_result")
-                    actual_result.text = case_result['result'].upper()
-                    start = etree.SubElement(result_info, "start")
-                    end = etree.SubElement(result_info, "end")
-                    stdout = etree.SubElement(result_info, "stdout")
-                    stderr = etree.SubElement(result_info, "stderr")
-                    if 'start_at' in case_result:
-                        start.text = case_result['start_at']
-                    if 'end_at' in case_result:
-                        end.text = case_result['end_at']
-                    if 'stdout' in case_result:
-                        stdout.text = str2xmlstr(case_result['stdout'])
-                    if 'stderr' in case_result:
-                        stderr.text = str2xmlstr(case_result['stderr'])
-
-            if tcase.get("subcase") is not None:
-                sub_num = int(tcase.get("subcase"))
-                result_msg = case_result['stdout']
-                __expand_subcases(tset, tcase, sub_num, result_msg, case_results[text])
-
-def sort_result(case_results):
-    total = dict()
-    for result in case_results:
-        if result['case_class'] in total:
-            total[result['case_class']].append(result)
-        else:
-            total[result['case_class']] = [result]
-    return total
-
-def write_json_result(set_result_xml, set_result, debug_log_file):
-    ''' fetch result form JSON'''
-    case_results = set_result["cases"]
-    try:
-        parse_tree = etree.parse(set_result_xml)
-        #print 'debug tree', debug_log_file
-        root_em = parse_tree.getroot()
-        dubug_file = BASENAME(debug_log_file)
-        for tset in root_em.getiterator('set'):
-            tset.set("set_debug_msg", dubug_file)
-            if tset.get('type') == 'pyunit':
-                cm = tset.find('testcase').get('component')
-                __write_by_create(tset, case_results, cm)
-            elif tset.get('type') == 'androidunit':
-                total = sort_result(case_results)
-                __write_by_class(tset, total)
-            else:
-                __write_by_caseid(tset, case_results)
-        parse_tree.write(set_result_xml)
-        LOGGER.info("[ cases result saved to resultfile ]\n")
-    except IOError as error:
-        traceback.print_exc()
-        LOGGER.error(
-            "[ Error: fail to write cases result, error: %s ]\n" % error)
diff --git a/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite2.0/testkitlite/util/str2.py b/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite2.0/testkitlite/util/str2.py
deleted file mode 100755 (executable)
index 6971df4..0000000
+++ /dev/null
@@ -1,66 +0,0 @@
-#!/usr/bin/python
-#
-# Copyright (C) 2012 Intel Corporation
-#
-# 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
-# of the License, or (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-#
-# Authors:
-#              Zhang, Huihui <huihuix.zhang@intel.com>
-#              Wendong,Sui  <weidongx.sun@intel.com>
-""" string convertor"""
-
-from types import IntType, FloatType, LongType
-import string
-
-
-def str2str(src):
-    """string to printable string"""
-    if isinstance(src, unicode):
-        return src.encode("utf8")
-
-    if isinstance(src, str):
-        accept = string.punctuation + string.letters + string.digits + ' \r\n'
-        return filter(lambda x: x in accept, src)
-
-    return ""
-
-
-def str2val(src):
-    """string to program value"""
-    ret = None
-    try:
-        ret = eval(str2str(src))
-    except:
-        pass
-    return ret
-
-
-def str2bool(src):
-    """string to boolean"""
-    if "TRUE" == str2str(src).upper():
-        return True
-    if "FALSE" == str2str(src).upper():
-        return False
-    return None
-
-
-def str2number(src):
-    """string to boolean"""
-    val = str2val(str2str(src))
-    if type(val) in [IntType, FloatType, LongType]:
-        return val
-    else:
-        return None
-
-
-def str2xmlstr(src):
-    """string to xml string value"""
-    return src.replace('\n', '\\n')
diff --git a/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite2.0/testkitlite/util/tr_utils.py b/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite2.0/testkitlite/util/tr_utils.py
deleted file mode 100755 (executable)
index a3ce9bf..0000000
+++ /dev/null
@@ -1,53 +0,0 @@
-import os
-import signal
-import sys
-import logging
-
-LOG = logging.getLogger("TestRunner")
-
-
-def pidExists(pid):
-    if pid < 0:
-        return False
-    try:
-        os.kill(pid, 0)
-    except OSError as e:
-        return False
-    else:
-        return True
-
-
-def IsWindows():
-    return sys.platform == 'cygwin' or sys.platform.startswith('win')
-
-
-def KillAllProcesses(ppid=None):
-    if IsWindows():
-        subprocess.check_call("TASKKILL /F /PID %s /T" % ppid)
-    else:
-        ppid = str(ppid)
-        pidgrp = []
-
-        def GetChildPids(ppid):
-            command = "ps -ef | awk '{if ($3 ==%s) print $2;}'" % str(ppid)
-            pids = os.popen(command).read()
-            pids = pids.split()
-
-            return pids
-
-        pidgrp.extend(GetChildPids(ppid))
-        for pid in pidgrp:
-            pidgrp.extend(GetChildPids(pid))
-
-        pidgrp.insert(0, ppid)
-        while len(pidgrp) > 0:
-            pid = pidgrp.pop()
-            try:
-                os.kill(int(pid), signal.SIGKILL)
-                return True
-            except OSError:
-                try:
-                    os.popen("kill -9 %d" % int(pid))
-                    return True
-                except:
-                    return False
diff --git a/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite2.0/testkitmerge/__init__.py b/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite2.0/testkitmerge/__init__.py
deleted file mode 100755 (executable)
index e69de29..0000000
diff --git a/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite2.0/testkitmerge/merger.py b/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite2.0/testkitmerge/merger.py
deleted file mode 100755 (executable)
index 4b5b3ee..0000000
+++ /dev/null
@@ -1,275 +0,0 @@
-#!/usr/bin/python
-#
-# Copyright (C) 2014 Intel Corporation
-#
-# 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
-# of the License, or (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
-#
-# Authors: 
-#           Nicolas Zingile <n.zingile@gmail.com>
-
-"""Merger module for testkit xml files"""
-
-from lxml import etree
-import os
-
-#------------------------- Global variables -------------------------#
-
-TESTDEFATTRS  = {}
-TESTDEFCHILDS = {"environment" : False, "summary" : False, "suite" : False}
-ENVATTRS      = {"build_id" : False, "device_id" : False, "device_model" : False,
-               "device_name" : False, "host" : False, "lite_version" : False,
-               "manufacturer" : False, "resolution" : False, "screen_size" : False}
-ENVCHILDS     = {"other" : False}
-SUMATTRS      = {"test_plan_name" : False}
-SUMCHILDS     = {"start_at" : True, "end_at" : True}
-SUITEATTRS    = {"name" : True, "launcher" : False,'category':None,'extension':None}
-SUITECHILDS   = {"set" : True}
-SETATTRS      = {"name" : True, "set_debug_msg" : False,'type':None}
-SETCHILDS     = {"testcase" : False,'capabilities':False}
-TCATTRS       = {"component" : True, "execution_type" : True, "id" :True,
-               "name" : False, "priority" : True, "purpose" : True,"onload_delay":None,
-                "result" : True, "status" : True, "type" : True}
-TCCHILDS      = {"description" : False ,"result_info":False}
-
-DESCATTRS     ={}
-DESCCHILDS    = {"test_script_entry": True,"refer_test_script_entry":False,"pre_condition" : False, "post_condition" : False, "steps" : False}
-RESULTCHILD = {'actual_result':True,'start':False,'end':False,'stdout':False}
-RESINFOATTRS  = {}
-RESINFOCHILDS = {"actual_result" : True, "start" :False, "end" : False,
-               "stdout" : False, "stderr" : False}
-
-class ElementError(Exception):
-    """Custom class to handle the merging exceptions"""
-    pass
-
-def check_element(element, attrdico, childsdico):
-    """Checks a node of the testkit result xml tree.
-
-    Allows to verify the integrity of a testkit result xml node.
-    Check if element contains allowed attributes and if the value of
-    those attributes is filled if it should be.
-    Check if the child nodes of element are allowed and if so, checks
-    if the child node contains text if it should.
-
-    Args:
-       element : Element to check
-       attrdico: A dict that contains information on attributes of element
-               keys: String - allowed attributes of the element
-               values: Booleans indicating if the keys should be filled
-       childsdico: A dict that contains information on sub elements of element
-               keys: String - allowed sub elements of element
-               values: Booleans indicating if the keys should contain text
-    Returns:
-
-    Raises:
-       ElementError
-    """
-    for attrname, attrvalue in element.attrib.items():
-        if attrname in attrdico.keys():
-            if not attrvalue and attrdico.get(attrname):
-                raise ElementError("Attribute '" + attrname + "' of element '" + element.tag
-                + "' is not defined")
-        else:
-            raise ElementError("Attribute '" + attrname + "' is not authorized as an attribute of the '" + element.tag + "' element")
-    for child in list(element):
-        if (child.tag not in childsdico.keys()):
-            raise ElementError("Element '" + child.tag + " should not be a child element of '" + element.tag + "'")
-       elif (not child.text and childsdico.get(child.tag)):
-            raise ElementError("The element '" + child.tag + "' should contain some text")
-
-def create_xmltree():
-    """Creates an ElementTree object.
-    Args:
-
-    Return:
-       An ElementTree object that represents en empty testkit result xml file.
-    """
-    root = etree.Element("test_definition")
-    xmltree = etree.ElementTree(root)
-    print "xml tree created !"
-    
-    return xmltree
-
-def create_envandsum(srcxmltree, destxmltree):
-    """Creates the environment and the summary nodes of
-    an ElementTree object.
-
-    Copy the environment and the summary nodes of srcxmltree in 
-    the destxmltree. The destxmltree only contains the root element.
-
-    Args:
-       srcxmltree: Source xmltree from where we want to copy some nodes.
-       destxmltree: Destination xmltree to augment with some nodes.
-
-    Returns:
-       An ElementTree that partially represents a testkit result xml file.
-    """
-    testdef = destxmltree.getroot()
-    environment = srcxmltree.find("/environment")
-    summary = srcxmltree.find("/summary")
-    testdef.append(environment)
-    testdef.append(summary)
-
-    return destxmltree
-
-def check_testdefinition(xmltree):
-    """Checks the test_definition node of a testkit result xml.
-
-    Checkis that all the sub elements of the test_definition node are present
-    and that integrity of that sub elements is good.
-
-    Args:
-       xmltree: An ElementTree that represents a testkit result xml tree.
-
-    Returns:
-
-    Raises:
-       ElementError
-    """
-    testdef = xmltree.getroot()
-    check_element(testdef, TESTDEFATTRS, TESTDEFCHILDS)
-    environment = testdef.find("./environment")
-    summary = testdef.find("summary")
-    if environment is not None:
-        check_element(environment, ENVATTRS, ENVCHILDS)
-    else:
-       raise ElementError("Element 'test_definition' should contain an 'environment' element")
-    if summary is not None:
-        check_element(summary, SUMATTRS, SUMCHILDS)
-    else:
-       raise ElementError("Element 'test_definition' should contain a 'summary' element")
-    for asuite in testdef.findall("./suite"):
-       check_suite(asuite)
-           
-def check_suite(eltsuite):
-    """Checks the integrity of a suite element.
-
-    Args:
-       eltsuite: A suite element to check
-
-    Returns:
-    """
-    check_element(eltsuite, SUITEATTRS, SUITECHILDS) 
-    for child in list(eltsuite):
-       check_set(child)
-
-def check_set(eltset):
-    """Checks the integrity of a set element.
-
-    Args:
-       eltset: A set element to check.
-
-    Returns:
-    """
-    check_element(eltset, SETATTRS, SETCHILDS)
-    for child in list (eltset):
-       check_testcase(child)
-
-def check_testcase(eltcase):
-    """Checks the integrity of a testcase element.
-
-    Also verify that the result of the eltcase is present and consistent
-
-    Args:
-       eltcase: A testcase element to check
-
-    Returns:
-
-    Raises:
-       ElementError
-    """
-    try:
-       result = eltcase.get("result")
-       actual_result = eltcase.find("./result_info/actual_result").text
-       allowed_results = ["PASS", "FAIL", "N/A","BLOCK","TIMEOUT"]
-    except AttributeError:
-       raise ElementError("result of the testcase is not valid !")
-    if result not in allowed_results or result != actual_result:
-       raise ElementError("The testcase '" + eltcase.get("id") + "' doesn't have a consistent result")
-    check_element(eltcase, TCATTRS, TCCHILDS)
-    for child in list (eltcase):
-       if child.tag == "description":
-          # print "-- checking description node"
-           check_element(child, DESCATTRS, DESCCHILDS)
-       elif child.tag == "result_info":
-         #  print "-- checking result_info node"
-           check_element(child, RESINFOATTRS, RESINFOCHILDS)
-       #elif child.tag == "categories":
-       #    pass
-       else:
-           raise ElementError("Element '" + child.tag + "' is not allowed")
-
-def solve_conflicts(sourcecase, destcase):
-    """Selects a result when same testcase is encountered in both source and destination
-    testkit xml files.
-
-    The result is chosen according to the following priority : FAIL > N/A > PASS.
-
-    Args:
-       sourcecase: A testcase element of the source testkit xml result file
-       destcase: A testcase element of the destination testkit xml result file
-
-    Returns:
-    """
-    srcresult = sourcecase.get('result')
-    destresult = destcase.get('result')
-    if (srcresult == destresult) or (destresult == 'FAIL') \
-    or (srcresult == 'PASS' and destresult == 'N/A'):
-       pass
-    else:
-       destcase.set('result', srcresult)
-       destcase.find('./result_info/actual_result').text = srcresult
-
-def merge_testkitxml (sourcexmltree, destxmltree=None):
-    """Merge two testkit xml result files.
-
-    Merge the information of sourcexmltree in destxmltree. If destxmltree is
-    not definded, creates a new ElementTree and copy all the information of
-    sourcexmltree in it.
-
-    Args:
-       sourcexmltree: The source ElementTree object that represents the 
-               testkit result xml source file
-       destxmltree: The destination ElementTree object that represents the 
-               testkit result xml destination file
-    Returns:
-       An ElementTree that represents the result of the merging of the sourcexmltree
-       and destxmltree
-    """
-    print "## Checking source xml file ..."
-    check_testdefinition(sourcexmltree)
-    print "source xml file is correct. Ok\n"
-    if destxmltree is None:
-        print "Destination xml file doesn't exist... will be created"
-        destxmltree = create_xmltree()
-        create_envandsum(sourcexmltree, destxmltree)
-    for asuite in sourcexmltree.iter('suite'):
-        destsuite = destxmltree.find("/suite[@name='" + asuite.get('name') + "']")
-        if destsuite is not None:
-            for aset in asuite.iter('set'):
-                destset = destsuite.find("./set[@name='" + aset.get('name') + "']")
-                if destset is not None:
-                    for acase in aset.iter('testcase'):
-                        destcase = destset.find("./testcase[@id='" + acase.get('id') + "']")
-                        if destcase is not None:
-                           solve_conflicts(acase, destcase)
-                        else:
-                            destset.append(acase)
-               else:
-                    destsuite.append(aset)
-        else:
-            destxmltree.getroot().append(asuite)
-
-    return destxmltree
diff --git a/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite2.0/xsd/Makefile.am b/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite2.0/xsd/Makefile.am
deleted file mode 100755 (executable)
index e24d378..0000000
+++ /dev/null
@@ -1,22 +0,0 @@
-# Copyright (C) 2012 Intel Corporation
-# 
-# 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
-# of the License, or (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
-#
-# Authors:
-#              Zhang, Huihui <huihuix.zhang@intel.com>
-#              Wendong,Sui  <weidongx.sun@intel.com>
-
-testkitxsddir = /opt/testkit/lite3.0/xsd
-dist_testkitxsd_DATA = *.js *.xsl *.css *.png *.txt *.xml *.xsd release-notes
diff --git a/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite2.0/xsd/application.js b/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite2.0/xsd/application.js
deleted file mode 100755 (executable)
index 964aa19..0000000
+++ /dev/null
@@ -1,47 +0,0 @@
-function getScrollTop() {
-  return f_scrollTop();
-}
-
-function f_scrollTop() {
-  return f_filterResults (
-    $(window) ? $(window).scrollTop() : 0,
-    document.documentElement ? document.documentElement.scrollTop : 0,
-    document.body ? document.body.scrollTop : 0
-  );
-}
-
-function f_filterResults(n_win, n_docel, n_body) {
-  var n_result = n_win ? n_win : 0;
-  if (n_docel && (!n_result || (n_result > n_docel)))
-    n_result = n_docel;
-  return n_body && (!n_result || (n_result > n_body)) ? n_body : n_result;
-}
-
-function setScrollTop() {
-  $(window) ? $(window).scrollTop(0): 0;
-  document.documentElement ? document.documentElement.scrollTop = 0 :0;
-  document.body ? document.body.scrollTop = 0 : 0;
-}
-
-function goTopEx() {
-  $node = $('#goTopBtn');
-
-  if (getScrollTop() > 0) {
-    $node.show();
-  } else {
-    $node.hide();
-  }
-
-  $(window).scroll(function () {
-    if (getScrollTop() > 0) {
-      $node.show();
-    } else {
-      $node.hide();
-    }
-  });
-
-  $node.click(function () {
-    setScrollTop();
-  });
-}
-
diff --git a/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite2.0/xsd/back_top.png b/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite2.0/xsd/back_top.png
deleted file mode 100755 (executable)
index 19cbd76..0000000
Binary files a/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite2.0/xsd/back_top.png and /dev/null differ
diff --git a/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite2.0/xsd/jquery.min.js b/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite2.0/xsd/jquery.min.js
deleted file mode 100755 (executable)
index 198b3ff..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-/*! jQuery v1.7.1 jquery.com | jquery.org/license */
-(function(a,b){function cy(a){return f.isWindow(a)?a:a.nodeType===9?a.defaultView||a.parentWindow:!1}function cv(a){if(!ck[a]){var b=c.body,d=f("<"+a+">").appendTo(b),e=d.css("display");d.remove();if(e==="none"||e===""){cl||(cl=c.createElement("iframe"),cl.frameBorder=cl.width=cl.height=0),b.appendChild(cl);if(!cm||!cl.createElement)cm=(cl.contentWindow||cl.contentDocument).document,cm.write((c.compatMode==="CSS1Compat"?"<!doctype html>":"")+"<html><body>"),cm.close();d=cm.createElement(a),cm.body.appendChild(d),e=f.css(d,"display"),b.removeChild(cl)}ck[a]=e}return ck[a]}function cu(a,b){var c={};f.each(cq.concat.apply([],cq.slice(0,b)),function(){c[this]=a});return c}function ct(){cr=b}function cs(){setTimeout(ct,0);return cr=f.now()}function cj(){try{return new a.ActiveXObject("Microsoft.XMLHTTP")}catch(b){}}function ci(){try{return new a.XMLHttpRequest}catch(b){}}function cc(a,c){a.dataFilter&&(c=a.dataFilter(c,a.dataType));var d=a.dataTypes,e={},g,h,i=d.length,j,k=d[0],l,m,n,o,p;for(g=1;g<i;g++){if(g===1)for(h in a.converters)typeof h=="string"&&(e[h.toLowerCase()]=a.converters[h]);l=k,k=d[g];if(k==="*")k=l;else if(l!=="*"&&l!==k){m=l+" "+k,n=e[m]||e["* "+k];if(!n){p=b;for(o in e){j=o.split(" ");if(j[0]===l||j[0]==="*"){p=e[j[1]+" "+k];if(p){o=e[o],o===!0?n=p:p===!0&&(n=o);break}}}}!n&&!p&&f.error("No conversion from "+m.replace(" "," to ")),n!==!0&&(c=n?n(c):p(o(c)))}}return c}function cb(a,c,d){var e=a.contents,f=a.dataTypes,g=a.responseFields,h,i,j,k;for(i in g)i in d&&(c[g[i]]=d[i]);while(f[0]==="*")f.shift(),h===b&&(h=a.mimeType||c.getResponseHeader("content-type"));if(h)for(i in e)if(e[i]&&e[i].test(h)){f.unshift(i);break}if(f[0]in d)j=f[0];else{for(i in d){if(!f[0]||a.converters[i+" "+f[0]]){j=i;break}k||(k=i)}j=j||k}if(j){j!==f[0]&&f.unshift(j);return d[j]}}function ca(a,b,c,d){if(f.isArray(b))f.each(b,function(b,e){c||bE.test(a)?d(a,e):ca(a+"["+(typeof e=="object"||f.isArray(e)?b:"")+"]",e,c,d)});else if(!c&&b!=null&&typeof b=="object")for(var e in b)ca(a+"["+e+"]",b[e],c,d);else d(a,b)}function b_(a,c){var d,e,g=f.ajaxSettings.flatOptions||{};for(d in c)c[d]!==b&&((g[d]?a:e||(e={}))[d]=c[d]);e&&f.extend(!0,a,e)}function b$(a,c,d,e,f,g){f=f||c.dataTypes[0],g=g||{},g[f]=!0;var h=a[f],i=0,j=h?h.length:0,k=a===bT,l;for(;i<j&&(k||!l);i++)l=h[i](c,d,e),typeof l=="string"&&(!k||g[l]?l=b:(c.dataTypes.unshift(l),l=b$(a,c,d,e,l,g)));(k||!l)&&!g["*"]&&(l=b$(a,c,d,e,"*",g));return l}function bZ(a){return function(b,c){typeof b!="string"&&(c=b,b="*");if(f.isFunction(c)){var d=b.toLowerCase().split(bP),e=0,g=d.length,h,i,j;for(;e<g;e++)h=d[e],j=/^\+/.test(h),j&&(h=h.substr(1)||"*"),i=a[h]=a[h]||[],i[j?"unshift":"push"](c)}}}function bC(a,b,c){var d=b==="width"?a.offsetWidth:a.offsetHeight,e=b==="width"?bx:by,g=0,h=e.length;if(d>0){if(c!=="border")for(;g<h;g++)c||(d-=parseFloat(f.css(a,"padding"+e[g]))||0),c==="margin"?d+=parseFloat(f.css(a,c+e[g]))||0:d-=parseFloat(f.css(a,"border"+e[g]+"Width"))||0;return d+"px"}d=bz(a,b,b);if(d<0||d==null)d=a.style[b]||0;d=parseFloat(d)||0;if(c)for(;g<h;g++)d+=parseFloat(f.css(a,"padding"+e[g]))||0,c!=="padding"&&(d+=parseFloat(f.css(a,"border"+e[g]+"Width"))||0),c==="margin"&&(d+=parseFloat(f.css(a,c+e[g]))||0);return d+"px"}function bp(a,b){b.src?f.ajax({url:b.src,async:!1,dataType:"script"}):f.globalEval((b.text||b.textContent||b.innerHTML||"").replace(bf,"/*$0*/")),b.parentNode&&b.parentNode.removeChild(b)}function bo(a){var b=c.createElement("div");bh.appendChild(b),b.innerHTML=a.outerHTML;return b.firstChild}function bn(a){var b=(a.nodeName||"").toLowerCase();b==="input"?bm(a):b!=="script"&&typeof a.getElementsByTagName!="undefined"&&f.grep(a.getElementsByTagName("input"),bm)}function bm(a){if(a.type==="checkbox"||a.type==="radio")a.defaultChecked=a.checked}function bl(a){return typeof a.getElementsByTagName!="undefined"?a.getElementsByTagName("*"):typeof a.querySelectorAll!="undefined"?a.querySelectorAll("*"):[]}function bk(a,b){var c;if(b.nodeType===1){b.clearAttributes&&b.clearAttributes(),b.mergeAttributes&&b.mergeAttributes(a),c=b.nodeName.toLowerCase();if(c==="object")b.outerHTML=a.outerHTML;else if(c!=="input"||a.type!=="checkbox"&&a.type!=="radio"){if(c==="option")b.selected=a.defaultSelected;else if(c==="input"||c==="textarea")b.defaultValue=a.defaultValue}else a.checked&&(b.defaultChecked=b.checked=a.checked),b.value!==a.value&&(b.value=a.value);b.removeAttribute(f.expando)}}function bj(a,b){if(b.nodeType===1&&!!f.hasData(a)){var c,d,e,g=f._data(a),h=f._data(b,g),i=g.events;if(i){delete h.handle,h.events={};for(c in i)for(d=0,e=i[c].length;d<e;d++)f.event.add(b,c+(i[c][d].namespace?".":"")+i[c][d].namespace,i[c][d],i[c][d].data)}h.data&&(h.data=f.extend({},h.data))}}function bi(a,b){return f.nodeName(a,"table")?a.getElementsByTagName("tbody")[0]||a.appendChild(a.ownerDocument.createElement("tbody")):a}function U(a){var b=V.split("|"),c=a.createDocumentFragment();if(c.createElement)while(b.length)c.createElement(b.pop());return c}function T(a,b,c){b=b||0;if(f.isFunction(b))return f.grep(a,function(a,d){var e=!!b.call(a,d,a);return e===c});if(b.nodeType)return f.grep(a,function(a,d){return a===b===c});if(typeof b=="string"){var d=f.grep(a,function(a){return a.nodeType===1});if(O.test(b))return f.filter(b,d,!c);b=f.filter(b,d)}return f.grep(a,function(a,d){return f.inArray(a,b)>=0===c})}function S(a){return!a||!a.parentNode||a.parentNode.nodeType===11}function K(){return!0}function J(){return!1}function n(a,b,c){var d=b+"defer",e=b+"queue",g=b+"mark",h=f._data(a,d);h&&(c==="queue"||!f._data(a,e))&&(c==="mark"||!f._data(a,g))&&setTimeout(function(){!f._data(a,e)&&!f._data(a,g)&&(f.removeData(a,d,!0),h.fire())},0)}function m(a){for(var b in a){if(b==="data"&&f.isEmptyObject(a[b]))continue;if(b!=="toJSON")return!1}return!0}function l(a,c,d){if(d===b&&a.nodeType===1){var e="data-"+c.replace(k,"-$1").toLowerCase();d=a.getAttribute(e);if(typeof d=="string"){try{d=d==="true"?!0:d==="false"?!1:d==="null"?null:f.isNumeric(d)?parseFloat(d):j.test(d)?f.parseJSON(d):d}catch(g){}f.data(a,c,d)}else d=b}return d}function h(a){var b=g[a]={},c,d;a=a.split(/\s+/);for(c=0,d=a.length;c<d;c++)b[a[c]]=!0;return b}var c=a.document,d=a.navigator,e=a.location,f=function(){function J(){if(!e.isReady){try{c.documentElement.doScroll("left")}catch(a){setTimeout(J,1);return}e.ready()}}var e=function(a,b){return new e.fn.init(a,b,h)},f=a.jQuery,g=a.$,h,i=/^(?:[^#<]*(<[\w\W]+>)[^>]*$|#([\w\-]*)$)/,j=/\S/,k=/^\s+/,l=/\s+$/,m=/^<(\w+)\s*\/?>(?:<\/\1>)?$/,n=/^[\],:{}\s]*$/,o=/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,p=/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,q=/(?:^|:|,)(?:\s*\[)+/g,r=/(webkit)[ \/]([\w.]+)/,s=/(opera)(?:.*version)?[ \/]([\w.]+)/,t=/(msie) ([\w.]+)/,u=/(mozilla)(?:.*? rv:([\w.]+))?/,v=/-([a-z]|[0-9])/ig,w=/^-ms-/,x=function(a,b){return(b+"").toUpperCase()},y=d.userAgent,z,A,B,C=Object.prototype.toString,D=Object.prototype.hasOwnProperty,E=Array.prototype.push,F=Array.prototype.slice,G=String.prototype.trim,H=Array.prototype.indexOf,I={};e.fn=e.prototype={constructor:e,init:function(a,d,f){var g,h,j,k;if(!a)return this;if(a.nodeType){this.context=this[0]=a,this.length=1;return this}if(a==="body"&&!d&&c.body){this.context=c,this[0]=c.body,this.selector=a,this.length=1;return this}if(typeof a=="string"){a.charAt(0)!=="<"||a.charAt(a.length-1)!==">"||a.length<3?g=i.exec(a):g=[null,a,null];if(g&&(g[1]||!d)){if(g[1]){d=d instanceof e?d[0]:d,k=d?d.ownerDocument||d:c,j=m.exec(a),j?e.isPlainObject(d)?(a=[c.createElement(j[1])],e.fn.attr.call(a,d,!0)):a=[k.createElement(j[1])]:(j=e.buildFragment([g[1]],[k]),a=(j.cacheable?e.clone(j.fragment):j.fragment).childNodes);return e.merge(this,a)}h=c.getElementById(g[2]);if(h&&h.parentNode){if(h.id!==g[2])return f.find(a);this.length=1,this[0]=h}this.context=c,this.selector=a;return this}return!d||d.jquery?(d||f).find(a):this.constructor(d).find(a)}if(e.isFunction(a))return f.ready(a);a.selector!==b&&(this.selector=a.selector,this.context=a.context);return e.makeArray(a,this)},selector:"",jquery:"1.7.1",length:0,size:function(){return this.length},toArray:function(){return F.call(this,0)},get:function(a){return a==null?this.toArray():a<0?this[this.length+a]:this[a]},pushStack:function(a,b,c){var d=this.constructor();e.isArray(a)?E.apply(d,a):e.merge(d,a),d.prevObject=this,d.context=this.context,b==="find"?d.selector=this.selector+(this.selector?" ":"")+c:b&&(d.selector=this.selector+"."+b+"("+c+")");return d},each:function(a,b){return e.each(this,a,b)},ready:function(a){e.bindReady(),A.add(a);return this},eq:function(a){a=+a;return a===-1?this.slice(a):this.slice(a,a+1)},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},slice:function(){return this.pushStack(F.apply(this,arguments),"slice",F.call(arguments).join(","))},map:function(a){return this.pushStack(e.map(this,function(b,c){return a.call(b,c,b)}))},end:function(){return this.prevObject||this.constructor(null)},push:E,sort:[].sort,splice:[].splice},e.fn.init.prototype=e.fn,e.extend=e.fn.extend=function(){var a,c,d,f,g,h,i=arguments[0]||{},j=1,k=arguments.length,l=!1;typeof i=="boolean"&&(l=i,i=arguments[1]||{},j=2),typeof i!="object"&&!e.isFunction(i)&&(i={}),k===j&&(i=this,--j);for(;j<k;j++)if((a=arguments[j])!=null)for(c in a){d=i[c],f=a[c];if(i===f)continue;l&&f&&(e.isPlainObject(f)||(g=e.isArray(f)))?(g?(g=!1,h=d&&e.isArray(d)?d:[]):h=d&&e.isPlainObject(d)?d:{},i[c]=e.extend(l,h,f)):f!==b&&(i[c]=f)}return i},e.extend({noConflict:function(b){a.$===e&&(a.$=g),b&&a.jQuery===e&&(a.jQuery=f);return e},isReady:!1,readyWait:1,holdReady:function(a){a?e.readyWait++:e.ready(!0)},ready:function(a){if(a===!0&&!--e.readyWait||a!==!0&&!e.isReady){if(!c.body)return setTimeout(e.ready,1);e.isReady=!0;if(a!==!0&&--e.readyWait>0)return;A.fireWith(c,[e]),e.fn.trigger&&e(c).trigger("ready").off("ready")}},bindReady:function(){if(!A){A=e.Callbacks("once memory");if(c.readyState==="complete")return setTimeout(e.ready,1);if(c.addEventListener)c.addEventListener("DOMContentLoaded",B,!1),a.addEventListener("load",e.ready,!1);else if(c.attachEvent){c.attachEvent("onreadystatechange",B),a.attachEvent("onload",e.ready);var b=!1;try{b=a.frameElement==null}catch(d){}c.documentElement.doScroll&&b&&J()}}},isFunction:function(a){return e.type(a)==="function"},isArray:Array.isArray||function(a){return e.type(a)==="array"},isWindow:function(a){return a&&typeof a=="object"&&"setInterval"in a},isNumeric:function(a){return!isNaN(parseFloat(a))&&isFinite(a)},type:function(a){return a==null?String(a):I[C.call(a)]||"object"},isPlainObject:function(a){if(!a||e.type(a)!=="object"||a.nodeType||e.isWindow(a))return!1;try{if(a.constructor&&!D.call(a,"constructor")&&!D.call(a.constructor.prototype,"isPrototypeOf"))return!1}catch(c){return!1}var d;for(d in a);return d===b||D.call(a,d)},isEmptyObject:function(a){for(var b in a)return!1;return!0},error:function(a){throw new Error(a)},parseJSON:function(b){if(typeof b!="string"||!b)return null;b=e.trim(b);if(a.JSON&&a.JSON.parse)return a.JSON.parse(b);if(n.test(b.replace(o,"@").replace(p,"]").replace(q,"")))return(new Function("return "+b))();e.error("Invalid JSON: "+b)},parseXML:function(c){var d,f;try{a.DOMParser?(f=new DOMParser,d=f.parseFromString(c,"text/xml")):(d=new ActiveXObject("Microsoft.XMLDOM"),d.async="false",d.loadXML(c))}catch(g){d=b}(!d||!d.documentElement||d.getElementsByTagName("parsererror").length)&&e.error("Invalid XML: "+c);return d},noop:function(){},globalEval:function(b){b&&j.test(b)&&(a.execScript||function(b){a.eval.call(a,b)})(b)},camelCase:function(a){return a.replace(w,"ms-").replace(v,x)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toUpperCase()===b.toUpperCase()},each:function(a,c,d){var f,g=0,h=a.length,i=h===b||e.isFunction(a);if(d){if(i){for(f in a)if(c.apply(a[f],d)===!1)break}else for(;g<h;)if(c.apply(a[g++],d)===!1)break}else if(i){for(f in a)if(c.call(a[f],f,a[f])===!1)break}else for(;g<h;)if(c.call(a[g],g,a[g++])===!1)break;return a},trim:G?function(a){return a==null?"":G.call(a)}:function(a){return a==null?"":(a+"").replace(k,"").replace(l,"")},makeArray:function(a,b){var c=b||[];if(a!=null){var d=e.type(a);a.length==null||d==="string"||d==="function"||d==="regexp"||e.isWindow(a)?E.call(c,a):e.merge(c,a)}return c},inArray:function(a,b,c){var d;if(b){if(H)return H.call(b,a,c);d=b.length,c=c?c<0?Math.max(0,d+c):c:0;for(;c<d;c++)if(c in b&&b[c]===a)return c}return-1},merge:function(a,c){var d=a.length,e=0;if(typeof c.length=="number")for(var f=c.length;e<f;e++)a[d++]=c[e];else while(c[e]!==b)a[d++]=c[e++];a.length=d;return a},grep:function(a,b,c){var d=[],e;c=!!c;for(var f=0,g=a.length;f<g;f++)e=!!b(a[f],f),c!==e&&d.push(a[f]);return d},map:function(a,c,d){var f,g,h=[],i=0,j=a.length,k=a instanceof e||j!==b&&typeof j=="number"&&(j>0&&a[0]&&a[j-1]||j===0||e.isArray(a));if(k)for(;i<j;i++)f=c(a[i],i,d),f!=null&&(h[h.length]=f);else for(g in a)f=c(a[g],g,d),f!=null&&(h[h.length]=f);return h.concat.apply([],h)},guid:1,proxy:function(a,c){if(typeof c=="string"){var d=a[c];c=a,a=d}if(!e.isFunction(a))return b;var f=F.call(arguments,2),g=function(){return a.apply(c,f.concat(F.call(arguments)))};g.guid=a.guid=a.guid||g.guid||e.guid++;return g},access:function(a,c,d,f,g,h){var i=a.length;if(typeof c=="object"){for(var j in c)e.access(a,j,c[j],f,g,d);return a}if(d!==b){f=!h&&f&&e.isFunction(d);for(var k=0;k<i;k++)g(a[k],c,f?d.call(a[k],k,g(a[k],c)):d,h);return a}return i?g(a[0],c):b},now:function(){return(new Date).getTime()},uaMatch:function(a){a=a.toLowerCase();var b=r.exec(a)||s.exec(a)||t.exec(a)||a.indexOf("compatible")<0&&u.exec(a)||[];return{browser:b[1]||"",version:b[2]||"0"}},sub:function(){function a(b,c){return new a.fn.init(b,c)}e.extend(!0,a,this),a.superclass=this,a.fn=a.prototype=this(),a.fn.constructor=a,a.sub=this.sub,a.fn.init=function(d,f){f&&f instanceof e&&!(f instanceof a)&&(f=a(f));return e.fn.init.call(this,d,f,b)},a.fn.init.prototype=a.fn;var b=a(c);return a},browser:{}}),e.each("Boolean Number String Function Array Date RegExp Object".split(" "),function(a,b){I["[object "+b+"]"]=b.toLowerCase()}),z=e.uaMatch(y),z.browser&&(e.browser[z.browser]=!0,e.browser.version=z.version),e.browser.webkit&&(e.browser.safari=!0),j.test(" ")&&(k=/^[\s\xA0]+/,l=/[\s\xA0]+$/),h=e(c),c.addEventListener?B=function(){c.removeEventListener("DOMContentLoaded",B,!1),e.ready()}:c.attachEvent&&(B=function(){c.readyState==="complete"&&(c.detachEvent("onreadystatechange",B),e.ready())});return e}(),g={};f.Callbacks=function(a){a=a?g[a]||h(a):{};var c=[],d=[],e,i,j,k,l,m=function(b){var d,e,g,h,i;for(d=0,e=b.length;d<e;d++)g=b[d],h=f.type(g),h==="array"?m(g):h==="function"&&(!a.unique||!o.has(g))&&c.push(g)},n=function(b,f){f=f||[],e=!a.memory||[b,f],i=!0,l=j||0,j=0,k=c.length;for(;c&&l<k;l++)if(c[l].apply(b,f)===!1&&a.stopOnFalse){e=!0;break}i=!1,c&&(a.once?e===!0?o.disable():c=[]:d&&d.length&&(e=d.shift(),o.fireWith(e[0],e[1])))},o={add:function(){if(c){var a=c.length;m(arguments),i?k=c.length:e&&e!==!0&&(j=a,n(e[0],e[1]))}return this},remove:function(){if(c){var b=arguments,d=0,e=b.length;for(;d<e;d++)for(var f=0;f<c.length;f++)if(b[d]===c[f]){i&&f<=k&&(k--,f<=l&&l--),c.splice(f--,1);if(a.unique)break}}return this},has:function(a){if(c){var b=0,d=c.length;for(;b<d;b++)if(a===c[b])return!0}return!1},empty:function(){c=[];return this},disable:function(){c=d=e=b;return this},disabled:function(){return!c},lock:function(){d=b,(!e||e===!0)&&o.disable();return this},locked:function(){return!d},fireWith:function(b,c){d&&(i?a.once||d.push([b,c]):(!a.once||!e)&&n(b,c));return this},fire:function(){o.fireWith(this,arguments);return this},fired:function(){return!!e}};return o};var i=[].slice;f.extend({Deferred:function(a){var b=f.Callbacks("once memory"),c=f.Callbacks("once memory"),d=f.Callbacks("memory"),e="pending",g={resolve:b,reject:c,notify:d},h={done:b.add,fail:c.add,progress:d.add,state:function(){return e},isResolved:b.fired,isRejected:c.fired,then:function(a,b,c){i.done(a).fail(b).progress(c);return this},always:function(){i.done.apply(i,arguments).fail.apply(i,arguments);return this},pipe:function(a,b,c){return f.Deferred(function(d){f.each({done:[a,"resolve"],fail:[b,"reject"],progress:[c,"notify"]},function(a,b){var c=b[0],e=b[1],g;f.isFunction(c)?i[a](function(){g=c.apply(this,arguments),g&&f.isFunction(g.promise)?g.promise().then(d.resolve,d.reject,d.notify):d[e+"With"](this===i?d:this,[g])}):i[a](d[e])})}).promise()},promise:function(a){if(a==null)a=h;else for(var b in h)a[b]=h[b];return a}},i=h.promise({}),j;for(j in g)i[j]=g[j].fire,i[j+"With"]=g[j].fireWith;i.done(function(){e="resolved"},c.disable,d.lock).fail(function(){e="rejected"},b.disable,d.lock),a&&a.call(i,i);return i},when:function(a){function m(a){return function(b){e[a]=arguments.length>1?i.call(arguments,0):b,j.notifyWith(k,e)}}function l(a){return function(c){b[a]=arguments.length>1?i.call(arguments,0):c,--g||j.resolveWith(j,b)}}var b=i.call(arguments,0),c=0,d=b.length,e=Array(d),g=d,h=d,j=d<=1&&a&&f.isFunction(a.promise)?a:f.Deferred(),k=j.promise();if(d>1){for(;c<d;c++)b[c]&&b[c].promise&&f.isFunction(b[c].promise)?b[c].promise().then(l(c),j.reject,m(c)):--g;g||j.resolveWith(j,b)}else j!==a&&j.resolveWith(j,d?[a]:[]);return k}}),f.support=function(){var b,d,e,g,h,i,j,k,l,m,n,o,p,q=c.createElement("div"),r=c.documentElement;q.setAttribute("className","t"),q.innerHTML="   <link/><table></table><a href='/a' style='top:1px;float:left;opacity:.55;'>a</a><input type='checkbox'/>",d=q.getElementsByTagName("*"),e=q.getElementsByTagName("a")[0];if(!d||!d.length||!e)return{};g=c.createElement("select"),h=g.appendChild(c.createElement("option")),i=q.getElementsByTagName("input")[0],b={leadingWhitespace:q.firstChild.nodeType===3,tbody:!q.getElementsByTagName("tbody").length,htmlSerialize:!!q.getElementsByTagName("link").length,style:/top/.test(e.getAttribute("style")),hrefNormalized:e.getAttribute("href")==="/a",opacity:/^0.55/.test(e.style.opacity),cssFloat:!!e.style.cssFloat,checkOn:i.value==="on",optSelected:h.selected,getSetAttribute:q.className!=="t",enctype:!!c.createElement("form").enctype,html5Clone:c.createElement("nav").cloneNode(!0).outerHTML!=="<:nav></:nav>",submitBubbles:!0,changeBubbles:!0,focusinBubbles:!1,deleteExpando:!0,noCloneEvent:!0,inlineBlockNeedsLayout:!1,shrinkWrapBlocks:!1,reliableMarginRight:!0},i.checked=!0,b.noCloneChecked=i.cloneNode(!0).checked,g.disabled=!0,b.optDisabled=!h.disabled;try{delete q.test}catch(s){b.deleteExpando=!1}!q.addEventListener&&q.attachEvent&&q.fireEvent&&(q.attachEvent("onclick",function(){b.noCloneEvent=!1}),q.cloneNode(!0).fireEvent("onclick")),i=c.createElement("input"),i.value="t",i.setAttribute("type","radio"),b.radioValue=i.value==="t",i.setAttribute("checked","checked"),q.appendChild(i),k=c.createDocumentFragment(),k.appendChild(q.lastChild),b.checkClone=k.cloneNode(!0).cloneNode(!0).lastChild.checked,b.appendChecked=i.checked,k.removeChild(i),k.appendChild(q),q.innerHTML="",a.getComputedStyle&&(j=c.createElement("div"),j.style.width="0",j.style.marginRight="0",q.style.width="2px",q.appendChild(j),b.reliableMarginRight=(parseInt((a.getComputedStyle(j,null)||{marginRight:0}).marginRight,10)||0)===0);if(q.attachEvent)for(o in{submit:1,change:1,focusin:1})n="on"+o,p=n in q,p||(q.setAttribute(n,"return;"),p=typeof q[n]=="function"),b[o+"Bubbles"]=p;k.removeChild(q),k=g=h=j=q=i=null,f(function(){var a,d,e,g,h,i,j,k,m,n,o,r=c.getElementsByTagName("body")[0];!r||(j=1,k="position:absolute;top:0;left:0;width:1px;height:1px;margin:0;",m="visibility:hidden;border:0;",n="style='"+k+"border:5px solid #000;padding:0;'",o="<div "+n+"><div></div></div>"+"<table "+n+" cellpadding='0' cellspacing='0'>"+"<tr><td></td></tr></table>",a=c.createElement("div"),a.style.cssText=m+"width:0;height:0;position:static;top:0;margin-top:"+j+"px",r.insertBefore(a,r.firstChild),q=c.createElement("div"),a.appendChild(q),q.innerHTML="<table><tr><td style='padding:0;border:0;display:none'></td><td>t</td></tr></table>",l=q.getElementsByTagName("td"),p=l[0].offsetHeight===0,l[0].style.display="",l[1].style.display="none",b.reliableHiddenOffsets=p&&l[0].offsetHeight===0,q.innerHTML="",q.style.width=q.style.paddingLeft="1px",f.boxModel=b.boxModel=q.offsetWidth===2,typeof q.style.zoom!="undefined"&&(q.style.display="inline",q.style.zoom=1,b.inlineBlockNeedsLayout=q.offsetWidth===2,q.style.display="",q.innerHTML="<div style='width:4px;'></div>",b.shrinkWrapBlocks=q.offsetWidth!==2),q.style.cssText=k+m,q.innerHTML=o,d=q.firstChild,e=d.firstChild,h=d.nextSibling.firstChild.firstChild,i={doesNotAddBorder:e.offsetTop!==5,doesAddBorderForTableAndCells:h.offsetTop===5},e.style.position="fixed",e.style.top="20px",i.fixedPosition=e.offsetTop===20||e.offsetTop===15,e.style.position=e.style.top="",d.style.overflow="hidden",d.style.position="relative",i.subtractsBorderForOverflowNotVisible=e.offsetTop===-5,i.doesNotIncludeMarginInBodyOffset=r.offsetTop!==j,r.removeChild(a),q=a=null,f.extend(b,i))});return b}();var j=/^(?:\{.*\}|\[.*\])$/,k=/([A-Z])/g;f.extend({cache:{},uuid:0,expando:"jQuery"+(f.fn.jquery+Math.random()).replace(/\D/g,""),noData:{embed:!0,object:"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000",applet:!0},hasData:function(a){a=a.nodeType?f.cache[a[f.expando]]:a[f.expando];return!!a&&!m(a)},data:function(a,c,d,e){if(!!f.acceptData(a)){var g,h,i,j=f.expando,k=typeof c=="string",l=a.nodeType,m=l?f.cache:a,n=l?a[j]:a[j]&&j,o=c==="events";if((!n||!m[n]||!o&&!e&&!m[n].data)&&k&&d===b)return;n||(l?a[j]=n=++f.uuid:n=j),m[n]||(m[n]={},l||(m[n].toJSON=f.noop));if(typeof c=="object"||typeof c=="function")e?m[n]=f.extend(m[n],c):m[n].data=f.extend(m[n].data,c);g=h=m[n],e||(h.data||(h.data={}),h=h.data),d!==b&&(h[f.camelCase(c)]=d);if(o&&!h[c])return g.events;k?(i=h[c],i==null&&(i=h[f.camelCase(c)])):i=h;return i}},removeData:function(a,b,c){if(!!f.acceptData(a)){var d,e,g,h=f.expando,i=a.nodeType,j=i?f.cache:a,k=i?a[h]:h;if(!j[k])return;if(b){d=c?j[k]:j[k].data;if(d){f.isArray(b)||(b in d?b=[b]:(b=f.camelCase(b),b in d?b=[b]:b=b.split(" ")));for(e=0,g=b.length;e<g;e++)delete d[b[e]];if(!(c?m:f.isEmptyObject)(d))return}}if(!c){delete j[k].data;if(!m(j[k]))return}f.support.deleteExpando||!j.setInterval?delete j[k]:j[k]=null,i&&(f.support.deleteExpando?delete a[h]:a.removeAttribute?a.removeAttribute(h):a[h]=null)}},_data:function(a,b,c){return f.data(a,b,c,!0)},acceptData:function(a){if(a.nodeName){var b=f.noData[a.nodeName.toLowerCase()];if(b)return b!==!0&&a.getAttribute("classid")===b}return!0}}),f.fn.extend({data:function(a,c){var d,e,g,h=null;if(typeof a=="undefined"){if(this.length){h=f.data(this[0]);if(this[0].nodeType===1&&!f._data(this[0],"parsedAttrs")){e=this[0].attributes;for(var i=0,j=e.length;i<j;i++)g=e[i].name,g.indexOf("data-")===0&&(g=f.camelCase(g.substring(5)),l(this[0],g,h[g]));f._data(this[0],"parsedAttrs",!0)}}return h}if(typeof a=="object")return this.each(function(){f.data(this,a)});d=a.split("."),d[1]=d[1]?"."+d[1]:"";if(c===b){h=this.triggerHandler("getData"+d[1]+"!",[d[0]]),h===b&&this.length&&(h=f.data(this[0],a),h=l(this[0],a,h));return h===b&&d[1]?this.data(d[0]):h}return this.each(function(){var b=f(this),e=[d[0],c];b.triggerHandler("setData"+d[1]+"!",e),f.data(this,a,c),b.triggerHandler("changeData"+d[1]+"!",e)})},removeData:function(a){return this.each(function(){f.removeData(this,a)})}}),f.extend({_mark:function(a,b){a&&(b=(b||"fx")+"mark",f._data(a,b,(f._data(a,b)||0)+1))},_unmark:function(a,b,c){a!==!0&&(c=b,b=a,a=!1);if(b){c=c||"fx";var d=c+"mark",e=a?0:(f._data(b,d)||1)-1;e?f._data(b,d,e):(f.removeData(b,d,!0),n(b,c,"mark"))}},queue:function(a,b,c){var d;if(a){b=(b||"fx")+"queue",d=f._data(a,b),c&&(!d||f.isArray(c)?d=f._data(a,b,f.makeArray(c)):d.push(c));return d||[]}},dequeue:function(a,b){b=b||"fx";var c=f.queue(a,b),d=c.shift(),e={};d==="inprogress"&&(d=c.shift()),d&&(b==="fx"&&c.unshift("inprogress"),f._data(a,b+".run",e),d.call(a,function(){f.dequeue(a,b)},e)),c.length||(f.removeData(a,b+"queue "+b+".run",!0),n(a,b,"queue"))}}),f.fn.extend({queue:function(a,c){typeof a!="string"&&(c=a,a="fx");if(c===b)return f.queue(this[0],a);return this.each(function(){var b=f.queue(this,a,c);a==="fx"&&b[0]!=="inprogress"&&f.dequeue(this,a)})},dequeue:function(a){return this.each(function(){f.dequeue(this,a)})},delay:function(a,b){a=f.fx?f.fx.speeds[a]||a:a,b=b||"fx";return this.queue(b,function(b,c){var d=setTimeout(b,a);c.stop=function(){clearTimeout(d)}})},clearQueue:function(a){return this.queue(a||"fx",[])},promise:function(a,c){function m(){--h||d.resolveWith(e,[e])}typeof a!="string"&&(c=a,a=b),a=a||"fx";var d=f.Deferred(),e=this,g=e.length,h=1,i=a+"defer",j=a+"queue",k=a+"mark",l;while(g--)if(l=f.data(e[g],i,b,!0)||(f.data(e[g],j,b,!0)||f.data(e[g],k,b,!0))&&f.data(e[g],i,f.Callbacks("once memory"),!0))h++,l.add(m);m();return d.promise()}});var o=/[\n\t\r]/g,p=/\s+/,q=/\r/g,r=/^(?:button|input)$/i,s=/^(?:button|input|object|select|textarea)$/i,t=/^a(?:rea)?$/i,u=/^(?:autofocus|autoplay|async|checked|controls|defer|disabled|hidden|loop|multiple|open|readonly|required|scoped|selected)$/i,v=f.support.getSetAttribute,w,x,y;f.fn.extend({attr:function(a,b){return f.access(this,a,b,!0,f.attr)},removeAttr:function(a){return this.each(function(){f.removeAttr(this,a)})},prop:function(a,b){return f.access(this,a,b,!0,f.prop)},removeProp:function(a){a=f.propFix[a]||a;return this.each(function(){try{this[a]=b,delete this[a]}catch(c){}})},addClass:function(a){var b,c,d,e,g,h,i;if(f.isFunction(a))return this.each(function(b){f(this).addClass(a.call(this,b,this.className))});if(a&&typeof a=="string"){b=a.split(p);for(c=0,d=this.length;c<d;c++){e=this[c];if(e.nodeType===1)if(!e.className&&b.length===1)e.className=a;else{g=" "+e.className+" ";for(h=0,i=b.length;h<i;h++)~g.indexOf(" "+b[h]+" ")||(g+=b[h]+" ");e.className=f.trim(g)}}}return this},removeClass:function(a){var c,d,e,g,h,i,j;if(f.isFunction(a))return this.each(function(b){f(this).removeClass(a.call(this,b,this.className))});if(a&&typeof a=="string"||a===b){c=(a||"").split(p);for(d=0,e=this.length;d<e;d++){g=this[d];if(g.nodeType===1&&g.className)if(a){h=(" "+g.className+" ").replace(o," ");for(i=0,j=c.length;i<j;i++)h=h.replace(" "+c[i]+" "," ");g.className=f.trim(h)}else g.className=""}}return this},toggleClass:function(a,b){var c=typeof a,d=typeof b=="boolean";if(f.isFunction(a))return this.each(function(c){f(this).toggleClass(a.call(this,c,this.className,b),b)});return this.each(function(){if(c==="string"){var e,g=0,h=f(this),i=b,j=a.split(p);while(e=j[g++])i=d?i:!h.hasClass(e),h[i?"addClass":"removeClass"](e)}else if(c==="undefined"||c==="boolean")this.className&&f._data(this,"__className__",this.className),this.className=this.className||a===!1?"":f._data(this,"__className__")||""})},hasClass:function(a){var b=" "+a+" ",c=0,d=this.length;for(;c<d;c++)if(this[c].nodeType===1&&(" "+this[c].className+" ").replace(o," ").indexOf(b)>-1)return!0;return!1},val:function(a){var c,d,e,g=this[0];{if(!!arguments.length){e=f.isFunction(a);return this.each(function(d){var g=f(this),h;if(this.nodeType===1){e?h=a.call(this,d,g.val()):h=a,h==null?h="":typeof h=="number"?h+="":f.isArray(h)&&(h=f.map(h,function(a){return a==null?"":a+""})),c=f.valHooks[this.nodeName.toLowerCase()]||f.valHooks[this.type];if(!c||!("set"in c)||c.set(this,h,"value")===b)this.value=h}})}if(g){c=f.valHooks[g.nodeName.toLowerCase()]||f.valHooks[g.type];if(c&&"get"in c&&(d=c.get(g,"value"))!==b)return d;d=g.value;return typeof d=="string"?d.replace(q,""):d==null?"":d}}}}),f.extend({valHooks:{option:{get:function(a){var b=a.attributes.value;return!b||b.specified?a.value:a.text}},select:{get:function(a){var b,c,d,e,g=a.selectedIndex,h=[],i=a.options,j=a.type==="select-one";if(g<0)return null;c=j?g:0,d=j?g+1:i.length;for(;c<d;c++){e=i[c];if(e.selected&&(f.support.optDisabled?!e.disabled:e.getAttribute("disabled")===null)&&(!e.parentNode.disabled||!f.nodeName(e.parentNode,"optgroup"))){b=f(e).val();if(j)return b;h.push(b)}}if(j&&!h.length&&i.length)return f(i[g]).val();return h},set:function(a,b){var c=f.makeArray(b);f(a).find("option").each(function(){this.selected=f.inArray(f(this).val(),c)>=0}),c.length||(a.selectedIndex=-1);return c}}},attrFn:{val:!0,css:!0,html:!0,text:!0,data:!0,width:!0,height:!0,offset:!0},attr:function(a,c,d,e){var g,h,i,j=a.nodeType;if(!!a&&j!==3&&j!==8&&j!==2){if(e&&c in f.attrFn)return f(a)[c](d);if(typeof a.getAttribute=="undefined")return f.prop(a,c,d);i=j!==1||!f.isXMLDoc(a),i&&(c=c.toLowerCase(),h=f.attrHooks[c]||(u.test(c)?x:w));if(d!==b){if(d===null){f.removeAttr(a,c);return}if(h&&"set"in h&&i&&(g=h.set(a,d,c))!==b)return g;a.setAttribute(c,""+d);return d}if(h&&"get"in h&&i&&(g=h.get(a,c))!==null)return g;g=a.getAttribute(c);return g===null?b:g}},removeAttr:function(a,b){var c,d,e,g,h=0;if(b&&a.nodeType===1){d=b.toLowerCase().split(p),g=d.length;for(;h<g;h++)e=d[h],e&&(c=f.propFix[e]||e,f.attr(a,e,""),a.removeAttribute(v?e:c),u.test(e)&&c in a&&(a[c]=!1))}},attrHooks:{type:{set:function(a,b){if(r.test(a.nodeName)&&a.parentNode)f.error("type property can't be changed");else if(!f.support.radioValue&&b==="radio"&&f.nodeName(a,"input")){var c=a.value;a.setAttribute("type",b),c&&(a.value=c);return b}}},value:{get:function(a,b){if(w&&f.nodeName(a,"button"))return w.get(a,b);return b in a?a.value:null},set:function(a,b,c){if(w&&f.nodeName(a,"button"))return w.set(a,b,c);a.value=b}}},propFix:{tabindex:"tabIndex",readonly:"readOnly","for":"htmlFor","class":"className",maxlength:"maxLength",cellspacing:"cellSpacing",cellpadding:"cellPadding",rowspan:"rowSpan",colspan:"colSpan",usemap:"useMap",frameborder:"frameBorder",contenteditable:"contentEditable"},prop:function(a,c,d){var e,g,h,i=a.nodeType;if(!!a&&i!==3&&i!==8&&i!==2){h=i!==1||!f.isXMLDoc(a),h&&(c=f.propFix[c]||c,g=f.propHooks[c]);return d!==b?g&&"set"in g&&(e=g.set(a,d,c))!==b?e:a[c]=d:g&&"get"in g&&(e=g.get(a,c))!==null?e:a[c]}},propHooks:{tabIndex:{get:function(a){var c=a.getAttributeNode("tabindex");return c&&c.specified?parseInt(c.value,10):s.test(a.nodeName)||t.test(a.nodeName)&&a.href?0:b}}}}),f.attrHooks.tabindex=f.propHooks.tabIndex,x={get:function(a,c){var d,e=f.prop(a,c);return e===!0||typeof e!="boolean"&&(d=a.getAttributeNode(c))&&d.nodeValue!==!1?c.toLowerCase():b},set:function(a,b,c){var d;b===!1?f.removeAttr(a,c):(d=f.propFix[c]||c,d in a&&(a[d]=!0),a.setAttribute(c,c.toLowerCase()));return c}},v||(y={name:!0,id:!0},w=f.valHooks.button={get:function(a,c){var d;d=a.getAttributeNode(c);return d&&(y[c]?d.nodeValue!=="":d.specified)?d.nodeValue:b},set:function(a,b,d){var e=a.getAttributeNode(d);e||(e=c.createAttribute(d),a.setAttributeNode(e));return e.nodeValue=b+""}},f.attrHooks.tabindex.set=w.set,f.each(["width","height"],function(a,b){f.attrHooks[b]=f.extend(f.attrHooks[b],{set:function(a,c){if(c===""){a.setAttribute(b,"auto");return c}}})}),f.attrHooks.contenteditable={get:w.get,set:function(a,b,c){b===""&&(b="false"),w.set(a,b,c)}}),f.support.hrefNormalized||f.each(["href","src","width","height"],function(a,c){f.attrHooks[c]=f.extend(f.attrHooks[c],{get:function(a){var d=a.getAttribute(c,2);return d===null?b:d}})}),f.support.style||(f.attrHooks.style={get:function(a){return a.style.cssText.toLowerCase()||b},set:function(a,b){return a.style.cssText=""+b}}),f.support.optSelected||(f.propHooks.selected=f.extend(f.propHooks.selected,{get:function(a){var b=a.parentNode;b&&(b.selectedIndex,b.parentNode&&b.parentNode.selectedIndex);return null}})),f.support.enctype||(f.propFix.enctype="encoding"),f.support.checkOn||f.each(["radio","checkbox"],function(){f.valHooks[this]={get:function(a){return a.getAttribute("value")===null?"on":a.value}}}),f.each(["radio","checkbox"],function(){f.valHooks[this]=f.extend(f.valHooks[this],{set:function(a,b){if(f.isArray(b))return a.checked=f.inArray(f(a).val(),b)>=0}})});var z=/^(?:textarea|input|select)$/i,A=/^([^\.]*)?(?:\.(.+))?$/,B=/\bhover(\.\S+)?\b/,C=/^key/,D=/^(?:mouse|contextmenu)|click/,E=/^(?:focusinfocus|focusoutblur)$/,F=/^(\w*)(?:#([\w\-]+))?(?:\.([\w\-]+))?$/,G=function(a){var b=F.exec(a);b&&(b[1]=(b[1]||"").toLowerCase(),b[3]=b[3]&&new RegExp("(?:^|\\s)"+b[3]+"(?:\\s|$)"));return b},H=function(a,b){var c=a.attributes||{};return(!b[1]||a.nodeName.toLowerCase()===b[1])&&(!b[2]||(c.id||{}).value===b[2])&&(!b[3]||b[3].test((c["class"]||{}).value))},I=function(a){return f.event.special.hover?a:a.replace(B,"mouseenter$1 mouseleave$1")};
-f.event={add:function(a,c,d,e,g){var h,i,j,k,l,m,n,o,p,q,r,s;if(!(a.nodeType===3||a.nodeType===8||!c||!d||!(h=f._data(a)))){d.handler&&(p=d,d=p.handler),d.guid||(d.guid=f.guid++),j=h.events,j||(h.events=j={}),i=h.handle,i||(h.handle=i=function(a){return typeof f!="undefined"&&(!a||f.event.triggered!==a.type)?f.event.dispatch.apply(i.elem,arguments):b},i.elem=a),c=f.trim(I(c)).split(" ");for(k=0;k<c.length;k++){l=A.exec(c[k])||[],m=l[1],n=(l[2]||"").split(".").sort(),s=f.event.special[m]||{},m=(g?s.delegateType:s.bindType)||m,s=f.event.special[m]||{},o=f.extend({type:m,origType:l[1],data:e,handler:d,guid:d.guid,selector:g,quick:G(g),namespace:n.join(".")},p),r=j[m];if(!r){r=j[m]=[],r.delegateCount=0;if(!s.setup||s.setup.call(a,e,n,i)===!1)a.addEventListener?a.addEventListener(m,i,!1):a.attachEvent&&a.attachEvent("on"+m,i)}s.add&&(s.add.call(a,o),o.handler.guid||(o.handler.guid=d.guid)),g?r.splice(r.delegateCount++,0,o):r.push(o),f.event.global[m]=!0}a=null}},global:{},remove:function(a,b,c,d,e){var g=f.hasData(a)&&f._data(a),h,i,j,k,l,m,n,o,p,q,r,s;if(!!g&&!!(o=g.events)){b=f.trim(I(b||"")).split(" ");for(h=0;h<b.length;h++){i=A.exec(b[h])||[],j=k=i[1],l=i[2];if(!j){for(j in o)f.event.remove(a,j+b[h],c,d,!0);continue}p=f.event.special[j]||{},j=(d?p.delegateType:p.bindType)||j,r=o[j]||[],m=r.length,l=l?new RegExp("(^|\\.)"+l.split(".").sort().join("\\.(?:.*\\.)?")+"(\\.|$)"):null;for(n=0;n<r.length;n++)s=r[n],(e||k===s.origType)&&(!c||c.guid===s.guid)&&(!l||l.test(s.namespace))&&(!d||d===s.selector||d==="**"&&s.selector)&&(r.splice(n--,1),s.selector&&r.delegateCount--,p.remove&&p.remove.call(a,s));r.length===0&&m!==r.length&&((!p.teardown||p.teardown.call(a,l)===!1)&&f.removeEvent(a,j,g.handle),delete o[j])}f.isEmptyObject(o)&&(q=g.handle,q&&(q.elem=null),f.removeData(a,["events","handle"],!0))}},customEvent:{getData:!0,setData:!0,changeData:!0},trigger:function(c,d,e,g){if(!e||e.nodeType!==3&&e.nodeType!==8){var h=c.type||c,i=[],j,k,l,m,n,o,p,q,r,s;if(E.test(h+f.event.triggered))return;h.indexOf("!")>=0&&(h=h.slice(0,-1),k=!0),h.indexOf(".")>=0&&(i=h.split("."),h=i.shift(),i.sort());if((!e||f.event.customEvent[h])&&!f.event.global[h])return;c=typeof c=="object"?c[f.expando]?c:new f.Event(h,c):new f.Event(h),c.type=h,c.isTrigger=!0,c.exclusive=k,c.namespace=i.join("."),c.namespace_re=c.namespace?new RegExp("(^|\\.)"+i.join("\\.(?:.*\\.)?")+"(\\.|$)"):null,o=h.indexOf(":")<0?"on"+h:"";if(!e){j=f.cache;for(l in j)j[l].events&&j[l].events[h]&&f.event.trigger(c,d,j[l].handle.elem,!0);return}c.result=b,c.target||(c.target=e),d=d!=null?f.makeArray(d):[],d.unshift(c),p=f.event.special[h]||{};if(p.trigger&&p.trigger.apply(e,d)===!1)return;r=[[e,p.bindType||h]];if(!g&&!p.noBubble&&!f.isWindow(e)){s=p.delegateType||h,m=E.test(s+h)?e:e.parentNode,n=null;for(;m;m=m.parentNode)r.push([m,s]),n=m;n&&n===e.ownerDocument&&r.push([n.defaultView||n.parentWindow||a,s])}for(l=0;l<r.length&&!c.isPropagationStopped();l++)m=r[l][0],c.type=r[l][1],q=(f._data(m,"events")||{})[c.type]&&f._data(m,"handle"),q&&q.apply(m,d),q=o&&m[o],q&&f.acceptData(m)&&q.apply(m,d)===!1&&c.preventDefault();c.type=h,!g&&!c.isDefaultPrevented()&&(!p._default||p._default.apply(e.ownerDocument,d)===!1)&&(h!=="click"||!f.nodeName(e,"a"))&&f.acceptData(e)&&o&&e[h]&&(h!=="focus"&&h!=="blur"||c.target.offsetWidth!==0)&&!f.isWindow(e)&&(n=e[o],n&&(e[o]=null),f.event.triggered=h,e[h](),f.event.triggered=b,n&&(e[o]=n));return c.result}},dispatch:function(c){c=f.event.fix(c||a.event);var d=(f._data(this,"events")||{})[c.type]||[],e=d.delegateCount,g=[].slice.call(arguments,0),h=!c.exclusive&&!c.namespace,i=[],j,k,l,m,n,o,p,q,r,s,t;g[0]=c,c.delegateTarget=this;if(e&&!c.target.disabled&&(!c.button||c.type!=="click")){m=f(this),m.context=this.ownerDocument||this;for(l=c.target;l!=this;l=l.parentNode||this){o={},q=[],m[0]=l;for(j=0;j<e;j++)r=d[j],s=r.selector,o[s]===b&&(o[s]=r.quick?H(l,r.quick):m.is(s)),o[s]&&q.push(r);q.length&&i.push({elem:l,matches:q})}}d.length>e&&i.push({elem:this,matches:d.slice(e)});for(j=0;j<i.length&&!c.isPropagationStopped();j++){p=i[j],c.currentTarget=p.elem;for(k=0;k<p.matches.length&&!c.isImmediatePropagationStopped();k++){r=p.matches[k];if(h||!c.namespace&&!r.namespace||c.namespace_re&&c.namespace_re.test(r.namespace))c.data=r.data,c.handleObj=r,n=((f.event.special[r.origType]||{}).handle||r.handler).apply(p.elem,g),n!==b&&(c.result=n,n===!1&&(c.preventDefault(),c.stopPropagation()))}}return c.result},props:"attrChange attrName relatedNode srcElement altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "),fixHooks:{},keyHooks:{props:"char charCode key keyCode".split(" "),filter:function(a,b){a.which==null&&(a.which=b.charCode!=null?b.charCode:b.keyCode);return a}},mouseHooks:{props:"button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement".split(" "),filter:function(a,d){var e,f,g,h=d.button,i=d.fromElement;a.pageX==null&&d.clientX!=null&&(e=a.target.ownerDocument||c,f=e.documentElement,g=e.body,a.pageX=d.clientX+(f&&f.scrollLeft||g&&g.scrollLeft||0)-(f&&f.clientLeft||g&&g.clientLeft||0),a.pageY=d.clientY+(f&&f.scrollTop||g&&g.scrollTop||0)-(f&&f.clientTop||g&&g.clientTop||0)),!a.relatedTarget&&i&&(a.relatedTarget=i===a.target?d.toElement:i),!a.which&&h!==b&&(a.which=h&1?1:h&2?3:h&4?2:0);return a}},fix:function(a){if(a[f.expando])return a;var d,e,g=a,h=f.event.fixHooks[a.type]||{},i=h.props?this.props.concat(h.props):this.props;a=f.Event(g);for(d=i.length;d;)e=i[--d],a[e]=g[e];a.target||(a.target=g.srcElement||c),a.target.nodeType===3&&(a.target=a.target.parentNode),a.metaKey===b&&(a.metaKey=a.ctrlKey);return h.filter?h.filter(a,g):a},special:{ready:{setup:f.bindReady},load:{noBubble:!0},focus:{delegateType:"focusin"},blur:{delegateType:"focusout"},beforeunload:{setup:function(a,b,c){f.isWindow(this)&&(this.onbeforeunload=c)},teardown:function(a,b){this.onbeforeunload===b&&(this.onbeforeunload=null)}}},simulate:function(a,b,c,d){var e=f.extend(new f.Event,c,{type:a,isSimulated:!0,originalEvent:{}});d?f.event.trigger(e,null,b):f.event.dispatch.call(b,e),e.isDefaultPrevented()&&c.preventDefault()}},f.event.handle=f.event.dispatch,f.removeEvent=c.removeEventListener?function(a,b,c){a.removeEventListener&&a.removeEventListener(b,c,!1)}:function(a,b,c){a.detachEvent&&a.detachEvent("on"+b,c)},f.Event=function(a,b){if(!(this instanceof f.Event))return new f.Event(a,b);a&&a.type?(this.originalEvent=a,this.type=a.type,this.isDefaultPrevented=a.defaultPrevented||a.returnValue===!1||a.getPreventDefault&&a.getPreventDefault()?K:J):this.type=a,b&&f.extend(this,b),this.timeStamp=a&&a.timeStamp||f.now(),this[f.expando]=!0},f.Event.prototype={preventDefault:function(){this.isDefaultPrevented=K;var a=this.originalEvent;!a||(a.preventDefault?a.preventDefault():a.returnValue=!1)},stopPropagation:function(){this.isPropagationStopped=K;var a=this.originalEvent;!a||(a.stopPropagation&&a.stopPropagation(),a.cancelBubble=!0)},stopImmediatePropagation:function(){this.isImmediatePropagationStopped=K,this.stopPropagation()},isDefaultPrevented:J,isPropagationStopped:J,isImmediatePropagationStopped:J},f.each({mouseenter:"mouseover",mouseleave:"mouseout"},function(a,b){f.event.special[a]={delegateType:b,bindType:b,handle:function(a){var c=this,d=a.relatedTarget,e=a.handleObj,g=e.selector,h;if(!d||d!==c&&!f.contains(c,d))a.type=e.origType,h=e.handler.apply(this,arguments),a.type=b;return h}}}),f.support.submitBubbles||(f.event.special.submit={setup:function(){if(f.nodeName(this,"form"))return!1;f.event.add(this,"click._submit keypress._submit",function(a){var c=a.target,d=f.nodeName(c,"input")||f.nodeName(c,"button")?c.form:b;d&&!d._submit_attached&&(f.event.add(d,"submit._submit",function(a){this.parentNode&&!a.isTrigger&&f.event.simulate("submit",this.parentNode,a,!0)}),d._submit_attached=!0)})},teardown:function(){if(f.nodeName(this,"form"))return!1;f.event.remove(this,"._submit")}}),f.support.changeBubbles||(f.event.special.change={setup:function(){if(z.test(this.nodeName)){if(this.type==="checkbox"||this.type==="radio")f.event.add(this,"propertychange._change",function(a){a.originalEvent.propertyName==="checked"&&(this._just_changed=!0)}),f.event.add(this,"click._change",function(a){this._just_changed&&!a.isTrigger&&(this._just_changed=!1,f.event.simulate("change",this,a,!0))});return!1}f.event.add(this,"beforeactivate._change",function(a){var b=a.target;z.test(b.nodeName)&&!b._change_attached&&(f.event.add(b,"change._change",function(a){this.parentNode&&!a.isSimulated&&!a.isTrigger&&f.event.simulate("change",this.parentNode,a,!0)}),b._change_attached=!0)})},handle:function(a){var b=a.target;if(this!==b||a.isSimulated||a.isTrigger||b.type!=="radio"&&b.type!=="checkbox")return a.handleObj.handler.apply(this,arguments)},teardown:function(){f.event.remove(this,"._change");return z.test(this.nodeName)}}),f.support.focusinBubbles||f.each({focus:"focusin",blur:"focusout"},function(a,b){var d=0,e=function(a){f.event.simulate(b,a.target,f.event.fix(a),!0)};f.event.special[b]={setup:function(){d++===0&&c.addEventListener(a,e,!0)},teardown:function(){--d===0&&c.removeEventListener(a,e,!0)}}}),f.fn.extend({on:function(a,c,d,e,g){var h,i;if(typeof a=="object"){typeof c!="string"&&(d=c,c=b);for(i in a)this.on(i,c,d,a[i],g);return this}d==null&&e==null?(e=c,d=c=b):e==null&&(typeof c=="string"?(e=d,d=b):(e=d,d=c,c=b));if(e===!1)e=J;else if(!e)return this;g===1&&(h=e,e=function(a){f().off(a);return h.apply(this,arguments)},e.guid=h.guid||(h.guid=f.guid++));return this.each(function(){f.event.add(this,a,e,d,c)})},one:function(a,b,c,d){return this.on.call(this,a,b,c,d,1)},off:function(a,c,d){if(a&&a.preventDefault&&a.handleObj){var e=a.handleObj;f(a.delegateTarget).off(e.namespace?e.type+"."+e.namespace:e.type,e.selector,e.handler);return this}if(typeof a=="object"){for(var g in a)this.off(g,c,a[g]);return this}if(c===!1||typeof c=="function")d=c,c=b;d===!1&&(d=J);return this.each(function(){f.event.remove(this,a,d,c)})},bind:function(a,b,c){return this.on(a,null,b,c)},unbind:function(a,b){return this.off(a,null,b)},live:function(a,b,c){f(this.context).on(a,this.selector,b,c);return this},die:function(a,b){f(this.context).off(a,this.selector||"**",b);return this},delegate:function(a,b,c,d){return this.on(b,a,c,d)},undelegate:function(a,b,c){return arguments.length==1?this.off(a,"**"):this.off(b,a,c)},trigger:function(a,b){return this.each(function(){f.event.trigger(a,b,this)})},triggerHandler:function(a,b){if(this[0])return f.event.trigger(a,b,this[0],!0)},toggle:function(a){var b=arguments,c=a.guid||f.guid++,d=0,e=function(c){var e=(f._data(this,"lastToggle"+a.guid)||0)%d;f._data(this,"lastToggle"+a.guid,e+1),c.preventDefault();return b[e].apply(this,arguments)||!1};e.guid=c;while(d<b.length)b[d++].guid=c;return this.click(e)},hover:function(a,b){return this.mouseenter(a).mouseleave(b||a)}}),f.each("blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error contextmenu".split(" "),function(a,b){f.fn[b]=function(a,c){c==null&&(c=a,a=null);return arguments.length>0?this.on(b,null,a,c):this.trigger(b)},f.attrFn&&(f.attrFn[b]=!0),C.test(b)&&(f.event.fixHooks[b]=f.event.keyHooks),D.test(b)&&(f.event.fixHooks[b]=f.event.mouseHooks)}),function(){function x(a,b,c,e,f,g){for(var h=0,i=e.length;h<i;h++){var j=e[h];if(j){var k=!1;j=j[a];while(j){if(j[d]===c){k=e[j.sizset];break}if(j.nodeType===1){g||(j[d]=c,j.sizset=h);if(typeof b!="string"){if(j===b){k=!0;break}}else if(m.filter(b,[j]).length>0){k=j;break}}j=j[a]}e[h]=k}}}function w(a,b,c,e,f,g){for(var h=0,i=e.length;h<i;h++){var j=e[h];if(j){var k=!1;j=j[a];while(j){if(j[d]===c){k=e[j.sizset];break}j.nodeType===1&&!g&&(j[d]=c,j.sizset=h);if(j.nodeName.toLowerCase()===b){k=j;break}j=j[a]}e[h]=k}}}var a=/((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^\[\]]*\]|['"][^'"]*['"]|[^\[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,d="sizcache"+(Math.random()+"").replace(".",""),e=0,g=Object.prototype.toString,h=!1,i=!0,j=/\\/g,k=/\r\n/g,l=/\W/;[0,0].sort(function(){i=!1;return 0});var m=function(b,d,e,f){e=e||[],d=d||c;var h=d;if(d.nodeType!==1&&d.nodeType!==9)return[];if(!b||typeof b!="string")return e;var i,j,k,l,n,q,r,t,u=!0,v=m.isXML(d),w=[],x=b;do{a.exec(""),i=a.exec(x);if(i){x=i[3],w.push(i[1]);if(i[2]){l=i[3];break}}}while(i);if(w.length>1&&p.exec(b))if(w.length===2&&o.relative[w[0]])j=y(w[0]+w[1],d,f);else{j=o.relative[w[0]]?[d]:m(w.shift(),d);while(w.length)b=w.shift(),o.relative[b]&&(b+=w.shift()),j=y(b,j,f)}else{!f&&w.length>1&&d.nodeType===9&&!v&&o.match.ID.test(w[0])&&!o.match.ID.test(w[w.length-1])&&(n=m.find(w.shift(),d,v),d=n.expr?m.filter(n.expr,n.set)[0]:n.set[0]);if(d){n=f?{expr:w.pop(),set:s(f)}:m.find(w.pop(),w.length===1&&(w[0]==="~"||w[0]==="+")&&d.parentNode?d.parentNode:d,v),j=n.expr?m.filter(n.expr,n.set):n.set,w.length>0?k=s(j):u=!1;while(w.length)q=w.pop(),r=q,o.relative[q]?r=w.pop():q="",r==null&&(r=d),o.relative[q](k,r,v)}else k=w=[]}k||(k=j),k||m.error(q||b);if(g.call(k)==="[object Array]")if(!u)e.push.apply(e,k);else if(d&&d.nodeType===1)for(t=0;k[t]!=null;t++)k[t]&&(k[t]===!0||k[t].nodeType===1&&m.contains(d,k[t]))&&e.push(j[t]);else for(t=0;k[t]!=null;t++)k[t]&&k[t].nodeType===1&&e.push(j[t]);else s(k,e);l&&(m(l,h,e,f),m.uniqueSort(e));return e};m.uniqueSort=function(a){if(u){h=i,a.sort(u);if(h)for(var b=1;b<a.length;b++)a[b]===a[b-1]&&a.splice(b--,1)}return a},m.matches=function(a,b){return m(a,null,null,b)},m.matchesSelector=function(a,b){return m(b,null,null,[a]).length>0},m.find=function(a,b,c){var d,e,f,g,h,i;if(!a)return[];for(e=0,f=o.order.length;e<f;e++){h=o.order[e];if(g=o.leftMatch[h].exec(a)){i=g[1],g.splice(1,1);if(i.substr(i.length-1)!=="\\"){g[1]=(g[1]||"").replace(j,""),d=o.find[h](g,b,c);if(d!=null){a=a.replace(o.match[h],"");break}}}}d||(d=typeof b.getElementsByTagName!="undefined"?b.getElementsByTagName("*"):[]);return{set:d,expr:a}},m.filter=function(a,c,d,e){var f,g,h,i,j,k,l,n,p,q=a,r=[],s=c,t=c&&c[0]&&m.isXML(c[0]);while(a&&c.length){for(h in o.filter)if((f=o.leftMatch[h].exec(a))!=null&&f[2]){k=o.filter[h],l=f[1],g=!1,f.splice(1,1);if(l.substr(l.length-1)==="\\")continue;s===r&&(r=[]);if(o.preFilter[h]){f=o.preFilter[h](f,s,d,r,e,t);if(!f)g=i=!0;else if(f===!0)continue}if(f)for(n=0;(j=s[n])!=null;n++)j&&(i=k(j,f,n,s),p=e^i,d&&i!=null?p?g=!0:s[n]=!1:p&&(r.push(j),g=!0));if(i!==b){d||(s=r),a=a.replace(o.match[h],"");if(!g)return[];break}}if(a===q)if(g==null)m.error(a);else break;q=a}return s},m.error=function(a){throw new Error("Syntax error, unrecognized expression: "+a)};var n=m.getText=function(a){var b,c,d=a.nodeType,e="";if(d){if(d===1||d===9){if(typeof a.textContent=="string")return a.textContent;if(typeof a.innerText=="string")return a.innerText.replace(k,"");for(a=a.firstChild;a;a=a.nextSibling)e+=n(a)}else if(d===3||d===4)return a.nodeValue}else for(b=0;c=a[b];b++)c.nodeType!==8&&(e+=n(c));return e},o=m.selectors={order:["ID","NAME","TAG"],match:{ID:/#((?:[\w\u00c0-\uFFFF\-]|\\.)+)/,CLASS:/\.((?:[\w\u00c0-\uFFFF\-]|\\.)+)/,NAME:/\[name=['"]*((?:[\w\u00c0-\uFFFF\-]|\\.)+)['"]*\]/,ATTR:/\[\s*((?:[\w\u00c0-\uFFFF\-]|\\.)+)\s*(?:(\S?=)\s*(?:(['"])(.*?)\3|(#?(?:[\w\u00c0-\uFFFF\-]|\\.)*)|)|)\s*\]/,TAG:/^((?:[\w\u00c0-\uFFFF\*\-]|\\.)+)/,CHILD:/:(only|nth|last|first)-child(?:\(\s*(even|odd|(?:[+\-]?\d+|(?:[+\-]?\d*)?n\s*(?:[+\-]\s*\d+)?))\s*\))?/,POS:/:(nth|eq|gt|lt|first|last|even|odd)(?:\((\d*)\))?(?=[^\-]|$)/,PSEUDO:/:((?:[\w\u00c0-\uFFFF\-]|\\.)+)(?:\((['"]?)((?:\([^\)]+\)|[^\(\)]*)+)\2\))?/},leftMatch:{},attrMap:{"class":"className","for":"htmlFor"},attrHandle:{href:function(a){return a.getAttribute("href")},type:function(a){return a.getAttribute("type")}},relative:{"+":function(a,b){var c=typeof b=="string",d=c&&!l.test(b),e=c&&!d;d&&(b=b.toLowerCase());for(var f=0,g=a.length,h;f<g;f++)if(h=a[f]){while((h=h.previousSibling)&&h.nodeType!==1);a[f]=e||h&&h.nodeName.toLowerCase()===b?h||!1:h===b}e&&m.filter(b,a,!0)},">":function(a,b){var c,d=typeof b=="string",e=0,f=a.length;if(d&&!l.test(b)){b=b.toLowerCase();for(;e<f;e++){c=a[e];if(c){var g=c.parentNode;a[e]=g.nodeName.toLowerCase()===b?g:!1}}}else{for(;e<f;e++)c=a[e],c&&(a[e]=d?c.parentNode:c.parentNode===b);d&&m.filter(b,a,!0)}},"":function(a,b,c){var d,f=e++,g=x;typeof b=="string"&&!l.test(b)&&(b=b.toLowerCase(),d=b,g=w),g("parentNode",b,f,a,d,c)},"~":function(a,b,c){var d,f=e++,g=x;typeof b=="string"&&!l.test(b)&&(b=b.toLowerCase(),d=b,g=w),g("previousSibling",b,f,a,d,c)}},find:{ID:function(a,b,c){if(typeof b.getElementById!="undefined"&&!c){var d=b.getElementById(a[1]);return d&&d.parentNode?[d]:[]}},NAME:function(a,b){if(typeof b.getElementsByName!="undefined"){var c=[],d=b.getElementsByName(a[1]);for(var e=0,f=d.length;e<f;e++)d[e].getAttribute("name")===a[1]&&c.push(d[e]);return c.length===0?null:c}},TAG:function(a,b){if(typeof b.getElementsByTagName!="undefined")return b.getElementsByTagName(a[1])}},preFilter:{CLASS:function(a,b,c,d,e,f){a=" "+a[1].replace(j,"")+" ";if(f)return a;for(var g=0,h;(h=b[g])!=null;g++)h&&(e^(h.className&&(" "+h.className+" ").replace(/[\t\n\r]/g," ").indexOf(a)>=0)?c||d.push(h):c&&(b[g]=!1));return!1},ID:function(a){return a[1].replace(j,"")},TAG:function(a,b){return a[1].replace(j,"").toLowerCase()},CHILD:function(a){if(a[1]==="nth"){a[2]||m.error(a[0]),a[2]=a[2].replace(/^\+|\s*/g,"");var b=/(-?)(\d*)(?:n([+\-]?\d*))?/.exec(a[2]==="even"&&"2n"||a[2]==="odd"&&"2n+1"||!/\D/.test(a[2])&&"0n+"+a[2]||a[2]);a[2]=b[1]+(b[2]||1)-0,a[3]=b[3]-0}else a[2]&&m.error(a[0]);a[0]=e++;return a},ATTR:function(a,b,c,d,e,f){var g=a[1]=a[1].replace(j,"");!f&&o.attrMap[g]&&(a[1]=o.attrMap[g]),a[4]=(a[4]||a[5]||"").replace(j,""),a[2]==="~="&&(a[4]=" "+a[4]+" ");return a},PSEUDO:function(b,c,d,e,f){if(b[1]==="not")if((a.exec(b[3])||"").length>1||/^\w/.test(b[3]))b[3]=m(b[3],null,null,c);else{var g=m.filter(b[3],c,d,!0^f);d||e.push.apply(e,g);return!1}else if(o.match.POS.test(b[0])||o.match.CHILD.test(b[0]))return!0;return b},POS:function(a){a.unshift(!0);return a}},filters:{enabled:function(a){return a.disabled===!1&&a.type!=="hidden"},disabled:function(a){return a.disabled===!0},checked:function(a){return a.checked===!0},selected:function(a){a.parentNode&&a.parentNode.selectedIndex;return a.selected===!0},parent:function(a){return!!a.firstChild},empty:function(a){return!a.firstChild},has:function(a,b,c){return!!m(c[3],a).length},header:function(a){return/h\d/i.test(a.nodeName)},text:function(a){var b=a.getAttribute("type"),c=a.type;return a.nodeName.toLowerCase()==="input"&&"text"===c&&(b===c||b===null)},radio:function(a){return a.nodeName.toLowerCase()==="input"&&"radio"===a.type},checkbox:function(a){return a.nodeName.toLowerCase()==="input"&&"checkbox"===a.type},file:function(a){return a.nodeName.toLowerCase()==="input"&&"file"===a.type},password:function(a){return a.nodeName.toLowerCase()==="input"&&"password"===a.type},submit:function(a){var b=a.nodeName.toLowerCase();return(b==="input"||b==="button")&&"submit"===a.type},image:function(a){return a.nodeName.toLowerCase()==="input"&&"image"===a.type},reset:function(a){var b=a.nodeName.toLowerCase();return(b==="input"||b==="button")&&"reset"===a.type},button:function(a){var b=a.nodeName.toLowerCase();return b==="input"&&"button"===a.type||b==="button"},input:function(a){return/input|select|textarea|button/i.test(a.nodeName)},focus:function(a){return a===a.ownerDocument.activeElement}},setFilters:{first:function(a,b){return b===0},last:function(a,b,c,d){return b===d.length-1},even:function(a,b){return b%2===0},odd:function(a,b){return b%2===1},lt:function(a,b,c){return b<c[3]-0},gt:function(a,b,c){return b>c[3]-0},nth:function(a,b,c){return c[3]-0===b},eq:function(a,b,c){return c[3]-0===b}},filter:{PSEUDO:function(a,b,c,d){var e=b[1],f=o.filters[e];if(f)return f(a,c,b,d);if(e==="contains")return(a.textContent||a.innerText||n([a])||"").indexOf(b[3])>=0;if(e==="not"){var g=b[3];for(var h=0,i=g.length;h<i;h++)if(g[h]===a)return!1;return!0}m.error(e)},CHILD:function(a,b){var c,e,f,g,h,i,j,k=b[1],l=a;switch(k){case"only":case"first":while(l=l.previousSibling)if(l.nodeType===1)return!1;if(k==="first")return!0;l=a;case"last":while(l=l.nextSibling)if(l.nodeType===1)return!1;return!0;case"nth":c=b[2],e=b[3];if(c===1&&e===0)return!0;f=b[0],g=a.parentNode;if(g&&(g[d]!==f||!a.nodeIndex)){i=0;for(l=g.firstChild;l;l=l.nextSibling)l.nodeType===1&&(l.nodeIndex=++i);g[d]=f}j=a.nodeIndex-e;return c===0?j===0:j%c===0&&j/c>=0}},ID:function(a,b){return a.nodeType===1&&a.getAttribute("id")===b},TAG:function(a,b){return b==="*"&&a.nodeType===1||!!a.nodeName&&a.nodeName.toLowerCase()===b},CLASS:function(a,b){return(" "+(a.className||a.getAttribute("class"))+" ").indexOf(b)>-1},ATTR:function(a,b){var c=b[1],d=m.attr?m.attr(a,c):o.attrHandle[c]?o.attrHandle[c](a):a[c]!=null?a[c]:a.getAttribute(c),e=d+"",f=b[2],g=b[4];return d==null?f==="!=":!f&&m.attr?d!=null:f==="="?e===g:f==="*="?e.indexOf(g)>=0:f==="~="?(" "+e+" ").indexOf(g)>=0:g?f==="!="?e!==g:f==="^="?e.indexOf(g)===0:f==="$="?e.substr(e.length-g.length)===g:f==="|="?e===g||e.substr(0,g.length+1)===g+"-":!1:e&&d!==!1},POS:function(a,b,c,d){var e=b[2],f=o.setFilters[e];if(f)return f(a,c,b,d)}}},p=o.match.POS,q=function(a,b){return"\\"+(b-0+1)};for(var r in o.match)o.match[r]=new RegExp(o.match[r].source+/(?![^\[]*\])(?![^\(]*\))/.source),o.leftMatch[r]=new RegExp(/(^(?:.|\r|\n)*?)/.source+o.match[r].source.replace(/\\(\d+)/g,q));var s=function(a,b){a=Array.prototype.slice.call(a,0);if(b){b.push.apply(b,a);return b}return a};try{Array.prototype.slice.call(c.documentElement.childNodes,0)[0].nodeType}catch(t){s=function(a,b){var c=0,d=b||[];if(g.call(a)==="[object Array]")Array.prototype.push.apply(d,a);else if(typeof a.length=="number")for(var e=a.length;c<e;c++)d.push(a[c]);else for(;a[c];c++)d.push(a[c]);return d}}var u,v;c.documentElement.compareDocumentPosition?u=function(a,b){if(a===b){h=!0;return 0}if(!a.compareDocumentPosition||!b.compareDocumentPosition)return a.compareDocumentPosition?-1:1;return a.compareDocumentPosition(b)&4?-1:1}:(u=function(a,b){if(a===b){h=!0;return 0}if(a.sourceIndex&&b.sourceIndex)return a.sourceIndex-b.sourceIndex;var c,d,e=[],f=[],g=a.parentNode,i=b.parentNode,j=g;if(g===i)return v(a,b);if(!g)return-1;if(!i)return 1;while(j)e.unshift(j),j=j.parentNode;j=i;while(j)f.unshift(j),j=j.parentNode;c=e.length,d=f.length;for(var k=0;k<c&&k<d;k++)if(e[k]!==f[k])return v(e[k],f[k]);return k===c?v(a,f[k],-1):v(e[k],b,1)},v=function(a,b,c){if(a===b)return c;var d=a.nextSibling;while(d){if(d===b)return-1;d=d.nextSibling}return 1}),function(){var a=c.createElement("div"),d="script"+(new Date).getTime(),e=c.documentElement;a.innerHTML="<a name='"+d+"'/>",e.insertBefore(a,e.firstChild),c.getElementById(d)&&(o.find.ID=function(a,c,d){if(typeof c.getElementById!="undefined"&&!d){var e=c.getElementById(a[1]);return e?e.id===a[1]||typeof e.getAttributeNode!="undefined"&&e.getAttributeNode("id").nodeValue===a[1]?[e]:b:[]}},o.filter.ID=function(a,b){var c=typeof a.getAttributeNode!="undefined"&&a.getAttributeNode("id");return a.nodeType===1&&c&&c.nodeValue===b}),e.removeChild(a),e=a=null}(),function(){var a=c.createElement("div");a.appendChild(c.createComment("")),a.getElementsByTagName("*").length>0&&(o.find.TAG=function(a,b){var c=b.getElementsByTagName(a[1]);if(a[1]==="*"){var d=[];for(var e=0;c[e];e++)c[e].nodeType===1&&d.push(c[e]);c=d}return c}),a.innerHTML="<a href='#'></a>",a.firstChild&&typeof a.firstChild.getAttribute!="undefined"&&a.firstChild.getAttribute("href")!=="#"&&(o.attrHandle.href=function(a){return a.getAttribute("href",2)}),a=null}(),c.querySelectorAll&&function(){var a=m,b=c.createElement("div"),d="__sizzle__";b.innerHTML="<p class='TEST'></p>";if(!b.querySelectorAll||b.querySelectorAll(".TEST").length!==0){m=function(b,e,f,g){e=e||c;if(!g&&!m.isXML(e)){var h=/^(\w+$)|^\.([\w\-]+$)|^#([\w\-]+$)/.exec(b);if(h&&(e.nodeType===1||e.nodeType===9)){if(h[1])return s(e.getElementsByTagName(b),f);if(h[2]&&o.find.CLASS&&e.getElementsByClassName)return s(e.getElementsByClassName(h[2]),f)}if(e.nodeType===9){if(b==="body"&&e.body)return s([e.body],f);if(h&&h[3]){var i=e.getElementById(h[3]);if(!i||!i.parentNode)return s([],f);if(i.id===h[3])return s([i],f)}try{return s(e.querySelectorAll(b),f)}catch(j){}}else if(e.nodeType===1&&e.nodeName.toLowerCase()!=="object"){var k=e,l=e.getAttribute("id"),n=l||d,p=e.parentNode,q=/^\s*[+~]/.test(b);l?n=n.replace(/'/g,"\\$&"):e.setAttribute("id",n),q&&p&&(e=e.parentNode);try{if(!q||p)return s(e.querySelectorAll("[id='"+n+"'] "+b),f)}catch(r){}finally{l||k.removeAttribute("id")}}}return a(b,e,f,g)};for(var e in a)m[e]=a[e];b=null}}(),function(){var a=c.documentElement,b=a.matchesSelector||a.mozMatchesSelector||a.webkitMatchesSelector||a.msMatchesSelector;if(b){var d=!b.call(c.createElement("div"),"div"),e=!1;try{b.call(c.documentElement,"[test!='']:sizzle")}catch(f){e=!0}m.matchesSelector=function(a,c){c=c.replace(/\=\s*([^'"\]]*)\s*\]/g,"='$1']");if(!m.isXML(a))try{if(e||!o.match.PSEUDO.test(c)&&!/!=/.test(c)){var f=b.call(a,c);if(f||!d||a.document&&a.document.nodeType!==11)return f}}catch(g){}return m(c,null,null,[a]).length>0}}}(),function(){var a=c.createElement("div");a.innerHTML="<div class='test e'></div><div class='test'></div>";if(!!a.getElementsByClassName&&a.getElementsByClassName("e").length!==0){a.lastChild.className="e";if(a.getElementsByClassName("e").length===1)return;o.order.splice(1,0,"CLASS"),o.find.CLASS=function(a,b,c){if(typeof b.getElementsByClassName!="undefined"&&!c)return b.getElementsByClassName(a[1])},a=null}}(),c.documentElement.contains?m.contains=function(a,b){return a!==b&&(a.contains?a.contains(b):!0)}:c.documentElement.compareDocumentPosition?m.contains=function(a,b){return!!(a.compareDocumentPosition(b)&16)}:m.contains=function(){return!1},m.isXML=function(a){var b=(a?a.ownerDocument||a:0).documentElement;return b?b.nodeName!=="HTML":!1};var y=function(a,b,c){var d,e=[],f="",g=b.nodeType?[b]:b;while(d=o.match.PSEUDO.exec(a))f+=d[0],a=a.replace(o.match.PSEUDO,"");a=o.relative[a]?a+"*":a;for(var h=0,i=g.length;h<i;h++)m(a,g[h],e,c);return m.filter(f,e)};m.attr=f.attr,m.selectors.attrMap={},f.find=m,f.expr=m.selectors,f.expr[":"]=f.expr.filters,f.unique=m.uniqueSort,f.text=m.getText,f.isXMLDoc=m.isXML,f.contains=m.contains}();var L=/Until$/,M=/^(?:parents|prevUntil|prevAll)/,N=/,/,O=/^.[^:#\[\.,]*$/,P=Array.prototype.slice,Q=f.expr.match.POS,R={children:!0,contents:!0,next:!0,prev:!0};f.fn.extend({find:function(a){var b=this,c,d;if(typeof a!="string")return f(a).filter(function(){for(c=0,d=b.length;c<d;c++)if(f.contains(b[c],this))return!0});var e=this.pushStack("","find",a),g,h,i;for(c=0,d=this.length;c<d;c++){g=e.length,f.find(a,this[c],e);if(c>0)for(h=g;h<e.length;h++)for(i=0;i<g;i++)if(e[i]===e[h]){e.splice(h--,1);break}}return e},has:function(a){var b=f(a);return this.filter(function(){for(var a=0,c=b.length;a<c;a++)if(f.contains(this,b[a]))return!0})},not:function(a){return this.pushStack(T(this,a,!1),"not",a)},filter:function(a){return this.pushStack(T(this,a,!0),"filter",a)},is:function(a){return!!a&&(typeof a=="string"?Q.test(a)?f(a,this.context).index(this[0])>=0:f.filter(a,this).length>0:this.filter(a).length>0)},closest:function(a,b){var c=[],d,e,g=this[0];if(f.isArray(a)){var h=1;while(g&&g.ownerDocument&&g!==b){for(d=0;d<a.length;d++)f(g).is(a[d])&&c.push({selector:a[d],elem:g,level:h});g=g.parentNode,h++}return c}var i=Q.test(a)||typeof a!="string"?f(a,b||this.context):0;for(d=0,e=this.length;d<e;d++){g=this[d];while(g){if(i?i.index(g)>-1:f.find.matchesSelector(g,a)){c.push(g);break}g=g.parentNode;if(!g||!g.ownerDocument||g===b||g.nodeType===11)break}}c=c.length>1?f.unique(c):c;return this.pushStack(c,"closest",a)},index:function(a){if(!a)return this[0]&&this[0].parentNode?this.prevAll().length:-1;if(typeof a=="string")return f.inArray(this[0],f(a));return f.inArray(a.jquery?a[0]:a,this)},add:function(a,b){var c=typeof a=="string"?f(a,b):f.makeArray(a&&a.nodeType?[a]:a),d=f.merge(this.get(),c);return this.pushStack(S(c[0])||S(d[0])?d:f.unique(d))},andSelf:function(){return this.add(this.prevObject)}}),f.each({parent:function(a){var b=a.parentNode;return b&&b.nodeType!==11?b:null},parents:function(a){return f.dir(a,"parentNode")},parentsUntil:function(a,b,c){return f.dir(a,"parentNode",c)},next:function(a){return f.nth(a,2,"nextSibling")},prev:function(a){return f.nth(a,2,"previousSibling")},nextAll:function(a){return f.dir(a,"nextSibling")},prevAll:function(a){return f.dir(a,"previousSibling")},nextUntil:function(a,b,c){return f.dir(a,"nextSibling",c)},prevUntil:function(a,b,c){return f.dir(a,"previousSibling",c)},siblings:function(a){return f.sibling(a.parentNode.firstChild,a)},children:function(a){return f.sibling(a.firstChild)},contents:function(a){return f.nodeName(a,"iframe")?a.contentDocument||a.contentWindow.document:f.makeArray(a.childNodes)}},function(a,b){f.fn[a]=function(c,d){var e=f.map(this,b,c);L.test(a)||(d=c),d&&typeof d=="string"&&(e=f.filter(d,e)),e=this.length>1&&!R[a]?f.unique(e):e,(this.length>1||N.test(d))&&M.test(a)&&(e=e.reverse());return this.pushStack(e,a,P.call(arguments).join(","))}}),f.extend({filter:function(a,b,c){c&&(a=":not("+a+")");return b.length===1?f.find.matchesSelector(b[0],a)?[b[0]]:[]:f.find.matches(a,b)},dir:function(a,c,d){var e=[],g=a[c];while(g&&g.nodeType!==9&&(d===b||g.nodeType!==1||!f(g).is(d)))g.nodeType===1&&e.push(g),g=g[c];return e},nth:function(a,b,c,d){b=b||1;var e=0;for(;a;a=a[c])if(a.nodeType===1&&++e===b)break;return a},sibling:function(a,b){var c=[];for(;a;a=a.nextSibling)a.nodeType===1&&a!==b&&c.push(a);return c}});var V="abbr|article|aside|audio|canvas|datalist|details|figcaption|figure|footer|header|hgroup|mark|meter|nav|output|progress|section|summary|time|video",W=/ jQuery\d+="(?:\d+|null)"/g,X=/^\s+/,Y=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/ig,Z=/<([\w:]+)/,$=/<tbody/i,_=/<|&#?\w+;/,ba=/<(?:script|style)/i,bb=/<(?:script|object|embed|option|style)/i,bc=new RegExp("<(?:"+V+")","i"),bd=/checked\s*(?:[^=]|=\s*.checked.)/i,be=/\/(java|ecma)script/i,bf=/^\s*<!(?:\[CDATA\[|\-\-)/,bg={option:[1,"<select multiple='multiple'>","</select>"],legend:[1,"<fieldset>","</fieldset>"],thead:[1,"<table>","</table>"],tr:[2,"<table><tbody>","</tbody></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],col:[2,"<table><tbody></tbody><colgroup>","</colgroup></table>"],area:[1,"<map>","</map>"],_default:[0,"",""]},bh=U(c);bg.optgroup=bg.option,bg.tbody=bg.tfoot=bg.colgroup=bg.caption=bg.thead,bg.th=bg.td,f.support.htmlSerialize||(bg._default=[1,"div<div>","</div>"]),f.fn.extend({text:function(a){if(f.isFunction(a))return this.each(function(b){var c=f(this);c.text(a.call(this,b,c.text()))});if(typeof a!="object"&&a!==b)return this.empty().append((this[0]&&this[0].ownerDocument||c).createTextNode(a));return f.text(this)},wrapAll:function(a){if(f.isFunction(a))return this.each(function(b){f(this).wrapAll(a.call(this,b))});if(this[0]){var b=f(a,this[0].ownerDocument).eq(0).clone(!0);this[0].parentNode&&b.insertBefore(this[0]),b.map(function(){var a=this;while(a.firstChild&&a.firstChild.nodeType===1)a=a.firstChild;return a}).append(this)}return this},wrapInner:function(a){if(f.isFunction(a))return this.each(function(b){f(this).wrapInner(a.call(this,b))});return this.each(function(){var b=f(this),c=b.contents();c.length?c.wrapAll(a):b.append(a)})},wrap:function(a){var b=f.isFunction(a);return this.each(function(c){f(this).wrapAll(b?a.call(this,c):a)})},unwrap:function(){return this.parent().each(function(){f.nodeName(this,"body")||f(this).replaceWith(this.childNodes)}).end()},append:function(){return this.domManip(arguments,!0,function(a){this.nodeType===1&&this.appendChild(a)})},prepend:function(){return this.domManip(arguments,!0,function(a){this.nodeType===1&&this.insertBefore(a,this.firstChild)})},before:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this)});if(arguments.length){var a=f.clean(arguments);a.push.apply(a,this.toArray());return this.pushStack(a,"before",arguments)}},after:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this.nextSibling)});if(arguments.length){var a=this.pushStack(this,"after",arguments);a.push.apply(a,f.clean(arguments));return a}},remove:function(a,b){for(var c=0,d;(d=this[c])!=null;c++)if(!a||f.filter(a,[d]).length)!b&&d.nodeType===1&&(f.cleanData(d.getElementsByTagName("*")),f.cleanData([d])),d.parentNode&&d.parentNode.removeChild(d);return this},empty:function()
-{for(var a=0,b;(b=this[a])!=null;a++){b.nodeType===1&&f.cleanData(b.getElementsByTagName("*"));while(b.firstChild)b.removeChild(b.firstChild)}return this},clone:function(a,b){a=a==null?!1:a,b=b==null?a:b;return this.map(function(){return f.clone(this,a,b)})},html:function(a){if(a===b)return this[0]&&this[0].nodeType===1?this[0].innerHTML.replace(W,""):null;if(typeof a=="string"&&!ba.test(a)&&(f.support.leadingWhitespace||!X.test(a))&&!bg[(Z.exec(a)||["",""])[1].toLowerCase()]){a=a.replace(Y,"<$1></$2>");try{for(var c=0,d=this.length;c<d;c++)this[c].nodeType===1&&(f.cleanData(this[c].getElementsByTagName("*")),this[c].innerHTML=a)}catch(e){this.empty().append(a)}}else f.isFunction(a)?this.each(function(b){var c=f(this);c.html(a.call(this,b,c.html()))}):this.empty().append(a);return this},replaceWith:function(a){if(this[0]&&this[0].parentNode){if(f.isFunction(a))return this.each(function(b){var c=f(this),d=c.html();c.replaceWith(a.call(this,b,d))});typeof a!="string"&&(a=f(a).detach());return this.each(function(){var b=this.nextSibling,c=this.parentNode;f(this).remove(),b?f(b).before(a):f(c).append(a)})}return this.length?this.pushStack(f(f.isFunction(a)?a():a),"replaceWith",a):this},detach:function(a){return this.remove(a,!0)},domManip:function(a,c,d){var e,g,h,i,j=a[0],k=[];if(!f.support.checkClone&&arguments.length===3&&typeof j=="string"&&bd.test(j))return this.each(function(){f(this).domManip(a,c,d,!0)});if(f.isFunction(j))return this.each(function(e){var g=f(this);a[0]=j.call(this,e,c?g.html():b),g.domManip(a,c,d)});if(this[0]){i=j&&j.parentNode,f.support.parentNode&&i&&i.nodeType===11&&i.childNodes.length===this.length?e={fragment:i}:e=f.buildFragment(a,this,k),h=e.fragment,h.childNodes.length===1?g=h=h.firstChild:g=h.firstChild;if(g){c=c&&f.nodeName(g,"tr");for(var l=0,m=this.length,n=m-1;l<m;l++)d.call(c?bi(this[l],g):this[l],e.cacheable||m>1&&l<n?f.clone(h,!0,!0):h)}k.length&&f.each(k,bp)}return this}}),f.buildFragment=function(a,b,d){var e,g,h,i,j=a[0];b&&b[0]&&(i=b[0].ownerDocument||b[0]),i.createDocumentFragment||(i=c),a.length===1&&typeof j=="string"&&j.length<512&&i===c&&j.charAt(0)==="<"&&!bb.test(j)&&(f.support.checkClone||!bd.test(j))&&(f.support.html5Clone||!bc.test(j))&&(g=!0,h=f.fragments[j],h&&h!==1&&(e=h)),e||(e=i.createDocumentFragment(),f.clean(a,i,e,d)),g&&(f.fragments[j]=h?e:1);return{fragment:e,cacheable:g}},f.fragments={},f.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){f.fn[a]=function(c){var d=[],e=f(c),g=this.length===1&&this[0].parentNode;if(g&&g.nodeType===11&&g.childNodes.length===1&&e.length===1){e[b](this[0]);return this}for(var h=0,i=e.length;h<i;h++){var j=(h>0?this.clone(!0):this).get();f(e[h])[b](j),d=d.concat(j)}return this.pushStack(d,a,e.selector)}}),f.extend({clone:function(a,b,c){var d,e,g,h=f.support.html5Clone||!bc.test("<"+a.nodeName)?a.cloneNode(!0):bo(a);if((!f.support.noCloneEvent||!f.support.noCloneChecked)&&(a.nodeType===1||a.nodeType===11)&&!f.isXMLDoc(a)){bk(a,h),d=bl(a),e=bl(h);for(g=0;d[g];++g)e[g]&&bk(d[g],e[g])}if(b){bj(a,h);if(c){d=bl(a),e=bl(h);for(g=0;d[g];++g)bj(d[g],e[g])}}d=e=null;return h},clean:function(a,b,d,e){var g;b=b||c,typeof b.createElement=="undefined"&&(b=b.ownerDocument||b[0]&&b[0].ownerDocument||c);var h=[],i;for(var j=0,k;(k=a[j])!=null;j++){typeof k=="number"&&(k+="");if(!k)continue;if(typeof k=="string")if(!_.test(k))k=b.createTextNode(k);else{k=k.replace(Y,"<$1></$2>");var l=(Z.exec(k)||["",""])[1].toLowerCase(),m=bg[l]||bg._default,n=m[0],o=b.createElement("div");b===c?bh.appendChild(o):U(b).appendChild(o),o.innerHTML=m[1]+k+m[2];while(n--)o=o.lastChild;if(!f.support.tbody){var p=$.test(k),q=l==="table"&&!p?o.firstChild&&o.firstChild.childNodes:m[1]==="<table>"&&!p?o.childNodes:[];for(i=q.length-1;i>=0;--i)f.nodeName(q[i],"tbody")&&!q[i].childNodes.length&&q[i].parentNode.removeChild(q[i])}!f.support.leadingWhitespace&&X.test(k)&&o.insertBefore(b.createTextNode(X.exec(k)[0]),o.firstChild),k=o.childNodes}var r;if(!f.support.appendChecked)if(k[0]&&typeof (r=k.length)=="number")for(i=0;i<r;i++)bn(k[i]);else bn(k);k.nodeType?h.push(k):h=f.merge(h,k)}if(d){g=function(a){return!a.type||be.test(a.type)};for(j=0;h[j];j++)if(e&&f.nodeName(h[j],"script")&&(!h[j].type||h[j].type.toLowerCase()==="text/javascript"))e.push(h[j].parentNode?h[j].parentNode.removeChild(h[j]):h[j]);else{if(h[j].nodeType===1){var s=f.grep(h[j].getElementsByTagName("script"),g);h.splice.apply(h,[j+1,0].concat(s))}d.appendChild(h[j])}}return h},cleanData:function(a){var b,c,d=f.cache,e=f.event.special,g=f.support.deleteExpando;for(var h=0,i;(i=a[h])!=null;h++){if(i.nodeName&&f.noData[i.nodeName.toLowerCase()])continue;c=i[f.expando];if(c){b=d[c];if(b&&b.events){for(var j in b.events)e[j]?f.event.remove(i,j):f.removeEvent(i,j,b.handle);b.handle&&(b.handle.elem=null)}g?delete i[f.expando]:i.removeAttribute&&i.removeAttribute(f.expando),delete d[c]}}}});var bq=/alpha\([^)]*\)/i,br=/opacity=([^)]*)/,bs=/([A-Z]|^ms)/g,bt=/^-?\d+(?:px)?$/i,bu=/^-?\d/,bv=/^([\-+])=([\-+.\de]+)/,bw={position:"absolute",visibility:"hidden",display:"block"},bx=["Left","Right"],by=["Top","Bottom"],bz,bA,bB;f.fn.css=function(a,c){if(arguments.length===2&&c===b)return this;return f.access(this,a,c,!0,function(a,c,d){return d!==b?f.style(a,c,d):f.css(a,c)})},f.extend({cssHooks:{opacity:{get:function(a,b){if(b){var c=bz(a,"opacity","opacity");return c===""?"1":c}return a.style.opacity}}},cssNumber:{fillOpacity:!0,fontWeight:!0,lineHeight:!0,opacity:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{"float":f.support.cssFloat?"cssFloat":"styleFloat"},style:function(a,c,d,e){if(!!a&&a.nodeType!==3&&a.nodeType!==8&&!!a.style){var g,h,i=f.camelCase(c),j=a.style,k=f.cssHooks[i];c=f.cssProps[i]||i;if(d===b){if(k&&"get"in k&&(g=k.get(a,!1,e))!==b)return g;return j[c]}h=typeof d,h==="string"&&(g=bv.exec(d))&&(d=+(g[1]+1)*+g[2]+parseFloat(f.css(a,c)),h="number");if(d==null||h==="number"&&isNaN(d))return;h==="number"&&!f.cssNumber[i]&&(d+="px");if(!k||!("set"in k)||(d=k.set(a,d))!==b)try{j[c]=d}catch(l){}}},css:function(a,c,d){var e,g;c=f.camelCase(c),g=f.cssHooks[c],c=f.cssProps[c]||c,c==="cssFloat"&&(c="float");if(g&&"get"in g&&(e=g.get(a,!0,d))!==b)return e;if(bz)return bz(a,c)},swap:function(a,b,c){var d={};for(var e in b)d[e]=a.style[e],a.style[e]=b[e];c.call(a);for(e in b)a.style[e]=d[e]}}),f.curCSS=f.css,f.each(["height","width"],function(a,b){f.cssHooks[b]={get:function(a,c,d){var e;if(c){if(a.offsetWidth!==0)return bC(a,b,d);f.swap(a,bw,function(){e=bC(a,b,d)});return e}},set:function(a,b){if(!bt.test(b))return b;b=parseFloat(b);if(b>=0)return b+"px"}}}),f.support.opacity||(f.cssHooks.opacity={get:function(a,b){return br.test((b&&a.currentStyle?a.currentStyle.filter:a.style.filter)||"")?parseFloat(RegExp.$1)/100+"":b?"1":""},set:function(a,b){var c=a.style,d=a.currentStyle,e=f.isNumeric(b)?"alpha(opacity="+b*100+")":"",g=d&&d.filter||c.filter||"";c.zoom=1;if(b>=1&&f.trim(g.replace(bq,""))===""){c.removeAttribute("filter");if(d&&!d.filter)return}c.filter=bq.test(g)?g.replace(bq,e):g+" "+e}}),f(function(){f.support.reliableMarginRight||(f.cssHooks.marginRight={get:function(a,b){var c;f.swap(a,{display:"inline-block"},function(){b?c=bz(a,"margin-right","marginRight"):c=a.style.marginRight});return c}})}),c.defaultView&&c.defaultView.getComputedStyle&&(bA=function(a,b){var c,d,e;b=b.replace(bs,"-$1").toLowerCase(),(d=a.ownerDocument.defaultView)&&(e=d.getComputedStyle(a,null))&&(c=e.getPropertyValue(b),c===""&&!f.contains(a.ownerDocument.documentElement,a)&&(c=f.style(a,b)));return c}),c.documentElement.currentStyle&&(bB=function(a,b){var c,d,e,f=a.currentStyle&&a.currentStyle[b],g=a.style;f===null&&g&&(e=g[b])&&(f=e),!bt.test(f)&&bu.test(f)&&(c=g.left,d=a.runtimeStyle&&a.runtimeStyle.left,d&&(a.runtimeStyle.left=a.currentStyle.left),g.left=b==="fontSize"?"1em":f||0,f=g.pixelLeft+"px",g.left=c,d&&(a.runtimeStyle.left=d));return f===""?"auto":f}),bz=bA||bB,f.expr&&f.expr.filters&&(f.expr.filters.hidden=function(a){var b=a.offsetWidth,c=a.offsetHeight;return b===0&&c===0||!f.support.reliableHiddenOffsets&&(a.style&&a.style.display||f.css(a,"display"))==="none"},f.expr.filters.visible=function(a){return!f.expr.filters.hidden(a)});var bD=/%20/g,bE=/\[\]$/,bF=/\r?\n/g,bG=/#.*$/,bH=/^(.*?):[ \t]*([^\r\n]*)\r?$/mg,bI=/^(?:color|date|datetime|datetime-local|email|hidden|month|number|password|range|search|tel|text|time|url|week)$/i,bJ=/^(?:about|app|app\-storage|.+\-extension|file|res|widget):$/,bK=/^(?:GET|HEAD)$/,bL=/^\/\//,bM=/\?/,bN=/<script\b[^<]*(?:(?!<\/script>)<[^<]*)*<\/script>/gi,bO=/^(?:select|textarea)/i,bP=/\s+/,bQ=/([?&])_=[^&]*/,bR=/^([\w\+\.\-]+:)(?:\/\/([^\/?#:]*)(?::(\d+))?)?/,bS=f.fn.load,bT={},bU={},bV,bW,bX=["*/"]+["*"];try{bV=e.href}catch(bY){bV=c.createElement("a"),bV.href="",bV=bV.href}bW=bR.exec(bV.toLowerCase())||[],f.fn.extend({load:function(a,c,d){if(typeof a!="string"&&bS)return bS.apply(this,arguments);if(!this.length)return this;var e=a.indexOf(" ");if(e>=0){var g=a.slice(e,a.length);a=a.slice(0,e)}var h="GET";c&&(f.isFunction(c)?(d=c,c=b):typeof c=="object"&&(c=f.param(c,f.ajaxSettings.traditional),h="POST"));var i=this;f.ajax({url:a,type:h,dataType:"html",data:c,complete:function(a,b,c){c=a.responseText,a.isResolved()&&(a.done(function(a){c=a}),i.html(g?f("<div>").append(c.replace(bN,"")).find(g):c)),d&&i.each(d,[c,b,a])}});return this},serialize:function(){return f.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?f.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||bO.test(this.nodeName)||bI.test(this.type))}).map(function(a,b){var c=f(this).val();return c==null?null:f.isArray(c)?f.map(c,function(a,c){return{name:b.name,value:a.replace(bF,"\r\n")}}):{name:b.name,value:c.replace(bF,"\r\n")}}).get()}}),f.each("ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "),function(a,b){f.fn[b]=function(a){return this.on(b,a)}}),f.each(["get","post"],function(a,c){f[c]=function(a,d,e,g){f.isFunction(d)&&(g=g||e,e=d,d=b);return f.ajax({type:c,url:a,data:d,success:e,dataType:g})}}),f.extend({getScript:function(a,c){return f.get(a,b,c,"script")},getJSON:function(a,b,c){return f.get(a,b,c,"json")},ajaxSetup:function(a,b){b?b_(a,f.ajaxSettings):(b=a,a=f.ajaxSettings),b_(a,b);return a},ajaxSettings:{url:bV,isLocal:bJ.test(bW[1]),global:!0,type:"GET",contentType:"application/x-www-form-urlencoded",processData:!0,async:!0,accepts:{xml:"application/xml, text/xml",html:"text/html",text:"text/plain",json:"application/json, text/javascript","*":bX},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText"},converters:{"* text":a.String,"text html":!0,"text json":f.parseJSON,"text xml":f.parseXML},flatOptions:{context:!0,url:!0}},ajaxPrefilter:bZ(bT),ajaxTransport:bZ(bU),ajax:function(a,c){function w(a,c,l,m){if(s!==2){s=2,q&&clearTimeout(q),p=b,n=m||"",v.readyState=a>0?4:0;var o,r,u,w=c,x=l?cb(d,v,l):b,y,z;if(a>=200&&a<300||a===304){if(d.ifModified){if(y=v.getResponseHeader("Last-Modified"))f.lastModified[k]=y;if(z=v.getResponseHeader("Etag"))f.etag[k]=z}if(a===304)w="notmodified",o=!0;else try{r=cc(d,x),w="success",o=!0}catch(A){w="parsererror",u=A}}else{u=w;if(!w||a)w="error",a<0&&(a=0)}v.status=a,v.statusText=""+(c||w),o?h.resolveWith(e,[r,w,v]):h.rejectWith(e,[v,w,u]),v.statusCode(j),j=b,t&&g.trigger("ajax"+(o?"Success":"Error"),[v,d,o?r:u]),i.fireWith(e,[v,w]),t&&(g.trigger("ajaxComplete",[v,d]),--f.active||f.event.trigger("ajaxStop"))}}typeof a=="object"&&(c=a,a=b),c=c||{};var d=f.ajaxSetup({},c),e=d.context||d,g=e!==d&&(e.nodeType||e instanceof f)?f(e):f.event,h=f.Deferred(),i=f.Callbacks("once memory"),j=d.statusCode||{},k,l={},m={},n,o,p,q,r,s=0,t,u,v={readyState:0,setRequestHeader:function(a,b){if(!s){var c=a.toLowerCase();a=m[c]=m[c]||a,l[a]=b}return this},getAllResponseHeaders:function(){return s===2?n:null},getResponseHeader:function(a){var c;if(s===2){if(!o){o={};while(c=bH.exec(n))o[c[1].toLowerCase()]=c[2]}c=o[a.toLowerCase()]}return c===b?null:c},overrideMimeType:function(a){s||(d.mimeType=a);return this},abort:function(a){a=a||"abort",p&&p.abort(a),w(0,a);return this}};h.promise(v),v.success=v.done,v.error=v.fail,v.complete=i.add,v.statusCode=function(a){if(a){var b;if(s<2)for(b in a)j[b]=[j[b],a[b]];else b=a[v.status],v.then(b,b)}return this},d.url=((a||d.url)+"").replace(bG,"").replace(bL,bW[1]+"//"),d.dataTypes=f.trim(d.dataType||"*").toLowerCase().split(bP),d.crossDomain==null&&(r=bR.exec(d.url.toLowerCase()),d.crossDomain=!(!r||r[1]==bW[1]&&r[2]==bW[2]&&(r[3]||(r[1]==="http:"?80:443))==(bW[3]||(bW[1]==="http:"?80:443)))),d.data&&d.processData&&typeof d.data!="string"&&(d.data=f.param(d.data,d.traditional)),b$(bT,d,c,v);if(s===2)return!1;t=d.global,d.type=d.type.toUpperCase(),d.hasContent=!bK.test(d.type),t&&f.active++===0&&f.event.trigger("ajaxStart");if(!d.hasContent){d.data&&(d.url+=(bM.test(d.url)?"&":"?")+d.data,delete d.data),k=d.url;if(d.cache===!1){var x=f.now(),y=d.url.replace(bQ,"$1_="+x);d.url=y+(y===d.url?(bM.test(d.url)?"&":"?")+"_="+x:"")}}(d.data&&d.hasContent&&d.contentType!==!1||c.contentType)&&v.setRequestHeader("Content-Type",d.contentType),d.ifModified&&(k=k||d.url,f.lastModified[k]&&v.setRequestHeader("If-Modified-Since",f.lastModified[k]),f.etag[k]&&v.setRequestHeader("If-None-Match",f.etag[k])),v.setRequestHeader("Accept",d.dataTypes[0]&&d.accepts[d.dataTypes[0]]?d.accepts[d.dataTypes[0]]+(d.dataTypes[0]!=="*"?", "+bX+"; q=0.01":""):d.accepts["*"]);for(u in d.headers)v.setRequestHeader(u,d.headers[u]);if(d.beforeSend&&(d.beforeSend.call(e,v,d)===!1||s===2)){v.abort();return!1}for(u in{success:1,error:1,complete:1})v[u](d[u]);p=b$(bU,d,c,v);if(!p)w(-1,"No Transport");else{v.readyState=1,t&&g.trigger("ajaxSend",[v,d]),d.async&&d.timeout>0&&(q=setTimeout(function(){v.abort("timeout")},d.timeout));try{s=1,p.send(l,w)}catch(z){if(s<2)w(-1,z);else throw z}}return v},param:function(a,c){var d=[],e=function(a,b){b=f.isFunction(b)?b():b,d[d.length]=encodeURIComponent(a)+"="+encodeURIComponent(b)};c===b&&(c=f.ajaxSettings.traditional);if(f.isArray(a)||a.jquery&&!f.isPlainObject(a))f.each(a,function(){e(this.name,this.value)});else for(var g in a)ca(g,a[g],c,e);return d.join("&").replace(bD,"+")}}),f.extend({active:0,lastModified:{},etag:{}});var cd=f.now(),ce=/(\=)\?(&|$)|\?\?/i;f.ajaxSetup({jsonp:"callback",jsonpCallback:function(){return f.expando+"_"+cd++}}),f.ajaxPrefilter("json jsonp",function(b,c,d){var e=b.contentType==="application/x-www-form-urlencoded"&&typeof b.data=="string";if(b.dataTypes[0]==="jsonp"||b.jsonp!==!1&&(ce.test(b.url)||e&&ce.test(b.data))){var g,h=b.jsonpCallback=f.isFunction(b.jsonpCallback)?b.jsonpCallback():b.jsonpCallback,i=a[h],j=b.url,k=b.data,l="$1"+h+"$2";b.jsonp!==!1&&(j=j.replace(ce,l),b.url===j&&(e&&(k=k.replace(ce,l)),b.data===k&&(j+=(/\?/.test(j)?"&":"?")+b.jsonp+"="+h))),b.url=j,b.data=k,a[h]=function(a){g=[a]},d.always(function(){a[h]=i,g&&f.isFunction(i)&&a[h](g[0])}),b.converters["script json"]=function(){g||f.error(h+" was not called");return g[0]},b.dataTypes[0]="json";return"script"}}),f.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/javascript|ecmascript/},converters:{"text script":function(a){f.globalEval(a);return a}}}),f.ajaxPrefilter("script",function(a){a.cache===b&&(a.cache=!1),a.crossDomain&&(a.type="GET",a.global=!1)}),f.ajaxTransport("script",function(a){if(a.crossDomain){var d,e=c.head||c.getElementsByTagName("head")[0]||c.documentElement;return{send:function(f,g){d=c.createElement("script"),d.async="async",a.scriptCharset&&(d.charset=a.scriptCharset),d.src=a.url,d.onload=d.onreadystatechange=function(a,c){if(c||!d.readyState||/loaded|complete/.test(d.readyState))d.onload=d.onreadystatechange=null,e&&d.parentNode&&e.removeChild(d),d=b,c||g(200,"success")},e.insertBefore(d,e.firstChild)},abort:function(){d&&d.onload(0,1)}}}});var cf=a.ActiveXObject?function(){for(var a in ch)ch[a](0,1)}:!1,cg=0,ch;f.ajaxSettings.xhr=a.ActiveXObject?function(){return!this.isLocal&&ci()||cj()}:ci,function(a){f.extend(f.support,{ajax:!!a,cors:!!a&&"withCredentials"in a})}(f.ajaxSettings.xhr()),f.support.ajax&&f.ajaxTransport(function(c){if(!c.crossDomain||f.support.cors){var d;return{send:function(e,g){var h=c.xhr(),i,j;c.username?h.open(c.type,c.url,c.async,c.username,c.password):h.open(c.type,c.url,c.async);if(c.xhrFields)for(j in c.xhrFields)h[j]=c.xhrFields[j];c.mimeType&&h.overrideMimeType&&h.overrideMimeType(c.mimeType),!c.crossDomain&&!e["X-Requested-With"]&&(e["X-Requested-With"]="XMLHttpRequest");try{for(j in e)h.setRequestHeader(j,e[j])}catch(k){}h.send(c.hasContent&&c.data||null),d=function(a,e){var j,k,l,m,n;try{if(d&&(e||h.readyState===4)){d=b,i&&(h.onreadystatechange=f.noop,cf&&delete ch[i]);if(e)h.readyState!==4&&h.abort();else{j=h.status,l=h.getAllResponseHeaders(),m={},n=h.responseXML,n&&n.documentElement&&(m.xml=n),m.text=h.responseText;try{k=h.statusText}catch(o){k=""}!j&&c.isLocal&&!c.crossDomain?j=m.text?200:404:j===1223&&(j=204)}}}catch(p){e||g(-1,p)}m&&g(j,k,m,l)},!c.async||h.readyState===4?d():(i=++cg,cf&&(ch||(ch={},f(a).unload(cf)),ch[i]=d),h.onreadystatechange=d)},abort:function(){d&&d(0,1)}}}});var ck={},cl,cm,cn=/^(?:toggle|show|hide)$/,co=/^([+\-]=)?([\d+.\-]+)([a-z%]*)$/i,cp,cq=[["height","marginTop","marginBottom","paddingTop","paddingBottom"],["width","marginLeft","marginRight","paddingLeft","paddingRight"],["opacity"]],cr;f.fn.extend({show:function(a,b,c){var d,e;if(a||a===0)return this.animate(cu("show",3),a,b,c);for(var g=0,h=this.length;g<h;g++)d=this[g],d.style&&(e=d.style.display,!f._data(d,"olddisplay")&&e==="none"&&(e=d.style.display=""),e===""&&f.css(d,"display")==="none"&&f._data(d,"olddisplay",cv(d.nodeName)));for(g=0;g<h;g++){d=this[g];if(d.style){e=d.style.display;if(e===""||e==="none")d.style.display=f._data(d,"olddisplay")||""}}return this},hide:function(a,b,c){if(a||a===0)return this.animate(cu("hide",3),a,b,c);var d,e,g=0,h=this.length;for(;g<h;g++)d=this[g],d.style&&(e=f.css(d,"display"),e!=="none"&&!f._data(d,"olddisplay")&&f._data(d,"olddisplay",e));for(g=0;g<h;g++)this[g].style&&(this[g].style.display="none");return this},_toggle:f.fn.toggle,toggle:function(a,b,c){var d=typeof a=="boolean";f.isFunction(a)&&f.isFunction(b)?this._toggle.apply(this,arguments):a==null||d?this.each(function(){var b=d?a:f(this).is(":hidden");f(this)[b?"show":"hide"]()}):this.animate(cu("toggle",3),a,b,c);return this},fadeTo:function(a,b,c,d){return this.filter(":hidden").css("opacity",0).show().end().animate({opacity:b},a,c,d)},animate:function(a,b,c,d){function g(){e.queue===!1&&f._mark(this);var b=f.extend({},e),c=this.nodeType===1,d=c&&f(this).is(":hidden"),g,h,i,j,k,l,m,n,o;b.animatedProperties={};for(i in a){g=f.camelCase(i),i!==g&&(a[g]=a[i],delete a[i]),h=a[g],f.isArray(h)?(b.animatedProperties[g]=h[1],h=a[g]=h[0]):b.animatedProperties[g]=b.specialEasing&&b.specialEasing[g]||b.easing||"swing";if(h==="hide"&&d||h==="show"&&!d)return b.complete.call(this);c&&(g==="height"||g==="width")&&(b.overflow=[this.style.overflow,this.style.overflowX,this.style.overflowY],f.css(this,"display")==="inline"&&f.css(this,"float")==="none"&&(!f.support.inlineBlockNeedsLayout||cv(this.nodeName)==="inline"?this.style.display="inline-block":this.style.zoom=1))}b.overflow!=null&&(this.style.overflow="hidden");for(i in a)j=new f.fx(this,b,i),h=a[i],cn.test(h)?(o=f._data(this,"toggle"+i)||(h==="toggle"?d?"show":"hide":0),o?(f._data(this,"toggle"+i,o==="show"?"hide":"show"),j[o]()):j[h]()):(k=co.exec(h),l=j.cur(),k?(m=parseFloat(k[2]),n=k[3]||(f.cssNumber[i]?"":"px"),n!=="px"&&(f.style(this,i,(m||1)+n),l=(m||1)/j.cur()*l,f.style(this,i,l+n)),k[1]&&(m=(k[1]==="-="?-1:1)*m+l),j.custom(l,m,n)):j.custom(l,h,""));return!0}var e=f.speed(b,c,d);if(f.isEmptyObject(a))return this.each(e.complete,[!1]);a=f.extend({},a);return e.queue===!1?this.each(g):this.queue(e.queue,g)},stop:function(a,c,d){typeof a!="string"&&(d=c,c=a,a=b),c&&a!==!1&&this.queue(a||"fx",[]);return this.each(function(){function h(a,b,c){var e=b[c];f.removeData(a,c,!0),e.stop(d)}var b,c=!1,e=f.timers,g=f._data(this);d||f._unmark(!0,this);if(a==null)for(b in g)g[b]&&g[b].stop&&b.indexOf(".run")===b.length-4&&h(this,g,b);else g[b=a+".run"]&&g[b].stop&&h(this,g,b);for(b=e.length;b--;)e[b].elem===this&&(a==null||e[b].queue===a)&&(d?e[b](!0):e[b].saveState(),c=!0,e.splice(b,1));(!d||!c)&&f.dequeue(this,a)})}}),f.each({slideDown:cu("show",1),slideUp:cu("hide",1),slideToggle:cu("toggle",1),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(a,b){f.fn[a]=function(a,c,d){return this.animate(b,a,c,d)}}),f.extend({speed:function(a,b,c){var d=a&&typeof a=="object"?f.extend({},a):{complete:c||!c&&b||f.isFunction(a)&&a,duration:a,easing:c&&b||b&&!f.isFunction(b)&&b};d.duration=f.fx.off?0:typeof d.duration=="number"?d.duration:d.duration in f.fx.speeds?f.fx.speeds[d.duration]:f.fx.speeds._default;if(d.queue==null||d.queue===!0)d.queue="fx";d.old=d.complete,d.complete=function(a){f.isFunction(d.old)&&d.old.call(this),d.queue?f.dequeue(this,d.queue):a!==!1&&f._unmark(this)};return d},easing:{linear:function(a,b,c,d){return c+d*a},swing:function(a,b,c,d){return(-Math.cos(a*Math.PI)/2+.5)*d+c}},timers:[],fx:function(a,b,c){this.options=b,this.elem=a,this.prop=c,b.orig=b.orig||{}}}),f.fx.prototype={update:function(){this.options.step&&this.options.step.call(this.elem,this.now,this),(f.fx.step[this.prop]||f.fx.step._default)(this)},cur:function(){if(this.elem[this.prop]!=null&&(!this.elem.style||this.elem.style[this.prop]==null))return this.elem[this.prop];var a,b=f.css(this.elem,this.prop);return isNaN(a=parseFloat(b))?!b||b==="auto"?0:b:a},custom:function(a,c,d){function h(a){return e.step(a)}var e=this,g=f.fx;this.startTime=cr||cs(),this.end=c,this.now=this.start=a,this.pos=this.state=0,this.unit=d||this.unit||(f.cssNumber[this.prop]?"":"px"),h.queue=this.options.queue,h.elem=this.elem,h.saveState=function(){e.options.hide&&f._data(e.elem,"fxshow"+e.prop)===b&&f._data(e.elem,"fxshow"+e.prop,e.start)},h()&&f.timers.push(h)&&!cp&&(cp=setInterval(g.tick,g.interval))},show:function(){var a=f._data(this.elem,"fxshow"+this.prop);this.options.orig[this.prop]=a||f.style(this.elem,this.prop),this.options.show=!0,a!==b?this.custom(this.cur(),a):this.custom(this.prop==="width"||this.prop==="height"?1:0,this.cur()),f(this.elem).show()},hide:function(){this.options.orig[this.prop]=f._data(this.elem,"fxshow"+this.prop)||f.style(this.elem,this.prop),this.options.hide=!0,this.custom(this.cur(),0)},step:function(a){var b,c,d,e=cr||cs(),g=!0,h=this.elem,i=this.options;if(a||e>=i.duration+this.startTime){this.now=this.end,this.pos=this.state=1,this.update(),i.animatedProperties[this.prop]=!0;for(b in i.animatedProperties)i.animatedProperties[b]!==!0&&(g=!1);if(g){i.overflow!=null&&!f.support.shrinkWrapBlocks&&f.each(["","X","Y"],function(a,b){h.style["overflow"+b]=i.overflow[a]}),i.hide&&f(h).hide();if(i.hide||i.show)for(b in i.animatedProperties)f.style(h,b,i.orig[b]),f.removeData(h,"fxshow"+b,!0),f.removeData(h,"toggle"+b,!0);d=i.complete,d&&(i.complete=!1,d.call(h))}return!1}i.duration==Infinity?this.now=e:(c=e-this.startTime,this.state=c/i.duration,this.pos=f.easing[i.animatedProperties[this.prop]](this.state,c,0,1,i.duration),this.now=this.start+(this.end-this.start)*this.pos),this.update();return!0}},f.extend(f.fx,{tick:function(){var a,b=f.timers,c=0;for(;c<b.length;c++)a=b[c],!a()&&b[c]===a&&b.splice(c--,1);b.length||f.fx.stop()},interval:13,stop:function(){clearInterval(cp),cp=null},speeds:{slow:600,fast:200,_default:400},step:{opacity:function(a){f.style(a.elem,"opacity",a.now)},_default:function(a){a.elem.style&&a.elem.style[a.prop]!=null?a.elem.style[a.prop]=a.now+a.unit:a.elem[a.prop]=a.now}}}),f.each(["width","height"],function(a,b){f.fx.step[b]=function(a){f.style(a.elem,b,Math.max(0,a.now)+a.unit)}}),f.expr&&f.expr.filters&&(f.expr.filters.animated=function(a){return f.grep(f.timers,function(b){return a===b.elem}).length});var cw=/^t(?:able|d|h)$/i,cx=/^(?:body|html)$/i;"getBoundingClientRect"in c.documentElement?f.fn.offset=function(a){var b=this[0],c;if(a)return this.each(function(b){f.offset.setOffset(this,a,b)});if(!b||!b.ownerDocument)return null;if(b===b.ownerDocument.body)return f.offset.bodyOffset(b);try{c=b.getBoundingClientRect()}catch(d){}var e=b.ownerDocument,g=e.documentElement;if(!c||!f.contains(g,b))return c?{top:c.top,left:c.left}:{top:0,left:0};var h=e.body,i=cy(e),j=g.clientTop||h.clientTop||0,k=g.clientLeft||h.clientLeft||0,l=i.pageYOffset||f.support.boxModel&&g.scrollTop||h.scrollTop,m=i.pageXOffset||f.support.boxModel&&g.scrollLeft||h.scrollLeft,n=c.top+l-j,o=c.left+m-k;return{top:n,left:o}}:f.fn.offset=function(a){var b=this[0];if(a)return this.each(function(b){f.offset.setOffset(this,a,b)});if(!b||!b.ownerDocument)return null;if(b===b.ownerDocument.body)return f.offset.bodyOffset(b);var c,d=b.offsetParent,e=b,g=b.ownerDocument,h=g.documentElement,i=g.body,j=g.defaultView,k=j?j.getComputedStyle(b,null):b.currentStyle,l=b.offsetTop,m=b.offsetLeft;while((b=b.parentNode)&&b!==i&&b!==h){if(f.support.fixedPosition&&k.position==="fixed")break;c=j?j.getComputedStyle(b,null):b.currentStyle,l-=b.scrollTop,m-=b.scrollLeft,b===d&&(l+=b.offsetTop,m+=b.offsetLeft,f.support.doesNotAddBorder&&(!f.support.doesAddBorderForTableAndCells||!cw.test(b.nodeName))&&(l+=parseFloat(c.borderTopWidth)||0,m+=parseFloat(c.borderLeftWidth)||0),e=d,d=b.offsetParent),f.support.subtractsBorderForOverflowNotVisible&&c.overflow!=="visible"&&(l+=parseFloat(c.borderTopWidth)||0,m+=parseFloat(c.borderLeftWidth)||0),k=c}if(k.position==="relative"||k.position==="static")l+=i.offsetTop,m+=i.offsetLeft;f.support.fixedPosition&&k.position==="fixed"&&(l+=Math.max(h.scrollTop,i.scrollTop),m+=Math.max(h.scrollLeft,i.scrollLeft));return{top:l,left:m}},f.offset={bodyOffset:function(a){var b=a.offsetTop,c=a.offsetLeft;f.support.doesNotIncludeMarginInBodyOffset&&(b+=parseFloat(f.css(a,"marginTop"))||0,c+=parseFloat(f.css(a,"marginLeft"))||0);return{top:b,left:c}},setOffset:function(a,b,c){var d=f.css(a,"position");d==="static"&&(a.style.position="relative");var e=f(a),g=e.offset(),h=f.css(a,"top"),i=f.css(a,"left"),j=(d==="absolute"||d==="fixed")&&f.inArray("auto",[h,i])>-1,k={},l={},m,n;j?(l=e.position(),m=l.top,n=l.left):(m=parseFloat(h)||0,n=parseFloat(i)||0),f.isFunction(b)&&(b=b.call(a,c,g)),b.top!=null&&(k.top=b.top-g.top+m),b.left!=null&&(k.left=b.left-g.left+n),"using"in b?b.using.call(a,k):e.css(k)}},f.fn.extend({position:function(){if(!this[0])return null;var a=this[0],b=this.offsetParent(),c=this.offset(),d=cx.test(b[0].nodeName)?{top:0,left:0}:b.offset();c.top-=parseFloat(f.css(a,"marginTop"))||0,c.left-=parseFloat(f.css(a,"marginLeft"))||0,d.top+=parseFloat(f.css(b[0],"borderTopWidth"))||0,d.left+=parseFloat(f.css(b[0],"borderLeftWidth"))||0;return{top:c.top-d.top,left:c.left-d.left}},offsetParent:function(){return this.map(function(){var a=this.offsetParent||c.body;while(a&&!cx.test(a.nodeName)&&f.css(a,"position")==="static")a=a.offsetParent;return a})}}),f.each(["Left","Top"],function(a,c){var d="scroll"+c;f.fn[d]=function(c){var e,g;if(c===b){e=this[0];if(!e)return null;g=cy(e);return g?"pageXOffset"in g?g[a?"pageYOffset":"pageXOffset"]:f.support.boxModel&&g.document.documentElement[d]||g.document.body[d]:e[d]}return this.each(function(){g=cy(this),g?g.scrollTo(a?f(g).scrollLeft():c,a?c:f(g).scrollTop()):this[d]=c})}}),f.each(["Height","Width"],function(a,c){var d=c.toLowerCase();f.fn["inner"+c]=function(){var a=this[0];return a?a.style?parseFloat(f.css(a,d,"padding")):this[d]():null},f.fn["outer"+c]=function(a){var b=this[0];return b?b.style?parseFloat(f.css(b,d,a?"margin":"border")):this[d]():null},f.fn[d]=function(a){var e=this[0];if(!e)return a==null?null:this;if(f.isFunction(a))return this.each(function(b){var c=f(this);c[d](a.call(this,b,c[d]()))});if(f.isWindow(e)){var g=e.document.documentElement["client"+c],h=e.document.body;return e.document.compatMode==="CSS1Compat"&&g||h&&h["client"+c]||g}if(e.nodeType===9)return Math.max(e.documentElement["client"+c],e.body["scroll"+c],e.documentElement["scroll"+c],e.body["offset"+c],e.documentElement["offset"+c]);if(a===b){var i=f.css(e,d),j=parseFloat(i);return f.isNumeric(j)?j:i}return this.css(d,typeof a=="string"?a:a+"px")}}),a.jQuery=a.$=f,typeof define=="function"&&define.amd&&define.amd.jQuery&&define("jquery",[],function(){return f})})(window);
\ No newline at end of file
diff --git a/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite2.0/xsd/readme.md b/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite2.0/xsd/readme.md
deleted file mode 100755 (executable)
index 687f28e..0000000
+++ /dev/null
@@ -1,59 +0,0 @@
-# XSLT style for Test Case and Test Result
-
-## File structure
-
-- readme.txt
-- test_definition.xsd   // The schema of test definition
-- tests.css             // CSS style for showing test cases and results
-- testresult.xsl
-- testcase.xsl
-- tests.xml             //example of test cases
-- result.xml            //example of test result
-
-## Applying the style
-
-### Update in definition and result XML
-
-To apply this style for the definition XML of test cases, please add below statement before the root element of XML (the tag "test_definition").
-
-`<?xml-stylesheet type="text/xsl"  href="./testcase.xsl"?>`
-
-... such as:
-
-```
-<?xml version="1.0" encoding="UTF-8"?>
-<?xml-stylesheet type="text/xsl"  href="./testcase.xsl"?>
-<test_definition>
-```
-
-To apply this style for the test-result XML, please add below statement before the root element of XML (the tag "test_definition").
-
-`<?xml-stylesheet type="text/xsl"  href="./testresult.xsl"?>`
-
-... such as:
-
-```
-<?xml version="1.0" encoding="UTF-8"?>
-<?xml-stylesheet type="text/xsl"  href="./testresult.xsl"?>
-<test_definition>
-```
-
-### Deploy XSLT and CSS style
-
-Please add at least the 3 files into each test package.
-
-- tests.css
-- testresult.xsl
-- testcase.xsl
-
-... such as:
-
-```
-tct-alarm-tizen-tests/
-|-- ...
-|-- testcase.xsl
-|-- testresult.xsl
-|-- tests.css
-|-- ...
-```
-
diff --git a/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite2.0/xsd/release-notes b/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite2.0/xsd/release-notes
deleted file mode 100755 (executable)
index 30e97e8..0000000
+++ /dev/null
@@ -1,86 +0,0 @@
--- version 1.0.1-2 --
-
- adding 2 new case types "compliance" and "user_experience"
--- version 1.0.1-3 --
- Add a new sub-element "spec" (type: string) under the "testcase" element.
--- version 1.0.1-4 --
-  
- Add 2 new priority "P3" and "P4"
--- version 1.0.1-5 --
- Add a new root "test_definition", and the element "suite" has been move into it as children elements.
--- version 1.0.1-6 --
- A new optional attribute "launcher" is added in the element "testdefinition" for supporting identifying which kind of test suites the XML is designed for
-
--- version 1.0.1-7 --
-The Xslt related files are merged into this repo. 
-including 
-
-        tests.css             // CSS style for showing test cases and results
-        testresult.xsl
-        testcase.xsl
-        tests.xml             //example of test cases
-        result.xml            //example of test result
-        application.js        //Javascript for "back to top"
-        jquery.min.js         //JQuery
-        back_top.png          //image for "back to top"
-
-Modification in Schema:
-
-1\ the optional attribute "launcher" is moved into suite, not in "testdefinition" element any longer.
-
-2\ "spec" element is removed. and a new "specs" structure is added as below
-
-                                <specs>
-                                       <spec>
-                                               <spec_assertion category="Tizen Device API Specifications"
-                                                       section="Widget" specification="Widget Packaging and XML Configuration"
-                                                       interface="Widget" usage="true" />
-                                               <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>
-                                               <spec_statement>spec_statement</spec_statement>
-                                       </spec>
-                               </specs>
-All spec-related infomation are re-organized as XML element and attributes.
-
-In Xslt, 
-
-1\ a float image "Back to top" is available on right-bottom for scrolling to top.
-
-2\ html anchor is adder for scrolling back to suite summary table, and case detail tables.
-
--- version 1.0.1-8 --
-1\ For more flexible, rename the attribute "method_or_attribute" to "element_name".
-2\ Add a new attribute "element_type" to describe the type of the corresponding specification item
-
-related example and Xlst is also updated for above.
-
--- version 1.0.1-9 --
-1\ add an attribute "cts_version" in the element "environment/BuildInfoType" for saving the version of CTS tool
-2\ add an attribute "file" in "measurement/simpleMeasurementType"
-3\ update the result XSLt for showing cts_version
-4\ update the result XSLt for showing Â¡Â°Test Blocked¡± instead of "Test N/A"
-5\ add a summary table for showing all FAIL cases.
-
-
--- version 1.0.2-1 --
-1\ add a new int optional attribute "onload_delay" with default "3"
-
--- version 1.0.2-2 --
-1\ Add a new sub element "capabilities" under the element "testcase"
-2\ Add a new boolean attribute "check_unsupport_error" in the element "testcase"
-
--- version 1.0.2-3 --
-1\ Move the sub element "capabilities" from the element "testcase" to the element "set"
-
-
--- version 1.0.2-4 --
-1\ Add a unique limitation for suite name
-2\ Add a new optional attribute "launcher" in set 
-
-
--- version 1.0.2-5 --
-1\ Add a attribute "set_debug_msg" in set for recording the name of log file.
diff --git a/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite2.0/xsd/result.xml b/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite2.0/xsd/result.xml
deleted file mode 100755 (executable)
index 6654512..0000000
+++ /dev/null
@@ -1,1482 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<?xml-stylesheet type="text/xsl"  href="testresult.xsl"?>
-<test_definition xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" name="http://tempuri.org" type="" xsi:noNamespaceSchemaLocation="test_definition.xsd">
-  <environment device_id="generic/sdk/generic:4.0.4/MR1/302030:eng/test-keys" device_model="unknown" device_name="MR8" firmware_version="4.0.4" host="zhongqing-dev.sh.intel.com (Linux - 2.6.38.6-26.rc1.fc15.i686)" os_version="4.0.4" resolution="1280*800" screen_size="250*150" cts_version="2.3.0-3">
-    <other> Here is a Long String for testing ~~~~~~~~~~~~~~~~~~~
-    Here is a Long String for testing ~~~~~~~~~~~~~~~~~~~
-    Here is a Long String for testing ~~~~~~~~~~~~~~~~~~~
-    </other>
-  </environment>
-  <summary test_plan_name="tmp_test_1">
-    <start_at>Fri Jul 13 04:04:59 CST 2012</start_at>
-    <end_at>Fri Jul 13 05:01:53 CST 2012</end_at>
-  </summary>
-  <suite name="webapi-tizen-alarm-tests" type="">
-    <set name="Alarm1">
-      <testcase component="WebAPI/Tizen/Alarm" execution_type="auto" id="Alarm_AlarmRelative_constructor_delay" priority="P1" purpose="check AlarmRelative attribute when create with delay" status="approved" type="compliance" result="PASS">
-        <description>
-          <pre_condition/>
-          <post_condition/>
-          <steps>
-            <step order="1">
-              <step_desc>check AlarmRelative create constructor with delay
-              </step_desc>
-              <expected>AlarmRelative create succeed with constructor with
-                delay
-              </expected>
-            </step>
-          </steps>
-          <test_script_entry test_script_expected_result="0">/opt/webapi-tizen-alarm-tests/Alarm/Alarm_AlarmRelative_constructor_delay.htm
-          </test_script_entry>
-        </description>
-        <specs>
-          <spec>
-            <spec_assertion category="Tizen Device API Specifications" section="Widget" specification="Widget Packaging and XML Configuration" interface="Widget" usage="true"/>
-            <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>
-            <spec_statement>spec_statement</spec_statement>
-          </spec>
-        </specs>
-        <result_info>
-          <actual_result>PASS</actual_result>
-          <start>Sat Jan 01 2000 13:43:44 GMT+0900 (KST)</start>
-          <end>Sat Jan 01 2000 13:43:46 GMT+0900 (KST)</end>
-          <stdout/>
-        </result_info>
-      </testcase>
-      <testcase component="WebAPI/Tizen/Alarm" execution_type="auto" id="Alarm_AlarmManager_get" priority="P1" purpose="check AlarmManager method removeAll: without input attribute" status="approved" type="compliance" result="BLOCK">
-        <description>
-          <pre_condition/>
-          <post_condition/>
-          <steps>
-            <step order="1">
-              <step_desc>check AlarmManager method get: default check
-              </step_desc>
-              <expected>AlarmManager method get: default check succeed
-              </expected>
-            </step>
-          </steps>
-          <test_script_entry test_script_expected_result="0">/opt/webapi-tizen-alarm-tests/Alarm/Alarm_AlarmManager_get.htm
-          </test_script_entry>
-        </description>
-        <specs>
-          <spec>
-            <spec_assertion category="Tizen Device API Specifications" section="Widget" specification="Widget Packaging and XML Configuration" interface="Widget" usage="true"/>
-            <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>
-            <spec_statement>spec_statement</spec_statement>
-          </spec>
-        </specs>
-        <result_info>
-          <actual_result>BLOCK</actual_result>
-          <start>Sat Jan 01 2000 13:43:46 GMT+0900 (KST)</start>
-          <end>Sat Jan 01 2000 13:44:02 GMT+0900 (KST)</end>
-          <stdout>Test time out</stdout>
-        </result_info>
-      </testcase>
-      <testcase component="WebAPI/Tizen/Alarm" execution_type="auto" id="Alarm_AlarmAbsolute_attri_date_01" priority="P1" purpose="check AlarmAbsolute attribute when create with date" status="approved" type="compliance">
-        <description>
-          <pre_condition/>
-          <post_condition/>
-          <steps>
-            <step order="1">
-              <step_desc>check AlarmAbsolute attribute when create with date
-              </step_desc>
-              <expected>AlarmAbsolute attribute return correct value when
-                create with date
-              </expected>
-            </step>
-          </steps>
-          <test_script_entry test_script_expected_result="0">/opt/webapi-tizen-alarm-tests/Alarm/Alarm_AlarmAbsolute_attri_date.htm?total_num=3&amp;locator_key=id&amp;value=1
-          </test_script_entry>
-        </description>
-        <specs>
-          <spec>
-            <spec_assertion category="Tizen Device API Specifications" section="Widget" specification="Widget Packaging and XML Configuration" interface="Widget" usage="true"/>
-            <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>
-            <spec_statement>spec_statement</spec_statement>
-          </spec>
-        </specs>
-        <result_info>
-          <actual_result>N/R</actual_result>
-          <start>Sat Jan 01 2000 13:44:02 GMT+0900 (KST)</start>
-          <end>Sat Jan 01 2000 13:44:05 GMT+0900 (KST)</end>
-          <stdout/>
-        </result_info>
-      </testcase>
-      <testcase component="WebAPI/Tizen/Alarm" execution_type="auto" id="Alarm_AlarmManager_add_rel" priority="P1" purpose="check AlarmManager method add: add relative alarm" status="approved" type="compliance" result="FAIL">
-        <description>
-          <pre_condition/>
-          <post_condition/>
-          <steps>
-            <step order="1">
-              <step_desc>check AlarmManager method add: add relative alarm
-              </step_desc>
-              <expected>AlarmManager method add: add relative alarm succeed
-              </expected>
-            </step>
-          </steps>
-          <test_script_entry test_script_expected_result="0">/opt/webapi-tizen-alarm-tests/Alarm/Alarm_AlarmManager_add_rel.htm
-          </test_script_entry>
-        </description>
-        <specs>
-          <spec>
-            <spec_assertion category="Tizen Device API Specifications" section="Widget" specification="Widget Packaging and XML Configuration" interface="Widget" usage="true"/>
-            <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>
-            <spec_statement>spec_statement</spec_statement>
-          </spec>
-        </specs>
-        <result_info>
-          <actual_result>FAIL</actual_result>
-          <start>Sat Jan 01 2000 13:44:05 GMT+0900 (KST)</start>
-          <end>Sat Jan 01 2000 13:44:21 GMT+0900 (KST)</end>
-          <stdout>Test time out</stdout>
-        </result_info>
-      </testcase>
-      <testcase component="WebAPI/Tizen/Alarm" execution_type="auto" id="Alarm_AlarmRelative_attri_delay_02" priority="P1" purpose="check AlarmAbsolute attribute when create with period" status="approved" type="compliance" result="FAIL">
-        <description>
-          <pre_condition/>
-          <post_condition/>
-          <steps>
-            <step order="1">
-              <step_desc>check AlarmRelative attribute when create with delay
-              </step_desc>
-              <expected>AlarmRelative attribute return correct value when
-                create succeed with with delay
-              </expected>
-            </step>
-          </steps>
-          <test_script_entry test_script_expected_result="0">/opt/webapi-tizen-alarm-tests/Alarm/Alarm_AlarmRelative_attri_delay.htm?total_num=2&amp;locator_key=id&amp;value=2
-          </test_script_entry>
-        </description>
-        <specs>
-          <spec>
-            <spec_assertion category="Tizen Device API Specifications" section="Widget" specification="Widget Packaging and XML Configuration" interface="Widget" usage="true"/>
-            <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>
-            <spec_statement>spec_statement</spec_statement>
-          </spec>
-        </specs>
-        <result_info>
-          <actual_result>FAIL</actual_result>
-          <start>Sat Jan 01 2000 13:44:21 GMT+0900 (KST)</start>
-          <end>Sat Jan 01 2000 13:44:23 GMT+0900 (KST)</end>
-          <stdout/>
-        </result_info>
-      </testcase>
-      <testcase component="WebAPI/Tizen/Alarm" execution_type="auto" id="Alarm_AlarmManager_getAll" priority="P1" purpose="check AlarmManager method getAll: default check" status="approved" type="compliance" result="FAIL">
-        <description>
-          <pre_condition/>
-          <post_condition/>
-          <steps>
-            <step order="1">
-              <step_desc>check AlarmManager method getAll: default check
-              </step_desc>
-              <expected>AlarmManager method getAll: default check succeed
-              </expected>
-            </step>
-          </steps>
-          <test_script_entry test_script_expected_result="0">/opt/webapi-tizen-alarm-tests/Alarm/Alarm_AlarmManager_getAll.htm
-          </test_script_entry>
-        </description>
-        <specs>
-          <spec>
-            <spec_assertion category="Tizen Device API Specifications" section="Widget" specification="Widget Packaging and XML Configuration" interface="Widget" usage="true"/>
-            <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>
-            <spec_statement>spec_statement</spec_statement>
-          </spec>
-        </specs>
-        <result_info>
-          <actual_result>FAIL</actual_result>
-          <start>Sat Jan 01 2000 13:44:23 GMT+0900 (KST)</start>
-          <end>Sat Jan 01 2000 13:44:39 GMT+0900 (KST)</end>
-          <stdout>Test time out</stdout>
-        </result_info>
-      </testcase>
-      <testcase component="WebAPI/Tizen/Alarm" execution_type="auto" id="Alarm_AlarmAbsolute_attri_date_03" priority="P1" purpose="check AlarmAbsolute attribute when create with date" status="approved" type="compliance" result="Blocked">
-        <description>
-          <pre_condition/>
-          <post_condition/>
-          <steps>
-            <step order="1">
-              <step_desc>check AlarmAbsolute attribute when create with date
-              </step_desc>
-              <expected>AlarmAbsolute attribute return correct value when
-                create with date
-              </expected>
-            </step>
-          </steps>
-          <test_script_entry test_script_expected_result="0">/opt/webapi-tizen-alarm-tests/Alarm/Alarm_AlarmAbsolute_attri_date.htm?total_num=3&amp;locator_key=id&amp;value=3
-          </test_script_entry>
-        </description>
-        <specs>
-          <spec>
-            <spec_assertion category="Tizen Device API Specifications" section="Widget" specification="Widget Packaging and XML Configuration" interface="Widget" usage="true"/>
-            <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>
-            <spec_statement>spec_statement</spec_statement>
-          </spec>
-        </specs>
-        <result_info>
-          <actual_result>FAIL</actual_result>
-          <start>Sat Jan 01 2000 13:44:39 GMT+0900 (KST)</start>
-          <end>Sat Jan 01 2000 13:44:41 GMT+0900 (KST)</end>
-          <stdout/>
-        </result_info>
-      </testcase>
-      <testcase component="WebAPI/Tizen/Alarm" execution_type="auto" id="Alarm_AlarmAbsolute_getNextScheduledDate_date" priority="P1" purpose="check AlarmAbsolute method getNextScheduledDate when create with date" status="approved" type="compliance" result="FAIL">
-        <description>
-          <pre_condition/>
-          <post_condition/>
-          <steps>
-            <step order="1">
-              <step_desc>check AlarmAbsolute method getNextScheduledDate when
-                create with date
-              </step_desc>
-              <expected>AlarmAbsolute method getNextScheduledDate return
-                correct value when create with date
-              </expected>
-            </step>
-          </steps>
-          <test_script_entry test_script_expected_result="0">/opt/webapi-tizen-alarm-tests/Alarm/Alarm_AlarmAbsolute_getNextScheduledDate_date.htm
-          </test_script_entry>
-        </description>
-        <specs>
-          <spec>
-            <spec_assertion category="Tizen Device API Specifications" section="Widget" specification="Widget Packaging and XML Configuration" interface="Widget" usage="true"/>
-            <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>
-            <spec_statement>spec_statement</spec_statement>
-          </spec>
-        </specs>
-        <result_info>
-          <actual_result>FAIL</actual_result>
-          <start>Sat Jan 01 2000 13:44:41 GMT+0900 (KST)</start>
-          <end>Sat Jan 01 2000 13:44:57 GMT+0900 (KST)</end>
-          <stdout>Test time out</stdout>
-        </result_info>
-      </testcase>
-      <testcase component="WebAPI/Tizen/Alarm" execution_type="auto" id="Alarm_AlarmAbsolute_constructor_date" priority="P1" purpose="check AlarmAbsolute create constructor with date" status="approved" type="compliance" result="FAIL">
-        <description>
-          <pre_condition/>
-          <post_condition/>
-          <steps>
-            <step order="1">
-              <step_desc>check AlarmAbsolute create constructor with date
-              </step_desc>
-              <expected>AlarmAbsolute create succeed with constructor with date
-              </expected>
-            </step>
-          </steps>
-          <test_script_entry test_script_expected_result="0">/opt/webapi-tizen-alarm-tests/Alarm/Alarm_AlarmAbsolute_constructor_date.htm
-          </test_script_entry>
-        </description>
-        <specs>
-          <spec>
-            <spec_assertion category="Tizen Device API Specifications" section="Widget" specification="Widget Packaging and XML Configuration" interface="Widget" usage="true"/>
-            <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>
-            <spec_statement>spec_statement</spec_statement>
-          </spec>
-        </specs>
-        <result_info>
-          <actual_result>FAIL</actual_result>
-          <start>Sat Jan 01 2000 13:44:57 GMT+0900 (KST)</start>
-          <end>Sat Jan 01 2000 13:45:13 GMT+0900 (KST)</end>
-          <stdout>Test time out</stdout>
-        </result_info>
-      </testcase>
-      <testcase component="WebAPI/Tizen/Alarm" execution_type="auto" id="Alarm_AlarmRelative_getRemainingSeconds_delay" priority="P1" purpose="check AlarmRelative method getNextScheduleddelay when create with delay" status="approved" type="compliance" result="FAIL">
-        <description>
-          <pre_condition/>
-          <post_condition/>
-          <steps>
-            <step order="1">
-              <step_desc>check AlarmRelative method getNextScheduleddelay when
-                create with delay
-              </step_desc>
-              <expected>AlarmRelative method getNextScheduleddelay return
-                correct value when create succeed with with delay
-              </expected>
-            </step>
-          </steps>
-          <test_script_entry test_script_expected_result="0">/opt/webapi-tizen-alarm-tests/Alarm/Alarm_AlarmRelative_getRemainingSeconds_delay.htm
-          </test_script_entry>
-        </description>
-        <specs>
-          <spec>
-            <spec_assertion category="Tizen Device API Specifications" section="Widget" specification="Widget Packaging and XML Configuration" interface="Widget" usage="true"/>
-            <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>
-            <spec_statement>spec_statement</spec_statement>
-          </spec>
-        </specs>
-        <result_info>
-          <actual_result>FAIL</actual_result>
-          <start>Sat Jan 01 2000 13:45:13 GMT+0900 (KST)</start>
-          <end>Sat Jan 01 2000 13:45:30 GMT+0900 (KST)</end>
-          <stdout>Test time out</stdout>
-        </result_info>
-      </testcase>
-      <testcase component="WebAPI/Tizen/Alarm" execution_type="auto" id="Alarm_AlarmRelative_attri_delay_01" priority="P1" purpose="check AlarmAbsolute attribute when create with period" status="approved" type="compliance" result="FAIL">
-        <description>
-          <pre_condition/>
-          <post_condition/>
-          <steps>
-            <step order="1">
-              <step_desc>check AlarmRelative attribute when create with delay
-              </step_desc>
-              <expected>AlarmRelative attribute return correct value when
-                create succeed with with delay
-              </expected>
-            </step>
-          </steps>
-          <test_script_entry test_script_expected_result="0">/opt/webapi-tizen-alarm-tests/Alarm/Alarm_AlarmRelative_attri_delay.htm?total_num=2&amp;locator_key=id&amp;value=1
-          </test_script_entry>
-        </description>
-        <specs>
-          <spec>
-            <spec_assertion category="Tizen Device API Specifications" section="Widget" specification="Widget Packaging and XML Configuration" interface="Widget" usage="true"/>
-            <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>
-            <spec_statement>spec_statement</spec_statement>
-          </spec>
-        </specs>
-        <result_info>
-          <actual_result>FAIL</actual_result>
-          <start>Sat Jan 01 2000 13:45:30 GMT+0900 (KST)</start>
-          <end>Sat Jan 01 2000 13:45:32 GMT+0900 (KST)</end>
-          <stdout/>
-        </result_info>
-      </testcase>
-      <testcase component="WebAPI/Tizen/Alarm" execution_type="auto" id="Alarm_AlarmManager_add_abs" priority="P1" purpose="check AlarmManager method add: add absolute alarm" status="approved" type="compliance" result="FAIL">
-        <description>
-          <pre_condition/>
-          <post_condition/>
-          <steps>
-            <step order="1">
-              <step_desc>check AlarmManager method add: add absolute alarm
-              </step_desc>
-              <expected>AlarmManager method add: add absolute alarm succeed
-              </expected>
-            </step>
-          </steps>
-          <test_script_entry test_script_expected_result="0">/opt/webapi-tizen-alarm-tests/Alarm/Alarm_AlarmManager_add_abs.htm
-          </test_script_entry>
-        </description>
-        <specs>
-          <spec>
-            <spec_assertion category="Tizen Device API Specifications" section="Widget" specification="Widget Packaging and XML Configuration" interface="Widget" usage="true"/>
-            <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>
-            <spec_statement>spec_statement</spec_statement>
-          </spec>
-        </specs>
-        <result_info>
-          <actual_result>FAIL</actual_result>
-          <start>Sat Jan 01 2000 13:45:32 GMT+0900 (KST)</start>
-          <end>Sat Jan 01 2000 13:45:48 GMT+0900 (KST)</end>
-          <stdout>Test time out</stdout>
-        </result_info>
-      </testcase>
-      <testcase component="WebAPI/Tizen/Alarm" execution_type="auto" id="Alarm_AlarmAbsolute_attri_date_02" priority="P1" purpose="check AlarmAbsolute attribute when create with date" status="approved" type="compliance" result="FAIL">
-        <description>
-          <pre_condition/>
-          <post_condition/>
-          <steps>
-            <step order="1">
-              <step_desc>check AlarmAbsolute attribute when create with date
-              </step_desc>
-              <expected>AlarmAbsolute attribute return correct value when
-                create with date
-              </expected>
-            </step>
-          </steps>
-          <test_script_entry test_script_expected_result="0">/opt/webapi-tizen-alarm-tests/Alarm/Alarm_AlarmAbsolute_attri_date.htm?total_num=3&amp;locator_key=id&amp;value=2
-          </test_script_entry>
-        </description>
-        <specs>
-          <spec>
-            <spec_assertion category="Tizen Device API Specifications" section="Widget" specification="Widget Packaging and XML Configuration" interface="Widget" usage="true"/>
-            <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>
-            <spec_statement>spec_statement</spec_statement>
-          </spec>
-        </specs>
-        <result_info>
-          <actual_result>FAIL</actual_result>
-          <start>Sat Jan 01 2000 13:45:48 GMT+0900 (KST)</start>
-          <end>Sat Jan 01 2000 13:45:50 GMT+0900 (KST)</end>
-          <stdout/>
-        </result_info>
-      </testcase>
-      <testcase component="WebAPI/Tizen/Alarm" execution_type="auto" id="Alarm_AlarmManager_removeAll" priority="P1" purpose="check AlarmManager method removeAll: default check" status="approved" type="compliance" result="FAIL">
-        <description>
-          <pre_condition/>
-          <post_condition/>
-          <steps>
-            <step order="1">
-              <step_desc>check AlarmManager method removeAll: default check
-              </step_desc>
-              <expected>AlarmManager method removeAll: default check succeed
-              </expected>
-            </step>
-          </steps>
-          <test_script_entry test_script_expected_result="0">/opt/webapi-tizen-alarm-tests/Alarm/Alarm_AlarmManager_removeAll.htm
-          </test_script_entry>
-        </description>
-        <specs>
-          <spec>
-            <spec_assertion category="Tizen Device API Specifications" section="Widget" specification="Widget Packaging and XML Configuration" interface="Widget" usage="true"/>
-            <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>
-            <spec_statement>spec_statement</spec_statement>
-          </spec>
-        </specs>
-        <result_info>
-          <actual_result>FAIL</actual_result>
-          <start>Sat Jan 01 2000 13:45:50 GMT+0900 (KST)</start>
-          <end>Sat Jan 01 2000 13:46:06 GMT+0900 (KST)</end>
-          <stdout>Test time out</stdout>
-        </result_info>
-      </testcase>
-      <testcase component="WebAPI/Tizen/Alarm" execution_type="auto" id="Alarm_AlarmManager_remove" priority="P1" purpose="check AlarmManager method remove: default check" status="approved" type="compliance" result="FAIL">
-        <description>
-          <pre_condition/>
-          <post_condition/>
-          <steps>
-            <step order="1">
-              <step_desc>check AlarmManager method remove: default check
-              </step_desc>
-              <expected>AlarmManager method remove: default check succeed
-              </expected>
-            </step>
-          </steps>
-          <test_script_entry test_script_expected_result="0">/opt/webapi-tizen-alarm-tests/Alarm/Alarm_AlarmManager_remove.htm
-          </test_script_entry>
-        </description>
-        <specs>
-          <spec>
-            <spec_assertion category="Tizen Device API Specifications" section="Widget" specification="Widget Packaging and XML Configuration" interface="Widget" usage="true"/>
-            <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>
-            <spec_statement>spec_statement</spec_statement>
-          </spec>
-        </specs>
-        <result_info>
-          <actual_result>FAIL</actual_result>
-          <start>Sat Jan 01 2000 13:46:06 GMT+0900 (KST)</start>
-          <end>Sat Jan 01 2000 13:46:22 GMT+0900 (KST)</end>
-          <stdout>Test time out</stdout>
-        </result_info>
-      </testcase>
-      <testcase component="WebAPI/Tizen/Alarm" execution_type="auto" id="Alarm_AlarmManagerObject_exist" priority="P1" purpose="check AlarmManagerObject existance" status="approved" type="compliance" result="FAIL">
-        <description>
-          <pre_condition/>
-          <post_condition/>
-          <steps>
-            <step order="1">
-              <step_desc>check AlarmManagerObject exist</step_desc>
-              <expected>AlarmManagerObject exist</expected>
-            </step>
-          </steps>
-          <test_script_entry test_script_expected_result="">/opt/webapi-tizen-alarm-tests/Alarm/Alarm_AlarmManagerObject_exist.htm
-          </test_script_entry>
-        </description>
-        <specs>
-          <spec>
-            <spec_assertion category="Tizen Device API Specifications" section="Widget" specification="Widget Packaging and XML Configuration" interface="Widget" usage="true"/>
-            <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>
-            <spec_statement>spec_statement</spec_statement>
-          </spec>
-        </specs>
-        <result_info>
-          <actual_result>FAIL</actual_result>
-          <start>Sat Jan 01 2000 13:46:22 GMT+0900 (KST)</start>
-          <end>Sat Jan 01 2000 13:46:38 GMT+0900 (KST)</end>
-          <stdout>Test time out</stdout>
-        </result_info>
-      </testcase>
-      <testcase component="WebAPI/Tizen/Alarm" execution_type="auto" id="Alarm_AlarmManager_const_check_01" priority="P1" purpose="Check AlarmManager constants:PERIOD_MINUTE" status="approved" type="compliance" result="FAIL">
-        <description>
-          <pre_condition/>
-          <post_condition/>
-          <steps>
-            <step order="1">
-              <step_desc>Check AlarmManager constants:</step_desc>
-              <expected>AlarmManager constants value is correct:</expected>
-            </step>
-          </steps>
-          <test_script_entry test_script_expected_result="0">/opt/webapi-tizen-alarm-tests/Alarm/Alarm_AlarmManager_const_check.htm?total_num=4&amp;locator_key=id&amp;value=1
-          </test_script_entry>
-        </description>
-        <specs>
-          <spec>
-            <spec_assertion category="Tizen Device API Specifications" section="Widget" specification="Widget Packaging and XML Configuration" interface="Widget" usage="true"/>
-            <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>
-            <spec_statement>spec_statement</spec_statement>
-          </spec>
-        </specs>
-        <result_info>
-          <actual_result>FAIL</actual_result>
-          <start>Sat Jan 01 2000 13:46:38 GMT+0900 (KST)</start>
-          <end>Sat Jan 01 2000 13:46:40 GMT+0900 (KST)</end>
-          <stdout>Can't find variable: tizen</stdout>
-        </result_info>
-      </testcase>
-      <testcase component="WebAPI/Tizen/Alarm" execution_type="auto" id="Alarm_AlarmManager_const_check_02" priority="P1" purpose="Check AlarmManager constants:PERIOD_HOUR" status="approved" type="compliance" result="FAIL">
-        <description>
-          <pre_condition/>
-          <post_condition/>
-          <steps>
-            <step order="1">
-              <step_desc>Check AlarmManager constants:</step_desc>
-              <expected>AlarmManager constants value is correct:</expected>
-            </step>
-          </steps>
-          <test_script_entry test_script_expected_result="0">/opt/webapi-tizen-alarm-tests/Alarm/Alarm_AlarmManager_const_check.htm?total_num=4&amp;locator_key=id&amp;value=2
-          </test_script_entry>
-        </description>
-        <specs>
-          <spec>
-            <spec_assertion category="Tizen Device API Specifications" section="Widget" specification="Widget Packaging and XML Configuration" interface="Widget" usage="true"/>
-            <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>
-            <spec_statement>spec_statement</spec_statement>
-          </spec>
-        </specs>
-        <result_info>
-          <actual_result>FAIL</actual_result>
-          <start>Sat Jan 01 2000 13:46:40 GMT+0900 (KST)</start>
-          <end>Sat Jan 01 2000 13:46:42 GMT+0900 (KST)</end>
-          <stdout>Can't find variable: tizen</stdout>
-        </result_info>
-      </testcase>
-      <testcase component="WebAPI/Tizen/Alarm" execution_type="auto" id="Alarm_AlarmManager_const_check_03" priority="P1" purpose="Check AlarmManager constants:PERIOD_DAY" status="approved" type="compliance" result="FAIL">
-        <description>
-          <pre_condition/>
-          <post_condition/>
-          <steps>
-            <step order="1">
-              <step_desc>Check AlarmManager constants:</step_desc>
-              <expected>AlarmManager constants value is correct:</expected>
-            </step>
-          </steps>
-          <test_script_entry test_script_expected_result="0">/opt/webapi-tizen-alarm-tests/Alarm/Alarm_AlarmManager_const_check.htm?total_num=4&amp;locator_key=id&amp;value=3
-          </test_script_entry>
-        </description>
-        <specs>
-          <spec>
-            <spec_assertion category="Tizen Device API Specifications" section="Widget" specification="Widget Packaging and XML Configuration" interface="Widget" usage="true"/>
-            <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>
-            <spec_statement>spec_statement</spec_statement>
-          </spec>
-        </specs>
-        <result_info>
-          <actual_result>FAIL</actual_result>
-          <start>Sat Jan 01 2000 13:46:42 GMT+0900 (KST)</start>
-          <end>Sat Jan 01 2000 13:46:44 GMT+0900 (KST)</end>
-          <stdout>Can't find variable: tizen</stdout>
-        </result_info>
-      </testcase>
-      <testcase component="WebAPI/Tizen/Alarm" execution_type="auto" id="Alarm_AlarmManager_const_check_04" priority="P1" purpose="Check AlarmManager constants:PERIOD_WEEK" status="approved" type="compliance" result="FAIL">
-        <description>
-          <pre_condition/>
-          <post_condition/>
-          <steps>
-            <step order="1">
-              <step_desc>Check AlarmManager constants:</step_desc>
-              <expected>AlarmManager constants value is correct:</expected>
-            </step>
-          </steps>
-          <test_script_entry test_script_expected_result="0">/opt/webapi-tizen-alarm-tests/Alarm/Alarm_AlarmManager_const_check.htm?total_num=4&amp;locator_key=id&amp;value=4
-          </test_script_entry>
-        </description>
-        <specs>
-          <spec>
-            <spec_assertion category="Tizen Device API Specifications" section="Widget" specification="Widget Packaging and XML Configuration" interface="Widget" usage="true"/>
-            <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>
-            <spec_statement>spec_statement</spec_statement>
-          </spec>
-        </specs>
-        <result_info>
-          <actual_result>FAIL</actual_result>
-          <start>Sat Jan 01 2000 13:46:44 GMT+0900 (KST)</start>
-          <end>Sat Jan 01 2000 13:46:46 GMT+0900 (KST)</end>
-          <stdout>Can't find variable: tizen</stdout>
-        </result_info>
-      </testcase>
-    </set>
-    <set name="Alarm">
-      <testcase component="WebAPI/Tizen/Alarm" execution_type="auto" id="Alarm_AlarmRelative_constructor_delay" priority="P1" purpose="check AlarmRelative attribute when create with delay" status="approved" type="compliance" result="PASS">
-        <description>
-          <pre_condition/>
-          <post_condition/>
-          <steps>
-            <step order="1">
-              <step_desc>check AlarmRelative create constructor with delay
-              </step_desc>
-              <expected>AlarmRelative create succeed with constructor with
-                delay
-              </expected>
-            </step>
-          </steps>
-          <test_script_entry test_script_expected_result="0">/opt/webapi-tizen-alarm-tests/Alarm/Alarm_AlarmRelative_constructor_delay.htm
-          </test_script_entry>
-        </description>
-        <specs>
-          <spec>
-            <spec_assertion category="Tizen Device API Specifications" section="Widget" specification="Widget Packaging and XML Configuration" interface="Widget" usage="true"/>
-            <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>
-            <spec_statement>spec_statement</spec_statement>
-          </spec>
-        </specs>
-        <result_info>
-          <actual_result>PASS</actual_result>
-          <start>Sat Jan 01 2000 13:43:44 GMT+0900 (KST)</start>
-          <end>Sat Jan 01 2000 13:43:46 GMT+0900 (KST)</end>
-          <stdout/>
-        </result_info>
-      </testcase>
-      <testcase component="WebAPI/Tizen/Alarm" execution_type="auto" id="Alarm_AlarmManager_get" priority="P1" purpose="check AlarmManager method removeAll: without input attribute" status="approved" type="compliance" result="FAIL">
-        <description>
-          <pre_condition/>
-          <post_condition/>
-          <steps>
-            <step order="1">
-              <step_desc>check AlarmManager method get: default check
-              </step_desc>
-              <expected>AlarmManager method get: default check succeed
-              </expected>
-            </step>
-          </steps>
-          <test_script_entry test_script_expected_result="0">/opt/webapi-tizen-alarm-tests/Alarm/Alarm_AlarmManager_get.htm
-          </test_script_entry>
-        </description>
-        <specs>
-          <spec>
-            <spec_assertion category="Tizen Device API Specifications" section="Widget" specification="Widget Packaging and XML Configuration" interface="Widget" usage="true"/>
-            <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>
-            <spec_statement>spec_statement</spec_statement>
-          </spec>
-        </specs>
-        <result_info>
-          <actual_result>FAIL</actual_result>
-          <start>Sat Jan 01 2000 13:43:46 GMT+0900 (KST)</start>
-          <end>Sat Jan 01 2000 13:44:02 GMT+0900 (KST)</end>
-          <stdout>Test time out</stdout>
-        </result_info>
-      </testcase>
-      <testcase component="WebAPI/Tizen/Alarm" execution_type="auto" id="Alarm_AlarmAbsolute_attri_date_01" priority="P1" purpose="check AlarmAbsolute attribute when create with date" status="approved" type="compliance" result="FAIL">
-        <description>
-          <pre_condition/>
-          <post_condition/>
-          <steps>
-            <step order="1">
-              <step_desc>check AlarmAbsolute attribute when create with date
-              </step_desc>
-              <expected>AlarmAbsolute attribute return correct value when
-                create with date
-              </expected>
-            </step>
-          </steps>
-          <test_script_entry test_script_expected_result="0">/opt/webapi-tizen-alarm-tests/Alarm/Alarm_AlarmAbsolute_attri_date.htm?total_num=3&amp;locator_key=id&amp;value=1
-          </test_script_entry>
-        </description>
-        <specs>
-          <spec>
-            <spec_assertion category="Tizen Device API Specifications" section="Widget" specification="Widget Packaging and XML Configuration" interface="Widget" usage="true"/>
-            <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>
-            <spec_statement>spec_statement</spec_statement>
-          </spec>
-        </specs>
-        <result_info>
-          <actual_result>FAIL</actual_result>
-          <start>Sat Jan 01 2000 13:44:02 GMT+0900 (KST)</start>
-          <end>Sat Jan 01 2000 13:44:05 GMT+0900 (KST)</end>
-          <stdout/>
-        </result_info>
-      </testcase>
-      <testcase component="WebAPI/Tizen/Alarm" execution_type="auto" id="Alarm_AlarmManager_add_rel" priority="P1" purpose="check AlarmManager method add: add relative alarm" status="approved" type="compliance" result="FAIL">
-        <description>
-          <pre_condition/>
-          <post_condition/>
-          <steps>
-            <step order="1">
-              <step_desc>check AlarmManager method add: add relative alarm
-              </step_desc>
-              <expected>AlarmManager method add: add relative alarm succeed
-              </expected>
-            </step>
-          </steps>
-          <test_script_entry test_script_expected_result="0">/opt/webapi-tizen-alarm-tests/Alarm/Alarm_AlarmManager_add_rel.htm
-          </test_script_entry>
-        </description>
-        <specs>
-          <spec>
-            <spec_assertion category="Tizen Device API Specifications" section="Widget" specification="Widget Packaging and XML Configuration" interface="Widget" usage="true"/>
-            <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>
-            <spec_statement>spec_statement</spec_statement>
-          </spec>
-        </specs>
-        <result_info>
-          <actual_result>FAIL</actual_result>
-          <start>Sat Jan 01 2000 13:44:05 GMT+0900 (KST)</start>
-          <end>Sat Jan 01 2000 13:44:21 GMT+0900 (KST)</end>
-          <stdout>Test time out</stdout>
-        </result_info>
-      </testcase>
-      <testcase component="WebAPI/Tizen/Alarm" execution_type="auto" id="Alarm_AlarmRelative_attri_delay_02" priority="P1" purpose="check AlarmAbsolute attribute when create with period" status="approved" type="compliance" result="FAIL">
-        <description>
-          <pre_condition/>
-          <post_condition/>
-          <steps>
-            <step order="1">
-              <step_desc>check AlarmRelative attribute when create with delay
-              </step_desc>
-              <expected>AlarmRelative attribute return correct value when
-                create succeed with with delay
-              </expected>
-            </step>
-          </steps>
-          <test_script_entry test_script_expected_result="0">/opt/webapi-tizen-alarm-tests/Alarm/Alarm_AlarmRelative_attri_delay.htm?total_num=2&amp;locator_key=id&amp;value=2
-          </test_script_entry>
-        </description>
-        <specs>
-          <spec>
-            <spec_assertion category="Tizen Device API Specifications" section="Widget" specification="Widget Packaging and XML Configuration" interface="Widget" usage="true"/>
-            <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>
-            <spec_statement>spec_statement</spec_statement>
-          </spec>
-        </specs>
-        <result_info>
-          <actual_result>FAIL</actual_result>
-          <start>Sat Jan 01 2000 13:44:21 GMT+0900 (KST)</start>
-          <end>Sat Jan 01 2000 13:44:23 GMT+0900 (KST)</end>
-          <stdout/>
-        </result_info>
-      </testcase>
-    </set>
-  </suite>
-  <suite name="webapi-tizen-alarm-tests1" type="">
-    <set name="Alarm4">
-      <testcase component="WebAPI/Tizen/Alarm" execution_type="auto" id="Alarm_AlarmRelative_constructor_delay" priority="P1" purpose="check AlarmRelative attribute when create with delay" status="approved" type="compliance" result="PASS">
-        <description>
-          <pre_condition/>
-          <post_condition/>
-          <steps>
-            <step order="1">
-              <step_desc>check AlarmRelative create constructor with delay
-              </step_desc>
-              <expected>AlarmRelative create succeed with constructor with
-                delay
-              </expected>
-            </step>
-          </steps>
-          <test_script_entry test_script_expected_result="0">/opt/webapi-tizen-alarm-tests/Alarm/Alarm_AlarmRelative_constructor_delay.htm
-          </test_script_entry>
-        </description>
-        <specs>
-          <spec>
-            <spec_assertion category="Tizen Device API Specifications" section="Widget" specification="Widget Packaging and XML Configuration" interface="Widget" usage="true"/>
-            <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>
-            <spec_statement>spec_statement</spec_statement>
-          </spec>
-        </specs>
-        <result_info>
-          <actual_result>PASS</actual_result>
-          <start>Sat Jan 01 2000 13:43:44 GMT+0900 (KST)</start>
-          <end>Sat Jan 01 2000 13:43:46 GMT+0900 (KST)</end>
-          <stdout/>
-        </result_info>
-      </testcase>
-      <testcase component="WebAPI/Tizen/Alarm" execution_type="auto" id="Alarm_AlarmManager_get" priority="P1" purpose="check AlarmManager method removeAll: without input attribute" status="approved" type="compliance" result="FAIL">
-        <description>
-          <pre_condition/>
-          <post_condition/>
-          <steps>
-            <step order="1">
-              <step_desc>check AlarmManager method get: default check
-              </step_desc>
-              <expected>AlarmManager method get: default check succeed
-              </expected>
-            </step>
-          </steps>
-          <test_script_entry test_script_expected_result="0">/opt/webapi-tizen-alarm-tests/Alarm/Alarm_AlarmManager_get.htm
-          </test_script_entry>
-        </description>
-        <specs>
-          <spec>
-            <spec_assertion category="Tizen Device API Specifications" section="Widget" specification="Widget Packaging and XML Configuration" interface="Widget" usage="true"/>
-            <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>
-            <spec_statement>spec_statement</spec_statement>
-          </spec>
-        </specs>
-        <result_info>
-          <actual_result>FAIL</actual_result>
-          <start>Sat Jan 01 2000 13:43:46 GMT+0900 (KST)</start>
-          <end>Sat Jan 01 2000 13:44:02 GMT+0900 (KST)</end>
-          <stdout>Test time out</stdout>
-        </result_info>
-      </testcase>
-      <testcase component="WebAPI/Tizen/Alarm" execution_type="auto" id="Alarm_AlarmAbsolute_attri_date_01" priority="P1" purpose="check AlarmAbsolute attribute when create with date" status="approved" type="compliance" result="FAIL">
-        <description>
-          <pre_condition/>
-          <post_condition/>
-          <steps>
-            <step order="1">
-              <step_desc>check AlarmAbsolute attribute when create with date
-              </step_desc>
-              <expected>AlarmAbsolute attribute return correct value when
-                create with date
-              </expected>
-            </step>
-          </steps>
-          <test_script_entry test_script_expected_result="0">/opt/webapi-tizen-alarm-tests/Alarm/Alarm_AlarmAbsolute_attri_date.htm?total_num=3&amp;locator_key=id&amp;value=1
-          </test_script_entry>
-        </description>
-        <specs>
-          <spec>
-            <spec_assertion category="Tizen Device API Specifications" section="Widget" specification="Widget Packaging and XML Configuration" interface="Widget" usage="true"/>
-            <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>
-            <spec_statement>spec_statement</spec_statement>
-          </spec>
-        </specs>
-        <result_info>
-          <actual_result>FAIL</actual_result>
-          <start>Sat Jan 01 2000 13:44:02 GMT+0900 (KST)</start>
-          <end>Sat Jan 01 2000 13:44:05 GMT+0900 (KST)</end>
-          <stdout/>
-        </result_info>
-      </testcase>
-      <testcase component="WebAPI/Tizen/Alarm" execution_type="auto" id="Alarm_AlarmManager_add_rel" priority="P1" purpose="check AlarmManager method add: add relative alarm" status="approved" type="compliance" result="FAIL">
-        <description>
-          <pre_condition/>
-          <post_condition/>
-          <steps>
-            <step order="1">
-              <step_desc>check AlarmManager method add: add relative alarm
-              </step_desc>
-              <expected>AlarmManager method add: add relative alarm succeed
-              </expected>
-            </step>
-          </steps>
-          <test_script_entry test_script_expected_result="0">/opt/webapi-tizen-alarm-tests/Alarm/Alarm_AlarmManager_add_rel.htm
-          </test_script_entry>
-        </description>
-        <specs>
-          <spec>
-            <spec_assertion category="Tizen Device API Specifications" section="Widget" specification="Widget Packaging and XML Configuration" interface="Widget" usage="true"/>
-            <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>
-            <spec_statement>spec_statement</spec_statement>
-          </spec>
-        </specs>
-        <result_info>
-          <actual_result>FAIL</actual_result>
-          <start>Sat Jan 01 2000 13:44:05 GMT+0900 (KST)</start>
-          <end>Sat Jan 01 2000 13:44:21 GMT+0900 (KST)</end>
-          <stdout>Test time out</stdout>
-        </result_info>
-      </testcase>
-      <testcase component="WebAPI/Tizen/Alarm" execution_type="auto" id="Alarm_AlarmRelative_attri_delay_02" priority="P1" purpose="check AlarmAbsolute attribute when create with period" status="approved" type="compliance" result="FAIL">
-        <description>
-          <pre_condition/>
-          <post_condition/>
-          <steps>
-            <step order="1">
-              <step_desc>check AlarmRelative attribute when create with delay
-              </step_desc>
-              <expected>AlarmRelative attribute return correct value when
-                create succeed with with delay
-              </expected>
-            </step>
-          </steps>
-          <test_script_entry test_script_expected_result="0">/opt/webapi-tizen-alarm-tests/Alarm/Alarm_AlarmRelative_attri_delay.htm?total_num=2&amp;locator_key=id&amp;value=2
-          </test_script_entry>
-        </description>
-        <specs>
-          <spec>
-            <spec_assertion category="Tizen Device API Specifications" section="Widget" specification="Widget Packaging and XML Configuration" interface="Widget" usage="true"/>
-            <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>
-            <spec_statement>spec_statement</spec_statement>
-          </spec>
-        </specs>
-        <result_info>
-          <actual_result>FAIL</actual_result>
-          <start>Sat Jan 01 2000 13:44:21 GMT+0900 (KST)</start>
-          <end>Sat Jan 01 2000 13:44:23 GMT+0900 (KST)</end>
-          <stdout/>
-        </result_info>
-      </testcase>
-      <testcase component="WebAPI/Tizen/Alarm" execution_type="auto" id="Alarm_AlarmManager_getAll" priority="P1" purpose="check AlarmManager method getAll: default check" status="approved" type="compliance" result="FAIL">
-        <description>
-          <pre_condition/>
-          <post_condition/>
-          <steps>
-            <step order="1">
-              <step_desc>check AlarmManager method getAll: default check
-              </step_desc>
-              <expected>AlarmManager method getAll: default check succeed
-              </expected>
-            </step>
-          </steps>
-          <test_script_entry test_script_expected_result="0">/opt/webapi-tizen-alarm-tests/Alarm/Alarm_AlarmManager_getAll.htm
-          </test_script_entry>
-        </description>
-        <specs>
-          <spec>
-            <spec_assertion category="Tizen Device API Specifications" section="Widget" specification="Widget Packaging and XML Configuration" interface="Widget" usage="true"/>
-            <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>
-            <spec_statement>spec_statement</spec_statement>
-          </spec>
-        </specs>
-        <result_info>
-          <actual_result>FAIL</actual_result>
-          <start>Sat Jan 01 2000 13:44:23 GMT+0900 (KST)</start>
-          <end>Sat Jan 01 2000 13:44:39 GMT+0900 (KST)</end>
-          <stdout>Test time out</stdout>
-        </result_info>
-      </testcase>
-      <testcase component="WebAPI/Tizen/Alarm" execution_type="auto" id="Alarm_AlarmAbsolute_attri_date_03" priority="P1" purpose="check AlarmAbsolute attribute when create with date" status="approved" type="compliance" result="FAIL">
-        <description>
-          <pre_condition/>
-          <post_condition/>
-          <steps>
-            <step order="1">
-              <step_desc>check AlarmAbsolute attribute when create with date
-              </step_desc>
-              <expected>AlarmAbsolute attribute return correct value when
-                create with date
-              </expected>
-            </step>
-          </steps>
-          <test_script_entry test_script_expected_result="0">/opt/webapi-tizen-alarm-tests/Alarm/Alarm_AlarmAbsolute_attri_date.htm?total_num=3&amp;locator_key=id&amp;value=3
-          </test_script_entry>
-        </description>
-        <specs>
-          <spec>
-            <spec_assertion category="Tizen Device API Specifications" section="Widget" specification="Widget Packaging and XML Configuration" interface="Widget" usage="true"/>
-            <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>
-            <spec_statement>spec_statement</spec_statement>
-          </spec>
-        </specs>
-        <result_info>
-          <actual_result>FAIL</actual_result>
-          <start>Sat Jan 01 2000 13:44:39 GMT+0900 (KST)</start>
-          <end>Sat Jan 01 2000 13:44:41 GMT+0900 (KST)</end>
-          <stdout/>
-        </result_info>
-      </testcase>
-      <testcase component="WebAPI/Tizen/Alarm" execution_type="auto" id="Alarm_AlarmAbsolute_getNextScheduledDate_date" priority="P1" purpose="check AlarmAbsolute method getNextScheduledDate when create with date" status="approved" type="compliance" result="FAIL">
-        <description>
-          <pre_condition/>
-          <post_condition/>
-          <steps>
-            <step order="1">
-              <step_desc>check AlarmAbsolute method getNextScheduledDate when
-                create with date
-              </step_desc>
-              <expected>AlarmAbsolute method getNextScheduledDate return
-                correct value when create with date
-              </expected>
-            </step>
-          </steps>
-          <test_script_entry test_script_expected_result="0">/opt/webapi-tizen-alarm-tests/Alarm/Alarm_AlarmAbsolute_getNextScheduledDate_date.htm
-          </test_script_entry>
-        </description>
-        <specs>
-          <spec>
-            <spec_assertion category="Tizen Device API Specifications" section="Widget" specification="Widget Packaging and XML Configuration" interface="Widget" usage="true"/>
-            <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>
-            <spec_statement>spec_statement</spec_statement>
-          </spec>
-        </specs>
-        <result_info>
-          <actual_result>FAIL</actual_result>
-          <start>Sat Jan 01 2000 13:44:41 GMT+0900 (KST)</start>
-          <end>Sat Jan 01 2000 13:44:57 GMT+0900 (KST)</end>
-          <stdout>Test time out</stdout>
-        </result_info>
-      </testcase>
-      <testcase component="WebAPI/Tizen/Alarm" execution_type="auto" id="Alarm_AlarmAbsolute_constructor_date" priority="P1" purpose="check AlarmAbsolute create constructor with date" status="approved" type="compliance" result="FAIL">
-        <description>
-          <pre_condition/>
-          <post_condition/>
-          <steps>
-            <step order="1">
-              <step_desc>check AlarmAbsolute create constructor with date
-              </step_desc>
-              <expected>AlarmAbsolute create succeed with constructor with date
-              </expected>
-            </step>
-          </steps>
-          <test_script_entry test_script_expected_result="0">/opt/webapi-tizen-alarm-tests/Alarm/Alarm_AlarmAbsolute_constructor_date.htm
-          </test_script_entry>
-        </description>
-        <specs>
-          <spec>
-            <spec_assertion category="Tizen Device API Specifications" section="Widget" specification="Widget Packaging and XML Configuration" interface="Widget" usage="true"/>
-            <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>
-            <spec_statement>spec_statement</spec_statement>
-          </spec>
-        </specs>
-        <result_info>
-          <actual_result>FAIL</actual_result>
-          <start>Sat Jan 01 2000 13:44:57 GMT+0900 (KST)</start>
-          <end>Sat Jan 01 2000 13:45:13 GMT+0900 (KST)</end>
-          <stdout>Test time out</stdout>
-        </result_info>
-      </testcase>
-      <testcase component="WebAPI/Tizen/Alarm" execution_type="auto" id="Alarm_AlarmRelative_getRemainingSeconds_delay" priority="P1" purpose="check AlarmRelative method getNextScheduleddelay when create with delay" status="approved" type="compliance" result="FAIL">
-        <description>
-          <pre_condition/>
-          <post_condition/>
-          <steps>
-            <step order="1">
-              <step_desc>check AlarmRelative method getNextScheduleddelay when
-                create with delay
-              </step_desc>
-              <expected>AlarmRelative method getNextScheduleddelay return
-                correct value when create succeed with with delay
-              </expected>
-            </step>
-          </steps>
-          <test_script_entry test_script_expected_result="0">/opt/webapi-tizen-alarm-tests/Alarm/Alarm_AlarmRelative_getRemainingSeconds_delay.htm
-          </test_script_entry>
-        </description>
-        <specs>
-          <spec>
-            <spec_assertion category="Tizen Device API Specifications" section="Widget" specification="Widget Packaging and XML Configuration" interface="Widget" usage="true"/>
-            <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>
-            <spec_statement>spec_statement</spec_statement>
-          </spec>
-        </specs>
-        <result_info>
-          <actual_result>FAIL</actual_result>
-          <start>Sat Jan 01 2000 13:45:13 GMT+0900 (KST)</start>
-          <end>Sat Jan 01 2000 13:45:30 GMT+0900 (KST)</end>
-          <stdout>Test time out</stdout>
-        </result_info>
-      </testcase>
-      <testcase component="WebAPI/Tizen/Alarm" execution_type="auto" id="Alarm_AlarmRelative_attri_delay_01" priority="P1" purpose="check AlarmAbsolute attribute when create with period" status="approved" type="compliance" result="FAIL">
-        <description>
-          <pre_condition/>
-          <post_condition/>
-          <steps>
-            <step order="1">
-              <step_desc>check AlarmRelative attribute when create with delay
-              </step_desc>
-              <expected>AlarmRelative attribute return correct value when
-                create succeed with with delay
-              </expected>
-            </step>
-          </steps>
-          <test_script_entry test_script_expected_result="0">/opt/webapi-tizen-alarm-tests/Alarm/Alarm_AlarmRelative_attri_delay.htm?total_num=2&amp;locator_key=id&amp;value=1
-          </test_script_entry>
-        </description>
-        <specs>
-          <spec>
-            <spec_assertion category="Tizen Device API Specifications" section="Widget" specification="Widget Packaging and XML Configuration" interface="Widget" usage="true"/>
-            <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>
-            <spec_statement>spec_statement</spec_statement>
-          </spec>
-        </specs>
-        <result_info>
-          <actual_result>FAIL</actual_result>
-          <start>Sat Jan 01 2000 13:45:30 GMT+0900 (KST)</start>
-          <end>Sat Jan 01 2000 13:45:32 GMT+0900 (KST)</end>
-          <stdout/>
-        </result_info>
-      </testcase>
-      <testcase component="WebAPI/Tizen/Alarm" execution_type="auto" id="Alarm_AlarmManager_add_abs" priority="P1" purpose="check AlarmManager method add: add absolute alarm" status="approved" type="compliance" result="FAIL">
-        <description>
-          <pre_condition/>
-          <post_condition/>
-          <steps>
-            <step order="1">
-              <step_desc>check AlarmManager method add: add absolute alarm
-              </step_desc>
-              <expected>AlarmManager method add: add absolute alarm succeed
-              </expected>
-            </step>
-          </steps>
-          <test_script_entry test_script_expected_result="0">/opt/webapi-tizen-alarm-tests/Alarm/Alarm_AlarmManager_add_abs.htm
-          </test_script_entry>
-        </description>
-        <specs>
-          <spec>
-            <spec_assertion category="Tizen Device API Specifications" section="Widget" specification="Widget Packaging and XML Configuration" interface="Widget" usage="true"/>
-            <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>
-            <spec_statement>spec_statement</spec_statement>
-          </spec>
-        </specs>
-        <result_info>
-          <actual_result>FAIL</actual_result>
-          <start>Sat Jan 01 2000 13:45:32 GMT+0900 (KST)</start>
-          <end>Sat Jan 01 2000 13:45:48 GMT+0900 (KST)</end>
-          <stdout>Test time out</stdout>
-        </result_info>
-      </testcase>
-      <testcase component="WebAPI/Tizen/Alarm" execution_type="auto" id="Alarm_AlarmAbsolute_attri_date_02" priority="P1" purpose="check AlarmAbsolute attribute when create with date" status="approved" type="compliance" result="FAIL">
-        <description>
-          <pre_condition/>
-          <post_condition/>
-          <steps>
-            <step order="1">
-              <step_desc>check AlarmAbsolute attribute when create with date
-              </step_desc>
-              <expected>AlarmAbsolute attribute return correct value when
-                create with date
-              </expected>
-            </step>
-          </steps>
-          <test_script_entry test_script_expected_result="0">/opt/webapi-tizen-alarm-tests/Alarm/Alarm_AlarmAbsolute_attri_date.htm?total_num=3&amp;locator_key=id&amp;value=2
-          </test_script_entry>
-        </description>
-        <specs>
-          <spec>
-            <spec_assertion category="Tizen Device API Specifications" section="Widget" specification="Widget Packaging and XML Configuration" interface="Widget" usage="true"/>
-            <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>
-            <spec_statement>spec_statement</spec_statement>
-          </spec>
-        </specs>
-        <result_info>
-          <actual_result>FAIL</actual_result>
-          <start>Sat Jan 01 2000 13:45:48 GMT+0900 (KST)</start>
-          <end>Sat Jan 01 2000 13:45:50 GMT+0900 (KST)</end>
-          <stdout/>
-        </result_info>
-      </testcase>
-      <testcase component="WebAPI/Tizen/Alarm" execution_type="auto" id="Alarm_AlarmManager_removeAll" priority="P1" purpose="check AlarmManager method removeAll: default check" status="approved" type="compliance" result="FAIL">
-        <description>
-          <pre_condition/>
-          <post_condition/>
-          <steps>
-            <step order="1">
-              <step_desc>check AlarmManager method removeAll: default check
-              </step_desc>
-              <expected>AlarmManager method removeAll: default check succeed
-              </expected>
-            </step>
-          </steps>
-          <test_script_entry test_script_expected_result="0">/opt/webapi-tizen-alarm-tests/Alarm/Alarm_AlarmManager_removeAll.htm
-          </test_script_entry>
-        </description>
-        <specs>
-          <spec>
-            <spec_assertion category="Tizen Device API Specifications" section="Widget" specification="Widget Packaging and XML Configuration" interface="Widget" usage="true"/>
-            <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>
-            <spec_statement>spec_statement</spec_statement>
-          </spec>
-        </specs>
-        <result_info>
-          <actual_result>FAIL</actual_result>
-          <start>Sat Jan 01 2000 13:45:50 GMT+0900 (KST)</start>
-          <end>Sat Jan 01 2000 13:46:06 GMT+0900 (KST)</end>
-          <stdout>Test time out</stdout>
-        </result_info>
-      </testcase>
-      <testcase component="WebAPI/Tizen/Alarm" execution_type="auto" id="Alarm_AlarmManager_remove" priority="P1" purpose="check AlarmManager method remove: default check" status="approved" type="compliance" result="FAIL">
-        <description>
-          <pre_condition/>
-          <post_condition/>
-          <steps>
-            <step order="1">
-              <step_desc>check AlarmManager method remove: default check
-              </step_desc>
-              <expected>AlarmManager method remove: default check succeed
-              </expected>
-            </step>
-          </steps>
-          <test_script_entry test_script_expected_result="0">/opt/webapi-tizen-alarm-tests/Alarm/Alarm_AlarmManager_remove.htm
-          </test_script_entry>
-        </description>
-        <specs>
-          <spec>
-            <spec_assertion category="Tizen Device API Specifications" section="Widget" specification="Widget Packaging and XML Configuration" interface="Widget" usage="true"/>
-            <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>
-            <spec_statement>spec_statement</spec_statement>
-          </spec>
-        </specs>
-        <result_info>
-          <actual_result>FAIL</actual_result>
-          <start>Sat Jan 01 2000 13:46:06 GMT+0900 (KST)</start>
-          <end>Sat Jan 01 2000 13:46:22 GMT+0900 (KST)</end>
-          <stdout>Test time out</stdout>
-        </result_info>
-      </testcase>
-      <testcase component="WebAPI/Tizen/Alarm" execution_type="auto" id="Alarm_AlarmManagerObject_exist" priority="P1" purpose="check AlarmManagerObject existance" status="approved" type="compliance" result="FAIL">
-        <description>
-          <pre_condition/>
-          <post_condition/>
-          <steps>
-            <step order="1">
-              <step_desc>check AlarmManagerObject exist</step_desc>
-              <expected>AlarmManagerObject exist</expected>
-            </step>
-          </steps>
-          <test_script_entry test_script_expected_result="">/opt/webapi-tizen-alarm-tests/Alarm/Alarm_AlarmManagerObject_exist.htm
-          </test_script_entry>
-        </description>
-        <specs>
-          <spec>
-            <spec_assertion category="Tizen Device API Specifications" section="Widget" specification="Widget Packaging and XML Configuration" interface="Widget" usage="true"/>
-            <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>
-            <spec_statement>spec_statement</spec_statement>
-          </spec>
-        </specs>
-        <result_info>
-          <actual_result>FAIL</actual_result>
-          <start>Sat Jan 01 2000 13:46:22 GMT+0900 (KST)</start>
-          <end>Sat Jan 01 2000 13:46:38 GMT+0900 (KST)</end>
-          <stdout>Test time out</stdout>
-        </result_info>
-      </testcase>
-      <testcase component="WebAPI/Tizen/Alarm" execution_type="auto" id="Alarm_AlarmManager_const_check_01" priority="P1" purpose="Check AlarmManager constants:PERIOD_MINUTE" status="approved" type="compliance" result="FAIL">
-        <description>
-          <pre_condition/>
-          <post_condition/>
-          <steps>
-            <step order="1">
-              <step_desc>Check AlarmManager constants:</step_desc>
-              <expected>AlarmManager constants value is correct:</expected>
-            </step>
-          </steps>
-          <test_script_entry test_script_expected_result="0">/opt/webapi-tizen-alarm-tests/Alarm/Alarm_AlarmManager_const_check.htm?total_num=4&amp;locator_key=id&amp;value=1
-          </test_script_entry>
-        </description>
-        <specs>
-          <spec>
-            <spec_assertion category="Tizen Device API Specifications" section="Widget" specification="Widget Packaging and XML Configuration" interface="Widget" usage="true"/>
-            <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>
-            <spec_statement>spec_statement</spec_statement>
-          </spec>
-        </specs>
-        <result_info>
-          <actual_result>FAIL</actual_result>
-          <start>Sat Jan 01 2000 13:46:38 GMT+0900 (KST)</start>
-          <end>Sat Jan 01 2000 13:46:40 GMT+0900 (KST)</end>
-          <stdout>Can't find variable: tizen</stdout>
-        </result_info>
-      </testcase>
-      <testcase component="WebAPI/Tizen/Alarm" execution_type="auto" id="Alarm_AlarmManager_const_check_02" priority="P1" purpose="Check AlarmManager constants:PERIOD_HOUR" status="approved" type="compliance" result="FAIL">
-        <description>
-          <pre_condition/>
-          <post_condition/>
-          <steps>
-            <step order="1">
-              <step_desc>Check AlarmManager constants:</step_desc>
-              <expected>AlarmManager constants value is correct:</expected>
-            </step>
-          </steps>
-          <test_script_entry test_script_expected_result="0">/opt/webapi-tizen-alarm-tests/Alarm/Alarm_AlarmManager_const_check.htm?total_num=4&amp;locator_key=id&amp;value=2
-          </test_script_entry>
-        </description>
-        <specs>
-          <spec>
-            <spec_assertion category="Tizen Device API Specifications" section="Widget" specification="Widget Packaging and XML Configuration" interface="Widget" usage="true"/>
-            <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>
-            <spec_statement>spec_statement</spec_statement>
-          </spec>
-        </specs>
-        <result_info>
-          <actual_result>FAIL</actual_result>
-          <start>Sat Jan 01 2000 13:46:40 GMT+0900 (KST)</start>
-          <end>Sat Jan 01 2000 13:46:42 GMT+0900 (KST)</end>
-          <stdout>Can't find variable: tizen</stdout>
-        </result_info>
-      </testcase>
-      <testcase component="WebAPI/Tizen/Alarm" execution_type="auto" id="Alarm_AlarmManager_const_check_03" priority="P1" purpose="Check AlarmManager constants:PERIOD_DAY" status="approved" type="compliance" result="FAIL">
-        <description>
-          <pre_condition/>
-          <post_condition/>
-          <steps>
-            <step order="1">
-              <step_desc>Check AlarmManager constants:</step_desc>
-              <expected>AlarmManager constants value is correct:</expected>
-            </step>
-          </steps>
-          <test_script_entry test_script_expected_result="0">/opt/webapi-tizen-alarm-tests/Alarm/Alarm_AlarmManager_const_check.htm?total_num=4&amp;locator_key=id&amp;value=3
-          </test_script_entry>
-        </description>
-        <specs>
-          <spec>
-            <spec_assertion category="Tizen Device API Specifications" section="Widget" specification="Widget Packaging and XML Configuration" interface="Widget" usage="true"/>
-            <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>
-            <spec_statement>spec_statement</spec_statement>
-          </spec>
-        </specs>
-        <result_info>
-          <actual_result>FAIL</actual_result>
-          <start>Sat Jan 01 2000 13:46:42 GMT+0900 (KST)</start>
-          <end>Sat Jan 01 2000 13:46:44 GMT+0900 (KST)</end>
-          <stdout>Can't find variable: tizen</stdout>
-        </result_info>
-      </testcase>
-      <testcase component="WebAPI/Tizen/Alarm" execution_type="auto" id="Alarm_AlarmManager_const_check_04" priority="P1" purpose="Check AlarmManager constants:PERIOD_WEEK" status="approved" type="compliance" result="FAIL">
-        <description>
-          <pre_condition/>
-          <post_condition/>
-          <steps>
-            <step order="1">
-              <step_desc>Check AlarmManager constants:</step_desc>
-              <expected>AlarmManager constants value is correct:</expected>
-            </step>
-          </steps>
-          <test_script_entry test_script_expected_result="0">/opt/webapi-tizen-alarm-tests/Alarm/Alarm_AlarmManager_const_check.htm?total_num=4&amp;locator_key=id&amp;value=4
-          </test_script_entry>
-        </description>
-        <specs>
-          <spec>
-            <spec_assertion category="Tizen Device API Specifications" section="Widget" specification="Widget Packaging and XML Configuration" interface="Widget" usage="true"/>
-            <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>
-            <spec_statement>spec_statement</spec_statement>
-          </spec>
-        </specs>
-        <result_info>
-          <actual_result>FAIL</actual_result>
-          <start>Sat Jan 01 2000 13:46:44 GMT+0900 (KST)</start>
-          <end>Sat Jan 01 2000 13:46:46 GMT+0900 (KST)</end>
-          <stdout>Can't find variable: tizen</stdout>
-        </result_info>
-      </testcase>
-    </set>
-    <set name="Alarm3">
-      <testcase component="WebAPI/Tizen/Alarm" execution_type="auto" id="Alarm_AlarmRelative_constructor_delay" priority="P1" purpose="check AlarmRelative attribute when create with delay" status="approved" type="compliance" result="PASS">
-        <description>
-          <pre_condition/>
-          <post_condition/>
-          <steps>
-            <step order="1">
-              <step_desc>check AlarmRelative create constructor with delay
-              </step_desc>
-              <expected>AlarmRelative create succeed with constructor with
-                delay
-              </expected>
-            </step>
-          </steps>
-          <test_script_entry test_script_expected_result="0">/opt/webapi-tizen-alarm-tests/Alarm/Alarm_AlarmRelative_constructor_delay.htm
-          </test_script_entry>
-        </description>
-        <specs>
-          <spec>
-            <spec_assertion category="Tizen Device API Specifications" section="Widget" specification="Widget Packaging and XML Configuration" interface="Widget" usage="true"/>
-            <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>
-            <spec_statement>spec_statement</spec_statement>
-          </spec>
-        </specs>
-        <result_info>
-          <actual_result>PASS</actual_result>
-          <start>Sat Jan 01 2000 13:43:44 GMT+0900 (KST)</start>
-          <end>Sat Jan 01 2000 13:43:46 GMT+0900 (KST)</end>
-          <stdout/>
-        </result_info>
-      </testcase>
-      <testcase component="WebAPI/Tizen/Alarm" execution_type="auto" id="Alarm_AlarmManager_get" priority="P1" purpose="check AlarmManager method removeAll: without input attribute" status="approved" type="compliance" result="FAIL">
-        <description>
-          <pre_condition/>
-          <post_condition/>
-          <steps>
-            <step order="1">
-              <step_desc>check AlarmManager method get: default check
-              </step_desc>
-              <expected>AlarmManager method get: default check succeed
-              </expected>
-            </step>
-          </steps>
-          <test_script_entry test_script_expected_result="0">/opt/webapi-tizen-alarm-tests/Alarm/Alarm_AlarmManager_get.htm
-          </test_script_entry>
-        </description>
-        <specs>
-          <spec>
-            <spec_assertion category="Tizen Device API Specifications" section="Widget" specification="Widget Packaging and XML Configuration" interface="Widget" usage="true"/>
-            <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>
-            <spec_statement>spec_statement</spec_statement>
-          </spec>
-        </specs>
-        <result_info>
-          <actual_result>FAIL</actual_result>
-          <start>Sat Jan 01 2000 13:43:46 GMT+0900 (KST)</start>
-          <end>Sat Jan 01 2000 13:44:02 GMT+0900 (KST)</end>
-          <stdout>Test time out</stdout>
-        </result_info>
-      </testcase>
-      <testcase component="WebAPI/Tizen/Alarm" execution_type="auto" id="Alarm_AlarmAbsolute_attri_date_01" priority="P1" purpose="check AlarmAbsolute attribute when create with date" status="approved" type="compliance" result="FAIL">
-        <description>
-          <pre_condition/>
-          <post_condition/>
-          <steps>
-            <step order="1">
-              <step_desc>check AlarmAbsolute attribute when create with date
-              </step_desc>
-              <expected>AlarmAbsolute attribute return correct value when
-                create with date
-              </expected>
-            </step>
-          </steps>
-          <test_script_entry test_script_expected_result="0">/opt/webapi-tizen-alarm-tests/Alarm/Alarm_AlarmAbsolute_attri_date.htm?total_num=3&amp;locator_key=id&amp;value=1
-          </test_script_entry>
-        </description>
-        <specs>
-          <spec>
-            <spec_assertion category="Tizen Device API Specifications" section="Widget" specification="Widget Packaging and XML Configuration" interface="Widget" usage="true"/>
-            <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>
-            <spec_statement>spec_statement</spec_statement>
-          </spec>
-        </specs>
-        <result_info>
-          <actual_result>FAIL</actual_result>
-          <start>Sat Jan 01 2000 13:44:02 GMT+0900 (KST)</start>
-          <end>Sat Jan 01 2000 13:44:05 GMT+0900 (KST)</end>
-          <stdout/>
-        </result_info>
-      </testcase>
-      <testcase component="WebAPI/Tizen/Alarm" execution_type="auto" id="Alarm_AlarmManager_add_rel" priority="P1" purpose="check AlarmManager method add: add relative alarm" status="approved" type="compliance" result="FAIL">
-        <description>
-          <pre_condition/>
-          <post_condition/>
-          <steps>
-            <step order="1">
-              <step_desc>check AlarmManager method add: add relative alarm
-              </step_desc>
-              <expected>AlarmManager method add: add relative alarm succeed
-              </expected>
-            </step>
-          </steps>
-          <test_script_entry test_script_expected_result="0">/opt/webapi-tizen-alarm-tests/Alarm/Alarm_AlarmManager_add_rel.htm
-          </test_script_entry>
-        </description>
-        <specs>
-          <spec>
-            <spec_assertion category="Tizen Device API Specifications" section="Widget" specification="Widget Packaging and XML Configuration" interface="Widget" usage="true"/>
-            <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>
-            <spec_statement>spec_statement</spec_statement>
-          </spec>
-        </specs>
-        <result_info>
-          <actual_result>FAIL</actual_result>
-          <start>Sat Jan 01 2000 13:44:05 GMT+0900 (KST)</start>
-          <end>Sat Jan 01 2000 13:44:21 GMT+0900 (KST)</end>
-          <stdout>Test time out</stdout>
-        </result_info>
-      </testcase>
-      <testcase component="WebAPI/Tizen/Alarm" execution_type="auto" id="Alarm_AlarmRelative_attri_delay_02" priority="P1" purpose="check AlarmAbsolute attribute when create with period" status="approved" type="compliance" result="FAIL">
-        <description>
-          <pre_condition/>
-          <post_condition/>
-          <steps>
-            <step order="1">
-              <step_desc>check AlarmRelative attribute when create with delay
-              </step_desc>
-              <expected>AlarmRelative attribute return correct value when
-                create succeed with with delay
-              </expected>
-            </step>
-          </steps>
-          <test_script_entry test_script_expected_result="0">/opt/webapi-tizen-alarm-tests/Alarm/Alarm_AlarmRelative_attri_delay.htm?total_num=2&amp;locator_key=id&amp;value=2
-          </test_script_entry>
-        </description>
-        <specs>
-          <spec>
-            <spec_assertion category="Tizen Device API Specifications" section="Widget" specification="Widget Packaging and XML Configuration" interface="Widget" usage="true"/>
-            <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>
-            <spec_statement>spec_statement</spec_statement>
-          </spec>
-        </specs>
-        <result_info>
-          <actual_result>FAIL</actual_result>
-          <start>Sat Jan 01 2000 13:44:21 GMT+0900 (KST)</start>
-          <end>Sat Jan 01 2000 13:44:23 GMT+0900 (KST)</end>
-          <stdout/>
-        </result_info>
-      </testcase>
-    </set>
-  </suite>
-</test_definition>
diff --git a/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite2.0/xsd/test_definition.xsd b/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite2.0/xsd/test_definition.xsd
deleted file mode 100755 (executable)
index f47b778..0000000
+++ /dev/null
@@ -1,263 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
-  <xs:element name="suite">
-    <xs:complexType>
-      <xs:sequence minOccurs="1" maxOccurs="unbounded">
-        <xs:element ref="set" minOccurs="0" maxOccurs="unbounded"/>
-      </xs:sequence>
-      <xs:attributeGroup ref="set_attribute_group"/>
-      <xs:attribute name="launcher" type="xs:string"/>
-    </xs:complexType>
-    <xs:unique name="uniqueSetName">
-      <xs:selector xpath=".//set"/>
-      <xs:field xpath="@name"/>
-    </xs:unique>
-  </xs:element>
-  <xs:element name="set">
-    <xs:complexType>
-      <xs:sequence>
-        <xs:element name="capabilities" type="CapabilitiesType" minOccurs="0" maxOccurs="1"/>
-        <xs:sequence minOccurs="1" maxOccurs="unbounded">
-          <xs:element ref="testcase" minOccurs="0" maxOccurs="unbounded"/>
-        </xs:sequence>
-      </xs:sequence>
-      <xs:attributeGroup ref="set_attribute_group"/>
-      <xs:attribute name="launcher" type="xs:string"/>
-      <xs:attribute name="set_debug_msg" type="xs:string"/>
-    </xs:complexType>
-    <xs:unique name="uniqueCaseName">
-      <xs:selector xpath=".//testcase"/>
-      <xs:field xpath="@id"/>
-    </xs:unique>
-  </xs:element>
-  <xs:element name="testcase">
-    <xs:complexType>
-      <xs:sequence minOccurs="1">
-        <xs:element ref="description"/>
-        <xs:element name="categories" type="categories" minOccurs="0" maxOccurs="1"/>
-        <xs:element name="measurement" type="measurementType" minOccurs="0" maxOccurs="unbounded"/>
-        <xs:element name="series" type="seriesType" minOccurs="0" maxOccurs="unbounded"/>
-        <xs:element name="specs" type="specsType" minOccurs="0" maxOccurs="1"/>
-        <xs:element name="result_info" type="result_info_type" minOccurs="0"/>
-      </xs:sequence>
-      <xs:attributeGroup ref="case_attribute_group"/>
-    </xs:complexType>
-  </xs:element>
-  <xs:element name="steps">
-    <xs:complexType>
-      <xs:sequence minOccurs="0" maxOccurs="unbounded">
-        <xs:element ref="step"/>
-      </xs:sequence>
-    </xs:complexType>
-    <xs:unique name="uniqueStepName">
-      <xs:selector xpath=".//step"/>
-      <xs:field xpath="@order"/>
-    </xs:unique>
-  </xs:element>
-  <xs:attributeGroup name="set_attribute_group">
-    <xs:attribute name="name" type="xs:anyURI" use="required"/>
-    <xs:attribute name="type" type="xs:string"/>
-  </xs:attributeGroup>
-  <xs:attributeGroup name="case_attribute_group">
-    <xs:attribute name="id" use="required">
-      <xs:simpleType>
-        <xs:restriction base="xs:string">
-          <xs:minLength value="1"/>
-          <xs:whiteSpace value="collapse"/>
-        </xs:restriction>
-      </xs:simpleType>
-    </xs:attribute>
-    <xs:attribute name="priority" type="priority_simple_type" use="required"/>
-    <xs:attribute name="execution_type" type="execution_type_simple_type" use="required"/>
-    <xs:attribute name="component" type="xs:string"/>
-    <xs:attribute name="requirement_ref" type="xs:anyURI" use="optional"/>
-    <xs:attribute name="status" type="status_type" use="required"/>
-    <xs:attribute name="type" type="case_type_type" use="required"/>
-    <xs:attribute name="purpose" type="xs:string"/>
-    <xs:attribute name="result" type="xs:string"/>
-    <xs:attribute name="onload_delay" type="xs:int" use="optional" default="3"/>
-  </xs:attributeGroup>
-  <xs:simpleType name="priority_simple_type">
-    <xs:restriction base="xs:string">
-      <xs:enumeration value="P0"/>
-      <xs:enumeration value="P1"/>
-      <xs:enumeration value="P2"/>
-      <xs:enumeration value="P3"/>
-      <xs:enumeration value="P4"/>
-    </xs:restriction>
-  </xs:simpleType>
-  <xs:simpleType name="execution_type_simple_type">
-    <xs:restriction base="xs:string">
-      <xs:enumeration value="auto"/>
-      <xs:enumeration value="manual"/>
-    </xs:restriction>
-  </xs:simpleType>
-  <xs:simpleType name="status_type">
-    <xs:restriction base="xs:string">
-      <xs:enumeration value="designed"/>
-      <xs:enumeration value="ready"/>
-      <xs:enumeration value="approved"/>
-    </xs:restriction>
-  </xs:simpleType>
-  <xs:simpleType name="case_type_type">
-    <xs:restriction base="xs:string">
-      <xs:enumeration value="functional_positive"/>
-      <xs:enumeration value="functional_negative"/>
-      <xs:enumeration value="security"/>
-      <xs:enumeration value="performance"/>
-      <xs:enumeration value="reliability"/>
-      <xs:enumeration value="portability"/>
-      <xs:enumeration value="maintainability"/>
-      <xs:enumeration value="compliance"/>
-      <xs:enumeration value="user_experience"/>
-      <xs:enumeration value="undefined"/>
-    </xs:restriction>
-  </xs:simpleType>
-  <xs:element name="purpose" type="xs:anySimpleType"/>
-  <xs:element name="notes" type="xs:string"/>
-  <xs:element name="pre_condition" type="xs:string"/>
-  <xs:element name="post_condition" type="xs:string"/>
-  <xs:element name="description">
-    <xs:complexType>
-      <xs:sequence minOccurs="1" maxOccurs="unbounded">
-        <xs:choice minOccurs="0" maxOccurs="1">
-          <xs:element ref="notes"/>
-        </xs:choice>
-        <xs:choice minOccurs="0" maxOccurs="1">
-          <xs:element ref="pre_condition"/>
-        </xs:choice>
-        <xs:choice minOccurs="0" maxOccurs="1">
-          <xs:element ref="post_condition"/>
-        </xs:choice>
-        <xs:element ref="steps" minOccurs="1" maxOccurs="1"/>
-        <xs:choice minOccurs="0" maxOccurs="1">
-          <xs:element ref="test_script_entry"/>
-        </xs:choice>
-      </xs:sequence>
-    </xs:complexType>
-  </xs:element>
-  <xs:element name="step">
-    <xs:complexType>
-      <xs:sequence>
-        <xs:element name="step_desc" type="xs:string"/>
-        <xs:element name="expected" type="xs:string"/>
-      </xs:sequence>
-      <xs:attribute name="order" type="xs:int"/>
-    </xs:complexType>
-  </xs:element>
-  <xs:element name="test_script_entry">
-    <xs:complexType>
-      <xs:simpleContent>
-        <xs:extension base="xs:string">
-          <xs:attribute name="test_script_expected_result" type="xs:string" default="0"/>
-          <xs:attribute name="timeout" type="xs:int" default="90"/>
-          <xs:attribute name="location" type="xs:string" default="device"/>
-        </xs:extension>
-      </xs:simpleContent>
-    </xs:complexType>
-  </xs:element>
-  <xs:complexType name="result_info_type">
-    <xs:sequence minOccurs="0">
-      <xs:element name="actual_result" type="xs:string"/>
-      <xs:element name="start" type="xs:string"/>
-      <xs:element name="end" type="xs:string"/>
-      <xs:element name="stdout" type="xs:string" minOccurs="0"/>
-      <xs:element name="stderr" type="xs:string" minOccurs="0"/>
-    </xs:sequence>
-  </xs:complexType>
-  <xs:complexType name="measurementType">
-    <xs:attribute name="name" type="xs:string"/>
-    <xs:attribute name="value" type="xs:string"/>
-    <xs:attribute name="unit" type="xs:string"/>
-    <xs:attribute name="target" type="xs:string"/>
-    <xs:attribute name="failure" type="xs:string"/>
-    <xs:attribute name="power" type="xs:string"/>
-  </xs:complexType>
-  <xs:complexType name="seriesType">
-    <xs:sequence>
-      <xs:element name="measurement" type="simpleMeasurementType" minOccurs="1" maxOccurs="unbounded"/>
-    </xs:sequence>
-    <xs:attribute name="name" type="xs:string"/>
-    <xs:attribute name="group" type="xs:string"/>
-    <xs:attribute name="unit" type="xs:string"/>
-    <xs:attribute name="interval" type="xs:string"/>
-    <xs:attribute name="interval_unit" type="xs:string"/>
-    <xs:attribute name="power" type="xs:string"/>
-  </xs:complexType>
-  <xs:complexType name="simpleMeasurementType">
-    <xs:attribute name="value" type="xs:string"/>
-    <xs:attribute name="file" type="xs:string"/>
-  </xs:complexType>
-  <xs:complexType name="categories">
-    <xs:sequence>
-      <xs:element name="category" type="xs:string" maxOccurs="unbounded" minOccurs="0"/>
-    </xs:sequence>
-  </xs:complexType>
-  <xs:element name="test_definition">
-    <xs:complexType>
-      <xs:sequence minOccurs="1" maxOccurs="unbounded">
-        <xs:element name="environment" type="BuildInfoType" minOccurs="0"/>
-        <xs:element name="summary" type="summaryType" minOccurs="0"/>
-        <xs:element ref="suite" minOccurs="1" maxOccurs="unbounded"/>
-      </xs:sequence>
-    </xs:complexType>
-    <xs:unique name="uniqueSuiteName">
-      <xs:selector xpath=".//suite"/>
-      <xs:field xpath="@name"/>
-    </xs:unique>
-  </xs:element>
-  <xs:complexType name="BuildInfoType">
-    <xs:sequence>
-      <xs:element name="other" type="xs:string"/>
-    </xs:sequence>
-    <xs:attribute name="device_name" type="xs:string"/>
-    <xs:attribute name="device_model" type="xs:string"/>
-    <xs:attribute name="os_version" type="xs:string"/>
-    <xs:attribute name="device_id" type="xs:string"/>
-    <xs:attribute name="firmware_version" type="xs:string"/>
-    <xs:attribute name="screen_size" type="xs:string"/>
-    <xs:attribute name="resolution" type="xs:string"/>
-    <xs:attribute name="host" type="xs:string"/>
-    <xs:attribute name="cts_version" type="xs:string"/>
-    <xs:attribute name="build_id" type="xs:string"/>
-  </xs:complexType>
-  <xs:complexType name="summaryType">
-    <xs:sequence>
-      <xs:element name="start_at" type="xs:string"/>
-      <xs:element name="end_at" type="xs:string"/>
-    </xs:sequence>
-    <xs:attribute name="test_plan_name" type="xs:string"/>
-  </xs:complexType>
-  <xs:complexType name="specsType">
-    <xs:sequence>
-      <xs:element name="spec" type="specType" maxOccurs="unbounded"/>
-    </xs:sequence>
-  </xs:complexType>
-  <xs:complexType name="specType">
-    <xs:sequence>
-      <xs:element name="spec_assertion" type="spec_assertionType"/>
-      <xs:element name="spec_url" type="xs:string"/>
-      <xs:element name="spec_statement" type="xs:string"/>
-    </xs:sequence>
-  </xs:complexType>
-  <xs:complexType name="spec_assertionType">
-    <xs:attribute name="category" type="xs:string" use="required"/>
-    <xs:attribute name="section" type="xs:string" use="required"/>
-    <xs:attribute name="specification" type="xs:string" use="required"/>
-    <xs:attribute name="interface" type="xs:string" use="required"/>
-    <xs:attribute name="element_name" type="xs:string" use="optional"/>
-    <xs:attribute name="usage" type="xs:boolean" default="false"/>
-    <xs:attribute name="element_type" type="xs:string"/>
-  </xs:complexType>
-  <xs:complexType name="CapabilitiesType">
-    <xs:sequence>
-      <xs:element name="capability" type="CapabilityType" minOccurs="1" maxOccurs="unbounded"/>
-    </xs:sequence>
-  </xs:complexType>
-  <xs:complexType name="CapabilityType">
-    <xs:sequence minOccurs="0">
-      <xs:element name="value" type="xs:string"/>
-    </xs:sequence>
-    <xs:attribute name="name" type="xs:string" use="required"/>
-  </xs:complexType>
-</xs:schema>
diff --git a/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite2.0/xsd/testcase.xsl b/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite2.0/xsd/testcase.xsl
deleted file mode 100755 (executable)
index fb32685..0000000
+++ /dev/null
@@ -1,200 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
-  <xsl:output method="html" version="1.0" encoding="UTF-8" indent="yes"/>
-  <xsl:template match="/">
-    <html>
-      <STYLE type="text/css">
-        @import "tests.css";
-      </STYLE>
-      <head>
-        <script type="text/javascript" src="jquery.min.js"/>
-      </head>
-      <body>
-        <div id="testcasepage">
-          <div id="title">
-            <table>
-              <tr>
-                <td>
-                  <h1>Test Cases</h1>
-                </td>
-              </tr>
-            </table>
-          </div>
-          <div id="suites">
-            <a name="contents"/>
-            <table>
-              <tr>
-                <th>Test Suite</th>
-                <th>Total</th>
-                <th>Auto</th>
-                <th>Manual</th>
-              </tr>
-              <tr>
-                <td>
-                  Total
-                </td>
-                <td>
-                  <xsl:value-of select="count(test_definition/suite/set//testcase)"/>
-                </td>
-                <td>
-                  <xsl:value-of select="count(test_definition/suite/set//testcase[@execution_type = 'auto'])"/>
-                </td>
-                <td>
-                  <xsl:value-of select="count(test_definition/suite/set//testcase[@execution_type != 'auto'])"/>
-                </td>
-              </tr>
-              <xsl:for-each select="test_definition/suite">
-                <tr>
-                  <td>
-                    <a>
-                      <xsl:attribute name="href">
-                        #<xsl:value-of select="@name"/>
-                      </xsl:attribute>
-                      <xsl:value-of select="@name"/>
-                    </a>
-                  </td>
-                  <td>
-                    <xsl:value-of select="count(set//testcase)"/>
-                  </td>
-                  <td>
-                    <xsl:value-of select="count(set/testcase[@execution_type = 'auto'])"/>
-                  </td>
-                  <td>
-                    <xsl:value-of select="count(set/testcase[@execution_type != 'auto'])"/>
-                  </td>
-                </tr>
-              </xsl:for-each>
-            </table>
-          </div>
-          <div id="title">
-            <table>
-              <tr>
-                <td class="title">
-                  <h1>Detailed Test Cases</h1>
-                </td>
-              </tr>
-            </table>
-          </div>
-          <div id="cases">
-            <xsl:for-each select="test_definition/suite">
-              <xsl:sort select="@name"/>
-              <div id="btc">
-                <a href="#contents">Back to Contents</a>
-              </div>
-              <div id="suite_title">
-                Test Suite:
-                <xsl:value-of select="@name"/>
-                <a><xsl:attribute name="name"><xsl:value-of select="@name"/></xsl:attribute></a>
-              </div>
-              <table>
-                <tr>
-                  <th>Case_ID</th>
-                  <th>Purpose</th>
-                  <th>Type</th>
-                  <th>Component</th>
-                  <th>Execution Type</th>
-                  <th>Description</th>
-                  <th>Specification</th>
-                </tr>
-                <xsl:for-each select=".//set">
-                  <xsl:sort select="@name"/>
-                  <tr>
-                    <td colspan="7">
-                      Test Set:
-                      <xsl:value-of select="@name"/>
-                    </td>
-                  </tr>
-                  <xsl:for-each select=".//testcase">
-                    <!-- xsl:sort select="@id" /> -->
-                    <tr>
-                      <td>
-                        <xsl:value-of select="@id"/>
-                      </td>
-                      <td>
-                        <xsl:value-of select="@purpose"/>
-                      </td>
-                      <td>
-                        <xsl:value-of select="@type"/>
-                      </td>
-                      <td>
-                        <xsl:value-of select="@component"/>
-                      </td>
-                      <td>
-                        <xsl:value-of select="@execution_type"/>
-                      </td>
-                      <td>
-                        <p>
-                          Pre_condition:
-                          <xsl:value-of select=".//description/pre_condition"/>
-                        </p>
-                        <p>
-                          Post_condition:
-                          <xsl:value-of select=".//description/post_condition"/>
-                        </p>
-                        <p>
-                          Test Script Entry:
-                          <xsl:value-of select=".//description/test_script_entry"/>
-                        </p>
-                        <p>
-                          Steps:
-                          <p/>
-                          <xsl:for-each select=".//description/steps/step"><xsl:sort select="@order"/>
-                            Step
-                            <xsl:value-of select="@order"/>
-                            :
-                            <xsl:value-of select="./step_desc"/>
-                            ;
-                            <p/>
-                            Expected Result:
-                            <xsl:value-of select="./expected"/>
-                            <p/>
-                          </xsl:for-each>
-                        </p>
-                      </td>
-                      <td>
-                        <xsl:for-each select=".//specs/spec"><b>[Spec_Assertion]:</b><br/>
-                          [Category]:
-                          <xsl:value-of select="./spec_assertion/@category"/>
-                          <br/>
-                          [Section]:
-                          <xsl:value-of select="./spec_assertion/@section"/>
-                          <br/>
-                          [Specification]:
-                          <xsl:value-of select="./spec_assertion/@specification"/>
-                          <br/>
-                          [Interface]:
-                          <xsl:value-of select="./spec_assertion/@interface"/>
-                          <br/>
-                          <xsl:choose><xsl:when test="./spec_assertion/@element_name">
-                              [<xsl:value-of select="./spec_assertion/@element_type"/>]:
-                              <xsl:value-of select="./spec_assertion/@element_name"/>
-                              <br/>
-                            </xsl:when></xsl:choose>
-                          [URL]:
-                          <xsl:value-of select="./spec_url"/>
-                          <br/>
-                          [Statement]:
-                          <xsl:value-of select="./spec_statement"/>
-                          <br/>
-                        </xsl:for-each>
-                      </td>
-                    </tr>
-                  </xsl:for-each>
-                </xsl:for-each>
-              </table>
-            </xsl:for-each>
-          </div>
-        </div>
-        <div id="goTopBtn">
-          <img border="0" src="./back_top.png"/>
-        </div>
-        <script type="text/javascript" src="application.js"/>
-        <script language="javascript" type="text/javascript">
-          $(document).ready(function(){
-            goTopEx();
-          });
-        </script>
-      </body>
-    </html>
-  </xsl:template>
-</xsl:stylesheet>
diff --git a/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite2.0/xsd/testresult.xsl b/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite2.0/xsd/testresult.xsl
deleted file mode 100755 (executable)
index c5199c0..0000000
+++ /dev/null
@@ -1,491 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
-  <xsl:output method="html" version="1.0" encoding="UTF-8" indent="yes"/>
-  <xsl:template match="/">
-    <html>
-      <STYLE type="text/css">
-        @import "tests.css";
-      </STYLE>
-      <head>
-        <script type="text/javascript" src="jquery.min.js"/>
-      </head>
-      <body>
-        <div id="testcasepage">
-          <div id="title">
-            <table>
-              <tr>
-                <td>
-                  <h1>Test Report</h1>
-                </td>
-              </tr>
-            </table>
-          </div>
-          <div id="device">
-            <table>
-              <tr>
-                <th colspan="2">Device Information</th>
-              </tr>
-              <tr>
-                <td>Device Name</td>
-                <td>
-                  <xsl:choose>
-                    <xsl:when test="test_definition/environment/@device_name">
-                      <xsl:if test="test_definition/environment/@device_name = ''">
-                        N/A
-                      </xsl:if>
-                      <xsl:value-of select="test_definition/environment/@device_name"/>
-                    </xsl:when>
-                    <xsl:otherwise>
-                      N/A
-                    </xsl:otherwise>
-                  </xsl:choose>
-                </td>
-              </tr>
-              <tr>
-                <td>Device Model</td>
-                <td>
-                  <xsl:choose>
-                    <xsl:when test="test_definition/environment/@device_model">
-                      <xsl:if test="test_definition/environment/@device_model = ''">
-                        N/A
-                      </xsl:if>
-                      <xsl:value-of select="test_definition/environment/@device_model"/>
-                    </xsl:when>
-                    <xsl:otherwise>
-                      N/A
-                    </xsl:otherwise>
-                  </xsl:choose>
-                </td>
-              </tr>
-              <tr>
-                <td>OS Version</td>
-                <td>
-                  <xsl:choose>
-                    <xsl:when test="test_definition/environment/@os_version">
-                      <xsl:if test="test_definition/environment/@os_version = ''">
-                        N/A
-                      </xsl:if>
-                      <xsl:value-of select="test_definition/environment/@os_version"/>
-                    </xsl:when>
-                    <xsl:otherwise>
-                      N/A
-                    </xsl:otherwise>
-                  </xsl:choose>
-                </td>
-              </tr>
-              <tr>
-                <td>Device ID</td>
-                <td>
-                  <xsl:choose>
-                    <xsl:when test="test_definition/environment/@device_id">
-                      <xsl:if test="test_definition/environment/@device_id = ''">
-                        N/A
-                      </xsl:if>
-                      <xsl:value-of select="test_definition/environment/@device_id"/>
-                    </xsl:when>
-                    <xsl:otherwise>
-                      N/A
-                    </xsl:otherwise>
-                  </xsl:choose>
-                </td>
-              </tr>
-              <tr>
-                <td>Firmware Version</td>
-                <td>
-                  <xsl:choose>
-                    <xsl:when test="test_definition/environment/@firmware_version">
-                      <xsl:if test="test_definition/environment/@firmware_version = ''">
-                        N/A
-                      </xsl:if>
-                      <xsl:value-of select="test_definition/environment/@firmware_version"/>
-                    </xsl:when>
-                    <xsl:otherwise>
-                      N/A
-                    </xsl:otherwise>
-                  </xsl:choose>
-                </td>
-              </tr>
-              <tr>
-                <td>Build ID</td>
-                <td>
-                  <xsl:choose>
-                    <xsl:when test="test_definition/environment/@build_id">
-                      <xsl:if test="test_definition/environment/@build_id = ''">
-                        N/A
-                      </xsl:if>
-                      <xsl:value-of select="test_definition/environment/@build_id"/>
-                    </xsl:when>
-                    <xsl:otherwise>
-                      N/A
-                    </xsl:otherwise>
-                  </xsl:choose>
-                </td>
-              </tr>
-              <tr>
-                <td>Screen Size</td>
-                <td>
-                  <xsl:choose>
-                    <xsl:when test="test_definition/environment/@screen_size">
-                      <xsl:if test="test_definition/environment/@screen_size = ''">
-                        N/A
-                      </xsl:if>
-                      <xsl:value-of select="test_definition/environment/@screen_size"/>
-                    </xsl:when>
-                    <xsl:otherwise>
-                      N/A
-                    </xsl:otherwise>
-                  </xsl:choose>
-                </td>
-              </tr>
-              <tr>
-                <td>Resolution</td>
-                <td>
-                  <xsl:choose>
-                    <xsl:when test="test_definition/environment/@resolution">
-                      <xsl:if test="test_definition/environment/@resolution = ''">
-                        N/A
-                      </xsl:if>
-                      <xsl:value-of select="test_definition/environment/@resolution"/>
-                    </xsl:when>
-                    <xsl:otherwise>
-                      N/A
-                    </xsl:otherwise>
-                  </xsl:choose>
-                </td>
-              </tr>
-              <tr>
-                <td>Host Info</td>
-                <td>
-                  <xsl:choose>
-                    <xsl:when test="test_definition/environment/@host">
-                      <xsl:if test="test_definition/environment/@host = ''">
-                        N/A
-                      </xsl:if>
-                      <xsl:value-of select="test_definition/environment/@host"/>
-                    </xsl:when>
-                    <xsl:otherwise>
-                      N/A
-                    </xsl:otherwise>
-                  </xsl:choose>
-                </td>
-              </tr>
-              <tr>
-                <td>CTS Version</td>
-                <td>
-                  <xsl:choose>
-                    <xsl:when test="test_definition/environment/@cts_version">
-                      <xsl:if test="test_definition/environment/@cts_version = ''">
-                        N/A
-                      </xsl:if>
-                      <xsl:value-of select="test_definition/environment/@cts_version"/>
-                    </xsl:when>
-                    <xsl:otherwise>
-                      N/A
-                    </xsl:otherwise>
-                  </xsl:choose>
-                </td>
-              </tr>
-              <tr>
-                <td>Others</td>
-                <td>
-                  <xsl:if test="test_definition/environment/other = ''">
-                    N/A
-                  </xsl:if>
-                  <xsl:call-template name="br-replace">
-                    <xsl:with-param name="word" select="test_definition/environment/other"/>
-                  </xsl:call-template>
-                </td>
-              </tr>
-            </table>
-          </div>
-          <div id="summary">
-            <table>
-              <tr>
-                <th colspan="2">Test Summary</th>
-              </tr>
-              <tr>
-                <td>Test Plan Name</td>
-                <td>
-                  <xsl:value-of select="test_definition/summary/@test_plan_name"/>
-                </td>
-              </tr>
-              <tr>
-                <td>Tests Total</td>
-                <td>
-                  <xsl:value-of select="count(test_definition//suite/set/testcase)"/>
-                </td>
-              </tr>
-              <tr>
-                <td>Test Passed</td>
-                <td>
-                  <xsl:value-of select="count(test_definition//suite/set/testcase[@result = 'PASS'])"/>
-                </td>
-              </tr>
-              <tr>
-                <td>Test Failed</td>
-                <td>
-                  <xsl:value-of select="count(test_definition//suite/set/testcase[@result = 'FAIL'])"/>
-                </td>
-              </tr>
-              <tr>
-                <td>Test Block</td>
-                <td>
-                  <xsl:value-of select="count(test_definition//suite/set/testcase[@result = 'BLOCK'])"/>
-                </td>
-              </tr>
-              <tr>
-                <td>Test Not Run</td>
-                <td>
-                  <xsl:value-of select="count(test_definition//suite/set/testcase) - count(test_definition//suite/set/testcase[@result = 'PASS']) - count(test_definition//suite/set/testcase[@result = 'FAIL']) - count(test_definition//suite/set/testcase[@result = 'BLOCK'])"/>
-                </td>
-              </tr>
-              <tr>
-                <td>Start time</td>
-                <td>
-                  <xsl:value-of select="test_definition/summary/start_at"/>
-                </td>
-              </tr>
-              <tr>
-                <td>End time</td>
-                <td>
-                  <xsl:value-of select="test_definition/summary/end_at"/>
-                </td>
-              </tr>
-            </table>
-          </div>
-          <div id="suite_summary">
-            <div id="title">
-              <a name="contents"/>
-              <table>
-                <tr>
-                  <td class="title">
-                    <h1>Test Summary by Suite</h1>
-                  </td>
-                </tr>
-              </table>
-            </div>
-            <table>
-              <tr>
-                <th>Suite</th>
-                <th>Passed</th>
-                <th>Failed</th>
-                <th>Blocked</th>
-                <th>Not Run</th>
-                <th>Total</th>
-              </tr>
-              <xsl:for-each select="test_definition/suite">
-                <xsl:sort select="@name"/>
-                <tr>
-                  <td>
-                    <a>
-                      <xsl:attribute name="href">
-                        #<xsl:value-of select="@name"/>
-                      </xsl:attribute>
-                      <xsl:value-of select="@name"/>
-                    </a>
-                  </td>
-                  <td>
-                    <xsl:value-of select="count(set//testcase[@result = 'PASS'])"/>
-                  </td>
-                  <td>
-                    <xsl:value-of select="count(set//testcase[@result = 'FAIL'])"/>
-                  </td>
-                  <td>
-                    <xsl:value-of select="count(set//testcase[@result = 'BLOCK'])"/>
-                  </td>
-                  <td>
-                    <xsl:value-of select="count(set//testcase) - count(set//testcase[@result = 'PASS']) - count(set//testcase[@result = 'FAIL']) - count(set//testcase[@result = 'BLOCK'])"/>
-                  </td>
-                  <td>
-                    <xsl:value-of select="count(set//testcase)"/>
-                  </td>
-                </tr>
-              </xsl:for-each>
-            </table>
-          </div>
-          <div id="fail_cases">
-            <div id="title">
-              <table>
-                <tr>
-                  <td class="title">
-                    <h1 align="center">
-                      Test Failures (
-                        <xsl:value-of select="count(test_definition/suite/set//testcase[@result = 'FAIL'])"/>
-                      )
-                    </h1>
-                  </td>
-                </tr>
-              </table>
-            </div>
-            <xsl:for-each select="test_definition/suite">
-              <xsl:sort select="@name"/>
-              <div id="btc">
-                <a href="#contents">Back to Contents</a>
-              </div>
-              <div id="suite_title">
-                Test Suite:
-                <xsl:value-of select="@name"/>
-                <a><xsl:attribute name="name"><xsl:value-of select="@name"/></xsl:attribute></a>
-              </div>
-              <table>
-                <tr>
-                  <th>Case_ID</th>
-                  <th>Purpose</th>
-                  <th>Result</th>
-                  <th>Stdout</th>
-                </tr>
-                <xsl:for-each select=".//set">
-                  <xsl:sort select="@name"/>
-                  <tr>
-                    <td colspan="4">
-                      Test Set:
-                      <xsl:value-of select="@name"/>
-                    </td>
-                  </tr>
-                  <xsl:for-each select=".//testcase">
-                    <xsl:sort select="@id"/>
-                    <xsl:choose>
-                      <xsl:when test="@result">
-                        <xsl:if test="@result = 'FAIL'">
-                          <tr>
-                            <td>
-                              <xsl:value-of select="@id"/>
-                            </td>
-                            <td>
-                              <xsl:value-of select="@purpose"/>
-                            </td>
-                            <td class="red_rate">
-                              <xsl:value-of select="@result"/>
-                            </td>
-                            <td>
-                              <xsl:value-of select=".//result_info/stdout"/>
-                              <xsl:if test=".//result_info/stdout = ''">
-                                N/A
-                              </xsl:if>
-                            </td>
-                          </tr>
-                        </xsl:if>
-                      </xsl:when>
-                    </xsl:choose>
-                  </xsl:for-each>
-                </xsl:for-each>
-              </table>
-            </xsl:for-each>
-          </div>
-          <div id="cases">
-            <div id="title">
-              <table>
-                <tr>
-                  <td class="title">
-                    <h1 align="center">Detailed Test Results</h1>
-                  </td>
-                </tr>
-              </table>
-            </div>
-            <xsl:for-each select="test_definition/suite">
-              <xsl:sort select="@name"/>
-              <div id="btc">
-                <a href="#contents">Back to Contents</a>
-              </div>
-              <div id="suite_title">
-                Test Suite:
-                <xsl:value-of select="@name"/>
-                <a><xsl:attribute name="name"><xsl:value-of select="@name"/></xsl:attribute></a>
-              </div>
-              <table>
-                <tr>
-                  <th>Case_ID</th>
-                  <th>Purpose</th>
-                  <th>Result</th>
-                  <th>Stdout</th>
-                </tr>
-                <xsl:for-each select=".//set">
-                  <xsl:sort select="@name"/>
-                  <tr>
-                    <td colspan="4">
-                      Test Set:
-                      <xsl:value-of select="@name"/>
-                    </td>
-                  </tr>
-                  <xsl:for-each select=".//testcase">
-                    <xsl:sort select="@id"/>
-                    <tr>
-                      <td>
-                        <xsl:value-of select="@id"/>
-                      </td>
-                      <td>
-                        <xsl:value-of select="@purpose"/>
-                      </td>
-                      <xsl:choose>
-                        <xsl:when test="@result">
-                          <xsl:if test="@result = 'FAIL'">
-                            <td class="red_rate">
-                              <xsl:value-of select="@result"/>
-                            </td>
-                          </xsl:if>
-                          <xsl:if test="@result = 'PASS'">
-                            <td class="green_rate">
-                              <xsl:value-of select="@result"/>
-                            </td>
-                          </xsl:if>
-                          <xsl:if test="@result = 'BLOCK' ">
-                            <td>
-                              BLOCK
-                            </td>
-                          </xsl:if>
-                          <xsl:if test="@result != 'BLOCK' and @result != 'FAIL' and @result != 'PASS' ">
-                            <td>
-                              Not Run
-                            </td>
-                          </xsl:if>
-                        </xsl:when>
-                        <xsl:otherwise>
-                          <td>
-                          </td>
-                        </xsl:otherwise>
-                      </xsl:choose>
-                      <td>
-                        <xsl:value-of select=".//result_info/stdout"/>
-                        <xsl:if test=".//result_info/stdout = ''">
-                          N/A
-                        </xsl:if>
-                      </td>
-                    </tr>
-                  </xsl:for-each>
-                </xsl:for-each>
-              </table>
-            </xsl:for-each>
-          </div>
-        </div>
-        <div id="goTopBtn">
-          <img border="0" src="./back_top.png"/>
-        </div>
-        <script type="text/javascript" src="application.js"/>
-        <script language="javascript" type="text/javascript">
-          $(document).ready(function(){
-            goTopEx();
-          });
-        </script>
-      </body>
-    </html>
-  </xsl:template>
-  <xsl:template name="br-replace">
-    <xsl:param name="word"/>
-    <xsl:variable name="cr">
-      <xsl:text>
-      </xsl:text>
-    </xsl:variable>
-    <xsl:choose>
-      <xsl:when test="contains($word,$cr)">
-        <xsl:value-of select="substring-before($word,$cr)"/>
-        <br/>
-        <xsl:call-template name="br-replace">
-          <xsl:with-param name="word" select="substring-after($word,$cr)"/>
-        </xsl:call-template>
-      </xsl:when>
-      <xsl:otherwise>
-        <xsl:value-of select="$word"/>
-      </xsl:otherwise>
-    </xsl:choose>
-  </xsl:template>
-</xsl:stylesheet>
diff --git a/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite2.0/xsd/tests.css b/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite2.0/xsd/tests.css
deleted file mode 100755 (executable)
index c2ba69b..0000000
+++ /dev/null
@@ -1,132 +0,0 @@
-@charset "UTF-8";\r
-/* CSS Document */\r
-#testcasepage div,\r
-#testcasepage h1,\r
-#testcasepage p,\r
-#testcasepage table,\r
-#testcasepage tr,\r
-#testcasepage th,\r
-#testcasepage td {\r
-  margin: 0;\r
-  padding: 0;\r
-  border: 0;\r
-  font-weight: inherit;\r
-  font-style: inherit;\r
-  font-size: 0.96em;\r
-  font-family: arial;\r
-  vertical-align: baseline;\r
-}\r
-\r
-#testcasepage p {\r
-  text-align: left;\r
-}\r
-\r
-#suite_title {\r
-  text-align: left;\r
-}\r
-\r
-#btc {\r
-  text-align: right;\r
-}\r
-\r
-#testcasepage table {\r
-  border-collapse: separate;\r
-  border-spacing: 0;\r
-  margin-bottom: 1.4em;\r
-  vertical-align: middle;\r
-}\r
-\r
-#testcasepage th,\r
-#testcasepage td {\r
-  text-align: left;\r
-  font-weight: normal;\r
-  padding: 4px 10px 4px 5px;\r
-  vertical-align: middle;\r
-}\r
-\r
-#cases table {\r
-  width: 101%;\r
-}\r
-\r
-#fail_cases table {\r
-  width: 101%;\r
-}\r
-\r
-#title table {\r
-  width: 101%;\r
-}\r
-\r
-#device table {\r
-  width: 50%;\r
-}\r
-\r
-#summary table {\r
-  width: 50%;\r
-}\r
-\r
-#testcasepage th {\r
-  border-bottom: 1px solid #000;\r
-  background-color: #AAAAAA;\r
-  border-left: 1px solid #000;\r
-  border-top: 1px solid #000;\r
-  color: #000;\r
-  font-weight: bold;\r
-  vertical-align: bottom;\r
-}\r
-\r
-#testcasepage th:last-child,\r
-#testcasepage td:last-child {\r
-  border-right: 1px solid #000;\r
-}\r
-\r
-#testcasepage td {\r
-  border-left: 1px solid;\r
-  font-weight: normal;\r
-  border-bottom: 1px solid;\r
-}\r
-\r
-#testcasepage td.yellow_rate {\r
-  background-color: #ffcc00;\r
-}\r
-\r
-#testcasepage td.green_rate {\r
-  background-color: #33cc33;\r
-}\r
-\r
-#testcasepage td.dgreen_rate {\r
-  background-color: #339933;\r
-}\r
-\r
-#testcasepage td.red_rate {\r
-  background-color: #FF3333;\r
-}\r
-\r
-#title table,\r
-#title tr,\r
-#title td {\r
-  border-left: none;\r
-  border-bottom: none;\r
-  text-align: center;\r
-}\r
-\r
-#title td:last-child {\r
-  border-right: none;\r
-}\r
-\r
-#testcasepage h1 {\r
-  font-size: 2em;\r
-  font-family: Arial, sans-serif;\r
-  font-weight: bold;\r
-  line-height: 1;\r
-  color: #000;\r
-  margin-bottom: 0.75em;\r
-  padding-top: 0.25em;\r
-  font-weight: bold;\r
-}\r
-\r
-#goTopBtn {\r
-  right: 0px;\r
-  bottom: 0px;\r
-  position: fixed; +position: absolute;\r
-  top: expression(parseInt(document.body.scrollTop) + document.body.clientHeight - 40);\r
-}\r
diff --git a/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite2.0/xsd/tests.xml b/release/csharp-tct_5.5_dotnet/tct-tools_r4_rc1/testkitlite2.0/xsd/tests.xml
deleted file mode 100755 (executable)
index aedf930..0000000
+++ /dev/null
@@ -1,1033 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<?xml-stylesheet type="text/xsl"  href="testcase.xsl"?>
-<test_definition xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="test_definition.xsd">
-  <suite name="webapi-w3c-widget-tests">
-    <set name="WidgetPackaging">
-      <testcase purpose="Tests the user agent's ability to process files with no file extension. " type="compliance" status="ready" component="WebAPI/W3C_Widget/WidgetPackaging" execution_type="auto" priority="P3" id="dm">
-        <description>
-          <pre_condition/>
-          <post_condition/>
-          <steps>
-            <step order="1">
-              <step_desc>Install /opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/dm</step_desc>
-              <expected>To pass, the user agent start file of the widget must be index.htm</expected>
-            </step>
-          </steps>
-          <test_script_entry>/opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/dm</test_script_entry>
-        </description>
-        <specs>
-          <spec>
-            <spec_assertion category="Tizen Device API Specifications" section="Widget" specification="Widget Packaging and XML Configuration" interface="Widget" element_name="constructor" element_type="method"/>
-            <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>
-            <spec_statement>spec_statement</spec_statement>
-          </spec>
-          <spec>
-            <spec_assertion category="Tizen Device API Specifications" section="Tizen" specification="Tizen Packaging and XML Configuration" interface="Tizen" usage="true"/>
-            <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>
-            <spec_statement>spec_statement</spec_statement>
-          </spec>
-        </specs>
-      </testcase>
-      <testcase purpose="Tests the user agent's ability to process files with a file extension other than .wgt." type="compliance" status="ready" component="WebAPI/W3C_Widget/WidgetPackaging" execution_type="manual" priority="P3" id="dn">
-        <description>
-          <pre_condition/>
-          <post_condition/>
-          <steps>
-            <step order="1">
-              <step_desc>Install /opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/dn.test</step_desc>
-              <expected>To pass, the user agent start file of the widget must be index.htm</expected>
-            </step>
-          </steps>
-          <test_script_entry>/opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/dn.test</test_script_entry>
-        </description>
-        <specs>
-          <spec>
-            <spec_assertion category="Tizen Device API Specifications" section="Widget" specification="Widget Packaging and XML Configuration" interface="Widget" usage="true"/>
-            <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>
-            <spec_statement>spec_statement</spec_statement>
-          </spec>
-        </specs>
-      </testcase>
-      <testcase purpose="Test the ability of the UA to verify a zip archive." type="compliance" status="ready" component="WebAPI/W3C_Widget/WidgetPackaging" execution_type="manual" priority="P3" id="do">
-        <description>
-          <pre_condition/>
-          <post_condition/>
-          <steps>
-            <step order="1">
-              <step_desc>Install /opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/split.wgt.001</step_desc>
-              <expected>To pass, the user agent must treat this as an invalid widget (archive is spanned).</expected>
-            </step>
-          </steps>
-          <test_script_entry>/opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/split.wgt.001</test_script_entry>
-        </description>
-        <specs>
-          <spec>
-            <spec_assertion category="Tizen Device API Specifications" section="Widget" specification="Widget Packaging and XML Configuration" interface="Widget" element_name="constructor" element_type="method"/>
-            <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>
-            <spec_statement>spec_statement</spec_statement>
-          </spec>
-        </specs>
-      </testcase>
-      <testcase purpose="Test the user agent's ability to get a widget over HTTP and respect the application/widget mimetype. The server from which this test is served from has been set up to label the 'test' resource as an 'application/widget'." type="compliance" status="ready" component="WebAPI/W3C_Widget/WidgetPackaging" execution_type="manual" priority="P3" id="z3">
-        <description>
-          <pre_condition/>
-          <post_condition/>
-          <steps>
-            <step order="1">
-              <step_desc>Install /opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/z3</step_desc>
-              <expected>To pass, a user agent must correctly process this resource as a widget because of the 'application/widget' mimetype (i.e., not only because of sniffing).</expected>
-            </step>
-          </steps>
-          <test_script_entry>/opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/z3</test_script_entry>
-        </description>
-        <specs>
-          <spec>
-            <spec_assertion category="Tizen Device API Specifications" section="Widget" specification="Widget Packaging and XML Configuration" interface="Widget" element_name="constructor" element_type="method"/>
-            <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>
-            <spec_statement>spec_statement</spec_statement>
-          </spec>
-        </specs>
-      </testcase>
-      <testcase purpose="Test the user agent's ability to get a widget over HTTP and respect the 'application/widget' mimetype. The server from which this test is served from has been set up to label the 'test.html' resource as an 'application/widget'." type="compliance" status="ready" component="WebAPI/W3C_Widget/WidgetPackaging" execution_type="manual" priority="P3" id="z4">
-        <description>
-          <pre_condition/>
-          <post_condition/>
-          <steps>
-            <step order="1">
-              <step_desc>Install /opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/z4.html</step_desc>
-              <expected>To pass, a user agent must correctly process this resource as a widget because of the 'application/widget' mimetype (i.e., not only via sniffing).</expected>
-            </step>
-          </steps>
-          <test_script_entry>/opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/z4.html</test_script_entry>
-        </description>
-        <specs>
-          <spec>
-            <spec_assertion category="Tizen Device API Specifications" section="Widget" specification="Widget Packaging and XML Configuration" interface="Widget" element_name="constructor" element_type="method"/>
-            <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>
-            <spec_statement>spec_statement</spec_statement>
-          </spec>
-        </specs>
-      </testcase>
-      <testcase purpose="Tests that an empty defaultlocale attribute is ignored (and does not cause the widget to be treated as invalid)." type="compliance" status="ready" component="WebAPI/W3C_Widget/WidgetPackaging" execution_type="manual" priority="P3" id="dlocignore00">
-        <description>
-          <pre_condition/>
-          <post_condition/>
-          <steps>
-            <step order="1">
-              <step_desc>Install /opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/dlocignore00.wgt</step_desc>
-              <expected>To pass, the widget must simply run..</expected>
-            </step>
-          </steps>
-          <test_script_entry>/opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/dlocignore00.wgt</test_script_entry>
-        </description>
-        <specs>
-          <spec>
-            <spec_assertion category="Tizen Device API Specifications" section="Widget" specification="Widget Packaging and XML Configuration" interface="Widget" element_name="constructor" element_type="method"/>
-            <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>
-            <spec_statement>spec_statement</spec_statement>
-          </spec>
-        </specs>
-      </testcase>
-      <testcase purpose="Tests that the user agent applies rule for getting a single attribute value to the defaultlocale attribute." type="compliance" status="ready" component="WebAPI/W3C_Widget/WidgetPackaging" execution_type="manual" priority="P3" id="dlocignore01">
-        <description>
-          <pre_condition/>
-          <post_condition/>
-          <steps>
-            <step order="1">
-              <step_desc>Install /opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/ta-de-001.wgt</step_desc>
-              <expected> To pass, the name of the widget must be the value PASS..</expected>
-            </step>
-          </steps>
-          <test_script_entry>/opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/ta-de-001.wgt</test_script_entry>
-        </description>
-        <specs>
-          <spec>
-            <spec_assertion category="Tizen Device API Specifications" section="Widget" specification="Widget Packaging and XML Configuration" interface="Widget" element_name="constructor" element_type="method"/>
-            <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>
-            <spec_statement>spec_statement</spec_statement>
-          </spec>
-        </specs>
-      </testcase>
-      <testcase purpose="Test that the user agent matches obscure, yet valid, language tags." type="compliance" status="ready" component="WebAPI/W3C_Widget/WidgetPackaging" execution_type="manual" priority="P3" id="dlocignore02">
-        <description>
-          <pre_condition/>
-          <post_condition/>
-          <steps>
-            <step order="1">
-              <step_desc>Install /opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/ta-de-002.wgt</step_desc>
-              <expected> To pass, the widgets description must be the value PASS..</expected>
-            </step>
-          </steps>
-          <test_script_entry>/opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/ta-de-002.wgt</test_script_entry>
-        </description>
-        <specs>
-          <spec>
-            <spec_assertion category="Tizen Device API Specifications" section="Widget" specification="Widget Packaging and XML Configuration" interface="Widget" element_name="constructor" element_type="method"/>
-            <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>
-            <spec_statement>spec_statement</spec_statement>
-          </spec>
-        </specs>
-      </testcase>
-      <testcase purpose="Tests that a language tag already part of the UA's locales list is ignored when it is repeated for defaultlocale attribute." type="compliance" status="ready" component="WebAPI/W3C_Widget/WidgetPackaging" execution_type="manual" priority="P3" id="dlocignore03">
-        <description>
-          <pre_condition/>
-          <post_condition/>
-          <steps>
-            <step order="1">
-              <step_desc>Install /opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/ta-de-003.wgt</step_desc>
-              <expected>To pass, the specified value should not be added twice to the locales list of the UA..</expected>
-            </step>
-          </steps>
-          <test_script_entry>/opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/ta-de-003.wgt</test_script_entry>
-        </description>
-        <specs>
-          <spec>
-            <spec_assertion category="Tizen Device API Specifications" section="Widget" specification="Widget Packaging and XML Configuration" interface="Widget" element_name="constructor" element_type="method"/>
-            <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>
-            <spec_statement>spec_statement</spec_statement>
-          </spec>
-        </specs>
-      </testcase>
-      <testcase purpose="Tests that the default locale is added to the end of the user agent's locale list   (and does not override the default language, which is assumed to be 'en')." type="compliance" status="ready" component="WebAPI/W3C_Widget/WidgetPackaging" execution_type="manual" priority="P3" id="dlocignore04">
-        <description>
-          <pre_condition/>
-          <post_condition/>
-          <steps>
-            <step order="1">
-              <step_desc>Install /opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/ta-de-004.wgt</step_desc>
-              <expected>To pass, the name of the widget must be PASS..</expected>
-            </step>
-          </steps>
-          <test_script_entry>/opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/ta-de-004.wgt</test_script_entry>
-        </description>
-        <specs>
-          <spec>
-            <spec_assertion category="Tizen Device API Specifications" section="Widget" specification="Widget Packaging and XML Configuration" interface="Widget" element_name="constructor" element_type="method"/>
-            <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>
-            <spec_statement>spec_statement</spec_statement>
-          </spec>
-        </specs>
-      </testcase>
-      <testcase purpose="Tests that the value of defaultlocale is also used to in folder-based localization." type="compliance" status="ready" component="WebAPI/W3C_Widget/WidgetPackaging" execution_type="manual" priority="P3" id="dlocuse00">
-        <description>
-          <pre_condition/>
-          <post_condition/>
-          <steps>
-            <step order="1">
-              <step_desc>Install /opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/ta-de-000.wgt</step_desc>
-              <expected>To pass, the index.html of the folder 'locales/esx-al/' should be loaded and say PASS..</expected>
-            </step>
-          </steps>
-          <test_script_entry>/opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/ta-de-000.wgt</test_script_entry>
-        </description>
-        <specs>
-          <spec>
-            <spec_assertion category="Tizen Device API Specifications" section="Widget" specification="Widget Packaging and XML Configuration" interface="Widget" element_name="constructor" element_type="method"/>
-            <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>
-            <spec_statement>spec_statement</spec_statement>
-          </spec>
-        </specs>
-      </testcase>
-      <testcase purpose="Tests that the value of defaultlocale works in conjunction to xml:lang on the widget element." type="compliance" status="ready" component="WebAPI/W3C_Widget/WidgetPackaging" execution_type="manual" priority="P3" id="dlocuse01">
-        <description>
-          <pre_condition/>
-          <post_condition/>
-          <steps>
-            <step order="1">
-              <step_desc>Install /opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/dlocuse01.wgt</step_desc>
-              <expected>To pass, the name of the widget must be PASS..</expected>
-            </step>
-          </steps>
-          <test_script_entry>/opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/dlocuse01.wgt</test_script_entry>
-        </description>
-        <specs>
-          <spec>
-            <spec_assertion category="Tizen Device API Specifications" section="Widget" specification="Widget Packaging and XML Configuration" interface="Widget" element_name="constructor" element_type="method"/>
-            <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>
-            <spec_statement>spec_statement</spec_statement>
-          </spec>
-        </specs>
-      </testcase>
-      <testcase purpose="Tests that the UA rejects configuration documents that don't have  correct widget element at the root." type="compliance" status="ready" component="WebAPI/W3C_Widget/WidgetPackaging" execution_type="manual" priority="P3" id="aa">
-        <description>
-          <pre_condition/>
-          <post_condition/>
-          <steps>
-            <step order="1">
-              <step_desc>Install /opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/aa.wgt</step_desc>
-              <expected> To pass, the UA must treat this as an invalid widget (the root element is not widget)..</expected>
-            </step>
-          </steps>
-          <test_script_entry>/opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/aa.wgt</test_script_entry>
-        </description>
-        <specs>
-          <spec>
-            <spec_assertion category="Tizen Device API Specifications" section="Widget" specification="Widget Packaging and XML Configuration" interface="Widget" element_name="constructor" element_type="method"/>
-            <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>
-            <spec_statement>spec_statement</spec_statement>
-          </spec>
-        </specs>
-      </testcase>
-      <testcase purpose="Tests that the UA rejects configuration documents that don't have correct  widget element at the root." type="compliance" status="ready" component="WebAPI/W3C_Widget/WidgetPackaging" execution_type="manual" priority="P3" id="ab">
-        <description>
-          <pre_condition/>
-          <post_condition/>
-          <steps>
-            <step order="1">
-              <step_desc>Install /opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/ab.wgt</step_desc>
-              <expected> To pass, the UA must treat this as an invalid widget (the namespace is wrong)..</expected>
-            </step>
-          </steps>
-          <test_script_entry>/opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/ab.wgt</test_script_entry>
-        </description>
-        <specs>
-          <spec>
-            <spec_assertion category="Tizen Device API Specifications" section="Widget" specification="Widget Packaging and XML Configuration" interface="Widget" element_name="constructor" element_type="method"/>
-            <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>
-            <spec_statement>spec_statement</spec_statement>
-          </spec>
-        </specs>
-      </testcase>
-      <testcase purpose="Tests that the UA rejects configuration documents that don't have correct widget  element at the root." type="compliance" status="ready" component="WebAPI/W3C_Widget/WidgetPackaging" execution_type="manual" priority="P3" id="ac">
-        <description>
-          <pre_condition/>
-          <post_condition/>
-          <steps>
-            <step order="1">
-              <step_desc>Install /opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/ac.wgt</step_desc>
-              <expected>To pass, the UA must treat this as an invalid widget (the namespace is missing)..</expected>
-            </step>
-          </steps>
-          <test_script_entry>/opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/ac.wgt</test_script_entry>
-        </description>
-        <specs>
-          <spec>
-            <spec_assertion category="Tizen Device API Specifications" section="Widget" specification="Widget Packaging and XML Configuration" interface="Widget" element_name="constructor" element_type="method"/>
-            <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>
-            <spec_statement>spec_statement</spec_statement>
-          </spec>
-        </specs>
-      </testcase>
-      <testcase purpose="Test that a user agent correctly processes a author element." type="compliance" status="ready" component="WebAPI/W3C_Widget/WidgetPackaging" execution_type="manual" priority="P3" id="af">
-        <description>
-          <pre_condition/>
-          <post_condition/>
-          <steps>
-            <step order="1">
-              <step_desc>Install /opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/af.wgt</step_desc>
-              <expected>To pass, the author name must be the string "PASS"..</expected>
-            </step>
-          </steps>
-          <test_script_entry>/opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/af.wgt</test_script_entry>
-        </description>
-        <specs>
-          <spec>
-            <spec_assertion category="Tizen Device API Specifications" section="Widget" specification="Widget Packaging and XML Configuration" interface="Widget" element_name="constructor" element_type="method"/>
-            <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>
-            <spec_statement>spec_statement</spec_statement>
-          </spec>
-        </specs>
-      </testcase>
-      <testcase purpose="Test that a user agent correctly applies the Rule for Getting Text Content with Normalized White Space." type="compliance" status="ready" component="WebAPI/W3C_Widget/WidgetPackaging" execution_type="manual" priority="P3" id="ag">
-        <description>
-          <pre_condition/>
-          <post_condition/>
-          <steps>
-            <step order="1">
-              <step_desc>Install /opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/ag.wgt</step_desc>
-              <expected>To pass, the widget author must be the string "P A S S" (i.e., white space collapsed to single space)..</expected>
-            </step>
-          </steps>
-          <test_script_entry>/opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/ag.wgt</test_script_entry>
-        </description>
-        <specs>
-          <spec>
-            <spec_assertion category="Tizen Device API Specifications" section="Widget" specification="Widget Packaging and XML Configuration" interface="Widget" element_name="constructor" element_type="method"/>
-            <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>
-            <spec_statement>spec_statement</spec_statement>
-          </spec>
-        </specs>
-      </testcase>
-      <testcase purpose="Test that a user agent correctly applies the Rule for Getting Text Content with Normalized White Space." type="compliance" status="ready" component="WebAPI/W3C_Widget/WidgetPackaging" execution_type="manual" priority="P3" id="ah">
-        <description>
-          <pre_condition/>
-          <post_condition/>
-          <steps>
-            <step order="1">
-              <step_desc>Install /opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/ah.wgt</step_desc>
-              <expected>To pass, the author name must be the string "PASS" (i.e., all white space collapsed to single space, spaces at start/end trimmed)..</expected>
-            </step>
-          </steps>
-          <test_script_entry>/opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/ah.wgt</test_script_entry>
-        </description>
-        <specs>
-          <spec>
-            <spec_assertion category="Tizen Device API Specifications" section="Widget" specification="Widget Packaging and XML Configuration" interface="Widget" element_name="constructor" element_type="method"/>
-            <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>
-            <spec_statement>spec_statement</spec_statement>
-          </spec>
-        </specs>
-      </testcase>
-      <testcase purpose="Test that a user agent correctly applies the rule for getting a single attribute value." type="compliance" status="ready" component="WebAPI/W3C_Widget/WidgetPackaging" execution_type="manual" priority="P3" id="ai">
-        <description>
-          <pre_condition/>
-          <post_condition/>
-          <steps>
-            <step order="1">
-              <step_desc>Install /opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/ai.wgt</step_desc>
-              <expected>To pass, the author email must be the string "PASS"..</expected>
-            </step>
-          </steps>
-          <test_script_entry>/opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/ai.wgt</test_script_entry>
-        </description>
-        <specs>
-          <spec>
-            <spec_assertion category="Tizen Device API Specifications" section="Widget" specification="Widget Packaging and XML Configuration" interface="Widget" element_name="constructor" element_type="method"/>
-            <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>
-            <spec_statement>spec_statement</spec_statement>
-          </spec>
-        </specs>
-      </testcase>
-      <testcase purpose="Test that a user agent correctly applies the rule for getting a single attribute value and the Rule for Getting Text Content with Normalized White Space." type="compliance" status="ready" component="WebAPI/W3C_Widget/WidgetPackaging" execution_type="manual" priority="P3" id="aj">
-        <description>
-          <pre_condition/>
-          <post_condition/>
-          <steps>
-            <step order="1">
-              <step_desc>Install /opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/aj.wgt</step_desc>
-              <expected>To pass, the author name must be the string "PASS"..</expected>
-            </step>
-          </steps>
-          <test_script_entry>/opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/aj.wgt</test_script_entry>
-        </description>
-        <specs>
-          <spec>
-            <spec_assertion category="Tizen Device API Specifications" section="Widget" specification="Widget Packaging and XML Configuration" interface="Widget" element_name="constructor" element_type="method"/>
-            <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>
-            <spec_statement>spec_statement</spec_statement>
-          </spec>
-        </specs>
-      </testcase>
-      <testcase purpose="Test that a user agent correctly applies the rule for getting a single attribute value and the Rule for Getting Text Content with Normalized White Space." type="compliance" status="ready" component="WebAPI/W3C_Widget/WidgetPackaging" execution_type="manual" priority="P3" id="ak">
-        <description>
-          <pre_condition/>
-          <post_condition/>
-          <steps>
-            <step order="1">
-              <step_desc>Install /opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/ak.wgt</step_desc>
-              <expected>To pass, the author name must be the string "PASS"..</expected>
-            </step>
-          </steps>
-          <test_script_entry>/opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/ak.wgt</test_script_entry>
-        </description>
-        <specs>
-          <spec>
-            <spec_assertion category="Tizen Device API Specifications" section="Widget" specification="Widget Packaging and XML Configuration" interface="Widget" element_name="constructor" element_type="method"/>
-            <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>
-            <spec_statement>spec_statement</spec_statement>
-          </spec>
-        </specs>
-      </testcase>
-      <testcase purpose="Test the ability of the user agent to handle an empty author element." type="compliance" status="ready" component="WebAPI/W3C_Widget/WidgetPackaging" execution_type="manual" priority="P3" id="al">
-        <description>
-          <pre_condition/>
-          <post_condition/>
-          <steps>
-            <step order="1">
-              <step_desc>Install /opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/al.wgt</step_desc>
-              <expected>To pass, the author name must be an empty string..</expected>
-            </step>
-          </steps>
-          <test_script_entry>/opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/al.wgt</test_script_entry>
-        </description>
-        <specs>
-          <spec>
-            <spec_assertion category="Tizen Device API Specifications" section="Widget" specification="Widget Packaging and XML Configuration" interface="Widget" element_name="constructor" element_type="method"/>
-            <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>
-            <spec_statement>spec_statement</spec_statement>
-          </spec>
-        </specs>
-      </testcase>
-      <testcase purpose="Test the ability of the user agent to correctly process the author href attribute." type="compliance" status="ready" component="WebAPI/W3C_Widget/WidgetPackaging" execution_type="manual" priority="P3" id="am">
-        <description>
-          <pre_condition/>
-          <post_condition/>
-          <steps>
-            <step order="1">
-              <step_desc>Install /opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/am.wgt</step_desc>
-              <expected>To pass, the value of author href must be "PASS:PASS"..</expected>
-            </step>
-          </steps>
-          <test_script_entry>/opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/am.wgt</test_script_entry>
-        </description>
-        <specs>
-          <spec>
-            <spec_assertion category="Tizen Device API Specifications" section="Widget" specification="Widget Packaging and XML Configuration" interface="Widget" element_name="constructor" element_type="method"/>
-            <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>
-            <spec_statement>spec_statement</spec_statement>
-          </spec>
-        </specs>
-      </testcase>
-      <testcase purpose="Test the ability of the user agent to correctly process the author href attribute." type="compliance" status="ready" component="WebAPI/W3C_Widget/WidgetPackaging" execution_type="manual" priority="P3" id="an">
-        <description>
-          <pre_condition/>
-          <post_condition/>
-          <steps>
-            <step order="1">
-              <step_desc>Install /opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/an.wgt</step_desc>
-              <expected>To pass, the value of author href must be ignored..</expected>
-            </step>
-          </steps>
-          <test_script_entry>/opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/an.wgt</test_script_entry>
-        </description>
-        <specs>
-          <spec>
-            <spec_assertion category="Tizen Device API Specifications" section="Widget" specification="Widget Packaging and XML Configuration" interface="Widget" element_name="constructor" element_type="method"/>
-            <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>
-            <spec_statement>spec_statement</spec_statement>
-          </spec>
-        </specs>
-      </testcase>
-      <testcase purpose="Test that a user agent correctly processes a name element." type="compliance" status="ready" component="WebAPI/W3C_Widget/WidgetPackaging" execution_type="manual" priority="P3" id="ao">
-        <description>
-          <pre_condition/>
-          <post_condition/>
-          <steps>
-            <step order="1">
-              <step_desc>Install /opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/ao.wgt</step_desc>
-              <expected>To pass, the widget name must be the string "PASS"..</expected>
-            </step>
-          </steps>
-          <test_script_entry>/opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/ao.wgt</test_script_entry>
-        </description>
-        <specs>
-          <spec>
-            <spec_assertion category="Tizen Device API Specifications" section="Widget" specification="Widget Packaging and XML Configuration" interface="Widget" element_name="constructor" element_type="method"/>
-            <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>
-            <spec_statement>spec_statement</spec_statement>
-          </spec>
-        </specs>
-      </testcase>
-      <testcase purpose="Test that a user agent correctly applies the Rule for Getting Text Content with Normalized White Space." type="compliance" status="ready" component="WebAPI/W3C_Widget/WidgetPackaging" execution_type="manual" priority="P3" id="ap">
-        <description>
-          <pre_condition/>
-          <post_condition/>
-          <steps>
-            <step order="1">
-              <step_desc>Install /opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/ap.wgt</step_desc>
-              <expected>To pass, the widget name must be the string "P A S S" (i.e., white space collapsed to single space)..</expected>
-            </step>
-          </steps>
-          <test_script_entry>/opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/ap.wgt</test_script_entry>
-        </description>
-        <specs>
-          <spec>
-            <spec_assertion category="Tizen Device API Specifications" section="Widget" specification="Widget Packaging and XML Configuration" interface="Widget" element_name="constructor" element_type="method"/>
-            <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>
-            <spec_statement>spec_statement</spec_statement>
-          </spec>
-        </specs>
-      </testcase>
-      <testcase purpose="Test that a user agent correctly applies the Rule for Getting Text Content with Normalized White Space." type="compliance" status="ready" component="WebAPI/W3C_Widget/WidgetPackaging" execution_type="manual" priority="P3" id="aq">
-        <description>
-          <pre_condition/>
-          <post_condition/>
-          <steps>
-            <step order="1">
-              <step_desc>Install /opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/aq.wgt</step_desc>
-              <expected>To pass, the widget name must be the string "PASS" (i.e., all white space collapsed to single space, spaces at front/back trimmed)..</expected>
-            </step>
-          </steps>
-          <test_script_entry>/opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/aq.wgt</test_script_entry>
-        </description>
-        <specs>
-          <spec>
-            <spec_assertion category="Tizen Device API Specifications" section="Widget" specification="Widget Packaging and XML Configuration" interface="Widget" element_name="constructor" element_type="method"/>
-            <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>
-            <spec_statement>spec_statement</spec_statement>
-          </spec>
-        </specs>
-      </testcase>
-      <testcase purpose="Test that a user agent correctly applies the rule for getting a single attribute value." type="compliance" status="ready" component="WebAPI/W3C_Widget/WidgetPackaging" execution_type="manual" priority="P3" id="ar">
-        <description>
-          <pre_condition/>
-          <post_condition/>
-          <steps>
-            <step order="1">
-              <step_desc>Install /opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/ar.wgt</step_desc>
-              <expected>To pass, the widget short name must be the string "PASS"..</expected>
-            </step>
-          </steps>
-          <test_script_entry>/opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/ar.wgt</test_script_entry>
-        </description>
-        <specs>
-          <spec>
-            <spec_assertion category="Tizen Device API Specifications" section="Widget" specification="Widget Packaging and XML Configuration" interface="Widget" element_name="constructor" element_type="method"/>
-            <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>
-            <spec_statement>spec_statement</spec_statement>
-          </spec>
-        </specs>
-      </testcase>
-      <testcase purpose="Test that a user agent correctly applies the rule for getting a single attribute value and  the Rule for Getting Text Content with Normalized White Space." type="compliance" status="ready" component="WebAPI/W3C_Widget/WidgetPackaging" execution_type="manual" priority="P3" id="as">
-        <description>
-          <pre_condition/>
-          <post_condition/>
-          <steps>
-            <step order="1">
-              <step_desc>Install /opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/as.wgt</step_desc>
-              <expected>To pass, the widget short name must be the string "PASS" and the widget name must be "PASS"..</expected>
-            </step>
-          </steps>
-          <test_script_entry>/opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/as.wgt</test_script_entry>
-        </description>
-        <specs>
-          <spec>
-            <spec_assertion category="Tizen Device API Specifications" section="Widget" specification="Widget Packaging and XML Configuration" interface="Widget" element_name="constructor" element_type="method"/>
-            <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>
-            <spec_statement>spec_statement</spec_statement>
-          </spec>
-        </specs>
-      </testcase>
-      <testcase purpose="Test that a user agent correctly applies the rule for getting a single attribute value and  the Rule for Getting Text Content with Normalized White Space." type="compliance" status="ready" component="WebAPI/W3C_Widget/WidgetPackaging" execution_type="manual" priority="P3" id="at">
-        <description>
-          <pre_condition/>
-          <post_condition/>
-          <steps>
-            <step order="1">
-              <step_desc>Install /opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/at.wgt</step_desc>
-              <expected>To pass, the widget short name must be the string "PASS" and the widget name must be "PASS"..</expected>
-            </step>
-          </steps>
-          <test_script_entry>/opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/at.wgt</test_script_entry>
-        </description>
-        <specs>
-          <spec>
-            <spec_assertion category="Tizen Device API Specifications" section="Widget" specification="Widget Packaging and XML Configuration" interface="Widget" element_name="constructor" element_type="method"/>
-            <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>
-            <spec_statement>spec_statement</spec_statement>
-          </spec>
-        </specs>
-      </testcase>
-      <testcase purpose="Test that a user agent correctly processes the short attribute." type="compliance" status="ready" component="WebAPI/W3C_Widget/WidgetPackaging" execution_type="manual" priority="P3" id="au">
-        <description>
-          <pre_condition/>
-          <post_condition/>
-          <steps>
-            <step order="1">
-              <step_desc>Install /opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/au.wgt</step_desc>
-              <expected>To pass, the widget short name must be an empty string..</expected>
-            </step>
-          </steps>
-          <test_script_entry>/opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/au.wgt</test_script_entry>
-        </description>
-        <specs>
-          <spec>
-            <spec_assertion category="Tizen Device API Specifications" section="Widget" specification="Widget Packaging and XML Configuration" interface="Widget" element_name="constructor" element_type="method"/>
-            <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>
-            <spec_statement>spec_statement</spec_statement>
-          </spec>
-        </specs>
-      </testcase>
-      <testcase purpose="Test the ability of the user agent to handle an empty name element." type="compliance" status="ready" component="WebAPI/W3C_Widget/WidgetPackaging" execution_type="manual" priority="P3" id="av">
-        <description>
-          <pre_condition/>
-          <post_condition/>
-          <steps>
-            <step order="1">
-              <step_desc>Install /opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/av.wgt</step_desc>
-              <expected>To pass, the widget name must be an empty string..</expected>
-            </step>
-          </steps>
-          <test_script_entry>/opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/av.wgt</test_script_entry>
-        </description>
-        <specs>
-          <spec>
-            <spec_assertion category="Tizen Device API Specifications" section="Widget" specification="Widget Packaging and XML Configuration" interface="Widget" element_name="constructor" element_type="method"/>
-            <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>
-            <spec_statement>spec_statement</spec_statement>
-          </spec>
-        </specs>
-      </testcase>
-      <testcase purpose="Test that a user agent correctly processes a name element with xml:lang attribute." type="compliance" status="ready" component="WebAPI/W3C_Widget/WidgetPackaging" execution_type="manual" priority="P3" id="oa">
-        <description>
-          <pre_condition/>
-          <post_condition/>
-          <steps>
-            <step order="1">
-              <step_desc>Install /opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/oa.wgt</step_desc>
-              <expected>To pass, the widget name must be the string "PASS"..</expected>
-            </step>
-          </steps>
-          <test_script_entry>/opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/oa.wgt</test_script_entry>
-        </description>
-        <specs>
-          <spec>
-            <spec_assertion category="Tizen Device API Specifications" section="Widget" specification="Widget Packaging and XML Configuration" interface="Widget" element_name="constructor" element_type="method"/>
-            <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>
-            <spec_statement>spec_statement</spec_statement>
-          </spec>
-        </specs>
-      </testcase>
-      <testcase purpose="Test that the user agent does not attempt to load a default start file when a custom start file has been declared." type="compliance" status="ready" component="WebAPI/W3C_Widget/WidgetPackaging" execution_type="manual" priority="P3" id="aw">
-        <description>
-          <pre_condition/>
-          <post_condition/>
-          <steps>
-            <step order="1">
-              <step_desc>Install /opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/aw.wgt</step_desc>
-              <expected>To pass, the widget start file must point to "pass.html" and the icons list must contain a pointer to "icon.png" at the root of the widget..</expected>
-            </step>
-          </steps>
-          <test_script_entry>/opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/aw.wgt</test_script_entry>
-        </description>
-        <specs>
-          <spec>
-            <spec_assertion category="Tizen Device API Specifications" section="Widget" specification="Widget Packaging and XML Configuration" interface="Widget" element_name="constructor" element_type="method"/>
-            <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>
-            <spec_statement>spec_statement</spec_statement>
-          </spec>
-        </specs>
-      </testcase>
-      <testcase purpose="Test the UA's ability process the height attribute." type="compliance" status="ready" component="WebAPI/W3C_Widget/WidgetPackaging" execution_type="manual" priority="P3" id="ax">
-        <description>
-          <pre_condition/>
-          <post_condition/>
-          <steps>
-            <step order="1">
-              <step_desc>Install /opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/ax.wgt</step_desc>
-              <expected>To pass, the widget height must be either the numeric value 123 or a value greater than 0..</expected>
-            </step>
-          </steps>
-          <test_script_entry>/opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/ax.wgt</test_script_entry>
-        </description>
-        <specs>
-          <spec>
-            <spec_assertion category="Tizen Device API Specifications" section="Widget" specification="Widget Packaging and XML Configuration" interface="Widget" element_name="constructor" element_type="method"/>
-            <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>
-            <spec_statement>spec_statement</spec_statement>
-          </spec>
-        </specs>
-      </testcase>
-      <testcase purpose="Test the UA's ability process the height attribute." type="compliance" status="ready" component="WebAPI/W3C_Widget/WidgetPackaging" execution_type="manual" priority="P3" id="ay">
-        <description>
-          <pre_condition/>
-          <post_condition/>
-          <steps>
-            <step order="1">
-              <step_desc>Install /opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/ay.wgt</step_desc>
-              <expected>To pass, the user agent must ignore the value of the height attribute (the value is composed of characters)..</expected>
-            </step>
-          </steps>
-          <test_script_entry>/opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/ay.wgt</test_script_entry>
-        </description>
-        <specs>
-          <spec>
-            <spec_assertion category="Tizen Device API Specifications" section="Widget" specification="Widget Packaging and XML Configuration" interface="Widget" element_name="constructor" element_type="method"/>
-            <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>
-            <spec_statement>spec_statement</spec_statement>
-          </spec>
-        </specs>
-      </testcase>
-      <testcase purpose="Test the UA's ability process the height attribute." type="compliance" status="ready" component="WebAPI/W3C_Widget/WidgetPackaging" execution_type="manual" priority="P3" id="az">
-        <description>
-          <pre_condition/>
-          <post_condition/>
-          <steps>
-            <step order="1">
-              <step_desc>Install /opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/az.wgt</step_desc>
-              <expected>To pass, the widget height must be the numeric value 100 or a value greater than 0 (resulting from rule for parsing a non-negative integer)..</expected>
-            </step>
-          </steps>
-          <test_script_entry>/opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/az.wgt</test_script_entry>
-        </description>
-        <specs>
-          <spec>
-            <spec_assertion category="Tizen Device API Specifications" section="Widget" specification="Widget Packaging and XML Configuration" interface="Widget" element_name="constructor" element_type="method"/>
-            <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>
-            <spec_statement>spec_statement</spec_statement>
-          </spec>
-        </specs>
-      </testcase>
-      <testcase purpose="Test the UA's ability process the height attribute." type="compliance" status="ready" component="WebAPI/W3C_Widget/WidgetPackaging" execution_type="manual" priority="P3" id="a1">
-        <description>
-          <pre_condition/>
-          <post_condition/>
-          <steps>
-            <step order="1">
-              <step_desc>Install /opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/a1.wgt</step_desc>
-              <expected>To pass, the widget height must be the numeric value 123 or a value greater than 0 (resulting from rule for parsing a non-negative integer)..</expected>
-            </step>
-          </steps>
-          <test_script_entry>/opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/a1.wgt</test_script_entry>
-        </description>
-        <specs>
-          <spec>
-            <spec_assertion category="Tizen Device API Specifications" section="Widget" specification="Widget Packaging and XML Configuration" interface="Widget" element_name="constructor" element_type="method"/>
-            <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>
-            <spec_statement>spec_statement</spec_statement>
-          </spec>
-        </specs>
-      </testcase>
-      <testcase purpose="Test the UA's ability process the height attribute." type="compliance" status="ready" component="WebAPI/W3C_Widget/WidgetPackaging" execution_type="manual" priority="P3" id="a2">
-        <description>
-          <pre_condition/>
-          <post_condition/>
-          <steps>
-            <step order="1">
-              <step_desc>Install /opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/a2.wgt</step_desc>
-              <expected>To pass, the widget height must be ignored (the value is an empty string, hence it would be ignored)..</expected>
-            </step>
-          </steps>
-          <test_script_entry>/opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/a2.wgt</test_script_entry>
-        </description>
-        <specs>
-          <spec>
-            <spec_assertion category="Tizen Device API Specifications" section="Widget" specification="Widget Packaging and XML Configuration" interface="Widget" element_name="constructor" element_type="method"/>
-            <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>
-            <spec_statement>spec_statement</spec_statement>
-          </spec>
-        </specs>
-      </testcase>
-      <testcase purpose="Test the UA's ability process the height attribute." type="compliance" status="ready" component="WebAPI/W3C_Widget/WidgetPackaging" execution_type="manual" priority="P3" id="a3">
-        <description>
-          <pre_condition/>
-          <post_condition/>
-          <steps>
-            <step order="1">
-              <step_desc>Install /opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/a3.wgt</step_desc>
-              <expected>To pass, the widget height must be ignored (the value is a sequence of space characters, hence it would be ignored)..</expected>
-            </step>
-          </steps>
-          <test_script_entry>/opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/a3.wgt</test_script_entry>
-        </description>
-        <specs>
-          <spec>
-            <spec_assertion category="Tizen Device API Specifications" section="Widget" specification="Widget Packaging and XML Configuration" interface="Widget" element_name="constructor" element_type="method"/>
-            <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>
-            <spec_statement>spec_statement</spec_statement>
-          </spec>
-        </specs>
-      </testcase>
-      <testcase purpose="Test the UA's ability process the height attribute." type="compliance" status="ready" component="WebAPI/W3C_Widget/WidgetPackaging" execution_type="manual" priority="P3" id="a4">
-        <description>
-          <pre_condition/>
-          <post_condition/>
-          <steps>
-            <step order="1">
-              <step_desc>Install /opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/a4.wgt</step_desc>
-              <expected>To pass, the widget height must be ignored (the value is an empty string)..</expected>
-            </step>
-          </steps>
-          <test_script_entry>/opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/a4.wgt</test_script_entry>
-        </description>
-        <specs>
-          <spec>
-            <spec_assertion category="Tizen Device API Specifications" section="Widget" specification="Widget Packaging and XML Configuration" interface="Widget" element_name="constructor" element_type="method"/>
-            <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>
-            <spec_statement>spec_statement</spec_statement>
-          </spec>
-        </specs>
-      </testcase>
-      <testcase purpose="Test that the UA skips preference elements without a name attribute." type="compliance" status="ready" component="WebAPI/W3C_Widget/WidgetPackaging" execution_type="manual" priority="P3" id="a5">
-        <description>
-          <pre_condition/>
-          <post_condition/>
-          <steps>
-            <step order="1">
-              <step_desc>Install /opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/a5.wgt</step_desc>
-              <expected>To pass, widget preferences must remain an empty list (i.e., the preference is skipped)..</expected>
-            </step>
-          </steps>
-          <test_script_entry>/opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/a5.wgt</test_script_entry>
-        </description>
-        <specs>
-          <spec>
-            <spec_assertion category="Tizen Device API Specifications" section="Widget" specification="Widget Packaging and XML Configuration" interface="Widget" element_name="constructor" element_type="method"/>
-            <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>
-            <spec_statement>spec_statement</spec_statement>
-          </spec>
-        </specs>
-      </testcase>
-      <testcase purpose="Test that the UA skips preference element already defined." type="compliance" status="ready" component="WebAPI/W3C_Widget/WidgetPackaging" execution_type="manual" priority="P3" id="a6">
-        <description>
-          <pre_condition/>
-          <post_condition/>
-          <steps>
-            <step order="1">
-              <step_desc>Install /opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/a6.wgt</step_desc>
-              <expected>To pass, widget preference must contain one preference whose name is "PASS" and whose value is "PASS" and whose readonly attr value must be "false"..</expected>
-            </step>
-          </steps>
-          <test_script_entry>/opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/a6.wgt</test_script_entry>
-        </description>
-        <specs>
-          <spec>
-            <spec_assertion category="Tizen Device API Specifications" section="Widget" specification="Widget Packaging and XML Configuration" interface="Widget" element_name="constructor" element_type="method"/>
-            <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>
-            <spec_statement>spec_statement</spec_statement>
-          </spec>
-        </specs>
-      </testcase>
-      <testcase purpose="Test that the UA does a case sensitive comparison on the value of the readonly attribute." type="compliance" status="ready" component="WebAPI/W3C_Widget/WidgetPackaging" execution_type="manual" priority="P3" id="a7">
-        <description>
-          <pre_condition/>
-          <post_condition/>
-          <steps>
-            <step order="1">
-              <step_desc>Install /opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/a7.wgt</step_desc>
-              <expected>To pass, widget preference must contain one preference whose name is "PASS" and whose value is "PASS" and whose readonly attr value must be "false"..</expected>
-            </step>
-          </steps>
-          <test_script_entry>/opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/a7.wgt</test_script_entry>
-        </description>
-        <specs>
-          <spec>
-            <spec_assertion category="Tizen Device API Specifications" section="Widget" specification="Widget Packaging and XML Configuration" interface="Widget" element_name="constructor" element_type="method"/>
-            <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>
-            <spec_statement>spec_statement</spec_statement>
-          </spec>
-        </specs>
-      </testcase>
-      <testcase purpose="Test that the UA does a case sensitive comparison on the value of the readonly attribute." type="compliance" status="ready" component="WebAPI/W3C_Widget/WidgetPackaging" execution_type="manual" priority="P3" id="a8">
-        <description>
-          <pre_condition/>
-          <post_condition/>
-          <steps>
-            <step order="1">
-              <step_desc>Install /opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/a8.wgt</step_desc>
-              <expected>To pass, widget preference must contain one preference whose name is "PASS" and whose value is "PASS" and whose readonly attr value must be "true"..</expected>
-            </step>
-          </steps>
-          <test_script_entry>/opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/a8.wgt</test_script_entry>
-        </description>
-        <specs>
-          <spec>
-            <spec_assertion category="Tizen Device API Specifications" section="Widget" specification="Widget Packaging and XML Configuration" interface="Widget" element_name="constructor" element_type="method"/>
-            <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>
-            <spec_statement>spec_statement</spec_statement>
-          </spec>
-        </specs>
-      </testcase>
-      <testcase purpose="Test that the UA sets the readonly attribute to false by default." type="compliance" status="ready" component="WebAPI/W3C_Widget/WidgetPackaging" execution_type="manual" priority="P3" id="a9">
-        <description>
-          <pre_condition/>
-          <post_condition/>
-          <steps>
-            <step order="1">
-              <step_desc>Install /opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/a9.wgt</step_desc>
-              <expected>To pass, widget preference must contain one preference whose name is "PASS" and whose value is "PASS" and whose readonly attr value must be "false"..</expected>
-            </step>
-          </steps>
-          <test_script_entry>/opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/a9.wgt</test_script_entry>
-        </description>
-        <specs>
-          <spec>
-            <spec_assertion category="Tizen Device API Specifications" section="Widget" specification="Widget Packaging and XML Configuration" interface="Widget" element_name="constructor" element_type="method"/>
-            <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>
-            <spec_statement>spec_statement</spec_statement>
-          </spec>
-        </specs>
-      </testcase>
-      <testcase purpose="Test that the UA skips multiple preference element already defined." type="compliance" status="ready" component="WebAPI/W3C_Widget/WidgetPackaging" execution_type="manual" priority="P3" id="ba">
-        <description>
-          <pre_condition/>
-          <post_condition/>
-          <steps>
-            <step order="1">
-              <step_desc>Install /opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/ba.wgt</step_desc>
-              <expected>To pass, widget preference must contain one preference whose name is "a" and whose value is "a" and whose readonly attr value must be "false"..</expected>
-            </step>
-          </steps>
-          <test_script_entry>/opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/ba.wgt</test_script_entry>
-        </description>
-        <specs>
-          <spec>
-            <spec_assertion category="Tizen Device API Specifications" section="Widget" specification="Widget Packaging and XML Configuration" interface="Widget" element_name="constructor" element_type="method"/>
-            <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>
-            <spec_statement>spec_statement</spec_statement>
-          </spec>
-        </specs>
-      </testcase>
-      <testcase purpose="Test the UA's ability store preferences whose name vary only in case." type="compliance" status="ready" component="WebAPI/W3C_Widget/WidgetPackaging" execution_type="manual" priority="P3" id="bb">
-        <description>
-          <pre_condition/>
-          <post_condition/>
-          <steps>
-            <step order="1">
-              <step_desc>Install /opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/bb.wgt</step_desc>
-              <expected>To pass, widget preference must contain two preferences: 1 must have a name "a" and whose value is "a" and whose readonly attr value must be "false". 2 must have a name "A" and whose value is "b" and whose readonly attribute value must be "false"..</expected>
-            </step>
-          </steps>
-          <test_script_entry>/opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/bb.wgt</test_script_entry>
-        </description>
-        <specs>
-          <spec>
-            <spec_assertion category="Tizen Device API Specifications" section="Widget" specification="Widget Packaging and XML Configuration" interface="Widget" element_name="constructor" element_type="method"/>
-            <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>
-            <spec_statement>spec_statement</spec_statement>
-          </spec>
-        </specs>
-      </testcase>
-      <testcase purpose="Tests that the UA applies the rule for getting a single attribute value to name, value, and readonly attributes." type="compliance" status="ready" component="WebAPI/W3C_Widget/WidgetPackaging" execution_type="manual" priority="P3" id="bc">
-        <description>
-          <pre_condition/>
-          <post_condition/>
-          <steps>
-            <step order="1">
-              <step_desc>Install /opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/bc.wgt</step_desc>
-              <expected>To pass, widget preference must contain one preference whose name is "PASS" and whose value is "PASS" and whose readonly attr value must be "false"..</expected>
-            </step>
-          </steps>
-          <test_script_entry>/opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/bc.wgt</test_script_entry>
-        </description>
-        <specs>
-          <spec>
-            <spec_assertion category="Tizen Device API Specifications" section="Widget" specification="Widget Packaging and XML Configuration" interface="Widget" element_name="constructor" element_type="method"/>
-            <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>
-            <spec_statement>spec_statement</spec_statement>
-          </spec>
-        </specs>
-      </testcase>
-      <testcase purpose="Test to make sure that the UA only checks the root of the widget for config files, and not in an arbitrary folder." type="compliance" status="ready" component="WebAPI/W3C_Widget/WidgetPackaging" execution_type="manual" priority="P3" id="bg">
-        <description>
-          <pre_condition/>
-          <post_condition/>
-          <steps>
-            <step order="1">
-              <step_desc>Install /opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/bg.wgt</step_desc>
-              <expected>To pass, the user agent must treat this widget as an invalid widget (config file is not at the root)..</expected>
-            </step>
-          </steps>
-          <test_script_entry>/opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/bg.wgt</test_script_entry>
-        </description>
-        <specs>
-          <spec>
-            <spec_assertion category="Tizen Device API Specifications" section="Widget" specification="Widget Packaging and XML Configuration" interface="Widget" element_name="constructor" element_type="method"/>
-            <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>
-            <spec_statement>spec_statement</spec_statement>
-          </spec>
-        </specs>
-      </testcase>
-      <testcase purpose="Test to make sure that the UA only checks the root of the widget for config files, and not in a locale folder." type="compliance" status="ready" component="WebAPI/W3C_Widget/WidgetPackaging" execution_type="manual" priority="P3" id="bh">
-        <description>
-          <pre_condition/>
-          <post_condition/>
-          <steps>
-            <step order="1">
-              <step_desc>Install /opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/bh.wgt</step_desc>
-              <expected>To pass, the user agent must treat this widget as an invalid widget (config file is not at the root, but in locale folder)..</expected>
-            </step>
-          </steps>
-          <test_script_entry>/opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/bh.wgt</test_script_entry>
-        </description>
-        <specs>
-          <spec>
-            <spec_assertion category="Tizen Device API Specifications" section="Widget" specification="Widget Packaging and XML Configuration" interface="Widget" element_name="constructor" element_type="method"/>
-            <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>
-            <spec_statement>spec_statement</spec_statement>
-          </spec>
-        </specs>
-      </testcase>
-    </set>
-  </suite>
-</test_definition>
diff --git a/release/csharp-tct_6.0_dotnet/README b/release/csharp-tct_6.0_dotnet/README
new file mode 100755 (executable)
index 0000000..09dcb81
--- /dev/null
@@ -0,0 +1,54 @@
+Dependency:
+================
+python2.7, python-pip, requests
+  sudo apt-get install python-pip
+  sudo pip install requests
+  sudo apt-get install python-dbus
+
+Change the owner and group of /opt
+  sudo chown [user]:[user] /opt
+
+How to install :
+================
+  - Install TCT from source code:
+    sudo python tct-setup.py
+
+  - Remove tct related folders in /opt
+    (** caution : all files in /opt/tct, /opt/testkit, /opt/tools will be removed)
+    sudo python tct-setup.py clean
+
+  - Upgrade the tct related folders in /opt
+    sudo python tct-setup.py upgrade
+
+How to use :
+================
+  - Set environment on your target device
+    sudo python /opt/tct/{TCTProject}/scripts/tct-config-device.py
+
+  - Execute the following command to launch TCT-Manager 
+    sudo tct-mgr
+
+  - Execute the following command in order to use TCT-Shell
+    tct-shell
+
+For Windows :
+================
+  - Prerequisites
+    1. Windows 7 - 32/64 bit
+    2. JDK 1.7 - 32bit ( You should install 32bit version. 
+    3. python 2.7 - 32bit, should be set as environment path
+        - Please use python 2.7 version, not 3.0 - https://www.python.org/downloads/windows/
+        - python lib which should be installed
+            : install pip
+                1. Navigate to C:\Python27\Scripts
+                2. open command window on C:\Python27\Scripts 
+                3. $ easy_install-2.7 pip
+            : install requests
+                1. downlaod requests source code : https://github.com/kennethreitz/requests/
+                2. unzip source code and open command window on unziped folder
+                3. $ python setup.py install
+
+  - Install / run in command prompt
+    (Run below scripts at the file location. You can launch the command prompt by [shift]+[mouse right click] on windows explorer)
+    1. Install : python tct-setup.py
+    2. Run : tct-mgr.bat
diff --git a/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/doc/DotNet_TCT_4.0_Tester_User_Guide_v1.0.pdf b/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/doc/DotNet_TCT_4.0_Tester_User_Guide_v1.0.pdf
new file mode 100755 (executable)
index 0000000..fc52846
Binary files /dev/null and b/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/doc/DotNet_TCT_4.0_Tester_User_Guide_v1.0.pdf differ
diff --git a/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.Accounts.Tests-6.0.zip b/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.Accounts.Tests-6.0.zip
new file mode 100755 (executable)
index 0000000..2d44d6b
Binary files /dev/null and b/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.Accounts.Tests-6.0.zip differ
diff --git a/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.Alarm.Tests-6.0.zip b/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.Alarm.Tests-6.0.zip
new file mode 100755 (executable)
index 0000000..0593b54
Binary files /dev/null and b/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.Alarm.Tests-6.0.zip differ
diff --git a/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.Applications.ComponentBased.ComponentManager.Tests-6.0.zip b/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.Applications.ComponentBased.ComponentManager.Tests-6.0.zip
new file mode 100755 (executable)
index 0000000..2838adb
Binary files /dev/null and b/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.Applications.ComponentBased.ComponentManager.Tests-6.0.zip differ
diff --git a/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.Applications.EventManager.Manual.Tests-6.0.zip b/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.Applications.EventManager.Manual.Tests-6.0.zip
new file mode 100755 (executable)
index 0000000..affa7e0
Binary files /dev/null and b/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.Applications.EventManager.Manual.Tests-6.0.zip differ
diff --git a/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.Applications.EventManager.Tests-6.0.zip b/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.Applications.EventManager.Tests-6.0.zip
new file mode 100755 (executable)
index 0000000..616e3b2
Binary files /dev/null and b/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.Applications.EventManager.Tests-6.0.zip differ
diff --git a/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.Applications.Manual.Tests-6.0.zip b/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.Applications.Manual.Tests-6.0.zip
new file mode 100755 (executable)
index 0000000..9be6af9
Binary files /dev/null and b/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.Applications.Manual.Tests-6.0.zip differ
diff --git a/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.Applications.Tests-6.0.zip b/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.Applications.Tests-6.0.zip
new file mode 100755 (executable)
index 0000000..e4db5d4
Binary files /dev/null and b/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.Applications.Tests-6.0.zip differ
diff --git a/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.AttachPanel.Manual.Tests-6.0.zip b/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.AttachPanel.Manual.Tests-6.0.zip
new file mode 100755 (executable)
index 0000000..e2e3ce3
Binary files /dev/null and b/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.AttachPanel.Manual.Tests-6.0.zip differ
diff --git a/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.AttachPanel.Tests-6.0.zip b/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.AttachPanel.Tests-6.0.zip
new file mode 100755 (executable)
index 0000000..eff5f4f
Binary files /dev/null and b/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.AttachPanel.Tests-6.0.zip differ
diff --git a/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.AudioIO.Tests-6.0.zip b/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.AudioIO.Tests-6.0.zip
new file mode 100755 (executable)
index 0000000..9397a8f
Binary files /dev/null and b/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.AudioIO.Tests-6.0.zip differ
diff --git a/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.Badge.Manual.Tests-6.0.zip b/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.Badge.Manual.Tests-6.0.zip
new file mode 100755 (executable)
index 0000000..b5224da
Binary files /dev/null and b/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.Badge.Manual.Tests-6.0.zip differ
diff --git a/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.Badge.Tests-6.0.zip b/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.Badge.Tests-6.0.zip
new file mode 100755 (executable)
index 0000000..e9f7ef4
Binary files /dev/null and b/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.Badge.Tests-6.0.zip differ
diff --git a/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.Bluetooth.Manual.Tests-6.0.zip b/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.Bluetooth.Manual.Tests-6.0.zip
new file mode 100755 (executable)
index 0000000..143ab4b
Binary files /dev/null and b/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.Bluetooth.Manual.Tests-6.0.zip differ
diff --git a/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.Bluetooth.Tests-6.0.zip b/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.Bluetooth.Tests-6.0.zip
new file mode 100755 (executable)
index 0000000..66c48a8
Binary files /dev/null and b/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.Bluetooth.Tests-6.0.zip differ
diff --git a/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.Calendar.Tests-6.0.zip b/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.Calendar.Tests-6.0.zip
new file mode 100755 (executable)
index 0000000..96ff25b
Binary files /dev/null and b/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.Calendar.Tests-6.0.zip differ
diff --git a/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.Camera.Tests-6.0.zip b/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.Camera.Tests-6.0.zip
new file mode 100755 (executable)
index 0000000..8ec9b97
Binary files /dev/null and b/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.Camera.Tests-6.0.zip differ
diff --git a/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.Common.Tests-6.0.zip b/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.Common.Tests-6.0.zip
new file mode 100755 (executable)
index 0000000..83a5b01
Binary files /dev/null and b/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.Common.Tests-6.0.zip differ
diff --git a/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.ComponentBased.Default.Manual.Tests-6.0.zip b/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.ComponentBased.Default.Manual.Tests-6.0.zip
new file mode 100755 (executable)
index 0000000..ada40c9
Binary files /dev/null and b/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.ComponentBased.Default.Manual.Tests-6.0.zip differ
diff --git a/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.ComponentBased.Default.Tests-6.0.zip b/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.ComponentBased.Default.Tests-6.0.zip
new file mode 100755 (executable)
index 0000000..84120a8
Binary files /dev/null and b/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.ComponentBased.Default.Tests-6.0.zip differ
diff --git a/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.ComponentBased.Manual.Tests-6.0.zip b/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.ComponentBased.Manual.Tests-6.0.zip
new file mode 100755 (executable)
index 0000000..1ad3366
Binary files /dev/null and b/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.ComponentBased.Manual.Tests-6.0.zip differ
diff --git a/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.ComponentBased.Tests-6.0.zip b/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.ComponentBased.Tests-6.0.zip
new file mode 100755 (executable)
index 0000000..87415a1
Binary files /dev/null and b/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.ComponentBased.Tests-6.0.zip differ
diff --git a/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.Connection.Manual.Tests-6.0.zip b/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.Connection.Manual.Tests-6.0.zip
new file mode 100755 (executable)
index 0000000..2502d6a
Binary files /dev/null and b/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.Connection.Manual.Tests-6.0.zip differ
diff --git a/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.Connection.Tests-6.0.zip b/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.Connection.Tests-6.0.zip
new file mode 100755 (executable)
index 0000000..c96066e
Binary files /dev/null and b/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.Connection.Tests-6.0.zip differ
diff --git a/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.Contacts.Manual.Tests-6.0.zip b/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.Contacts.Manual.Tests-6.0.zip
new file mode 100755 (executable)
index 0000000..281f38f
Binary files /dev/null and b/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.Contacts.Manual.Tests-6.0.zip differ
diff --git a/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.Contacts.Tests-6.0.zip b/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.Contacts.Tests-6.0.zip
new file mode 100755 (executable)
index 0000000..7d11641
Binary files /dev/null and b/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.Contacts.Tests-6.0.zip differ
diff --git a/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.Context.Tests-6.0.zip b/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.Context.Tests-6.0.zip
new file mode 100755 (executable)
index 0000000..2ded397
Binary files /dev/null and b/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.Context.Tests-6.0.zip differ
diff --git a/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.DataControl.Tests-6.0.zip b/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.DataControl.Tests-6.0.zip
new file mode 100755 (executable)
index 0000000..f2cc41e
Binary files /dev/null and b/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.DataControl.Tests-6.0.zip differ
diff --git a/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.Device.Manual.Tests-6.0.zip b/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.Device.Manual.Tests-6.0.zip
new file mode 100755 (executable)
index 0000000..b46449a
Binary files /dev/null and b/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.Device.Manual.Tests-6.0.zip differ
diff --git a/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.Device.Tests-6.0.zip b/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.Device.Tests-6.0.zip
new file mode 100755 (executable)
index 0000000..cf8a79b
Binary files /dev/null and b/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.Device.Tests-6.0.zip differ
diff --git a/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.DevicePolicyManager.Manual.Tests-6.0.zip b/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.DevicePolicyManager.Manual.Tests-6.0.zip
new file mode 100755 (executable)
index 0000000..c98de0a
Binary files /dev/null and b/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.DevicePolicyManager.Manual.Tests-6.0.zip differ
diff --git a/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.DevicePolicyManager.Tests-6.0.zip b/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.DevicePolicyManager.Tests-6.0.zip
new file mode 100755 (executable)
index 0000000..b077a04
Binary files /dev/null and b/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.DevicePolicyManager.Tests-6.0.zip differ
diff --git a/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.DotnetUtil.Tests-6.0.zip b/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.DotnetUtil.Tests-6.0.zip
new file mode 100755 (executable)
index 0000000..12d40d0
Binary files /dev/null and b/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.DotnetUtil.Tests-6.0.zip differ
diff --git a/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.Download.Manual.Tests-6.0.zip b/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.Download.Manual.Tests-6.0.zip
new file mode 100755 (executable)
index 0000000..d938351
Binary files /dev/null and b/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.Download.Manual.Tests-6.0.zip differ
diff --git a/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.Download.Tests-6.0.zip b/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.Download.Tests-6.0.zip
new file mode 100755 (executable)
index 0000000..bd30068
Binary files /dev/null and b/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.Download.Tests-6.0.zip differ
diff --git a/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.ElmSharp.Manual.Tests-6.0.zip b/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.ElmSharp.Manual.Tests-6.0.zip
new file mode 100755 (executable)
index 0000000..d25f2b5
Binary files /dev/null and b/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.ElmSharp.Manual.Tests-6.0.zip differ
diff --git a/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.ElmSharp.Tests-6.0.zip b/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.ElmSharp.Tests-6.0.zip
new file mode 100755 (executable)
index 0000000..1599c7e
Binary files /dev/null and b/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.ElmSharp.Tests-6.0.zip differ
diff --git a/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.Email.Tests-6.0.zip b/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.Email.Tests-6.0.zip
new file mode 100755 (executable)
index 0000000..848099a
Binary files /dev/null and b/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.Email.Tests-6.0.zip differ
diff --git a/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.Feedback.Tests-6.0.zip b/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.Feedback.Tests-6.0.zip
new file mode 100755 (executable)
index 0000000..dd01d35
Binary files /dev/null and b/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.Feedback.Tests-6.0.zip differ
diff --git a/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.FidoClient.Tests-6.0.zip b/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.FidoClient.Tests-6.0.zip
new file mode 100755 (executable)
index 0000000..d4c5498
Binary files /dev/null and b/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.FidoClient.Tests-6.0.zip differ
diff --git a/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.Geofence.Tests-6.0.zip b/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.Geofence.Tests-6.0.zip
new file mode 100755 (executable)
index 0000000..adc6546
Binary files /dev/null and b/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.Geofence.Tests-6.0.zip differ
diff --git a/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.Information.Manual.Tests-6.0.zip b/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.Information.Manual.Tests-6.0.zip
new file mode 100755 (executable)
index 0000000..a9be16c
Binary files /dev/null and b/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.Information.Manual.Tests-6.0.zip differ
diff --git a/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.Information.Tests-6.0.zip b/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.Information.Tests-6.0.zip
new file mode 100755 (executable)
index 0000000..35ddad4
Binary files /dev/null and b/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.Information.Tests-6.0.zip differ
diff --git a/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.Inputmethod.Manual.Tests-6.0.zip b/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.Inputmethod.Manual.Tests-6.0.zip
new file mode 100755 (executable)
index 0000000..cadcd39
Binary files /dev/null and b/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.Inputmethod.Manual.Tests-6.0.zip differ
diff --git a/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.Inputmethod.Tests-6.0.zip b/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.Inputmethod.Tests-6.0.zip
new file mode 100755 (executable)
index 0000000..4f72e7a
Binary files /dev/null and b/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.Inputmethod.Tests-6.0.zip differ
diff --git a/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.Inputmethodmanager.Tests-6.0.zip b/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.Inputmethodmanager.Tests-6.0.zip
new file mode 100755 (executable)
index 0000000..55562fe
Binary files /dev/null and b/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.Inputmethodmanager.Tests-6.0.zip differ
diff --git a/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.IoTConnectivityClient.Tests-6.0.zip b/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.IoTConnectivityClient.Tests-6.0.zip
new file mode 100755 (executable)
index 0000000..9be5fdc
Binary files /dev/null and b/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.IoTConnectivityClient.Tests-6.0.zip differ
diff --git a/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.IoTConnectivityServer.Tests-6.0.zip b/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.IoTConnectivityServer.Tests-6.0.zip
new file mode 100755 (executable)
index 0000000..06cdfc1
Binary files /dev/null and b/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.IoTConnectivityServer.Tests-6.0.zip differ
diff --git a/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.Location.Manual.Tests-6.0.zip b/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.Location.Manual.Tests-6.0.zip
new file mode 100755 (executable)
index 0000000..17510ea
Binary files /dev/null and b/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.Location.Manual.Tests-6.0.zip differ
diff --git a/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.Location.Tests-6.0.zip b/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.Location.Tests-6.0.zip
new file mode 100755 (executable)
index 0000000..ae71bdb
Binary files /dev/null and b/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.Location.Tests-6.0.zip differ
diff --git a/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.Log.Manual.Tests-6.0.zip b/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.Log.Manual.Tests-6.0.zip
new file mode 100755 (executable)
index 0000000..11a48d7
Binary files /dev/null and b/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.Log.Manual.Tests-6.0.zip differ
diff --git a/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.Log.Tests-6.0.zip b/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.Log.Tests-6.0.zip
new file mode 100755 (executable)
index 0000000..de18b04
Binary files /dev/null and b/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.Log.Tests-6.0.zip differ
diff --git a/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.MachineLearning.Inference.Tests-6.0.zip b/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.MachineLearning.Inference.Tests-6.0.zip
new file mode 100755 (executable)
index 0000000..af6a336
Binary files /dev/null and b/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.MachineLearning.Inference.Tests-6.0.zip differ
diff --git a/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.Maps.Manual.Tests-6.0.zip b/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.Maps.Manual.Tests-6.0.zip
new file mode 100755 (executable)
index 0000000..1d9492f
Binary files /dev/null and b/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.Maps.Manual.Tests-6.0.zip differ
diff --git a/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.Maps.Tests-6.0.zip b/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.Maps.Tests-6.0.zip
new file mode 100755 (executable)
index 0000000..436464f
Binary files /dev/null and b/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.Maps.Tests-6.0.zip differ
diff --git a/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.MediaCodec.Tests-6.0.zip b/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.MediaCodec.Tests-6.0.zip
new file mode 100755 (executable)
index 0000000..edd065b
Binary files /dev/null and b/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.MediaCodec.Tests-6.0.zip differ
diff --git a/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.MediaController.Tests-6.0.zip b/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.MediaController.Tests-6.0.zip
new file mode 100755 (executable)
index 0000000..9e94710
Binary files /dev/null and b/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.MediaController.Tests-6.0.zip differ
diff --git a/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.MediaKey.Manual.Tests-6.0.zip b/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.MediaKey.Manual.Tests-6.0.zip
new file mode 100755 (executable)
index 0000000..19c79ee
Binary files /dev/null and b/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.MediaKey.Manual.Tests-6.0.zip differ
diff --git a/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.MediaKey.Tests-6.0.zip b/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.MediaKey.Tests-6.0.zip
new file mode 100755 (executable)
index 0000000..c27d1a9
Binary files /dev/null and b/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.MediaKey.Tests-6.0.zip differ
diff --git a/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.MediaPlayer.Tests-6.0.zip b/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.MediaPlayer.Tests-6.0.zip
new file mode 100755 (executable)
index 0000000..f43ffd5
Binary files /dev/null and b/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.MediaPlayer.Tests-6.0.zip differ
diff --git a/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.MediaVision.Manual.Tests-6.0.zip b/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.MediaVision.Manual.Tests-6.0.zip
new file mode 100755 (executable)
index 0000000..5f6a649
Binary files /dev/null and b/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.MediaVision.Manual.Tests-6.0.zip differ
diff --git a/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.MediaVision.Tests-6.0.zip b/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.MediaVision.Tests-6.0.zip
new file mode 100755 (executable)
index 0000000..bd6f180
Binary files /dev/null and b/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.MediaVision.Tests-6.0.zip differ
diff --git a/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.Mediacontent.Manual.Tests-6.0.zip b/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.Mediacontent.Manual.Tests-6.0.zip
new file mode 100755 (executable)
index 0000000..9d4649b
Binary files /dev/null and b/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.Mediacontent.Manual.Tests-6.0.zip differ
diff --git a/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.Mediacontent.Tests-6.0.zip b/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.Mediacontent.Tests-6.0.zip
new file mode 100755 (executable)
index 0000000..861a0d5
Binary files /dev/null and b/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.Mediacontent.Tests-6.0.zip differ
diff --git a/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.Messages.Tests-6.0.zip b/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.Messages.Tests-6.0.zip
new file mode 100755 (executable)
index 0000000..6f77c51
Binary files /dev/null and b/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.Messages.Tests-6.0.zip differ
diff --git a/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.Metadata.Tests-6.0.zip b/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.Metadata.Tests-6.0.zip
new file mode 100755 (executable)
index 0000000..038f671
Binary files /dev/null and b/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.Metadata.Tests-6.0.zip differ
diff --git a/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.Mime.Tests-6.0.zip b/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.Mime.Tests-6.0.zip
new file mode 100755 (executable)
index 0000000..974c228
Binary files /dev/null and b/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.Mime.Tests-6.0.zip differ
diff --git a/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.Multimedia.Manual.Tests-6.0.zip b/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.Multimedia.Manual.Tests-6.0.zip
new file mode 100755 (executable)
index 0000000..7ba275e
Binary files /dev/null and b/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.Multimedia.Manual.Tests-6.0.zip differ
diff --git a/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.Multimedia.Tests-6.0.zip b/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.Multimedia.Tests-6.0.zip
new file mode 100755 (executable)
index 0000000..3b1511e
Binary files /dev/null and b/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.Multimedia.Tests-6.0.zip differ
diff --git a/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.MultimediaUtil.Tests-6.0.zip b/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.MultimediaUtil.Tests-6.0.zip
new file mode 100755 (executable)
index 0000000..9bfc065
Binary files /dev/null and b/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.MultimediaUtil.Tests-6.0.zip differ
diff --git a/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.NUI.Components.Manual.Tests-6.0.zip b/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.NUI.Components.Manual.Tests-6.0.zip
new file mode 100755 (executable)
index 0000000..3eb0018
Binary files /dev/null and b/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.NUI.Components.Manual.Tests-6.0.zip differ
diff --git a/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.NUI.Components.Tests-6.0.zip b/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.NUI.Components.Tests-6.0.zip
new file mode 100755 (executable)
index 0000000..16be0e7
Binary files /dev/null and b/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.NUI.Components.Tests-6.0.zip differ
diff --git a/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.NUI.Manual.Tests-6.0.zip b/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.NUI.Manual.Tests-6.0.zip
new file mode 100755 (executable)
index 0000000..7df885f
Binary files /dev/null and b/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.NUI.Manual.Tests-6.0.zip differ
diff --git a/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.NUI.Tests-6.0.zip b/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.NUI.Tests-6.0.zip
new file mode 100755 (executable)
index 0000000..4fb1222
Binary files /dev/null and b/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.NUI.Tests-6.0.zip differ
diff --git a/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.Network.Stc.Tests-6.0.zip b/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.Network.Stc.Tests-6.0.zip
new file mode 100755 (executable)
index 0000000..6abe0ee
Binary files /dev/null and b/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.Network.Stc.Tests-6.0.zip differ
diff --git a/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.Nfc.Manual.Tests-6.0.zip b/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.Nfc.Manual.Tests-6.0.zip
new file mode 100755 (executable)
index 0000000..6b32b2b
Binary files /dev/null and b/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.Nfc.Manual.Tests-6.0.zip differ
diff --git a/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.Nfc.Tests-6.0.zip b/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.Nfc.Tests-6.0.zip
new file mode 100755 (executable)
index 0000000..c7ee428
Binary files /dev/null and b/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.Nfc.Tests-6.0.zip differ
diff --git a/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.Nlp.Tests-6.0.zip b/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.Nlp.Tests-6.0.zip
new file mode 100755 (executable)
index 0000000..c0687fd
Binary files /dev/null and b/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.Nlp.Tests-6.0.zip differ
diff --git a/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.NotificationEventListener.Tests-6.0.zip b/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.NotificationEventListener.Tests-6.0.zip
new file mode 100755 (executable)
index 0000000..457563c
Binary files /dev/null and b/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.NotificationEventListener.Tests-6.0.zip differ
diff --git a/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.Notifications.Manual.Tests-6.0.zip b/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.Notifications.Manual.Tests-6.0.zip
new file mode 100755 (executable)
index 0000000..e12f5dc
Binary files /dev/null and b/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.Notifications.Manual.Tests-6.0.zip differ
diff --git a/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.Notifications.Tests-6.0.zip b/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.Notifications.Tests-6.0.zip
new file mode 100755 (executable)
index 0000000..5331954
Binary files /dev/null and b/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.Notifications.Tests-6.0.zip differ
diff --git a/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.Nsd.Manual.Tests-6.0.zip b/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.Nsd.Manual.Tests-6.0.zip
new file mode 100755 (executable)
index 0000000..b6020a3
Binary files /dev/null and b/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.Nsd.Manual.Tests-6.0.zip differ
diff --git a/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.Nsd.Tests-6.0.zip b/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.Nsd.Tests-6.0.zip
new file mode 100755 (executable)
index 0000000..28682c3
Binary files /dev/null and b/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.Nsd.Tests-6.0.zip differ
diff --git a/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.OAuth2.Tests-6.0.zip b/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.OAuth2.Tests-6.0.zip
new file mode 100755 (executable)
index 0000000..17a1bb0
Binary files /dev/null and b/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.OAuth2.Tests-6.0.zip differ
diff --git a/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.Packagemanager.Manual.Tests-6.0.zip b/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.Packagemanager.Manual.Tests-6.0.zip
new file mode 100755 (executable)
index 0000000..4558fac
Binary files /dev/null and b/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.Packagemanager.Manual.Tests-6.0.zip differ
diff --git a/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.Packagemanager.Tests-6.0.zip b/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.Packagemanager.Tests-6.0.zip
new file mode 100755 (executable)
index 0000000..3d0b963
Binary files /dev/null and b/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.Packagemanager.Tests-6.0.zip differ
diff --git a/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.PhonenumberUtils.Tests-6.0.zip b/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.PhonenumberUtils.Tests-6.0.zip
new file mode 100755 (executable)
index 0000000..5b3bae3
Binary files /dev/null and b/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.PhonenumberUtils.Tests-6.0.zip differ
diff --git a/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.PrivacyPrivilegeManager.Manual.Tests-6.0.zip b/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.PrivacyPrivilegeManager.Manual.Tests-6.0.zip
new file mode 100755 (executable)
index 0000000..3f74272
Binary files /dev/null and b/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.PrivacyPrivilegeManager.Manual.Tests-6.0.zip differ
diff --git a/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.Privilege.Tests-6.0.zip b/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.Privilege.Tests-6.0.zip
new file mode 100755 (executable)
index 0000000..ee19b7f
Binary files /dev/null and b/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.Privilege.Tests-6.0.zip differ
diff --git a/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.Push.Tests-6.0.zip b/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.Push.Tests-6.0.zip
new file mode 100755 (executable)
index 0000000..f7e2595
Binary files /dev/null and b/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.Push.Tests-6.0.zip differ
diff --git a/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.Radio.Tests-6.0.zip b/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.Radio.Tests-6.0.zip
new file mode 100755 (executable)
index 0000000..1f72866
Binary files /dev/null and b/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.Radio.Tests-6.0.zip differ
diff --git a/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.Recorder.Tests-6.0.zip b/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.Recorder.Tests-6.0.zip
new file mode 100755 (executable)
index 0000000..ae6cd1a
Binary files /dev/null and b/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.Recorder.Tests-6.0.zip differ
diff --git a/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.RemoteView.Tests-6.0.zip b/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.RemoteView.Tests-6.0.zip
new file mode 100755 (executable)
index 0000000..2a2ed1d
Binary files /dev/null and b/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.RemoteView.Tests-6.0.zip differ
diff --git a/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.ScreenMirroring.Tests-6.0.zip b/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.ScreenMirroring.Tests-6.0.zip
new file mode 100755 (executable)
index 0000000..ee8a1e9
Binary files /dev/null and b/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.ScreenMirroring.Tests-6.0.zip differ
diff --git a/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.Securerepository.Tests-6.0.zip b/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.Securerepository.Tests-6.0.zip
new file mode 100755 (executable)
index 0000000..ad72e0a
Binary files /dev/null and b/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.Securerepository.Tests-6.0.zip differ
diff --git a/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.Sensor.Manual.Tests-6.0.zip b/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.Sensor.Manual.Tests-6.0.zip
new file mode 100755 (executable)
index 0000000..95cf578
Binary files /dev/null and b/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.Sensor.Manual.Tests-6.0.zip differ
diff --git a/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.Sensor.Tests-6.0.zip b/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.Sensor.Tests-6.0.zip
new file mode 100755 (executable)
index 0000000..98f0ed2
Binary files /dev/null and b/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.Sensor.Tests-6.0.zip differ
diff --git a/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.Shortcut.Tests-6.0.zip b/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.Shortcut.Tests-6.0.zip
new file mode 100755 (executable)
index 0000000..38edde6
Binary files /dev/null and b/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.Shortcut.Tests-6.0.zip differ
diff --git a/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.Smartcard.Tests-6.0.zip b/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.Smartcard.Tests-6.0.zip
new file mode 100755 (executable)
index 0000000..9020b9a
Binary files /dev/null and b/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.Smartcard.Tests-6.0.zip differ
diff --git a/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.StreamRecorder.Tests-6.0.zip b/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.StreamRecorder.Tests-6.0.zip
new file mode 100755 (executable)
index 0000000..e14bd6f
Binary files /dev/null and b/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.StreamRecorder.Tests-6.0.zip differ
diff --git a/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.Stt.Manual.Tests-6.0.zip b/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.Stt.Manual.Tests-6.0.zip
new file mode 100755 (executable)
index 0000000..53e0cb7
Binary files /dev/null and b/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.Stt.Manual.Tests-6.0.zip differ
diff --git a/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.Stt.Tests-6.0.zip b/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.Stt.Tests-6.0.zip
new file mode 100755 (executable)
index 0000000..2f0d770
Binary files /dev/null and b/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.Stt.Tests-6.0.zip differ
diff --git a/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.SttEngine.Manual.Tests-6.0.zip b/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.SttEngine.Manual.Tests-6.0.zip
new file mode 100755 (executable)
index 0000000..949c89e
Binary files /dev/null and b/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.SttEngine.Manual.Tests-6.0.zip differ
diff --git a/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.SyncManager.Tests-6.0.zip b/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.SyncManager.Tests-6.0.zip
new file mode 100755 (executable)
index 0000000..7cf57c6
Binary files /dev/null and b/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.SyncManager.Tests-6.0.zip differ
diff --git a/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.System.Manual.Tests-6.0.zip b/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.System.Manual.Tests-6.0.zip
new file mode 100755 (executable)
index 0000000..c8a5790
Binary files /dev/null and b/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.System.Manual.Tests-6.0.zip differ
diff --git a/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.System.Tests-6.0.zip b/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.System.Tests-6.0.zip
new file mode 100755 (executable)
index 0000000..8e51f13
Binary files /dev/null and b/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.System.Tests-6.0.zip differ
diff --git a/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.Systemsettings.Tests-6.0.zip b/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.Systemsettings.Tests-6.0.zip
new file mode 100755 (executable)
index 0000000..3b2486d
Binary files /dev/null and b/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.Systemsettings.Tests-6.0.zip differ
diff --git a/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.TEEC.Tests-6.0.zip b/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.TEEC.Tests-6.0.zip
new file mode 100755 (executable)
index 0000000..1149a8f
Binary files /dev/null and b/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.TEEC.Tests-6.0.zip differ
diff --git a/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.Telephony.Manual.Tests-6.0.zip b/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.Telephony.Manual.Tests-6.0.zip
new file mode 100755 (executable)
index 0000000..9495bde
Binary files /dev/null and b/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.Telephony.Manual.Tests-6.0.zip differ
diff --git a/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.Telephony.Tests-6.0.zip b/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.Telephony.Tests-6.0.zip
new file mode 100755 (executable)
index 0000000..56682b4
Binary files /dev/null and b/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.Telephony.Tests-6.0.zip differ
diff --git a/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.ToastMessage.Tests-6.0.zip b/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.ToastMessage.Tests-6.0.zip
new file mode 100755 (executable)
index 0000000..30ec160
Binary files /dev/null and b/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.ToastMessage.Tests-6.0.zip differ
diff --git a/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.Tracer.Tests-6.0.zip b/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.Tracer.Tests-6.0.zip
new file mode 100755 (executable)
index 0000000..febd43d
Binary files /dev/null and b/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.Tracer.Tests-6.0.zip differ
diff --git a/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.Tts.Manual.Tests-6.0.zip b/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.Tts.Manual.Tests-6.0.zip
new file mode 100755 (executable)
index 0000000..bba6ce6
Binary files /dev/null and b/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.Tts.Manual.Tests-6.0.zip differ
diff --git a/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.Tts.Tests-6.0.zip b/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.Tts.Tests-6.0.zip
new file mode 100755 (executable)
index 0000000..4eab706
Binary files /dev/null and b/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.Tts.Tests-6.0.zip differ
diff --git a/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.TtsEngine.Manual.Tests-6.0.zip b/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.TtsEngine.Manual.Tests-6.0.zip
new file mode 100755 (executable)
index 0000000..3858ecb
Binary files /dev/null and b/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.TtsEngine.Manual.Tests-6.0.zip differ
diff --git a/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.Usb.Manual.Tests-6.0.zip b/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.Usb.Manual.Tests-6.0.zip
new file mode 100755 (executable)
index 0000000..f48d38c
Binary files /dev/null and b/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.Usb.Manual.Tests-6.0.zip differ
diff --git a/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.Usb.Tests-6.0.zip b/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.Usb.Tests-6.0.zip
new file mode 100755 (executable)
index 0000000..d28c4d9
Binary files /dev/null and b/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.Usb.Tests-6.0.zip differ
diff --git a/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.VoiceControl.Manual.Tests-6.0.zip b/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.VoiceControl.Manual.Tests-6.0.zip
new file mode 100755 (executable)
index 0000000..adb3844
Binary files /dev/null and b/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.VoiceControl.Manual.Tests-6.0.zip differ
diff --git a/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.VoiceControl.Tests-6.0.zip b/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.VoiceControl.Tests-6.0.zip
new file mode 100755 (executable)
index 0000000..44087b8
Binary files /dev/null and b/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.VoiceControl.Tests-6.0.zip differ
diff --git a/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.WatchApplication.Manual.Tests-6.0.zip b/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.WatchApplication.Manual.Tests-6.0.zip
new file mode 100755 (executable)
index 0000000..b906e13
Binary files /dev/null and b/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.WatchApplication.Manual.Tests-6.0.zip differ
diff --git a/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.WatchApplication.Tests-6.0.zip b/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.WatchApplication.Tests-6.0.zip
new file mode 100755 (executable)
index 0000000..ddd99fa
Binary files /dev/null and b/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.WatchApplication.Tests-6.0.zip differ
diff --git a/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.WebView.Manual.Tests-6.0.zip b/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.WebView.Manual.Tests-6.0.zip
new file mode 100755 (executable)
index 0000000..7a6ed3f
Binary files /dev/null and b/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.WebView.Manual.Tests-6.0.zip differ
diff --git a/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.WebView.Tests-6.0.zip b/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.WebView.Tests-6.0.zip
new file mode 100755 (executable)
index 0000000..4bfa7bb
Binary files /dev/null and b/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.WebView.Tests-6.0.zip differ
diff --git a/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.WiFi.Manual.Tests-6.0.zip b/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.WiFi.Manual.Tests-6.0.zip
new file mode 100755 (executable)
index 0000000..ce26401
Binary files /dev/null and b/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.WiFi.Manual.Tests-6.0.zip differ
diff --git a/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.WiFi.Tests-6.0.zip b/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.WiFi.Tests-6.0.zip
new file mode 100755 (executable)
index 0000000..e6ff8b4
Binary files /dev/null and b/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.WiFi.Tests-6.0.zip differ
diff --git a/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.WidgetApplication.Manual.Tests-6.0.zip b/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.WidgetApplication.Manual.Tests-6.0.zip
new file mode 100755 (executable)
index 0000000..534798e
Binary files /dev/null and b/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.WidgetApplication.Manual.Tests-6.0.zip differ
diff --git a/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.WidgetApplication.Tests-6.0.zip b/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.WidgetApplication.Tests-6.0.zip
new file mode 100755 (executable)
index 0000000..90eb1ad
Binary files /dev/null and b/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.WidgetApplication.Tests-6.0.zip differ
diff --git a/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.WidgetControl.Manual.Tests-6.0.zip b/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.WidgetControl.Manual.Tests-6.0.zip
new file mode 100755 (executable)
index 0000000..345e330
Binary files /dev/null and b/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.WidgetControl.Manual.Tests-6.0.zip differ
diff --git a/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.WidgetControl.Tests-6.0.zip b/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.WidgetControl.Tests-6.0.zip
new file mode 100755 (executable)
index 0000000..f6db453
Binary files /dev/null and b/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.WidgetControl.Tests-6.0.zip differ
diff --git a/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.Wifidirect.Manual.Tests-6.0.zip b/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.Wifidirect.Manual.Tests-6.0.zip
new file mode 100755 (executable)
index 0000000..fe62783
Binary files /dev/null and b/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.Wifidirect.Manual.Tests-6.0.zip differ
diff --git a/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.Wifidirect.Tests-6.0.zip b/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.Wifidirect.Tests-6.0.zip
new file mode 100755 (executable)
index 0000000..0a9450b
Binary files /dev/null and b/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/Tizen.Wifidirect.Tests-6.0.zip differ
diff --git a/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/pkg_infos/mobile_pkg_info.xml b/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/pkg_infos/mobile_pkg_info.xml
new file mode 100755 (executable)
index 0000000..909a2c3
--- /dev/null
@@ -0,0 +1,783 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ns3:testplan xmlns:ns3="http://www.example.org/plan/" xmlns="" profile="mobile">
+  <suite name="Tizen.Accounts.Tests" category="C# Device APIs">
+    <auto_tcn>98</auto_tcn>
+    <manual_tcn>0</manual_tcn>
+    <total_tcn>98</total_tcn>
+    <pkg_name>mobile/Tizen.Accounts.Tests-6.0.zip</pkg_name>
+  </suite>
+  <suite name="Tizen.Alarm.Tests" category="C# Device APIs">
+    <auto_tcn>27</auto_tcn>
+    <manual_tcn>0</manual_tcn>
+    <total_tcn>27</total_tcn>
+    <pkg_name>mobile/Tizen.Alarm.Tests-6.0.zip</pkg_name>
+  </suite>
+  <suite name="Tizen.Applications.ComponentBased.ComponentManager.Tests" category="C# Device APIs">
+    <auto_tcn>26</auto_tcn>
+    <manual_tcn>0</manual_tcn>
+    <total_tcn>26</total_tcn>
+    <pkg_name>mobile/Tizen.Applications.ComponentBased.ComponentManager.Tests-6.0.zip</pkg_name>
+  </suite>
+  <suite name="Tizen.Applications.EventManager.Manual.Tests" category="C# Device APIs">
+    <auto_tcn>0</auto_tcn>
+    <manual_tcn>2</manual_tcn>
+    <total_tcn>2</total_tcn>
+    <pkg_name>mobile/Tizen.Applications.EventManager.Manual.Tests-6.0.zip</pkg_name>
+  </suite>
+  <suite name="Tizen.Applications.EventManager.Tests" category="C# Device APIs">
+    <auto_tcn>126</auto_tcn>
+    <manual_tcn>0</manual_tcn>
+    <total_tcn>126</total_tcn>
+    <pkg_name>mobile/Tizen.Applications.EventManager.Tests-6.0.zip</pkg_name>
+  </suite>
+  <suite name="Tizen.Applications.Manual.Tests" category="C# Device APIs">
+    <auto_tcn>0</auto_tcn>
+    <manual_tcn>40</manual_tcn>
+    <total_tcn>40</total_tcn>
+    <pkg_name>mobile/Tizen.Applications.Manual.Tests-6.0.zip</pkg_name>
+  </suite>
+  <suite name="Tizen.Applications.Tests" category="C# Device APIs">
+    <auto_tcn>294</auto_tcn>
+    <manual_tcn>0</manual_tcn>
+    <total_tcn>294</total_tcn>
+    <pkg_name>mobile/Tizen.Applications.Tests-6.0.zip</pkg_name>
+  </suite>
+  <suite name="Tizen.AttachPanel.Manual.Tests" category="C# Device APIs">
+    <auto_tcn>0</auto_tcn>
+    <manual_tcn>6</manual_tcn>
+    <total_tcn>6</total_tcn>
+    <pkg_name>mobile/Tizen.AttachPanel.Manual.Tests-6.0.zip</pkg_name>
+  </suite>
+  <suite name="Tizen.AttachPanel.Tests" category="C# Device APIs">
+    <auto_tcn>17</auto_tcn>
+    <manual_tcn>0</manual_tcn>
+    <total_tcn>17</total_tcn>
+    <pkg_name>mobile/Tizen.AttachPanel.Tests-6.0.zip</pkg_name>
+  </suite>
+  <suite name="Tizen.AudioIO.Tests" category="C# Device APIs">
+    <auto_tcn>118</auto_tcn>
+    <manual_tcn>0</manual_tcn>
+    <total_tcn>118</total_tcn>
+    <pkg_name>mobile/Tizen.AudioIO.Tests-6.0.zip</pkg_name>
+  </suite>
+  <suite name="Tizen.Badge.Manual.Tests" category="C# Device APIs">
+    <auto_tcn>0</auto_tcn>
+    <manual_tcn>4</manual_tcn>
+    <total_tcn>4</total_tcn>
+    <pkg_name>mobile/Tizen.Badge.Manual.Tests-6.0.zip</pkg_name>
+  </suite>
+  <suite name="Tizen.Badge.Tests" category="C# Device APIs">
+    <auto_tcn>29</auto_tcn>
+    <manual_tcn>0</manual_tcn>
+    <total_tcn>29</total_tcn>
+    <pkg_name>mobile/Tizen.Badge.Tests-6.0.zip</pkg_name>
+  </suite>
+  <suite name="Tizen.Bluetooth.Manual.Tests" category="C# Device APIs">
+    <auto_tcn>0</auto_tcn>
+    <manual_tcn>209</manual_tcn>
+    <total_tcn>209</total_tcn>
+    <pkg_name>mobile/Tizen.Bluetooth.Manual.Tests-6.0.zip</pkg_name>
+  </suite>
+  <suite name="Tizen.Bluetooth.Tests" category="C# Device APIs">
+    <auto_tcn>125</auto_tcn>
+    <manual_tcn>0</manual_tcn>
+    <total_tcn>125</total_tcn>
+    <pkg_name>mobile/Tizen.Bluetooth.Tests-6.0.zip</pkg_name>
+  </suite>
+  <suite name="Tizen.Calendar.Tests" category="C# Device APIs">
+    <auto_tcn>112</auto_tcn>
+    <manual_tcn>0</manual_tcn>
+    <total_tcn>112</total_tcn>
+    <pkg_name>mobile/Tizen.Calendar.Tests-6.0.zip</pkg_name>
+  </suite>
+  <suite name="Tizen.Camera.Tests" category="C# Device APIs">
+    <auto_tcn>162</auto_tcn>
+    <manual_tcn>0</manual_tcn>
+    <total_tcn>162</total_tcn>
+    <pkg_name>mobile/Tizen.Camera.Tests-6.0.zip</pkg_name>
+  </suite>
+  <suite name="Tizen.Common.Tests" category="C# Device APIs">
+    <auto_tcn>39</auto_tcn>
+    <manual_tcn>0</manual_tcn>
+    <total_tcn>39</total_tcn>
+    <pkg_name>mobile/Tizen.Common.Tests-6.0.zip</pkg_name>
+  </suite>
+  <suite name="Tizen.ComponentBased.Default.Manual.Tests" category="C# Device APIs">
+    <auto_tcn>0</auto_tcn>
+    <manual_tcn>4</manual_tcn>
+    <total_tcn>4</total_tcn>
+    <pkg_name>mobile/Tizen.ComponentBased.Default.Manual.Tests-6.0.zip</pkg_name>
+  </suite>
+  <suite name="Tizen.ComponentBased.Default.Tests" category="C# Device APIs">
+    <auto_tcn>5</auto_tcn>
+    <manual_tcn>0</manual_tcn>
+    <total_tcn>5</total_tcn>
+    <pkg_name>mobile/Tizen.ComponentBased.Default.Tests-6.0.zip</pkg_name>
+  </suite>
+  <suite name="Tizen.ComponentBased.Manual.Tests" category="C# Device APIs">
+    <auto_tcn>0</auto_tcn>
+    <manual_tcn>31</manual_tcn>
+    <total_tcn>31</total_tcn>
+    <pkg_name>mobile/Tizen.ComponentBased.Manual.Tests-6.0.zip</pkg_name>
+  </suite>
+  <suite name="Tizen.ComponentBased.Tests" category="C# Device APIs">
+    <auto_tcn>8</auto_tcn>
+    <manual_tcn>0</manual_tcn>
+    <total_tcn>8</total_tcn>
+    <pkg_name>mobile/Tizen.ComponentBased.Tests-6.0.zip</pkg_name>
+  </suite>
+  <suite name="Tizen.Connection.Manual.Tests" category="C# Device APIs">
+    <auto_tcn>0</auto_tcn>
+    <manual_tcn>2</manual_tcn>
+    <total_tcn>2</total_tcn>
+    <pkg_name>mobile/Tizen.Connection.Manual.Tests-6.0.zip</pkg_name>
+  </suite>
+  <suite name="Tizen.Connection.Tests" category="C# Device APIs">
+    <auto_tcn>91</auto_tcn>
+    <manual_tcn>0</manual_tcn>
+    <total_tcn>91</total_tcn>
+    <pkg_name>mobile/Tizen.Connection.Tests-6.0.zip</pkg_name>
+  </suite>
+  <suite name="Tizen.Contacts.Manual.Tests" category="C# Device APIs">
+    <auto_tcn>0</auto_tcn>
+    <manual_tcn>2</manual_tcn>
+    <total_tcn>2</total_tcn>
+    <pkg_name>mobile/Tizen.Contacts.Manual.Tests-6.0.zip</pkg_name>
+  </suite>
+  <suite name="Tizen.Contacts.Tests" category="C# Device APIs">
+    <auto_tcn>102</auto_tcn>
+    <manual_tcn>0</manual_tcn>
+    <total_tcn>102</total_tcn>
+    <pkg_name>mobile/Tizen.Contacts.Tests-6.0.zip</pkg_name>
+  </suite>
+  <suite name="Tizen.Context.Tests" category="C# Device APIs">
+    <auto_tcn>22</auto_tcn>
+    <manual_tcn>0</manual_tcn>
+    <total_tcn>22</total_tcn>
+    <pkg_name>mobile/Tizen.Context.Tests-6.0.zip</pkg_name>
+  </suite>
+  <suite name="Tizen.DataControl.Tests" category="C# Device APIs">
+    <auto_tcn>112</auto_tcn>
+    <manual_tcn>0</manual_tcn>
+    <total_tcn>112</total_tcn>
+    <pkg_name>mobile/Tizen.DataControl.Tests-6.0.zip</pkg_name>
+  </suite>
+  <suite name="Tizen.Device.Manual.Tests" category="C# Device APIs">
+    <auto_tcn>0</auto_tcn>
+    <manual_tcn>17</manual_tcn>
+    <total_tcn>17</total_tcn>
+    <pkg_name>mobile/Tizen.Device.Manual.Tests-6.0.zip</pkg_name>
+  </suite>
+  <suite name="Tizen.Device.Tests" category="C# Device APIs">
+    <auto_tcn>30</auto_tcn>
+    <manual_tcn>0</manual_tcn>
+    <total_tcn>30</total_tcn>
+    <pkg_name>mobile/Tizen.Device.Tests-6.0.zip</pkg_name>
+  </suite>
+  <suite name="Tizen.DevicePolicyManager.Manual.Tests" category="C# Device APIs">
+    <auto_tcn>0</auto_tcn>
+    <manual_tcn>15</manual_tcn>
+    <total_tcn>15</total_tcn>
+    <pkg_name>mobile/Tizen.DevicePolicyManager.Manual.Tests-6.0.zip</pkg_name>
+  </suite>
+  <suite name="Tizen.DevicePolicyManager.Tests" category="C# Device APIs">
+    <auto_tcn>53</auto_tcn>
+    <manual_tcn>0</manual_tcn>
+    <total_tcn>53</total_tcn>
+    <pkg_name>mobile/Tizen.DevicePolicyManager.Tests-6.0.zip</pkg_name>
+  </suite>
+  <suite name="Tizen.DotnetUtil.Tests" category="C# Device APIs">
+    <auto_tcn>1</auto_tcn>
+    <manual_tcn>0</manual_tcn>
+    <total_tcn>1</total_tcn>
+    <pkg_name>mobile/Tizen.DotnetUtil.Tests-6.0.zip</pkg_name>
+  </suite>
+  <suite name="Tizen.Download.Manual.Tests" category="C# Device APIs">
+    <auto_tcn>0</auto_tcn>
+    <manual_tcn>1</manual_tcn>
+    <total_tcn>1</total_tcn>
+    <pkg_name>mobile/Tizen.Download.Manual.Tests-6.0.zip</pkg_name>
+  </suite>
+  <suite name="Tizen.Download.Tests" category="C# Device APIs">
+    <auto_tcn>53</auto_tcn>
+    <manual_tcn>0</manual_tcn>
+    <total_tcn>53</total_tcn>
+    <pkg_name>mobile/Tizen.Download.Tests-6.0.zip</pkg_name>
+  </suite>
+  <suite name="Tizen.ElmSharp.Manual.Tests" category="C# Device APIs">
+    <auto_tcn>0</auto_tcn>
+    <manual_tcn>327</manual_tcn>
+    <total_tcn>327</total_tcn>
+    <pkg_name>mobile/Tizen.ElmSharp.Manual.Tests-6.0.zip</pkg_name>
+  </suite>
+  <suite name="Tizen.ElmSharp.Tests" category="C# Device APIs">
+    <auto_tcn>1196</auto_tcn>
+    <manual_tcn>0</manual_tcn>
+    <total_tcn>1196</total_tcn>
+    <pkg_name>mobile/Tizen.ElmSharp.Tests-6.0.zip</pkg_name>
+  </suite>
+  <suite name="Tizen.Email.Tests" category="C# Device APIs">
+    <auto_tcn>13</auto_tcn>
+    <manual_tcn>0</manual_tcn>
+    <total_tcn>13</total_tcn>
+    <pkg_name>mobile/Tizen.Email.Tests-6.0.zip</pkg_name>
+  </suite>
+  <suite name="Tizen.Feedback.Tests" category="C# Device APIs">
+    <auto_tcn>9</auto_tcn>
+    <manual_tcn>0</manual_tcn>
+    <total_tcn>9</total_tcn>
+    <pkg_name>mobile/Tizen.Feedback.Tests-6.0.zip</pkg_name>
+  </suite>
+  <suite name="Tizen.FidoClient.Tests" category="C# Device APIs">
+    <auto_tcn>29</auto_tcn>
+    <manual_tcn>0</manual_tcn>
+    <total_tcn>29</total_tcn>
+    <pkg_name>mobile/Tizen.FidoClient.Tests-6.0.zip</pkg_name>
+  </suite>
+  <suite name="Tizen.Geofence.Tests" category="C# Device APIs">
+    <auto_tcn>69</auto_tcn>
+    <manual_tcn>0</manual_tcn>
+    <total_tcn>69</total_tcn>
+    <pkg_name>mobile/Tizen.Geofence.Tests-6.0.zip</pkg_name>
+  </suite>
+  <suite name="Tizen.Information.Manual.Tests" category="C# Device APIs">
+    <auto_tcn>0</auto_tcn>
+    <manual_tcn>27</manual_tcn>
+    <total_tcn>27</total_tcn>
+    <pkg_name>mobile/Tizen.Information.Manual.Tests-6.0.zip</pkg_name>
+  </suite>
+  <suite name="Tizen.Information.Tests" category="C# Device APIs">
+    <auto_tcn>62</auto_tcn>
+    <manual_tcn>0</manual_tcn>
+    <total_tcn>62</total_tcn>
+    <pkg_name>mobile/Tizen.Information.Tests-6.0.zip</pkg_name>
+  </suite>
+  <suite name="Tizen.Inputmethod.Manual.Tests" category="C# Device APIs">
+    <auto_tcn>0</auto_tcn>
+    <manual_tcn>3</manual_tcn>
+    <total_tcn>3</total_tcn>
+    <pkg_name>mobile/Tizen.Inputmethod.Manual.Tests-6.0.zip</pkg_name>
+  </suite>
+  <suite name="Tizen.Inputmethod.Tests" category="C# Device APIs">
+    <auto_tcn>84</auto_tcn>
+    <manual_tcn>0</manual_tcn>
+    <total_tcn>84</total_tcn>
+    <pkg_name>mobile/Tizen.Inputmethod.Tests-6.0.zip</pkg_name>
+  </suite>
+  <suite name="Tizen.Inputmethodmanager.Tests" category="C# Device APIs">
+    <auto_tcn>7</auto_tcn>
+    <manual_tcn>0</manual_tcn>
+    <total_tcn>7</total_tcn>
+    <pkg_name>mobile/Tizen.Inputmethodmanager.Tests-6.0.zip</pkg_name>
+  </suite>
+  <suite name="Tizen.IoTConnectivityClient.Tests" category="C# Device APIs">
+    <auto_tcn>143</auto_tcn>
+    <manual_tcn>0</manual_tcn>
+    <total_tcn>143</total_tcn>
+    <pkg_name>mobile/Tizen.IoTConnectivityClient.Tests-6.0.zip</pkg_name>
+  </suite>
+  <suite name="Tizen.IoTConnectivityServer.Tests" category="C# Device APIs">
+    <auto_tcn>112</auto_tcn>
+    <manual_tcn>0</manual_tcn>
+    <total_tcn>112</total_tcn>
+    <pkg_name>mobile/Tizen.IoTConnectivityServer.Tests-6.0.zip</pkg_name>
+  </suite>
+  <suite name="Tizen.Location.Manual.Tests" category="C# Device APIs">
+    <auto_tcn>0</auto_tcn>
+    <manual_tcn>2</manual_tcn>
+    <total_tcn>2</total_tcn>
+    <pkg_name>mobile/Tizen.Location.Manual.Tests-6.0.zip</pkg_name>
+  </suite>
+  <suite name="Tizen.Location.Tests" category="C# Device APIs">
+    <auto_tcn>127</auto_tcn>
+    <manual_tcn>0</manual_tcn>
+    <total_tcn>127</total_tcn>
+    <pkg_name>mobile/Tizen.Location.Tests-6.0.zip</pkg_name>
+  </suite>
+  <suite name="Tizen.Log.Manual.Tests" category="C# Device APIs">
+    <auto_tcn>0</auto_tcn>
+    <manual_tcn>1</manual_tcn>
+    <total_tcn>1</total_tcn>
+    <pkg_name>mobile/Tizen.Log.Manual.Tests-6.0.zip</pkg_name>
+  </suite>
+  <suite name="Tizen.Log.Tests" category="C# Device APIs">
+    <auto_tcn>6</auto_tcn>
+    <manual_tcn>0</manual_tcn>
+    <total_tcn>6</total_tcn>
+    <pkg_name>mobile/Tizen.Log.Tests-6.0.zip</pkg_name>
+  </suite>
+  <suite name="Tizen.MachineLearning.Inference.Tests" category="C# Device APIs">
+    <auto_tcn>30</auto_tcn>
+    <manual_tcn>0</manual_tcn>
+    <total_tcn>30</total_tcn>
+    <pkg_name>mobile/Tizen.MachineLearning.Inference.Tests-6.0.zip</pkg_name>
+  </suite>
+  <suite name="Tizen.Maps.Manual.Tests" category="C# Device APIs">
+    <auto_tcn>0</auto_tcn>
+    <manual_tcn>23</manual_tcn>
+    <total_tcn>23</total_tcn>
+    <pkg_name>mobile/Tizen.Maps.Manual.Tests-6.0.zip</pkg_name>
+  </suite>
+  <suite name="Tizen.Maps.Tests" category="C# Device APIs">
+    <auto_tcn>224</auto_tcn>
+    <manual_tcn>0</manual_tcn>
+    <total_tcn>224</total_tcn>
+    <pkg_name>mobile/Tizen.Maps.Tests-6.0.zip</pkg_name>
+  </suite>
+  <suite name="Tizen.MediaCodec.Tests" category="C# Device APIs">
+    <auto_tcn>26</auto_tcn>
+    <manual_tcn>0</manual_tcn>
+    <total_tcn>26</total_tcn>
+    <pkg_name>mobile/Tizen.MediaCodec.Tests-6.0.zip</pkg_name>
+  </suite>
+  <suite name="Tizen.MediaController.Tests" category="C# Device APIs">
+    <auto_tcn>312</auto_tcn>
+    <manual_tcn>0</manual_tcn>
+    <total_tcn>312</total_tcn>
+    <pkg_name>mobile/Tizen.MediaController.Tests-6.0.zip</pkg_name>
+  </suite>
+  <suite name="Tizen.MediaKey.Manual.Tests" category="C# Device APIs">
+    <auto_tcn>0</auto_tcn>
+    <manual_tcn>3</manual_tcn>
+    <total_tcn>3</total_tcn>
+    <pkg_name>mobile/Tizen.MediaKey.Manual.Tests-6.0.zip</pkg_name>
+  </suite>
+  <suite name="Tizen.MediaKey.Tests" category="C# Device APIs">
+    <auto_tcn>2</auto_tcn>
+    <manual_tcn>0</manual_tcn>
+    <total_tcn>2</total_tcn>
+    <pkg_name>mobile/Tizen.MediaKey.Tests-6.0.zip</pkg_name>
+  </suite>
+  <suite name="Tizen.MediaPlayer.Tests" category="C# Device APIs">
+    <auto_tcn>358</auto_tcn>
+    <manual_tcn>0</manual_tcn>
+    <total_tcn>358</total_tcn>
+    <pkg_name>mobile/Tizen.MediaPlayer.Tests-6.0.zip</pkg_name>
+  </suite>
+  <suite name="Tizen.MediaVision.Manual.Tests" category="C# Device APIs">
+    <auto_tcn>0</auto_tcn>
+    <manual_tcn>4</manual_tcn>
+    <total_tcn>4</total_tcn>
+    <pkg_name>mobile/Tizen.MediaVision.Manual.Tests-6.0.zip</pkg_name>
+  </suite>
+  <suite name="Tizen.MediaVision.Tests" category="C# Device APIs">
+    <auto_tcn>380</auto_tcn>
+    <manual_tcn>0</manual_tcn>
+    <total_tcn>380</total_tcn>
+    <pkg_name>mobile/Tizen.MediaVision.Tests-6.0.zip</pkg_name>
+  </suite>
+  <suite name="Tizen.Mediacontent.Manual.Tests" category="C# Device APIs">
+    <auto_tcn>0</auto_tcn>
+    <manual_tcn>1</manual_tcn>
+    <total_tcn>1</total_tcn>
+    <pkg_name>mobile/Tizen.Mediacontent.Manual.Tests-6.0.zip</pkg_name>
+  </suite>
+  <suite name="Tizen.Mediacontent.Tests" category="C# Device APIs">
+    <auto_tcn>811</auto_tcn>
+    <manual_tcn>0</manual_tcn>
+    <total_tcn>811</total_tcn>
+    <pkg_name>mobile/Tizen.Mediacontent.Tests-6.0.zip</pkg_name>
+  </suite>
+  <suite name="Tizen.Messages.Tests" category="C# Device APIs">
+    <auto_tcn>33</auto_tcn>
+    <manual_tcn>0</manual_tcn>
+    <total_tcn>33</total_tcn>
+    <pkg_name>mobile/Tizen.Messages.Tests-6.0.zip</pkg_name>
+  </suite>
+  <suite name="Tizen.Metadata.Tests" category="C# Device APIs">
+    <auto_tcn>77</auto_tcn>
+    <manual_tcn>0</manual_tcn>
+    <total_tcn>77</total_tcn>
+    <pkg_name>mobile/Tizen.Metadata.Tests-6.0.zip</pkg_name>
+  </suite>
+  <suite name="Tizen.Mime.Tests" category="C# Device APIs">
+    <auto_tcn>4</auto_tcn>
+    <manual_tcn>0</manual_tcn>
+    <total_tcn>4</total_tcn>
+    <pkg_name>mobile/Tizen.Mime.Tests-6.0.zip</pkg_name>
+  </suite>
+  <suite name="Tizen.Multimedia.Manual.Tests" category="C# Device APIs">
+    <auto_tcn>0</auto_tcn>
+    <manual_tcn>55</manual_tcn>
+    <total_tcn>55</total_tcn>
+    <pkg_name>mobile/Tizen.Multimedia.Manual.Tests-6.0.zip</pkg_name>
+  </suite>
+  <suite name="Tizen.Multimedia.Tests" category="C# Device APIs">
+    <auto_tcn>229</auto_tcn>
+    <manual_tcn>0</manual_tcn>
+    <total_tcn>229</total_tcn>
+    <pkg_name>mobile/Tizen.Multimedia.Tests-6.0.zip</pkg_name>
+  </suite>
+  <suite name="Tizen.MultimediaUtil.Tests" category="C# Device APIs">
+    <auto_tcn>166</auto_tcn>
+    <manual_tcn>0</manual_tcn>
+    <total_tcn>166</total_tcn>
+    <pkg_name>mobile/Tizen.MultimediaUtil.Tests-6.0.zip</pkg_name>
+  </suite>
+  <suite name="Tizen.NUI.Components.Manual.Tests" category="C# Device APIs">
+    <auto_tcn>0</auto_tcn>
+    <manual_tcn>6</manual_tcn>
+    <total_tcn>6</total_tcn>
+    <pkg_name>mobile/Tizen.NUI.Components.Manual.Tests-6.0.zip</pkg_name>
+  </suite>
+  <suite name="Tizen.NUI.Components.Tests" category="C# Device APIs">
+    <auto_tcn>140</auto_tcn>
+    <manual_tcn>0</manual_tcn>
+    <total_tcn>140</total_tcn>
+    <pkg_name>mobile/Tizen.NUI.Components.Tests-6.0.zip</pkg_name>
+  </suite>
+  <suite name="Tizen.NUI.Manual.Tests" category="C# Device APIs">
+    <auto_tcn>0</auto_tcn>
+    <manual_tcn>83</manual_tcn>
+    <total_tcn>83</total_tcn>
+    <pkg_name>mobile/Tizen.NUI.Manual.Tests-6.0.zip</pkg_name>
+  </suite>
+  <suite name="Tizen.NUI.Tests" category="C# Device APIs">
+    <auto_tcn>2096</auto_tcn>
+    <manual_tcn>0</manual_tcn>
+    <total_tcn>2096</total_tcn>
+    <pkg_name>mobile/Tizen.NUI.Tests-6.0.zip</pkg_name>
+  </suite>
+  <suite name="Tizen.Network.Stc.Tests" category="C# Device APIs">
+    <auto_tcn>28</auto_tcn>
+    <manual_tcn>0</manual_tcn>
+    <total_tcn>28</total_tcn>
+    <pkg_name>mobile/Tizen.Network.Stc.Tests-6.0.zip</pkg_name>
+  </suite>
+  <suite name="Tizen.Nfc.Manual.Tests" category="C# Device APIs">
+    <auto_tcn>0</auto_tcn>
+    <manual_tcn>35</manual_tcn>
+    <total_tcn>35</total_tcn>
+    <pkg_name>mobile/Tizen.Nfc.Manual.Tests-6.0.zip</pkg_name>
+  </suite>
+  <suite name="Tizen.Nfc.Tests" category="C# Device APIs">
+    <auto_tcn>49</auto_tcn>
+    <manual_tcn>0</manual_tcn>
+    <total_tcn>49</total_tcn>
+    <pkg_name>mobile/Tizen.Nfc.Tests-6.0.zip</pkg_name>
+  </suite>
+  <suite name="Tizen.Nlp.Tests" category="C# Device APIs">
+    <auto_tcn>19</auto_tcn>
+    <manual_tcn>0</manual_tcn>
+    <total_tcn>19</total_tcn>
+    <pkg_name>mobile/Tizen.Nlp.Tests-6.0.zip</pkg_name>
+  </suite>
+  <suite name="Tizen.NotificationEventListener.Tests" category="C# Device APIs">
+    <auto_tcn>85</auto_tcn>
+    <manual_tcn>0</manual_tcn>
+    <total_tcn>85</total_tcn>
+    <pkg_name>mobile/Tizen.NotificationEventListener.Tests-6.0.zip</pkg_name>
+  </suite>
+  <suite name="Tizen.Notifications.Manual.Tests" category="C# Device APIs">
+    <auto_tcn>0</auto_tcn>
+    <manual_tcn>33</manual_tcn>
+    <total_tcn>33</total_tcn>
+    <pkg_name>mobile/Tizen.Notifications.Manual.Tests-6.0.zip</pkg_name>
+  </suite>
+  <suite name="Tizen.Notifications.Tests" category="C# Device APIs">
+    <auto_tcn>132</auto_tcn>
+    <manual_tcn>0</manual_tcn>
+    <total_tcn>132</total_tcn>
+    <pkg_name>mobile/Tizen.Notifications.Tests-6.0.zip</pkg_name>
+  </suite>
+  <suite name="Tizen.Nsd.Manual.Tests" category="C# Device APIs">
+    <auto_tcn>0</auto_tcn>
+    <manual_tcn>15</manual_tcn>
+    <total_tcn>15</total_tcn>
+    <pkg_name>mobile/Tizen.Nsd.Manual.Tests-6.0.zip</pkg_name>
+  </suite>
+  <suite name="Tizen.Nsd.Tests" category="C# Device APIs">
+    <auto_tcn>34</auto_tcn>
+    <manual_tcn>0</manual_tcn>
+    <total_tcn>34</total_tcn>
+    <pkg_name>mobile/Tizen.Nsd.Tests-6.0.zip</pkg_name>
+  </suite>
+  <suite name="Tizen.OAuth2.Tests" category="C# Device APIs">
+    <auto_tcn>70</auto_tcn>
+    <manual_tcn>0</manual_tcn>
+    <total_tcn>70</total_tcn>
+    <pkg_name>mobile/Tizen.OAuth2.Tests-6.0.zip</pkg_name>
+  </suite>
+  <suite name="Tizen.Packagemanager.Manual.Tests" category="C# Device APIs">
+    <auto_tcn>0</auto_tcn>
+    <manual_tcn>5</manual_tcn>
+    <total_tcn>5</total_tcn>
+    <pkg_name>mobile/Tizen.Packagemanager.Manual.Tests-6.0.zip</pkg_name>
+  </suite>
+  <suite name="Tizen.Packagemanager.Tests" category="C# Device APIs">
+    <auto_tcn>69</auto_tcn>
+    <manual_tcn>0</manual_tcn>
+    <total_tcn>69</total_tcn>
+    <pkg_name>mobile/Tizen.Packagemanager.Tests-6.0.zip</pkg_name>
+  </suite>
+  <suite name="Tizen.PhonenumberUtils.Tests" category="C# Device APIs">
+    <auto_tcn>7</auto_tcn>
+    <manual_tcn>0</manual_tcn>
+    <total_tcn>7</total_tcn>
+    <pkg_name>mobile/Tizen.PhonenumberUtils.Tests-6.0.zip</pkg_name>
+  </suite>
+  <suite name="Tizen.PrivacyPrivilegeManager.Manual.Tests" category="C# Device APIs">
+    <auto_tcn>0</auto_tcn>
+    <manual_tcn>40</manual_tcn>
+    <total_tcn>40</total_tcn>
+    <pkg_name>mobile/Tizen.PrivacyPrivilegeManager.Manual.Tests-6.0.zip</pkg_name>
+  </suite>
+  <suite name="Tizen.Privilege.Tests" category="C# Device APIs">
+    <auto_tcn>19</auto_tcn>
+    <manual_tcn>0</manual_tcn>
+    <total_tcn>19</total_tcn>
+    <pkg_name>mobile/Tizen.Privilege.Tests-6.0.zip</pkg_name>
+  </suite>
+  <suite name="Tizen.Push.Tests" category="C# Device APIs">
+    <auto_tcn>22</auto_tcn>
+    <manual_tcn>0</manual_tcn>
+    <total_tcn>22</total_tcn>
+    <pkg_name>mobile/Tizen.Push.Tests-6.0.zip</pkg_name>
+  </suite>
+  <suite name="Tizen.Radio.Tests" category="C# Device APIs">
+    <auto_tcn>39</auto_tcn>
+    <manual_tcn>0</manual_tcn>
+    <total_tcn>39</total_tcn>
+    <pkg_name>mobile/Tizen.Radio.Tests-6.0.zip</pkg_name>
+  </suite>
+  <suite name="Tizen.Recorder.Tests" category="C# Device APIs">
+    <auto_tcn>113</auto_tcn>
+    <manual_tcn>0</manual_tcn>
+    <total_tcn>113</total_tcn>
+    <pkg_name>mobile/Tizen.Recorder.Tests-6.0.zip</pkg_name>
+  </suite>
+  <suite name="Tizen.RemoteView.Tests" category="C# Device APIs">
+    <auto_tcn>17</auto_tcn>
+    <manual_tcn>0</manual_tcn>
+    <total_tcn>17</total_tcn>
+    <pkg_name>mobile/Tizen.RemoteView.Tests-6.0.zip</pkg_name>
+  </suite>
+  <suite name="Tizen.ScreenMirroring.Tests" category="C# Device APIs">
+    <auto_tcn>49</auto_tcn>
+    <manual_tcn>0</manual_tcn>
+    <total_tcn>49</total_tcn>
+    <pkg_name>mobile/Tizen.ScreenMirroring.Tests-6.0.zip</pkg_name>
+  </suite>
+  <suite name="Tizen.Securerepository.Tests" category="C# Device APIs">
+    <auto_tcn>124</auto_tcn>
+    <manual_tcn>0</manual_tcn>
+    <total_tcn>124</total_tcn>
+    <pkg_name>mobile/Tizen.Securerepository.Tests-6.0.zip</pkg_name>
+  </suite>
+  <suite name="Tizen.Sensor.Manual.Tests" category="C# Device APIs">
+    <auto_tcn>0</auto_tcn>
+    <manual_tcn>104</manual_tcn>
+    <total_tcn>104</total_tcn>
+    <pkg_name>mobile/Tizen.Sensor.Manual.Tests-6.0.zip</pkg_name>
+  </suite>
+  <suite name="Tizen.Sensor.Tests" category="C# Device APIs">
+    <auto_tcn>221</auto_tcn>
+    <manual_tcn>0</manual_tcn>
+    <total_tcn>221</total_tcn>
+    <pkg_name>mobile/Tizen.Sensor.Tests-6.0.zip</pkg_name>
+  </suite>
+  <suite name="Tizen.Shortcut.Tests" category="C# Device APIs">
+    <auto_tcn>70</auto_tcn>
+    <manual_tcn>0</manual_tcn>
+    <total_tcn>70</total_tcn>
+    <pkg_name>mobile/Tizen.Shortcut.Tests-6.0.zip</pkg_name>
+  </suite>
+  <suite name="Tizen.Smartcard.Tests" category="C# Device APIs">
+    <auto_tcn>11</auto_tcn>
+    <manual_tcn>0</manual_tcn>
+    <total_tcn>11</total_tcn>
+    <pkg_name>mobile/Tizen.Smartcard.Tests-6.0.zip</pkg_name>
+  </suite>
+  <suite name="Tizen.StreamRecorder.Tests" category="C# Device APIs">
+    <auto_tcn>88</auto_tcn>
+    <manual_tcn>0</manual_tcn>
+    <total_tcn>88</total_tcn>
+    <pkg_name>mobile/Tizen.StreamRecorder.Tests-6.0.zip</pkg_name>
+  </suite>
+  <suite name="Tizen.Stt.Manual.Tests" category="C# Device APIs">
+    <auto_tcn>0</auto_tcn>
+    <manual_tcn>19</manual_tcn>
+    <total_tcn>19</total_tcn>
+    <pkg_name>mobile/Tizen.Stt.Manual.Tests-6.0.zip</pkg_name>
+  </suite>
+  <suite name="Tizen.Stt.Tests" category="C# Device APIs">
+    <auto_tcn>40</auto_tcn>
+    <manual_tcn>0</manual_tcn>
+    <total_tcn>40</total_tcn>
+    <pkg_name>mobile/Tizen.Stt.Tests-6.0.zip</pkg_name>
+  </suite>
+  <suite name="Tizen.SttEngine.Manual.Tests" category="C# Device APIs">
+    <auto_tcn>0</auto_tcn>
+    <manual_tcn>25</manual_tcn>
+    <total_tcn>25</total_tcn>
+    <pkg_name>mobile/Tizen.SttEngine.Manual.Tests-6.0.zip</pkg_name>
+  </suite>
+  <suite name="Tizen.SyncManager.Tests" category="C# Device APIs">
+    <auto_tcn>31</auto_tcn>
+    <manual_tcn>0</manual_tcn>
+    <total_tcn>31</total_tcn>
+    <pkg_name>mobile/Tizen.SyncManager.Tests-6.0.zip</pkg_name>
+  </suite>
+  <suite name="Tizen.System.Manual.Tests" category="C# Device APIs">
+    <auto_tcn>0</auto_tcn>
+    <manual_tcn>3</manual_tcn>
+    <total_tcn>3</total_tcn>
+    <pkg_name>mobile/Tizen.System.Manual.Tests-6.0.zip</pkg_name>
+  </suite>
+  <suite name="Tizen.System.Tests" category="C# Device APIs">
+    <auto_tcn>17</auto_tcn>
+    <manual_tcn>0</manual_tcn>
+    <total_tcn>17</total_tcn>
+    <pkg_name>mobile/Tizen.System.Tests-6.0.zip</pkg_name>
+  </suite>
+  <suite name="Tizen.Systemsettings.Tests" category="C# Device APIs">
+    <auto_tcn>10</auto_tcn>
+    <manual_tcn>0</manual_tcn>
+    <total_tcn>10</total_tcn>
+    <pkg_name>mobile/Tizen.Systemsettings.Tests-6.0.zip</pkg_name>
+  </suite>
+  <suite name="Tizen.TEEC.Tests" category="C# Device APIs">
+    <auto_tcn>10</auto_tcn>
+    <manual_tcn>0</manual_tcn>
+    <total_tcn>10</total_tcn>
+    <pkg_name>mobile/Tizen.TEEC.Tests-6.0.zip</pkg_name>
+  </suite>
+  <suite name="Tizen.Telephony.Manual.Tests" category="C# Device APIs">
+    <auto_tcn>0</auto_tcn>
+    <manual_tcn>13</manual_tcn>
+    <total_tcn>13</total_tcn>
+    <pkg_name>mobile/Tizen.Telephony.Manual.Tests-6.0.zip</pkg_name>
+  </suite>
+  <suite name="Tizen.Telephony.Tests" category="C# Device APIs">
+    <auto_tcn>53</auto_tcn>
+    <manual_tcn>0</manual_tcn>
+    <total_tcn>53</total_tcn>
+    <pkg_name>mobile/Tizen.Telephony.Tests-6.0.zip</pkg_name>
+  </suite>
+  <suite name="Tizen.ToastMessage.Tests" category="C# Device APIs">
+    <auto_tcn>3</auto_tcn>
+    <manual_tcn>0</manual_tcn>
+    <total_tcn>3</total_tcn>
+    <pkg_name>mobile/Tizen.ToastMessage.Tests-6.0.zip</pkg_name>
+  </suite>
+  <suite name="Tizen.Tracer.Tests" category="C# Device APIs">
+    <auto_tcn>5</auto_tcn>
+    <manual_tcn>0</manual_tcn>
+    <total_tcn>5</total_tcn>
+    <pkg_name>mobile/Tizen.Tracer.Tests-6.0.zip</pkg_name>
+  </suite>
+  <suite name="Tizen.Tts.Manual.Tests" category="C# Device APIs">
+    <auto_tcn>0</auto_tcn>
+    <manual_tcn>11</manual_tcn>
+    <total_tcn>11</total_tcn>
+    <pkg_name>mobile/Tizen.Tts.Manual.Tests-6.0.zip</pkg_name>
+  </suite>
+  <suite name="Tizen.Tts.Tests" category="C# Device APIs">
+    <auto_tcn>39</auto_tcn>
+    <manual_tcn>0</manual_tcn>
+    <total_tcn>39</total_tcn>
+    <pkg_name>mobile/Tizen.Tts.Tests-6.0.zip</pkg_name>
+  </suite>
+  <suite name="Tizen.TtsEngine.Manual.Tests" category="C# Device APIs">
+    <auto_tcn>0</auto_tcn>
+    <manual_tcn>22</manual_tcn>
+    <total_tcn>22</total_tcn>
+    <pkg_name>mobile/Tizen.TtsEngine.Manual.Tests-6.0.zip</pkg_name>
+  </suite>
+  <suite name="Tizen.Usb.Manual.Tests" category="C# Device APIs">
+    <auto_tcn>0</auto_tcn>
+    <manual_tcn>4</manual_tcn>
+    <total_tcn>4</total_tcn>
+    <pkg_name>mobile/Tizen.Usb.Manual.Tests-6.0.zip</pkg_name>
+  </suite>
+  <suite name="Tizen.Usb.Tests" category="C# Device APIs">
+    <auto_tcn>57</auto_tcn>
+    <manual_tcn>0</manual_tcn>
+    <total_tcn>57</total_tcn>
+    <pkg_name>mobile/Tizen.Usb.Tests-6.0.zip</pkg_name>
+  </suite>
+  <suite name="Tizen.VoiceControl.Manual.Tests" category="C# Device APIs">
+    <auto_tcn>0</auto_tcn>
+    <manual_tcn>9</manual_tcn>
+    <total_tcn>9</total_tcn>
+    <pkg_name>mobile/Tizen.VoiceControl.Manual.Tests-6.0.zip</pkg_name>
+  </suite>
+  <suite name="Tizen.VoiceControl.Tests" category="C# Device APIs">
+    <auto_tcn>64</auto_tcn>
+    <manual_tcn>0</manual_tcn>
+    <total_tcn>64</total_tcn>
+    <pkg_name>mobile/Tizen.VoiceControl.Tests-6.0.zip</pkg_name>
+  </suite>
+  <suite name="Tizen.WatchApplication.Manual.Tests" category="C# Device APIs">
+    <auto_tcn>0</auto_tcn>
+    <manual_tcn>17</manual_tcn>
+    <total_tcn>17</total_tcn>
+    <pkg_name>mobile/Tizen.WatchApplication.Manual.Tests-6.0.zip</pkg_name>
+  </suite>
+  <suite name="Tizen.WatchApplication.Tests" category="C# Device APIs">
+    <auto_tcn>35</auto_tcn>
+    <manual_tcn>0</manual_tcn>
+    <total_tcn>35</total_tcn>
+    <pkg_name>mobile/Tizen.WatchApplication.Tests-6.0.zip</pkg_name>
+  </suite>
+  <suite name="Tizen.WebView.Manual.Tests" category="C# Device APIs">
+    <auto_tcn>0</auto_tcn>
+    <manual_tcn>8</manual_tcn>
+    <total_tcn>8</total_tcn>
+    <pkg_name>mobile/Tizen.WebView.Manual.Tests-6.0.zip</pkg_name>
+  </suite>
+  <suite name="Tizen.WebView.Tests" category="C# Device APIs">
+    <auto_tcn>92</auto_tcn>
+    <manual_tcn>0</manual_tcn>
+    <total_tcn>92</total_tcn>
+    <pkg_name>mobile/Tizen.WebView.Tests-6.0.zip</pkg_name>
+  </suite>
+  <suite name="Tizen.WiFi.Manual.Tests" category="C# Device APIs">
+    <auto_tcn>0</auto_tcn>
+    <manual_tcn>5</manual_tcn>
+    <total_tcn>5</total_tcn>
+    <pkg_name>mobile/Tizen.WiFi.Manual.Tests-6.0.zip</pkg_name>
+  </suite>
+  <suite name="Tizen.WiFi.Tests" category="C# Device APIs">
+    <auto_tcn>101</auto_tcn>
+    <manual_tcn>0</manual_tcn>
+    <total_tcn>101</total_tcn>
+    <pkg_name>mobile/Tizen.WiFi.Tests-6.0.zip</pkg_name>
+  </suite>
+  <suite name="Tizen.WidgetApplication.Manual.Tests" category="C# Device APIs">
+    <auto_tcn>0</auto_tcn>
+    <manual_tcn>10</manual_tcn>
+    <total_tcn>10</total_tcn>
+    <pkg_name>mobile/Tizen.WidgetApplication.Manual.Tests-6.0.zip</pkg_name>
+  </suite>
+  <suite name="Tizen.WidgetApplication.Tests" category="C# Device APIs">
+    <auto_tcn>6</auto_tcn>
+    <manual_tcn>0</manual_tcn>
+    <total_tcn>6</total_tcn>
+    <pkg_name>mobile/Tizen.WidgetApplication.Tests-6.0.zip</pkg_name>
+  </suite>
+  <suite name="Tizen.WidgetControl.Manual.Tests" category="C# Device APIs">
+    <auto_tcn>0</auto_tcn>
+    <manual_tcn>5</manual_tcn>
+    <total_tcn>5</total_tcn>
+    <pkg_name>mobile/Tizen.WidgetControl.Manual.Tests-6.0.zip</pkg_name>
+  </suite>
+  <suite name="Tizen.WidgetControl.Tests" category="C# Device APIs">
+    <auto_tcn>21</auto_tcn>
+    <manual_tcn>0</manual_tcn>
+    <total_tcn>21</total_tcn>
+    <pkg_name>mobile/Tizen.WidgetControl.Tests-6.0.zip</pkg_name>
+  </suite>
+  <suite name="Tizen.Wifidirect.Manual.Tests" category="C# Device APIs">
+    <auto_tcn>0</auto_tcn>
+    <manual_tcn>43</manual_tcn>
+    <total_tcn>43</total_tcn>
+    <pkg_name>mobile/Tizen.Wifidirect.Manual.Tests-6.0.zip</pkg_name>
+  </suite>
+  <suite name="Tizen.Wifidirect.Tests" category="C# Device APIs">
+    <auto_tcn>96</auto_tcn>
+    <manual_tcn>0</manual_tcn>
+    <total_tcn>96</total_tcn>
+    <pkg_name>mobile/Tizen.Wifidirect.Tests-6.0.zip</pkg_name>
+  </suite>
+</ns3:testplan>
diff --git a/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/resource/InternalStorageSetting.wgt b/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/resource/InternalStorageSetting.wgt
new file mode 100755 (executable)
index 0000000..64b8782
Binary files /dev/null and b/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/resource/InternalStorageSetting.wgt differ
diff --git a/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/resource/MessagePortHelper.wgt b/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/resource/MessagePortHelper.wgt
new file mode 100755 (executable)
index 0000000..3e4d0b3
Binary files /dev/null and b/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/resource/MessagePortHelper.wgt differ
diff --git a/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/resource/buildinfo.xml b/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/resource/buildinfo.xml
new file mode 100755 (executable)
index 0000000..533afd5
--- /dev/null
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="UTF-8"?>\r
+<buildinfos xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"\r
+xsi:noNamespaceSchemaLocation="buildinfo.xsd">\r
+    <buildinfo name="model" support="true" type="String">\r
+        <value>SM-Z130H</value>\r
+    </buildinfo>\r
+    <buildinfo name="manufacturer" support="true" type="String">\r
+        <value>samsung</value>\r
+    </buildinfo>\r
+    <buildinfo name="buildVersion" support="true" type="String">\r
+        <value>Z130HDDE0ANL7</value>\r
+    </buildinfo>\r
+</buildinfos>
\ No newline at end of file
diff --git a/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/resource/capability.xml b/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/resource/capability.xml
new file mode 100755 (executable)
index 0000000..23216c3
--- /dev/null
@@ -0,0 +1,179 @@
+<?xml version="1.0" encoding="UTF-8"?>\r
+<capabilities xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"\r
+xsi:noNamespaceSchemaLocation="capability.xsd">\r
+    <capability name="http://tizen.org/feature/account" support="true" type="boolean"/>\r
+    <capability name="http://tizen.org/feature/battery" support="true" type="boolean"/>\r
+    <capability name="http://tizen.org/feature/bookmark" support="true" type="boolean"/>\r
+    <capability name="http://tizen.org/feature/calendar" support="true" type="boolean"/>\r
+    <capability name="http://tizen.org/feature/camera" support="true" type="boolean"/>\r
+    <capability name="http://tizen.org/feature/camera.back" support="false" type="boolean"/>\r
+    <capability name="http://tizen.org/feature/camera.back.flash" support="false" type="boolean"/>\r
+    <capability name="http://tizen.org/feature/camera.front" support="true" type="boolean"/>\r
+    <capability name="http://tizen.org/feature/camera.front.flash" support="false" type="boolean"/>\r
+    <capability name="http://tizen.org/feature/contact" support="true" type="boolean"/>\r
+    <capability name="http://tizen.org/feature/database.encryption" support="false" type="boolean"/>\r
+    <capability name="http://tizen.org/feature/datasync" support="false" type="boolean"/>\r
+    <capability name="http://tizen.org/feature/datacontrol" support="true" type="boolean"/>\r
+    <capability name="http://tizen.org/feature/download" support="true" type="boolean"/>\r
+    <capability name="http://tizen.org/feature/fmradio" support="false" type="boolean"/>\r
+    <capability name="http://tizen.org/feature/graphics.acceleration" support="true" type="boolean"/>\r
+    <capability name="http://tizen.org/feature/input.keyboard" support="false" type="boolean"/>\r
+    <capability name="http://tizen.org/feature/input.keyboard.layout" support="qwerty" type="String">\r
+    </capability>\r
+    <capability name="http://tizen.org/feature/location" support="true" type="boolean"/>\r
+    <capability name="http://tizen.org/feature/location.gps" support="true" type="boolean"/>\r
+    <capability name="http://tizen.org/feature/location.wps" support="false" type="boolean"/>\r
+    <capability name="http://tizen.org/feature/email" support="true" type="boolean"/>\r
+    <capability name="http://tizen.org/feature/microphone" support="true" type="boolean"/>\r
+    <capability name="http://tizen.org/feature/multi_point_touch.pinch_zoom" support="true" type="boolean"/>\r
+    <capability name="http://tizen.org/feature/multi_point_touch.point_count" support="10" type="Integer">\r
+    </capability>\r
+    <capability name="http://tizen.org/feature/network.bluetooth" support="false" type="boolean"/>\r
+    <capability name="http://tizen.org/feature/network.bluetooth.health" support="false" type="boolean"/>\r
+    <capability name="http://tizen.org/feature/network.nfc" support="false" type="boolean"/>\r
+    <capability name="http://tizen.org/feature/network.nfc.card_emulation" support="false" type="boolean"/>\r
+    <capability name="http://tizen.org/feature/network.nfc.reserved_push" support="false" type="boolean"/>\r
+    <capability name="http://tizen.org/feature/network.push" support="true" type="boolean"/>\r
+    <capability name="http://tizen.org/feature/network.secure_element" support="false" type="boolean"/>\r
+    <capability name="http://tizen.org/feature/network.telephony" support="false" type="boolean"/>\r
+    <capability name="http://tizen.org/feature/network.telephony.mms" support="false" type="boolean"/>\r
+    <capability name="http://tizen.org/feature/network.wifi" support="false" type="boolean"/>\r
+    <capability name="http://tizen.org/feature/network.wifi.direct" support="false" type="boolean"/>\r
+    <capability name="http://tizen.org/feature/notification" support="true" type="boolean"/>\r
+    <capability name="http://tizen.org/feature/opengles" support="true" type="boolean"/>\r
+    <capability name="http://tizen.org/feature/opengles.texture_format" support="etc" type="String">\r
+    </capability>\r
+    <capability name="http://tizen.org/feature/opengles.texture_format.3dc" support="false" type="boolean"/>\r
+    <capability name="http://tizen.org/feature/opengles.texture_format.atc" support="false" type="boolean"/>\r
+    <capability name="http://tizen.org/feature/opengles.texture_format.etc" support="true" type="boolean"/>\r
+    <capability name="http://tizen.org/feature/opengles.texture_format.ptc" support="false" type="boolean"/>\r
+    <capability name="http://tizen.org/feature/opengles.texture_format.pvrtc" support="false" type="boolean"/>\r
+    <capability name="http://tizen.org/feature/opengles.texture_format.utc" support="false" type="boolean"/>\r
+    <capability name="http://tizen.org/feature/opengles.version.1_1" support="true" type="boolean"/>\r
+    <capability name="http://tizen.org/feature/opengles.version.2_0" support="true" type="boolean"/>\r
+    <capability name="http://tizen.org/feature/platform.core.api.version" support="2.3" type="String">\r
+    </capability>\r
+    <capability name="http://tizen.org/feature/platform.core.cpu.arch" support="x86" type="String">\r
+    </capability>\r
+    <capability name="http://tizen.org/feature/platform.core.cpu.arch.armv6" support="false" type="boolean"/>\r
+    <capability name="http://tizen.org/feature/platform.core.cpu.arch.armv7" support="false" type="boolean"/>\r
+    <capability name="http://tizen.org/feature/platform.core.cpu.arch.x86" support="true" type="boolean"/>\r
+    <capability name="http://tizen.org/feature/platform.core.fpu.arch" support="sse3" type="String">\r
+    </capability>\r
+    <capability name="http://tizen.org/feature/platform.core.fpu.arch.sse2" support="false" type="boolean"/>\r
+    <capability name="http://tizen.org/feature/platform.core.fpu.arch.sse3" support="true" type="boolean"/>\r
+    <capability name="http://tizen.org/feature/platform.core.fpu.arch.ssse3" support="false" type="boolean"/>\r
+    <capability name="http://tizen.org/feature/platform.core.fpu.arch.vfpv2" support="false" type="boolean"/>\r
+    <capability name="http://tizen.org/feature/platform.core.fpu.arch.vfpv3" support="false" type="boolean"/>\r
+    <capability name="http://tizen.org/feature/platform.native.api.version" support="2.3" type="String">\r
+    </capability>\r
+    <capability name="http://tizen.org/feature/platform.native.osp_compatible" support="false" type="boolean"/>\r
+    <capability name="http://tizen.org/feature/platform.version" support="2.3.0" type="String">\r
+    </capability>\r
+    <capability name="http://tizen.org/feature/platform.web.api.version" support="2.3" type="String">\r
+    </capability>\r
+    <capability name="http://tizen.org/feature/profile" support="MOBILE" type="String">\r
+    </capability>\r
+    <capability name="http://tizen.org/feature/screen" support="true" type="boolean"/>\r
+    <capability name="http://tizen.org/feature/screen.auto_rotation" support="true" type="boolean"/>\r
+    <capability name="http://tizen.org/feature/screen.bpp" support="32" type="Integer">\r
+    </capability>\r
+    <capability name="http://tizen.org/feature/screen.coordinate_system.size.large" support="false" type="boolean"/>\r
+    <capability name="http://tizen.org/feature/screen.coordinate_system.size.normal" support="true" type="boolean"/>\r
+    <capability name="http://tizen.org/feature/screen.dpi" support="207" type="Integer">\r
+    </capability>\r
+    <capability name="http://tizen.org/feature/screen.height" support="800" type="Integer">\r
+    </capability>\r
+    <capability name="http://tizen.org/feature/screen.output.hdmi" support="false" type="boolean"/>\r
+    <capability name="http://tizen.org/feature/screen.output.rca" support="false" type="boolean"/>\r
+    <capability name="http://tizen.org/feature/screen.size.normal" support="true" type="boolean"/>\r
+    <capability name="http://tizen.org/feature/screen.size.normal.1080.1920" support="false" type="boolean"/>\r
+    <capability name="http://tizen.org/feature/screen.size.normal.240.400" support="false" type="boolean"/>\r
+    <capability name="http://tizen.org/feature/screen.size.normal.320.320" support="false" type="boolean"/>\r
+    <capability name="http://tizen.org/feature/screen.size.normal.320.480" support="false" type="boolean"/>\r
+    <capability name="http://tizen.org/feature/screen.size.normal.480.800" support="true" type="boolean"/>\r
+    <capability name="http://tizen.org/feature/screen.size.normal.540.960" support="false" type="boolean"/>\r
+    <capability name="http://tizen.org/feature/screen.size.normal.600.1024" support="false" type="boolean"/>\r
+    <capability name="http://tizen.org/feature/screen.size.normal.720.1280" support="false" type="boolean"/>\r
+    <capability name="http://tizen.org/feature/screen.width" support="480" type="Integer">\r
+    </capability>\r
+    <capability name="http://tizen.org/feature/sensor.accelerometer" support="true" type="boolean"/>\r
+    <capability name="http://tizen.org/feature/sensor.accelerometer.wakeup" support="false" type="boolean"/>\r
+    <capability name="http://tizen.org/feature/sensor.barometer" support="true" type="boolean"/>\r
+    <capability name="http://tizen.org/feature/sensor.barometer.wakeup" support="false" type="boolean"/>\r
+    <capability name="http://tizen.org/feature/sensor.gyroscope" support="true" type="boolean"/>\r
+    <capability name="http://tizen.org/feature/sensor.gyroscope.wakeup" support="false" type="boolean"/>\r
+    <capability name="http://tizen.org/feature/sensor.heart_rate_monitor" support="false" type="boolean"/>\r
+    <capability name="http://tizen.org/feature/sensor.magnetometer" support="true" type="boolean"/>\r
+    <capability name="http://tizen.org/feature/sensor.magnetometer.wakeup" support="false" type="boolean"/>\r
+    <capability name="http://tizen.org/feature/sensor.pedometer" support="false" type="boolean"/>\r
+    <capability name="http://tizen.org/feature/sensor.photometer" support="true" type="boolean"/>\r
+    <capability name="http://tizen.org/feature/sensor.photometer.wakeup" support="false" type="boolean"/>\r
+    <capability name="http://tizen.org/feature/sensor.proximity" support="true" type="boolean"/>\r
+    <capability name="http://tizen.org/feature/sensor.proximity.wakeup" support="false" type="boolean"/>\r
+    <capability name="http://tizen.org/feature/sensor.tiltmeter" support="true" type="boolean"/>\r
+    <capability name="http://tizen.org/feature/sensor.tiltmeter.wakeup" support="false" type="boolean"/>\r
+    <capability name="http://tizen.org/feature/sensor.ultraviolet" support="false" type="boolean"/>\r
+    <capability name="http://tizen.org/feature/sensor.wrist_up" support="false" type="boolean"/>\r
+    <capability name="http://tizen.org/feature/shell.appwidget" support="false" type="boolean"/>\r
+    <capability name="http://tizen.org/feature/sip.voip" support="false" type="boolean"/>\r
+    <capability name="http://tizen.org/feature/speech.recognition" support="false" type="boolean"/>\r
+    <capability name="http://tizen.org/feature/speech.synthesis" support="true" type="boolean"/>\r
+    <capability name="http://tizen.org/feature/systemsetting" support="true" type="boolean"/>\r
+    <capability name="http://tizen.org/feature/systemsetting.home_screen" support="true" type="boolean"/>\r
+    <capability name="http://tizen.org/feature/systemsetting.incoming_call" support="true" type="boolean"/>\r
+    <capability name="http://tizen.org/feature/systemsetting.lock_screen" support="true" type="boolean"/>\r
+    <capability name="http://tizen.org/feature/systemsetting.notification_email" support="true" type="boolean"/>\r
+    <capability name="http://tizen.org/feature/usb.accessory" support="false" type="boolean"/>\r
+    <capability name="http://tizen.org/feature/usb.host" support="false" type="boolean"/>\r
+    <capability name="http://tizen.org/feature/vision.face_recognition" support="false" type="boolean"/>\r
+    <capability name="http://tizen.org/feature/vision.image_recognition" support="false" type="boolean"/>\r
+    <capability name="http://tizen.org/feature/vision.qrcode_generation" support="false" type="boolean"/>\r
+    <capability name="http://tizen.org/feature/vision.qrcode_recognition" support="false" type="boolean"/>\r
+    <capability name="http://tizen.org/feature/websetting" support="true" type="boolean"/>\r
+    <capability name="http://tizen.org/system/platform.name" support="Tizen" type="String">\r
+    </capability>\r
+    <capability name="http://tizen.org/feature/archive" support="true" type="boolean"/>\r
+    <capability name="http://tizen.org/feature/badge" support="true" type="boolean"/>\r
+    <capability name="http://tizen.org/feature/exif" support="true" type="boolean"/>\r
+    <capability name="http://tizen.org/feature/led" support="false" type="boolean"/>\r
+    <capability name="http://tizen.org/feature/multimedia.transcoder" support="false" type="boolean"/>\r
+    <capability name="http://tizen.org/capability/network.bluetooth.always_on" support="false" type="boolean"/>\r
+    <capability name="http://tizen.org/feature/network.bluetooth.audio.call" support="false" type="boolean"/>\r
+    <capability name="http://tizen.org/feature/network.bluetooth.audio.media" support="false" type="boolean"/>\r
+    <capability name="http://tizen.org/feature/network.bluetooth.hid" support="false" type="boolean"/>\r
+    <capability name="http://tizen.org/feature/network.bluetooth.le" support="false" type="boolean"/>\r
+    <capability name="http://tizen.org/feature/network.bluetooth.opp" support="false" type="boolean"/>\r
+    <capability name="http://tizen.org/feature/platform.core.cpu.frequency" support="0" type="Integer">\r
+    </capability>\r
+    <capability name="http://tizen.org/feature/platform.version.name" support="" type="String">\r
+    </capability>\r
+    <capability name="http://tizen.org/feature/screen.size.all" support="true" type="boolean"/>\r
+    <capability name="http://tizen.org/feature/screen.size.large" support="false" type="boolean"/>\r
+    <capability name="http://tizen.org/feature/screen.size.normal.360.480" support="false" type="boolean"/>\r
+    <capability name="http://tizen.org/feature/sensor.activity_recognition" support="false" type="boolean"/>\r
+    <capability name="http://tizen.org/feature/sensor.gesture_recognition" support="false" type="boolean"/>\r
+    <capability name="http://tizen.org/feature/sensor.gravity" support="true" type="boolean"/>\r
+    <capability name="http://tizen.org/feature/sensor.humidity" support="false" type="boolean"/>\r
+    <capability name="http://tizen.org/feature/sensor.linear_acceleration" support="true" type="boolean"/>\r
+    <capability name="http://tizen.org/feature/sensor.rotation_vector" support="true" type="boolean"/>\r
+    <capability name="http://tizen.org/feature/sensor.temperature" support="false" type="boolean"/>\r
+    <capability name="http://tizen.org/system/build.date" support="2015.02.23" type="String">\r
+    </capability>\r
+    <capability name="http://tizen.org/system/build.string" support="Tizen-2.3.0_Mobile-Emulator_20150223.1659" type="String">\r
+    </capability>\r
+    <capability name="http://tizen.org/system/build.time" support="16:59:07" type="String">\r
+    </capability>\r
+    <capability name="http://tizen.org/system/manufacturer" support="Tizen" type="String">\r
+    </capability>\r
+    <capability name="http://tizen.org/system/tizenid" support="3PXV0WmJ+1caWiHvW7/s1APzFAA=" type="String">\r
+    </capability>\r
+    <capability name="http://tizen.org/system/model_name" support="Emulator" type="String">\r
+    </capability>\r
+    <capability name="http://tizen.org/system/platform.communication_processor" support="none" type="String">\r
+    </capability>\r
+    <capability name="http://tizen.org/system/platform.processor" support="Emulator" type="String">\r
+    </capability>\r
+    <capability name="http://tizen.org/feature/web.service" support="false" type="boolean"/>\r
+    <capability name="http://tizen.org/feature/humanactivitymonitor" support="true" type="boolean"/>\r
+</capabilities>
\ No newline at end of file
diff --git a/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/resource/getCap.wgt b/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/resource/getCap.wgt
new file mode 100755 (executable)
index 0000000..1592ff6
Binary files /dev/null and b/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/resource/getCap.wgt differ
diff --git a/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/resource/helper-applications/scm_testfile.tpk b/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/resource/helper-applications/scm_testfile.tpk
new file mode 100755 (executable)
index 0000000..ff0d906
Binary files /dev/null and b/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/resource/helper-applications/scm_testfile.tpk differ
diff --git a/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/resource/org.tizen.datacontrolprovider-1.0.0-aarch64.tpk b/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/resource/org.tizen.datacontrolprovider-1.0.0-aarch64.tpk
new file mode 100755 (executable)
index 0000000..0f131e1
Binary files /dev/null and b/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/resource/org.tizen.datacontrolprovider-1.0.0-aarch64.tpk differ
diff --git a/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/resource/org.tizen.datacontrolprovider-1.0.0-arm.tpk b/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/resource/org.tizen.datacontrolprovider-1.0.0-arm.tpk
new file mode 100755 (executable)
index 0000000..ff1c68a
Binary files /dev/null and b/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/resource/org.tizen.datacontrolprovider-1.0.0-arm.tpk differ
diff --git a/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/resource/org.tizen.datacontrolprovider-1.0.0-i386.tpk b/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/resource/org.tizen.datacontrolprovider-1.0.0-i386.tpk
new file mode 100755 (executable)
index 0000000..3d74a24
Binary files /dev/null and b/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/resource/org.tizen.datacontrolprovider-1.0.0-i386.tpk differ
diff --git a/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/resource/org.tizen.datacontrolprovider-1.0.0-x86_64.tpk b/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/resource/org.tizen.datacontrolprovider-1.0.0-x86_64.tpk
new file mode 100755 (executable)
index 0000000..61f1698
Binary files /dev/null and b/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/resource/org.tizen.datacontrolprovider-1.0.0-x86_64.tpk differ
diff --git a/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/resource/org.tizen.messageportapp-1.0.0-aarch64.tpk b/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/resource/org.tizen.messageportapp-1.0.0-aarch64.tpk
new file mode 100755 (executable)
index 0000000..112c56f
Binary files /dev/null and b/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/resource/org.tizen.messageportapp-1.0.0-aarch64.tpk differ
diff --git a/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/resource/org.tizen.messageportapp-1.0.0-arm.tpk b/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/resource/org.tizen.messageportapp-1.0.0-arm.tpk
new file mode 100755 (executable)
index 0000000..213fa1b
Binary files /dev/null and b/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/resource/org.tizen.messageportapp-1.0.0-arm.tpk differ
diff --git a/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/resource/org.tizen.messageportapp-1.0.0-i386.tpk b/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/resource/org.tizen.messageportapp-1.0.0-i386.tpk
new file mode 100755 (executable)
index 0000000..00fb916
Binary files /dev/null and b/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/resource/org.tizen.messageportapp-1.0.0-i386.tpk differ
diff --git a/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/resource/precondition.txt b/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/resource/precondition.txt
new file mode 100755 (executable)
index 0000000..efccadb
--- /dev/null
@@ -0,0 +1,22 @@
+Reference : http://168.219.209.56/confluence/display/Tizen3/Running+Web+TCT+for+Tizen+3.0\r
+\r
+---------------------------------------------------------------------------------------\r
+\r
+1. Please push the below attached 2 files in the below location(target) before the test start.\r
+\r
+file name : \r
+\r
+capability.xml\r
+buildinfo.xml\r
+\r
+\r
+location :\r
+\r
+/home/owner/content/Documents/tct/\r
+\r
+\r
+ex) sdb push capability.xml /home/owner/content/Documents/tct/\r
+ex) sdb push buildinfo.xml /home/owner/content/Documents/tct/\r
+\r
+\r
+---------------------------------------------------------------------------------------\r
diff --git a/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/resource/tct-testconfig-3.0.zip b/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/resource/tct-testconfig-3.0.zip
new file mode 100755 (executable)
index 0000000..25fd912
Binary files /dev/null and b/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/resource/tct-testconfig-3.0.zip differ
diff --git a/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/resource/tct-testconfig/TC_Config.txt b/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/resource/tct-testconfig/TC_Config.txt
new file mode 100755 (executable)
index 0000000..341f7fd
--- /dev/null
@@ -0,0 +1,14 @@
+URLDOWNLOAD_URL=\r
+URLDOWNLOAD_DOWNLOADURL=\r
+URLDOWNLOAD_URLWITHETAG=\r
+WIFI_WPSACCESSPOINTNAME=\r
+WIFI_EAPACCESSPOINTNAME=\r
+WIFI_ACCESSPOINTPIN=\r
+MESSAGES_MOBILE_NUMBER=\r
+EMAIL_RECIPIENT=\r
+PLAYER_DOWNLOAD_URL=\r
+PLAYER_DOWNLOAD_PROGRESS_URL=\r
+PUSH_APPID=\r
+PUSH_APPSECRET=\r
+HERE_MAPS_PROVIDER_KEY=\r
+MAPZEN_MAPS_PROVIDER_KEY=\r
diff --git a/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/resource/tct-testconfig/inst.py b/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/resource/tct-testconfig/inst.py
new file mode 100755 (executable)
index 0000000..b1bb50b
--- /dev/null
@@ -0,0 +1,197 @@
+#!/usr/bin/env python
+
+import os
+import shutil
+import glob
+import time
+import sys
+import subprocess
+import string
+import ConfigParser
+from optparse import OptionParser, make_option
+
+TCT_CONFIG_FILE = "/opt/tools/TCT_CONFIG"
+tct_parser = ConfigParser.ConfigParser()
+tct_parser.read(TCT_CONFIG_FILE)
+
+DEVICE_SUITE_TARGET_30 = tct_parser.get('DEVICE', 'DEVICE_SUITE_TARGET_30')
+
+
+SCRIPT_DIR = os.path.dirname(os.path.abspath(__file__))
+PKG_NAME = os.path.basename(SCRIPT_DIR)
+PARAMETERS = None
+#XW_ENV = "export DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/5000/dbus/user_bus_socket"
+SRC_DIR = DEVICE_SUITE_TARGET_30
+PKG_SRC_DIR = SRC_DIR + "/tct/opt/%s" % PKG_NAME
+
+
+def doCMD(cmd):
+    # Do not need handle timeout in this short script, let tool do it
+    print "-->> \"%s\"" % cmd
+    output = []
+    cmd_return_code = 1
+    cmd_proc = subprocess.Popen(
+        cmd, stdout=subprocess.PIPE, stderr=subprocess.STDOUT, shell=True)
+
+    while True:
+        output_line = cmd_proc.stdout.readline().strip("\r\n")
+        cmd_return_code = cmd_proc.poll()
+        if output_line == '' and cmd_return_code != None:
+            break
+        sys.stdout.write("%s\n" % output_line)
+        sys.stdout.flush()
+        output.append(output_line)
+
+    return (cmd_return_code, output)
+
+
+def updateCMD(cmd=None):
+    if "pkgcmd" in cmd:
+        cmd = "su - %s -c '%s;%s'" % (PARAMETERS.user, XW_ENV, cmd)
+    return cmd
+def getUSERID():
+    if PARAMETERS.mode == "SDB":
+        cmd = "sdb -s %s shell id -u %s" % (
+            PARAMETERS.device, PARAMETERS.user)
+    else:
+        cmd = "ssh %s \"id -u %s\"" % (
+            PARAMETERS.device, PARAMETERS.user )
+    return doCMD(cmd)
+
+
+
+
+def getPKGID(pkg_name=None):
+    if PARAMETERS.mode == "SDB":
+        cmd = "sdb -s %s shell %s" % (
+            PARAMETERS.device, updateCMD('pkgcmd -l'))
+    else:
+        cmd = "ssh %s \"%s\"" % (
+            PARAMETERS.device, updateCMD('pkgcmd -l'))
+
+    (return_code, output) = doCMD(cmd)
+    if return_code != 0:
+        return None
+
+    test_pkg_id = None
+    for line in output:
+        if line.find("[" + pkg_name + "]") != -1:
+            pkgidIndex = line.split().index("pkgid")
+            test_pkg_id = line.split()[pkgidIndex+1].strip("[]")
+            break
+    return test_pkg_id
+
+
+def doRemoteCMD(cmd=None):
+    if PARAMETERS.mode == "SDB":
+        cmd = "sdb -s %s shell %s" % (PARAMETERS.device, updateCMD(cmd))
+    else:
+        cmd = "ssh %s \"%s\"" % (PARAMETERS.device, updateCMD(cmd))
+
+    return doCMD(cmd)
+
+
+def doRemoteCopy(src=None, dest=None):
+    if PARAMETERS.mode == "SDB":
+        cmd_prefix = "sdb -s %s push" % PARAMETERS.device
+        cmd = "%s %s %s" % (cmd_prefix, src, dest)
+    else:
+        cmd = "scp -r %s %s:/%s" % (src, PARAMETERS.device, dest)
+
+    (return_code, output) = doCMD(cmd)
+    doRemoteCMD("sync")
+
+    if return_code != 0:
+        return True
+    else:
+        return False
+
+
+def uninstPKGs():
+    action_status = True
+    (return_code, output) = doRemoteCMD("rm " + \
+            SRC_DIR + "/tct/preconfigure.json")
+    (return_code, output) = doRemoteCMD("rm " + \
+            SRC_DIR + "/tct/portconfigure.json")
+
+    for file in ['preconfigure.json', 'tests.xml', 'tct-testconfig.ini', 'portconfigure.json', 'TC_Config.txt']:
+        (return_code, output) = doRemoteCMD("rm %s/%s" % (PKG_SRC_DIR, file))
+        if return_code != 0:
+            action_status = False
+            break
+
+    return action_status
+
+def instPKGs():
+    action_status = True
+    (return_code, output) = doRemoteCMD("mkdir -p %s" % PKG_SRC_DIR)
+
+    for file in ['preconfigure.json', 'tests.xml', 'tct-testconfig.ini', 'portconfigure.json', 'TC_Config.txt']:
+        if not doRemoteCopy(SCRIPT_DIR + '/' + file, "%s/%s" % (PKG_SRC_DIR, file)):
+            action_status = False
+
+    return action_status
+
+def main():
+    try:
+        usage = "usage: inst.py -i"
+        opts_parser = OptionParser(usage=usage)
+        opts_parser.add_option(
+            "-m", dest="mode", action="store", help="Specify mode")
+        opts_parser.add_option(
+            "-s", dest="device", action="store", help="Specify device")
+        opts_parser.add_option(
+            "-i", dest="binstpkg", action="store_true", help="Install package")
+        opts_parser.add_option(
+            "-u", dest="buninstpkg", action="store_true", help="Uninstall package")
+        opts_parser.add_option(
+            "-a", dest="user", action="store", help="User name")
+        global PARAMETERS
+        (PARAMETERS, args) = opts_parser.parse_args()
+    except Exception, e:
+        print "Got wrong option: %s, exit ..." % e
+        sys.exit(1)
+
+    if not PARAMETERS.user:
+        PARAMETERS.user = "owner"
+    if not PARAMETERS.mode:
+        PARAMETERS.mode = "SDB"
+
+    if PARAMETERS.mode == "SDB":
+        if not PARAMETERS.device:
+            (return_code, output) = doCMD("sdb devices")
+            for line in output:
+                if str.find(line, "\tdevice") != -1:
+                    PARAMETERS.device = line.split("\t")[0]
+                    break
+    else:
+        PARAMETERS.mode = "SSH"
+
+    if not PARAMETERS.device:
+        print "No device provided"
+        sys.exit(1)
+
+    user_info = getUSERID()
+    re_code = user_info[0]
+    if re_code == 0 :
+        global XW_ENV
+        userid = user_info[1][0]
+        XW_ENV = "export DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/%s/dbus/user_bus_socket"%str(userid)
+    else:
+        print "[Error] cmd commands error : %s"%str(user_info[1])
+        sys.exit(1)
+    if PARAMETERS.binstpkg and PARAMETERS.buninstpkg:
+        print "-i and -u are conflict"
+        sys.exit(1)
+
+    if PARAMETERS.buninstpkg:
+        if not uninstPKGs():
+            sys.exit(1)
+    else:
+        if not instPKGs():
+            sys.exit(1)
+
+if __name__ == "__main__":
+    main()
+    sys.exit(0)
+
diff --git a/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/resource/tct-testconfig/portconfigure.json b/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/resource/tct-testconfig/portconfigure.json
new file mode 100755 (executable)
index 0000000..f4838be
--- /dev/null
@@ -0,0 +1 @@
+[{"STUB_PORT":"8000"}]
diff --git a/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/resource/tct-testconfig/preconfigure.json b/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/resource/tct-testconfig/preconfigure.json
new file mode 100755 (executable)
index 0000000..8bcbe6a
--- /dev/null
@@ -0,0 +1,39 @@
+[{
+    "MESSAGES_MOBILE_NUMBER":"01012345678",
+    "BT_REMOTE_DEVICE_ADDRESS":"127.0.0.1",
+    "BT_REMOTE_DEVICE_NAME":"localhost",
+    "BT_REMOTE_HEALTH_DEVICE_ADDRESS":"127.0.0.1",
+    "BT_REMOTE_HEALTH_DEVICE_NAME":"localhost",
+    "BT_REMOTE_BLE_DEVICE_ADDRESS":"AA:AA:AA:AA:AA:AA",
+    "BT_REMOTE_HID_DEVICE_ADDRESS":"AA:AA:AA:AA:AA:AA",
+    "BT_REMOTE_OPP_DEVICE_ADDRESS":"AA:AA:AA:AA:AA:AA",
+    "BT_REMOTE_DEVICE_ADDRESS":"AA:AA:AA:AA:AA:AA",
+    "EMAIL_RECIPIENT_1":"123@intel.com",
+    "EMAIL_RECIPIENT_2":"456@intel.com",
+    "MMS_RECIPIENT_1":"123456789",
+    "MMS_RECIPIENT_2":"987654321",
+    "SMS_RECIPIENT_1":"123456789",
+    "SMS_RECIPIENT_2":"987654321",
+    "CHANNEL_MAJOR":11,
+    "CHANNEL_MINOR":1,
+    "CHANNEL_MAJOR_2":7,
+    "CHANNEL_MINOR_2":1,
+    "DATE_FORMAT":"D, d M y",
+    "TIME_FORMAT":"h:m:s ap",
+    "PUBLIC_AP":"Set available public AP name",
+    "PRIVATE_AP_1_2":"Set available private AP name 1",
+    "PRIVATE_AP_2_2":"Set available private AP name 2",
+    "HIDDEN_AP":"Set available hidden AP name",
+    "PASSWORD_FOR_ALL_PRIVATE_AP":"Set common password of all private APs",
+    "PUBLIC_AP":"Set available public AP name",
+    "PRIVATE_AP":"Set available private AP name",
+    "PRIVATE_AP_1_2":"Set available private AP name 1",
+    "PRIVATE_AP_2_2":"Set available private AP name 2",
+    "HIDDEN_AP":"Set available hidden AP name",
+    "PASSWORD_FOR_ALL_PRIVATE_AP":"Set common password of all private APs",
+    "WPS_PBC_AP":"Set name of available AP with WPS PBC function",
+    "WPS_PIN_AP":"Set name of available AP with WPS PIN function",
+    "PIN_NUMBER_OF_WPS_PIN_AP":"Set pin number of WPS_PIN_AP. The pin number should be generated with the checksum defined in WSC spec (Wi-Fi Simple Configuration Technical Specification). If you are not familiar with it, please use an example number, 47363533.",
+    "STREAMING_URI":"Set the streaming uri such as http://www.samsung.com/xx/xx/aa.mp4",
+    "ADAPTIVE_STREAMING_URL":"Set the adaptive streaming url"
+}]
diff --git a/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/resource/tct-testconfig/tct-testconfig.ini b/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/resource/tct-testconfig/tct-testconfig.ini
new file mode 100755 (executable)
index 0000000..3a23271
--- /dev/null
@@ -0,0 +1,56 @@
+# Bluetooth test settings
+#[tct-bluetooth-tizen-tests]
+# The address of the device on which tct-bt-helper will be run
+#BT_REMOTE_DEVICE_ADDRESS=your BT remote device address
+# The name of the device on which tct-bt-helper will be run
+#BT_REMOTE_DEVICE_NAME=your BT remote device name
+#BT_REMOTE_HEALTH_DEVICE_ADDRESS=your BT remote health device address
+# The name of the device on which tct-bt-helper will be run
+#BT_REMOTE_HEALTH_DEVICE_NAME=your BT remote health device name
+# The name of the device on which tct-bt-helper will be run
+#BT_REMOTE_BLE_DEVICE_ADDRESS=your BT remote BLE device address
+
+# Bluetooth precondition settings
+[Tizen.Bluetooth.Tests]
+BT_REMOTE_DEVICE_ADDRESS=Set remote BT device address. (AA:AA:AA:AA:AA:AA)
+
+[Tizen.Bluetooth.Manual.Tests]
+BT_REMOTE_BLE_DEVICE_ADDRESS=Set remote BLE device address. (AA:AA:AA:AA:AA:AA)
+BT_REMOTE_HID_DEVICE_ADDRESS=Set remote HID device address. (AA:AA:AA:AA:AA:AA)
+BT_REMOTE_OPP_DEVICE_ADDRESS=Set remote OPP device address. (AA:AA:AA:AA:AA:AA)
+BT_REMOTE_DEVICE_ADDRESS=Set remote device address. (AA:AA:AA:AA:AA:AA)
+
+# WiFi test settings
+[Tizen.WiFi.Tests]
+PRIVATE_AP_1_2=Set available private AP name 1
+PRIVATE_AP_2_2=Set available private AP name 2
+HIDDEN_AP=Set available hidden AP
+PASSWORD_FOR_ALL_PRIVATE_AP=Set common password of all private APs
+
+# WiFi manual settings
+[Tizen.WiFi.Manual.Tests]
+WPS_PBC_AP=Set name of available AP with WPS PBC function
+WPS_PIN_AP=Set name of available AP with WPS PIN function
+PIN_NUMBER_OF_WPS_PIN_AP=Set pin number of WPS_PIN_AP
+
+# Connection test settings
+[Tizen.Connection.Tests]
+PUBLIC_AP=Set available public AP name
+PRIVATE_AP=Set available private AP name
+PASSWORD_FOR_ALL_PRIVATE_AP=Set common password of all private APs
+
+# Map test key settings
+[Tizen.Maps.Tests]
+HERE_MAPS_PROVIDER_KEY=Set the HERE_MAPS_PROVIDER_KEY
+
+# Map.Manual test key settings
+[Tizen.Maps.Manual.Tests]
+HERE_MAPS_PROVIDER_KEY=Set the HERE_MAPS_PROVIDER_KEY
+
+[Tizen.Messages.Tests]
+MESSAGES_MOBILE_NUMBER=You should write only number. Do NOT write - or ()
+
+# MediaPlayer test key settings
+[Tizen.MediaPlayer.Tests]
+STREAMING_URI = set the uri in here. ex>http://www.samsung.com/xx/xx/aa.mp4
+ADAPTIVE_STREAMING_URL = set the url in here
diff --git a/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/resource/tct-testconfig/tests.full.xml b/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/resource/tct-testconfig/tests.full.xml
new file mode 100755 (executable)
index 0000000..237bff0
--- /dev/null
@@ -0,0 +1,449 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?xml-stylesheet type="text/xsl" href="./testcase.xsl"?>
+<test_definition>
+  <suite name="tct-testconfig">
+    <set name="tct-bluetooth-tizen-tests">
+      <testcase execution_type="manual" id="BluetoothConfiguration" purpose="tct-bluetooth-tizen-tests configuration" status="approved" type="compliance">
+        <description>
+          <steps>
+            <step order="1">
+              <step_desc>The 'tct-bt-helper' web application MUST be installed on the remote device whose address is REMOTE_DEVICE_ADDRESS.
+The tct-bt-helper is included in the tct-bluetooth-tizen-tests package. Install the tct-bluetooth-tizen-tests package on both your test device and the remote Bluetooth device.</step_desc>
+            </step>
+            <step order="2">
+              <step_desc>Turn on the Bluetooth of your test device and the remote device. Make the two devices discoverable to each other.</step_desc>
+            </step>
+            <step order="3">
+              <step_desc>Before manual testing, launch the 'tct-bt-helper' web application installed on the remote device, click 'Register service' on the 'tct-bt-helper', and then execute the TCs tests manually.</step_desc>
+            </step>
+          </steps>
+          <test_script_entry test_script_expected_result="0" timeout="90"/>
+        </description>
+      </testcase>
+    </set>
+    <set name="tct-callhistory-tizen-tests">
+      <testcase purpose="tct-callhistory-tizen-tests Configuration" type="compliance" status="approved" component="WebAPI/Tizen/Configuration" execution_type="manual" priority="P0" id="CallHistoryConfiguration">
+        <description>
+          <pre_condition/>
+          <post_condition/>
+          <steps>
+            <step order="1">
+              <step_desc>Make sure the telephony works well.</step_desc>
+              <expected>TBD</expected>
+            </step>
+            <step order="2">
+              <step_desc>Insert a SIM card and enable the cellular device service on your test device. During manual testing, you can see the preconditions for each test.</step_desc>
+              <expected>TBD</expected>
+            </step>
+          </steps>
+          <test_script_entry timeout="90" test_script_expected_result="0"/>
+        </description>
+        <specs>
+          <spec>
+            <spec_assertion element_type="TBD" element_name="TBD" interface="TBD" specification="TBD" section="TBD" category="TBD"/>
+            <spec_url>TBD</spec_url>
+            <spec_statement>TBD</spec_statement>
+          </spec>
+        </specs>
+      </testcase>
+    </set>
+    <set name="tct-datacontrol-tizen-tests">
+      <testcase purpose="tct-datacontrol-tizen-tests Configuration" type="compliance" status="approved" component="WebAPI/Tizen/Configuration" execution_type="manual" priority="P0" id="DataControlConfiguration">
+        <description>
+          <pre_condition/>
+          <post_condition/>
+          <steps>
+            <step order="1">
+              <step_desc> Create the sample native application using Tizen SDK. You can find this native application in the installation directory.
+              In Tizen SDK, select 'File' -&gt; 'Import' -&gt; 'Tizen' -&gt; 'Tizen Native Project' -&gt; 'Select archive file' -&gt; 'select datacontrolprovider.zip in the /opt/tct/tizen_web_2.4/resource/'.
+              </step_desc>
+              <expected>TBD</expected>
+            </step>
+            <step order="2">
+              <step_desc> Build and sign this native application with the same certification which you sign the 'tct-datacontrol-tizen-tests' package with.
+              </step_desc>
+              <expected>TBD</expected>
+            </step>
+            <step order="3">
+              <step_desc> Launch this native application(No UI).</step_desc>
+              <expected>TBD</expected>
+            </step>
+          </steps>
+          <test_script_entry timeout="90" test_script_expected_result="0"/>
+        </description>
+        <specs>
+          <spec>
+            <spec_assertion element_type="TBD" element_name="TBD" interface="TBD" specification="TBD" section="TBD" category="TBD"/>
+            <spec_url>TBD</spec_url>
+            <spec_statement>TBD</spec_statement>
+          </spec>
+        </specs>
+      </testcase>
+    </set>
+    <set name="tct-download-tizen-tests">
+      <testcase purpose="tct-download-tizen-tests Configuration" type="compliance" status="approved" component="WebAPI/Tizen/Configuration" execution_type="manual" priority="P0" id="DownloadConfiguration">
+        <description>
+          <pre_condition/>
+          <post_condition/>
+          <steps>
+            <step order="1">
+              <step_desc>A network connection capable of accessing the Internet MUST be established. If your device supports Wi-Fi, turn on Wi-Fi. If your device supports telephony, insert a SIM card and enable the cellular data service on your test device. During manual testing, you can see the preconditions for each test.</step_desc>
+              <expected>TBD</expected>
+            </step>
+          </steps>
+          <test_script_entry timeout="90" test_script_expected_result="0"/>
+        </description>
+        <specs>
+          <spec>
+            <spec_assertion element_type="TBD" element_name="TBD" interface="TBD" specification="TBD" section="TBD" category="TBD"/>
+            <spec_url>TBD</spec_url>
+            <spec_statement>TBD</spec_statement>
+          </spec>
+        </specs>
+      </testcase>
+    </set>
+    <set name="tct-camera-nonw3c-tests">
+      <testcase purpose="tct-camera-nonw3c-tests Configuration" type="compliance" status="approved" component="WebAPI/Tizen/Configuration" execution_type="manual" priority="P0" id="CameraConfiguration">
+        <description>
+          <pre_condition/>
+          <post_condition/>
+          <steps>
+            <step order="1">
+              <step_desc>Make sure device camera is working well.</step_desc>
+              <expected>TBD</expected>
+            </step>
+          </steps>
+          <test_script_entry timeout="90" test_script_expected_result="0"/>
+        </description>
+        <specs>
+          <spec>
+            <spec_assertion element_type="TBD" element_name="TBD" interface="TBD" specification="TBD" section="TBD" category="TBD"/>
+            <spec_url>TBD</spec_url>
+            <spec_statement>TBD</spec_statement>
+          </spec>
+        </specs>
+      </testcase>
+    </set>
+    <set name="tct-fmradio-tizen-tests">
+      <testcase purpose="tct-fmradio-tizen-tests Configuration" type="compliance" status="approved" component="WebAPI/Tizen/Configuration" execution_type="manual" priority="P0" id="FMRadioConfiguration">
+        <description>
+          <pre_condition/>
+          <post_condition/>
+          <steps>
+            <step order="1">
+              <step_desc>The antenna(earphones) is nessasary to test this module. please put antenna(earphones) jack into device.</step_desc>
+              <expected>TBD</expected>
+            </step>
+          </steps>
+          <test_script_entry timeout="90" test_script_expected_result="0"/>
+        </description>
+        <specs>
+          <spec>
+            <spec_assertion element_type="TBD" element_name="TBD" interface="TBD" specification="TBD" section="TBD" category="TBD"/>
+            <spec_url>TBD</spec_url>
+            <spec_statement>TBD</spec_statement>
+          </spec>
+        </specs>
+      </testcase>
+    </set>
+    <set name="tct-messaging-email-tizen-tests">
+      <testcase purpose="tct-messaging-email-tizen-tests Configuration" type="compliance" status="approved" component="WebAPI/Tizen/Configuration" execution_type="manual" priority="P0" id="MessagingConfiguration">
+        <description>
+          <pre_condition/>
+          <post_condition/>
+          <steps>
+            <step order="1">
+              <step_desc>There MUST be established Network connection for sending and receiving email tests (preferably through WiFi as it has smaller delays on connection)</step_desc>
+              <expected>TBD</expected>
+            </step>
+            <step order="2">
+             <step_desc>Add an account through Settings application.
+   (Settings -> Personal / Accounts)
+       2.1 Click "Add"
+       2.1 Select type of account: Email
+       2.2 Enter e-mail address and password (preferably Gmail account)
+       2.3 Click "Next" - configuration will be verified and stored</step_desc>
+              <expected>TBD</expected>
+            </step>
+            <step order="3">
+              <step_desc>There MUST be several email messages in your mailbox to be used for searching and removing messages tests</step_desc>
+              <expected>TBD</expected>
+            </step>
+            <step order="4">
+              <step_desc>There MUST be exactly one email service configured on the device.</step_desc>
+              <expected>TBD</expected>
+            </step>
+            <step order="5">
+              <step_desc>EMAIL_RECIPIENT_1 is the e-mail address of the account You have set up on the device</step_desc>
+              <expected>TBD</expected>
+            </step>
+            <step order="6">
+              <step_desc>EMAIL_RECIPIENT_2 is any valid e-mail address different from EMAIL_RECIPIENT_1</step_desc>
+              <expected>TBD</expected>
+            </step>
+          </steps>
+          <test_script_entry timeout="90" test_script_expected_result="0"/>
+        </description>
+        <specs>
+          <spec>
+            <spec_assertion element_type="TBD" element_name="TBD" interface="TBD" specification="TBD" section="TBD" category="TBD"/>
+            <spec_url>TBD</spec_url>
+            <spec_statement>TBD</spec_statement>
+          </spec>
+        </specs>
+      </testcase>
+    </set>
+    <set name="tct-messaging-mms-tizen-tests">
+      <testcase purpose="tct-messaging-mms-tizen-tests Configuration" type="compliance" status="approved" component="WebAPI/Tizen/Configuration" execution_type="manual" priority="P0" id="MessagingConfiguration">
+        <description>
+          <pre_condition/>
+          <post_condition/>
+          <steps>
+            <step order="1">
+              <step_desc>A SIM card MUST be inserted for sending MMS messages.</step_desc>
+              <expected>TBD</expected>
+            </step>
+            <step order="2">
+              <step_desc>MMS_RECIPIENT_1 is any valid phone number (without country code prefix). You should not use a number of the SIM card inserted into test device.</step_desc>
+              <expected>TBD</expected>
+            </step>
+            <step order="3">
+              <step_desc>MMS_RECIPIENT_2 is any valid phone number, different from MMS_RECIPIENT_1 (without country code prefix)</step_desc>
+              <expected>TBD</expected>
+            </step>
+          </steps>
+          <test_script_entry timeout="90" test_script_expected_result="0"/>
+        </description>
+        <specs>
+          <spec>
+            <spec_assertion element_type="TBD" element_name="TBD" interface="TBD" specification="TBD" section="TBD" category="TBD"/>
+            <spec_url>TBD</spec_url>
+            <spec_statement>TBD</spec_statement>
+          </spec>
+        </specs>
+      </testcase>
+    </set>
+    <set name="tct-messaging-sms-tizen-tests">
+      <testcase purpose="tct-messaging-sms-tizen-tests Configuration" type="compliance" status="approved" component="WebAPI/Tizen/Configuration" execution_type="manual" priority="P0" id="MessagingConfiguration">
+        <description>
+          <pre_condition/>
+          <post_condition/>
+          <steps>
+            <step order="1">
+              <step_desc>A SIM card MUST be inserted for sending SMS messages.</step_desc>
+              <expected>TBD</expected>
+            </step>
+            <step order="2">
+              <step_desc>SMS_RECIPIENT_1 is any valid phone number (without country code prefix). You should not use a number of the SIM card you in test device.</step_desc>
+              <expected>TBD</expected>
+            </step>
+            <step order="3">
+              <step_desc>SMS_RECIPIENT_2 is any valid phone number, different from SMS_RECIPIENT_1 (without country code prefix)</step_desc>
+              <expected>TBD</expected>
+            </step>
+          </steps>
+          <test_script_entry timeout="90" test_script_expected_result="0"/>
+        </description>
+        <specs>
+          <spec>
+            <spec_assertion element_type="TBD" element_name="TBD" interface="TBD" specification="TBD" section="TBD" category="TBD"/>
+            <spec_url>TBD</spec_url>
+            <spec_statement>TBD</spec_statement>
+          </spec>
+        </specs>
+      </testcase>
+    </set>
+    <set name="tct-nfc-tizen-tests">
+      <testcase purpose="tct-nfc-tizen-tests Configuration" type="compliance" status="approved" component="WebAPI/Tizen/Configuration" execution_type="manual" priority="P0" id="NFCConfiguration">
+        <description>
+          <pre_condition/>
+          <post_condition/>
+          <steps>
+            <step order="1">
+              <step_desc>Manual tests requires a NFC tag (which supports NDEF) and a NFC enabled device to connect your test device with.</step_desc>
+              <expected>TBD</expected>
+            </step>
+            <step order="2">
+              <step_desc>Enable NFC on your test device and the NFC device you will connect to.</step_desc>
+              <expected>TBD</expected>
+            </step>
+          </steps>
+          <test_script_entry timeout="90" test_script_expected_result="0"/>
+        </description>
+        <specs>
+          <spec>
+            <spec_assertion element_type="TBD" element_name="TBD" interface="TBD" specification="TBD" section="TBD" category="TBD"/>
+            <spec_url>TBD</spec_url>
+            <spec_statement>TBD</spec_statement>
+          </spec>
+        </specs>
+      </testcase>
+    </set>
+    <set name="tct-time-tizen-tests">
+      <testcase purpose="tct-time-tizen-tests Configuration" type="compliance" status="approved" component="WebAPI/Tizen/Configuration" execution_type="manual" priority="P0" id="TimeConfiguration">
+        <description>
+          <pre_condition/>
+          <post_condition/>
+          <steps>
+            <step order="1">
+              <step_desc>Before executing manual and auto time test, must set current time, language, region, and time must be as follows:</step_desc>
+              <expected>TBD</expected>
+            </step>
+            <step order="2">
+              <step_desc>'Time zone' MUST be set as Seoul.</step_desc>
+              <expected>TBD</expected>
+            </step>
+            <step order="3">
+              <step_desc>Set the current time correctly.</step_desc>
+              <expected>TBD</expected>
+            </step>
+            <step order="4">
+              <step_desc>'Display language' MUST be set as English.</step_desc>
+              <expected>TBD</expected>
+            </step>
+            <step order="5">
+              <step_desc>'Region' MUST be set as English(following time format D, M d y ).</step_desc>
+              <expected>TBD</expected>
+            </step>
+            <step order="6">
+              <step_desc>Time format MUST be set as AM/PM format,</step_desc>
+              <expected>TBD</expected>
+            </step>
+          </steps>
+          <test_script_entry timeout="90" test_script_expected_result="0"/>
+        </description>
+        <specs>
+          <spec>
+            <spec_assertion element_type="TBD" element_name="TBD" interface="TBD" specification="TBD" section="TBD" category="TBD"/>
+            <spec_url>TBD</spec_url>
+            <spec_statement>TBD</spec_statement>
+          </spec>
+        </specs>
+      </testcase>
+    </set>
+    <set name="tct-power-tizen-tests">
+      <testcase purpose="tct-power-tizen-tests Configuration" type="compliance" status="approved" component="WebAPI/Tizen/Configuration" execution_type="manual" priority="P0" id="PowerConfiguration">
+        <description>
+          <pre_condition/>
+          <post_condition/>
+          <steps>
+            <step order="1">
+              <step_desc>Turn off Automatic screen brightness (pull down the notification panel and ensure that Auto is disabled)</step_desc>
+              <expected>TBD</expected>
+            </step>
+          </steps>
+          <steps>
+            <step order="2">
+              <step_desc>Set Backlight time to 15 seconds (Settings -&gt; Display -&gt; Backlight time -&gt; 15 seconds)</step_desc>
+              <expected>TBD</expected>
+            </step>
+          </steps>
+          <test_script_entry timeout="90" test_script_expected_result="0"/>
+        </description>
+        <specs>
+          <spec>
+            <spec_assertion element_type="TBD" element_name="TBD" interface="TBD" specification="TBD" section="TBD" category="TBD"/>
+            <spec_url>TBD</spec_url>
+            <spec_statement>TBD</spec_statement>
+          </spec>
+        </specs>
+      </testcase>
+    </set>
+    <set name="tct-push-tizen-tests">
+      <testcase purpose="tct-push-tizen-tests Configuration" type="compliance" status="approved" component="WebAPI/Tizen/Configuration" execution_type="manual" priority="P0" id="PushConfiguration">
+        <description>
+          <pre_condition/>
+          <post_condition/>
+          <steps>
+            <step order="1">
+              <step_desc>A network connection capable of accessing the Internet MUST be established.</step_desc>
+              <expected>TBD</expected>
+            </step>
+          </steps>
+          <test_script_entry timeout="90" test_script_expected_result="0"/>
+        </description>
+        <specs>
+          <spec>
+            <spec_assertion element_type="TBD" element_name="TBD" interface="TBD" specification="TBD" section="TBD" category="TBD"/>
+            <spec_url>TBD</spec_url>
+            <spec_statement>TBD</spec_statement>
+          </spec>
+        </specs>
+      </testcase>
+    </set>
+    <set name="tct-networkbearerselection-tizen-tests">
+      <testcase purpose="tct-networkbearerselection-tizen-tests Configuration" type="compliance" status="approved" component="WebAPI/Tizen/Configuration" execution_type="manual" priority="P0" id="NetworkbearerselectionConfiguration">
+        <description>
+          <pre_condition/>
+          <post_condition/>
+          <steps>
+            <step order="1">
+              <step_desc>Make sure the telephony works well.</step_desc>
+              <expected>TBD</expected>
+            </step>
+            <step order="2">
+              <step_desc>Insert a SIM card and enable cellular data service on your test device.</step_desc>
+              <expected>TBD</expected>
+            </step>
+          </steps>
+          <test_script_entry timeout="90" test_script_expected_result="0"/>
+        </description>
+        <specs>
+          <spec>
+            <spec_assertion element_type="TBD" element_name="TBD" interface="TBD" specification="TBD" section="TBD" category="TBD"/>
+            <spec_url>TBD</spec_url>
+            <spec_statement>TBD</spec_statement>
+          </spec>
+        </specs>
+      </testcase>
+    </set>
+    <set name="tct-geoallow-w3c-tests">
+      <testcase purpose="tct-geoallow-w3c-tests Configuration" type="compliance" status="approved" component="WebAPI/Tizen/Configuration" execution_type="manual" priority="P0" id="GeoallowConfiguration">
+        <description>
+          <pre_condition/>
+          <post_condition/>
+          <steps>
+            <step order="1">
+              <step_desc>Enable GPS or connect to an available network</step_desc>
+              <expected>TBD</expected>
+            </step>
+          </steps>
+          <test_script_entry timeout="90" test_script_expected_result="0"/>
+        </description>
+        <specs>
+          <spec>
+            <spec_assertion element_type="TBD" element_name="TBD" interface="TBD" specification="TBD" section="TBD" category="TBD"/>
+            <spec_url>TBD</spec_url>
+            <spec_statement>TBD</spec_statement>
+          </spec>
+        </specs>
+      </testcase>
+    </set>
+    <set name="tct-tv-channel-tizen-tests">
+      <testcase purpose="tct-tv-channel-tizen-tests Configuration" type="compliance" status="approved" component="WebAPI/Tizen/Configuration" execution_type="manual" priority="P0" id="TVChannelConfiguration">
+        <description>
+          <pre_condition/>
+          <post_condition/>
+          <steps>
+            <step order="1">
+              <step_desc>Set Major and Minor channel number</step_desc>
+              <expected>TBD</expected>
+            </step>
+            <step order="2">
+              <step_desc>Set Major_2 and Minor_2 channel number</step_desc>
+              <expected>TBD</expected>
+            </step>
+          </steps>
+          <test_script_entry timeout="90" test_script_expected_result="0"/>
+        </description>
+        <specs>
+          <spec>
+            <spec_assertion element_type="TBD" element_name="TBD" interface="TBD" specification="TBD" section="TBD" category="TBD"/>
+            <spec_url>TBD</spec_url>
+            <spec_statement>TBD</spec_statement>
+          </spec>
+        </specs>
+      </testcase>
+    </set>
+  </suite>
+</test_definition>
diff --git a/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/resource/tct-testconfig/tests.xml b/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/resource/tct-testconfig/tests.xml
new file mode 100755 (executable)
index 0000000..8963046
--- /dev/null
@@ -0,0 +1,414 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?xml-stylesheet type="text/xsl" href="./testcase.xsl"?>
+<test_definition>
+  <suite name="tct-testconfig">
+<!--    <set name="tct-bluetooth-tizen-tests">
+      <testcase execution_type="manual" id="Bluetoothconfiguration" purpose="tct-bluetooth-tizen-tests configuration">
+        <description>
+          <steps>
+            <step order="1">
+              <step_desc>The 'tct-bt-helper' web application MUST be installed on the remote device whose address is REMOTE_DEVICE_ADDRESS.
+The tct-bt-helper is included in the tct-bluetooth-tizen-tests package. Install the tct-bluetooth-tizen-tests package on both your test device and the remote Bluetooth device.</step_desc>
+            </step>
+            <step order="2">
+              <step_desc>Turn on the Bluetooth of your test device and the remote device. Make the two devices discoverable to each other.</step_desc>
+            </step>
+            <step order="3">
+              <step_desc>Before manual testing, launch the 'tct-bt-helper' web application installed on the remote device, click 'Register service' on the 'tct-bt-helper', and then execute the TCs tests manually.</step_desc>
+            </step>
+            <step order="4">
+              <step_desc>BLE test device should have at least one characteristic and descriptor information which is writable in its bluetooth low energy service.</step_desc>
+              <expected>TBD</expected>
+            </step>
+          </steps>
+          <test_script_entry test_script_expected_result="0" timeout="90"/>
+        </description>
+      </testcase>
+    </set>-->
+
+
+<!--Add -->
+    <set name="Tizen.Bluetooth.Tests">
+      <testcase component="WebAPI/Tizen/configuration"  execution_type="manual" id="Bluetoothconfiguration" purpose="Tizen.Bluetooth.Tests configuration">
+        <description>
+          <steps>
+            <step order="1">
+              <step_desc>Set the remote address of the Bluetooth device which you are going to use for testing.</step_desc>
+            </step>
+            <step order="2">
+              <step_desc>Recommends to use Tizen mobile phone for testing.</step_desc>
+            </step>
+          </steps>
+          <test_script_entry test_script_expected_result="0" timeout="90"/>
+        </description>
+      </testcase>
+    </set>
+    <set name="Tizen.Bluetooth.Manual.Tests">
+      <testcase component="WebAPI/Tizen/configuration"  execution_type="manual" id="BluetoothManualconfiguration" purpose="Tizen.Bluetooth.Manual.Tests configuration">
+        <description>
+          <steps>
+            <step order="1">
+              <step_desc>Set the remote address of the BLE(Bluetooth Low Energy) device which you are going to use for testing.</step_desc>
+            </step>
+            <step order="2">
+              <step_desc>Set the remote address of the HID(Human Interface Device) device which you are going to use for testing.</step_desc>
+            </step>
+            <step order="3">
+              <step_desc>Set the remote address of the OPP(Object Push Profile) device which you are going to use for testing.</step_desc>
+            </step>
+            <step order="4">
+              <step_desc>Set the remote address of the device which you are going to use for testing.</step_desc>
+            </step>
+          </steps>
+          <test_script_entry test_script_expected_result="0" timeout="90"/>
+        </description>
+      </testcase>
+    </set>
+    <set name="Tizen.System.Tests">
+      <testcase component="WebAPI/Tizen/configuration"  execution_type="manual" id="Systemconfiguration" purpose="Tizen.System.Tests configuration">
+        <description>
+          <steps>
+            <step order="1">
+              <step_desc>SDCard/USB(External storage) should be inserted on target</step_desc>
+            </step>
+          </steps>
+          <test_script_entry test_script_expected_result="0" timeout="90"/>
+        </description>
+      </testcase>
+    </set>
+    <set name="Tizen.Packagemanager.Tests">
+      <testcase component="WebAPI/Tizen/configuration"  execution_type="manual" id="Packagemanagerconfiguration" purpose="Tizen.Packagemanager.Tests configuration">
+        <description>
+          <steps>
+            <step order="1">
+              <step_desc>SdCard should be inserted on target.</step_desc>
+            </step>
+          </steps>
+          <test_script_entry test_script_expected_result="0" timeout="90"/>
+        </description>
+      </testcase>
+    </set>
+    <set name="Tizen.Download.Manual.Tests">
+      <testcase component="WebAPI/Tizen/configuration" execution_type="manual" id="Downloadmanualconfiguration" purpose="Tizen.Download.Manual.Tests configuration">
+        <description>
+          <steps>
+            <step order="1">
+              <step_desc>A network connection capable of accessing the Internet MUST be established.</step_desc>
+            </step>
+          </steps>
+          <test_script_entry test_script_expected_result="0" timeout="90"/>
+        </description>
+      </testcase>
+    </set>
+    <set name="Tizen.Download.Tests">
+      <testcase component="WebAPI/Tizen/configuration" execution_type="manual" id="Downloadconfiguration" purpose="Tizen.Download.Tests configuration">
+        <description>
+          <steps>
+            <step order="1">
+              <step_desc>A network connection capable of accessing the Internet MUST be established.</step_desc>
+            </step>
+          </steps>
+          <test_script_entry test_script_expected_result="0" timeout="90"/>
+        </description>
+      </testcase>
+    </set>
+    <set name="Tizen.Maps.Tests">
+      <testcase component="WebAPI/Tizen/configuration" execution_type="manual" id="Mapsconfiguration" purpose="Tizen.Maps.Tests configuration">
+        <description>          
+          <steps>
+            <step order="1">
+              <step_desc>A network connection capable of accessing the Internet MUST be established.</step_desc>
+            </step>
+            <step order="2">
+              <step_desc>Set the HERE_MAPS_PROVIDER_KEY configure (appid/app_code).</step_desc>
+            </step>
+          </steps>
+          <test_script_entry test_script_expected_result="0" timeout="90"/>
+        </description>
+      </testcase>
+    </set>
+
+    <set name="Tizen.Maps.Manual.Tests">
+      <testcase component="WebAPI/Tizen/configuration" execution_type="manual" id="Mapsconfiguration" purpose="Tizen.Maps.Manual.Tests configuration">
+        <description>
+          <steps>
+            <step order="1">
+              <step_desc>A network connection capable of accessing the Internet MUST be established.</step_desc>
+            </step>
+            <step order="2">
+              <step_desc>Set the HERE_MAPS_PROVIDER_KEY configure (appid/app_code).</step_desc>
+            </step>
+          </steps>
+          <test_script_entry test_script_expected_result="0" timeout="90"/>
+        </description>
+      </testcase>
+    </set>
+
+    <set name="Tizen.PrivacyPrivilegeManager.Manual.Tests">
+      <testcase component="WebAPI/Tizen/configuration" execution_type="manual" id="Mapsconfiguration" purpose="Tizen.PrivacyPrivilegeManager.Manual.Tests configuration">
+        <description>
+          <steps>
+            <step order="1">
+              <step_desc>There should be no '/opt/share/askuser_disable' file on the target</step_desc>
+            </step>
+          </steps>
+          <test_script_entry test_script_expected_result="0" timeout="90"/>
+        </description>
+      </testcase>
+    </set>
+
+<!--
+    <set name="tct-iotconnectivity-client-tizen-tests">
+      <testcase component="WebAPI/Tizen/configuration" execution_type="manual" id="IoTClientconfiguration" purpose="tct-iotconnectivity-client-tizen-tests configuration">
+        <description>
+          <steps>
+            <step order="1">
+              <step_desc>A network connection capable of accessing the Internet MUST be established.</step_desc>
+            </step>
+          </steps>
+          <test_script_entry test_script_expected_result="0" timeout="90"/>
+        </description>
+      </testcase>
+    </set>
+    <set name="tct-iotconnectivity-server-tizen-tests">
+      <testcase component="WebAPI/Tizen/configuration" execution_type="manual" id="IoTServerconfiguration" purpose="tct-iotconnectivity-server-tizen-tests configuration">
+        <description>
+          <steps>
+            <step order="1">
+              <step_desc>A network connection capable of accessing the Internet MUST be established.</step_desc>
+            </step>
+          </steps>
+          <test_script_entry test_script_expected_result="0" timeout="90"/>
+        </description>
+      </testcase>
+    </set>
+-->
+<!--End -->
+
+    <set name="Tizen.Stt.Tests">
+      <testcase component="WebAPI/Tizen/configuration" execution_type="manual" id="Sttconfiguration" purpose="Tizen.Stt.Tests configuration">
+        <description>
+          <steps>
+            <step order="1">
+              <step_desc>In case of TV profile, connect a bluetooth remote controller which has mic.</step_desc>
+            </step>
+          </steps>
+          <test_script_entry test_script_expected_result="0" timeout="90"/>
+        </description>
+      </testcase>
+    </set>
+    <set name="Tizen.VoiceControl.Tests">
+      <testcase component="WebAPI/Tizen/configuration" execution_type="manual" id="VoiceControlconfiguration" purpose="Tizen.VoiceControl.Tests configuration">
+        <description>
+          <steps>
+            <step order="1">
+              <step_desc>In case of TV profile, connect a bluetooth remote controller which has mic.</step_desc>
+            </step>
+          </steps>
+          <test_script_entry test_script_expected_result="0" timeout="90"/>
+        </description>
+      </testcase>
+    </set>
+    <set name="Tizen.Push.Tests">
+      <testcase component="WebAPI/Tizen/configuration" execution_type="manual" id="Pushconfiguration" purpose="Tizen.Push.Tests configuration">
+        <description>
+          <steps>
+            <step order="1">
+              <step_desc>A network connection capable of accessing the Internet MUST be established.</step_desc>
+            </step>
+          </steps>
+          <test_script_entry test_script_expected_result="0" timeout="90"/>
+        </description>
+      </testcase>
+    </set>
+    <set name="Tizen.WiFi.Manual.Tests">
+      <testcase component="WebAPI/Tizen/configuration" execution_type="manual" id="WiFiconfiguration" purpose="Tizen.WiFi.Manual.Tests configuration">
+        <description>
+          <steps>
+            <step order="1">
+              <step_desc>Set name of available AP with WPS PBC function.</step_desc>
+            </step>
+            <step order="2">
+              <step_desc>Set name of available AP with WPS PIN function.</step_desc>
+            </step>
+            <step order="3">
+              <step_desc>Set pin number of WPS_PIN_AP to PIN_NUMBER_WPS_PIN_AP. The pin number should be generated with the checksum defined in WSC spec (Wi-Fi Simple Configuration Technical Specification). The length of WPS PIN number should be 4 or 8. If you are not familiar with it, please use an example number, 47363533.</step_desc>
+            </step>
+          </steps>
+          <test_script_entry test_script_expected_result="0" timeout="90"/>
+        </description>
+      </testcase>
+    </set>
+
+    <set name="Tizen.Messages.Tests">
+      <testcase component="WebAPI/Tizen/configuration" execution_type="manual" id="Messagesconfiguration" purpose="Tizen.Messages.Tests configuration">
+        <description>
+          <steps>
+            <step order="1">
+              <step_desc>Insert the available SIM Card into SIM slot 1.</step_desc>
+            </step>
+            <step order="2">
+              <step_desc>Set the MESSAGES_MOBILE_NUMBER configure.(example>01012345678)</step_desc>
+            </step>
+          </steps>
+          <test_script_entry test_script_expected_result="0" timeout="90"/>
+        </description>
+      </testcase>
+    </set>
+
+    <set name="Tizen.Device.Tests">
+      <testcase component="WebAPI/Tizen/configuration" execution_type="manual" id="Deviceconfiguration" purpose="Tizen.Device.Tests configuration">
+        <description>
+          <steps>
+            <step order="1">
+              <step_desc>Charger should be connected to test target.(In case of Emulator, you have to set with control panel.) </step_desc>
+            </step>
+          </steps>
+          <test_script_entry test_script_expected_result="0" timeout="90"/>
+        </description>
+      </testcase>
+    </set>
+
+    <set name="Tizen.Email.Tests">
+      <testcase component="WebAPI/Tizen/configuration" execution_type="manual" id="Emailconfiguration" purpose="Tizen.Email.Tests configuration">
+        <description>
+          <steps>
+            <step order="1">
+              <step_desc>A network connection capable of accessing the Internet MUST be established.</step_desc>
+            </step>
+            <step order="2">
+              <step_desc>Set the email account on your device. Settings > Accounts > Email > Set created accounts.</step_desc>
+            </step>
+          </steps>
+          <test_script_entry test_script_expected_result="0" timeout="90"/>
+        </description>
+      </testcase>
+    </set>
+
+    <set name="Tizen.SyncManager.Tests">
+      <testcase component="WebAPI/Tizen/configuration" execution_type="manual" id="SyncManagerconfiguration" purpose="Tizen.SyncManager.Tests configuration">
+        <description>
+          <steps>
+            <step order="1">
+              <step_desc>A network connection capable of accessing the Internet MUST be established.</step_desc>
+            </step>
+          </steps>
+          <test_script_entry test_script_expected_result="0" timeout="90"/>
+        </description>
+      </testcase>
+    </set>
+
+    <set name="Tizen.SyncManager.Manual.Tests">
+      <testcase component="WebAPI/Tizen/configuration" execution_type="manual" id="SyncManagerManualconfiguration" purpose="Tizen.SyncManager.Manual.Tests configuration">
+        <description>
+          <steps>
+            <step order="1">
+              <step_desc>A network connection capable of accessing the Internet MUST be established.</step_desc>
+            </step>
+          </steps>
+          <test_script_entry test_script_expected_result="0" timeout="90"/>
+        </description>
+      </testcase>
+    </set>
+
+    <set name="Tizen.Wifidirect.Tests">
+      <testcase component="WebAPI/Tizen/configuration" execution_type="manual" id="Wifidirectconfiguration" purpose="Tizen.Wifidirect.Tests configuration">
+        <description>
+          <steps>
+            <step order="1">
+              <step_desc>You should have two additional devices which are connected to each other via wifi-direct. (Used to get the status of connected devices.) </step_desc>
+            </step>
+          </steps>
+          <test_script_entry test_script_expected_result="0" timeout="90"/>
+        </description>
+      </testcase>
+    </set>
+
+    <set name="Tizen.WiFi.Tests">
+      <testcase component="WebAPI/Tizen/configuration" execution_type="manual" id="WiFiconfiguration" purpose="Tizen.WiFi.Tests configuration">
+        <description>
+          <steps>
+            <step order="1">
+              <step_desc>Set available private AP name 1.</step_desc>
+            </step>
+            <step order="2">
+              <step_desc>Set available private AP name 2.</step_desc>
+            </step>
+            <step order="3">
+              <step_desc>Set available hidden AP name.</step_desc>
+            </step>
+            <step order="4">
+              <step_desc>Set common password of all private APs.</step_desc>
+            </step>
+          </steps>
+          <test_script_entry test_script_expected_result="0" timeout="90"/>
+        </description>
+      </testcase>
+    </set>
+
+    <set name="Tizen.Connection.Tests">
+      <testcase component="WebAPI/Tizen/configuration" execution_type="manual" id="Connectionconfiguration" purpose="Tizen.Connection.Tests configuration">
+        <description>
+          <steps>
+            <step order="1">
+              <step_desc>Set available public AP name.</step_desc>
+            </step>
+            <step order="2">
+              <step_desc>Set available private AP name.</step_desc>
+            </step>
+            <step order="3">
+              <step_desc>Set common password of all private APs.</step_desc>
+            </step>
+          </steps>
+          <test_script_entry test_script_expected_result="0" timeout="90"/>
+        </description>
+      </testcase>
+    </set>
+
+   <set name="Tizen.MediaPlayer.Tests">
+      <testcase component="WebAPI/Tizen/configuration" execution_type="manual" id="MediaPlayerconfiguration" purpose="Tizen.MediaPlayer.Tests configuration">
+        <description>
+          <steps>
+            <step order="1">
+              <step_desc> Set the streaming uri such as http://www.samsung.com/xx/xx/aa.mp4.</step_desc>
+            </step>
+           <step order="2">
+              <step_desc> Set the adaptive streaming url.</step_desc>
+            </step>
+          </steps>
+          <test_script_entry test_script_expected_result="0" timeout="90"/>
+        </description>
+      </testcase>
+    </set>
+
+   <set name="Tizen.WebView.Tests">
+      <testcase component="WebAPI/Tizen/configuration" execution_type="manual" id="WebViewconfiguration" purpose="Tizen.WebView.Tests configuration">
+        <description>
+          <steps>
+            <step order="1">
+              <step_desc> Target has to connect to internet</step_desc>
+            </step>
+          </steps>
+          <test_script_entry test_script_expected_result="0" timeout="90"/>
+        </description>
+      </testcase>
+    </set>
+
+   <set name="Tizen.Usb.Tests">
+      <testcase component="WebAPI/Tizen/configuration" execution_type="manual" id="WebViewconfiguration" purpose="Tizen.Usb.Tests configuration">
+        <description>
+          <steps>
+            <step order="1">
+              <step_desc> The usb-host emulation driver MUST be loaded before testing.</step_desc>
+            </step>
+            <step order="2">
+              <step_desc> $ devicectl usb-host-test start</step_desc>
+            </step>
+          </steps>
+          <test_script_entry test_script_expected_result="0" timeout="90"/>
+        </description>
+      </testcase>
+    </set>
+  </suite>
+</test_definition>
+
diff --git a/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/resource/testkit-stub/aarch64/testkit-stub b/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/resource/testkit-stub/aarch64/testkit-stub
new file mode 100755 (executable)
index 0000000..bc8c195
Binary files /dev/null and b/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/resource/testkit-stub/aarch64/testkit-stub differ
diff --git a/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/resource/testkit-stub/arm/testkit-stub b/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/resource/testkit-stub/arm/testkit-stub
new file mode 100755 (executable)
index 0000000..74e76ab
Binary files /dev/null and b/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/resource/testkit-stub/arm/testkit-stub differ
diff --git a/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/resource/testkit-stub/ia/testkit-stub b/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/resource/testkit-stub/ia/testkit-stub
new file mode 100755 (executable)
index 0000000..1cbe806
Binary files /dev/null and b/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/resource/testkit-stub/ia/testkit-stub differ
diff --git a/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/resource/testkit-stub/ia64/testkit-stub b/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/resource/testkit-stub/ia64/testkit-stub
new file mode 100755 (executable)
index 0000000..f7a1344
Binary files /dev/null and b/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/resource/testkit-stub/ia64/testkit-stub differ
diff --git a/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/tools/devicemanager.py b/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/tools/devicemanager.py
new file mode 100755 (executable)
index 0000000..7ca7e7d
--- /dev/null
@@ -0,0 +1,101 @@
+#!/usr/bin/python
+
+from sdbmanager import SdbManager
+
+class DeviceManager(object):
+    INSTANCE = None
+    devices = []
+
+    def __init__(self):
+        if DeviceManager.INSTANCE is not None:
+            raise Exception('DeviceManager instance already exists')
+
+    @classmethod
+    def getInstance(cls):
+        if cls.INSTANCE is None:
+            cls.INSTANCE = DeviceManager()
+        if len(cls.INSTANCE.devices) < 1:
+            cls.INSTANCE.loadDeviceList()
+        return cls.INSTANCE
+
+    def _updateConnDevice(self, connDevices):
+        self._resetDevices()
+
+        for dev in connDevices:
+            self.devices.append(dev)
+
+    def _resetDevices(self):
+        listSize = len(self.devices)
+        del self.devices[0:listSize]
+
+    def isDeviceAvailable(self, deviceId):
+        if len(self.devices) < 1:
+            return False
+        else:
+            devs = self.getSdbDeviceList()
+            for dev in devs:
+                devId = dev.getDeviceId()
+                if devId == deviceId:
+                    return True
+        return False
+
+    def getDeviceSize(self):
+        return len(self.devices)
+
+    def getSdbDeviceList(self):
+        return self.devices
+
+    def getDevice(self, deviceId):
+        for dev in self.devices:
+            if dev.getDeviceId() == deviceId:
+                return dev
+
+        print "#ERROR#: The '%s' device Id exists error" % deviceId
+        return None
+
+    def loadDeviceList(self):
+        connDevices = []
+        sdbOutLog = SdbManager.sdbDevices()
+        devicesInfo = sdbOutLog.replace("List of devices attached", "")
+        devList = devicesInfo.split('\n')
+
+        for dev in devList:
+            if len(dev) > 1:
+                devInfoItem = dev.split('\t')
+                devId = devInfoItem[0].rstrip()
+                devType = devInfoItem[1].rstrip()
+                devName = devInfoItem[2].rstrip()
+                if not (devType == "unknown" or devType == "offline" \
+                        or devId == "unknown" or devId == "offline"):
+                    connDevices.append(SdbDevice(devId, devName, devType))
+
+        if len(connDevices) > 0:
+            self._updateConnDevice(connDevices)
+            print "Connected Devices = %s" \
+                    % str([dev.devId for dev in self.devices])
+            return True
+        else:
+            self._resetDevices()
+            return False
+
+class SdbDevice:
+    def __init__(self, devId, devName, devType):
+        self.devId = devId
+        self.devName = devName
+        self.devType = devType
+
+    def _printDevInfo(self):
+        print "===== Device Infomation ====="
+        print " Name : " + self.devName
+        print " Id   : " + self.devId
+        print " Type : " + self.devType
+        print "============================="
+
+    def getDeviceId(self):
+        return self.devId
+
+    def getDeviceName(self):
+        return self.devName
+
+    def getDeviceType(self):
+        return self.devType
diff --git a/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/tools/devicemanager.pyc b/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/tools/devicemanager.pyc
new file mode 100755 (executable)
index 0000000..92b32c7
Binary files /dev/null and b/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/tools/devicemanager.pyc differ
diff --git a/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/tools/healthcheck.ini b/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/tools/healthcheck.ini
new file mode 100755 (executable)
index 0000000..52f8bcb
--- /dev/null
@@ -0,0 +1,5 @@
+[HealthCheck]
+step1=checking widget getCap,getCap,10
+step2=checking process testkit-stub,testkit-stub,5
+step3=checking testconfig tool,testconfig,2
+step4=checking widget storage,storage,10
diff --git a/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/tools/sdbmanager.py b/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/tools/sdbmanager.py
new file mode 100755 (executable)
index 0000000..1f474e4
--- /dev/null
@@ -0,0 +1,221 @@
+#!/usr/bin/python
+
+import subprocess
+import time
+import os
+import platform
+import re
+import signal
+import ctypes
+
+SDB_PUSH = "sdb -s %s push"
+SDB_SHELL = "sdb -s %s shell"
+SDB_ROOT_ON = "sdb -s %s root on"
+SDB_DEVICES = "sdb devices"
+SDB_START_SERVER = "sdb start-server"
+SDB_KILL_SERVER = "sdb kill-server"
+SDB_CONNECT = "sdb connect %s"
+SDB_PULL = "sdb -s %s pull"
+SDB_CAT_CONFIG = " cat %s"
+SDB_LS = "sdb -s %s shell ls -al"
+FILE_FOUND_SCRIPT = "[ -f %s ] && echo \"Found\" || echo \"Not Found\""
+
+class SdbManager:
+
+    @staticmethod
+    def hostCommand(command):
+        print command
+        proc = subprocess.Popen(command, shell=True, \
+                stdout=subprocess.PIPE, stderr=subprocess.PIPE)
+
+        while True:
+            exit_code = proc.poll()
+            if exit_code is not None:
+                break
+
+            output = proc.stdout.read()
+            if output:
+                print output
+
+            errlog = proc.stderr.read()
+            if errlog:
+                print errlog
+
+        return True
+
+    @staticmethod
+    def hostCommandwithResult(command):
+        print command
+        proc = subprocess.Popen(command, shell=True, \
+                stdout=subprocess.PIPE, stderr=subprocess.PIPE)
+
+        while True:
+            exit_code = proc.poll()
+            if exit_code is not None:
+                break
+
+        return proc.stdout.read()
+
+    @staticmethod
+    def sdbCommand(command, timeout=90):
+        print command
+        proc = subprocess.Popen(command,
+                                shell=True,
+                                stdout=subprocess.PIPE,
+                                stderr=subprocess.PIPE)
+        time_out = 0
+        exit_code = None
+        while time_out < timeout:
+            exit_code = proc.poll()
+            if exit_code is not None:
+                break
+            time_out += 0.5
+            time.sleep(0.5)
+        if exit_code is None:
+            SdbManager.killall(proc.pid)
+
+        return exit_code, proc.stdout, proc.stderr
+
+    @staticmethod
+    def _checkDevIdExists(_devid):
+        if len(_devid) < 0:
+            print "#ERROR#: The '%s' device Id exists error" % _devid
+            return False
+        return True
+
+    @staticmethod
+    def _checkFileExists(aPath):
+        if os.path.exists(aPath):
+            return True
+        else:
+            return False
+
+    @staticmethod
+    def sdbPush(_devid, local, remote):
+        if SdbManager._checkFileExists(local) is False:
+            print '#WARNING#: The %s file exists error' % local
+            return False
+
+        FAIL_LOG = "#ERROR#: sdb push failed"
+        SdbManager._checkDevIdExists(_devid)
+        push_cmd = SDB_PUSH % _devid + " " + local + " " + remote
+        exit_code, re_stdout, re_stderr = SdbManager.sdbCommand(push_cmd)
+
+        if exit_code is None:
+            print FAIL_LOG
+            errLog = re_stderr.read()
+            if errLog: print errLog
+            return False
+        else:
+            print re_stdout.read()
+            return True
+
+    @staticmethod
+    def sdbShell(deviceId, cmd, timeout=90):
+        SdbManager._checkDevIdExists(deviceId)
+        shell_cmd = SDB_SHELL % deviceId + " " + cmd
+        FAIL_LOG = "#ERROR#: sdb shell failed"
+        exit_code, re_stdout, re_stderr = SdbManager.sdbCommand(shell_cmd, timeout)
+
+        if exit_code is None:
+            print FAIL_LOG
+            errLog = re_stderr.read()
+            if errLog : print errLog
+            return None
+        else:
+            outLog = re_stdout.read()
+            errLog = re_stderr.read()
+            if errLog:
+                print FAIL_LOG
+                print errLog
+                return None
+            if outLog:
+                print outLog
+                return outLog
+
+    @staticmethod
+    def sdbRootOn(deviceId):
+        SdbManager._checkDevIdExists(deviceId)
+        FAIL_LOG = "#ERROR#: sdb root on failed"
+        is_pass = False
+        root_cmd = SDB_ROOT_ON % deviceId
+        exit_code, re_stdout, re_stderr = SdbManager.sdbCommand(root_cmd, 20)
+
+        if exit_code is None:
+            print FAIL_LOG
+            errLog = re_stderr.read()
+            if errLog: print (str(errLog))
+
+        checkLog = SdbManager.sdbShell(deviceId, 'whoami')
+        if checkLog and checkLog.find('root') != -1:
+            print 'SDB ROOT ON'
+            is_pass = True
+        else:
+            print FAIL_LOG
+            print str(checkLog)
+
+        return is_pass
+
+    @staticmethod
+    def sdbDevices():
+        dev_cmd = SDB_DEVICES
+        start_server_cmd = SDB_START_SERVER
+        SdbManager.sdbCommand(start_server_cmd, 8)
+        exit_code, re_stdout, re_stderr = SdbManager.sdbCommand(dev_cmd, 20)
+        if exit_code is None:
+            print "#ERROR#: %s" % re_stderr.read()
+            return None
+
+        return re_stdout.read()
+
+    @staticmethod
+    def sdbSetDate(devid):
+        print "set device date"
+        HDATE = '`date "+%Y-%m-%d %H:%M"`'
+        date_cmd = '"date -s \''+ HDATE + '\'"'
+        SdbManager.sdbShell(devid, date_cmd)
+
+    @staticmethod
+    def killall(ppid):
+        """Kill all children process by parent process ID"""
+        os_ver = platform.system()
+        try:
+            if os_ver == "Linux" or os_ver == "Darwin":
+                ppid = str(ppid)
+                pidgrp = []
+
+                def getchildpids(ppid):
+                    """Return a list of children process"""
+                    command = "ps -ef | awk '{if ($3 == %s) print $2;}'" % str(
+                    ppid)
+                    pids = os.popen(command).read()
+                    pids = pids.split()
+                    return pids
+
+                pidgrp.extend(getchildpids(ppid))
+                for pid in pidgrp:
+                    pidgrp.extend(getchildpids(pid))
+                # Insert self process ID to PID group list
+                pidgrp.insert(0, ppid)
+                while len(pidgrp) > 0:
+                    pid = pidgrp.pop()
+                    try:
+                        os.kill(int(pid), signal.SIGKILL)
+                    except OSError, error:
+                        pattern = re.compile('No such process')
+                        match = pattern.search(str(error))
+                        if not match:
+                            print "[ Error: fail to kill pid: %s," \
+                                " error: %s ]\n" % (int(pid), error)
+            # kill for windows platform
+            else:
+                kernel32 = ctypes.windll.kernel32
+                handle = kernel32.OpenProcess(1, 0, int(ppid))
+                kernel32.TerminateProcess(handle, 0)
+        except OSError, error:
+            pattern = re.compile('No such process')
+            match = pattern.search(str(error))
+            if not match:
+                print "[ Error: fail to kill pid: %s, error: %s ]\n" \
+                      % (int(ppid), error)
+        return None
diff --git a/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/tools/sdbmanager.pyc b/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/tools/sdbmanager.pyc
new file mode 100755 (executable)
index 0000000..08f1604
Binary files /dev/null and b/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/tools/sdbmanager.pyc differ
diff --git a/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/tools/tct-config-device.py b/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/tools/tct-config-device.py
new file mode 100755 (executable)
index 0000000..1b5b757
--- /dev/null
@@ -0,0 +1,745 @@
+#!/usr/bin/python
+
+"""Usage:
+         tct-config-device.py [--install [--deviceid <serial_no>]]
+         tct-config-device.py --purge [--deviceid <serial_no>]
+         tct-config-device.py --check [--deviceid <serial_no>][--procid <process_name>]
+         tct-config-device.py --bhtest <profile>
+
+Options:
+  -h, --help         show this help message and exit
+  --install          Install tct resources to TIZEN device,it can be omitted
+  --purge            Clean up tct resources from TIZEN device
+  --check            Check test resource on device
+  --bhtest           Install tct behavior test
+  --deviceid         Set the device serial number
+  --procid           Set the check process name
+
+"""
+import os
+import sys
+import time
+import ConfigParser
+import threading
+import subprocess
+
+
+from optparse import OptionParser
+from devicemanager import DeviceManager
+from sdbmanager import SdbManager
+
+JOIN = os.path.join
+EXISTS = os.path.exists
+DIRNAME = os.path.dirname
+BASENAME = os.path.basename
+ABSPATH = os.path.abspath
+SPLIT = os.path.split
+
+CURENT_DIR = SPLIT(DIRNAME(ABSPATH(__file__)))[0]
+
+TOOLS_DIR = JOIN(CURENT_DIR, "tools")
+RESRC_DIR = JOIN(CURENT_DIR, "resource")
+PKGS_DIR = JOIN(CURENT_DIR, "package")
+
+DEVID = ""
+
+TIZENV = "tizen_6.0"
+
+DLOG_CLEAR = "dlogutil -c"
+DLOG_UTIL = "sdb -s %s shell dlogutil -v time"
+
+TCT_CONFIG_FILE = "/opt/tools/TCT_CONFIG"
+tct_parser = ConfigParser.ConfigParser()
+tct_parser.read(TCT_CONFIG_FILE)
+
+DEVICE_SUITE_TARGET_24 = tct_parser.get('DEVICE', 'DEVICE_SUITE_TARGET_24')
+DEVICE_SUITE_TARGET_30 = tct_parser.get('DEVICE', 'DEVICE_SUITE_TARGET_30')
+DEVICE_EXECUTION_MODE_30 = tct_parser.get('DEVICE', 'DEVICE_EXECUTION_MODE_30')
+
+if TIZENV.find('tizen_6.0') > -1:
+    DEVICE_SUITE_TARGET = DEVICE_SUITE_TARGET_30
+else:
+    DEVICE_SUITE_TARGET = DEVICE_SUITE_TARGET_24
+
+def LS(root, file_name, extension=None):
+    import glob
+
+    file_path = ""
+    if extension:
+        file_path = JOIN(root, file_name) + "*." + extension
+    else:
+        file_path = JOIN(root, file_name) + "*"
+    files = glob.iglob(r'' + file_path + '')
+    for f in files:
+        return BASENAME(f)
+
+def get_device_arch():
+    global DEV_ARCH
+    #ARCHCMD = SDB_SERNO + " shell \"cat /etc/products.d/tizen.prod |grep \<arch\""
+    arch_cmd = "cat /etc/config/model-config.xml | grep tizen.org/feature/platform.core.cpu.arch"
+    #result example : <key name="tizen.org/feature/platform.core.cpu.arch" type="string">armv7</key>
+    result = SdbManager.sdbShell(DEVID, arch_cmd)
+    if result and len(result) > 0:
+        arch_str = result.split('\n')[0]
+        if arch_str and arch_str.find('armv') > -1:
+            DEV_ARCH = "arm"
+            print "info: [* Arch Type : arm *]"
+        elif arch_str and arch_str.find("aarch64") > -1:
+            DEV_ARCH = "aarch64"
+            print "info: [* Arch Type : aarch64 *]"
+        elif arch_str and arch_str.find('x86_64') > -1:
+            DEV_ARCH = "ia64"
+            print "info: [* Arch Type : ia64 *]"
+        elif arch_str and (arch_str.find("i686") > -1 or arch_str.find("x86") > -1 or arch_str.find("i386") > -1):
+            DEV_ARCH = "ia"
+            print "info: [* Arch Type : ia *]"
+        else:
+            print "info: [* Arch Type : None *]"
+            return False
+        return True
+    else:
+        print "#ERROR#: Failed to get device cpu_arch type"
+        return False
+
+
+def kill_process(process_name):
+    proc_cmd = "ps aux | grep " + process_name + " | grep -v grep | awk '{print $2}'"
+    result = SdbManager.sdbShell(DEVID, proc_cmd)
+    if result and len(result) > 0:
+        kill_cmd = "kill -9 " + str(result).strip() + " > /dev/null 2>&1"
+        SdbManager.sdbShell(DEVID, kill_cmd)
+        print "info: %s process has been killed" % process_name
+    else:
+        print "info: No process of %s activated" % process_name
+
+def remove_tinyweb():
+    SdbManager.sdbShell(DEVID, "rm -f /opt/home/developer/server.pem > /dev/null 2>&1")
+    SdbManager.sdbShell(DEVID, "rm -f /opt/home/developer/tinyweb > /dev/null 2>&1")
+    SdbManager.sdbShell(DEVID, "rm -f /opt/home/developer/cgi-getcookie > /dev/null 2>&1")
+    SdbManager.sdbShell(DEVID, "rm -f /opt/home/developer/cgi-getfield > /dev/null 2>&1")
+    SdbManager.sdbShell(DEVID, "rm -f /opt/home/developer/libmongoose.so > /dev/null 2>&1")
+    SdbManager.sdbShell(DEVID, "rm -f /opt/home/developer/echo.so > /dev/null 2>&1")
+    SdbManager.sdbShell(DEVID, "rm -f /opt/home/developer/libssl.so > /dev/null 2>&1")
+    SdbManager.sdbShell(DEVID, "rm -f /opt/home/developer/libcrypto.so > /dev/null 2>&1")
+
+def remove_stub():
+    SdbManager.sdbShell(DEVID, "rm -f /opt/home/developer/testkit-stub")
+
+
+def uninstall_testconfig():
+    if TIZENV.find('tizen_6.0') > -1:
+        inst_path = RESRC_DIR + os.sep + 'tct-testconfig' + os.sep + 'inst.py'
+        SdbManager.hostCommand("python %s -s %s -u" % (inst_path, DEVID))
+    else:
+        RPMPKG = LS(RESRC_DIR, "tct-testconfig")
+        if not RPMPKG:
+            sys.exit("#ERROR#: cannot found tct-testconfig.zip file in resource dir")
+        uninst_cmd = JOIN(DEVICE_SUITE_TARGET, 'tct/opt/tct-testconfig/inst.sh') + ' -u'
+        SdbManager.sdbShell(DEVID, uninst_cmd)
+        rm_cmd = 'rm -f ' + JOIN(DEVICE_SUITE_TARGET, 'tct/', RPMPKG)
+        SdbManager.sdbShell(DEVID, rm_cmd)
+
+
+def uninstall_behavior():
+    print "info: Uninstall behavior tool."
+    if TIZENV.find('tizen_6.0') > -1:
+        pass
+    else:
+        uninst_cmd = JOIN(DEVICE_SUITE_TARGET, 'tct/opt/tct-behavior-tests/inst.sh') + ' -u'
+        SdbManager.sdbShell(DEVID, uninst_cmd)
+
+
+def check_resource_dir():
+    print "info: check resource directory."
+    if os.path.exists(RESRC_DIR):
+        SdbManager.sdbShell(DEVID, 'mkdir -p ' + JOIN(DEVICE_SUITE_TARGET, 'tct/'))
+        SdbManager.sdbShell(DEVID, 'mkdir -p ' + JOIN(DEVICE_SUITE_TARGET, 'Documents/'))
+        return True
+    else:
+        print "#WARNING#: The directory resource does not exists. Please copy test resources to %s " % RESRC_DIR
+        return False
+
+def check_tinyweb():
+    print "info: Check tinyweb."
+    result = SdbManager.sdbShell(DEVID, "ls /opt/home/developer/ | grep tinyweb")
+    if result and result.find('tinyweb'):
+        remove_tinyweb()
+        install_tinyweb()
+        launch_tinyweb()
+    else:
+        install_tinyweb()
+        launch_tinyweb()
+
+
+def port_manager():
+    print "info: Check the tinyweb port"
+    result = SdbManager.sdbShell('fuser -n tcp 80 8080 8081 8082 8083 8443')
+    if result and len(result) > 0:
+        check_port = SdbManager.sdbShell('su "netstat -nap |grep tinyweb"')
+        if len(check_port) > 0:
+            print "info: tinyweb on"
+    else:
+        print "info: Port is available"
+
+
+def launch_tinyweb():
+    dpath_cmd = "printenv PATH"
+    dpath = SdbManager.sdbShell(DEVID, dpath_cmd)
+
+    launch_cmd = 'sdb -s ' + DEVID + ' shell ' + '"env LD_LIBRARY_PATH=/opt/home/developer PATH=' + dpath.strip() + \
+                 ':/opt/home/developer/ tinyweb -ssl_certificate /opt/home/developer/server.pem -document_root ' + \
+                 JOIN(DEVICE_SUITE_TARGET, 'tct') + ' -listening_ports 80,8080,8081,8082,8083,8443s; sleep 3s" 0> /dev/null'
+
+    SdbManager.sdbCommand(launch_cmd, 10)
+
+    check_tinyweb_cmd = '\"ps aux | grep tinyweb | grep -v grep\"'
+    result = SdbManager.sdbShell(DEVID, check_tinyweb_cmd)
+    if result and result.find('tinyweb') > -1:
+        print "info: Active process tinyweb successfully."
+        return True
+    else:
+        print "#ERROR#: Active process tinyweb failed."
+        return False
+
+def install_tinyweb():
+    print "info: Install tinyweb"
+    SdbManager.sdbPush(DEVID, JOIN(RESRC_DIR, 'tinyweb', DEV_ARCH, 'tinyweb'), '/opt/home/developer/')
+    SdbManager.sdbShell(DEVID, "chmod 777 /opt/home/developer/tinyweb")
+
+    SdbManager.sdbPush(DEVID, JOIN(RESRC_DIR, 'tinyweb', DEV_ARCH, 'cgi-getcookie'), '/opt/home/developer/')
+    SdbManager.sdbShell(DEVID, "chmod 777 /opt/home/developer/cgi-getcookie")
+
+    SdbManager.sdbPush(DEVID, JOIN(RESRC_DIR, 'tinyweb', DEV_ARCH, 'cgi-getfield'), '/opt/home/developer/')
+    SdbManager.sdbShell(DEVID, "chmod 777 /opt/home/developer/cgi-getfield")
+
+    SdbManager.sdbPush(DEVID, JOIN(RESRC_DIR, 'tinyweb', DEV_ARCH, 'libmongoose.so'), '/opt/home/developer/')
+    SdbManager.sdbShell(DEVID, "chmod 777 /opt/home/developer/libmongoose.so")
+
+    SdbManager.sdbPush(DEVID, JOIN(RESRC_DIR, 'tinyweb', DEV_ARCH, 'echo.so'), '/opt/home/developer/')
+    SdbManager.sdbShell(DEVID, "chmod 777 /opt/home/developer/echo.so")
+
+    SdbManager.sdbPush(DEVID, JOIN(RESRC_DIR, 'tinyweb', DEV_ARCH, 'server.pem'), '/opt/home/developer/')
+    SdbManager.sdbShell(DEVID, "chmod 777 /opt/home/developer/server.pem")
+    if DEV_ARCH == "arm":
+        SdbManager.sdbShell(DEVID, "ln -s /usr/lib/libssl.so.1.0.0 /opt/home/developer/libssl.so")
+        SdbManager.sdbShell(DEVID, "ln -s /usr/lib/libcrypto.so.1.0.0 /opt/home/developer/libcrypto.so")
+    elif DEV_ARCH == "ia":
+        SdbManager.sdbShell(DEVID, "ln -s /usr/lib/libssl.so.1.0.0 /opt/home/developer/libssl.so")
+        SdbManager.sdbShell(DEVID, "ln -s /usr/lib/libcrypto.so.1.0.0 /opt/home/developer/libcrypto.so")
+    elif DEV_ARCH == "aarch64":
+        SdbManager.sdbShell(DEVID, "ln -s /usr/lib64/libssl.so.1.0.0 /opt/home/developer/libssl.so")
+        SdbManager.sdbShell(DEVID, "ln -s /usr/lib64/libcrypto.so.1.0.0 /opt/home/developer/libcrypto.so")
+    elif DEV_ARCH == "ia64":
+        SdbManager.sdbShell(DEVID, "ln -s /usr/lib64/libssl.so.1.0.0 /opt/home/developer/libssl.so")
+        SdbManager.sdbShell(DEVID, "ln -s /usr/lib64/libcrypto.so.1.0.0 /opt/home/developer/libcrypto.so")
+
+
+def check_stub():
+    print "info: Check testkit-stub."
+    result = SdbManager.sdbShell(DEVID, "ls /opt/home/developer/ | grep testkit-stub")
+    if result and len(result) > 0:
+        print "info: testkit-stub has been installed on device."
+        kill_process("testkit-stub")
+    install_stub()
+
+
+def install_stub():
+    print "info: Install testkit-stub."
+    SdbManager.sdbPush(DEVID, JOIN(RESRC_DIR, 'testkit-stub', DEV_ARCH, 'testkit-stub'), '/opt/home/developer/testkit-stub')
+    SdbManager.sdbShell(DEVID, "chmod a+x /opt/home/developer/testkit-stub")
+    SdbManager.sdbShell(DEVID, "chsmack -e \"User\" /opt/home/developer/testkit-stub")
+
+
+def check_testconfig():
+    result = SdbManager.sdbShell(DEVID, '"cat ' + JOIN(DEVICE_SUITE_TARGET, 'tct/opt/tct-testconfig/tct-testconfig.ini') + ' | grep tct"')
+    if result and len(result) > 0 and result.find('No such file or directory') == -1:
+        print "info: testconfig has already been installed on device."
+    else:
+        install_testconfig()
+
+
+def install_testconfig():
+    print "info: Install testconfig."
+    if TIZENV.find('tizen_6.0') > -1:
+        instPath = RESRC_DIR + os.sep + 'tct-testconfig' + os.sep + 'inst.py'
+        SdbManager.hostCommand("python %s -s %s" % (instPath, DEVID))
+    else:
+        conf_pkg = LS(RESRC_DIR, "tct-testconfig")
+        SdbManager.sdbPush(DEVID, JOIN(RESRC_DIR, conf_pkg), JOIN(DEVICE_SUITE_TARGET, 'tct/'))
+        SdbManager.sdbShell(DEVID, 'unzip -uo ' + JOIN(DEVICE_SUITE_TARGET, 'tct/') + conf_pkg + ' -d ' + JOIN(DEVICE_SUITE_TARGET, 'tct/'))
+        SdbManager.sdbShell(DEVID, JOIN(DEVICE_SUITE_TARGET, 'tct/opt/tct-testconfig/inst.sh'))
+
+    result = SdbManager.sdbShell(DEVID, 'cat ' + JOIN(DEVICE_SUITE_TARGET, 'tct/opt/tct-testconfig/tct-testconfig.ini') + ' | grep tct')
+
+    if result and len(result) > 0:
+        print "info: Install testconfig successfully."
+    else:
+        print "#ERROR#: Failed to install testconfig, please check %s" % RESRC_DIR
+        return False
+
+    return True
+
+def install_behavior(profile_name):
+    print "info: Install behavior tool."
+
+    if not profile_name in ['wearable', 'mobile', 'tv', 'ivi']:
+        print "#WARNING#: Invalid device profile value %s" % profile_name
+        return False
+
+    if TIZENV.find('tizen_6.0') > -1:
+        RPMPKG = "tct-behavior-tests-6.0.zip"
+        opt_rpm_path = PKGS_DIR + "s" + os.sep + profile_name + os.sep + RPMPKG
+        local_rpm_path = PKGS_DIR + os.sep + profile_name + os.sep + RPMPKG
+
+        install_rpm = None
+        install_dest = None
+        install_cmd = None
+        if os.path.exists(opt_rpm_path):
+            install_rpm = opt_rpm_path
+            install_dest = PKGS_DIR + "s" + os.sep + profile_name + os.sep
+            install_cmd = PKGS_DIR + "s" + os.sep + profile_name + os.sep + \
+                    'opt' + os.sep + "tct-behavior-tests" + os.sep + "inst.py"
+        elif os.path.exists(local_rpm_path):
+            install_rpm = local_rpm_path
+            install_dest = PKGS_DIR + os.sep + profile_name + os.sep
+            install_cmd = PKGS_DIR + os.sep + profile_name + os.sep + \
+                    'opt' + os.sep + "tct-behavior-tests" + os.sep + "inst.py"
+
+        SdbManager.hostCommand("rm -rf %s" % install_dest + "opt/tct-behavior-tests")
+        SdbManager.hostCommand("unzip -uo %s -d %s" % (install_rpm, install_dest))
+        SdbManager.hostCommand("python %s -s %s" % (install_cmd, DEVID))
+
+        print "info: Check tizen-web-ui-fw. Please wait..."
+        check_uifw = SdbManager.sdbShell(DEVID, "ls /usr/share/ | grep tizen-web-ui-fw")
+        if check_uifw and len(check_uifw) > 0:
+            print "info: tizen-web-ui-fw has been installed on device."
+        else:
+            SdbManager.sdbShell(DEVID, '"mkdir -p /usr/share/tizen-web-ui-fw/"')
+            SdbManager.sdbPush(DEVID, JOIN(RESRC_DIR, "tizen-web-ui-fw"), '/usr/share/tizen-web-ui-fw/')
+    else:
+        pass
+
+    return True
+
+
+def install_getCap():
+    print "info: Install widget getCap."
+    widgetCap = LS(RESRC_DIR, 'getCap', 'wgt')
+    SdbManager.sdbPush(DEVID, JOIN(RESRC_DIR, widgetCap), JOIN(DEVICE_SUITE_TARGET, 'tct/') + widgetCap)
+
+    if TIZENV.find('6.0') > -1:
+        SdbManager.sdbShell(DEVID, "su - " + DEVICE_EXECUTION_MODE_30 + \
+                " -c 'pkgcmd -i -t wgt -q -p " + JOIN(DEVICE_SUITE_TARGET, 'tct/') + widgetCap + '\'')
+        SdbManager.sdbShell(DEVID, 'pkgcmd -i -t wgt -q -p ' + JOIN(DEVICE_SUITE_TARGET, 'tct/') + widgetCap)
+
+
+def install_ngetCap():
+    print "info: Install widget ngetCap."
+    getcap_pkg = LS(RESRC_DIR, 'getCap', 'tpk')
+    SdbManager.sdbPush(DEVID, JOIN(RESRC_DIR, getcap_pkg), JOIN(DEVICE_SUITE_TARGET, 'tct/') + getcap_pkg)
+
+    if TIZENV.find('tizen_6.0') > -1:
+        SdbManager.sdbShell(DEVID, "su - " + DEVICE_EXECUTION_MODE_30 + \
+                " -c 'pkgcmd -ipt tpk -p " + JOIN(DEVICE_SUITE_TARGET, 'tct/') + getcap_pkg + '\'')
+    else:
+        SdbManager.sdbShell(DEVID, "pkgcmd -iqt tpk -p" + JOIN(DEVICE_SUITE_TARGET, 'tct/') + getcap_pkg)
+
+def uninstall_getCap():
+    print "info: Uninstall widget getCap."
+    wgt_id = getCap_appid()
+    if wgt_id:
+        uninst_cmd = ""
+        if TIZENV.find('tizen_6.0') > -1:
+            uninst_cmd = "su - " + DEVICE_EXECUTION_MODE_30 + \
+                    " -c 'pkgcmd -qun " + wgt_id.split('.')[0] + '\''
+        elif TIZENV.find('tizen_2.4') > -1:
+            uninst_cmd = "pkgcmd -u -q -t wgt -q -p " + wgt_id + '\''
+        SdbManager.sdbShell(DEVID, uninst_cmd)
+
+    else:
+        print "info: getCap is not installed. No need to uninstall"
+
+    SdbManager.sdbShell(DEVID, "rm -rf " + JOIN(DEVICE_SUITE_TARGET, "Documents/tct"))
+    SdbManager.sdbShell(DEVID, "rm -rf " + JOIN(DEVICE_SUITE_TARGET, "tct/getCap.wgt"))
+    SdbManager.sdbShell(DEVID, "rm -rf " + JOIN(DEVICE_SUITE_TARGET, "tct/getCap.tpk"))
+
+
+def uninstall_ngetCap():
+    print "info: Uninstall widget ngetCap."
+
+def getCap_appid():
+    widgetid_cmd = ""
+    if TIZENV.find('tizen_6.0') > -1:
+        widgetid_cmd = "su - " + DEVICE_EXECUTION_MODE_30 + \
+                " -c \"app_launcher -l | grep getCapabilities\""
+    else:
+        widgetid_cmd = "wrt-launcher -l | grep getCapabilities"
+
+    widgetids = SdbManager.sdbShell(DEVID, widgetid_cmd)
+    if widgetids and widgetids.find('getCapabilities') > -1:
+        items = widgetids.split()
+        return items[len(items) - 1].strip("'")
+    else:
+        return None
+
+def check_getCap():
+    print "info: Check getCap widget. Please wait..."
+    if getCap_appid():
+        print "info: widget getCap has already been installed on device."
+    else:
+        install_getCap()
+    launch_getCap()
+
+
+def check_ngetCap():
+    print "info: Check ngetCap widget. Please wait..."
+    if getCap_appid():
+        print "info: widget ngetCap has already been installed on device."
+    else:
+        install_ngetCap()
+    launch_ngetCap()
+
+
+def launch_getCap():
+    wgt_id = getCap_appid()
+    if wgt_id:
+        launchResult = None
+        if TIZENV.find('tizen_6.0') > -1:
+            launchResult = SdbManager.sdbShell(DEVID, 'su - ' + \
+                    DEVICE_EXECUTION_MODE_30 + ' -c \"app_launcher -s ' + wgt_id + '\"')
+        else:
+            launchResult = SdbManager.sdbShell(DEVID, '\"wrt-launcher -s ' + wgt_id + '\"')
+
+        if launchResult.find('launched') > -1:
+            fcheck_retry = 20
+
+            while fcheck_retry > 0:
+                build = SdbManager.sdbShell(DEVID, "cat " + JOIN(DEVICE_SUITE_TARGET, "Documents/tct/buildinfo.xml") + " | grep buildinfos")
+                capa = SdbManager.sdbShell(DEVID, "cat " + JOIN(DEVICE_SUITE_TARGET, "Documents/tct/capability.xml") + " | grep capabilities")
+                if not build or not capa:
+                    time.sleep(2)
+                    fcheck_retry -= 1
+                else:
+                    break
+            if fcheck_retry == 0:
+                print "#ERROR#: getCap get buildinfo, capability of device failed!"
+                return False
+            else:
+                print "info: Launch getCap successfully"
+                return True
+        else:
+            print "#ERROR#: Launch getCap got failed"
+            return False
+    else:
+        print "#ERROR#: Widget getCap cannot be found. Please check whether the widget is installed successfully"
+        return False
+
+def launch_ngetCap():
+    launch_result = None
+    if TIZENV.find('tizen_6.0') > -1:
+        launch_result = SdbManager.sdbShell(DEVID, 'su - ' + \
+                DEVICE_EXECUTION_MODE_30 + ' -c \"launch_app org.example.getcap\"')
+    else:
+        launch_result = SdbManager.sdbShell(DEVID, '\"launch_app org.example.getcap\"')
+
+    if "launched" in launch_result:
+        return True
+    else:
+        return False
+
+def getStorage_appid():
+    widgetid_cmd = "su - " + DEVICE_EXECUTION_MODE_30 + \
+            " -c \"app_launcher -l | grep InternalStorageSetting\""
+    widgetids = SdbManager.sdbShell(DEVID, widgetid_cmd)
+    if widgetids and widgetids.find('InternalStorageSetting') > -1:
+        items = widgetids.split()
+        return items[len(items)-1].strip("'")
+    else:
+        return None
+
+def check_storage():
+    print "info: Check InternalStorageSetting widget. Please wait..."
+    if getStorage_appid():
+        print "info: widget InternalStorageSetting has already been installed on device."
+    else:
+        install_storage()
+    launch_storage()
+
+def install_storage():
+    print "info: Install widget InternalStorageSetting"
+    widget = LS(RESRC_DIR, 'InternalStorageSetting', 'wgt')
+    SdbManager.sdbPush(DEVID, JOIN(RESRC_DIR, widget), JOIN(DEVICE_SUITE_TARGET, 'tct/') + widget)
+
+    SdbManager.sdbShell(DEVID, "su - " + DEVICE_EXECUTION_MODE_30 + \
+            " -c 'pkgcmd -i -t wgt -q -p " + JOIN(DEVICE_SUITE_TARGET, 'tct/') + widget + '\'')
+
+def launch_storage():
+    wgt_id = getStorage_appid()
+    if wgt_id:
+        launch_result = SdbManager.sdbShell(DEVID, 'su - ' + \
+                DEVICE_EXECUTION_MODE_30 + ' -c \"app_launcher -s ' + wgt_id + '\"')
+
+        if launch_result.find('launched') > -1:
+            print "info: Launch InternalStorageSetting successfully"
+            return True
+        else:
+            print "#ERROR#: InternalStorageSetting launch failed"
+            return False
+    else:
+        print "#ERROR#: Widget InternalStorageSetting cannot be found"
+        return False
+
+def uninstall_storage():
+    print "info: Uninstall widget InternalStorageSetting"
+    wgt_id = getStorage_appid()
+    if wgt_id:
+        uninst_cmd = "su - " + DEVICE_EXECUTION_MODE_30 + \
+                " -c 'pkgcmd -qun " + wgt_id.split('.')[0] + '\''
+        SdbManager.sdbShell(DEVID, uninst_cmd)
+    else:
+        print "info: InternalStorageSetting is not installed"
+
+def push_tctconf_file():
+    local = TCT_CONFIG_FILE
+    remote = DEVICE_SUITE_TARGET_30
+    if not SdbManager.sdbPush(DEVID, local, remote):
+        print "#ERROR#: TCT_CONFIG file push failed"
+        return False
+    return True
+
+def find_ngetCap():
+    getcap_tpk = LS(RESRC_DIR, 'getCap', 'tpk')
+    if getcap_tpk:
+        return True
+    else:
+        return False
+
+def debug_trace(cmd, logfile):
+    global debug_flag, metux
+
+    wbuffile = file(logfile, "a+")
+    exit_code = None
+    proc = subprocess.Popen(args=cmd,
+            shell=True,
+            stdout=wbuffile,
+            stderr=None)
+    while True:
+        exit_code = proc.poll()
+        if exit_code is not None:
+            break
+        time.sleep(0.6)
+        metux.acquire()
+        proc_flag = debug_flag
+        metux.release()
+        if not proc_flag:
+            break
+    wbuffile.close()
+    SdbManager.killall(proc.pid)
+
+
+def start_debug(dlog_file):
+    global debug_flag, metux, dlog_thread
+    debug_flag = True
+    metux = threading.Lock()
+    clear_cmd = DLOG_CLEAR
+    SdbManager.sdbShell(DEVID, clear_cmd)
+
+    dlog_cmd = DLOG_UTIL % DEVID
+    dlog_thread = threading.Thread(target=debug_trace, args=(dlog_cmd, dlog_file))
+    dlog_thread.setDaemon(True)
+    dlog_thread.start()
+
+
+def stop_debug():
+    global debug_flag, metux
+    metux.acquire()
+    debug_flag = False
+    metux.release()
+    dlog_thread.join()
+
+
+def runProcess():
+    if options.purge:
+        print "[ Uninstall test resource on device. Please wait...]"
+        uninstall_testconfig()
+        uninstall_behavior()
+        uninstall_getCap()
+        remove_tinyweb()
+        kill_process("tinyweb")
+        kill_process("testkit-stub")
+        remove_stub()
+        if TIZENV.find('6.0') > -1:
+            uninstall_storage()
+        print "Clean the tct packages in device successfully."
+
+    elif options.check:
+        check_resource_dir()
+        print "[ Check test resource on device. Please wait...]"
+        if options.process == 'tinyweb':
+            check_tinyweb()
+        elif options.process == 'testkit-stub':
+            check_stub()
+        elif options.process == 'testconfig':
+            check_testconfig()
+        elif options.process == 'getCap':
+            check_getCap()
+        elif options.process == 'ngetCap':
+            if find_ngetCap():
+                check_ngetCap()
+            else:
+                check_getCap()
+        elif options.process == 'storage':
+            check_storage()
+        else:
+            check_tinyweb()
+            check_stub()
+            check_testconfig()
+            if find_ngetCap():
+                check_ngetCap()
+            else:
+                check_getCap()
+            if TIZENV.find('6.0') > -1:
+                check_storage()
+
+        print "Check finished."
+
+    elif options.bhtest:
+        check_resource_dir()
+        if TIZENV.find('6.0') > -1:
+            uninstall_storage()
+            install_storage()
+            launch_storage()
+
+        uninstall_behavior()
+        print "[ Install tct behavior tool on device. Please wait...]"
+        install_behavior(options.bhtest)
+        print "Installation of tct behavior on device completed."
+
+    else:
+        check_resource_dir()
+        print "[ Clean old test resource on device. Please wait...]"
+        if options.process == 'tinyweb':
+            kill_process("tinyweb")
+            remove_tinyweb()
+        elif options.process == 'testkit-stub':
+            kill_process("testkit-stub")
+            remove_stub()
+        elif options.process == 'testconfig':
+            uninstall_testconfig()
+        elif options.process == 'getCap':
+            uninstall_getCap()
+            pass
+        elif options.process == 'ngetCap':
+            uninstall_ngetCap()
+        elif options.process == 'storage':
+            uninstall_storage()
+        else:
+            remove_tinyweb()
+            kill_process("testkit-stub")
+            remove_stub()
+            uninstall_testconfig()
+            uninstall_getCap()
+            uninstall_ngetCap()
+            if TIZENV.find('6.0') > -1:
+                uninstall_storage()
+
+        print "Clean the tct packages in device successfully."
+        print "[ Install test resource on device. Please wait...]"
+        if options.process == 'tinyweb':
+            install_tinyweb()
+            launch_tinyweb()
+        elif options.process == 'testkit-stub':
+            install_stub()
+        elif options.process == 'testconfig':
+            install_testconfig()
+        elif options.process == 'getCap':
+            install_getCap()
+            launch_getCap()
+        elif options.process == 'ngetCap':
+            if find_ngetCap():
+                install_ngetCap()
+                launch_ngetCap()
+            else:
+                install_getCap()
+                launch_getCap()
+        elif options.process == 'storage':
+            install_storage()
+            launch_storage()
+        else:
+            install_testconfig()
+            install_stub()
+            install_tinyweb()
+            launch_tinyweb()
+            if find_ngetCap():
+                install_ngetCap()
+                launch_ngetCap()
+            else:
+                install_getCap()
+                launch_getCap()
+
+            if TIZENV.find('6.0') > -1:
+                install_storage()
+                launch_storage()
+
+        print "All of installation process on device completed."
+
+
+if __name__ == "__main__":
+
+    parser = OptionParser()
+    parser.add_option(
+        "--install", dest="install", action="store_true", default=False,
+        help="Install tct resources to TIZEN device,it can be omitted")
+    parser.add_option(
+        "--purge", dest="purge", action="store_true", default=False,
+        help="Clean up tct resources from TIZEN device")
+    parser.add_option(
+        "--check", dest="check", action="store_true", default=False,
+        help="Check test resource on device")
+    parser.add_option(
+        "--deviceid", dest="deviceid", action="store",
+        help="Set the device serial number")
+    parser.add_option(
+        "--procid", dest="process", action="store",
+        help="Set the process id for checking")
+    parser.add_option(
+        "--bhtest", dest="bhtest", action="store",
+        help="Install behavior test tool to device")
+
+    (options, args) = parser.parse_args()
+
+    devinst = DeviceManager.getInstance()
+    if options.deviceid:
+        if devinst.isDeviceAvailable(options.deviceid):
+            DEVID = options.deviceid
+        else:
+            sys.exit("#ERROR#: The '%s' device Id exists error" % options.deviceid)
+    else:
+        if devinst.getDeviceSize() > 1 or devinst.getDeviceSize() == 0:
+            sys.exit("#ERROR#: %s devices connected or device not connected" % str(devinst.getDeviceSize()))
+        else:
+            DEVID = devinst.getSdbDeviceList()[0].getDeviceId()
+
+    print "[========== start tct-config-device : %s ==========]" % DEVID
+    dev_temp_dir = '/opt/tools/shell/tmp/%s/' % DEVID
+    if not os.path.isdir(dev_temp_dir):
+        os.mkdir(dev_temp_dir)
+    DLOG_SAVE_PATH = '/opt/tools/shell/tmp/%s/conf_dev_%s.dlog'
+    if options.process is None:
+        DLOG_SAVE_PATH = DLOG_SAVE_PATH % (DEVID, 'all')
+    else:
+        DLOG_SAVE_PATH = DLOG_SAVE_PATH % (DEVID, options.process)
+
+    #start_debug(DLOG_SAVE_PATH)
+
+    if not SdbManager.sdbRootOn(DEVID):
+        sys.exit(-1)
+
+    SdbManager.sdbSetDate(DEVID)
+
+    if not get_device_arch() or not push_tctconf_file():
+        sys.exit(0)
+
+    runProcess()
+    #stop_debug()
+    print "[========== end tct-config-device : %s ==========]" % DEVID
diff --git a/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/tools/tct-config-host.py b/release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/tools/tct-config-host.py
new file mode 100755 (executable)
index 0000000..bfa213c
--- /dev/null
@@ -0,0 +1,203 @@
+# -*- coding:utf-8 -*-
+import os
+import sys
+import platform
+import shutil
+import stat
+from optparse import OptionParser
+
+
+class CpFile:
+
+    def __init__(self, _tizenV, _upgrade=False):
+        self.tizenV = _tizenV
+        self.upgrade = _upgrade
+        self.sep = os.sep
+        self.TARGET_BASE_PATH = os.path.join(os.sep + "opt", "tct")
+
+        self.CURRENT_TARGET_BASE_PATH = ""
+        self.CURRENT_TARGET_LITE_PATH = ""
+        self.CURRENT_SOURCE_LITE_PATH = ""
+
+        #package
+        self.SOURCE_PACKAGE_PATH = ".." + self.sep + "package"
+        self.TARGET_PACKAGE_PATH = \
+                self.sep + self.tizenV + self.sep + "packages"
+        #manager
+        self.SOURCE_MANAGER_PATH = \
+                ".." + self.sep + "tools" + self.sep + "manager"
+        self.TARGET_MANAGER_PATH = \
+                self.sep + self.tizenV + self.sep + "manager"
+        #resource
+        self.SOURCE_RESOURCE_PATH = ".." + self.sep + "resource"
+        self.TARGET_RESOURCE_PATH = \
+                self.sep + self.tizenV + self.sep + "resource"
+        #script
+        self.SOURCE_SCRIPT_PATH = ""
+        self.TARGET_SCRIPT_PATH = self.sep + self.tizenV + self.sep + "scripts"
+        #doc
+        self.SOURCE_DOC_PATH = ".." + self.sep + "doc"
+        self.TARGET_DOC_PATH = self.sep + self.tizenV + self.sep + "doc"
+
+    def getCurrentOSBit(self):
+        return platform.architecture()
+
+    def setCurrentPath(self):
+        self.CURRENT_SOURCE_BASE_PATH = os.getcwd() + self.sep
+        self.CURRENT_TARGET_BASE_PATH = self.TARGET_BASE_PATH
+        print("current source base path =" + self.CURRENT_SOURCE_BASE_PATH)
+        print("current target base path =" + self.CURRENT_TARGET_BASE_PATH)
+
+    def cpDoc(self):
+        self.cpDir(self.CURRENT_SOURCE_BASE_PATH + self.SOURCE_DOC_PATH,
+                   self.CURRENT_TARGET_BASE_PATH + self.TARGET_DOC_PATH, "doc")
+
+    def cpScript(self):
+        self.cpFile(self.CURRENT_SOURCE_BASE_PATH + self.SOURCE_SCRIPT_PATH + \
+                self.sep + "healthcheck.ini",
+                    self.CURRENT_TARGET_BASE_PATH + self.TARGET_SCRIPT_PATH + \
+                            self.sep + "healthcheck.ini")
+        self.cpFile(self.CURRENT_SOURCE_BASE_PATH + self.SOURCE_SCRIPT_PATH + \
+                self.sep + "tct-config-device.py",
+                    self.CURRENT_TARGET_BASE_PATH + self.TARGET_SCRIPT_PATH + \
+                            self.sep + "tct-config-device.py")
+
+        self.cpFile(self.CURRENT_SOURCE_BASE_PATH + self.SOURCE_SCRIPT_PATH + \
+                self.sep + "devicemanager.py",
+                    self.CURRENT_TARGET_BASE_PATH + self.TARGET_SCRIPT_PATH + \
+                            self.sep + "devicemanager.py")
+
+        self.cpFile(self.CURRENT_SOURCE_BASE_PATH + self.SOURCE_SCRIPT_PATH + \
+                self.sep + "sdbmanager.py",
+                    self.CURRENT_TARGET_BASE_PATH + self.TARGET_SCRIPT_PATH + \
+                            self.sep + "sdbmanager.py")
+
+
+    def cpResource(self):
+        if not self.upgrade:
+            self.cpDir(self.CURRENT_SOURCE_BASE_PATH + self.SOURCE_RESOURCE_PATH,
+                       self.CURRENT_TARGET_BASE_PATH + self.TARGET_RESOURCE_PATH, \
+                               "resource")
+
+    def cpPackage(self):
+        self.cpDir(self.CURRENT_SOURCE_BASE_PATH + self.SOURCE_PACKAGE_PATH,
+                   self.CURRENT_TARGET_BASE_PATH + self.TARGET_PACKAGE_PATH, \
+                           "package")
+        for r, d, f in os.walk(self.CURRENT_TARGET_BASE_PATH + \
+                self.TARGET_PACKAGE_PATH):
+            if (platform.system() != "Windows"):
+                os.chmod(r, stat.S_IRWXU | stat.S_IRWXG | stat.S_IRWXO)
+
+    def cpManager(self):
+        if not self.upgrade:
+            self.cpDir(self.CURRENT_SOURCE_BASE_PATH + self.SOURCE_MANAGER_PATH,
+                       self.CURRENT_TARGET_BASE_PATH + self.TARGET_MANAGER_PATH, \
+                               "manager")
+            for r, d, f in os.walk(self.CURRENT_TARGET_BASE_PATH + \
+                    self.TARGET_MANAGER_PATH):
+                if (platform.system() != "Windows"):
+                    os.chmod(r, stat.S_IRWXU | stat.S_IRWXG | stat.S_IRWXO)
+
+    def cpFile(self, src, target):
+        if (not os.path.isfile(src)):
+            print(src + " is not a file")
+            return
+        path = os.path.dirname(target)
+        if (not os.path.isdir(path)):
+            os.makedirs(path)
+        shutil.copy2(src, target)
+
+    def del_rw(self, action, name, exc):
+        if (platform.system() != "Windows"):
+            os.chmod(name, stat.S_IWRITE)
+        os.remove(name)
+
+    def cpDir(self, src, target, name):
+        if (os.path.isdir(src) and not os.path.exists(target)):
+            print("copy " + name + "  dir start")
+            shutil.copytree(src, target)
+            print("copy " + name + "  dir finish")
+        else:
+            if (not os.path.isdir(src)):
+                print("source " + name + " path is not a dir")
+            if (os.path.exists(target)):
+                print ("target " + name + " path is exists")
+                try:
+                    shutil.rmtree(target, onerror=self.del_rw)
+                except Exception, data:
+                    print Exception, ":", data
+
+                print ("target " + name + " dir destroyed")
+                try:
+                    shutil.copytree(src, target)
+                except Exception, data:
+                    print Exception, ":", data
+                print("copy " + name + "  dir finish")
+
+    def clear(self):
+        self.setCurrentPath()
+        try:
+            shutil.rmtree(self.CURRENT_TARGET_BASE_PATH, onerror=self.del_rw)
+        except Exception, data:
+            print Exception, ":", data
+
+    def makeResult(self):
+        mgr_result_folder = os.path.join(self.CURRENT_TARGET_BASE_PATH, \
+                self.tizenV + "/manager/result")
+        shell_result_folder = os.path.join(self.CURRENT_TARGET_BASE_PATH, \
+                self.tizenV + "/shell/result")
+
+        if not os.path.isdir(mgr_result_folder):
+            os.makedirs(mgr_result_folder)
+        else:
+            if not self.upgrade:
+                shutil.rmtree(mgr_result_folder, onerror=self.del_rw)
+                os.makedirs(mgr_result_folder)
+
+        if not os.path.isdir(shell_result_folder):
+            os.makedirs(shell_result_folder)
+        else:
+            if not self.upgrade:
+                shutil.rmtree(shell_result_folder, onerror=self.del_rw)
+                os.makedirs(shell_result_folder)
+        if (platform.system() != "Windows"):
+            os.chmod(shell_result_folder, stat.S_IRWXU | stat.S_IRWXG | stat.S_IRWXO)
+            os.chmod(mgr_result_folder, stat.S_IRWXU | stat.S_IRWXG | stat.S_IRWXO)
+
+    def cp(self):
+        self.setCurrentPath()
+        self.cpDoc()
+        self.cpPackage()
+        self.cpManager()
+        self.cpResource()
+        self.cpScript()
+        self.makeResult()
+
+parser = OptionParser()
+parser.add_option("-i", "--install", dest="install", action="store_true", \
+        default=False, help="copy folders and file into os")
+parser.add_option("-p", "--purge", dest="clear", action="store_true", \
+        default=False, help="clear all files")
+parser.add_option("-t", "--tizen-version", dest="tizenV", \
+        help="set tizen version infomation")
+parser.add_option("-u", "--upgrade", dest="upgrade", action="store_true", \
+        default=False, help="upgrade tct tools")
+
+(options, args) = parser.parse_args()
+
+if options.tizenV is None:
+    print "[ Error : input your tizen version ]"
+    sys.exit(1)
+
+if (options.install):
+    test = CpFile(options.tizenV)
+    test.cp()
+elif (options.clear):
+    test = CpFile(options.tizenV)
+    test.clear()
+elif (options.upgrade):
+    test = CpFile(options.tizenV, options.upgrade)
+    test.cp()
+else:
+    test = CpFile(options.tizenV)
+    test.cp()
diff --git a/release/csharp-tct_6.0_dotnet/tct-setup.py b/release/csharp-tct_6.0_dotnet/tct-setup.py
new file mode 100755 (executable)
index 0000000..f526c87
--- /dev/null
@@ -0,0 +1,175 @@
+# -*- coding:utf-8 -*-
+import os
+import sys
+import shutil
+import stat
+import re
+import tarfile
+import zipfile
+import platform
+
+SCRIPT_VERSION = "1.1"
+WEB_TCT_PATTERN = "^web-tct_\d.\d"
+NATIVE_TCT_PATTERN = "^nativetct_\d.\d"
+CSHARP_TCT_PATTERN = "^csharp-tct_\d.\d"
+
+TOOLS_PATTERN = "^tct-tools"
+
+TCT_INSTALL_SCRIPT = "tct-config-host.py"
+TOOLS_INSTALL_SCRIPT = "tct-config-tools.py"
+
+NATIVE_TCT_TYPE = 0
+WEB_TCT_TYPE = 1
+TOOLS_TYPE = 2
+NORMAL_TYPE = 3
+CSHARP_TCT_TYPE = 4
+
+def make_ver_file(tctV, tizenV):
+    ver_path = "/opt/tct/" + tizenV + "/VERSION"
+    #ver_file = open('/opt/tct/tizen_web_3.0/VERSION', 'wa')
+    ver_file = open(ver_path, 'w')
+    ver_file.write(str(tctV))
+    ver_file.close()
+
+def get_tizenV(afile):
+    tizenV = ""
+    ver = afile.split('_')[1]
+    if afile.find("web") > -1:
+        tizenV = "tizen_web_" + ver
+    elif afile.find("Native") > -1:
+        tizenV = "tizen_native_" + ver
+    elif afile.find("csharp") > -1:
+        tizenV = "tizen_csharp_" + ver
+
+    return tizenV
+
+def install_release_file(afile, file_type, upgrade):
+
+    try:
+        tizenV = None
+        for r,d,f in os.walk(afile):
+            if (platform.system() != "Windows"):
+                os.system("chmod -R 777 "+ r)
+
+        inst_cmd = "python " + TCT_INSTALL_SCRIPT
+        if upgrade:
+            inst_cmd += " --upgrade"
+
+        if file_type is WEB_TCT_TYPE or file_type is CSHARP_TCT_TYPE:
+            tizenV = get_tizenV(afile)
+            os.chdir(afile +"/tools")
+            os.system(inst_cmd + " --tizen-version " + tizenV)
+            os.chdir("../../")
+            make_ver_file(str(afile), tizenV)
+
+        if file_type is NATIVE_TCT_TYPE:
+            tizenV = get_tizenV(afile)
+            os.chdir(afile + "/TCT/native-tct/tools")
+            os.system(inst_cmd + " --tizen-version " + tizenV)
+            os.chdir("../../../../")
+            make_ver_file(str(afile), tizenV)
+
+        if file_type is TOOLS_TYPE:
+            os.chdir(afile)
+            os.system("python "+ TOOLS_INSTALL_SCRIPT)
+            os.chdir("../")
+    except Exception as ex:
+        print (str(ex))
+
+
+def unpack_release_file(afile):
+    if tarfile.is_tarfile(afile):
+        tar = tarfile.open(afile)
+        for tarinfo in tar:
+            msg = tarinfo.name + " is " + str(tarinfo.size) + " bytes in size and is "
+            if tarinfo.isreg():
+                msg += "a regular file."
+            elif tarinfo.isdir():
+                msg += "a directory."
+            else:
+                msg += "something else."
+            print msg
+        tar.extractall()
+        tar.close()
+
+    if zipfile.is_zipfile(afile):
+        zipf = zipfile.ZipFile(afile)
+        zipf.extractall()
+        zipf.close()
+
+def find_release_file(afile):
+    web_tct_pa = re.compile(WEB_TCT_PATTERN, re.I)
+    web_tct_match = web_tct_pa.match(afile)
+
+    native_tct_pa = re.compile(NATIVE_TCT_PATTERN, re.I)
+    native_tct_match = native_tct_pa.match(afile)
+
+    csharp_tct_pa = re.compile(CSHARP_TCT_PATTERN, re.I)
+    csharp_tct_match = csharp_tct_pa.match(afile)
+
+    if web_tct_match:
+        return WEB_TCT_TYPE
+
+    if native_tct_match:
+        return NATIVE_TCT_TYPE
+
+    if csharp_tct_match:
+        return CSHARP_TCT_TYPE
+
+    tools_pa = re.compile(TOOLS_PATTERN, re.I)
+    tools_match = tools_pa.match(afile)
+    if tools_match :
+        return TOOLS_TYPE
+
+    return NORMAL_TYPE
+
+def is_archvie_file(afile):
+    file_extension = get_file_extension(afile)
+    if file_extension == ".gz" or file_extension == ".zip":
+        return True
+    else :
+        return False
+
+def get_file_extension(afile):
+    return os.path.splitext(afile)[1]
+
+def remove_readonly(func, path, excinfo):
+    if (platform.system() != "Windows"):
+        os.chmod(path, stat.S_IWRITE)
+    func(path)
+
+def remove_dir_tree(remove_dir):
+    try:
+        shutil.rmtree(remove_dir, ignore_errors=False, onerror=remove_readonly)
+    except Exception as e:  ## if failed, report it back to the user ##
+        print("[Delete Error] %s - %s." % (e.filename,e.strerror))
+
+def install_tct(upgrade=False):
+    current_path = os.getcwd()
+    filelist = os.listdir(current_path)
+    for file in filelist :
+        file_type = find_release_file(file)
+        if file_type is not NORMAL_TYPE :
+            if is_archvie_file(file) is True:
+                unpack_release_file(file)
+
+    filelist = os.listdir(current_path)
+    for file in filelist:
+        file_type = find_release_file(file)
+        if file_type is not NORMAL_TYPE :
+            if is_archvie_file(file) is False:
+                install_release_file(file, file_type, upgrade)
+
+if len(sys.argv) > 1:
+    if(sys.argv[1]) == 'clean':
+        print("clean option is given")
+        remove_dir_tree("/opt/tct")
+        remove_dir_tree("/opt/tools")
+        remove_dir_tree("/opt/testkit")
+    elif(sys.argv[1]) == 'upgrade':
+        print("upgrade option is given")
+        install_tct(True)
+    else:
+        print("error:invalid option is given")
+else:
+    install_tct(False)
diff --git a/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/TCT_CONFIG b/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/TCT_CONFIG
new file mode 100755 (executable)
index 0000000..fee9308
--- /dev/null
@@ -0,0 +1,9 @@
+[DEVICE]
+DEVICE_SUITE_TARGET_24=/opt/usr/media
+DEVICE_SUITE_TARGET_30=/opt/usr/home/owner/share
+DEVICE_USER_30=/opt/usr/home/owner
+DEVICE_EXECUTION_MODE_30=owner
+DEVICE_PHYSICAL_STORAGE_30=/home/owner/media
+DEVICE_ADMIN_USER_30=owner
+DEVICE_ADMIN_USER_APPS_ROOT_30=/opt/usr/globalapps
+DEVICE_OTHER_USER_APPS_ROOT_30=/opt/usr/home/owner/apps_rw
diff --git a/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/VERSION b/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/VERSION
new file mode 100755 (executable)
index 0000000..2e471da
--- /dev/null
@@ -0,0 +1 @@
+tct-tools_r4_rc1
diff --git a/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/dev_event/lib/efl_util_screenshot_novice-1.0.0-1.armv7l.rpm b/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/dev_event/lib/efl_util_screenshot_novice-1.0.0-1.armv7l.rpm
new file mode 100755 (executable)
index 0000000..fbf53c8
Binary files /dev/null and b/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/dev_event/lib/efl_util_screenshot_novice-1.0.0-1.armv7l.rpm differ
diff --git a/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/dev_event/lib/libpython-2.7.1-1.7.armv7l.rpm b/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/dev_event/lib/libpython-2.7.1-1.7.armv7l.rpm
new file mode 100755 (executable)
index 0000000..4f12725
Binary files /dev/null and b/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/dev_event/lib/libpython-2.7.1-1.7.armv7l.rpm differ
diff --git a/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/dev_event/lib/python-2.7.1-1.4.armv7l.rpm b/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/dev_event/lib/python-2.7.1-1.4.armv7l.rpm
new file mode 100755 (executable)
index 0000000..9d205fb
Binary files /dev/null and b/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/dev_event/lib/python-2.7.1-1.4.armv7l.rpm differ
diff --git a/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/dev_event/lib/python-base-2.7.1-1.7.armv7l.rpm b/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/dev_event/lib/python-base-2.7.1-1.7.armv7l.rpm
new file mode 100755 (executable)
index 0000000..d89618c
Binary files /dev/null and b/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/dev_event/lib/python-base-2.7.1-1.7.armv7l.rpm differ
diff --git a/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/dev_event/tct-monkey b/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/dev_event/tct-monkey
new file mode 100755 (executable)
index 0000000..a63cecf
--- /dev/null
@@ -0,0 +1,38 @@
+#!/usr/bin/python
+
+import sys
+
+from tctmonkey.monkeywrapper import MonkeyWrapper
+from tctmonkey.devicemanager import DeviceManager
+from tctmonkey.monkeyworker import RandomExecutor
+from tctmonkey.monkeyworker import ReplayExecutor
+
+
+def main():
+    wrapper = MonkeyWrapper()
+    wrapper.parse_options(sys.argv)
+
+    dmi = DeviceManager.getInstance()
+
+    mExecutor = []
+    for dev in dmi.getSdbDeviceList():
+        th = None
+        if wrapper.is_py_install():
+            wrapper.python_install(dev.getDeviceId())
+        if wrapper.is_random_mode():
+            th = RandomExecutor(dev.getDeviceId(), wrapper)
+        elif wrapper.is_replay_mode():
+            th = ReplayExecutor(dev.getDeviceId(), wrapper)
+
+        mExecutor.append(th)
+
+    for thread in mExecutor:
+        if thread:
+            thread.start()
+
+    for thread in mExecutor:
+        if thread:
+            thread.join()
+
+if __name__ == "__main__":
+    main()
diff --git a/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/dev_event/tctmonkey/__init__.py b/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/dev_event/tctmonkey/__init__.py
new file mode 100755 (executable)
index 0000000..8b13789
--- /dev/null
@@ -0,0 +1 @@
+
diff --git a/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/dev_event/tctmonkey/constants.py b/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/dev_event/tctmonkey/constants.py
new file mode 100755 (executable)
index 0000000..f861d00
--- /dev/null
@@ -0,0 +1,28 @@
+
+import os
+
+class Constants:
+    LIB_DIR = "/opt/tools/dev_event/lib/"
+    AGENT_PATH = "/opt/tools/dev_event/tctmonkey/fmbttizen-agent.py"
+    UINPUT_AGENT_PATH = "/opt/tools/dev_event/tctmonkey/fmbtuinput.py"
+    DUMP_DIR_PATH = "/opt/share/crash/dump/"
+    RESULT_DIR = "/opt/monkey/result/"
+    RECORD_FILE_NAME = "record_file"
+    SDB_LS = "sdb -s %s shell ls -al"
+    SDB_PUSH = "sdb -s %s push"
+    SDB_SHELL = "sdb -s %s shell"
+    SDB_ROOT_ON = "sdb -s %s root on"
+    SDB_DEVICES = "sdb devices"
+    SDB_START_SERVER = "sdb start-server"
+    SDB_KILL_SERVER = "sdb kill-server"
+    SDB_CONNECT = "sdb connect %s"
+    SDB_PULL = "sdb -s %s pull"
+    SDB_CAT_CONFIG = " cat %s"
+    FILE_FOUND_SCRIPT = "[ -f %s ] && echo \"Found\" || echo \"Not Found\""
+
+    @staticmethod
+    def checkFileExists(aPath):
+        if os.path.exists(aPath):
+            return True
+        else:
+            return False
diff --git a/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/dev_event/tctmonkey/devicemanager.py b/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/dev_event/tctmonkey/devicemanager.py
new file mode 100755 (executable)
index 0000000..c1335d3
--- /dev/null
@@ -0,0 +1,76 @@
+
+from sdbmanager import SdbManager
+
+class DeviceManager(object):
+    INSTANCE = None
+    devices = []
+
+    def __init__(self):
+        if DeviceManager.INSTANCE is not None:
+            raise Exception ("DeviceManager instance already exists")
+
+    @classmethod
+    def getInstance(cls):
+        if cls.INSTANCE is None:
+            cls.INSTANCE = DeviceManager()
+        if len(cls.INSTANCE.devices) < 1:
+            cls.INSTANCE.loadDeviceList()
+        return cls.INSTANCE
+
+    def _updateConnDevice(self, connDevices):
+        self._resetDevices()
+
+        for dev in connDevices:
+            self.devices.append(dev)
+
+    def _resetDevices(self):
+        listSize = len(self.devices)
+        del self.devices[0:listSize]
+
+    def getDeviceSize(self):
+        return len(self.devices)
+
+    def getSdbDeviceList(self):
+        return self.devices
+
+    def loadDeviceList(self):
+        connDevices = []
+        sdbOutLog = SdbManager.sdbDevices()
+        devicesInfo = sdbOutLog.replace("List of devices attached", "")
+        devList = devicesInfo.split('\n')
+
+        for dev in devList:
+            if len(dev) > 1:
+                devInfoItem = dev.split('\t')
+                devId = devInfoItem[0].rstrip()
+                devType = devInfoItem[1].rstrip()
+                devName = devInfoItem[2].rstrip()
+                if not (devType == "unknown" or devType == "offline" \
+                        or devId == "unknown" or devId == "offline"):
+                    connDevices.append(SdbDevice(devId, devName, devType))
+
+        if len(connDevices) > 0:
+            self._updateConnDevice(connDevices)
+            return True
+        else:
+            self._resetDevices()
+            return False
+
+
+class SdbDevice:
+    def __init__(self, devId, devName, devType):
+        self.devId = devId
+        self.devName = devName
+        self.devType = devType
+
+    def _printDevInfo(self):
+        pass
+
+    def getDeviceId(self):
+        return self.devId
+
+    def getDeviceName(self):
+        return self.devName
+
+    def getDeviceType(self):
+        return self.devType
diff --git a/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/dev_event/tctmonkey/fmbttizen-agent.py b/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/dev_event/tctmonkey/fmbttizen-agent.py
new file mode 100755 (executable)
index 0000000..1bd1cd6
--- /dev/null
@@ -0,0 +1,1067 @@
+# fMBT, free Model Based Testing tool
+# Copyright (c) 2013, Intel Corporation.
+#
+# This program is free software; you can redistribute it and/or modify it
+# under the terms and conditions of the GNU Lesser General Public License,
+# version 2.1, as published by the Free Software Foundation.
+#
+# This program is distributed in the hope it will be useful, but WITHOUT
+# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+# FITNESS FOR A PARTICULAR PURPOSE.  See the GNU Lesser General Public License for
+# more details.
+#
+# You should have received a copy of the GNU Lesser General Public License along with
+# this program; if not, write to the Free Software Foundation, Inc.,
+# 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA.
+
+import base64
+import cPickle
+import ctypes
+import fcntl
+import glob
+import os
+import platform
+import re
+import shlex
+import shutil
+import string
+import struct
+import subprocess
+import sys
+import termios
+import time
+import zlib
+
+import fmbtuinput
+
+fmbtuinput.refreshDeviceInfo()
+
+if "--debug" in sys.argv:
+    g_debug = True
+else:
+    g_debug = False
+
+try:
+    _opt_keyboard = [a.split("=")[1] \
+            for a in sys.argv if a.startswith("--keyboard=")][0]
+except IndexError:
+    _opt_keyboard = None
+
+try:
+    _opt_touch = [a.split("=")[1] \
+            for a in sys.argv if a.startswith("--touch=")][0]
+except IndexError:
+    _opt_touch = None
+
+try:
+    _opt_mouse = [a.split("=")[1] \
+            for a in sys.argv if a.startswith("--mouse=")][0]
+except IndexError:
+    _opt_mouse = None
+
+keyboard_device = None
+touch_device = None
+mouse_device = None
+
+
+def openKeyboardDevice(keyboardSpec=None):
+    keyboard_device = None
+    if keyboardSpec == None:
+        try:
+            keyboard_device = openKeyboardDevice("sysrq")
+        except IndexError:
+            keyboard_device = openKeyboardDevice("virtual")
+    elif keyboardSpec in (None, "virtual"):
+        keyboard_device = fmbtuinput.Keyboard().create()
+    elif keyboardSpec.startswith("file:"):
+        keyboard_device = fmbtuinput.Keyboard().open(keyboardSpec.split(":",1)[1])
+    elif keyboardSpec == "sysrq":
+        keyboard_device = fmbtuinput.Keyboard().open(
+            "/dev/input/" + re.findall(
+                '[ =](event[0-9]+)\s',
+                [i for i in devices.split("\n\n") if "sysrq" in i.lower()][0])[0])
+    elif keyboardSpec == "disabled":
+        keyboard_device = None
+    return keyboard_device
+
+
+def openTouchDevice(touchSpec=None, fallback=None):
+    touch_device = None
+    if touchSpec == None:
+        if fallback != None:
+            return openTouchDevice(fallback)
+        else:
+            pass # will return None
+    elif touchSpec.startswith("virtual"):
+        inputResolution=re.findall("virtual:([0-9]*)x([0-9]*)", touchSpec)
+        if inputResolution:
+            maxX = int(inputResolution[0][0])
+            maxY = int(inputResolution[0][1])
+        else:
+            maxX, maxY = None, None
+        touch_device = fmbtuinput.Touch().create(maxX=maxX, maxY=maxY)
+    elif touchSpec.startswith("file:") or touchSpec.startswith("name:"):
+        touch_device = fmbtuinput.Touch().open(touchSpec.split(":",1)[1])
+    elif touchSpec == "disabled":
+        pass # will return None
+    else:
+        raise ValueError('invalid touch device "%s"' % (touchSpec,))
+    return touch_device
+
+
+def openMouseDevice(mouseSpec=None, fallback=None):
+    mouse_device = None
+    if mouseSpec == None:
+        if fallback != None:
+            return openMouseDevice(fallback)
+        else:
+            pass # will return None
+    elif mouseSpec.startswith("virtual:"):
+        abs_or_rel = mouseSpec.split(":",1)[1]
+        if abs_or_rel == "abs":
+            absoluteMove = True
+        elif abs_or_rel == "rel":
+            absoluteMove = False
+        else:
+            raise ValueError('invalid mouse "%s"' % (mouseSpec,))
+        mouse_device = fmbtuinput.Mouse(absoluteMove=absoluteMove).create()
+    elif mouseSpec.startswith("file:") or mouseSpec.startswith("name:"):
+        mouse_device = fmbtuinput.Mouse().open(mouseSpec.split(":",1)[1])
+    elif mouseSpec == "disabled":
+        pass # will return None
+    else:
+        raise ValueError('invalid mouse device "%s"' % (mouseSpec,))
+    return mouse_device
+
+
+def debug(msg):
+    if g_debug:
+        sys.stdout.write("debug: %s\n" % (msg,))
+        sys.stdout.flush()
+
+
+def error(msg, exitstatus=1):
+    sys.stdout.write("fmbttizen-agent: %s\n" % (msg,))
+    sys.stdout.flush()
+    sys.exit(exitstatus)
+
+
+iAmRoot = (os.getuid() == 0)
+
+try:
+    libc           = ctypes.CDLL("libc.so.6")
+    libX11         = ctypes.CDLL("libX11.so.6")
+    libXtst        = ctypes.CDLL("libXtst.so.6")
+    g_Xavailable = True
+    g_keyb = None # no need for virtual keyboard
+except OSError:
+    g_Xavailable = False
+
+if g_Xavailable:
+    class XImage(ctypes.Structure):
+        _fields_ = [
+            ('width'            , ctypes.c_int),
+            ('height'           , ctypes.c_int),
+            ('xoffset'          , ctypes.c_int),
+            ('format'           , ctypes.c_int),
+            ('data'             , ctypes.c_void_p),
+            ('byte_order'       , ctypes.c_int),
+            ('bitmap_unit'      , ctypes.c_int),
+            ('bitmap_bit_order' , ctypes.c_int),
+            ('bitmap_pad'       , ctypes.c_int),
+            ('depth'            , ctypes.c_int),
+            ('bytes_per_line'   , ctypes.c_int),
+            ('bits_per_pixel'   , ctypes.c_int)]
+
+    libc.write.argtypes           = [ctypes.c_int, ctypes.c_void_p, ctypes.c_size_t]
+    libX11.XAllPlanes.restype     = ctypes.c_ulong
+    libX11.XGetImage.restype      = ctypes.POINTER(XImage)
+    libX11.XRootWindow.restype    = ctypes.c_uint32
+    libX11.XOpenDisplay.restype   = ctypes.c_void_p
+    libX11.XDefaultScreen.restype = ctypes.c_int
+    libX11.XGetKeyboardMapping.restype = ctypes.POINTER(ctypes.c_uint32)
+
+    # X11 constants, see Xlib.h
+
+    X_CurrentTime  = ctypes.c_ulong(0)
+    X_False        = ctypes.c_int(0)
+    X_NULL         = ctypes.c_void_p(0)
+    X_True         = ctypes.c_int(1)
+    X_ZPixmap      = ctypes.c_int(2)
+    NoSymbol       = 0
+
+# InputKeys contains key names known to input devices, see
+# linux/input.h or http://www.usb.org/developers/hidpage. The order is
+# significant, because keyCode = InputKeys.index(keyName).
+InputKeys = [
+    "RESERVED", "ESC","1", "2", "3", "4", "5", "6", "7", "8", "9", "0",
+    "MINUS", "EQUAL", "BACKSPACE", "TAB",
+    "Q", "W", "E", "R", "T", "Y", "U", "I", "O", "P",
+    "LEFTBRACE", "RIGHTBRACE", "ENTER", "LEFTCTRL",
+    "A", "S", "D", "F", "G", "H", "J", "K", "L",
+    "SEMICOLON", "APOSTROPHE", "GRAVE", "LEFTSHIFT", "BACKSLASH",
+    "Z", "X", "C", "V", "B", "N", "M",
+    "COMMA", "DOT", "SLASH", "RIGHTSHIFT", "KPASTERISK", "LEFTALT",
+    "SPACE", "CAPSLOCK",
+    "F1", "F2", "F3", "F4", "F5", "F6", "F7", "F8", "F9", "F10",
+    "NUMLOCK", "SCROLLLOCK",
+    "KP7", "KP8", "KP9", "KPMINUS",
+    "KP4", "KP5", "KP6", "KPPLUS",
+    "KP1", "KP2", "KP3", "KP0", "KPDOT",
+    "undefined0",
+    "ZENKAKUHANKAKU", "102ND", "F11", "F12", "RO",
+    "KATAKANA", "HIRAGANA", "HENKAN", "KATAKANAHIRAGANA", "MUHENKAN",
+    "KPJPCOMMA", "KPENTER", "RIGHTCTRL", "KPSLASH", "SYSRQ", "RIGHTALT",
+    "LINEFEED", "HOME", "UP", "PAGEUP", "LEFT", "RIGHT", "END", "DOWN",
+    "PAGEDOWN", "INSERT", "DELETE", "MACRO",
+    "MUTE", "VOLUMEDOWN", "VOLUMEUP",
+    "POWER",
+    "KPEQUAL", "KPPLUSMINUS", "PAUSE", "SCALE", "KPCOMMA", "HANGEUL",
+    "HANGUEL", "HANJA", "YEN", "LEFTMETA", "RIGHTMETA", "COMPOSE"]
+
+_inputKeyNameToCode={}
+for c, n in enumerate(InputKeys):
+    _inputKeyNameToCode[n] = c
+
+# See struct input_event in /usr/include/linux/input.h
+if platform.architecture()[0] == "32bit":
+    _input_event = 'IIHHi'
+else:
+    _input_event = 'QQHHi'
+
+# Event and keycodes are in input.h, too.
+_EV_KEY = 0x01
+_EV_ABS             = 0x03
+_ABS_X              = 0x00
+_ABS_Y              = 0x01
+_ABS_MT_SLOT        = 0x2f
+_ABS_MT_POSITION_X  = 0x35
+_ABS_MT_POSITION_Y  = 0x36
+_ABS_MT_TRACKING_ID = 0x39
+
+_BTN_MOUSE          = 0x110
+
+# Set input device names (in /proc/bus/input/devices)
+# for pressing hardware keys.
+try:
+    cpuinfo = file("/proc/cpuinfo").read()
+except:
+    cpuinfo = ""
+
+def readDeviceInfo():
+    global devices
+    try:
+        devices = file("/proc/bus/input/devices").read()
+    except:
+        devices = ""
+
+readDeviceInfo()
+kbInputDevFd = None
+
+if iAmRoot:
+    debug("hardware detection uses generic defaults")
+    # Unknown platform, guessing best possible defaults for devices
+    _d = devices.split("\n\n")
+    try:
+        power_devname = re.findall('Name=\"([^"]*)\"', [i for i in _d if "power" in i.lower()][0])[0]
+    except IndexError:
+        power_devname = "gpio-keys"
+
+    touch_device = None
+    try:
+        touch_device_f = "file:/dev/input/" + re.findall('[ =](event[0-9]+)\s',  [i for i in _d if "touch" in i.lower()][0])[0]
+    except IndexError:
+        touch_device_f = None
+    touch_device = openTouchDevice(_opt_touch, touch_device_f)
+
+    mouse_device = None
+    try:
+        mouse_device_f = "file:/dev/input/" + re.findall('[ =](event[0-9]+)\s', [i for i in _d if "Mouse" in i][0])[0]
+    except IndexError:
+        mouse_device_f = None
+    mouse_device = openMouseDevice(_opt_mouse, mouse_device_f)
+
+    keyboard_device = openKeyboardDevice(_opt_keyboard)
+
+    hwKeyDevice = {
+        "POWER": power_devname,
+        "VOLUMEUP": "gpio-keys",
+        "VOLUMEDOWN": "gpio-keys",
+        "HOME": "gpio-keys"
+        }
+
+    if isinstance(mouse_device, fmbtuinput.Mouse):
+        time.sleep(1)
+        mouse_device.move(-4096, -4096)
+        mouse_device.setXY(0, 0)
+
+    del _d
+
+if iAmRoot and g_debug:
+    debug("touch device: %s" % (touch_device,))
+    debug("mouse device: %s" % (mouse_device,))
+    debug("keyb device:  %s" % (keyboard_device,))
+
+if iAmRoot and _opt_keyboard and "keyboard_device" not in globals():
+    # Use forced keyboard with any hardware type
+    keyboard_device = openKeyboardDevice(_opt_keyboard)
+
+if "touch_device" in globals() and touch_device:
+    mtInputDevFd = touch_device._fd
+
+if "keyboard_device" in globals() and keyboard_device:
+    kbInputDevFd = keyboard_device._fd
+
+
+# Read input devices
+deviceToEventFile = {}
+for _l in devices.splitlines():
+    if _l.startswith('N: Name="'): _device = _l.split('"')[1]
+    elif _l.startswith("H: Handlers=") and "event" in _l:
+        try: deviceToEventFile[_device] = "/dev/input/" + re.findall("(event[0-9]+)", _l)[0]
+        except Exception, e: pass
+
+screenWidth = None
+screenHeight = None
+
+# Connect to X server, get root window size for screenshots
+display = None
+if g_Xavailable:
+    def resetXConnection():
+        global display, current_screen, root_window, X_AllPlanes
+        if display != None:
+            libX11.XCloseDisplay(display)
+        display        = libX11.XOpenDisplay(X_NULL)
+        if display == 0 or display == None:
+            error("cannot connect to X server")
+        current_screen = libX11.XDefaultScreen(display)
+        root_window    = libX11.XRootWindow(display, current_screen)
+        X_AllPlanes    = libX11.XAllPlanes()
+    resetXConnection()
+
+    ref            = ctypes.byref
+    __rw           = ctypes.c_uint(0)
+    __x            = ctypes.c_int(0)
+    __y            = ctypes.c_int(0)
+    root_width     = ctypes.c_uint(0)
+    root_height    = ctypes.c_uint(0)
+    __bwidth       = ctypes.c_uint(0)
+    root_depth     = ctypes.c_uint(0)
+
+    libX11.XGetGeometry(display, root_window, ref(__rw), ref(__x), ref(__y),
+                        ref(root_width), ref(root_height), ref(__bwidth),
+                        ref(root_depth))
+
+    cMinKeycode        = ctypes.c_int(0)
+    cMaxKeycode        = ctypes.c_int(0)
+    cKeysymsPerKeycode = ctypes.c_int(0)
+    libX11.XDisplayKeycodes(display, ref(cMinKeycode), ref(cMaxKeycode))
+    keysyms = libX11.XGetKeyboardMapping(display,
+                                         cMinKeycode,
+                                         (cMaxKeycode.value - cMinKeycode.value) + 1,
+                                         ref(cKeysymsPerKeycode))
+    shiftModifier = libX11.XKeysymToKeycode(display, libX11.XStringToKeysym("Shift_R"))
+
+    screenWidth = root_width.value
+    screenHeight = root_height.value
+
+def read_cmd():
+    return sys.stdin.readline().strip()
+
+def _encode(obj):
+    return base64.b64encode(cPickle.dumps(obj))
+
+def _decode(string):
+    return cPickle.loads(base64.b64decode(string))
+
+def write_response(ok, value):
+    if ok: p = "FMBTAGENT OK "
+    else: p = "FMBTAGENT ERROR "
+    if not g_debug:
+        response = "%s%s\n" % (p, _encode(value))
+    else:
+        response = "%s%s\n" % (p, value)
+    sys.stdout.write(response)
+    sys.stdout.flush()
+
+def sendHwTap(x, y, button):
+    try:
+        if touch_device:
+            touch_device.tap(x, y)
+        else:
+            mouse_device.tap(x, y, button)
+        return True, None
+    except Exception, e:
+        return False, str(e)
+
+def sendHwMove(x, y):
+    try:
+        if touch_device:
+            touch_device.move(x, y)
+        else:
+            mouse_device.move(x, y)
+        return True, None
+    except Exception, e:
+        return False, str(e)
+
+def sendRelMove(x, y):
+    try:
+        mouse_device.setXY(0,0)
+        mouse_device.move(x, y)
+        mouse_device.setXY(0,0)
+        return True, None
+    except Exception, e:
+        return False, str(e)
+
+def sendHwFingerDown(x, y, button):
+    try:
+        if touch_device:
+            touch_device.pressFinger(button, x, y)
+        else:
+            mouse_device.move(x, y)
+            mouse_device.press(button)
+        return True, None
+    except Exception, e:
+        return False, str(e)
+
+def sendHwFingerUp(x, y, button):
+    try:
+        if touch_device:
+            touch_device.releaseFinger(button)
+        else:
+            mouse_device.move(x, y)
+            mouse_device.release(button)
+        return True, None
+    except Exception, e:
+        return False, str(e)
+
+def sendHwKey(keyName, delayBeforePress, delayBeforeRelease):
+    keyName = keyName.upper()
+    if keyName.startswith("KEY_"):
+        keyName = keyName.lstrip("KEY_")
+    fd = None
+    closeFd = False
+    try:
+        # Explicit IO device defined for the key?
+        inputDevice = deviceToEventFile[hwKeyDevice[keyName]]
+    except:
+        # Fall back to giving input with keyboard - given that there is one
+        if not kbInputDevFd:
+            return False, 'No input device for key "%s"' % (keyName,)
+        fd = kbInputDevFd
+    try: keyCode = _inputKeyNameToCode[keyName]
+    except KeyError:
+        try: keyCode = fmbtuinput.toKeyCode(keyName)
+        except ValueError: return False, 'No keycode for key "%s"' % (keyName,)
+    try:
+        if not fd:
+            fd = os.open(inputDevice, os.O_WRONLY | os.O_NONBLOCK)
+            closeFd = True
+    except: return False, 'Unable to open input device "%s" for writing' % (inputDevice,)
+    if delayBeforePress > 0: time.sleep(delayBeforePress)
+    if delayBeforePress >= 0:
+        if os.write(fd, struct.pack(_input_event, int(time.time()), 0, _EV_KEY, keyCode, 1)) > 0:
+            os.write(fd, struct.pack(_input_event, 0, 0, 0, 0, 0))
+    if delayBeforeRelease > 0: time.sleep(delayBeforeRelease)
+    if delayBeforeRelease >= 0:
+        if os.write(fd, struct.pack(_input_event, int(time.time()), 0, _EV_KEY, keyCode, 0)) > 0:
+            os.write(fd, struct.pack(_input_event, 0, 0, 0, 0, 0))
+    if closeFd:
+        os.close(fd)
+    return True, None
+
+def specialCharToXString(c):
+    c2s = {'\n': "Return",
+           ' ': "space", '!': "exclam", '"': "quotedbl",
+           '#': "numbersign", '$': "dollar", '%': "percent",
+           '&': "ampersand", "'": "apostrophe",
+           '(': "parenleft", ')': "parenright", '*': "asterisk",
+           '+': "plus", '-': "minus", '.': "period", '/': "slash",
+           ':': "colon", ';': "semicolon", '<': "less", '=': "equal",
+           '>': "greater", '?': "question", '@': "at",
+           '_': "underscore"}
+    return c2s.get(c, c)
+
+def specialCharToUsKeys(c):
+    # character -> ([modifier, [modifier...]] keycode)
+    c2s = {'\n': ("KEY_ENTER",),
+           ' ': ("KEY_SPACE",),
+           '`': ("KEY_GRAVE",),      '~': ("KEY_LEFTSHIFT", "KEY_GRAVE"),
+           '!': ("KEY_LEFTSHIFT", "KEY_1"),
+           '@': ("KEY_LEFTSHIFT", "KEY_2"),
+           '#': ("KEY_LEFTSHIFT", "KEY_3"),
+           '$': ("KEY_LEFTSHIFT", "KEY_4"),
+           '%': ("KEY_LEFTSHIFT", "KEY_5"),
+           '^': ("KEY_LEFTSHIFT", "KEY_6"),
+           '&': ("KEY_LEFTSHIFT", "KEY_7"),
+           '*': ("KEY_LEFTSHIFT", "KEY_8"),
+           '(': ("KEY_LEFTSHIFT", "KEY_9"),
+           ')': ("KEY_LEFTSHIFT", "KEY_0"),
+           '-': ("KEY_MINUS",),      '_': ("KEY_LEFTSHIFT", "KEY_MINUS"),
+           '=': ("KEY_EQUAL",),      '+': ("KEY_LEFTSHIFT", "KEY_EQUAL"),
+           '\t': ("KEY_TAB",),
+           '[': ("KEY_LEFTBRACE",),  '{': ("KEY_LEFTSHIFT", "KEY_LEFTBRACE"),
+           ']': ("KEY_RIGHTBRACE",), '}': ("KEY_LEFTSHIFT", "KEY_RIGHTBRACE"),
+           ';': ("KEY_SEMICOLON",),  ':': ("KEY_LEFTSHIFT", "KEY_SEMICOLON"),
+           "'": ("KEY_APOSTROPHE",), '"': ("KEY_LEFTSHIFT", "KEY_APOSTROPHE"),
+           '\\': ("KEY_BACKSLASH",), '|': ("KEY_LEFTSHIFT", "KEY_BACKSLASH"),
+           ',': ("KEY_COMMA",),      '<': ("KEY_LEFTSHIFT", "KEY_COMMA"),
+           '.': ("KEY_DOT",),        '>': ("KEY_LEFTSHIFT", "KEY_DOT"),
+           '/': ("KEY_SLASH",),      '?': ("KEY_LEFTSHIFT", "KEY_SLASH"),
+    }
+    return c2s.get(c, c)
+
+mtEvents = {} # slot -> (tracking_id, x, y)
+
+def inputEventSend(inputDevFd, eventType, event, param):
+    t = time.time()
+    tsec = int(t)
+    tusec = int(1000000*(t-tsec))
+    os.write(inputDevFd, struct.pack(_input_event,
+        tsec, tusec, eventType, event, param))
+
+def mtEventSend(eventType, event, param):
+    """multitouch device event"""
+    return inputEventSend(mtInputDevFd, eventType, event, param)
+
+def mtGestureStart(x, y):
+    mtGestureStart.trackingId += 1
+    trackingId = mtGestureStart.trackingId
+
+    for freeSlot in xrange(16):
+        if not freeSlot in mtEvents: break
+    else: raise ValueError("No free multitouch event slots available")
+
+    mtEvents[freeSlot] = [trackingId, x, y]
+
+    mtEventSend(_EV_ABS, _ABS_MT_SLOT, freeSlot)
+    mtEventSend(_EV_ABS, _ABS_MT_TRACKING_ID, trackingId)
+    mtEventSend(_EV_ABS, _ABS_MT_POSITION_X, x)
+    mtEventSend(_EV_ABS, _ABS_MT_POSITION_Y, y)
+    mtEventSend(_EV_ABS, _ABS_X, x)
+    mtEventSend(_EV_ABS, _ABS_Y, y)
+    mtEventSend(0, 0, 0) # SYNC
+    return freeSlot
+mtGestureStart.trackingId = 0
+
+def mtGestureMove(slot, x, y):
+    if x == mtEvents[slot][1] and y == mtEvents[slot][2]: return
+    mtEventSend(_EV_ABS, _ABS_MT_SLOT, slot)
+    mtEventSend(_EV_ABS, _ABS_MT_TRACKING_ID, mtEvents[slot][0])
+    if x != mtEvents[slot][1] and 0 <= x <= root_width:
+        mtEventSend(_EV_ABS, _ABS_MT_POSITION_X, x)
+        mtEvents[slot][1] = x
+    if y != mtEvents[slot][2] and 0 <= y <= root_height:
+        mtEventSend(_EV_ABS, _ABS_MT_POSITION_Y, y)
+        mtEvents[slot][2] = y
+    if 0 <= x <= root_width:
+        mtEventSend(_EV_ABS, _ABS_X, x)
+    if 0 <= y <= root_height:
+        mtEventSend(_EV_ABS, _ABS_Y, y)
+    mtEventSend(0, 0, 0)
+
+def mtGestureEnd(slot):
+    mtEventSend(_EV_ABS, _ABS_MT_SLOT, slot)
+    mtEventSend(_EV_ABS, _ABS_MT_TRACKING_ID, -1)
+    mtEventSend(0, 0, 0) # SYNC
+    del mtEvents[slot]
+
+def mtLinearGesture(listOfStartEndPoints, duration, movePoints, sleepBeforeMove=0, sleepAfterMove=0):
+    # listOfStartEndPoints: [ [(finger1startX, finger1startY), (finger1endX, finger1endY)],
+    #                         [(finger2startX, finger2startY), (finger2endX, finger2endY)], ...]
+    startPoints = [startEnd[0] for startEnd in listOfStartEndPoints]
+    xDist = [startEnd[1][0] - startEnd[0][0] for startEnd in listOfStartEndPoints]
+    yDist = [startEnd[1][1] - startEnd[0][1] for startEnd in listOfStartEndPoints]
+    movePointsF = float(movePoints)
+    fingers = []
+    for (x, y) in startPoints:
+        fingers.append(mtGestureStart(x, y))
+
+    if sleepBeforeMove > 0: time.sleep(sleepBeforeMove)
+
+    if movePoints > 0:
+        intermediateSleep = float(duration) / movePoints
+        for i in xrange(1, movePoints + 1):
+            if intermediateSleep > 0:
+                time.sleep(intermediateSleep)
+            for fingerIndex, finger in enumerate(fingers):
+                mtGestureMove(finger,
+                              startPoints[fingerIndex][0] + int(xDist[fingerIndex]*i/movePointsF),
+                              startPoints[fingerIndex][1] + int(yDist[fingerIndex]*i/movePointsF))
+
+    if sleepAfterMove > 0: time.sleep(sleepAfterMove)
+
+    for finger in fingers:
+        mtGestureEnd(finger)
+    return True, None
+
+def typeCharX(origChar):
+    modifiers = []
+    c         = specialCharToXString(origChar)
+    keysym    = libX11.XStringToKeysym(c)
+    if keysym == NoSymbol:
+        return False
+    keycode   = libX11.XKeysymToKeycode(display, keysym)
+
+    first = (keycode - cMinKeycode.value) * cKeysymsPerKeycode.value
+
+    try:
+        if chr(keysyms[first + 1]) == origChar:
+            modifiers.append(shiftModifier)
+    except ValueError: pass
+
+    for m in modifiers:
+        libXtst.XTestFakeKeyEvent(display, m, X_True, X_CurrentTime)
+
+    libXtst.XTestFakeKeyEvent(display, keycode, X_True, X_CurrentTime)
+    libXtst.XTestFakeKeyEvent(display, keycode, X_False, X_CurrentTime)
+
+    for m in modifiers[::-1]:
+        libXtst.XTestFakeKeyEvent(display, m, X_False, X_CurrentTime)
+    return True
+
+def typeCharHw(origChar):
+    for c in origChar:
+        modifiers = []
+        keyCode = None
+        c = specialCharToUsKeys(c)
+        if isinstance(c, tuple):
+            modifiers = c[:-1]
+            keyCode = c[-1]
+        elif c in string.uppercase:
+            modifiers = ["KEY_LEFTSHIFT"]
+            keyCode = "KEY_" + c
+        elif c in string.lowercase or c in string.digits:
+            keyCode = "KEY_" + c.upper()
+        else:
+            # do not know how to type the character
+            pass
+        if keyCode:
+            for m in modifiers:
+                keyboard_device.press(m)
+            keyboard_device.tap(keyCode)
+            for m in modifiers[::-1]:
+                keyboard_device.release(m)
+    return True
+
+if g_Xavailable:
+    typeChar = typeCharX
+else:
+    typeChar = typeCharHw
+
+def typeSequence(s, delayBetweenChars=0):
+    skipped = []
+    for c in s:
+        if not typeChar(c):
+            skipped.append(c)
+        if delayBetweenChars != 0:
+            time.sleep(delayBetweenChars)
+    if skipped: return False, skipped
+    else: return True, skipped
+
+def takeScreenshotOnX():
+    image_p = libX11.XGetImage(display, root_window,
+                               0, 0, root_width, root_height,
+                               X_AllPlanes, X_ZPixmap)
+    image = image_p[0]
+    # FMBTRAWX11 image format header:
+    # FMBTRAWX11 [width] [height] [color depth] [bits per pixel]<linefeed>
+    # Binary data
+    rawfmbt_header = "FMBTRAWX11 %d %d %d %d\n" % (
+                     image.width, image.height, root_depth.value, image.bits_per_pixel)
+    rawfmbt_data = ctypes.string_at(image.data, image.height * image.bytes_per_line)
+    compressed_image = rawfmbt_header + zlib.compress(rawfmbt_data, 3)
+    libX11.XDestroyImage(image_p)
+    return True, compressed_image
+
+def westonTakeScreenshotRoot(retry=2):
+    if westonTakeScreenshotRoot.ssFilenames == None:
+        westonTakeScreenshotRoot.ssFilenames = findWestonScreenshotFilenames()
+    if not westonTakeScreenshotRoot.ssFilenames:
+        return False, "cannot find weston screenshot directory"
+    try:
+        for ssFilename in westonTakeScreenshotRoot.ssFilenames:
+            if os.access(ssFilename, os.R_OK):
+                os.remove(ssFilename)
+        keyboard_device.press("KEY_LEFTMETA")
+        keyboard_device.tap("s")
+        keyboard_device.release("KEY_LEFTMETA")
+        time.sleep(0.5)
+        # find which screenshot file got created?
+        for ssFilename in westonTakeScreenshotRoot.ssFilenames:
+            if os.access(ssFilename, os.R_OK):
+                break
+        else:
+            if retry > 0:
+                return westonTakeScreenshotRoot(retry-1)
+            else:
+                return False, "weston did not create any of files %s" % (
+                    westonTakeScreenshotRoot.ssFilenames,)
+        # wait for the screenshot writer to finish
+        writerPid = fuser(ssFilename)
+        if writerPid != None:
+            time.sleep(0.1)
+            while fuser(ssFilename, [writerPid]) != None:
+                time.sleep(0.1)
+        shutil.move(ssFilename, "/tmp/screenshot.png")
+        os.chmod("/tmp/screenshot.png", 0666)
+    except Exception, e:
+        return False, str(e)
+    return True, None
+westonTakeScreenshotRoot.ssFilenames = None
+
+def takeScreenshotOnWeston():
+    if iAmRoot:
+        rv, status = westonTakeScreenshotRoot()
+    else:
+        rv, status = subAgentCommand("root", "tizen", "ss weston-root")
+    if rv == False:
+        return rv, status
+    return True, file("/tmp/screenshot.png").read()
+
+def fuser(filename, usualSuspects=None):
+    """Returns the pid of a user of given file, or None"""
+    filepath = os.path.realpath(filename)
+    if not os.access(filepath, os.R_OK):
+        raise ValueError('No such file: "%s"' % (filename,))
+    if usualSuspects == None:
+        procFds = glob.glob("/proc/[1-9][0-9][0-9]*/fd/*")
+    else:
+        procFds = []
+        for pid in usualSuspects:
+            procFds.extend(glob.glob("/proc/%s/fd/*" % (pid,)))
+    for symlink in procFds:
+        try:
+            if os.path.realpath(symlink) == filepath:
+                return int(symlink.split('/')[2])
+        except OSError:
+            pass
+
+def findWestonScreenshotFilenames():
+    # find weston cwd
+    dirs = []
+    for exe in glob.glob("/proc/[1-9][0-9][0-9]*/exe"):
+        try:
+            if os.path.realpath(exe) == "/usr/bin/weston":
+                dirs.append(os.path.realpath(os.path.dirname(exe) + "/cwd"))
+        except OSError:
+            pass
+    return [d + "/wayland-screenshot.png" for d in sorted(set(dirs))]
+
+if g_Xavailable:
+    takeScreenshot = takeScreenshotOnX
+else:
+    takeScreenshot = takeScreenshotOnWeston
+
+def shellSOE(command, asyncStatus, asyncOut, asyncError, usePty):
+    if usePty:
+        command = '''python -c "import pty; pty.spawn(%s)" ''' % (repr(shlex.split(command)),),
+    if (asyncStatus, asyncOut, asyncError) != (None, None, None):
+        # prepare for decoupled asynchronous execution
+        if asyncStatus == None: asyncStatus = "/dev/null"
+        if asyncOut == None: asyncOut = "/dev/null"
+        if asyncError == None: asyncError = "/dev/null"
+        try:
+            stdinFile = file("/dev/null", "r")
+            stdoutFile = file(asyncOut, "a+")
+            stderrFile = file(asyncError, "a+", 0)
+            statusFile = file(asyncStatus, "a+")
+        except IOError, e:
+            return False, (None, None, e)
+        try:
+            if os.fork() > 0:
+                # parent returns after successful fork, there no
+                # direct visibility to async child process beyond this
+                # point.
+                stdinFile.close()
+                stdoutFile.close()
+                stderrFile.close()
+                statusFile.close()
+                return True, (0, None, None) # async parent finishes here
+        except OSError, e:
+            return False, (None, None, e)
+        os.setsid()
+    else:
+        stdinFile = subprocess.PIPE
+        stdoutFile = subprocess.PIPE
+        stderrFile = subprocess.PIPE
+    try:
+        p = subprocess.Popen(command, shell=True,
+                             stdin=stdinFile,
+                             stdout=stdoutFile,
+                             stderr=stderrFile,
+                             close_fds=True)
+    except Exception, e:
+        return False, (None, None, e)
+    if asyncStatus == None and asyncOut == None and asyncError == None:
+        # synchronous execution, read stdout and stderr
+        out, err = p.communicate()
+    else:
+        # asynchronous execution, store status to file
+        statusFile.write(str(p.wait()) + "\n")
+        statusFile.close()
+        out, err = None, None
+        sys.exit(0) # async child finishes here
+    return True, (p.returncode, out, err)
+
+def waitOutput(nonblockingFd, acceptedOutputs, timeout, pollInterval=0.1):
+    start = time.time()
+    endTime = start + timeout
+    s = ""
+    try: s += nonblockingFd.read()
+    except IOError: pass
+    foundOutputs = [ao for ao in acceptedOutputs if ao in s]
+    while len(foundOutputs) == 0 and time.time() < endTime:
+        time.sleep(pollInterval)
+        try: s += nonblockingFd.read()
+        except IOError: pass
+        foundOutputs = [ao for ao in acceptedOutputs if ao in s]
+    return foundOutputs, s
+
+_subAgents = {}
+def openSubAgent(username, password):
+    p = subprocess.Popen('''python -c 'import pty; pty.spawn(["su", "-c", "python /tmp/fmbttizen-agent.py --sub-agent", "-", "%s"])' ''' % (username,),
+            shell=True,
+            stdin=subprocess.PIPE,
+            stdout=subprocess.PIPE,
+            stderr=subprocess.PIPE)
+
+    # Read in non-blocking mode to ensure agent starts correctly
+    fl = fcntl.fcntl(p.stdout.fileno(), fcntl.F_GETFL)
+    fcntl.fcntl(p.stdout.fileno(), fcntl.F_SETFL, fl | os.O_NONBLOCK)
+
+    output2 = ""
+    seenPrompts, output1 = waitOutput(p.stdout, ["Password:", "FMBTAGENT"], 5.0)
+    if "Password:" in seenPrompts:
+        p.stdin.write(password + "\r")
+        output1 = ""
+        seenPrompts, output2 = waitOutput(p.stdout, ["FMBTAGENT"], 5.0)
+
+    if not "FMBTAGENT" in seenPrompts:
+        p.terminate()
+        return (None, 'fMBT agent with username "%s" does not answer.' % (username,),
+                output1 + output2)
+
+    # Agent is alive, continue in blocking mode
+    fcntl.fcntl(p.stdout.fileno(), fcntl.F_SETFL, fl)
+
+    return p, "", ""
+
+def subAgentCommand(username, password, cmd):
+    if not username in _subAgents:
+        process, output, error = openSubAgent(username, password)
+        if process == None:
+            return None, (-1, output, error)
+        else:
+            _subAgents[username] = process
+    p = _subAgents[username]
+    p.stdin.write(cmd + "\r")
+    p.stdin.flush()
+    answer = p.stdout.readline().rstrip()
+    if answer.startswith("FMBTAGENT OK "):
+        return True, _decode(answer[len("FMBTAGENT OK "):])
+    else:
+        return False, _decode(answer[len("FMBTAGENT ERROR "):])
+
+def closeSubAgents():
+    for username in _subAgents:
+        subAgentCommand(username, None, "quit")
+
+if __name__ == "__main__":
+    try:
+        origTermAttrs = termios.tcgetattr(sys.stdin.fileno())
+        hasTerminal = True
+    except termios.error:
+        origTermAttrs = None
+        hasTerminal = False
+    if hasTerminal and not "--keep-echo" in sys.argv and not "--debug" in sys.argv:
+        # Disable terminal echo
+        newTermAttrs = origTermAttrs
+        newTermAttrs[3] = origTermAttrs[3] &  ~termios.ECHO
+        termios.tcsetattr(sys.stdin.fileno(), termios.TCSANOW, newTermAttrs)
+
+    if "--no-x" in sys.argv:
+        debug("X disabled")
+        g_Xavailable = False
+
+    platformInfo = {}
+    platformInfo["input devices"] = fmbtuinput._g_deviceNames.keys()
+
+    # Send version number, enter main loop
+    write_response(True, platformInfo)
+    cmd = read_cmd()
+    while cmd:
+        if cmd.startswith("bl "): # set display backlight time
+            if iAmRoot:
+                timeout = int(cmd[3:].strip())
+                try:
+                    file("/opt/var/kdb/db/setting/lcd_backlight_normal","wb").write(struct.pack("ii",0x29,timeout))
+                    write_response(True, None)
+                except Exception, e: write_response(False, e)
+            else:
+                write_response(*subAgentCommand("root", "tizen", cmd))
+        elif cmd.startswith("er "): # event recorder
+            if iAmRoot:
+                cmd, arg = cmd.split(" ", 1)
+                if arg.startswith("start "):
+                    filterOpts = _decode(arg.split()[1])
+                    if touch_device:
+                        filterOpts["touchScreen"] = touch_device
+                    fmbtuinput.startQueueingEvents(filterOpts)
+                    write_response(True, None)
+                elif arg == "stop":
+                    events = fmbtuinput.stopQueueingEvents()
+                    write_response(True, None)
+                elif arg == "fetch":
+                    events = fmbtuinput.fetchQueuedEvents()
+                    write_response(True, events)
+            else:
+                write_response(*subAgentCommand("root", "tizen", cmd))
+        elif cmd.startswith("gd"):   # get display status
+            try:
+                p = subprocess.Popen(['/usr/bin/xset', 'q'], stdout=subprocess.PIPE, stderr=subprocess.PIPE)
+                out, err = p.communicate()
+                if "Monitor is Off" in out: write_response(True, "Off")
+                elif "Monitor is On" in out: write_response(True, "On")
+                else: write_response(False, err)
+            except Exception, e: write_response(False, e)
+        elif cmd.startswith("tm "):   # touch move(x, y)
+            xs, ys = cmd[3:].strip().split()
+            if g_Xavailable:
+                libXtst.XTestFakeMotionEvent(display, current_screen, int(xs), int(ys), X_CurrentTime)
+                libX11.XFlush(display)
+            else:
+                if iAmRoot: rv, msg = sendHwMove(int(xs), int(ys))
+                else: rv, msg = subAgentCommand("root", "tizen", cmd)
+            write_response(True, None)
+        elif cmd.startswith("tr "):   # relative move(x, y)
+            xd, yd = cmd[3:].strip().split()
+            if iAmRoot: rv, msg = sendRelMove(int(xd), int(yd))
+            else: rv, msg = subAgentCommand("root", "tizen", cmd)
+            write_response(True, None)
+        elif cmd.startswith("tt "): # touch tap(x, y, button)
+            x, y, button = [int(i) for i in cmd[3:].strip().split()]
+            if g_Xavailable:
+                libXtst.XTestFakeMotionEvent(display, current_screen, x, y, X_CurrentTime)
+                libXtst.XTestFakeButtonEvent(display, button, X_True, X_CurrentTime)
+                libXtst.XTestFakeButtonEvent(display, button, X_False, X_CurrentTime)
+                libX11.XFlush(display)
+                rv, msg = True, None
+            else:
+                if iAmRoot: rv, msg = sendHwTap(x, y, button-1)
+                else: rv, msg = subAgentCommand("root", "tizen", cmd)
+            write_response(rv, msg)
+        elif cmd.startswith("td "): # touch down(x, y, button)
+            xs, ys, button = cmd[3:].strip().split()
+            button = int(button)
+            if g_Xavailable:
+                libXtst.XTestFakeMotionEvent(display, current_screen, int(xs), int(ys), X_CurrentTime)
+                libXtst.XTestFakeButtonEvent(display, button, X_True, X_CurrentTime)
+                libX11.XFlush(display)
+            else:
+                if iAmRoot: rv, msg = sendHwFingerDown(int(xs), int(ys), button-1)
+                else: rv, msg = subAgentCommand("root", "tizen", cmd)
+            write_response(True, None)
+        elif cmd.startswith("tu "): # touch up(x, y, button)
+            xs, ys, button = cmd[3:].strip().split()
+            button = int(button)
+            if g_Xavailable:
+                libXtst.XTestFakeMotionEvent(display, current_screen, int(xs), int(ys), X_CurrentTime)
+                libXtst.XTestFakeButtonEvent(display, button, X_False, X_CurrentTime)
+                libX11.XFlush(display)
+            else:
+                if iAmRoot: rv, msg = sendHwFingerUp(int(xs), int(ys), button-1)
+                else: rv, msg = subAgentCommand("root", "tizen", cmd)
+            write_response(True, None)
+        elif cmd.startswith("kd "): # hw key down
+            if iAmRoot: rv, msg = sendHwKey(cmd[3:], 0, -1)
+            else: rv, msg = subAgentCommand("root", "tizen", cmd)
+            write_response(rv, msg)
+        elif cmd.startswith("kn"): # list input key names
+            if "hwKeyDevice" in globals():
+                hk = hwKeyDevice.keys()
+            else:
+                hk = []
+            if "keyboard_device" in globals():
+                ik = InputKeys
+            else:
+                ik = []
+            write_response(True, sorted(ik + hk))
+        elif cmd.startswith("kp "): # hw key press
+            if iAmRoot: rv, msg = sendHwKey(cmd[3:], 0, 0)
+            else: rv, msg = subAgentCommand("root", "tizen", cmd)
+            write_response(rv, msg)
+        elif cmd.startswith("ku "): # hw key up
+            if iAmRoot: rv, msg = sendHwKey(cmd[3:], -1, 0)
+            else: rv, msg = subAgentCommand("root", "tizen", cmd)
+            write_response(rv, msg)
+        elif cmd.startswith("kt "): # send x events
+            if g_Xavailable:
+                rv, skippedSymbols = typeSequence(_decode(cmd[3:]))
+                libX11.XFlush(display)
+            elif iAmRoot:
+                rv, skippedSymbols = typeSequence(_decode(cmd[3:]),
+                                                  delayBetweenChars=0.05)
+            else:
+                rv, skippedSymbols = subAgentCommand("root", "tizen", cmd)
+            write_response(rv, skippedSymbols)
+        elif cmd.startswith("ml "): # send multitouch linear gesture
+            if iAmRoot:
+                rv, _ = mtLinearGesture(*_decode(cmd[3:]))
+            else:
+                rv, _ = subAgentCommand("root", "tizen", cmd)
+            write_response(rv, _)
+        elif cmd.startswith("ss"): # save screenshot
+            if "R" in cmd.split() and g_Xavailable:
+                resetXConnection()
+            if "weston-root" in cmd.split(): # do Weston root part only
+                write_response(*westonTakeScreenshotRoot())
+            else:
+                rv, compressedImage = takeScreenshot()
+                write_response(rv, compressedImage)
+        elif cmd.startswith("sd "): # set screen dimensions (width and height)
+            _sw, _sh = cmd[3:].split()
+            screenWidth, screenHeight = int(_sw), int(_sh)
+            if iAmRoot:
+                if touch_device:
+                    touch_device.setScreenSize((screenWidth, screenHeight))
+                    rv, msg = True, None
+                else:
+                    rv, msg = True, "no touch device"
+            else:
+                rv, msg = subAgentCommand("root", "tizen", cmd)
+            write_response(rv, msg)
+        elif cmd.startswith("sa "): # set screenshot rotation angle (degrees)
+            if iAmRoot:
+                if touch_device:
+                    _sa = int(cmd[3:])
+                    # compensate it with opposite rotation
+                    touch_device.setScreenAngle(-_sa)
+                    rv, msg = True, None
+                else:
+                    rv, msg = True, "no touch device"
+            else:
+                rv, msg = subAgentCommand("root", "tizen", cmd)
+            write_response(rv, msg)
+        elif cmd.startswith("es "): # execute shell
+            shellCmd, username, password, asyncStatus, asyncOut, asyncError, usePty = _decode(cmd[3:])
+            if username == "":
+                rv, soe = shellSOE(shellCmd, asyncStatus, asyncOut, asyncError, usePty)
+            else:
+                rv, soe = subAgentCommand(username, password,
+                    "es " + _encode((shellCmd, "", "", asyncStatus, asyncOut, asyncError, usePty)))
+            write_response(rv, soe)
+        elif cmd.startswith("quit"): # quit
+            write_response(rv, True)
+            break
+        else:
+            write_response(False, 'Unknown command: "%s"' % (cmd,))
+        cmd = read_cmd()
+
+    closeSubAgents()
+
+    if g_Xavailable:
+        libX11.XCloseDisplay(display)
+
+    if hasTerminal:
+        termios.tcsetattr(sys.stdin.fileno(), termios.TCSANOW, origTermAttrs)
diff --git a/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/dev_event/tctmonkey/fmbtuinput.py b/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/dev_event/tctmonkey/fmbtuinput.py
new file mode 100755 (executable)
index 0000000..5f43079
--- /dev/null
@@ -0,0 +1,1260 @@
+# fMBT, free Model Based Testing tool
+# Copyright (c) 2013, Intel Corporation.
+#
+# This program is free software; you can redistribute it and/or modify it
+# under the terms and conditions of the GNU Lesser General Public License,
+# version 2.1, as published by the Free Software Foundation.
+#
+# This program is distributed in the hope it will be useful, but WITHOUT
+# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+# FITNESS FOR A PARTICULAR PURPOSE.  See the GNU Lesser General Public
+# License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin St - Fifth Floor, Boston, MA
+# 02110-1301 USA.
+
+# pylint: disable = C0103, C0111, R0913
+
+"""
+This library offers Python interface for Linux uinput system.
+
+Mouse, Touch and Keyboard classes can be used for
+creating new mouse, touch and keyboard devices and synthesizing user
+inputs through those devices.
+"""
+
+cmdline_usage = """
+Usage: python fmbtuinput.py -p <list-of-input-device-files>
+
+Example: python fmbtuinput.py -p /dev/input/event*
+"""
+
+import array
+import glob
+import os
+import platform
+import re
+import struct
+import thread
+import time
+import Queue
+
+if os.name != "nt":
+    import fcntl
+else:
+    class fcntl:
+        def __getattr__(self, attr):
+            raise NotImplementedError("%s not available on Windows" % (attr,))
+
+# See /usr/include/linux/input.h
+eventTypes = {
+    "EV_SYN":                  0x00,
+    "EV_KEY":                  0x01,
+    "EV_REL":                  0x02,
+    "EV_ABS":                  0x03,
+    "EV_MSC":                  0x04,
+    "EV_SW":                   0x05,
+    "EV_LED":                  0x11,
+    "EV_SND":                  0x12,
+    "EV_REP":                  0x14,
+    "EV_FF":                   0x15,
+    "EV_PWR":                  0x16,
+    "EV_FF_STATUS":            0x17,
+    "EV_MAX":                  0x1f,
+    }
+
+keyCodes = {
+    "KEY_RESERVED":            0,
+    "KEY_ESC":                 1,
+    "KEY_1":                   2,
+    "KEY_2":                   3,
+    "KEY_3":                   4,
+    "KEY_4":                   5,
+    "KEY_5":                   6,
+    "KEY_6":                   7,
+    "KEY_7":                   8,
+    "KEY_8":                   9,
+    "KEY_9":                   10,
+    "KEY_0":                   11,
+    "KEY_MINUS":               12,
+    "KEY_EQUAL":               13,
+    "KEY_BACKSPACE":           14,
+    "KEY_TAB":                 15,
+    "KEY_Q":                   16,
+    "KEY_W":                   17,
+    "KEY_E":                   18,
+    "KEY_R":                   19,
+    "KEY_T":                   20,
+    "KEY_Y":                   21,
+    "KEY_U":                   22,
+    "KEY_I":                   23,
+    "KEY_O":                   24,
+    "KEY_P":                   25,
+    "KEY_LEFTBRACE":           26,
+    "KEY_RIGHTBRACE":          27,
+    "KEY_ENTER":               28,
+    "KEY_LEFTCTRL":            29,
+    "KEY_A":                   30,
+    "KEY_S":                   31,
+    "KEY_D":                   32,
+    "KEY_F":                   33,
+    "KEY_G":                   34,
+    "KEY_H":                   35,
+    "KEY_J":                   36,
+    "KEY_K":                   37,
+    "KEY_L":                   38,
+    "KEY_SEMICOLON":           39,
+    "KEY_APOSTROPHE":          40,
+    "KEY_GRAVE":               41,
+    "KEY_LEFTSHIFT":           42,
+    "KEY_BACKSLASH":           43,
+    "KEY_Z":                   44,
+    "KEY_X":                   45,
+    "KEY_C":                   46,
+    "KEY_V":                   47,
+    "KEY_B":                   48,
+    "KEY_N":                   49,
+    "KEY_M":                   50,
+    "KEY_COMMA":               51,
+    "KEY_DOT":                 52,
+    "KEY_SLASH":               53,
+    "KEY_RIGHTSHIFT":          54,
+    "KEY_KPASTERISK":          55,
+    "KEY_LEFTALT":             56,
+    "KEY_SPACE":               57,
+    "KEY_CAPSLOCK":            58,
+    "KEY_F1":                  59,
+    "KEY_F2":                  60,
+    "KEY_F3":                  61,
+    "KEY_F4":                  62,
+    "KEY_F5":                  63,
+    "KEY_F6":                  64,
+    "KEY_F7":                  65,
+    "KEY_F8":                  66,
+    "KEY_F9":                  67,
+    "KEY_F10":                 68,
+    "KEY_NUMLOCK":             69,
+    "KEY_SCROLLLOCK":          70,
+    "KEY_KP7":                 71,
+    "KEY_KP8":                 72,
+    "KEY_KP9":                 73,
+    "KEY_KPMINUS":             74,
+    "KEY_KP4":                 75,
+    "KEY_KP5":                 76,
+    "KEY_KP6":                 77,
+    "KEY_KPPLUS":              78,
+    "KEY_KP1":                 79,
+    "KEY_KP2":                 80,
+    "KEY_KP3":                 81,
+    "KEY_KP0":                 82,
+    "KEY_KPDOT":               83,
+
+    "KEY_ZENKAKUHANKAKU":      85,
+    "KEY_102ND":               86,
+    "KEY_F11":                 87,
+    "KEY_F12":                 88,
+    "KEY_RO":                  89,
+    "KEY_KATAKANA":            90,
+    "KEY_HIRAGANA":            91,
+    "KEY_HENKAN":              92,
+    "KEY_KATAKANAHIRAGANA":    93,
+    "KEY_MUHENKAN":            94,
+    "KEY_KPJPCOMMA":           95,
+    "KEY_KPENTER":             96,
+    "KEY_RIGHTCTRL":           97,
+    "KEY_KPSLASH":             98,
+    "KEY_SYSRQ":               99,
+    "KEY_RIGHTALT":            100,
+    "KEY_LINEFEED":            101,
+    "KEY_HOME":                102,
+    "KEY_UP":                  103,
+    "KEY_PAGEUP":              104,
+    "KEY_LEFT":                105,
+    "KEY_RIGHT":               106,
+    "KEY_END":                 107,
+    "KEY_DOWN":                108,
+    "KEY_PAGEDOWN":            109,
+    "KEY_INSERT":              110,
+    "KEY_DELETE":              111,
+    "KEY_MACRO":               112,
+    "KEY_MUTE":                113,
+    "KEY_VOLUMEDOWN":          114,
+    "KEY_VOLUMEUP":            115,
+    "KEY_POWER":               116,
+    "KEY_KPEQUAL":             117,
+    "KEY_KPPLUSMINUS":         118,
+    "KEY_PAUSE":               119,
+    "KEY_SCALE":               120,
+
+    "KEY_KPCOMMA":             121,
+    "KEY_HANGEUL":             122,
+    "KEY_HANJA":               123,
+    "KEY_YEN":                 124,
+    "KEY_LEFTMETA":            125,
+    "KEY_RIGHTMETA":           126,
+    "KEY_COMPOSE":             127,
+
+    "KEY_STOP":                128,
+    "KEY_AGAIN":               129,
+    "KEY_PROPS":               130,
+    "KEY_UNDO":                131,
+    "KEY_FRONT":               132,
+    "KEY_COPY":                133,
+    "KEY_OPEN":                134,
+    "KEY_PASTE":               135,
+    "KEY_FIND":                136,
+    "KEY_CUT":                 137,
+    "KEY_HELP":                138,
+    "KEY_MENU":                139,
+    "KEY_CALC":                140,
+    "KEY_SETUP":               141,
+    "KEY_SLEEP":               142,
+    "KEY_WAKEUP":              143,
+    "KEY_FILE":                144,
+    "KEY_SENDFILE":            145,
+    "KEY_DELETEFILE":          146,
+    "KEY_XFER":                147,
+    "KEY_PROG1":               148,
+    "KEY_PROG2":               149,
+    "KEY_WWW":                 150,
+    "KEY_MSDOS":               151,
+    "KEY_COFFEE":              152,
+    "KEY_DIRECTION":           153,
+    "KEY_CYCLEWINDOWS":        154,
+    "KEY_MAIL":                155,
+    "KEY_BOOKMARKS":           156,
+    "KEY_COMPUTER":            157,
+    "KEY_BACK":                158,
+    "KEY_FORWARD":             159,
+    "KEY_CLOSECD":             160,
+    "KEY_EJECTCD":             161,
+    "KEY_EJECTCLOSECD":        162,
+    "KEY_NEXTSONG":            163,
+    "KEY_PLAYPAUSE":           164,
+    "KEY_PREVIOUSSONG":        165,
+    "KEY_STOPCD":              166,
+    "KEY_RECORD":              167,
+    "KEY_REWIND":              168,
+    "KEY_PHONE":               169,
+    "KEY_ISO":                 170,
+    "KEY_CONFIG":              171,
+    "KEY_HOMEPAGE":            172,
+    "KEY_REFRESH":             173,
+    "KEY_EXIT":                174,
+    "KEY_MOVE":                175,
+    "KEY_EDIT":                176,
+    "KEY_SCROLLUP":            177,
+    "KEY_SCROLLDOWN":          178,
+    "KEY_KPLEFTPAREN":         179,
+    "KEY_KPRIGHTPAREN":        180,
+    "KEY_NEW":                 181,
+    "KEY_REDO":                182,
+
+    "KEY_F13":                 183,
+    "KEY_F14":                 184,
+    "KEY_F15":                 185,
+    "KEY_F16":                 186,
+    "KEY_F17":                 187,
+    "KEY_F18":                 188,
+    "KEY_F19":                 189,
+    "KEY_F20":                 190,
+    "KEY_F21":                 191,
+    "KEY_F22":                 192,
+    "KEY_F23":                 193,
+    "KEY_F24":                 194,
+
+    "KEY_PLAYCD":              200,
+    "KEY_PAUSECD":             201,
+    "KEY_PROG3":               202,
+    "KEY_PROG4":               203,
+    "KEY_DASHBOARD":           204,
+    "KEY_SUSPEND":             205,
+    "KEY_CLOSE":               206,
+    "KEY_PLAY":                207,
+    "KEY_FASTFORWARD":         208,
+    "KEY_BASSBOOST":           209,
+    "KEY_PRINT":               210,
+    "KEY_HP":                  211,
+    "KEY_CAMERA":              212,
+    "KEY_SOUND":               213,
+    "KEY_QUESTION":            214,
+    "KEY_EMAIL":               215,
+    "KEY_CHAT":                216,
+    "KEY_SEARCH":              217,
+    "KEY_CONNECT":             218,
+    "KEY_FINANCE":             219,
+    "KEY_SPORT":               220,
+    "KEY_SHOP":                221,
+    "KEY_ALTERASE":            222,
+    "KEY_CANCEL":              223,
+    "KEY_BRIGHTNESSDOWN":      224,
+    "KEY_BRIGHTNESSUP":        225,
+    "KEY_MEDIA":               226,
+
+    "KEY_SWITCHVIDEOMODE":     227,
+
+    "KEY_KBDILLUMTOGGLE":      228,
+    "KEY_KBDILLUMDOWN":        229,
+    "KEY_KBDILLUMUP":          230,
+
+    "KEY_SEND":                231,
+    "KEY_REPLY":               232,
+    "KEY_FORWARDMAIL":         233,
+    "KEY_SAVE":                234,
+    "KEY_DOCUMENTS":           235,
+
+    "KEY_BATTERY":             236,
+
+    "KEY_BLUETOOTH":           237,
+    "KEY_WLAN":                238,
+    "KEY_UWB":                 239,
+
+    "KEY_UNKNOWN":             240,
+
+    "KEY_VIDEO_NEXT":          241,
+    "KEY_VIDEO_PREV":          242,
+    "KEY_BRIGHTNESS_CYCLE":    243,
+    "KEY_BRIGHTNESS_ZERO":     244,
+    "KEY_DISPLAY_OFF":         245,
+
+    "KEY_WIMAX":               246,
+    "KEY_RFKILL":              247,
+
+    "KEY_MICMUTE":             248,
+
+    "BTN_MISC":                0x100,
+    "BTN_0":                   0x100,
+    "BTN_1":                   0x101,
+    "BTN_2":                   0x102,
+    "BTN_3":                   0x103,
+    "BTN_4":                   0x104,
+    "BTN_5":                   0x105,
+    "BTN_6":                   0x106,
+    "BTN_7":                   0x107,
+    "BTN_8":                   0x108,
+    "BTN_9":                   0x109,
+
+    "BTN_MOUSE":               0x110,
+    "BTN_LEFT":                0x110,
+    "BTN_RIGHT":               0x111,
+    "BTN_MIDDLE":              0x112,
+    "BTN_SIDE":                0x113,
+    "BTN_EXTRA":               0x114,
+    "BTN_FORWARD":             0x115,
+    "BTN_BACK":                0x116,
+    "BTN_TASK":                0x117,
+
+    "BTN_JOYSTICK":            0x120,
+    "BTN_TRIGGER":             0x120,
+    "BTN_THUMB":               0x121,
+    "BTN_THUMB2":              0x122,
+    "BTN_TOP":                 0x123,
+    "BTN_TOP2":                0x124,
+    "BTN_PINKIE":              0x125,
+    "BTN_BASE":                0x126,
+    "BTN_BASE2":               0x127,
+    "BTN_BASE3":               0x128,
+    "BTN_BASE4":               0x129,
+    "BTN_BASE5":               0x12a,
+    "BTN_BASE6":               0x12b,
+    "BTN_DEAD":                0x12f,
+
+    "BTN_GAMEPAD":             0x130,
+    "BTN_A":                   0x130,
+    "BTN_B":                   0x131,
+    "BTN_C":                   0x132,
+    "BTN_X":                   0x133,
+    "BTN_Y":                   0x134,
+    "BTN_Z":                   0x135,
+    "BTN_TL":                  0x136,
+    "BTN_TR":                  0x137,
+    "BTN_TL2":                 0x138,
+    "BTN_TR2":                 0x139,
+    "BTN_SELECT":              0x13a,
+    "BTN_START":               0x13b,
+    "BTN_MODE":                0x13c,
+    "BTN_THUMBL":              0x13d,
+    "BTN_THUMBR":              0x13e,
+
+    "BTN_DIGI":                0x140,
+    "BTN_TOOL_PEN":            0x140,
+    "BTN_TOOL_RUBBER":         0x141,
+    "BTN_TOOL_BRUSH":          0x142,
+    "BTN_TOOL_PENCIL":         0x143,
+    "BTN_TOOL_AIRBRUSH":       0x144,
+    "BTN_TOOL_FINGER":         0x145,
+    "BTN_TOOL_MOUSE":          0x146,
+    "BTN_TOOL_LENS":           0x147,
+    "BTN_TOOL_QUINTTAP":       0x148,
+    "BTN_TOUCH":               0x14a,
+    "BTN_STYLUS":              0x14b,
+    "BTN_STYLUS2":             0x14c,
+    "BTN_TOOL_DOUBLETAP":      0x14d,
+    "BTN_TOOL_TRIPLETAP":      0x14e,
+    "BTN_TOOL_QUADTAP":        0x14f,
+
+    "BTN_WHEEL":               0x150,
+    "BTN_GEAR_DOWN":           0x150,
+    "BTN_GEAR_UP":             0x151,
+    }
+
+relCodes = {
+    "REL_X":                   0x00,
+    "REL_Y":                   0x01,
+    "REL_Z":                   0x02,
+    "REL_RX":                  0x03,
+    "REL_RY":                  0x04,
+    "REL_RZ":                  0x05,
+    "REL_HWHEEL":              0x06,
+    "REL_DIAL":                0x07,
+    "REL_WHEEL":               0x08,
+    "REL_MISC":                0x09,
+    "REL_MAX":                 0x0f,
+    }
+
+absCodes = {
+    "ABS_X":                   0x00,
+    "ABS_Y":                   0x01,
+    "ABS_Z":                   0x02,
+    "ABS_RX":                  0x03,
+    "ABS_RY":                  0x04,
+    "ABS_RZ":                  0x05,
+    "ABS_THROTTLE":            0x06,
+    "ABS_RUDDER":              0x07,
+    "ABS_WHEEL":               0x08,
+    "ABS_GAS":                 0x09,
+    "ABS_BRAKE":               0x0a,
+    "ABS_HAT0X":               0x10,
+    "ABS_HAT0Y":               0x11,
+    "ABS_HAT1X":               0x12,
+    "ABS_HAT1Y":               0x13,
+    "ABS_HAT2X":               0x14,
+    "ABS_HAT2Y":               0x15,
+    "ABS_HAT3X":               0x16,
+    "ABS_HAT3Y":               0x17,
+    "ABS_PRESSURE":            0x18,
+    "ABS_DISTANCE":            0x19,
+    "ABS_TILT_X":              0x1a,
+    "ABS_TILT_Y":              0x1b,
+    "ABS_TOOL_WIDTH":          0x1c,
+
+    "ABS_VOLUME":              0x20,
+
+    "ABS_MISC":                0x28,
+
+    "ABS_MT_SLOT":             0x2f,
+    "ABS_MT_TOUCH_MAJOR":      0x30,
+    "ABS_MT_TOUCH_MINOR":      0x31,
+    "ABS_MT_WIDTH_MAJOR":      0x32,
+    "ABS_MT_WIDTH_MINOR":      0x33,
+    "ABS_MT_ORIENTATION":      0x34,
+    "ABS_MT_POSITION_X":       0x35,
+    "ABS_MT_POSITION_Y":       0x36,
+    "ABS_MT_TOOL_TYPE":        0x37,
+    "ABS_MT_BLOB_ID":          0x38,
+    "ABS_MT_TRACKING_ID":      0x39,
+    "ABS_MT_PRESSURE":         0x3a,
+    "ABS_MT_DISTANCE":         0x3b,
+
+    "ABS_MAX":                 0x3f,
+    }
+
+mscCodes = {
+    "MSC_SERIAL":              0x00,
+    "MSC_PULSELED":            0x01,
+    "MSC_GESTURE":             0x02,
+    "MSC_RAW":                 0x03,
+    "MSC_SCAN":                0x04,
+    "MSC_TIMESTAMP":           0x05,
+    "MSC_MAX":                 0x07,
+    "MSC_CNT":                 0x08,
+}
+
+abs_count = absCodes['ABS_MAX'] + 1
+
+event_codetables = {
+    eventTypes["EV_SYN"]: {},
+    eventTypes["EV_KEY"]: keyCodes,
+    eventTypes["EV_REL"]: relCodes,
+    eventTypes["EV_ABS"]: absCodes,
+}
+
+BUS_PCI       = 0x01
+BUS_ISAPNP    = 0x02
+BUS_USB       = 0x03
+BUS_HIL       = 0x04
+BUS_BLUETOOTH = 0x05
+BUS_VIRTUAL   = 0x06
+
+# See struct input_event in /usr/include/linux/input.h
+if platform.architecture()[0] == "32bit":
+    struct_timeval = "II"
+else:
+    struct_timeval = "QQ"
+
+struct_input_event = struct_timeval + 'HHi'
+sizeof_input_event = struct.calcsize(struct_input_event)
+
+struct_input_id    = 'HHHH'
+struct_uinput_user_dev = ('80s' +
+                          struct_input_id +
+                          'i' +
+                          str(abs_count) + 'i' +
+                          str(abs_count) + 'i' +
+                          str(abs_count) + 'i' +
+                          str(abs_count) + 'i')
+sizeof_uinput_user_dev = struct.calcsize(struct_uinput_user_dev)
+
+struct_input_absinfo = 'iiii'
+
+# asm-generic/ioctl.h:
+IOC_NRBITS = 8
+IOC_TYPEBITS = 8
+IOC_SIZEBITS = 14
+IOC_DIRBITS = 2
+
+IOC_NRSHIFT = 0
+IOC_TYPESHIFT = IOC_NRSHIFT + IOC_NRBITS
+IOC_SIZESHIFT = IOC_TYPESHIFT + IOC_TYPEBITS
+IOC_DIRSHIFT = IOC_SIZESHIFT + IOC_SIZEBITS
+
+IOC_NONE = 0
+IOC_WRITE = 1
+IOC_READ = 2
+
+def IOC(dir_, type_, nr, size):
+    return ((dir_ << IOC_DIRSHIFT) |
+            (type_ << IOC_TYPESHIFT) |
+            (nr << IOC_NRSHIFT) |
+            (size << IOC_SIZESHIFT))
+def IO(type_, nr):
+    return IOC(IOC_NONE, type_, nr, 0)
+def IOR(type_, nr, size):
+    return IOC(IOC_READ, type_, nr, struct.calcsize(size))
+def IOW(type_, nr, size):
+    return IOC(IOC_WRITE, type_, nr, struct.calcsize(size))
+def EVIOCGABS(abs):
+    return IOR(ord('E'), 0x40 + (abs), struct_input_absinfo)
+
+UINPUT_IOCTL_BASE = ord('U')
+UI_DEV_CREATE = IO(UINPUT_IOCTL_BASE, 1)
+UI_DEV_DESTROY = IO(UINPUT_IOCTL_BASE, 2)
+
+UI_SET_EVBIT  = IOW(UINPUT_IOCTL_BASE, 100, 'i')
+UI_SET_KEYBIT = IOW(UINPUT_IOCTL_BASE, 101, 'i')
+UI_SET_RELBIT = IOW(UINPUT_IOCTL_BASE, 102, 'i')
+UI_SET_ABSBIT = IOW(UINPUT_IOCTL_BASE, 103, 'i')
+
+# inverse lookup tables for event/key/rel/abs codes
+eventTypesInv = {}
+keyCodesInv = {}
+relCodesInv = {}
+absCodesInv = {}
+for d in ["eventTypes", "keyCodes",
+          "relCodes", "absCodes"]:
+    globals()[d + "Inv"] = dict([(v, k) for k, v in globals()[d].iteritems()])
+
+def toKeyCode(keyCodeOrName):
+    if isinstance(keyCodeOrName, int):
+        return keyCodeOrName
+    elif keyCodeOrName in keyCodes:
+        return keyCodes[keyCodeOrName]
+    elif keyCodeOrName.upper() in keyCodes:
+        return keyCodes[keyCodeOrName.upper(keyCodeOrName)]
+    elif ("KEY_" + keyCodeOrName.upper()) in keyCodes:
+        return keyCodes["KEY_" + keyCodeOrName.upper()]
+    else:
+        raise ValueError('Invalid keycode "%s"' % (keyCodeOrName,))
+
+def toKeyName(keyCode):
+    if keyCode in keyCodesInv:
+        return keyCodesInv[keyCode]
+    else:
+        raise ValueError('Invalid keycode "%s"' % (keyCode,))
+
+def toButtonCode(buttonCodeOrName):
+    if isinstance(buttonCodeOrName, str):
+        buttonCode = toKeyCode(buttonCodeOrName)
+    elif buttonCodeOrName < 0xf:
+        buttonCode = keyCodes["BTN_MOUSE"] + buttonCodeOrName
+    else:
+        buttonCode = buttonCodeOrName
+    return buttonCode
+
+def refreshDeviceInfo():
+    global _g_devices
+    global _g_deviceNames
+    global _g_filenames
+    _g_devices = file("/proc/bus/input/devices").read().split("\n\n")
+    _g_deviceNames = {}
+    _g_filenames = {}
+    for d in _g_devices:
+        if d.strip() == "":
+            continue
+        _name = [line.split('"')[1] for line in d.split('\n')
+                 if line.startswith('N: ')][0]
+        _g_deviceNames[_name] = ("/dev/input/" + 
+                                 re.findall('[ =](event[0-9]+)\s', d)[0])
+        _g_filenames[_g_deviceNames[_name]] = _name
+
+def toEventFilename(deviceName):
+    return _g_deviceNames[deviceName]
+
+def toEventDeviceName(filename):
+    return _g_filenames[filename]
+
+class InputDevice(object):
+    def __init__(self):
+        if not "_g_devices" in globals():
+            refreshDeviceInfo()
+        self._fd = -1
+        self._filename = None
+        self._uidev = None
+        self._created = False
+        self._opened = False
+        self._name = None
+
+    def __del__(self):
+        if self._created:
+            self.destroy()
+
+    def __str__(self):
+        return "%s(name=%s, filename=%s, created=%s, opened=%s, fd=%s)" % (
+            self.__class__.__name__,
+            repr(self._name),
+            repr(self._filename),
+            repr(self._created),
+            repr(self._opened),
+            repr(self._fd))
+
+    def startCreating(self, name, vendor, product, version,
+                      absmin=None, absmax=None):
+        if self._fd > 0:
+            raise InputDeviceError("InputDevice is already open")
+        self._fd = os.open("/dev/uinput", os.O_WRONLY | os.O_NONBLOCK)
+        if absmin == None:
+            absmin = [0 for _ in xrange(abs_count)]
+        if absmax == None:
+            absmax = [0 for _ in xrange(abs_count)]
+        absfuzz = [0 for _ in xrange(abs_count)]
+        absflat = [0 for _ in xrange(abs_count)]
+        self._name = name
+        self._uidev = struct.pack(struct_uinput_user_dev,
+                                  name, # name
+                                  BUS_USB, # id.bus_type
+                                  vendor, # id.vendor
+                                  product, # id.product
+                                  version, # id.version
+                                  0, # ff_effects_max
+                                  # TODO: why absmin + absmax gives
+                                  # error for touch?
+                                  *(absmax + absmin + absfuzz + absflat)
+                              )
+
+    def finishCreating(self):
+        if self._fd < 1:
+            raise InputDeviceError("startCreating() not called")
+        bytes_written = os.write(self._fd, self._uidev)
+        if bytes_written != sizeof_uinput_user_dev:
+            raise InputDeviceError(
+                "Writing to /dev/uinput failed, wrote %s/%s bytes"
+                % (bytes_written, sizeof_uinput_user_dev))
+        rv = fcntl.ioctl(self._fd, UI_DEV_CREATE)
+        if rv != 0:
+            raise InputDeviceError(
+                "Creating device failed, ioctl UI_DEV_CREATE returned %s"
+                % (rv,))
+        self._created = True
+        return True
+
+    def destroy(self):
+        if self._created:
+            fcntl.ioctl(self._fd, UI_DEV_DESTROY)
+            self._created = False
+        self.close()
+
+    def open(self, filename):
+        if self._fd > 0:
+            raise InputDeviceError("InputDevice is already open")
+        if not filename.startswith("/dev/input"):
+            filename = toEventFilename(filename)
+        self._fd = os.open(filename, os.O_WRONLY | os.O_NONBLOCK)
+        self._filename = filename
+        self._created = False
+        self._name = toEventDeviceName(self._filename)
+        return self
+
+    def close(self):
+        if self._fd > 0:
+            os.close(self._fd)
+            self._fd = -1
+
+    def filename(self):
+        return self._filename
+
+    def addCap(self, capBit, capCodeOrName, capCode2Name):
+        if self._fd < 1:
+            raise InputDeviceError("startCreating() not called")
+        if self._created or self._opened:
+            raise InputDeviceError("Cannot add capabilities after creation")
+        if isinstance(capCodeOrName, int):
+            capCode = capCodeOrName
+        elif capCodeOrName in capCode2Name:
+            capCode = capCode2Name[capCodeOrName]
+        else:
+            raise InputDeviceError('Unknown name "%s"' % (capCodeOrName,))
+        return fcntl.ioctl(self._fd, capBit, capCode)
+
+    def addEvent(self, eventCodeOrName):
+        return self.addCap(UI_SET_EVBIT, eventCodeOrName, eventTypes)
+
+    def addKey(self, keyCodeOrName):
+        return self.addCap(UI_SET_KEYBIT, keyCodeOrName, keyCodes)
+
+    def addRel(self, relCodeOrName):
+        return self.addCap(UI_SET_RELBIT, relCodeOrName, relCodes)
+
+    def addAbs(self, absCodeOrName):
+        return self.addCap(UI_SET_ABSBIT, absCodeOrName, absCodes)
+
+    def send(self, type_, code, value):
+        if self._fd < 1:
+            raise InputDeviceError("InputDevice is not open")
+        if isinstance(type_, str):
+            typeCode = eventTypes[type_]
+        else:
+            typeCode = type_
+        if isinstance(code, str):
+            codeCode = event_codetables[typeCode][code]
+        else:
+            codeCode = code
+        return sendInputEvent(self._fd, typeCode, codeCode, value)
+
+    def sync(self):
+        if self._fd < 1:
+            raise InputDeviceError("InputDevice is not open")
+        return sendInputSync(self._fd)
+
+class InputDeviceError(Exception):
+    pass
+
+class Mouse(InputDevice):
+    def __init__(self, absoluteMove=False):
+        """
+        Parameters:
+
+          absoluteMove (boolean, optional)
+                  force move(x,y) to send absolute coordinates instead
+                  of standard relative movement. This helps avoiding
+                  mouse pointer drift in some occasions. The default
+                  is False.
+        """
+        InputDevice.__init__(self)
+        self._x = 0
+        self._y = 0
+        self._sendAbs = absoluteMove
+
+    def create(self, name="Virtual fMBT Mouse",
+               vendor=0xf4b7, product=0x4053, version=1):
+
+        self.startCreating(name, vendor, product, version)
+        self.addEvent("EV_KEY")
+        self.addEvent("EV_REL")
+        if self._sendAbs:
+            self.addEvent("EV_ABS")
+        self.addEvent("EV_SYN")
+        self.addRel("REL_X")
+        self.addRel("REL_Y")
+        self.addRel("REL_HWHEEL")
+        self.addRel("REL_WHEEL")
+        self.addKey("BTN_LEFT")
+        self.addKey("BTN_RIGHT")
+        self.addKey("BTN_MIDDLE")
+        self.addKey("BTN_SIDE")
+        self.addKey("BTN_EXTRA")
+        self.addKey("BTN_FORWARD")
+        self.addKey("BTN_BACK")
+        self.addKey("BTN_TASK")
+        if self._sendAbs:
+            self.addAbs("ABS_X")
+            self.addAbs("ABS_Y")
+        self.finishCreating()
+        return self
+
+    def move(self, x, y):
+        """
+        Move mouse cursor to coordinates x, y.
+        """
+        if self._sendAbs:
+            self.send("EV_ABS", "ABS_X", x)
+            self.send("EV_ABS", "ABS_Y", y)
+        else:
+            deltaX = x - self._x
+            deltaY = y - self._y
+            self.send("EV_REL", "REL_X", deltaX)
+            self.send("EV_REL", "REL_Y", deltaY)
+        self.sync()
+        self.setXY(x, y)
+
+    def moveRel(self, deltaX, deltaY):
+        self.send("EV_REL", "REL_X", deltaX)
+        self.send("EV_REL", "REL_Y", deltaY)
+        self.sync()
+        self.setXY(self._x + deltaX, self._y + deltaY)
+
+    def press(self, button):
+        buttonCode = toButtonCode(button)
+        self.send("EV_KEY", buttonCode, 1)
+        self.sync()
+
+    def release(self, button):
+        buttonCode = toButtonCode(button)
+        self.send("EV_KEY", buttonCode, 0)
+        self.sync()
+
+    def setXY(self, x, y):
+        """
+        Resets relative mouse position to (x, y), does not synthesize
+        event. Example: disable possible mouse pointer drift:
+
+        mouse.moveRel(-4096, -4096) # move to the top-left corner
+        mouse.setXY(0, 0) # set current pointer coordinates to 0, 0
+
+        After this, mouse.move(x, y) will synthesize relative mouse
+        move event which will drive cursor to coordinates x, y.
+        """
+        self._x = x
+        self._y = y
+
+    def xy(self):
+        return (self._x, self._y)
+
+    def tap(self, x, y, button):
+        self.move(x, y)
+        self.press(button)
+        self.release(button)
+
+class Touch(InputDevice):
+    """
+    Simulates touchpanel and touchpad
+    """
+    def __init__(self, maxX = None, maxY = None,
+                 screenWidth = None, screenHeight = None, screenAngle = None):
+        InputDevice.__init__(self)
+        self._maxX = maxX
+        self._maxY = maxY
+        self._screenW = screenWidth
+        self._screenH = screenHeight
+        self._screenA = screenAngle
+        self._maxPressure = None
+        self._multiTouch = True
+        self._mtTrackingId = 0
+        self._mtTracking = {}
+        self._hoover = (0, 0)
+
+    def create(self, name="Virtual fMBT Touch",
+               vendor=0xf4b7, product=0x70c5, version=1,
+               maxX=0xffff, maxY=0xffff, maxPressure=None,
+               multiTouch = True):
+        if maxX != None:
+            self._maxX = maxX
+        else:
+            self._maxX = 0xffff
+        if maxY != None:
+            self._maxY = maxY
+        else:
+            self._maxY = 0xffff
+        absmin = [0 for _ in xrange(abs_count)]
+        absmax = [0 for _ in xrange(abs_count)]
+        absmax[absCodes["ABS_X"]] = self._maxX
+        absmax[absCodes["ABS_Y"]] = self._maxY
+        if maxPressure != None:
+            self._maxPressure = maxPressure
+            absmax[absCodes["ABS_PRESSURE"]] = self._maxPressure
+        absmax[absCodes["ABS_MT_SLOT"]] = 16
+        absmax[absCodes["ABS_MT_TRACKING_ID"]] = 0x0fffffff
+        absmax[absCodes["ABS_MT_POSITION_X"]] = self._maxX
+        absmax[absCodes["ABS_MT_POSITION_Y"]] = self._maxY
+        self._multiTouch = multiTouch
+
+        self.startCreating(name, vendor, product, version,
+                           absmin=absmin, absmax=absmax)
+        self.addEvent("EV_KEY")
+        self.addEvent("EV_ABS")
+        self.addEvent("EV_SYN")
+        self.addKey("BTN_TOUCH")
+        self.addAbs("ABS_X")
+        self.addAbs("ABS_Y")
+        if self._maxPressure != None:
+            self.addAbs("ABS_PRESSURE")
+        if self._multiTouch:
+            self.addAbs("ABS_MT_SLOT")
+            self.addAbs("ABS_MT_TRACKING_ID")
+            self.addAbs("ABS_MT_POSITION_X")
+            self.addAbs("ABS_MT_POSITION_Y")
+        self.finishCreating()
+        return self
+
+    def open(self, filename):
+        InputDevice.open(self, filename)
+        # detect touch device capabilities and max values
+        # nfo is struct input_absinfo
+        nfo = array.array('i', range(6))
+        fcntl.ioctl(self._fd, EVIOCGABS(absCodes["ABS_X"]), nfo, 1)
+        self._maxX = nfo[2]
+        fcntl.ioctl(self._fd, EVIOCGABS(absCodes["ABS_Y"]), nfo, 1)
+        self._maxY = nfo[2]
+        return self
+
+    def setScreenSize(self, (width, height)):
+        self._screenW, self._screenH = (width, height)
+
+    def setScreenAngle(self, angle):
+        self._screenA = angle
+
+    def _angleXY(self, x, y, angle=None):
+        """return x, y in screen without rotation"""
+        if angle == None:
+            angle = self._screenA
+        sw, sh = self._screenW, self._screenH
+        if angle:
+            while angle < 0:
+                angle += 360
+            while angle > 360:
+                angle -= 360
+            if angle == 90:
+                ax = self._screenH - y
+                ay = x
+                sw, sh = self._screenH, self._screenW
+            elif angle == 180:
+                ax = self._screenH - x
+                ay = self._screenW - y
+            elif angle == 270:
+                ax = y
+                ay = self._screenW - x
+                sw, sh = self._screenH, self._screenW
+            else:
+                raise ValueError('Illegal screen rotation angle %s' %
+                                 (self._screenA,))
+        else:
+            ax, ay = x, y
+        return (sw, sh, ax, ay)
+
+    def _tXY(self, x, y):
+        """convert x, y to touch screen coordinates"""
+        if self._screenW and self._maxX and self._screenH and self._maxY:
+            w, h, x, y = self._angleXY(x, y)
+            x = int((self._maxX * x) / w)
+            y = int((self._maxY * y) / h)
+            return (x, y)
+        else:
+            return (x, y)
+
+    def absToScreenXY(self, absX, absY):
+        if self._screenW and self._maxX and self._screenH and self._maxY:
+            x = int(self._screenW * absX / self._maxX)
+            y = int(self._screenH * absY / self._maxY)
+            if self._screenA:
+                _, _, x, y = self._angleXY(x, y, -self._screenA)
+            return (x, y)
+        else:
+            return (absX, absY)
+
+    def _startTracking(self, finger, x, y):
+        self._mtTrackingId += 1
+        usedSlots = set([self._mtTracking[fngr][0]
+                         for fngr in self._mtTracking])
+        for freeSlot in xrange(16):
+            if not freeSlot in usedSlots:
+                break
+        else:
+            raise ValueError("No free slots for multitouch")
+        self._mtTracking[finger] = [freeSlot, self._mtTrackingId, x, y]
+        self._sendSlot(finger)
+        self.send("EV_ABS", "ABS_MT_TRACKING_ID", self._mtTrackingId)
+        tx, ty = self._tXY(x, y)
+        self.send("EV_ABS", "ABS_MT_POSITION_X", tx)
+        self.send("EV_ABS", "ABS_MT_POSITION_Y", ty)
+        return self._mtTrackingId
+
+    def _stopTracking(self, finger):
+        self._sendSlot(finger)
+        self.send("EV_ABS", "ABS_MT_TRACKING_ID", -1)
+        del self._mtTracking[finger]
+
+    def _sendSlot(self, finger):
+        slot = self._mtTracking[finger][0]
+        self.send("EV_ABS", "ABS_MT_SLOT", slot)
+
+    def tap(self, x, y, pressure=None):
+        self.pressFinger(-1, x, y, pressure)
+        self.releaseFinger(-1)
+
+    # Compatibility API to allow using a Touch almost like a Mouse
+    def move(self, x, y):
+        if len(self._mtTracking.keys()) == 0:
+            self._hoover = (x, y)
+        else:
+            finger = sorted(self._mtTracking.keys())[0]
+            return self.moveFinger(finger, x, y)
+
+    def press(self, finger):
+        return self.pressFinger(finger, *self._hoover)
+
+    def release(self, finger):
+        return self.releaseFinger(finger)
+    # end of compatibility API
+
+    # Multi-touch API
+    def pressFinger(self, finger, x, y, pressure=None):
+        """Add a finger to current multitouch gesture. If multitouch gesture
+        is not started, it starts automatically.
+        """
+        if self._multiTouch and not finger in self._mtTracking:
+            self._startTracking(finger, x, y)
+        if pressure != None and self._maxPressure != None:
+            self.send("EV_ABS", "ABS_PRESSURE", pressure)
+        self.send("EV_KEY", "BTN_TOUCH", 1)
+        tx, ty = self._tXY(x, y)
+        self.send("EV_ABS", "ABS_X", tx)
+        self.send("EV_ABS", "ABS_Y", ty)
+        self.sync()
+
+    def releaseFinger(self, finger):
+        """Remove a finger from current multitouch gesture. When last finger
+        is raised from the screen, multitouch gesture ends."""
+        if self._multiTouch:
+            self._stopTracking(finger)
+        self.send("EV_KEY", "BTN_TOUCH", 0)
+        for fngr in self._mtTracking:
+            # still some finger pressed, non-multitouch reader gets
+            # coordinates from one of those
+            tx, ty = self._tXY(self._mtTracking[fngr][2],
+                               self._mtTracking[fngr][3])
+            self.send("EV_ABS", "ABS_X", tx)
+            self.send("EV_ABS", "ABS_Y", ty)
+            break # only one coordinates will be sent.
+        self.sync()
+
+    def moveFinger(self, finger, x, y):
+        """Move a finger in current multitouch gesture"""
+        self._sendSlot(finger)
+        tx, ty = self._tXY(x, y)
+        if self._multiTouch:
+            self.send("EV_ABS", "ABS_MT_POSITION_X", tx)
+            self.send("EV_ABS", "ABS_MT_POSITION_Y", ty)
+        self.send("EV_ABS", "ABS_X", tx)
+        self.send("EV_ABS", "ABS_Y", ty)
+        self._mtTracking[finger][2] = x # last X
+        self._mtTracking[finger][3] = y # last Y
+        self.sync()
+
+class Keyboard(InputDevice):
+    def __init__(self):
+        InputDevice.__init__(self)
+
+    def create(self, name="Virtual fMBT Keyboard",
+               vendor=0xf4b7, product=0x4ebd, version=1):
+        self.startCreating(name, vendor, product, version)
+        self.addEvent("EV_KEY")
+        self.addEvent("EV_SYN")
+        for keyName in keyCodes:
+            if keyName.startswith("KEY_"):
+                self.addKey(keyCodes[keyName])
+        self.finishCreating()
+        return self
+
+    def press(self, keyCodeOrName):
+        # TODO: there should be different MSC_SCAN matrix location for each key
+        self.send("EV_MSC", mscCodes["MSC_SCAN"], 458793)
+        self.send("EV_KEY", toKeyCode(keyCodeOrName), 1)
+        self.sync()
+
+    def release(self, keyCodeOrName):
+        # TODO: there should be different MSC_SCAN matrix location for each key
+        self.send("EV_MSC", mscCodes["MSC_SCAN"], 458793)
+        self.send("EV_KEY", toKeyCode(keyCodeOrName), 0)
+        self.sync()
+
+    def tap(self, keyCodeOrName):
+        keyCode = toKeyCode(keyCodeOrName)
+        self.press(keyCode)
+        self.release(keyCode)
+
+def sendInputSync(devFd):
+    return sendInputEvent(devFd, 0, 0, 0)
+
+def sendInputEvent(devFd, type_, code, value):
+    t = time.time()
+    t_sec = int(t)
+    t_usec = int(1000000*(t-t_sec))
+    rv = os.write(devFd,
+                  struct.pack(struct_input_event,
+                              t_sec, t_usec,
+                              type_,
+                              code,
+                              value))
+    return rv == sizeof_input_event
+
+def eventToString(inputEvent):
+    tim, tus, typ, cod, val = struct.unpack(struct_input_event, inputEvent)
+    styp = eventTypesInv.get(typ, "?")
+    if styp == "EV_KEY":
+        scod = keyCodesInv.get(cod, "?")
+    elif styp == "EV_REL":
+        scod = relCodesInv.get(cod, "?")
+    elif styp == "EV_ABS":
+        scod = absCodesInv.get(cod, "?")
+    else:
+        scod = "N/A"
+    if typ == 0:
+        return styp
+    else:
+        return "%8s.%s type: %4s (%5s), code: %5s (%15s) value: %8s" % \
+            (tim, str(tus).zfill(6), typ, styp, cod, scod, val)
+
+def queueEventsFromFile(filename, queue, lock, filterOpts):
+    if isinstance(filterOpts, dict) and "type" in filterOpts:
+        allowedTypes = set()
+        for t in filterOpts["type"]:
+            if isinstance(t, str):
+                allowedTypes.add(eventTypes[t])
+            else:
+                allowedTypes.add(t)
+    else:
+        allowedTypes = set(eventTypes.values())
+    if ("touchScreen" in filterOpts and
+        filename == filterOpts["touchScreen"].filename()):
+        touchScreen = filterOpts["touchScreen"]
+        absXCodes = set([absCodes["ABS_X"], absCodes["ABS_MT_POSITION_X"]])
+        absYCodes = set([absCodes["ABS_Y"], absCodes["ABS_MT_POSITION_Y"]])
+        absType = eventTypes["EV_ABS"]
+    else:
+        touchScreen = None
+    fd = os.open(filename, os.O_RDONLY)
+    try:
+        while 1:
+            eventData = os.read(fd, sizeof_input_event)
+            if not lock.locked():
+                return
+            if not eventData:
+                break
+            (ts, tus, typ, cod, val) = struct.unpack(struct_input_event, eventData)
+            if touchScreen and typ == absType:
+                if cod in absXCodes:
+                    val, _ = touchScreen.absToScreenXY(val, 0)
+                elif cod in absYCodes:
+                    _, val = touchScreen.absToScreenXY(0, val)
+            if typ in allowedTypes:
+                queue.put((ts, tus, typ, cod, val))
+    finally:
+        os.close(fd)
+
+# _g_recQL dictionary contains events being actively recorded
+# - key: filename, like "/dev/input/event0"
+# - value: (eventQueue, lock)
+# A thread is filling eventQueue with events from filename.
+# Once the lock is released, the thread will quit without writing
+# anything to the eventQueue anymore.
+_g_recQL = {}
+_g_unfetchedEvents = []
+def queueEventsFromFiles(listOfFilenames, filterOpts):
+    global _g_recQL
+    for filename in listOfFilenames:
+        q = Queue.Queue()
+        l = thread.allocate_lock()
+        l.acquire()
+        if filename in _g_recQL:
+            # previous reader thread should quit
+            _g_recQL[filename][1].release()
+        thread.start_new_thread(
+            queueEventsFromFile, (filename, q, l, filterOpts))
+        _g_recQL[filename] = (q, l)
+
+def startQueueingEvents(filterOpts):
+    refreshDeviceInfo()
+    if len(_g_recQL) > 0:
+        # already queueing, restart
+        stopQueueingEvents()
+    if "device" in filterOpts:
+        deviceFiles = []
+        for n in filterOpts["device"]:
+            if n in _g_deviceNames:
+                deviceFiles.append(_g_deviceNames[n])
+            elif os.access(n, os.R_OK):
+                deviceFiles.append(n)
+        del filterOpts["device"]
+    else:
+        deviceFiles = glob.glob("/dev/input/event[0-9]*")
+    queueEventsFromFiles(deviceFiles, filterOpts)
+
+def stopQueueingEvents():
+    global _g_recQL
+    global _g_unfetchedEvents
+    for filename in _g_recQL:
+        _g_recQL[filename][1].release()
+    _g_unfetchedEvents = fetchQueuedEvents()
+    _g_recQL = {}
+
+def fetchQueuedEvents():
+    global _g_unfetchedEvents
+    if len(_g_recQL) == 0: # no active recording
+        rv = _g_unfetchedEvents
+        _g_unfetchedEvents = []
+        return rv
+    else: # events are being recorded
+        events = []
+        for filename in _g_recQL:
+            events.extend(fetchQueuedEventsFromFile(filename))
+        return events
+
+def fetchQueuedEventsFromFile(filename):
+    events = []
+    q = _g_recQL[filename][0]
+    deviceName = toEventDeviceName(filename)
+    while 1:
+        try:
+            ts, tus, typ, cod, val = q.get_nowait()
+            events.append((deviceName, ts + tus/1000000.0, typ, cod, val))
+        except Queue.Empty:
+            break
+    return events
+
+def printEventsFromFile(filename):
+    fd = os.open(filename, os.O_RDONLY)
+
+    sdev = filename.split("/")[-1]
+
+    try:
+        while 1:
+            inputEvent = os.read(fd, sizeof_input_event)
+            if not inputEvent:
+                break
+            print sdev, eventToString(inputEvent)
+    finally:
+        os.close(fd)
+
+if __name__ == "__main__":
+    import getopt
+    import sys
+
+    opt_print_devices = []
+
+    opts, remainder = getopt.getopt(
+        sys.argv[1:], 'hp',
+        ['help', 'print'])
+    for opt, arg in opts:
+        if opt in ['-h', '--help']:
+            print cmdline_usage
+            sys.exit(0)
+        elif opt in ['-p', '--print']:
+            if not remainder:
+                print cmdline_usage
+            opt_print_devices = remainder
+
+    if opt_print_devices:
+        for deviceFilename in opt_print_devices:
+            thread.start_new_thread(printEventsFromFile, (deviceFilename,))
+        raw_input("Press ENTER to stop printing...\n")
diff --git a/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/dev_event/tctmonkey/monkey_gti.py b/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/dev_event/tctmonkey/monkey_gti.py
new file mode 100755 (executable)
index 0000000..f303ced
--- /dev/null
@@ -0,0 +1,179 @@
+import time
+
+class _USE_DEFAULTS:
+    pass
+
+
+def int_coords((x,y), (width, height)):
+    if 0 <= x <= 1 and type(x) == float:
+        x = x * width
+    if 0 <= y <= 1 and type(y) == float:
+        y = y * height
+    return (int(round(x)), int(round(y)))
+
+
+class GUITestConnection(object):
+
+    def send_tap(self, x, y):
+        return self.send_touchdown(x, y) and self.send_touchup(x, y)
+
+    def send_press(self, keyname):
+        return self.send_keydown(keyname) and self.send_keyup(keyname)
+
+    def send_keydown(self, keyname):
+        print ("send keydown(%s) needed but not implemented." % (keyname,))
+
+    def send_keyup(self, keyname):
+        print ("send keyup(%s) needed but not implemented." % (keyname,))
+
+    def send_touchdown(self, x, y):
+        print ("send touchdown(%d, %d) needed but not implemented" % (x, y))
+
+    def send_touchup(self, x, y):
+        print ("send touchup(%d, %d) needed but not implemented" % (x, y))
+
+    def send_touchmove(self, x, y):
+        print ("send touchmove(%d, %d) needed but not implemented" % (x, y))
+
+
+class GUITestInterface(object):
+    def __init__(self):
+        self._conn = None
+        self.tap_defaults = {}
+        self.longtap_holdtime = 2.0
+
+    def setConnection(self, conn):
+        self._conn = conn
+
+    def screen_size(Self):
+        return 720, 1280
+
+    def pressKey(self, keyname, long=False, hold=0.0, modifiers=None):
+        extra_params = {}
+        if modifiers != None:
+            extra_params['modifiers'] = modifiers
+        if hold > 0.0:
+            try:
+                assert self.existing_connection().\
+                        send_keydown(keyname, **extra_params)
+                time.sleep(hold)
+                assert self.existing_connection().\
+                        send_keyup(keyname, **extra_params)
+            except AssertionError:
+                return False
+            return True
+        return self.existing_connection().send_press(keyname, **extra_params)
+
+    def tap(self, (x, y), long=_USE_DEFAULTS, hold=_USE_DEFAULTS,\
+            count=_USE_DEFAULTS, delay_between_taps=_USE_DEFAULTS,
+            button=_USE_DEFAULTS):
+        if long == _USE_DEFAULTS:
+            long = self.tap_defaults.get("long", False)
+        if hold == _USE_DEFAULTS:
+            hold = self.tap_defaults.get("hold", 0.0)
+        if count == _USE_DEFAULTS:
+            count = self.tap_defaults.get("count", 1)
+        if delay_between_taps == _USE_DEFAULTS:
+            delay_between_taps = \
+                    self.tap_defaults.get("delay_between_taps", 0.5)
+        if button == _USE_DEFAULTS:
+            button = self.tap_defaults.get("button", None)
+
+        x, y = self.int_coords((x,y))
+        count = int(count)
+        if long and hold == 0.0:
+            hold = self.longtap_holdtime
+        extra_params = {}
+        if button != None:
+            extra_params['button'] = button
+        while count > 0:
+            if hold > 0.0:
+                try:
+                    assert self.existing_connection().\
+                            send_touchdown(x,y, **extra_params)
+                    time.sleep(hold)
+                    assert self.existing_connection().\
+                            send_touchup(x,y, **extra_params)
+                except AssertionError:
+                    return False
+            else:
+                if delay_between_taps:
+                    time.sleep(delay_between_taps)
+                if not self.existing_connection().send_tap(x, y, **extra_params):
+                    return False
+            count = int(count) - 1
+        return True
+
+    def down_scroll(self, (x1, y1), (x2, y2)):
+        x1, y1 = self.int_coords((x1, y1))
+        x2, y2 = self.int_coords((x2, y2))
+
+        self.existing_connection().send_touchdown(x1, y1)
+        ytemp = y1 - y2
+        yidx = 0
+
+        while ytemp - yidx > 0:
+            self.existing_connection().send_touchmove(x1, y1 - yidx)
+            yidx += 5
+
+        self.existing_connection().send_touchup(x2, y2)
+
+    def up_scroll(self, (x1, y1), (x2, y2)):
+        x1, y1 = self.int_coords((x1, y1))
+        x2, y2 = self.int_coords((x2, y2))
+
+        self.existing_connection().send_touchdown(x1, y1)
+        ytemp = y2 - y1
+        yidx = 0
+
+        while ytemp - yidx > 0:
+            self.existing_connection().send_touchmove(x1, y2 + yidx)
+            yidx += 5
+
+        self.existing_connection().send_touchup(x2, y2)
+
+
+    def drag(self, (x1, y1), (x2, y2), delay_between_moves=0.01,\
+            delay_before_moves=0, delay_after_moves=0, move_points=10,\
+            button=_USE_DEFAULTS):
+        x1, y1 = self.int_coords((x1, y1))
+        x2, y2 = self.int_coords((x2, y2))
+
+        extra_args = {}
+        if button != _USE_DEFAULTS:
+            extra_args["button"] = button
+
+        if delay_before_moves >= 0:
+            time.sleep(delay_before_moves)
+        else:
+            time.sleep(delay_between_moves)
+        for i in xrange(0, move_points):
+            nx = x1 + int(round(((x2 - x1) / float(move_points+1)) * (i+1)))
+            ny = y1 + int(round(((y2 - y2) / float(move_points+1)) * (i+1)))
+            if not self.existing_connection().\
+                    send_touchmove(nx, ny, **extra_args):
+                return False
+            time.sleep(delay_between_moves)
+        if delay_after_moves > 0:
+            self.existing_connection().send_touchmove(x2, y2, **extra_args)
+            time.sleep(delay_after_moves)
+        if delay_after_moves >= 0:
+            if self.existing_connection().send_touchup(x2, y2, **extra_args):
+                return True
+            else:
+                return False
+        else:
+            return True
+
+
+
+    def existing_connection(self):
+        if self._conn:
+            return self._conn
+        else:
+            print ("not connected")
+
+    def int_coords(self, (x, y)):
+        width, height = self.screen_size()
+        return int_coords((x,y), (width, height))
+
diff --git a/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/dev_event/tctmonkey/monkey_tizen.py b/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/dev_event/tctmonkey/monkey_tizen.py
new file mode 100755 (executable)
index 0000000..acd1c3b
--- /dev/null
@@ -0,0 +1,324 @@
+
+import os
+import time
+import subprocess
+import cPickle
+import base64
+import Queue
+import thread
+
+import monkey_gti
+
+from constants import Constants
+
+
+def _file_to_queue(f, out_queue):
+    line = f.readline()
+    while line != "":
+        out_queue.put(line)
+        line = f.readline()
+    f.close()
+
+
+def _encode(obj):
+    return base64.b64encode(cPickle.dumps(obj))
+
+
+def _decode(string):
+    return cPickle.loads(base64.b64decode(string))
+
+
+def _run(cmd, expected_exitstatus=None):
+    if type(cmd) == str:
+        shell = True
+    else:
+        shell = False
+
+    try:
+        proc = subprocess.Popen(cmd, shell=shell, stdout=subprocess.PIPE,\
+                stderr=subprocess.PIPE, close_fds=True)
+        if expected_exitstatus != None:
+            out, err = proc.communicate()
+        else:
+            out, err = ('', None)
+    except Exception, ex:
+        class fakeProcess(object):
+            pass
+        p = fakeProcess
+        p.returncode = 127
+        out, err = ('', ex)
+
+    exit_status = proc.returncode
+
+    if (expected_exitstatus != None and
+            exit_status != expected_exitstatus and
+            exit_status not in expected_exitstatus):
+        msg = "Executing %s failed. Exit status: %s, expected %s" % \
+                (cmd, exit_status, expected_exitstatus)
+        raise FMBTTizenError(msg)
+
+    return exit_status, out, err
+
+
+class Device(monkey_gti.GUITestInterface):
+
+    def __init__(self, serial_number=None, debug_agentfile=None, \
+            keyboard_device=None, touch_device=None, \
+            mouse_device=None, **kwargs):
+
+        monkey_gti.GUITestInterface.__init__(self, **kwargs)
+        c = TizenDeviceConnection(serial_number=serial_number,\
+                debug_agentfile=debug_agentfile,\
+                keyboard_device=keyboard_device,\
+                touch_device=touch_device,\
+                mouse_device=mouse_device)
+        self.setConnection(c)
+        c.gti = self
+
+    def connect(self):
+        if hasattr(self, "_conn"):
+            self._conn.open()
+            return True
+        else:
+            return False
+
+    def disconnect(self):
+        if hasattr(self, "_conn"):
+            self._conn.close()
+            return True
+        else:
+            return False
+
+    def pressPower(self, **pressKeyKwArgs):
+        return self.pressKey("POWER", **pressKeyKwArgs)
+
+    def pressBack(self, **pressKeyKwArgs):
+        return self.pressKey("BACK", **pressKeyKwArgs)
+
+    def pressMenu(self, **pressKeyKwArgs):
+        return self.pressKey("MENU", **pressKeyKwArgs)
+
+    def pressVolumeDown(self, **pressKeyKwArgs):
+        return self.pressKey("VOLUMEDOWN", **pressKeyKwArgs)
+
+    def pressVolumeUp(self, **pressKeyKwArgs):
+        return self.pressKey("VOLUMEUP", **pressKeyKwArgs)
+
+    def key_names(self):
+        return self._conn.key_names()
+
+
+class TizenDeviceConnection(monkey_gti.GUITestConnection):
+
+    def __init__(self, serial_number=None, debug_agentfile=None, \
+            keyboard_device=None, touch_device=None, mouse_device=None):
+        if serial_number == None:
+            self.serial_number = "unknown"
+        else:
+            self.serial_number = serial_number
+
+        self.sdb_shell = None
+        self.agent_needs_resolution = True
+        self.touch_device = touch_device
+        self.keyboard_device = keyboard_device
+        self.debug_agentfile = debug_agentfile
+        self.mouse_device = mouse_device
+        self.open()
+
+    def open(self):
+        if self.serial_number == "unknown":
+            raise TizenDeviceNotFoundError("Tizen device not found.")
+
+        self.close()
+
+        agent_fname = "fmbttizen-agent.py"
+        agent_uinput_fname = "fmbtuinput.py"
+
+        agent_fname_path = Constants.AGENT_PATH
+        uinput_fname_path = Constants.UINPUT_AGENT_PATH
+        remote_upload_path = "/tmp/"
+
+        remote_agent_fname = remote_upload_path + agent_fname
+
+        upload_files = [(agent_fname_path, remote_upload_path), \
+                (uinput_fname_path, remote_upload_path)]
+
+        for src, dst in upload_files:
+            upload_cmd = ["sdb", "-s", self.serial_number, "push", src, dst]
+            status, out, err = _run(upload_cmd, range(256))
+            if status == 127:
+                raise TizenConnectionError("Executing sdb -s %s push failed." + \
+                        "Check your Tizen SDK installation." % \
+                        self.serial_number)
+            elif status != 0:
+                if "device not found" in err:
+                    raise TizenDeviceNotFoundError(\
+                            'Tizen device "%s" not found.'% \
+                            self.serial_number)
+                else:
+                    raise TizenConnectionError('Executing "%s" failed: %s' % \
+                            (' '.join(upload_cmd), err + " " + out))
+
+        self.agent_args = []
+        if self.keyboard_device:
+            self.agent_args.append("--keyboard=%s" % (self.keyboard_device,))
+        if self.touch_device:
+            self.agent_args.append("--touch=%s" % (self.touch_device,))
+        if self.mouse_device:
+            self.agent_args.append("--mouse=%s" % (self.mouse_device,))
+
+        remote_shellcmd = ["sdb", "-s", self.serial_number, "shell"]
+        try:
+            self.sdb_shell = subprocess.Popen(remote_shellcmd,\
+                    shell=False,
+                    stdin=subprocess.PIPE,
+                    stdout=subprocess.PIPE,
+                    stderr=subprocess.PIPE,
+                    close_fds=True)
+        except OSError:
+            raise TizenConnectionError("Executing %s failed" % \
+                    " ".join(remote_shellcmd),)
+
+        self.sdbshell_errqueue = Queue.Queue()
+        thread.start_new_thread(_file_to_queue, (self.sdb_shell.stderr, \
+                self.sdbshell_errqueue))
+        self.sdb_shell.stdin.write("\r")
+        try:
+            ok, self.platform_info = self._agent_cmd(\
+                    "python %s %s; exit" % \
+                    (remote_agent_fname, " ".join(self.agent_args)))
+        except IOError, msg:
+            raise TizenConnectionError(\
+                    ('Connecting to a Tizen device/emulator failed. Error: %s'
+                    '\nTry "sdb -s %s shell python %s --debug".') % \
+                    (msg, self.serial_number, remote_agent_fname))
+
+        return ok
+
+    def key_names(self):
+        return self._agent_cmd("kn")[1]
+
+    def send_keydown(self, keyname):
+        print 'keydown %s' % keyname
+        return self._agent_cmd("kd %s" % (keyname,))[0]
+
+    def send_keyup(self, keyname):
+        print 'keyup %s' % keyname
+        return self._agent_cmd("ku %s" % (keyname,))[0]
+
+    def send_press(self, keyname, modifiers=()):
+        print 'send_press %s' % keyname
+        rv = True
+        for m in modifiers:
+            rv = rv and self.send_keydown(m)
+        rv = rv and self._agent_cmd("kp %s" % (keyname,))[0]
+        for m in modifiers[::-1]:
+            rv = rv and self.send_keyup(m)
+        return rv
+
+    def send_touchdown(self, x, y):
+        print 'touchdown %s %s' % (x, y)
+        return self._agent_cmd("td %s %s 1" % (x, y))[0]
+
+    def send_touchup(self, x, y):
+        print 'touchup %s %s' % (x, y)
+        return self._agent_cmd("tu %s %s 1" % (x, y))[0]
+
+    def send_tap(self, x, y):
+        print 'tap %s %s' % (x, y)
+        return self._agent_cmd("tt %s %s 1" % (x, y))[0]
+
+    def send_touchmove(self, x, y):
+        print 'touchmove %s %s' % (x, y)
+        return self._agent_cmd("tm %s %s" % (x, y))[0]
+
+    def _report_errors_inqueue(self):
+        while True:
+            try:
+                l = self._sdbshell_errqueue.get_nowait()
+            except Queue.Empty:
+                return
+            if self.debug_agentfile:
+                self.debug_agentfile.write("<2 %s" % (l,))
+
+    def _agent_cmd(self, cmd, retry=3):
+        if cmd[:2] in ["tt", "td", "tm", "tu", "er"]:
+            if self.agent_needs_resolution:
+                self._agent_cmd("sd %s %s" % self.gti.screen_size())
+                self.agent_needs_resolution = False
+
+        if self.sdb_shell == None:
+            return False, "disconnected"
+
+        if self.debug_agentfile:
+            self.debug_agentfile.write(">0 %s\n" % (cmd,))
+        try:
+            if len(cmd) > 0:
+                self.sdb_shell.stdin.write("%s%s" % (cmd, '\n'))
+                self.sdb_shell.stdin.flush()
+        except IOError, msg:
+            if retry > 0:
+                time.sleep(2)
+                self._report_errors_inqueue()
+                print ("Error when sending command %s : %s" % (cmd, msg))
+                self.open()
+                self._agent_cmd(cmd, retry=retry - 1)
+        return self._agent_answer()
+
+    def _agent_answer(self):
+        error_line_prefix = "FMBTAGENT ERROR "
+        ok_line_prefix = "FMBTAGENT OK "
+        l = self.sdb_shell.stdout.readline()
+        output = []
+        while True:
+            if self.debug_agentfile:
+                if len(l) > 72:
+                    self.debug_agentfile.write("<1 %s...\n" % (l[:72],))
+                else:
+                    self.debug_agentfile.write("<1 %s\n" % (l,))
+            if l.startswith(ok_line_prefix):
+                return True, _decode(l[len(ok_line_prefix):])
+            elif l.startswith(error_line_prefix):
+                return False, _decode(l[len(error_line_prefix):])
+            else:
+                output.append(l)
+                pass
+            l = self.sdb_shell.stdout.readline()
+            if l == "":
+                raise IOError("Agent connection lost : %s" % \
+                        ("\n".join(output)))
+                break
+            l = l.strip()
+
+    def close(self):
+        if hasattr(self, "sdb_Shell") and self.sdb_shell != None:
+            try:
+                self._agent_cmd("quit", retry=0)
+            except:
+                pass
+            try:
+                self.sdb_shell.stdin.close()
+            except:
+                pass
+            try:
+                self.sdb_shell.stdout.close()
+            except:
+                pass
+            try:
+                self.sdb_shell.stderr.close()
+            except:
+                pass
+            self._report_errors_inqueue()
+        self.sdb_shell = None
+
+
+class FMBTTizenError(Exception):
+    pass
+
+
+class TizenConnectionError(FMBTTizenError):
+    pass
+
+
+class TizenDeviceNotFoundError(TizenConnectionError):
+    pass
diff --git a/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/dev_event/tctmonkey/monkeyworker.py b/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/dev_event/tctmonkey/monkeyworker.py
new file mode 100755 (executable)
index 0000000..48bcef6
--- /dev/null
@@ -0,0 +1,80 @@
+
+import os
+import threading
+import random
+
+from monkey_tizen import Device
+from sdbmanager import SdbManager
+from constants import Constants
+
+
+class RandomExecutor(threading.Thread):
+    def __init__(self, _devid, _wrap):
+        self.monkey_dev = Device(_devid, _wrap.get_debug_file(), \
+                _wrap.get_key_dev(), _wrap.get_touch_dev(), \
+                _wrap.get_mouse_dev())
+        self.devid = _devid
+        self.monkey_dev.connect()
+        self.random_count = int(_wrap.get_random_count())
+        self.result_path = _wrap.get_result_dirpath(_devid)
+        self.back_count = _wrap.get_back_count()
+
+        if _wrap.get_record_file():
+            self.rec_file = open(_wrap.get_record_file(), 'w')
+        else:
+            self.rec_file = open(\
+                    os.path.join(self.result_path, \
+                    Constants.RECORD_FILE_NAME), 'w')
+        threading.Thread.__init__(self)
+
+    def run(self):
+        for idx in range(self.random_count):
+            x = random.uniform(0.0, 1.0)
+            y = random.uniform(0.0, 1.0)
+
+            self.rec_file.write("tap %s %s\n" % (x, y))
+            self.monkey_dev.tap((x, y))
+
+            if self.back_count and idx >= int(self.back_count):
+                if idx % int(self.back_count) == 0:
+                    self.rec_file.write("pressBack\n")
+                    self.monkey_dev.pressBack()
+
+        SdbManager.exportDumpFiles(self.devid, \
+                os.path.join(self.result_path, 'random'))
+        self.monkey_dev.disconnect()
+        self.rec_file.close()
+
+
+class ReplayExecutor(threading.Thread):
+    def __init__(self, _devid, _wrap):
+        self.monkey_dev = Device(_devid, _wrap.get_debug_file(), \
+                _wrap.get_key_dev(), _wrap.get_touch_dev(), \
+                _wrap.get_mouse_dev())
+        self.devid = _devid
+        self.monkey_dev.connect()
+        self.replay_filepath = _wrap.get_replay_file()
+        self.replay_file = None
+
+        self.result_path = _wrap.get_result_dirpath(_devid)
+
+        if self.replay_filepath:
+            self.replay_file = open(self.replay_filepath, 'r')
+
+        threading.Thread.__init__(self)
+
+    def run(self):
+        while True:
+            line = self.replay_file.readline()
+            if not line:
+                break
+            msg = line.split()
+            if msg[0].find('tap') > -1:
+                self.monkey_dev.tap((float(msg[1]), float(msg[2])))
+            elif msg[0].find('pressBack') > -1:
+                self.monkey_dev.pressBack()
+
+        self.replay_file.close()
+        self.monkey_dev.disconnect()
+        SdbManager.exportDumpFiles(self.devid, \
+                os.path.join(self.result_path, 'replay'))
diff --git a/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/dev_event/tctmonkey/monkeywrapper.py b/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/dev_event/tctmonkey/monkeywrapper.py
new file mode 100755 (executable)
index 0000000..6aa8e52
--- /dev/null
@@ -0,0 +1,138 @@
+
+import os
+import datetime
+
+from optparse import *
+from constants import Constants
+
+
+def varnarg(option, opt_str, value, parser):
+    """ parser srg"""
+    value = []
+    import re
+    for arg in parser.rargs:
+        if re.search('^--.+', arg) or re.search('^-[\D]', arg):
+            break
+        value.append(arg)
+
+    del parser.rargs[:len(value)]
+    setattr(parser.values, option.dest, value)
+
+
+class MonkeyWrapper:
+    def __init__(self):
+        self.options = None
+        self.USAGE = "\n\""
+
+    def print_usage(self):
+        print self.USAGE
+
+    def parse_options(self, argv):
+        option_list = [
+            make_option("--py-install", dest="python_install", \
+                    action="store_true", default=False, help=""),
+            make_option("--random", dest="random_count", action="callback", \
+                    callback=varnarg, help=""),
+            make_option("--record", dest="record_file", action="callback", \
+                    callback=varnarg, help=""),
+            make_option("--debug", dest="debug_file", action="callback", \
+                    callback=varnarg, help=""),
+            make_option("--replay", dest="replay_file", action="callback", \
+                    callback=varnarg, help=""),
+            make_option("--key-dev", dest="key_device", action="callback", \
+                    callback=varnarg, help=""),
+            make_option("--touch-dev", dest="touch_device", \
+                    action="callback", callback=varnarg, help=""),
+            make_option("--mouse_dev", dest="mouse_device", \
+                    action="callback", callback=varnarg, help=""),
+            make_option("--output", dest="result_dir",  action="callback", \
+                    callback=varnarg, help=""),
+            make_option("--back-key", dest="back_count", action="callback", \
+                    callback=varnarg, help="")
+        ]
+
+        # detect non-params
+        if len(argv) == 1:
+            pass
+            argv.append("--help")
+
+        PARSERS = OptionParser(option_list=option_list, usage=self.USAGE)
+        (self.options, args) = PARSERS.parse_args()
+
+    def is_py_install(self):
+        return self.options.python_install
+
+    def python_install(self, _devid):
+        os.system('sdb -s %s root on' % _devid)
+        curr_path = Constants.LIB_DIR
+        os.system('sdb -s %s push %s %s' % (_devid, os.path.join(curr_path, 'libpython-2.7.1-1.7.armv7l.rpm'), '/tmp/'))
+        os.system('sdb -s %s push %s %s' % (_devid, os.path.join(curr_path, 'python-2.7.1-1.4.armv7l.rpm'), '/tmp/'))
+        os.system('sdb -s %s push %s %s' % (_devid,  os.path.join(curr_path, 'python-base-2.7.1-1.7.armv7l.rpm'), '/tmp/'))
+        os.system('sdb -s %s shell rpm -ivh /tmp/libpython-2.7.1-1.7.armv7l.rpm' % _devid)
+        os.system('sdb -s %s shell rpm -ivh /tmp/python-base-2.7.1-1.7.armv7l.rpm' % _devid)
+        os.system('sdb -s %s shell rpm -ivh /tmp/python-2.7.1-1.4.armv7l.rpm' % _devid)
+
+    def get_replay_file(self):
+        if self.options.replay_file:
+            return self.options.replay_file[0]
+        else:
+            return None
+
+    def get_record_file(self):
+        if self.options.record_file:
+            return self.options.record_file[0]
+        else:
+            return None
+
+    def get_random_count(self):
+        return self.options.random_count[0]
+
+    def get_back_count(self):
+        if self.options.back_count:
+            return self.options.back_count[0]
+        else:
+            return None
+
+    def get_debug_file(self):
+        if self.options.debug_file:
+            return self.options.debug_file[0]
+        else:
+            return None
+
+    def get_key_dev(self):
+        if self.options.key_device:
+            return self.options.key_device[0]
+        else:
+            return None
+
+    def get_touch_dev(self):
+        if self.options.touch_device:
+            return str(self.options.touch_device[0])
+        else:
+            return None
+
+    def get_mouse_dev(self):
+        if self.options.mouse_device:
+            self.options.mouse_device[0]
+        else:
+            return None
+
+    def is_random_mode(self):
+        if self.options.random_count and self.options.random_count[0] > 0:
+            return True
+        else:
+            return False
+
+    def is_replay_mode(self):
+        if self.options.replay_file:
+            return True
+        else:
+            return False
+
+    def get_result_dirpath(self, _devid):
+        curr_time = datetime.datetime.now().strftime('%Y-%m-%d_%H:%M:%S')
+        result_path = os.path.join(Constants.RESULT_DIR, _devid, curr_time)
+        if not os.path.exists(result_path):
+            os.makedirs(result_path)
+
+        return result_path
diff --git a/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/dev_event/tctmonkey/sdbmanager.py b/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/dev_event/tctmonkey/sdbmanager.py
new file mode 100755 (executable)
index 0000000..c345505
--- /dev/null
@@ -0,0 +1,100 @@
+
+import os
+import time
+import subprocess
+
+from constants import Constants
+
+class SdbManager:
+
+    @staticmethod
+    def sdbCommand(command, timeout=90):
+        #LOGGER.debug("sdbCommand : %s" % command)
+        proc = subprocess.Popen(command,
+                                shell=True,
+                                stdout=subprocess.PIPE,
+                                stderr=subprocess.PIPE)
+        time_out = 0
+        while time_out < timeout:
+            exit_code = proc.poll()
+            if exit_code is not None:
+                break
+            time_out += 0.5
+            time.sleep(0.5)
+        if exit_code is None:
+            pass
+            #LOGGER.error("sdb time out,kill subprocess...")
+            #killall(proc.pid)
+
+        return exit_code, proc.stdout, proc.stderr
+
+
+    @staticmethod
+    def sdbDevices():
+        dev_cmd = "sdb devices"
+        start_server_cmd = "sdb start-server"
+        SdbManager.sdbCommand(start_server_cmd, 8)
+        exit_code, re_stdout, re_stderr = SdbManager.sdbCommand(dev_cmd, 5)
+
+        return re_stdout.read()
+
+
+    @staticmethod
+    def checkDirExist(_devid, _dirname):
+        existed = True
+        lscmd = Constants.SDB_LS % _devid + " " + _dirname
+        exit_code, std_out, std_err = SdbManager.sdbCommand(lscmd)
+        out_log = std_out.read()
+        if out_log and out_log.find("No such file or directory") > -1:
+            existed = False
+        return existed
+
+    @staticmethod
+    def sdbShell(deviceId, cmd):
+        shell_cmd = Constants.SDB_SHELL % deviceId + " " + cmd
+        exit_code, re_stdout, re_stderr = SdbManager.sdbCommand(shell_cmd)
+
+        if exit_code is None:
+            return False
+        else:
+            outLog = re_stdout.read()
+            if outLog and outLog.find('command not found') > -1:
+                return False
+
+        return outLog
+
+    @staticmethod
+    def exportDumpFiles(_devid, _resultDir):
+        dumpPath = os.path.join(_resultDir, "dump")
+        if not os.path.exists(dumpPath):
+            os.makedirs(dumpPath)
+        remote = Constants.DUMP_DIR_PATH
+        SdbManager.sdbPull(_devid, remote, dumpPath)
+        SdbManager.sdbShell(_devid, 'rm -rf ' + remote)
+
+
+    @staticmethod
+    def sdbPull(_devid, remote, local):
+        rmtFileCheck_cmd = Constants.SDB_SHELL % _devid + " " \
+                + Constants.FILE_FOUND_SCRIPT % remote
+        exit_code, re_stdout, re_stderr = \
+                SdbManager.sdbCommand(rmtFileCheck_cmd)
+
+        if exit_code is None:
+            return False
+
+        pull_cmd = Constants.SDB_PULL % _devid + " " + remote + " " + local
+        exit_code, re_stdout, re_stderr = SdbManager.sdbCommand(pull_cmd)
+
+        if exit_code is None:
+            return False
+
+        if Constants.checkFileExists(local) is False:
+            return False
+        else:
+            pass
+
+        return True
+
+
+
diff --git a/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/full_pkg_generator b/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/full_pkg_generator
new file mode 100755 (executable)
index 0000000..4f7bb7c
--- /dev/null
@@ -0,0 +1,11 @@
+#!/bin/bash
+
+THE_CLASSPATH=
+for i in `ls /opt/tools/manager/lib/*.jar`
+do
+  THE_CLASSPATH=${THE_CLASSPATH}:${i}
+done
+
+
+java -cp /opt/tools/manager/config/:${THE_CLASSPATH} org.tizen.tct.tool.mgr.PackageList "${@}"
+chmod 777 /opt/tools/manager/tmp/
diff --git a/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/manager/doc/RELEASE_NOTES b/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/manager/doc/RELEASE_NOTES
new file mode 100755 (executable)
index 0000000..01ddcc3
--- /dev/null
@@ -0,0 +1,64 @@
+TCT 2.3 Release Notes\r
+\r
+1. Content overview\r
+ +----doc\r
+     |---- Web_TCT_2.3_Behavior_Test_Tool_User_Guide_v1.0.pdf\r
+     |---- Web_TCT_2.3_Manager_User_Guide_v1.0.pdf\r
+     |---- Web_TCT_2.3_Shell_User_Guide_v1.0.pdf\r
+     |---- Web_TCT_2.3_TestSuite_Packaging_Guide_v1.0.pdf\r
+     |---- Web_TCT_2.3_Tool_Packaging_Guide_v1.0.pdf\r
+     |---- Web_TCT_2.3_Tool_Packaging_Ubuntu_Guide_v1.0.pdf\r
+     |---- Web_TCT_2.3_User_Guide_v1.0.pdf\r
+     |---- RELEASE_NOTES\r
+ +----package\r
+     +---- common\r
+     +---- mobile\r
+     +---- wearable\r
+     +---- pkg_infos\r
+ +----resource\r
+     |---- getCap.wgt\r
+     |---- tct-testconfig-2.3-1.zip\r
+     |---- org.tizen.datacontrolprovider-1.0.0-arm.tpk\r
+     |---- org.tizen.datacontrolprovider-1.0.0-i386.tpk\r
+     +---- testkit-stub\r
+     +---- tinyweb subdirectory\r
+ +----tools\r
+     |---- healthcheck.ini\r
+     |---- full_pkg_generator\r
+     |---- tct-config-device.py\r
+     |---- tct-config-host.py\r
+     |---- tct-shell\r
+     |---- testkit-lite\r
+     |---- tct-mgr\r
+     +---- sdb\r
+     +---- shell\r
+     +---- testkitlite\r
+     +---- manager\r
+           +---- tct-manager related files\r
+\r
+2 Getting started\r
+\r
+2.1 TCT tools overview\r
+Tizen Compliance Tests (TCT) tools consist of these components:\r
+* Web TCT Manager:  A java GUI tool that runs on the host machine, allowing users to create a test execution plan, trigger test execution, and view the test report.\r
+* Web TCT Shell: A lightweight console tool that runs on the host machine, allowing users to trigger TCT testing with an existing test plan, or a package list, or a test case ID.\r
+* Web TCT Behavior Test Tool: A device behavior checker developed using jQuery.\r
+\r
+2.2 Setting up the environment and installing the tools\r
+Follow instructions in doc/Web_TCT_2.3_User_Guide_v1.0.pdf to set up the environment of both the host and the device, and to install the tools.\r
+\r
+2.3 Using the tools\r
+Consult these documents below for detailed usage information:\r
+* doc/Web_TCT_Manager_2.3_User_Guide_v1.0.pdf\r
+* doc/Web_TCT_Shell_2.3_User_Guide_v1.0.pdf\r
+* doc/Web_TCT_Behavior_Test_Tool_2.3_User_Guide_v1.0.pdf\r
+\r
+3. Contacting us\r
+We're counting on your feedback to further improve our tools. In the meantime, we'll help you out if you encounter any problems. Please contact cathy.shen@intel.com if you'd like to get help, offer feedback, or contribute new ideas.\r
+\r
+4. Upcoming features and enhancements\r
+Upcoming features and enhancements include:\r
+* Manual test cases will be automated, as much as possible, to save execution effort.\r
+* TCT tools and cases will be modified according to TCS changes and feedback.\r
+* Manual case support for Web TCT Shell and the "--manual" command option are placeholders, currently.\r
+\r
diff --git a/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/manager/doc/TCT-manager-guide.pdf b/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/manager/doc/TCT-manager-guide.pdf
new file mode 100755 (executable)
index 0000000..3f2d277
Binary files /dev/null and b/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/manager/doc/TCT-manager-guide.pdf differ
diff --git a/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/manager/doc/Web_TCT_2.3_Behavior_Test_Tool_User_Guide_v1.0.pdf b/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/manager/doc/Web_TCT_2.3_Behavior_Test_Tool_User_Guide_v1.0.pdf
new file mode 100755 (executable)
index 0000000..b9dd66b
Binary files /dev/null and b/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/manager/doc/Web_TCT_2.3_Behavior_Test_Tool_User_Guide_v1.0.pdf differ
diff --git a/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/manager/doc/Web_TCT_2.3_Manager_User_Guide_v1.0.pdf b/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/manager/doc/Web_TCT_2.3_Manager_User_Guide_v1.0.pdf
new file mode 100755 (executable)
index 0000000..8b1b100
Binary files /dev/null and b/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/manager/doc/Web_TCT_2.3_Manager_User_Guide_v1.0.pdf differ
diff --git a/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/manager/doc/Web_TCT_2.3_Shell_User_Guide_v1.0.pdf b/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/manager/doc/Web_TCT_2.3_Shell_User_Guide_v1.0.pdf
new file mode 100755 (executable)
index 0000000..46e4d9e
Binary files /dev/null and b/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/manager/doc/Web_TCT_2.3_Shell_User_Guide_v1.0.pdf differ
diff --git a/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/manager/doc/Web_TCT_2.3_TestSuite_Packaging_Guide_v1.0.pdf b/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/manager/doc/Web_TCT_2.3_TestSuite_Packaging_Guide_v1.0.pdf
new file mode 100755 (executable)
index 0000000..91f1b61
Binary files /dev/null and b/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/manager/doc/Web_TCT_2.3_TestSuite_Packaging_Guide_v1.0.pdf differ
diff --git a/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/manager/doc/Web_TCT_2.3_Tool_Packaging_Ubuntu_Guide_v1.0.pdf b/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/manager/doc/Web_TCT_2.3_Tool_Packaging_Ubuntu_Guide_v1.0.pdf
new file mode 100755 (executable)
index 0000000..eded39b
Binary files /dev/null and b/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/manager/doc/Web_TCT_2.3_Tool_Packaging_Ubuntu_Guide_v1.0.pdf differ
diff --git a/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/manager/doc/Web_TCT_2.3_User_Guide_v1.0.pdf b/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/manager/doc/Web_TCT_2.3_User_Guide_v1.0.pdf
new file mode 100755 (executable)
index 0000000..4ed1efe
Binary files /dev/null and b/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/manager/doc/Web_TCT_2.3_User_Guide_v1.0.pdf differ
diff --git a/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/manager/lib/appFramework-1.0.jar b/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/manager/lib/appFramework-1.0.jar
new file mode 100755 (executable)
index 0000000..f480d62
Binary files /dev/null and b/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/manager/lib/appFramework-1.0.jar differ
diff --git a/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/manager/lib/commons-cli-1.2.jar b/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/manager/lib/commons-cli-1.2.jar
new file mode 100755 (executable)
index 0000000..ce4b9ff
Binary files /dev/null and b/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/manager/lib/commons-cli-1.2.jar differ
diff --git a/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/manager/lib/commons-compress-1.12.jar b/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/manager/lib/commons-compress-1.12.jar
new file mode 100755 (executable)
index 0000000..4867705
Binary files /dev/null and b/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/manager/lib/commons-compress-1.12.jar differ
diff --git a/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/manager/lib/commons-io-2.4.jar b/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/manager/lib/commons-io-2.4.jar
new file mode 100755 (executable)
index 0000000..90035a4
Binary files /dev/null and b/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/manager/lib/commons-io-2.4.jar differ
diff --git a/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/manager/lib/jdom-1.1.2.jar b/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/manager/lib/jdom-1.1.2.jar
new file mode 100755 (executable)
index 0000000..b8091ef
Binary files /dev/null and b/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/manager/lib/jdom-1.1.2.jar differ
diff --git a/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/manager/lib/json_simple-1.1.jar b/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/manager/lib/json_simple-1.1.jar
new file mode 100755 (executable)
index 0000000..f395f41
Binary files /dev/null and b/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/manager/lib/json_simple-1.1.jar differ
diff --git a/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/manager/lib/log4j-1.2.17.jar b/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/manager/lib/log4j-1.2.17.jar
new file mode 100755 (executable)
index 0000000..068867e
Binary files /dev/null and b/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/manager/lib/log4j-1.2.17.jar differ
diff --git a/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/manager/lib/log4j.properties b/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/manager/lib/log4j.properties
new file mode 100755 (executable)
index 0000000..6956ec6
--- /dev/null
@@ -0,0 +1,33 @@
+log4j.rootLogger=INFO,CONSOLE,FILE, ROLLING_FILE
+#DEBUG,CONSOLE,FILE,ROLLING_FILE,MAIL,DATABASE
+log4j.addivity.org.apache=true
+###################
+# Console Appender
+###################
+log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender
+log4j.appender.Threshold=DEBUG
+log4j.appender.CONSOLE.Target=System.out
+log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout
+log4j.appender.CONSOLE.layout.ConversionPattern=[%p]-%d-[%t] %c (%F:%L) - %m%n
+#log4j.appender.CONSOLE.layout.ConversionPattern=[start]%d{DATE}[DATE]%n%p[PRIORITY]%n%x[NDC]%n%t[THREAD] n%c[CATEGORY]%n%m[MESSAGE]%n%n
+#####################
+# File Appender
+#####################
+log4j.appender.FILE=org.apache.log4j.FileAppender
+log4j.appender.FILE.File=/opt/tools/manager/log/file.log
+log4j.appender.FILE.Append=false
+log4j.appender.FILE.layout=org.apache.log4j.PatternLayout
+#log4j.appender.FILE.layout.ConversionPattern=[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n
+log4j.appender.FILE.layout.ConversionPattern=[%p]-%d-[%t] %c (%F:%L) - %m%n
+########################
+# Rolling File
+########################
+log4j.appender.ROLLING_FILE=org.apache.log4j.RollingFileAppender
+log4j.appender.ROLLING_FILE.Threshold=ERROR
+log4j.appender.ROLLING_FILE.File=/opt/tools/manager/log/rolling.log
+log4j.appender.ROLLING_FILE.Append=true
+log4j.appender.ROLLING_FILE.MaxFileSize=10KB
+log4j.appender.ROLLING_FILE.MaxBackupIndex=1
+log4j.appender.ROLLING_FILE.layout=org.apache.log4j.PatternLayout
+#log4j.appender.ROLLING_FILE.layout.ConversionPattern=[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n
+log4j.appender.ROLLING_FILE.layout.ConversionPattern=[%p]-%d-[%t] %c (%F:%L) - %m%n
diff --git a/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/manager/lib/manager.properties b/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/manager/lib/manager.properties
new file mode 100755 (executable)
index 0000000..12f18db
--- /dev/null
@@ -0,0 +1,2 @@
+TIZENV=tizen_web_2.3,tizen_native_2.3,tizen_web_2.3.1,tizen_native_2.3.1,tizen_web_2.3.2,tizen_native_2.3.2,tizen_web_2.4,tizen_native_2.4,tizen_web_3.0,tizen_native_3.0,tizen_csharp_3.0,tizen_web_4.0,tizen_native_4.0,tizen_csharp_4.0,tizen_web_5.0,tizen_native_5.0,tizen_csharp_5.0,tizen_web_5.5,tizen_native_5.5,tizen_csharp_5.5,tizen_web_6.0,tizen_native_6.0,tizen_csharp_6.0
+PROFILE=mobile,wearable,tv,common_iot
diff --git a/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/manager/lib/tct-mgr-app-3.1.5-20181122.jar b/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/manager/lib/tct-mgr-app-3.1.5-20181122.jar
new file mode 100755 (executable)
index 0000000..3ecfe95
Binary files /dev/null and b/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/manager/lib/tct-mgr-app-3.1.5-20181122.jar differ
diff --git a/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/manager/plan/Full_common_iot.xml b/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/manager/plan/Full_common_iot.xml
new file mode 100755 (executable)
index 0000000..a4f2e12
--- /dev/null
@@ -0,0 +1,755 @@
+<?xml version="1.0" encoding="UTF-8"?>\r
+<ns3:testplan xmlns:ns3="http://www.example.org/plan/" xmlns="" name="Full_mobile" profile="mobile">\r
+  <execute_type>All</execute_type>\r
+  <suite name="tct-webdatabase-w3c-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
+    <auto_tcn>247</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>247</total_tcn>\r
+    <pkg_name>mobile/tct-webdatabase-w3c-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-jsenhance-html5-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
+    <auto_tcn>49</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>49</total_tcn>\r
+    <pkg_name>common/tct-jsenhance-html5-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-multicolumn-css3-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
+    <auto_tcn>141</auto_tcn>\r
+    <manual_tcn>18</manual_tcn>\r
+    <total_tcn>159</total_tcn>\r
+    <pkg_name>mobile/tct-multicolumn-css3-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-messaging-mms-tizen-tests" launcher="WRTLauncher" category="Tizen Web Device APIs">\r
+    <auto_tcn>123</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>123</total_tcn>\r
+    <pkg_name>mobile/tct-messaging-mms-tizen-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-workers-w3c-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
+    <auto_tcn>85</auto_tcn>\r
+    <manual_tcn>1</manual_tcn>\r
+    <total_tcn>86</total_tcn>\r
+    <pkg_name>mobile/tct-workers-w3c-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-transitions-css3-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
+    <auto_tcn>26</auto_tcn>\r
+    <manual_tcn>5</manual_tcn>\r
+    <total_tcn>31</total_tcn>\r
+    <pkg_name>common/tct-transitions-css3-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-namespace-tizen-tests" launcher="WRTLauncher" category="Tizen Web Device APIs">\r
+    <auto_tcn>23</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>23</total_tcn>\r
+    <pkg_name>common/tct-namespace-tizen-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-messaging-email-tizen-tests" launcher="WRTLauncher" category="Tizen Web Device APIs">\r
+    <auto_tcn>308</auto_tcn>\r
+    <manual_tcn>1</manual_tcn>\r
+    <total_tcn>309</total_tcn>\r
+    <pkg_name>mobile/tct-messaging-email-tizen-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-2dtransforms-css3-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
+    <auto_tcn>34</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>34</total_tcn>\r
+    <pkg_name>common/tct-2dtransforms-css3-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-time-tizen-tests" launcher="WRTLauncher" category="Tizen Web Device APIs">\r
+    <auto_tcn>470</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>470</total_tcn>\r
+    <pkg_name>mobile/tct-time-tizen-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-forms-html5-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
+    <auto_tcn>151</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>151</total_tcn>\r
+    <pkg_name>mobile/tct-forms-html5-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-capability-tests" launcher="WRTLauncher" category="Compliance">\r
+    <auto_tcn>15</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>15</total_tcn>\r
+    <pkg_name>common/tct-capability-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-fileapi-w3c-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
+    <auto_tcn>98</auto_tcn>\r
+    <manual_tcn>3</manual_tcn>\r
+    <total_tcn>101</total_tcn>\r
+    <pkg_name>mobile/tct-fileapi-w3c-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-mediacapture-w3c-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
+    <auto_tcn>7</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>7</total_tcn>\r
+    <pkg_name>common/tct-mediacapture-w3c-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-ext01-wrt-tests" launcher="WRTLauncher -iu" category="Web Runtime">\r
+    <auto_tcn>3</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>3</total_tcn>\r
+    <pkg_name>mobile/tct-ext01-wrt-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-exif-tizen-tests" launcher="WRTLauncher" category="Tizen Web Device APIs">\r
+    <auto_tcn>64</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>64</total_tcn>\r
+    <pkg_name>common/tct-exif-tizen-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-csp-w3c-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
+    <auto_tcn>133</auto_tcn>\r
+    <manual_tcn>78</manual_tcn>\r
+    <total_tcn>211</total_tcn>\r
+    <pkg_name>mobile/tct-csp-w3c-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-privilege-wrt-tests" category="Web Runtime">\r
+    <auto_tcn>155</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>155</total_tcn>\r
+    <pkg_name>mobile/tct-privilege-wrt-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-mediakey-tizen-tests" launcher="WRTLauncher" category="Tizen Web Device APIs">\r
+    <auto_tcn>11</auto_tcn>\r
+    <manual_tcn>4</manual_tcn>\r
+    <total_tcn>15</total_tcn>\r
+    <pkg_name>mobile/tct-mediakey-tizen-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-deviceorientation-w3c-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
+    <auto_tcn>37</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>37</total_tcn>\r
+    <pkg_name>mobile/tct-deviceorientation-w3c-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-webmessaging-w3c-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
+    <auto_tcn>176</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>176</total_tcn>\r
+    <pkg_name>mobile/tct-webmessaging-w3c-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-package-tizen-tests" launcher="WRTLauncher" category="Tizen Web Device APIs">\r
+    <auto_tcn>54</auto_tcn>\r
+    <manual_tcn>12</manual_tcn>\r
+    <total_tcn>66</total_tcn>\r
+    <pkg_name>common/tct-package-tizen-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-notification-tizen-tests" launcher="WRTLauncher" category="Tizen Web Device APIs">\r
+    <auto_tcn>93</auto_tcn>\r
+    <manual_tcn>1</manual_tcn>\r
+    <total_tcn>94</total_tcn>\r
+    <pkg_name>mobile/tct-notification-tizen-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-fmradio-tizen-tests" launcher="WRTLauncher" category="Tizen Web Device APIs">\r
+    <auto_tcn>67</auto_tcn>\r
+    <manual_tcn>7</manual_tcn>\r
+    <total_tcn>74</total_tcn>\r
+    <pkg_name>mobile/tct-fmradio-tizen-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-rt01-wrt-tests" launcher="WRTLauncher -iu" category="Web Runtime">\r
+    <auto_tcn>12</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>12</total_tcn>\r
+    <pkg_name>common/tct-rt01-wrt-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-appcache-html5-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
+    <auto_tcn>36</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>36</total_tcn>\r
+    <pkg_name>mobile/tct-appcache-html5-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-filesystemapi-w3c-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
+    <auto_tcn>208</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>208</total_tcn>\r
+    <pkg_name>mobile/tct-filesystemapi-w3c-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-svg-html5-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
+    <auto_tcn>3</auto_tcn>\r
+    <manual_tcn>9</manual_tcn>\r
+    <total_tcn>12</total_tcn>\r
+    <pkg_name>common/tct-svg-html5-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-websocket-w3c-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
+    <auto_tcn>270</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>270</total_tcn>\r
+    <pkg_name>mobile/tct-websocket-w3c-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-flexiblebox-css3-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
+    <auto_tcn>25</auto_tcn>\r
+    <manual_tcn>28</manual_tcn>\r
+    <total_tcn>53</total_tcn>\r
+    <pkg_name>common/tct-flexiblebox-css3-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-dnd-html5-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
+    <auto_tcn>6</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>6</total_tcn>\r
+    <pkg_name>mobile/tct-dnd-html5-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-extra-html5-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
+    <auto_tcn>548</auto_tcn>\r
+    <manual_tcn>25</manual_tcn>\r
+    <total_tcn>573</total_tcn>\r
+    <pkg_name>mobile/tct-extra-html5-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-fullscreen-nonw3c-tests" launcher="WRTLauncher" category="Supplementary APIs">\r
+    <auto_tcn>16</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>16</total_tcn>\r
+    <pkg_name>mobile/tct-fullscreen-nonw3c-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-colors-css3-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
+    <auto_tcn>46</auto_tcn>\r
+    <manual_tcn>29</manual_tcn>\r
+    <total_tcn>75</total_tcn>\r
+    <pkg_name>common/tct-colors-css3-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-indexeddb-w3c-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
+    <auto_tcn>400</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>400</total_tcn>\r
+    <pkg_name>mobile/tct-indexeddb-w3c-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-sandbox-html5-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
+    <auto_tcn>72</auto_tcn>\r
+    <manual_tcn>1</manual_tcn>\r
+    <total_tcn>73</total_tcn>\r
+    <pkg_name>common/tct-sandbox-html5-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-networkbearerselection-tizen-tests" launcher="WRTLauncher" category="Tizen Web Device APIs">\r
+    <auto_tcn>24</auto_tcn>\r
+    <manual_tcn>1</manual_tcn>\r
+    <total_tcn>25</total_tcn>\r
+    <pkg_name>mobile/tct-networkbearerselection-tizen-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-push-tizen-tests" launcher="WRTLauncher" category="Tizen Web Device APIs">\r
+    <auto_tcn>41</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>41</total_tcn>\r
+    <pkg_name>common/tct-push-tizen-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-messageport-tizen-tests" launcher="WRTLauncher" category="Tizen Web Device APIs">\r
+    <auto_tcn>48</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>48</total_tcn>\r
+    <pkg_name>mobile/tct-messageport-tizen-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-browserstate-html5-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
+    <auto_tcn>3</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>3</total_tcn>\r
+    <pkg_name>mobile/tct-browserstate-html5-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-cors-w3c-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
+    <auto_tcn>10</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>10</total_tcn>\r
+    <pkg_name>common/tct-cors-w3c-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-xmlhttprequest-w3c-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
+    <auto_tcn>262</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>262</total_tcn>\r
+    <pkg_name>mobile/tct-xmlhttprequest-w3c-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-navigationtiming-w3c-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
+    <auto_tcn>45</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>45</total_tcn>\r
+    <pkg_name>mobile/tct-navigationtiming-w3c-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-typedarrays-nonw3c-tests" launcher="WRTLauncher" category="Supplementary APIs">\r
+    <auto_tcn>80</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>80</total_tcn>\r
+    <pkg_name>common/tct-typedarrays-nonw3c-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-animations-css3-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
+    <auto_tcn>24</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>24</total_tcn>\r
+    <pkg_name>common/tct-animations-css3-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-badge-tizen-tests" launcher="WRTLauncher" category="Tizen Web Device APIs">\r
+    <auto_tcn>26</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>26</total_tcn>\r
+    <pkg_name>mobile/tct-badge-tizen-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-nfc-tizen-tests" launcher="WRTLauncher" category="Tizen Web Device APIs">\r
+    <auto_tcn>195</auto_tcn>\r
+    <manual_tcn>35</manual_tcn>\r
+    <total_tcn>230</total_tcn>\r
+    <pkg_name>mobile/tct-nfc-tizen-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-pagevisibility-w3c-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
+    <auto_tcn>18</auto_tcn>\r
+    <manual_tcn>2</manual_tcn>\r
+    <total_tcn>20</total_tcn>\r
+    <pkg_name>mobile/tct-pagevisibility-w3c-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-contact-tizen-tests" launcher="WRTLauncher" category="Tizen Web Device APIs">\r
+    <auto_tcn>441</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>441</total_tcn>\r
+    <pkg_name>mobile/tct-contact-tizen-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-content-tizen-tests" launcher="WRTLauncher" category="Tizen Web Device APIs">\r
+    <auto_tcn>245</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>245</total_tcn>\r
+    <pkg_name>common/tct-content-tizen-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-gumallow-w3c-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
+    <auto_tcn>6</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>6</total_tcn>\r
+    <pkg_name>common/tct-gumallow-w3c-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-notification-w3c-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
+    <auto_tcn>14</auto_tcn>\r
+    <manual_tcn>3</manual_tcn>\r
+    <total_tcn>17</total_tcn>\r
+    <pkg_name>mobile/tct-notification-w3c-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-sp01-wrt-tests" launcher="WRTLauncher -iu" category="Web Runtime">\r
+    <auto_tcn>4</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>4</total_tcn>\r
+    <pkg_name>common/tct-sp01-wrt-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-widget02-w3c-tests" category="W3C/HTML5 APIs">\r
+    <auto_tcn>68</auto_tcn>\r
+    <manual_tcn>82</manual_tcn>\r
+    <total_tcn>150</total_tcn>\r
+    <pkg_name>mobile/tct-widget02-w3c-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-websetting-tizen-tests" launcher="WRTLauncher" category="Tizen Web Device APIs">\r
+    <auto_tcn>22</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>22</total_tcn>\r
+    <pkg_name>mobile/tct-websetting-tizen-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-audio-html5-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
+    <auto_tcn>333</auto_tcn>\r
+    <manual_tcn>1</manual_tcn>\r
+    <total_tcn>334</total_tcn>\r
+    <pkg_name>mobile/tct-audio-html5-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-screenorientation-w3c-tests" launcher="xwalk" category="W3C/HTML5 APIs">\r
+    <auto_tcn>17</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>17</total_tcn>\r
+    <pkg_name>mobile/tct-screenorientation-w3c-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-rt02-wrt-tests" category="Web Runtime">\r
+    <auto_tcn>3</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>3</total_tcn>\r
+    <pkg_name>common/tct-rt02-wrt-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-sp02-wrt-tests" category="Web Runtime">\r
+    <auto_tcn>1</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>1</total_tcn>\r
+    <pkg_name>common/tct-sp02-wrt-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-sound-tizen-tests" launcher="WRTLauncher" category="Tizen Web Device APIs">\r
+    <auto_tcn>52</auto_tcn>\r
+    <manual_tcn>8</manual_tcn>\r
+    <total_tcn>60</total_tcn>\r
+    <pkg_name>mobile/tct-sound-tizen-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-ext02-wrt-tests" category="Web Runtime">\r
+    <auto_tcn>8</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>8</total_tcn>\r
+    <pkg_name>common/tct-ext02-wrt-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-application-tizen-tests" launcher="WRTLauncher" category="Tizen Web Device APIs">\r
+    <auto_tcn>184</auto_tcn>\r
+    <manual_tcn>8</manual_tcn>\r
+    <total_tcn>192</total_tcn>\r
+    <pkg_name>mobile/tct-application-tizen-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-bluetooth-tizen-tests" launcher="WRTLauncher" category="Tizen Web Device APIs">\r
+    <auto_tcn>257</auto_tcn>\r
+    <manual_tcn>142</manual_tcn>\r
+    <total_tcn>399</total_tcn>\r
+    <pkg_name>mobile/tct-bluetooth-tizen-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-humanactivitymonitor-tizen-tests" launcher="WRTLauncher" category="Tizen Web Device APIs">\r
+    <auto_tcn>61</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>61</total_tcn>\r
+    <pkg_name>mobile/tct-humanactivitymonitor-tizen-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-fonts-css3-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
+    <auto_tcn>11</auto_tcn>\r
+    <manual_tcn>131</manual_tcn>\r
+    <total_tcn>142</total_tcn>\r
+    <pkg_name>common/tct-fonts-css3-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-speech-w3c-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
+    <auto_tcn>40</auto_tcn>\r
+    <manual_tcn>1</manual_tcn>\r
+    <total_tcn>41</total_tcn>\r
+    <pkg_name>common/tct-speech-w3c-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-security-tcs-tests" launcher="WRTLauncher" category="Compliance">\r
+    <auto_tcn>3</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>3</total_tcn>\r
+    <pkg_name>common/tct-security-tcs-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-ui01-wrt-tests" launcher="WRTLauncher -iu" category="Web Runtime">\r
+    <auto_tcn>30</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>30</total_tcn>\r
+    <pkg_name>mobile/tct-ui01-wrt-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-animationtiming-w3c-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
+    <auto_tcn>11</auto_tcn>\r
+    <manual_tcn>7</manual_tcn>\r
+    <total_tcn>18</total_tcn>\r
+    <pkg_name>common/tct-animationtiming-w3c-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-selectorslevel2-w3c-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
+    <auto_tcn>30</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>30</total_tcn>\r
+    <pkg_name>common/tct-selectorslevel2-w3c-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-wgtapi01-w3c-tests" launcher="WRTLauncher -iu" category="W3C/HTML5 APIs">\r
+    <auto_tcn>107</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>107</total_tcn>\r
+    <pkg_name>common/tct-wgtapi01-w3c-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-inputdevice-tizen-tests" launcher="WRTLauncher" category="Tizen Web Device APIs">\r
+    <auto_tcn>19</auto_tcn>\r
+    <manual_tcn>1</manual_tcn>\r
+    <total_tcn>20</total_tcn>\r
+    <pkg_name>mobile/tct-inputdevice-tizen-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-webaudio-w3c-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
+    <auto_tcn>422</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>422</total_tcn>\r
+    <pkg_name>mobile/tct-webaudio-w3c-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-filewriterapi-w3c-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
+    <auto_tcn>106</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>106</total_tcn>\r
+    <pkg_name>mobile/tct-filewriterapi-w3c-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-sensor-tizen-tests" launcher="WRTLauncher" category="Tizen Web Device APIs">\r
+    <auto_tcn>119</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>119</total_tcn>\r
+    <pkg_name>mobile/tct-sensor-tizen-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-secureelement-tizen-tests" launcher="WRTLauncher" category="Tizen Web Device APIs">\r
+    <auto_tcn>71</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>71</total_tcn>\r
+    <pkg_name>mobile/tct-secureelement-tizen-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-power-tizen-tests" launcher="WRTLauncher" category="Tizen Web Device APIs">\r
+    <auto_tcn>50</auto_tcn>\r
+    <manual_tcn>6</manual_tcn>\r
+    <total_tcn>56</total_tcn>\r
+    <pkg_name>mobile/tct-power-tizen-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-appwgt-wrt-tests" category="Web Runtime">\r
+    <auto_tcn>7</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>7</total_tcn>\r
+    <pkg_name>common/tct-appwgt-wrt-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-privilege-tizen-tests" launcher="WRTLauncher" category="Tizen Web Device APIs">\r
+    <auto_tcn>65</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>65</total_tcn>\r
+    <pkg_name>common/tct-privilege-tizen-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-alarm-tizen-tests" launcher="WRTLauncher" category="Tizen Web Device APIs">\r
+    <auto_tcn>61</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>61</total_tcn>\r
+    <pkg_name>common/tct-alarm-tizen-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-touchevent-w3c-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
+    <auto_tcn>16</auto_tcn>\r
+    <manual_tcn>7</manual_tcn>\r
+    <total_tcn>23</total_tcn>\r
+    <pkg_name>mobile/tct-touchevent-w3c-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-wgtapi02-w3c-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
+    <auto_tcn>0</auto_tcn>\r
+    <manual_tcn>34</manual_tcn>\r
+    <total_tcn>34</total_tcn>\r
+    <pkg_name>common/tct-wgtapi02-w3c-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-archive-tizen-tests" launcher="WRTLauncher" category="Tizen Web Device APIs">\r
+    <auto_tcn>106</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>106</total_tcn>\r
+    <pkg_name>common/tct-archive-tizen-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-account-tizen-tests" launcher="WRTLauncher" category="Tizen Web Device APIs">\r
+    <auto_tcn>89</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>89</total_tcn>\r
+    <pkg_name>mobile/tct-account-tizen-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-tizen-tizen-tests" launcher="WRTLauncher" category="Tizen Web Device APIs">\r
+    <auto_tcn>81</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>81</total_tcn>\r
+    <pkg_name>common/tct-tizen-tizen-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-widget01-w3c-tests" launcher="WRTLauncher -iu" category="W3C/HTML5 APIs">\r
+    <auto_tcn>155</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>155</total_tcn>\r
+    <pkg_name>mobile/tct-widget01-w3c-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-bookmark-tizen-tests" launcher="WRTLauncher" category="Tizen Web Device APIs">\r
+    <auto_tcn>36</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>36</total_tcn>\r
+    <pkg_name>mobile/tct-bookmark-tizen-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-3dtransforms-css3-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
+    <auto_tcn>32</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>32</total_tcn>\r
+    <pkg_name>common/tct-3dtransforms-css3-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-geoallow-w3c-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
+    <auto_tcn>208</auto_tcn>\r
+    <manual_tcn>3</manual_tcn>\r
+    <total_tcn>211</total_tcn>\r
+    <pkg_name>mobile/tct-geoallow-w3c-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-calendar-tizen-tests" launcher="WRTLauncher" category="Tizen Web Device APIs">\r
+    <auto_tcn>354</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>354</total_tcn>\r
+    <pkg_name>mobile/tct-calendar-tizen-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-sessionhistory-html5-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
+    <auto_tcn>148</auto_tcn>\r
+    <manual_tcn>1</manual_tcn>\r
+    <total_tcn>149</total_tcn>\r
+    <pkg_name>common/tct-sessionhistory-html5-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-datacontrol-tizen-tests" launcher="WRTLauncher" category="Tizen Web Device APIs">\r
+    <auto_tcn>113</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>113</total_tcn>\r
+    <pkg_name>mobile/tct-datacontrol-tizen-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-appcontrol-tizen-tests" launcher="WRTLauncher" category="Tizen Web Device APIs">\r
+    <auto_tcn>5</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>5</total_tcn>\r
+    <pkg_name>mobile/tct-appcontrol-tizen-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-callhistory-tizen-tests" launcher="WRTLauncher" category="Tizen Web Device APIs">\r
+    <auto_tcn>80</auto_tcn>\r
+    <manual_tcn>27</manual_tcn>\r
+    <total_tcn>107</total_tcn>\r
+    <pkg_name>mobile/tct-callhistory-tizen-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-geodeny-w3c-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
+    <auto_tcn>0</auto_tcn>\r
+    <manual_tcn>3</manual_tcn>\r
+    <total_tcn>3</total_tcn>\r
+    <pkg_name>mobile/tct-geodeny-w3c-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-canvas-html5-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
+    <auto_tcn>846</auto_tcn>\r
+    <manual_tcn>18</manual_tcn>\r
+    <total_tcn>864</total_tcn>\r
+    <pkg_name>common/tct-canvas-html5-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-ui-css3-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
+    <auto_tcn>43</auto_tcn>\r
+    <manual_tcn>1</manual_tcn>\r
+    <total_tcn>44</total_tcn>\r
+    <pkg_name>common/tct-ui-css3-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-testconfig" launcher="WRTLauncher">\r
+    <auto_tcn>0</auto_tcn>\r
+    <manual_tcn>20</manual_tcn>\r
+    <total_tcn>20</total_tcn>\r
+    <pkg_name>common/tct-testconfig-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-selectorslevel1-w3c-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
+    <auto_tcn>78</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>78</total_tcn>\r
+    <pkg_name>common/tct-selectorslevel1-w3c-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-sse-w3c-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
+    <auto_tcn>68</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>68</total_tcn>\r
+    <pkg_name>mobile/tct-sse-w3c-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-widgetpolicy-w3c-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
+    <auto_tcn>0</auto_tcn>\r
+    <manual_tcn>33</manual_tcn>\r
+    <total_tcn>33</total_tcn>\r
+    <pkg_name>common/tct-widgetpolicy-w3c-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-batterystatus-w3c-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
+    <auto_tcn>23</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>23</total_tcn>\r
+    <pkg_name>mobile/tct-batterystatus-w3c-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-mediacontroller-tizen-tests" launcher="WRTLauncher" category="Tizen Web Device APIs">\r
+    <auto_tcn>162</auto_tcn>\r
+    <manual_tcn>3</manual_tcn>\r
+    <total_tcn>165</total_tcn>\r
+    <pkg_name>mobile/tct-mediacontroller-tizen-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-webuifw-tests03" category="Web UI Framework">\r
+    <auto_tcn>179</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>179</total_tcn>\r
+    <pkg_name>mobile/tct-webuifw-tests03-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-maxLength-wrt-tests" launcher="WRTLauncher -iu" category="Web Runtime">\r
+    <auto_tcn>14</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>14</total_tcn>\r
+    <pkg_name>common/tct-maxLength-wrt-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-webuifw-tests04" category="Web UI Framework">\r
+    <auto_tcn>375</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>375</total_tcn>\r
+    <pkg_name>mobile/tct-webuifw-tests04-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-systeminfo-tizen-tests" launcher="WRTLauncher" category="Tizen Web Device APIs">\r
+    <auto_tcn>304</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>304</total_tcn>\r
+    <pkg_name>mobile/tct-systeminfo-tizen-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-webuifw-tests05" category="Web UI Framework">\r
+    <auto_tcn>322</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>322</total_tcn>\r
+    <pkg_name>mobile/tct-webuifw-tests05-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-filesystem-tizen-tests" launcher="WRTLauncher" category="Tizen Web Device APIs">\r
+    <auto_tcn>289</auto_tcn>\r
+    <manual_tcn>3</manual_tcn>\r
+    <total_tcn>292</total_tcn>\r
+    <pkg_name>mobile/tct-filesystem-tizen-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-webuifw-tests06" category="Web UI Framework">\r
+    <auto_tcn>98</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>98</total_tcn>\r
+    <pkg_name>mobile/tct-webuifw-tests06-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-webuifw-tests01" category="Web UI Framework">\r
+    <auto_tcn>355</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>355</total_tcn>\r
+    <pkg_name>mobile/tct-webuifw-tests01-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-webuifw-tests02" category="Web UI Framework">\r
+    <auto_tcn>455</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>455</total_tcn>\r
+    <pkg_name>mobile/tct-webuifw-tests02-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-vibration-w3c-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
+    <auto_tcn>2</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>2</total_tcn>\r
+    <pkg_name>mobile/tct-vibration-w3c-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-messaging-sms-tizen-tests" launcher="WRTLauncher" category="Tizen Web Device APIs">\r
+    <auto_tcn>184</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>184</total_tcn>\r
+    <pkg_name>mobile/tct-messaging-sms-tizen-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-text-css3-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
+    <auto_tcn>27</auto_tcn>\r
+    <manual_tcn>15</manual_tcn>\r
+    <total_tcn>42</total_tcn>\r
+    <pkg_name>common/tct-text-css3-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-stab-wrt-tests" category="Web Runtime">\r
+    <auto_tcn>1</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>1</total_tcn>\r
+    <pkg_name>common/tct-stab-wrt-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-webstorage-w3c-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
+    <auto_tcn>177</auto_tcn>\r
+    <manual_tcn>4</manual_tcn>\r
+    <total_tcn>181</total_tcn>\r
+    <pkg_name>common/tct-webstorage-w3c-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-behavior-tests">\r
+    <auto_tcn>0</auto_tcn>\r
+    <manual_tcn>30</manual_tcn>\r
+    <total_tcn>30</total_tcn>\r
+    <pkg_name>mobile/tct-behavior-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-download-tizen-tests" launcher="WRTLauncher" category="Tizen Web Device APIs">\r
+    <auto_tcn>62</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>62</total_tcn>\r
+    <pkg_name>common/tct-download-tizen-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-mediaqueries-css3-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
+    <auto_tcn>49</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>49</total_tcn>\r
+    <pkg_name>mobile/tct-mediaqueries-css3-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-systemsetting-tizen-tests" launcher="WRTLauncher" category="Tizen Web Device APIs">\r
+    <auto_tcn>33</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>33</total_tcn>\r
+    <pkg_name>mobile/tct-systemsetting-tizen-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-backgrounds-css3-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
+    <auto_tcn>541</auto_tcn>\r
+    <manual_tcn>74</manual_tcn>\r
+    <total_tcn>615</total_tcn>\r
+    <pkg_name>mobile/tct-backgrounds-css3-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-video-html5-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
+    <auto_tcn>361</auto_tcn>\r
+    <manual_tcn>4</manual_tcn>\r
+    <total_tcn>365</total_tcn>\r
+    <pkg_name>mobile/tct-video-html5-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-pm-wrt-tests" category="Web Runtime">\r
+    <auto_tcn>24</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>24</total_tcn>\r
+    <pkg_name>common/tct-pm-wrt-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-webgl-nonw3c-tests" launcher="WRTLauncher" category="Supplementary APIs">\r
+    <auto_tcn>889</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>889</total_tcn>\r
+    <pkg_name>common/tct-webgl-nonw3c-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+</ns3:testplan>\r
+\r
diff --git a/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/manager/plan/Full_mobile.xml b/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/manager/plan/Full_mobile.xml
new file mode 100755 (executable)
index 0000000..a4f2e12
--- /dev/null
@@ -0,0 +1,755 @@
+<?xml version="1.0" encoding="UTF-8"?>\r
+<ns3:testplan xmlns:ns3="http://www.example.org/plan/" xmlns="" name="Full_mobile" profile="mobile">\r
+  <execute_type>All</execute_type>\r
+  <suite name="tct-webdatabase-w3c-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
+    <auto_tcn>247</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>247</total_tcn>\r
+    <pkg_name>mobile/tct-webdatabase-w3c-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-jsenhance-html5-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
+    <auto_tcn>49</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>49</total_tcn>\r
+    <pkg_name>common/tct-jsenhance-html5-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-multicolumn-css3-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
+    <auto_tcn>141</auto_tcn>\r
+    <manual_tcn>18</manual_tcn>\r
+    <total_tcn>159</total_tcn>\r
+    <pkg_name>mobile/tct-multicolumn-css3-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-messaging-mms-tizen-tests" launcher="WRTLauncher" category="Tizen Web Device APIs">\r
+    <auto_tcn>123</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>123</total_tcn>\r
+    <pkg_name>mobile/tct-messaging-mms-tizen-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-workers-w3c-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
+    <auto_tcn>85</auto_tcn>\r
+    <manual_tcn>1</manual_tcn>\r
+    <total_tcn>86</total_tcn>\r
+    <pkg_name>mobile/tct-workers-w3c-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-transitions-css3-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
+    <auto_tcn>26</auto_tcn>\r
+    <manual_tcn>5</manual_tcn>\r
+    <total_tcn>31</total_tcn>\r
+    <pkg_name>common/tct-transitions-css3-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-namespace-tizen-tests" launcher="WRTLauncher" category="Tizen Web Device APIs">\r
+    <auto_tcn>23</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>23</total_tcn>\r
+    <pkg_name>common/tct-namespace-tizen-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-messaging-email-tizen-tests" launcher="WRTLauncher" category="Tizen Web Device APIs">\r
+    <auto_tcn>308</auto_tcn>\r
+    <manual_tcn>1</manual_tcn>\r
+    <total_tcn>309</total_tcn>\r
+    <pkg_name>mobile/tct-messaging-email-tizen-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-2dtransforms-css3-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
+    <auto_tcn>34</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>34</total_tcn>\r
+    <pkg_name>common/tct-2dtransforms-css3-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-time-tizen-tests" launcher="WRTLauncher" category="Tizen Web Device APIs">\r
+    <auto_tcn>470</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>470</total_tcn>\r
+    <pkg_name>mobile/tct-time-tizen-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-forms-html5-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
+    <auto_tcn>151</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>151</total_tcn>\r
+    <pkg_name>mobile/tct-forms-html5-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-capability-tests" launcher="WRTLauncher" category="Compliance">\r
+    <auto_tcn>15</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>15</total_tcn>\r
+    <pkg_name>common/tct-capability-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-fileapi-w3c-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
+    <auto_tcn>98</auto_tcn>\r
+    <manual_tcn>3</manual_tcn>\r
+    <total_tcn>101</total_tcn>\r
+    <pkg_name>mobile/tct-fileapi-w3c-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-mediacapture-w3c-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
+    <auto_tcn>7</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>7</total_tcn>\r
+    <pkg_name>common/tct-mediacapture-w3c-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-ext01-wrt-tests" launcher="WRTLauncher -iu" category="Web Runtime">\r
+    <auto_tcn>3</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>3</total_tcn>\r
+    <pkg_name>mobile/tct-ext01-wrt-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-exif-tizen-tests" launcher="WRTLauncher" category="Tizen Web Device APIs">\r
+    <auto_tcn>64</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>64</total_tcn>\r
+    <pkg_name>common/tct-exif-tizen-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-csp-w3c-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
+    <auto_tcn>133</auto_tcn>\r
+    <manual_tcn>78</manual_tcn>\r
+    <total_tcn>211</total_tcn>\r
+    <pkg_name>mobile/tct-csp-w3c-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-privilege-wrt-tests" category="Web Runtime">\r
+    <auto_tcn>155</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>155</total_tcn>\r
+    <pkg_name>mobile/tct-privilege-wrt-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-mediakey-tizen-tests" launcher="WRTLauncher" category="Tizen Web Device APIs">\r
+    <auto_tcn>11</auto_tcn>\r
+    <manual_tcn>4</manual_tcn>\r
+    <total_tcn>15</total_tcn>\r
+    <pkg_name>mobile/tct-mediakey-tizen-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-deviceorientation-w3c-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
+    <auto_tcn>37</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>37</total_tcn>\r
+    <pkg_name>mobile/tct-deviceorientation-w3c-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-webmessaging-w3c-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
+    <auto_tcn>176</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>176</total_tcn>\r
+    <pkg_name>mobile/tct-webmessaging-w3c-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-package-tizen-tests" launcher="WRTLauncher" category="Tizen Web Device APIs">\r
+    <auto_tcn>54</auto_tcn>\r
+    <manual_tcn>12</manual_tcn>\r
+    <total_tcn>66</total_tcn>\r
+    <pkg_name>common/tct-package-tizen-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-notification-tizen-tests" launcher="WRTLauncher" category="Tizen Web Device APIs">\r
+    <auto_tcn>93</auto_tcn>\r
+    <manual_tcn>1</manual_tcn>\r
+    <total_tcn>94</total_tcn>\r
+    <pkg_name>mobile/tct-notification-tizen-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-fmradio-tizen-tests" launcher="WRTLauncher" category="Tizen Web Device APIs">\r
+    <auto_tcn>67</auto_tcn>\r
+    <manual_tcn>7</manual_tcn>\r
+    <total_tcn>74</total_tcn>\r
+    <pkg_name>mobile/tct-fmradio-tizen-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-rt01-wrt-tests" launcher="WRTLauncher -iu" category="Web Runtime">\r
+    <auto_tcn>12</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>12</total_tcn>\r
+    <pkg_name>common/tct-rt01-wrt-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-appcache-html5-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
+    <auto_tcn>36</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>36</total_tcn>\r
+    <pkg_name>mobile/tct-appcache-html5-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-filesystemapi-w3c-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
+    <auto_tcn>208</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>208</total_tcn>\r
+    <pkg_name>mobile/tct-filesystemapi-w3c-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-svg-html5-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
+    <auto_tcn>3</auto_tcn>\r
+    <manual_tcn>9</manual_tcn>\r
+    <total_tcn>12</total_tcn>\r
+    <pkg_name>common/tct-svg-html5-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-websocket-w3c-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
+    <auto_tcn>270</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>270</total_tcn>\r
+    <pkg_name>mobile/tct-websocket-w3c-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-flexiblebox-css3-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
+    <auto_tcn>25</auto_tcn>\r
+    <manual_tcn>28</manual_tcn>\r
+    <total_tcn>53</total_tcn>\r
+    <pkg_name>common/tct-flexiblebox-css3-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-dnd-html5-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
+    <auto_tcn>6</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>6</total_tcn>\r
+    <pkg_name>mobile/tct-dnd-html5-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-extra-html5-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
+    <auto_tcn>548</auto_tcn>\r
+    <manual_tcn>25</manual_tcn>\r
+    <total_tcn>573</total_tcn>\r
+    <pkg_name>mobile/tct-extra-html5-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-fullscreen-nonw3c-tests" launcher="WRTLauncher" category="Supplementary APIs">\r
+    <auto_tcn>16</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>16</total_tcn>\r
+    <pkg_name>mobile/tct-fullscreen-nonw3c-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-colors-css3-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
+    <auto_tcn>46</auto_tcn>\r
+    <manual_tcn>29</manual_tcn>\r
+    <total_tcn>75</total_tcn>\r
+    <pkg_name>common/tct-colors-css3-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-indexeddb-w3c-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
+    <auto_tcn>400</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>400</total_tcn>\r
+    <pkg_name>mobile/tct-indexeddb-w3c-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-sandbox-html5-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
+    <auto_tcn>72</auto_tcn>\r
+    <manual_tcn>1</manual_tcn>\r
+    <total_tcn>73</total_tcn>\r
+    <pkg_name>common/tct-sandbox-html5-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-networkbearerselection-tizen-tests" launcher="WRTLauncher" category="Tizen Web Device APIs">\r
+    <auto_tcn>24</auto_tcn>\r
+    <manual_tcn>1</manual_tcn>\r
+    <total_tcn>25</total_tcn>\r
+    <pkg_name>mobile/tct-networkbearerselection-tizen-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-push-tizen-tests" launcher="WRTLauncher" category="Tizen Web Device APIs">\r
+    <auto_tcn>41</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>41</total_tcn>\r
+    <pkg_name>common/tct-push-tizen-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-messageport-tizen-tests" launcher="WRTLauncher" category="Tizen Web Device APIs">\r
+    <auto_tcn>48</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>48</total_tcn>\r
+    <pkg_name>mobile/tct-messageport-tizen-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-browserstate-html5-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
+    <auto_tcn>3</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>3</total_tcn>\r
+    <pkg_name>mobile/tct-browserstate-html5-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-cors-w3c-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
+    <auto_tcn>10</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>10</total_tcn>\r
+    <pkg_name>common/tct-cors-w3c-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-xmlhttprequest-w3c-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
+    <auto_tcn>262</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>262</total_tcn>\r
+    <pkg_name>mobile/tct-xmlhttprequest-w3c-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-navigationtiming-w3c-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
+    <auto_tcn>45</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>45</total_tcn>\r
+    <pkg_name>mobile/tct-navigationtiming-w3c-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-typedarrays-nonw3c-tests" launcher="WRTLauncher" category="Supplementary APIs">\r
+    <auto_tcn>80</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>80</total_tcn>\r
+    <pkg_name>common/tct-typedarrays-nonw3c-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-animations-css3-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
+    <auto_tcn>24</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>24</total_tcn>\r
+    <pkg_name>common/tct-animations-css3-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-badge-tizen-tests" launcher="WRTLauncher" category="Tizen Web Device APIs">\r
+    <auto_tcn>26</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>26</total_tcn>\r
+    <pkg_name>mobile/tct-badge-tizen-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-nfc-tizen-tests" launcher="WRTLauncher" category="Tizen Web Device APIs">\r
+    <auto_tcn>195</auto_tcn>\r
+    <manual_tcn>35</manual_tcn>\r
+    <total_tcn>230</total_tcn>\r
+    <pkg_name>mobile/tct-nfc-tizen-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-pagevisibility-w3c-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
+    <auto_tcn>18</auto_tcn>\r
+    <manual_tcn>2</manual_tcn>\r
+    <total_tcn>20</total_tcn>\r
+    <pkg_name>mobile/tct-pagevisibility-w3c-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-contact-tizen-tests" launcher="WRTLauncher" category="Tizen Web Device APIs">\r
+    <auto_tcn>441</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>441</total_tcn>\r
+    <pkg_name>mobile/tct-contact-tizen-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-content-tizen-tests" launcher="WRTLauncher" category="Tizen Web Device APIs">\r
+    <auto_tcn>245</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>245</total_tcn>\r
+    <pkg_name>common/tct-content-tizen-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-gumallow-w3c-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
+    <auto_tcn>6</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>6</total_tcn>\r
+    <pkg_name>common/tct-gumallow-w3c-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-notification-w3c-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
+    <auto_tcn>14</auto_tcn>\r
+    <manual_tcn>3</manual_tcn>\r
+    <total_tcn>17</total_tcn>\r
+    <pkg_name>mobile/tct-notification-w3c-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-sp01-wrt-tests" launcher="WRTLauncher -iu" category="Web Runtime">\r
+    <auto_tcn>4</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>4</total_tcn>\r
+    <pkg_name>common/tct-sp01-wrt-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-widget02-w3c-tests" category="W3C/HTML5 APIs">\r
+    <auto_tcn>68</auto_tcn>\r
+    <manual_tcn>82</manual_tcn>\r
+    <total_tcn>150</total_tcn>\r
+    <pkg_name>mobile/tct-widget02-w3c-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-websetting-tizen-tests" launcher="WRTLauncher" category="Tizen Web Device APIs">\r
+    <auto_tcn>22</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>22</total_tcn>\r
+    <pkg_name>mobile/tct-websetting-tizen-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-audio-html5-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
+    <auto_tcn>333</auto_tcn>\r
+    <manual_tcn>1</manual_tcn>\r
+    <total_tcn>334</total_tcn>\r
+    <pkg_name>mobile/tct-audio-html5-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-screenorientation-w3c-tests" launcher="xwalk" category="W3C/HTML5 APIs">\r
+    <auto_tcn>17</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>17</total_tcn>\r
+    <pkg_name>mobile/tct-screenorientation-w3c-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-rt02-wrt-tests" category="Web Runtime">\r
+    <auto_tcn>3</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>3</total_tcn>\r
+    <pkg_name>common/tct-rt02-wrt-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-sp02-wrt-tests" category="Web Runtime">\r
+    <auto_tcn>1</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>1</total_tcn>\r
+    <pkg_name>common/tct-sp02-wrt-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-sound-tizen-tests" launcher="WRTLauncher" category="Tizen Web Device APIs">\r
+    <auto_tcn>52</auto_tcn>\r
+    <manual_tcn>8</manual_tcn>\r
+    <total_tcn>60</total_tcn>\r
+    <pkg_name>mobile/tct-sound-tizen-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-ext02-wrt-tests" category="Web Runtime">\r
+    <auto_tcn>8</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>8</total_tcn>\r
+    <pkg_name>common/tct-ext02-wrt-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-application-tizen-tests" launcher="WRTLauncher" category="Tizen Web Device APIs">\r
+    <auto_tcn>184</auto_tcn>\r
+    <manual_tcn>8</manual_tcn>\r
+    <total_tcn>192</total_tcn>\r
+    <pkg_name>mobile/tct-application-tizen-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-bluetooth-tizen-tests" launcher="WRTLauncher" category="Tizen Web Device APIs">\r
+    <auto_tcn>257</auto_tcn>\r
+    <manual_tcn>142</manual_tcn>\r
+    <total_tcn>399</total_tcn>\r
+    <pkg_name>mobile/tct-bluetooth-tizen-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-humanactivitymonitor-tizen-tests" launcher="WRTLauncher" category="Tizen Web Device APIs">\r
+    <auto_tcn>61</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>61</total_tcn>\r
+    <pkg_name>mobile/tct-humanactivitymonitor-tizen-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-fonts-css3-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
+    <auto_tcn>11</auto_tcn>\r
+    <manual_tcn>131</manual_tcn>\r
+    <total_tcn>142</total_tcn>\r
+    <pkg_name>common/tct-fonts-css3-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-speech-w3c-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
+    <auto_tcn>40</auto_tcn>\r
+    <manual_tcn>1</manual_tcn>\r
+    <total_tcn>41</total_tcn>\r
+    <pkg_name>common/tct-speech-w3c-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-security-tcs-tests" launcher="WRTLauncher" category="Compliance">\r
+    <auto_tcn>3</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>3</total_tcn>\r
+    <pkg_name>common/tct-security-tcs-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-ui01-wrt-tests" launcher="WRTLauncher -iu" category="Web Runtime">\r
+    <auto_tcn>30</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>30</total_tcn>\r
+    <pkg_name>mobile/tct-ui01-wrt-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-animationtiming-w3c-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
+    <auto_tcn>11</auto_tcn>\r
+    <manual_tcn>7</manual_tcn>\r
+    <total_tcn>18</total_tcn>\r
+    <pkg_name>common/tct-animationtiming-w3c-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-selectorslevel2-w3c-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
+    <auto_tcn>30</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>30</total_tcn>\r
+    <pkg_name>common/tct-selectorslevel2-w3c-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-wgtapi01-w3c-tests" launcher="WRTLauncher -iu" category="W3C/HTML5 APIs">\r
+    <auto_tcn>107</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>107</total_tcn>\r
+    <pkg_name>common/tct-wgtapi01-w3c-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-inputdevice-tizen-tests" launcher="WRTLauncher" category="Tizen Web Device APIs">\r
+    <auto_tcn>19</auto_tcn>\r
+    <manual_tcn>1</manual_tcn>\r
+    <total_tcn>20</total_tcn>\r
+    <pkg_name>mobile/tct-inputdevice-tizen-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-webaudio-w3c-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
+    <auto_tcn>422</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>422</total_tcn>\r
+    <pkg_name>mobile/tct-webaudio-w3c-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-filewriterapi-w3c-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
+    <auto_tcn>106</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>106</total_tcn>\r
+    <pkg_name>mobile/tct-filewriterapi-w3c-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-sensor-tizen-tests" launcher="WRTLauncher" category="Tizen Web Device APIs">\r
+    <auto_tcn>119</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>119</total_tcn>\r
+    <pkg_name>mobile/tct-sensor-tizen-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-secureelement-tizen-tests" launcher="WRTLauncher" category="Tizen Web Device APIs">\r
+    <auto_tcn>71</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>71</total_tcn>\r
+    <pkg_name>mobile/tct-secureelement-tizen-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-power-tizen-tests" launcher="WRTLauncher" category="Tizen Web Device APIs">\r
+    <auto_tcn>50</auto_tcn>\r
+    <manual_tcn>6</manual_tcn>\r
+    <total_tcn>56</total_tcn>\r
+    <pkg_name>mobile/tct-power-tizen-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-appwgt-wrt-tests" category="Web Runtime">\r
+    <auto_tcn>7</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>7</total_tcn>\r
+    <pkg_name>common/tct-appwgt-wrt-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-privilege-tizen-tests" launcher="WRTLauncher" category="Tizen Web Device APIs">\r
+    <auto_tcn>65</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>65</total_tcn>\r
+    <pkg_name>common/tct-privilege-tizen-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-alarm-tizen-tests" launcher="WRTLauncher" category="Tizen Web Device APIs">\r
+    <auto_tcn>61</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>61</total_tcn>\r
+    <pkg_name>common/tct-alarm-tizen-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-touchevent-w3c-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
+    <auto_tcn>16</auto_tcn>\r
+    <manual_tcn>7</manual_tcn>\r
+    <total_tcn>23</total_tcn>\r
+    <pkg_name>mobile/tct-touchevent-w3c-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-wgtapi02-w3c-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
+    <auto_tcn>0</auto_tcn>\r
+    <manual_tcn>34</manual_tcn>\r
+    <total_tcn>34</total_tcn>\r
+    <pkg_name>common/tct-wgtapi02-w3c-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-archive-tizen-tests" launcher="WRTLauncher" category="Tizen Web Device APIs">\r
+    <auto_tcn>106</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>106</total_tcn>\r
+    <pkg_name>common/tct-archive-tizen-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-account-tizen-tests" launcher="WRTLauncher" category="Tizen Web Device APIs">\r
+    <auto_tcn>89</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>89</total_tcn>\r
+    <pkg_name>mobile/tct-account-tizen-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-tizen-tizen-tests" launcher="WRTLauncher" category="Tizen Web Device APIs">\r
+    <auto_tcn>81</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>81</total_tcn>\r
+    <pkg_name>common/tct-tizen-tizen-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-widget01-w3c-tests" launcher="WRTLauncher -iu" category="W3C/HTML5 APIs">\r
+    <auto_tcn>155</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>155</total_tcn>\r
+    <pkg_name>mobile/tct-widget01-w3c-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-bookmark-tizen-tests" launcher="WRTLauncher" category="Tizen Web Device APIs">\r
+    <auto_tcn>36</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>36</total_tcn>\r
+    <pkg_name>mobile/tct-bookmark-tizen-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-3dtransforms-css3-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
+    <auto_tcn>32</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>32</total_tcn>\r
+    <pkg_name>common/tct-3dtransforms-css3-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-geoallow-w3c-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
+    <auto_tcn>208</auto_tcn>\r
+    <manual_tcn>3</manual_tcn>\r
+    <total_tcn>211</total_tcn>\r
+    <pkg_name>mobile/tct-geoallow-w3c-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-calendar-tizen-tests" launcher="WRTLauncher" category="Tizen Web Device APIs">\r
+    <auto_tcn>354</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>354</total_tcn>\r
+    <pkg_name>mobile/tct-calendar-tizen-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-sessionhistory-html5-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
+    <auto_tcn>148</auto_tcn>\r
+    <manual_tcn>1</manual_tcn>\r
+    <total_tcn>149</total_tcn>\r
+    <pkg_name>common/tct-sessionhistory-html5-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-datacontrol-tizen-tests" launcher="WRTLauncher" category="Tizen Web Device APIs">\r
+    <auto_tcn>113</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>113</total_tcn>\r
+    <pkg_name>mobile/tct-datacontrol-tizen-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-appcontrol-tizen-tests" launcher="WRTLauncher" category="Tizen Web Device APIs">\r
+    <auto_tcn>5</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>5</total_tcn>\r
+    <pkg_name>mobile/tct-appcontrol-tizen-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-callhistory-tizen-tests" launcher="WRTLauncher" category="Tizen Web Device APIs">\r
+    <auto_tcn>80</auto_tcn>\r
+    <manual_tcn>27</manual_tcn>\r
+    <total_tcn>107</total_tcn>\r
+    <pkg_name>mobile/tct-callhistory-tizen-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-geodeny-w3c-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
+    <auto_tcn>0</auto_tcn>\r
+    <manual_tcn>3</manual_tcn>\r
+    <total_tcn>3</total_tcn>\r
+    <pkg_name>mobile/tct-geodeny-w3c-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-canvas-html5-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
+    <auto_tcn>846</auto_tcn>\r
+    <manual_tcn>18</manual_tcn>\r
+    <total_tcn>864</total_tcn>\r
+    <pkg_name>common/tct-canvas-html5-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-ui-css3-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
+    <auto_tcn>43</auto_tcn>\r
+    <manual_tcn>1</manual_tcn>\r
+    <total_tcn>44</total_tcn>\r
+    <pkg_name>common/tct-ui-css3-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-testconfig" launcher="WRTLauncher">\r
+    <auto_tcn>0</auto_tcn>\r
+    <manual_tcn>20</manual_tcn>\r
+    <total_tcn>20</total_tcn>\r
+    <pkg_name>common/tct-testconfig-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-selectorslevel1-w3c-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
+    <auto_tcn>78</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>78</total_tcn>\r
+    <pkg_name>common/tct-selectorslevel1-w3c-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-sse-w3c-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
+    <auto_tcn>68</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>68</total_tcn>\r
+    <pkg_name>mobile/tct-sse-w3c-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-widgetpolicy-w3c-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
+    <auto_tcn>0</auto_tcn>\r
+    <manual_tcn>33</manual_tcn>\r
+    <total_tcn>33</total_tcn>\r
+    <pkg_name>common/tct-widgetpolicy-w3c-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-batterystatus-w3c-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
+    <auto_tcn>23</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>23</total_tcn>\r
+    <pkg_name>mobile/tct-batterystatus-w3c-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-mediacontroller-tizen-tests" launcher="WRTLauncher" category="Tizen Web Device APIs">\r
+    <auto_tcn>162</auto_tcn>\r
+    <manual_tcn>3</manual_tcn>\r
+    <total_tcn>165</total_tcn>\r
+    <pkg_name>mobile/tct-mediacontroller-tizen-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-webuifw-tests03" category="Web UI Framework">\r
+    <auto_tcn>179</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>179</total_tcn>\r
+    <pkg_name>mobile/tct-webuifw-tests03-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-maxLength-wrt-tests" launcher="WRTLauncher -iu" category="Web Runtime">\r
+    <auto_tcn>14</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>14</total_tcn>\r
+    <pkg_name>common/tct-maxLength-wrt-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-webuifw-tests04" category="Web UI Framework">\r
+    <auto_tcn>375</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>375</total_tcn>\r
+    <pkg_name>mobile/tct-webuifw-tests04-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-systeminfo-tizen-tests" launcher="WRTLauncher" category="Tizen Web Device APIs">\r
+    <auto_tcn>304</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>304</total_tcn>\r
+    <pkg_name>mobile/tct-systeminfo-tizen-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-webuifw-tests05" category="Web UI Framework">\r
+    <auto_tcn>322</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>322</total_tcn>\r
+    <pkg_name>mobile/tct-webuifw-tests05-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-filesystem-tizen-tests" launcher="WRTLauncher" category="Tizen Web Device APIs">\r
+    <auto_tcn>289</auto_tcn>\r
+    <manual_tcn>3</manual_tcn>\r
+    <total_tcn>292</total_tcn>\r
+    <pkg_name>mobile/tct-filesystem-tizen-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-webuifw-tests06" category="Web UI Framework">\r
+    <auto_tcn>98</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>98</total_tcn>\r
+    <pkg_name>mobile/tct-webuifw-tests06-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-webuifw-tests01" category="Web UI Framework">\r
+    <auto_tcn>355</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>355</total_tcn>\r
+    <pkg_name>mobile/tct-webuifw-tests01-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-webuifw-tests02" category="Web UI Framework">\r
+    <auto_tcn>455</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>455</total_tcn>\r
+    <pkg_name>mobile/tct-webuifw-tests02-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-vibration-w3c-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
+    <auto_tcn>2</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>2</total_tcn>\r
+    <pkg_name>mobile/tct-vibration-w3c-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-messaging-sms-tizen-tests" launcher="WRTLauncher" category="Tizen Web Device APIs">\r
+    <auto_tcn>184</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>184</total_tcn>\r
+    <pkg_name>mobile/tct-messaging-sms-tizen-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-text-css3-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
+    <auto_tcn>27</auto_tcn>\r
+    <manual_tcn>15</manual_tcn>\r
+    <total_tcn>42</total_tcn>\r
+    <pkg_name>common/tct-text-css3-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-stab-wrt-tests" category="Web Runtime">\r
+    <auto_tcn>1</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>1</total_tcn>\r
+    <pkg_name>common/tct-stab-wrt-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-webstorage-w3c-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
+    <auto_tcn>177</auto_tcn>\r
+    <manual_tcn>4</manual_tcn>\r
+    <total_tcn>181</total_tcn>\r
+    <pkg_name>common/tct-webstorage-w3c-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-behavior-tests">\r
+    <auto_tcn>0</auto_tcn>\r
+    <manual_tcn>30</manual_tcn>\r
+    <total_tcn>30</total_tcn>\r
+    <pkg_name>mobile/tct-behavior-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-download-tizen-tests" launcher="WRTLauncher" category="Tizen Web Device APIs">\r
+    <auto_tcn>62</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>62</total_tcn>\r
+    <pkg_name>common/tct-download-tizen-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-mediaqueries-css3-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
+    <auto_tcn>49</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>49</total_tcn>\r
+    <pkg_name>mobile/tct-mediaqueries-css3-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-systemsetting-tizen-tests" launcher="WRTLauncher" category="Tizen Web Device APIs">\r
+    <auto_tcn>33</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>33</total_tcn>\r
+    <pkg_name>mobile/tct-systemsetting-tizen-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-backgrounds-css3-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
+    <auto_tcn>541</auto_tcn>\r
+    <manual_tcn>74</manual_tcn>\r
+    <total_tcn>615</total_tcn>\r
+    <pkg_name>mobile/tct-backgrounds-css3-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-video-html5-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
+    <auto_tcn>361</auto_tcn>\r
+    <manual_tcn>4</manual_tcn>\r
+    <total_tcn>365</total_tcn>\r
+    <pkg_name>mobile/tct-video-html5-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-pm-wrt-tests" category="Web Runtime">\r
+    <auto_tcn>24</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>24</total_tcn>\r
+    <pkg_name>common/tct-pm-wrt-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-webgl-nonw3c-tests" launcher="WRTLauncher" category="Supplementary APIs">\r
+    <auto_tcn>889</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>889</total_tcn>\r
+    <pkg_name>common/tct-webgl-nonw3c-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+</ns3:testplan>\r
+\r
diff --git a/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/manager/plan/Full_tv.xml b/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/manager/plan/Full_tv.xml
new file mode 100755 (executable)
index 0000000..ffee850
--- /dev/null
@@ -0,0 +1,653 @@
+<?xml version="1.0" encoding="UTF-8"?>\r
+<ns3:testplan xmlns:ns3="http://www.example.org/plan/" xmlns="" name="Full_tv" profile="tv">\r
+  <execute_type>All</execute_type>\r
+  <suite name="tct-jsenhance-html5-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
+    <auto_tcn>49</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>49</total_tcn>\r
+    <pkg_name>common/tct-jsenhance-html5-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-multicolumn-css3-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
+    <auto_tcn>141</auto_tcn>\r
+    <manual_tcn>18</manual_tcn>\r
+    <total_tcn>159</total_tcn>\r
+    <pkg_name>tv/tct-multicolumn-css3-tests-2.3.1.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-workers-w3c-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
+    <auto_tcn>85</auto_tcn>\r
+    <manual_tcn>1</manual_tcn>\r
+    <total_tcn>86</total_tcn>\r
+    <pkg_name>tv/tct-workers-w3c-tests-2.3.1.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-namespace-tizen-tests" launcher="WRTLauncher" category="Tizen Web Device APIs">\r
+    <auto_tcn>23</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>23</total_tcn>\r
+    <pkg_name>common/tct-namespace-tizen-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-transitions-css3-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
+    <auto_tcn>26</auto_tcn>\r
+    <manual_tcn>5</manual_tcn>\r
+    <total_tcn>31</total_tcn>\r
+    <pkg_name>common/tct-transitions-css3-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-2dtransforms-css3-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
+    <auto_tcn>34</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>34</total_tcn>\r
+    <pkg_name>common/tct-2dtransforms-css3-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-time-tizen-tests" launcher="WRTLauncher" category="Tizen Web Device APIs">\r
+    <auto_tcn>459</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>459</total_tcn>\r
+    <pkg_name>tv/tct-time-tizen-tests-2.4-1.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-forms-html5-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
+    <auto_tcn>146</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>146</total_tcn>\r
+    <pkg_name>tv/tct-forms-html5-tests-2.3.1.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-capability-tests" launcher="WRTLauncher" category="Compliance">\r
+    <auto_tcn>15</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>15</total_tcn>\r
+    <pkg_name>common/tct-capability-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-fileapi-w3c-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
+    <auto_tcn>97</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>97</total_tcn>\r
+    <pkg_name>tv/tct-fileapi-w3c-tests-2.3.1.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-mediacapture-w3c-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
+    <auto_tcn>7</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>7</total_tcn>\r
+    <pkg_name>common/tct-mediacapture-w3c-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-ext01-wrt-tests" launcher="WRTLauncher -iu" category="Web Runtime">\r
+    <auto_tcn>2</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>2</total_tcn>\r
+    <pkg_name>tv/tct-ext01-wrt-tests-2.3-1.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-tv-channel-tizen-tests" launcher="WRTLauncher" category="Tizen Web Device APIs">\r
+    <auto_tcn>123</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>123</total_tcn>\r
+    <pkg_name>tv/tct-tv-channel-tizen-tests-2.4-1.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-exif-tizen-tests" launcher="WRTLauncher" category="Tizen Web Device APIs">\r
+    <auto_tcn>63</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>63</total_tcn>\r
+    <pkg_name>common/tct-exif-tizen-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-csp-w3c-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
+    <auto_tcn>133</auto_tcn>\r
+    <manual_tcn>78</manual_tcn>\r
+    <total_tcn>211</total_tcn>\r
+    <pkg_name>common/tct-csp-w3c-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-mediakey-tizen-tests" launcher="WRTLauncher" category="Tizen Web Device APIs">\r
+    <auto_tcn>11</auto_tcn>\r
+    <manual_tcn>4</manual_tcn>\r
+    <total_tcn>15</total_tcn>\r
+    <pkg_name>common/tct-mediakey-tizen-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-deviceorientation-w3c-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
+    <auto_tcn>37</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>37</total_tcn>\r
+    <pkg_name>common/tct-deviceorientation-w3c-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-webmessaging-w3c-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
+    <auto_tcn>175</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>175</total_tcn>\r
+    <pkg_name>tv/tct-webmessaging-w3c-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-package-tizen-tests" launcher="WRTLauncher" category="Tizen Web Device APIs">\r
+    <auto_tcn>54</auto_tcn>\r
+    <manual_tcn>12</manual_tcn>\r
+    <total_tcn>66</total_tcn>\r
+    <pkg_name>common/tct-package-tizen-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-appcache-html5-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
+    <auto_tcn>36</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>36</total_tcn>\r
+    <pkg_name>tv/tct-appcache-html5-tests-2.3.1.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-rt01-wrt-tests" launcher="WRTLauncher -iu" category="Web Runtime">\r
+    <auto_tcn>12</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>12</total_tcn>\r
+    <pkg_name>common/tct-rt01-wrt-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-svg-html5-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
+    <auto_tcn>3</auto_tcn>\r
+    <manual_tcn>9</manual_tcn>\r
+    <total_tcn>12</total_tcn>\r
+    <pkg_name>common/tct-svg-html5-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-flexiblebox-css3-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
+    <auto_tcn>25</auto_tcn>\r
+    <manual_tcn>28</manual_tcn>\r
+    <total_tcn>53</total_tcn>\r
+    <pkg_name>common/tct-flexiblebox-css3-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-websocket-w3c-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
+    <auto_tcn>268</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>268</total_tcn>\r
+    <pkg_name>tv/tct-websocket-w3c-tests-2.3.1.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-extra-html5-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
+    <auto_tcn>544</auto_tcn>\r
+    <manual_tcn>25</manual_tcn>\r
+    <total_tcn>569</total_tcn>\r
+    <pkg_name>tv/tct-extra-html5-tests-2.3.1.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-dnd-html5-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
+    <auto_tcn>6</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>6</total_tcn>\r
+    <pkg_name>common/tct-dnd-html5-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-fullscreen-nonw3c-tests" launcher="WRTLauncher" category="Supplementary APIs">\r
+    <auto_tcn>16</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>16</total_tcn>\r
+    <pkg_name>tv/tct-fullscreen-nonw3c-tests-2.3.1.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-colors-css3-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
+    <auto_tcn>46</auto_tcn>\r
+    <manual_tcn>29</manual_tcn>\r
+    <total_tcn>75</total_tcn>\r
+    <pkg_name>common/tct-colors-css3-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-indexeddb-w3c-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
+    <auto_tcn>391</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>391</total_tcn>\r
+    <pkg_name>tv/tct-indexeddb-w3c-tests-2.3.1.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-sandbox-html5-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
+    <auto_tcn>72</auto_tcn>\r
+    <manual_tcn>1</manual_tcn>\r
+    <total_tcn>73</total_tcn>\r
+    <pkg_name>common/tct-sandbox-html5-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-messageport-tizen-tests" launcher="WRTLauncher" category="Tizen Web Device APIs">\r
+    <auto_tcn>48</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>48</total_tcn>\r
+    <pkg_name>common/tct-messageport-tizen-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-browserstate-html5-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
+    <auto_tcn>3</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>3</total_tcn>\r
+    <pkg_name>tv/tct-browserstate-html5-tests-2.3.1.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-cors-w3c-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
+    <auto_tcn>10</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>10</total_tcn>\r
+    <pkg_name>common/tct-cors-w3c-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-xmlhttprequest-w3c-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
+    <auto_tcn>202</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>202</total_tcn>\r
+    <pkg_name>tv/tct-xmlhttprequest-w3c-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-navigationtiming-w3c-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
+    <auto_tcn>45</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>45</total_tcn>\r
+    <pkg_name>tv/tct-navigationtiming-w3c-tests-2.3.1.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-typedarrays-nonw3c-tests" launcher="WRTLauncher" category="Supplementary APIs">\r
+    <auto_tcn>80</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>80</total_tcn>\r
+    <pkg_name>common/tct-typedarrays-nonw3c-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-animations-css3-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
+    <auto_tcn>24</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>24</total_tcn>\r
+    <pkg_name>common/tct-animations-css3-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-badge-tizen-tests" launcher="WRTLauncher" category="Tizen Web Device APIs">\r
+    <auto_tcn>26</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>26</total_tcn>\r
+    <pkg_name>common/tct-badge-tizen-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-pagevisibility-w3c-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
+    <auto_tcn>18</auto_tcn>\r
+    <manual_tcn>2</manual_tcn>\r
+    <total_tcn>20</total_tcn>\r
+    <pkg_name>tv/tct-pagevisibility-w3c-tests-2.3.1.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-content-tizen-tests" launcher="WRTLauncher" category="Tizen Web Device APIs">\r
+    <auto_tcn>230</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>230</total_tcn>\r
+    <pkg_name>common/tct-content-tizen-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-gumallow-w3c-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
+    <auto_tcn>6</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>6</total_tcn>\r
+    <pkg_name>common/tct-gumallow-w3c-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-notification-w3c-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
+    <auto_tcn>14</auto_tcn>\r
+    <manual_tcn>3</manual_tcn>\r
+    <total_tcn>17</total_tcn>\r
+    <pkg_name>tv/tct-notification-w3c-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-tv-displaycontrol-tizen-tests" launcher="WRTLauncher" category="Tizen Web Device APIs">\r
+    <auto_tcn>20</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>20</total_tcn>\r
+    <pkg_name>tv/tct-tv-displaycontrol-tizen-tests-2.4-1.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-sp01-wrt-tests" launcher="WRTLauncher -iu" category="Web Runtime">\r
+    <auto_tcn>4</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>4</total_tcn>\r
+    <pkg_name>common/tct-sp01-wrt-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-widget02-w3c-tests" category="W3C/HTML5 APIs">\r
+    <auto_tcn>18</auto_tcn>\r
+    <manual_tcn>51</manual_tcn>\r
+    <total_tcn>69</total_tcn>\r
+    <pkg_name>tv/tct-widget02-w3c-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-websetting-tizen-tests" launcher="WRTLauncher" category="Tizen Web Device APIs">\r
+    <auto_tcn>22</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>22</total_tcn>\r
+    <pkg_name>tv/tct-websetting-tizen-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-audio-html5-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
+    <auto_tcn>338</auto_tcn>\r
+    <manual_tcn>1</manual_tcn>\r
+    <total_tcn>339</total_tcn>\r
+    <pkg_name>common/tct-audio-html5-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-screenorientation-w3c-tests" launcher="xwalk" category="W3C/HTML5 APIs">\r
+    <auto_tcn>17</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>17</total_tcn>\r
+    <pkg_name>tv/tct-screenorientation-w3c-tests-2.3.1.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-sp02-wrt-tests" category="Web Runtime">\r
+    <auto_tcn>1</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>1</total_tcn>\r
+    <pkg_name>common/tct-sp02-wrt-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-sound-tizen-tests" launcher="WRTLauncher" category="Tizen Web Device APIs">\r
+    <auto_tcn>52</auto_tcn>\r
+    <manual_tcn>8</manual_tcn>\r
+    <total_tcn>60</total_tcn>\r
+    <pkg_name>common/tct-sound-tizen-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-rt02-wrt-tests" category="Web Runtime">\r
+    <auto_tcn>3</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>3</total_tcn>\r
+    <pkg_name>common/tct-rt02-wrt-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-ext02-wrt-tests" category="Web Runtime">\r
+    <auto_tcn>8</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>8</total_tcn>\r
+    <pkg_name>common/tct-ext02-wrt-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-application-tizen-tests" launcher="WRTLauncher" category="Tizen Web Device APIs">\r
+    <auto_tcn>159</auto_tcn>\r
+    <manual_tcn>6</manual_tcn>\r
+    <total_tcn>165</total_tcn>\r
+    <pkg_name>tv/tct-application-tizen-tests-2.3-1.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-humanactivitymonitor-tizen-tests" launcher="WRTLauncher" category="Tizen Web Device APIs">\r
+    <auto_tcn>47</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>47</total_tcn>\r
+    <pkg_name>common/tct-humanactivitymonitor-tizen-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-fonts-css3-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
+    <auto_tcn>11</auto_tcn>\r
+    <manual_tcn>131</manual_tcn>\r
+    <total_tcn>142</total_tcn>\r
+    <pkg_name>common/tct-fonts-css3-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-security-tcs-tests" launcher="WRTLauncher" category="Compliance">\r
+    <auto_tcn>3</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>3</total_tcn>\r
+    <pkg_name>common/tct-security-tcs-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-speech-w3c-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
+    <auto_tcn>40</auto_tcn>\r
+    <manual_tcn>1</manual_tcn>\r
+    <total_tcn>41</total_tcn>\r
+    <pkg_name>common/tct-speech-w3c-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-ui01-wrt-tests" launcher="WRTLauncher -iu" category="Web Runtime">\r
+    <auto_tcn>11</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>11</total_tcn>\r
+    <pkg_name>tv/tct-ui01-wrt-tests-2.4-1.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-dynamicbox-wrt-tests" category="Web Runtime">\r
+    <auto_tcn>17</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>17</total_tcn>\r
+    <pkg_name>common/tct-dynamicbox-wrt-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-animationtiming-w3c-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
+    <auto_tcn>11</auto_tcn>\r
+    <manual_tcn>7</manual_tcn>\r
+    <total_tcn>18</total_tcn>\r
+    <pkg_name>common/tct-animationtiming-w3c-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-tv-window-tizen-tests" launcher="WRTLauncher" category="Tizen Web Device APIs">\r
+    <auto_tcn>70</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>70</total_tcn>\r
+    <pkg_name>tv/tct-tv-window-tizen-tests-2.4-1.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-selectorslevel2-w3c-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
+    <auto_tcn>30</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>30</total_tcn>\r
+    <pkg_name>common/tct-selectorslevel2-w3c-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-wgtapi01-w3c-tests" launcher="WRTLauncher -iu" category="W3C/HTML5 APIs">\r
+    <auto_tcn>107</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>107</total_tcn>\r
+    <pkg_name>common/tct-wgtapi01-w3c-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-webaudio-w3c-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
+    <auto_tcn>422</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>422</total_tcn>\r
+    <pkg_name>tv/tct-webaudio-w3c-tests-2.3.1.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-sensor-tizen-tests" launcher="WRTLauncher" category="Tizen Web Device APIs">\r
+    <auto_tcn>100</auto_tcn>\r
+    <manual_tcn>19</manual_tcn>\r
+    <total_tcn>119</total_tcn>\r
+    <pkg_name>common/tct-sensor-tizen-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-power-tizen-tests" launcher="WRTLauncher" category="Tizen Web Device APIs">\r
+    <auto_tcn>50</auto_tcn>\r
+    <manual_tcn>6</manual_tcn>\r
+    <total_tcn>56</total_tcn>\r
+    <pkg_name>common/tct-power-tizen-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-tv-inputdevice-tizen-tests" launcher="WRTLauncher" category="Tizen Web Device APIs">\r
+    <auto_tcn>23</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>23</total_tcn>\r
+    <pkg_name>tv/tct-tv-inputdevice-tizen-tests-2.4-1.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-appwgt-wrt-tests" category="Web Runtime">\r
+    <auto_tcn>7</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>7</total_tcn>\r
+    <pkg_name>common/tct-appwgt-wrt-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-privilege-tizen-tests" launcher="WRTLauncher" category="Tizen Web Device APIs">\r
+    <auto_tcn>70</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>70</total_tcn>\r
+    <pkg_name>common/tct-privilege-tizen-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-alarm-tizen-tests" launcher="WRTLauncher" category="Tizen Web Device APIs">\r
+    <auto_tcn>61</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>61</total_tcn>\r
+    <pkg_name>common/tct-alarm-tizen-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-touchevent-w3c-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
+    <auto_tcn>16</auto_tcn>\r
+    <manual_tcn>7</manual_tcn>\r
+    <total_tcn>23</total_tcn>\r
+    <pkg_name>common/tct-touchevent-w3c-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-tv-audiocontrol-tizen-tests" launcher="WRTLauncher" category="Tizen Web Device APIs">\r
+    <auto_tcn>61</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>61</total_tcn>\r
+    <pkg_name>tv/tct-tv-audiocontrol-tizen-tests-2.4-1.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-wgtapi02-w3c-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
+    <auto_tcn>0</auto_tcn>\r
+    <manual_tcn>34</manual_tcn>\r
+    <total_tcn>34</total_tcn>\r
+    <pkg_name>common/tct-wgtapi02-w3c-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-archive-tizen-tests" launcher="WRTLauncher" category="Tizen Web Device APIs">\r
+    <auto_tcn>106</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>106</total_tcn>\r
+    <pkg_name>common/tct-archive-tizen-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-tizen-tizen-tests" launcher="WRTLauncher" category="Tizen Web Device APIs">\r
+    <auto_tcn>81</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>81</total_tcn>\r
+    <pkg_name>common/tct-tizen-tizen-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-widget01-w3c-tests" launcher="WRTLauncher -iu" category="W3C/HTML5 APIs">\r
+    <auto_tcn>75</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>75</total_tcn>\r
+    <pkg_name>tv/tct-widget01-w3c-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-3dtransforms-css3-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
+    <auto_tcn>32</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>32</total_tcn>\r
+    <pkg_name>common/tct-3dtransforms-css3-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-geoallow-w3c-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
+    <auto_tcn>209</auto_tcn>\r
+    <manual_tcn>3</manual_tcn>\r
+    <total_tcn>212</total_tcn>\r
+    <pkg_name>common/tct-geoallow-w3c-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-sessionhistory-html5-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
+    <auto_tcn>148</auto_tcn>\r
+    <manual_tcn>1</manual_tcn>\r
+    <total_tcn>149</total_tcn>\r
+    <pkg_name>common/tct-sessionhistory-html5-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-geodeny-w3c-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
+    <auto_tcn>0</auto_tcn>\r
+    <manual_tcn>3</manual_tcn>\r
+    <total_tcn>3</total_tcn>\r
+    <pkg_name>common/tct-geodeny-w3c-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-canvas-html5-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
+    <auto_tcn>846</auto_tcn>\r
+    <manual_tcn>19</manual_tcn>\r
+    <total_tcn>865</total_tcn>\r
+    <pkg_name>common/tct-canvas-html5-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-ui-css3-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
+    <auto_tcn>43</auto_tcn>\r
+    <manual_tcn>1</manual_tcn>\r
+    <total_tcn>44</total_tcn>\r
+    <pkg_name>common/tct-ui-css3-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-testconfig" launcher="WRTLauncher">\r
+    <auto_tcn>0</auto_tcn>\r
+    <manual_tcn>19</manual_tcn>\r
+    <total_tcn>19</total_tcn>\r
+    <pkg_name>common/tct-testconfig-2.3.1.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-selectorslevel1-w3c-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
+    <auto_tcn>78</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>78</total_tcn>\r
+    <pkg_name>common/tct-selectorslevel1-w3c-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-sse-w3c-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
+    <auto_tcn>68</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>68</total_tcn>\r
+    <pkg_name>tv/tct-sse-w3c-tests-2.3.1.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-widgetpolicy-w3c-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
+    <auto_tcn>0</auto_tcn>\r
+    <manual_tcn>33</manual_tcn>\r
+    <total_tcn>33</total_tcn>\r
+    <pkg_name>common/tct-widgetpolicy-w3c-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-batterystatus-w3c-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
+    <auto_tcn>23</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>23</total_tcn>\r
+    <pkg_name>common/tct-batterystatus-w3c-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-webuifw-tests03" category="Web UI Framework">\r
+    <auto_tcn>179</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>179</total_tcn>\r
+    <pkg_name>tv/tct-webuifw-tests03-2.3.1.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-webuifw-tests04" category="Web UI Framework">\r
+    <auto_tcn>375</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>375</total_tcn>\r
+    <pkg_name>tv/tct-webuifw-tests04-2.3.1.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-maxLength-wrt-tests" launcher="WRTLauncher -iu" category="Web Runtime">\r
+    <auto_tcn>14</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>14</total_tcn>\r
+    <pkg_name>common/tct-maxLength-wrt-tests-2.3.1.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-webuifw-tests05" category="Web UI Framework">\r
+    <auto_tcn>322</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>322</total_tcn>\r
+    <pkg_name>tv/tct-webuifw-tests05-2.3.1.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-filesystem-tizen-tests" launcher="WRTLauncher" category="Tizen Web Device APIs">\r
+    <auto_tcn>291</auto_tcn>\r
+    <manual_tcn>3</manual_tcn>\r
+    <total_tcn>294</total_tcn>\r
+    <pkg_name>tv/tct-filesystem-tizen-tests-2.3-1.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-systeminfo-tizen-tests" launcher="WRTLauncher" category="Tizen Web Device APIs">\r
+    <auto_tcn>276</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>276</total_tcn>\r
+    <pkg_name>tv/tct-systeminfo-tizen-tests-2.3-1.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-webuifw-tests06" category="Web UI Framework">\r
+    <auto_tcn>98</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>98</total_tcn>\r
+    <pkg_name>tv/tct-webuifw-tests06-2.3.1.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-webuifw-tests01" category="Web UI Framework">\r
+    <auto_tcn>355</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>355</total_tcn>\r
+    <pkg_name>tv/tct-webuifw-tests01-2.3.1.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-webuifw-tests02" category="Web UI Framework">\r
+    <auto_tcn>455</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>455</total_tcn>\r
+    <pkg_name>tv/tct-webuifw-tests02-2.3.1.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-vibration-w3c-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
+    <auto_tcn>2</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>2</total_tcn>\r
+    <pkg_name>common/tct-vibration-w3c-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-stab-wrt-tests" category="Web Runtime">\r
+    <auto_tcn>1</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>1</total_tcn>\r
+    <pkg_name>common/tct-stab-wrt-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-text-css3-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
+    <auto_tcn>27</auto_tcn>\r
+    <manual_tcn>15</manual_tcn>\r
+    <total_tcn>42</total_tcn>\r
+    <pkg_name>common/tct-text-css3-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-behavior-tests">\r
+    <auto_tcn>0</auto_tcn>\r
+    <manual_tcn>15</manual_tcn>\r
+    <total_tcn>15</total_tcn>\r
+    <pkg_name>tv/tct-behavior-tests-2.4-1.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-webstorage-w3c-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
+    <auto_tcn>177</auto_tcn>\r
+    <manual_tcn>4</manual_tcn>\r
+    <total_tcn>181</total_tcn>\r
+    <pkg_name>common/tct-webstorage-w3c-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-download-tizen-tests" launcher="WRTLauncher" category="Tizen Web Device APIs">\r
+    <auto_tcn>62</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>62</total_tcn>\r
+    <pkg_name>common/tct-download-tizen-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-mediaqueries-css3-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
+    <auto_tcn>52</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>52</total_tcn>\r
+    <pkg_name>tv/tct-mediaqueries-css3-tests-2.3.1.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-systemsetting-tizen-tests" launcher="WRTLauncher" category="Tizen Web Device APIs">\r
+    <auto_tcn>33</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>33</total_tcn>\r
+    <pkg_name>common/tct-systemsetting-tizen-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-backgrounds-css3-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
+    <auto_tcn>541</auto_tcn>\r
+    <manual_tcn>74</manual_tcn>\r
+    <total_tcn>615</total_tcn>\r
+    <pkg_name>tv/tct-backgrounds-css3-tests-2.3.1.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-video-html5-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
+    <auto_tcn>366</auto_tcn>\r
+    <manual_tcn>4</manual_tcn>\r
+    <total_tcn>370</total_tcn>\r
+    <pkg_name>tv/tct-video-html5-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-pm-wrt-tests" category="Web Runtime">\r
+    <auto_tcn>24</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>24</total_tcn>\r
+    <pkg_name>common/tct-pm-wrt-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-webgl-nonw3c-tests" launcher="WRTLauncher" category="Supplementary APIs">\r
+    <auto_tcn>889</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>889</total_tcn>\r
+    <pkg_name>common/tct-webgl-nonw3c-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+</ns3:testplan>\r
+\r
diff --git a/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/manager/plan/Full_wearable.xml b/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/manager/plan/Full_wearable.xml
new file mode 100755 (executable)
index 0000000..a6fb1f8
--- /dev/null
@@ -0,0 +1,557 @@
+<?xml version="1.0" encoding="UTF-8"?>\r
+<ns3:testplan xmlns:ns3="http://www.example.org/plan/" xmlns="" name="Full_wearable" profile="wearable">\r
+  <execute_type>All</execute_type>\r
+  <suite name="tct-sp01-wrt-tests" launcher="WRTLauncher -iu" category="Web Runtime">\r
+    <auto_tcn>4</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>4</total_tcn>\r
+    <pkg_name>common/tct-sp01-wrt-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-widget02-w3c-tests" category="W3C/HTML5 APIs">\r
+    <auto_tcn>68</auto_tcn>\r
+    <manual_tcn>63</manual_tcn>\r
+    <total_tcn>131</total_tcn>\r
+    <pkg_name>wearable/tct-widget02-w3c-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-jsenhance-html5-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
+    <auto_tcn>49</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>49</total_tcn>\r
+    <pkg_name>common/tct-jsenhance-html5-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-audio-html5-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
+    <auto_tcn>338</auto_tcn>\r
+    <manual_tcn>1</manual_tcn>\r
+    <total_tcn>339</total_tcn>\r
+    <pkg_name>common/tct-audio-html5-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-sp02-wrt-tests" category="Web Runtime">\r
+    <auto_tcn>1</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>1</total_tcn>\r
+    <pkg_name>common/tct-sp02-wrt-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-rt02-wrt-tests" category="Web Runtime">\r
+    <auto_tcn>3</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>3</total_tcn>\r
+    <pkg_name>common/tct-rt02-wrt-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-sound-tizen-tests" launcher="WRTLauncher" category="Tizen Web Device APIs">\r
+    <auto_tcn>52</auto_tcn>\r
+    <manual_tcn>8</manual_tcn>\r
+    <total_tcn>60</total_tcn>\r
+    <pkg_name>common/tct-sound-tizen-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-workers-w3c-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
+    <auto_tcn>85</auto_tcn>\r
+    <manual_tcn>1</manual_tcn>\r
+    <total_tcn>86</total_tcn>\r
+    <pkg_name>wearable/tct-workers-w3c-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-ext02-wrt-tests" category="Web Runtime">\r
+    <auto_tcn>8</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>8</total_tcn>\r
+    <pkg_name>common/tct-ext02-wrt-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-transitions-css3-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
+    <auto_tcn>26</auto_tcn>\r
+    <manual_tcn>5</manual_tcn>\r
+    <total_tcn>31</total_tcn>\r
+    <pkg_name>common/tct-transitions-css3-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-namespace-tizen-tests" launcher="WRTLauncher" category="Tizen Web Device APIs">\r
+    <auto_tcn>23</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>23</total_tcn>\r
+    <pkg_name>common/tct-namespace-tizen-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-application-tizen-tests" launcher="WRTLauncher" category="Tizen Web Device APIs">\r
+    <auto_tcn>159</auto_tcn>\r
+    <manual_tcn>6</manual_tcn>\r
+    <total_tcn>165</total_tcn>\r
+    <pkg_name>wearable/tct-application-tizen-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-humanactivitymonitor-tizen-tests" launcher="WRTLauncher" category="Tizen Web Device APIs">\r
+    <auto_tcn>47</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>47</total_tcn>\r
+    <pkg_name>common/tct-humanactivitymonitor-tizen-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-bluetooth-tizen-tests" launcher="WRTLauncher" category="Tizen Web Device APIs">\r
+    <auto_tcn>214</auto_tcn>\r
+    <manual_tcn>44</manual_tcn>\r
+    <total_tcn>258</total_tcn>\r
+    <pkg_name>common/tct-bluetooth-tizen-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-fonts-css3-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
+    <auto_tcn>11</auto_tcn>\r
+    <manual_tcn>131</manual_tcn>\r
+    <total_tcn>142</total_tcn>\r
+    <pkg_name>common/tct-fonts-css3-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-speech-w3c-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
+    <auto_tcn>40</auto_tcn>\r
+    <manual_tcn>1</manual_tcn>\r
+    <total_tcn>41</total_tcn>\r
+    <pkg_name>common/tct-speech-w3c-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-security-tcs-tests" launcher="WRTLauncher" category="Compliance">\r
+    <auto_tcn>3</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>3</total_tcn>\r
+    <pkg_name>common/tct-security-tcs-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-ui01-wrt-tests" launcher="WRTLauncher -iu" category="Web Runtime">\r
+    <auto_tcn>11</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>11</total_tcn>\r
+    <pkg_name>wearable/tct-ui01-wrt-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-dynamicbox-wrt-tests" category="Web Runtime">\r
+    <auto_tcn>17</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>17</total_tcn>\r
+    <pkg_name>common/tct-dynamicbox-wrt-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-animationtiming-w3c-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
+    <auto_tcn>11</auto_tcn>\r
+    <manual_tcn>7</manual_tcn>\r
+    <total_tcn>18</total_tcn>\r
+    <pkg_name>common/tct-animationtiming-w3c-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-selectorslevel2-w3c-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
+    <auto_tcn>30</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>30</total_tcn>\r
+    <pkg_name>common/tct-selectorslevel2-w3c-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-2dtransforms-css3-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
+    <auto_tcn>34</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>34</total_tcn>\r
+    <pkg_name>common/tct-2dtransforms-css3-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-forms-html5-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
+    <auto_tcn>146</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>146</total_tcn>\r
+    <pkg_name>wearable/tct-forms-html5-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-time-tizen-tests" launcher="WRTLauncher" category="Tizen Web Device APIs">\r
+    <auto_tcn>470</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>470</total_tcn>\r
+    <pkg_name>wearable/tct-time-tizen-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-wgtapi01-w3c-tests" launcher="WRTLauncher -iu" category="W3C/HTML5 APIs">\r
+    <auto_tcn>107</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>107</total_tcn>\r
+    <pkg_name>common/tct-wgtapi01-w3c-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-fileapi-w3c-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
+    <auto_tcn>98</auto_tcn>\r
+    <manual_tcn>3</manual_tcn>\r
+    <total_tcn>101</total_tcn>\r
+    <pkg_name>wearable/tct-fileapi-w3c-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-capability-tests" launcher="WRTLauncher" category="Compliance">\r
+    <auto_tcn>15</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>15</total_tcn>\r
+    <pkg_name>common/tct-capability-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-ext01-wrt-tests" launcher="WRTLauncher -iu" category="Web Runtime">\r
+    <auto_tcn>2</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>2</total_tcn>\r
+    <pkg_name>wearable/tct-ext01-wrt-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-mediacapture-w3c-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
+    <auto_tcn>7</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>7</total_tcn>\r
+    <pkg_name>common/tct-mediacapture-w3c-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-exif-tizen-tests" launcher="WRTLauncher" category="Tizen Web Device APIs">\r
+    <auto_tcn>63</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>63</total_tcn>\r
+    <pkg_name>common/tct-exif-tizen-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-csp-w3c-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
+    <auto_tcn>133</auto_tcn>\r
+    <manual_tcn>78</manual_tcn>\r
+    <total_tcn>211</total_tcn>\r
+    <pkg_name>common/tct-csp-w3c-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-sensor-tizen-tests" launcher="WRTLauncher" category="Tizen Web Device APIs">\r
+    <auto_tcn>119</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>119</total_tcn>\r
+    <pkg_name>common/tct-sensor-tizen-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-privilege-wrt-tests" category="Web Runtime">\r
+    <auto_tcn>142</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>142</total_tcn>\r
+    <pkg_name>wearable/tct-privilege-wrt-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-power-tizen-tests" launcher="WRTLauncher" category="Tizen Web Device APIs">\r
+    <auto_tcn>50</auto_tcn>\r
+    <manual_tcn>6</manual_tcn>\r
+    <total_tcn>56</total_tcn>\r
+    <pkg_name>common/tct-power-tizen-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-appwgt-wrt-tests" category="Web Runtime">\r
+    <auto_tcn>7</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>7</total_tcn>\r
+    <pkg_name>common/tct-appwgt-wrt-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-privilege-tizen-tests" launcher="WRTLauncher" category="Tizen Web Device APIs">\r
+    <auto_tcn>66</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>66</total_tcn>\r
+    <pkg_name>common/tct-privilege-tizen-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-mediakey-tizen-tests" launcher="WRTLauncher" category="Tizen Web Device APIs">\r
+    <auto_tcn>11</auto_tcn>\r
+    <manual_tcn>4</manual_tcn>\r
+    <total_tcn>15</total_tcn>\r
+    <pkg_name>common/tct-mediakey-tizen-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-alarm-tizen-tests" launcher="WRTLauncher" category="Tizen Web Device APIs">\r
+    <auto_tcn>61</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>61</total_tcn>\r
+    <pkg_name>common/tct-alarm-tizen-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-touchevent-w3c-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
+    <auto_tcn>16</auto_tcn>\r
+    <manual_tcn>7</manual_tcn>\r
+    <total_tcn>23</total_tcn>\r
+    <pkg_name>common/tct-touchevent-w3c-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-wgtapi02-w3c-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
+    <auto_tcn>0</auto_tcn>\r
+    <manual_tcn>34</manual_tcn>\r
+    <total_tcn>34</total_tcn>\r
+    <pkg_name>common/tct-wgtapi02-w3c-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-deviceorientation-w3c-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
+    <auto_tcn>37</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>37</total_tcn>\r
+    <pkg_name>common/tct-deviceorientation-w3c-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-archive-tizen-tests" launcher="WRTLauncher" category="Tizen Web Device APIs">\r
+    <auto_tcn>106</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>106</total_tcn>\r
+    <pkg_name>common/tct-archive-tizen-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-webmessaging-w3c-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
+    <auto_tcn>175</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>175</total_tcn>\r
+    <pkg_name>wearable/tct-webmessaging-w3c-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-package-tizen-tests" launcher="WRTLauncher" category="Tizen Web Device APIs">\r
+    <auto_tcn>54</auto_tcn>\r
+    <manual_tcn>12</manual_tcn>\r
+    <total_tcn>66</total_tcn>\r
+    <pkg_name>common/tct-package-tizen-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-notification-tizen-tests" launcher="WRTLauncher" category="Tizen Web Device APIs">\r
+    <auto_tcn>85</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>85</total_tcn>\r
+    <pkg_name>wearable/tct-notification-tizen-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-tizen-tizen-tests" launcher="WRTLauncher" category="Tizen Web Device APIs">\r
+    <auto_tcn>81</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>81</total_tcn>\r
+    <pkg_name>common/tct-tizen-tizen-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-rt01-wrt-tests" launcher="WRTLauncher -iu" category="Web Runtime">\r
+    <auto_tcn>12</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>12</total_tcn>\r
+    <pkg_name>common/tct-rt01-wrt-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-widget01-w3c-tests" launcher="WRTLauncher -iu" category="W3C/HTML5 APIs">\r
+    <auto_tcn>155</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>155</total_tcn>\r
+    <pkg_name>wearable/tct-widget01-w3c-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-svg-html5-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
+    <auto_tcn>3</auto_tcn>\r
+    <manual_tcn>9</manual_tcn>\r
+    <total_tcn>12</total_tcn>\r
+    <pkg_name>common/tct-svg-html5-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-3dtransforms-css3-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
+    <auto_tcn>32</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>32</total_tcn>\r
+    <pkg_name>common/tct-3dtransforms-css3-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-geoallow-w3c-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
+    <auto_tcn>209</auto_tcn>\r
+    <manual_tcn>3</manual_tcn>\r
+    <total_tcn>212</total_tcn>\r
+    <pkg_name>common/tct-geoallow-w3c-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-sessionhistory-html5-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
+    <auto_tcn>148</auto_tcn>\r
+    <manual_tcn>1</manual_tcn>\r
+    <total_tcn>149</total_tcn>\r
+    <pkg_name>common/tct-sessionhistory-html5-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-websocket-w3c-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
+    <auto_tcn>268</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>268</total_tcn>\r
+    <pkg_name>wearable/tct-websocket-w3c-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-flexiblebox-css3-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
+    <auto_tcn>25</auto_tcn>\r
+    <manual_tcn>28</manual_tcn>\r
+    <total_tcn>53</total_tcn>\r
+    <pkg_name>common/tct-flexiblebox-css3-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-extra-html5-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
+    <auto_tcn>544</auto_tcn>\r
+    <manual_tcn>25</manual_tcn>\r
+    <total_tcn>569</total_tcn>\r
+    <pkg_name>wearable/tct-extra-html5-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-dnd-html5-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
+    <auto_tcn>6</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>6</total_tcn>\r
+    <pkg_name>common/tct-dnd-html5-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-geodeny-w3c-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
+    <auto_tcn>0</auto_tcn>\r
+    <manual_tcn>3</manual_tcn>\r
+    <total_tcn>3</total_tcn>\r
+    <pkg_name>common/tct-geodeny-w3c-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-colors-css3-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
+    <auto_tcn>46</auto_tcn>\r
+    <manual_tcn>29</manual_tcn>\r
+    <total_tcn>75</total_tcn>\r
+    <pkg_name>common/tct-colors-css3-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-indexeddb-w3c-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
+    <auto_tcn>391</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>391</total_tcn>\r
+    <pkg_name>wearable/tct-indexeddb-w3c-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-sandbox-html5-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
+    <auto_tcn>72</auto_tcn>\r
+    <manual_tcn>1</manual_tcn>\r
+    <total_tcn>73</total_tcn>\r
+    <pkg_name>common/tct-sandbox-html5-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-camera-nonw3c-tests" launcher="WRTLauncher" category="Supplementary APIs">\r
+    <auto_tcn>83</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>83</total_tcn>\r
+    <pkg_name>wearable/tct-camera-nonw3c-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-ui-css3-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
+    <auto_tcn>43</auto_tcn>\r
+    <manual_tcn>1</manual_tcn>\r
+    <total_tcn>44</total_tcn>\r
+    <pkg_name>common/tct-ui-css3-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-canvas-html5-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
+    <auto_tcn>846</auto_tcn>\r
+    <manual_tcn>18</manual_tcn>\r
+    <total_tcn>864</total_tcn>\r
+    <pkg_name>common/tct-canvas-html5-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-messageport-tizen-tests" launcher="WRTLauncher" category="Tizen Web Device APIs">\r
+    <auto_tcn>48</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>48</total_tcn>\r
+    <pkg_name>common/tct-messageport-tizen-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-testconfig" launcher="WRTLauncher">\r
+    <auto_tcn>0</auto_tcn>\r
+    <manual_tcn>19</manual_tcn>\r
+    <total_tcn>19</total_tcn>\r
+    <pkg_name>common/tct-testconfig-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-selectorslevel1-w3c-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
+    <auto_tcn>78</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>78</total_tcn>\r
+    <pkg_name>common/tct-selectorslevel1-w3c-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-widgetpolicy-w3c-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
+    <auto_tcn>0</auto_tcn>\r
+    <manual_tcn>34</manual_tcn>\r
+    <total_tcn>34</total_tcn>\r
+    <pkg_name>common/tct-widgetpolicy-w3c-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-cors-w3c-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
+    <auto_tcn>10</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>10</total_tcn>\r
+    <pkg_name>common/tct-cors-w3c-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-batterystatus-w3c-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
+    <auto_tcn>23</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>23</total_tcn>\r
+    <pkg_name>common/tct-batterystatus-w3c-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-xmlhttprequest-w3c-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
+    <auto_tcn>202</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>202</total_tcn>\r
+    <pkg_name>wearable/tct-xmlhttprequest-w3c-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-maxLength-wrt-tests" launcher="WRTLauncher -iu" category="Web Runtime">\r
+    <auto_tcn>14</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>14</total_tcn>\r
+    <pkg_name>common/tct-maxLength-wrt-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-systeminfo-tizen-tests" launcher="WRTLauncher" category="Tizen Web Device APIs">\r
+    <auto_tcn>281</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>281</total_tcn>\r
+    <pkg_name>wearable/tct-systeminfo-tizen-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-filesystem-tizen-tests" launcher="WRTLauncher" category="Tizen Web Device APIs">\r
+    <auto_tcn>289</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>289</total_tcn>\r
+    <pkg_name>wearable/tct-filesystem-tizen-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-typedarrays-nonw3c-tests" launcher="WRTLauncher" category="Supplementary APIs">\r
+    <auto_tcn>80</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>80</total_tcn>\r
+    <pkg_name>common/tct-typedarrays-nonw3c-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-animations-css3-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
+    <auto_tcn>24</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>24</total_tcn>\r
+    <pkg_name>common/tct-animations-css3-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-badge-tizen-tests" launcher="WRTLauncher" category="Tizen Web Device APIs">\r
+    <auto_tcn>26</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>26</total_tcn>\r
+    <pkg_name>common/tct-badge-tizen-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-vibration-w3c-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
+    <auto_tcn>2</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>2</total_tcn>\r
+    <pkg_name>common/tct-vibration-w3c-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-pagevisibility-w3c-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
+    <auto_tcn>18</auto_tcn>\r
+    <manual_tcn>2</manual_tcn>\r
+    <total_tcn>20</total_tcn>\r
+    <pkg_name>wearable/tct-pagevisibility-w3c-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-stab-wrt-tests" category="Web Runtime">\r
+    <auto_tcn>1</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>1</total_tcn>\r
+    <pkg_name>common/tct-stab-wrt-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-text-css3-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
+    <auto_tcn>27</auto_tcn>\r
+    <manual_tcn>15</manual_tcn>\r
+    <total_tcn>42</total_tcn>\r
+    <pkg_name>common/tct-text-css3-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-behavior-tests">\r
+    <auto_tcn>0</auto_tcn>\r
+    <manual_tcn>19</manual_tcn>\r
+    <total_tcn>19</total_tcn>\r
+    <pkg_name>wearable/tct-behavior-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-webstorage-w3c-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
+    <auto_tcn>177</auto_tcn>\r
+    <manual_tcn>4</manual_tcn>\r
+    <total_tcn>181</total_tcn>\r
+    <pkg_name>common/tct-webstorage-w3c-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-webuifw-tests" category="Web UI Framework">\r
+    <auto_tcn>524</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>524</total_tcn>\r
+    <pkg_name>wearable/tct-webuifw-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-download-tizen-tests" launcher="WRTLauncher" category="Tizen Web Device APIs">\r
+    <auto_tcn>62</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>62</total_tcn>\r
+    <pkg_name>common/tct-download-tizen-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-mediaqueries-css3-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
+    <auto_tcn>52</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>52</total_tcn>\r
+    <pkg_name>wearable/tct-mediaqueries-css3-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-content-tizen-tests" launcher="WRTLauncher" category="Tizen Web Device APIs">\r
+    <auto_tcn>230</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>230</total_tcn>\r
+    <pkg_name>common/tct-content-tizen-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-gumallow-w3c-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
+    <auto_tcn>6</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>6</total_tcn>\r
+    <pkg_name>common/tct-gumallow-w3c-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-systemsetting-tizen-tests" launcher="WRTLauncher" category="Tizen Web Device APIs">\r
+    <auto_tcn>33</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>33</total_tcn>\r
+    <pkg_name>common/tct-systemsetting-tizen-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-video-html5-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
+    <auto_tcn>366</auto_tcn>\r
+    <manual_tcn>4</manual_tcn>\r
+    <total_tcn>370</total_tcn>\r
+    <pkg_name>wearable/tct-video-html5-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-backgrounds-css3-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
+    <auto_tcn>541</auto_tcn>\r
+    <manual_tcn>74</manual_tcn>\r
+    <total_tcn>615</total_tcn>\r
+    <pkg_name>wearable/tct-backgrounds-css3-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-pm-wrt-tests" category="Web Runtime">\r
+    <auto_tcn>24</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>24</total_tcn>\r
+    <pkg_name>common/tct-pm-wrt-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-webgl-nonw3c-tests" launcher="WRTLauncher" category="Supplementary APIs">\r
+    <auto_tcn>889</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>889</total_tcn>\r
+    <pkg_name>common/tct-webgl-nonw3c-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+</ns3:testplan>\r
+\r
diff --git a/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/manager/script/temp b/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/manager/script/temp
new file mode 100755 (executable)
index 0000000..e69de29
diff --git a/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/manager/style/application.js b/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/manager/style/application.js
new file mode 100755 (executable)
index 0000000..147094f
--- /dev/null
@@ -0,0 +1,194 @@
+function getScrollTop() {
+       return f_scrollTop();
+}
+
+function f_scrollTop() {
+       return f_filterResults($(window) ? $(window).scrollTop() : 0,
+                       document.documentElement ? document.documentElement.scrollTop : 0,
+                       document.body ? document.body.scrollTop : 0);
+}
+function f_filterResults(n_win, n_docel, n_body) {
+       var n_result = n_win ? n_win : 0;
+       if (n_docel && (!n_result || (n_result > n_docel)))
+               n_result = n_docel;
+       return n_body && (!n_result || (n_result > n_body)) ? n_body : n_result;
+}
+
+function setScrollTop() {
+       $(window) ? $(window).scrollTop(0) : 0;
+       document.documentElement ? document.documentElement.scrollTop = 0 : 0;
+       document.body ? document.body.scrollTop = 0 : 0;
+}
+
+function goTopEx() {
+       $node = $('#goTopBtn');
+       if (getScrollTop() > 0) {
+               $node.show();
+       } else {
+               $node.hide();
+       }
+
+       $(window).scroll(function() {
+               if (getScrollTop() > 0) {
+                       $node.show();
+               } else {
+                       $node.hide();
+               }
+       });
+
+       $node.click(function() {
+               setScrollTop();
+       });
+}
+
+function drawRatio() {
+       $('.suite_item').each(function(i, node) {
+               drawSuiteRatio(node)
+       });
+}
+
+$(".see_all").click(function(){
+       $("#see_all").show();
+    $("#see_fail").hide();
+    $("#see_block").hide();
+    $("#see_na").hide();
+    updateToggles();
+    return false;
+});
+
+$(".see_failed").click(function(){
+       $("#see_all").hide();
+    $("#see_fail").show();
+    $("#see_block").hide();
+    $("#see_na").hide();
+    updateToggles();
+    return false;
+});
+
+$(".see_blocked").click(function(){
+       $("#see_all").hide();
+    $("#see_fail").hide();
+    $("#see_block").show();
+    $("#see_na").hide();
+    updateToggles();
+    return false;
+});
+
+$(".see_na").click(function(){
+       $("#see_all").hide();
+    $("#see_fail").hide();
+    $("#see_block").hide();
+    $("#see_na").show();
+    updateToggles();
+    return false;
+});
+
+$("a.test_case_popup").click(function(){
+       var $this = $(this);
+       Popup.show($this.attr('id'));
+    return false;
+});
+
+$(".see_capabilities").click(function(){
+       if ($('#capability_table').css('display') == 'none') {
+               $("#capability_table").show();
+       }else{
+               $("#capability_table").hide();
+       }
+    return false;
+});
+
+function drawSuiteRatio(node) {
+       arrTitle = new Array("Passed", "Failed", "Blocked", "Not Executed");
+       var $node = $(node);
+       var $total = $node.find('.total');
+       var $pass = $node.find('.pass');
+       var $fail = $node.find('.fail');
+       var $block = $node.find('.block');
+       var $na = $node.find('.na');
+       var $div = $node.find('.RatioGraphic');
+
+       var total_int = parseInt($total.text());
+       var pass_int = parseInt($pass.text());
+       var fail_int = parseInt($fail.text());
+       var block_int = parseInt($block.text());
+       var na_int = parseInt($na.text());
+
+       var pass_rate = pass_int * 100 / total_int;
+       var fail_rate = fail_int * 100 / total_int;
+       var block_rate = block_int * 100 / total_int;
+       var na_rate = na_int * 100 / total_int;
+
+       var areaWidth = 380;
+
+       var pass_width = areaWidth * pass_rate / 100;
+       var fail_width = areaWidth * fail_rate / 100;
+       var block_width = areaWidth * block_rate / 100;
+       var na_width = areaWidth * na_rate / 100;
+       
+       pass_rate = pass_rate.toFixed(2);
+       fail_rate = fail_rate.toFixed(2);
+       block_rate = block_rate.toFixed(2);
+       na_rate = na_rate.toFixed(2);
+
+       var pass_style = "padding:3px 0px 0px 0px;font-size:9pt;height:17px;text-align:center;color:white;font-weight:bold;background:url(&quot;./style/blue.jpg&quot;);"
+       var fail_style = "padding:3px 0px 0px 0px;font-size:9pt;height:17px;text-align:center;color:white;font-weight:bold;background:url(&quot;./style/red.jpg&quot;);"
+       var block_style = "padding:3px 0px 0px 0px;font-size:9pt;height:17px;text-align:center;color:white;font-weight:bold;background:url(&quot;./style/orange.jpg&quot;);"
+       var na_style = "padding:3px 0px 0px 0px;font-size:9pt;height:17px;text-align:center;color:white;font-weight:bold;background:url(&quot;./style/gray.jpg&quot;);"
+
+       var html = "<table width=\"380.68\" align=\"center\"><tbody><tr>";
+       if (pass_width > 0){
+           html += "<td width=\""
+                       + pass_width
+                       + "\" style=\""
+                       + pass_style
+                       + "\" title=\"Passed :"
+                       + pass_rate
+                       + "%\">";
+           if (pass_width > 20){
+               html += pass_rate + "%"
+           }
+           html +=  "</td>";
+       }
+       if (fail_width > 0){
+               html += "<td width=\""
+                       + fail_width
+                       + "\" style=\""
+                       + fail_style
+                       + "\" title=\"Failed :"
+                       + fail_rate
+                       + "%\">";
+           if (fail_width > 20){
+               html += fail_rate + "%"
+           }
+           html +=  "</td>";
+       }
+       if (block_width > 0){
+               html += "<td width=\""
+                       + block_width
+                       + "\" style=\""
+                       + block_style
+                       + "\" title=\"Blocked :"
+                       + block_rate
+                       + "%\">";
+           if (block_width > 20){
+               html += block_rate + "%"
+           }
+           html +=  "</td>";
+       }
+       if (na_width > 0){
+               html += "<td width=\""
+                       + na_width
+                       + "\" style=\""
+                       + na_style
+                       + "\" title=\"Blocked :"
+                       + na_rate
+                       + "%\">";
+           if (na_width > 20){
+               html += na_rate + "%"
+           }
+           html +=  "</td>";
+       }
+       html += "</tr></tbody></table>";
+       $div.html(html);
+}
diff --git a/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/manager/style/back_top.png b/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/manager/style/back_top.png
new file mode 100755 (executable)
index 0000000..19cbd76
Binary files /dev/null and b/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/manager/style/back_top.png differ
diff --git a/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/manager/style/blue.jpg b/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/manager/style/blue.jpg
new file mode 100755 (executable)
index 0000000..d1db8f7
Binary files /dev/null and b/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/manager/style/blue.jpg differ
diff --git a/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/manager/style/gray.jpg b/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/manager/style/gray.jpg
new file mode 100755 (executable)
index 0000000..f1acfdb
Binary files /dev/null and b/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/manager/style/gray.jpg differ
diff --git a/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/manager/style/jquery.min.js b/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/manager/style/jquery.min.js
new file mode 100755 (executable)
index 0000000..198b3ff
--- /dev/null
@@ -0,0 +1,4 @@
+/*! jQuery v1.7.1 jquery.com | jquery.org/license */
+(function(a,b){function cy(a){return f.isWindow(a)?a:a.nodeType===9?a.defaultView||a.parentWindow:!1}function cv(a){if(!ck[a]){var b=c.body,d=f("<"+a+">").appendTo(b),e=d.css("display");d.remove();if(e==="none"||e===""){cl||(cl=c.createElement("iframe"),cl.frameBorder=cl.width=cl.height=0),b.appendChild(cl);if(!cm||!cl.createElement)cm=(cl.contentWindow||cl.contentDocument).document,cm.write((c.compatMode==="CSS1Compat"?"<!doctype html>":"")+"<html><body>"),cm.close();d=cm.createElement(a),cm.body.appendChild(d),e=f.css(d,"display"),b.removeChild(cl)}ck[a]=e}return ck[a]}function cu(a,b){var c={};f.each(cq.concat.apply([],cq.slice(0,b)),function(){c[this]=a});return c}function ct(){cr=b}function cs(){setTimeout(ct,0);return cr=f.now()}function cj(){try{return new a.ActiveXObject("Microsoft.XMLHTTP")}catch(b){}}function ci(){try{return new a.XMLHttpRequest}catch(b){}}function cc(a,c){a.dataFilter&&(c=a.dataFilter(c,a.dataType));var d=a.dataTypes,e={},g,h,i=d.length,j,k=d[0],l,m,n,o,p;for(g=1;g<i;g++){if(g===1)for(h in a.converters)typeof h=="string"&&(e[h.toLowerCase()]=a.converters[h]);l=k,k=d[g];if(k==="*")k=l;else if(l!=="*"&&l!==k){m=l+" "+k,n=e[m]||e["* "+k];if(!n){p=b;for(o in e){j=o.split(" ");if(j[0]===l||j[0]==="*"){p=e[j[1]+" "+k];if(p){o=e[o],o===!0?n=p:p===!0&&(n=o);break}}}}!n&&!p&&f.error("No conversion from "+m.replace(" "," to ")),n!==!0&&(c=n?n(c):p(o(c)))}}return c}function cb(a,c,d){var e=a.contents,f=a.dataTypes,g=a.responseFields,h,i,j,k;for(i in g)i in d&&(c[g[i]]=d[i]);while(f[0]==="*")f.shift(),h===b&&(h=a.mimeType||c.getResponseHeader("content-type"));if(h)for(i in e)if(e[i]&&e[i].test(h)){f.unshift(i);break}if(f[0]in d)j=f[0];else{for(i in d){if(!f[0]||a.converters[i+" "+f[0]]){j=i;break}k||(k=i)}j=j||k}if(j){j!==f[0]&&f.unshift(j);return d[j]}}function ca(a,b,c,d){if(f.isArray(b))f.each(b,function(b,e){c||bE.test(a)?d(a,e):ca(a+"["+(typeof e=="object"||f.isArray(e)?b:"")+"]",e,c,d)});else if(!c&&b!=null&&typeof b=="object")for(var e in b)ca(a+"["+e+"]",b[e],c,d);else d(a,b)}function b_(a,c){var d,e,g=f.ajaxSettings.flatOptions||{};for(d in c)c[d]!==b&&((g[d]?a:e||(e={}))[d]=c[d]);e&&f.extend(!0,a,e)}function b$(a,c,d,e,f,g){f=f||c.dataTypes[0],g=g||{},g[f]=!0;var h=a[f],i=0,j=h?h.length:0,k=a===bT,l;for(;i<j&&(k||!l);i++)l=h[i](c,d,e),typeof l=="string"&&(!k||g[l]?l=b:(c.dataTypes.unshift(l),l=b$(a,c,d,e,l,g)));(k||!l)&&!g["*"]&&(l=b$(a,c,d,e,"*",g));return l}function bZ(a){return function(b,c){typeof b!="string"&&(c=b,b="*");if(f.isFunction(c)){var d=b.toLowerCase().split(bP),e=0,g=d.length,h,i,j;for(;e<g;e++)h=d[e],j=/^\+/.test(h),j&&(h=h.substr(1)||"*"),i=a[h]=a[h]||[],i[j?"unshift":"push"](c)}}}function bC(a,b,c){var d=b==="width"?a.offsetWidth:a.offsetHeight,e=b==="width"?bx:by,g=0,h=e.length;if(d>0){if(c!=="border")for(;g<h;g++)c||(d-=parseFloat(f.css(a,"padding"+e[g]))||0),c==="margin"?d+=parseFloat(f.css(a,c+e[g]))||0:d-=parseFloat(f.css(a,"border"+e[g]+"Width"))||0;return d+"px"}d=bz(a,b,b);if(d<0||d==null)d=a.style[b]||0;d=parseFloat(d)||0;if(c)for(;g<h;g++)d+=parseFloat(f.css(a,"padding"+e[g]))||0,c!=="padding"&&(d+=parseFloat(f.css(a,"border"+e[g]+"Width"))||0),c==="margin"&&(d+=parseFloat(f.css(a,c+e[g]))||0);return d+"px"}function bp(a,b){b.src?f.ajax({url:b.src,async:!1,dataType:"script"}):f.globalEval((b.text||b.textContent||b.innerHTML||"").replace(bf,"/*$0*/")),b.parentNode&&b.parentNode.removeChild(b)}function bo(a){var b=c.createElement("div");bh.appendChild(b),b.innerHTML=a.outerHTML;return b.firstChild}function bn(a){var b=(a.nodeName||"").toLowerCase();b==="input"?bm(a):b!=="script"&&typeof a.getElementsByTagName!="undefined"&&f.grep(a.getElementsByTagName("input"),bm)}function bm(a){if(a.type==="checkbox"||a.type==="radio")a.defaultChecked=a.checked}function bl(a){return typeof a.getElementsByTagName!="undefined"?a.getElementsByTagName("*"):typeof a.querySelectorAll!="undefined"?a.querySelectorAll("*"):[]}function bk(a,b){var c;if(b.nodeType===1){b.clearAttributes&&b.clearAttributes(),b.mergeAttributes&&b.mergeAttributes(a),c=b.nodeName.toLowerCase();if(c==="object")b.outerHTML=a.outerHTML;else if(c!=="input"||a.type!=="checkbox"&&a.type!=="radio"){if(c==="option")b.selected=a.defaultSelected;else if(c==="input"||c==="textarea")b.defaultValue=a.defaultValue}else a.checked&&(b.defaultChecked=b.checked=a.checked),b.value!==a.value&&(b.value=a.value);b.removeAttribute(f.expando)}}function bj(a,b){if(b.nodeType===1&&!!f.hasData(a)){var c,d,e,g=f._data(a),h=f._data(b,g),i=g.events;if(i){delete h.handle,h.events={};for(c in i)for(d=0,e=i[c].length;d<e;d++)f.event.add(b,c+(i[c][d].namespace?".":"")+i[c][d].namespace,i[c][d],i[c][d].data)}h.data&&(h.data=f.extend({},h.data))}}function bi(a,b){return f.nodeName(a,"table")?a.getElementsByTagName("tbody")[0]||a.appendChild(a.ownerDocument.createElement("tbody")):a}function U(a){var b=V.split("|"),c=a.createDocumentFragment();if(c.createElement)while(b.length)c.createElement(b.pop());return c}function T(a,b,c){b=b||0;if(f.isFunction(b))return f.grep(a,function(a,d){var e=!!b.call(a,d,a);return e===c});if(b.nodeType)return f.grep(a,function(a,d){return a===b===c});if(typeof b=="string"){var d=f.grep(a,function(a){return a.nodeType===1});if(O.test(b))return f.filter(b,d,!c);b=f.filter(b,d)}return f.grep(a,function(a,d){return f.inArray(a,b)>=0===c})}function S(a){return!a||!a.parentNode||a.parentNode.nodeType===11}function K(){return!0}function J(){return!1}function n(a,b,c){var d=b+"defer",e=b+"queue",g=b+"mark",h=f._data(a,d);h&&(c==="queue"||!f._data(a,e))&&(c==="mark"||!f._data(a,g))&&setTimeout(function(){!f._data(a,e)&&!f._data(a,g)&&(f.removeData(a,d,!0),h.fire())},0)}function m(a){for(var b in a){if(b==="data"&&f.isEmptyObject(a[b]))continue;if(b!=="toJSON")return!1}return!0}function l(a,c,d){if(d===b&&a.nodeType===1){var e="data-"+c.replace(k,"-$1").toLowerCase();d=a.getAttribute(e);if(typeof d=="string"){try{d=d==="true"?!0:d==="false"?!1:d==="null"?null:f.isNumeric(d)?parseFloat(d):j.test(d)?f.parseJSON(d):d}catch(g){}f.data(a,c,d)}else d=b}return d}function h(a){var b=g[a]={},c,d;a=a.split(/\s+/);for(c=0,d=a.length;c<d;c++)b[a[c]]=!0;return b}var c=a.document,d=a.navigator,e=a.location,f=function(){function J(){if(!e.isReady){try{c.documentElement.doScroll("left")}catch(a){setTimeout(J,1);return}e.ready()}}var e=function(a,b){return new e.fn.init(a,b,h)},f=a.jQuery,g=a.$,h,i=/^(?:[^#<]*(<[\w\W]+>)[^>]*$|#([\w\-]*)$)/,j=/\S/,k=/^\s+/,l=/\s+$/,m=/^<(\w+)\s*\/?>(?:<\/\1>)?$/,n=/^[\],:{}\s]*$/,o=/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,p=/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,q=/(?:^|:|,)(?:\s*\[)+/g,r=/(webkit)[ \/]([\w.]+)/,s=/(opera)(?:.*version)?[ \/]([\w.]+)/,t=/(msie) ([\w.]+)/,u=/(mozilla)(?:.*? rv:([\w.]+))?/,v=/-([a-z]|[0-9])/ig,w=/^-ms-/,x=function(a,b){return(b+"").toUpperCase()},y=d.userAgent,z,A,B,C=Object.prototype.toString,D=Object.prototype.hasOwnProperty,E=Array.prototype.push,F=Array.prototype.slice,G=String.prototype.trim,H=Array.prototype.indexOf,I={};e.fn=e.prototype={constructor:e,init:function(a,d,f){var g,h,j,k;if(!a)return this;if(a.nodeType){this.context=this[0]=a,this.length=1;return this}if(a==="body"&&!d&&c.body){this.context=c,this[0]=c.body,this.selector=a,this.length=1;return this}if(typeof a=="string"){a.charAt(0)!=="<"||a.charAt(a.length-1)!==">"||a.length<3?g=i.exec(a):g=[null,a,null];if(g&&(g[1]||!d)){if(g[1]){d=d instanceof e?d[0]:d,k=d?d.ownerDocument||d:c,j=m.exec(a),j?e.isPlainObject(d)?(a=[c.createElement(j[1])],e.fn.attr.call(a,d,!0)):a=[k.createElement(j[1])]:(j=e.buildFragment([g[1]],[k]),a=(j.cacheable?e.clone(j.fragment):j.fragment).childNodes);return e.merge(this,a)}h=c.getElementById(g[2]);if(h&&h.parentNode){if(h.id!==g[2])return f.find(a);this.length=1,this[0]=h}this.context=c,this.selector=a;return this}return!d||d.jquery?(d||f).find(a):this.constructor(d).find(a)}if(e.isFunction(a))return f.ready(a);a.selector!==b&&(this.selector=a.selector,this.context=a.context);return e.makeArray(a,this)},selector:"",jquery:"1.7.1",length:0,size:function(){return this.length},toArray:function(){return F.call(this,0)},get:function(a){return a==null?this.toArray():a<0?this[this.length+a]:this[a]},pushStack:function(a,b,c){var d=this.constructor();e.isArray(a)?E.apply(d,a):e.merge(d,a),d.prevObject=this,d.context=this.context,b==="find"?d.selector=this.selector+(this.selector?" ":"")+c:b&&(d.selector=this.selector+"."+b+"("+c+")");return d},each:function(a,b){return e.each(this,a,b)},ready:function(a){e.bindReady(),A.add(a);return this},eq:function(a){a=+a;return a===-1?this.slice(a):this.slice(a,a+1)},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},slice:function(){return this.pushStack(F.apply(this,arguments),"slice",F.call(arguments).join(","))},map:function(a){return this.pushStack(e.map(this,function(b,c){return a.call(b,c,b)}))},end:function(){return this.prevObject||this.constructor(null)},push:E,sort:[].sort,splice:[].splice},e.fn.init.prototype=e.fn,e.extend=e.fn.extend=function(){var a,c,d,f,g,h,i=arguments[0]||{},j=1,k=arguments.length,l=!1;typeof i=="boolean"&&(l=i,i=arguments[1]||{},j=2),typeof i!="object"&&!e.isFunction(i)&&(i={}),k===j&&(i=this,--j);for(;j<k;j++)if((a=arguments[j])!=null)for(c in a){d=i[c],f=a[c];if(i===f)continue;l&&f&&(e.isPlainObject(f)||(g=e.isArray(f)))?(g?(g=!1,h=d&&e.isArray(d)?d:[]):h=d&&e.isPlainObject(d)?d:{},i[c]=e.extend(l,h,f)):f!==b&&(i[c]=f)}return i},e.extend({noConflict:function(b){a.$===e&&(a.$=g),b&&a.jQuery===e&&(a.jQuery=f);return e},isReady:!1,readyWait:1,holdReady:function(a){a?e.readyWait++:e.ready(!0)},ready:function(a){if(a===!0&&!--e.readyWait||a!==!0&&!e.isReady){if(!c.body)return setTimeout(e.ready,1);e.isReady=!0;if(a!==!0&&--e.readyWait>0)return;A.fireWith(c,[e]),e.fn.trigger&&e(c).trigger("ready").off("ready")}},bindReady:function(){if(!A){A=e.Callbacks("once memory");if(c.readyState==="complete")return setTimeout(e.ready,1);if(c.addEventListener)c.addEventListener("DOMContentLoaded",B,!1),a.addEventListener("load",e.ready,!1);else if(c.attachEvent){c.attachEvent("onreadystatechange",B),a.attachEvent("onload",e.ready);var b=!1;try{b=a.frameElement==null}catch(d){}c.documentElement.doScroll&&b&&J()}}},isFunction:function(a){return e.type(a)==="function"},isArray:Array.isArray||function(a){return e.type(a)==="array"},isWindow:function(a){return a&&typeof a=="object"&&"setInterval"in a},isNumeric:function(a){return!isNaN(parseFloat(a))&&isFinite(a)},type:function(a){return a==null?String(a):I[C.call(a)]||"object"},isPlainObject:function(a){if(!a||e.type(a)!=="object"||a.nodeType||e.isWindow(a))return!1;try{if(a.constructor&&!D.call(a,"constructor")&&!D.call(a.constructor.prototype,"isPrototypeOf"))return!1}catch(c){return!1}var d;for(d in a);return d===b||D.call(a,d)},isEmptyObject:function(a){for(var b in a)return!1;return!0},error:function(a){throw new Error(a)},parseJSON:function(b){if(typeof b!="string"||!b)return null;b=e.trim(b);if(a.JSON&&a.JSON.parse)return a.JSON.parse(b);if(n.test(b.replace(o,"@").replace(p,"]").replace(q,"")))return(new Function("return "+b))();e.error("Invalid JSON: "+b)},parseXML:function(c){var d,f;try{a.DOMParser?(f=new DOMParser,d=f.parseFromString(c,"text/xml")):(d=new ActiveXObject("Microsoft.XMLDOM"),d.async="false",d.loadXML(c))}catch(g){d=b}(!d||!d.documentElement||d.getElementsByTagName("parsererror").length)&&e.error("Invalid XML: "+c);return d},noop:function(){},globalEval:function(b){b&&j.test(b)&&(a.execScript||function(b){a.eval.call(a,b)})(b)},camelCase:function(a){return a.replace(w,"ms-").replace(v,x)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toUpperCase()===b.toUpperCase()},each:function(a,c,d){var f,g=0,h=a.length,i=h===b||e.isFunction(a);if(d){if(i){for(f in a)if(c.apply(a[f],d)===!1)break}else for(;g<h;)if(c.apply(a[g++],d)===!1)break}else if(i){for(f in a)if(c.call(a[f],f,a[f])===!1)break}else for(;g<h;)if(c.call(a[g],g,a[g++])===!1)break;return a},trim:G?function(a){return a==null?"":G.call(a)}:function(a){return a==null?"":(a+"").replace(k,"").replace(l,"")},makeArray:function(a,b){var c=b||[];if(a!=null){var d=e.type(a);a.length==null||d==="string"||d==="function"||d==="regexp"||e.isWindow(a)?E.call(c,a):e.merge(c,a)}return c},inArray:function(a,b,c){var d;if(b){if(H)return H.call(b,a,c);d=b.length,c=c?c<0?Math.max(0,d+c):c:0;for(;c<d;c++)if(c in b&&b[c]===a)return c}return-1},merge:function(a,c){var d=a.length,e=0;if(typeof c.length=="number")for(var f=c.length;e<f;e++)a[d++]=c[e];else while(c[e]!==b)a[d++]=c[e++];a.length=d;return a},grep:function(a,b,c){var d=[],e;c=!!c;for(var f=0,g=a.length;f<g;f++)e=!!b(a[f],f),c!==e&&d.push(a[f]);return d},map:function(a,c,d){var f,g,h=[],i=0,j=a.length,k=a instanceof e||j!==b&&typeof j=="number"&&(j>0&&a[0]&&a[j-1]||j===0||e.isArray(a));if(k)for(;i<j;i++)f=c(a[i],i,d),f!=null&&(h[h.length]=f);else for(g in a)f=c(a[g],g,d),f!=null&&(h[h.length]=f);return h.concat.apply([],h)},guid:1,proxy:function(a,c){if(typeof c=="string"){var d=a[c];c=a,a=d}if(!e.isFunction(a))return b;var f=F.call(arguments,2),g=function(){return a.apply(c,f.concat(F.call(arguments)))};g.guid=a.guid=a.guid||g.guid||e.guid++;return g},access:function(a,c,d,f,g,h){var i=a.length;if(typeof c=="object"){for(var j in c)e.access(a,j,c[j],f,g,d);return a}if(d!==b){f=!h&&f&&e.isFunction(d);for(var k=0;k<i;k++)g(a[k],c,f?d.call(a[k],k,g(a[k],c)):d,h);return a}return i?g(a[0],c):b},now:function(){return(new Date).getTime()},uaMatch:function(a){a=a.toLowerCase();var b=r.exec(a)||s.exec(a)||t.exec(a)||a.indexOf("compatible")<0&&u.exec(a)||[];return{browser:b[1]||"",version:b[2]||"0"}},sub:function(){function a(b,c){return new a.fn.init(b,c)}e.extend(!0,a,this),a.superclass=this,a.fn=a.prototype=this(),a.fn.constructor=a,a.sub=this.sub,a.fn.init=function(d,f){f&&f instanceof e&&!(f instanceof a)&&(f=a(f));return e.fn.init.call(this,d,f,b)},a.fn.init.prototype=a.fn;var b=a(c);return a},browser:{}}),e.each("Boolean Number String Function Array Date RegExp Object".split(" "),function(a,b){I["[object "+b+"]"]=b.toLowerCase()}),z=e.uaMatch(y),z.browser&&(e.browser[z.browser]=!0,e.browser.version=z.version),e.browser.webkit&&(e.browser.safari=!0),j.test(" ")&&(k=/^[\s\xA0]+/,l=/[\s\xA0]+$/),h=e(c),c.addEventListener?B=function(){c.removeEventListener("DOMContentLoaded",B,!1),e.ready()}:c.attachEvent&&(B=function(){c.readyState==="complete"&&(c.detachEvent("onreadystatechange",B),e.ready())});return e}(),g={};f.Callbacks=function(a){a=a?g[a]||h(a):{};var c=[],d=[],e,i,j,k,l,m=function(b){var d,e,g,h,i;for(d=0,e=b.length;d<e;d++)g=b[d],h=f.type(g),h==="array"?m(g):h==="function"&&(!a.unique||!o.has(g))&&c.push(g)},n=function(b,f){f=f||[],e=!a.memory||[b,f],i=!0,l=j||0,j=0,k=c.length;for(;c&&l<k;l++)if(c[l].apply(b,f)===!1&&a.stopOnFalse){e=!0;break}i=!1,c&&(a.once?e===!0?o.disable():c=[]:d&&d.length&&(e=d.shift(),o.fireWith(e[0],e[1])))},o={add:function(){if(c){var a=c.length;m(arguments),i?k=c.length:e&&e!==!0&&(j=a,n(e[0],e[1]))}return this},remove:function(){if(c){var b=arguments,d=0,e=b.length;for(;d<e;d++)for(var f=0;f<c.length;f++)if(b[d]===c[f]){i&&f<=k&&(k--,f<=l&&l--),c.splice(f--,1);if(a.unique)break}}return this},has:function(a){if(c){var b=0,d=c.length;for(;b<d;b++)if(a===c[b])return!0}return!1},empty:function(){c=[];return this},disable:function(){c=d=e=b;return this},disabled:function(){return!c},lock:function(){d=b,(!e||e===!0)&&o.disable();return this},locked:function(){return!d},fireWith:function(b,c){d&&(i?a.once||d.push([b,c]):(!a.once||!e)&&n(b,c));return this},fire:function(){o.fireWith(this,arguments);return this},fired:function(){return!!e}};return o};var i=[].slice;f.extend({Deferred:function(a){var b=f.Callbacks("once memory"),c=f.Callbacks("once memory"),d=f.Callbacks("memory"),e="pending",g={resolve:b,reject:c,notify:d},h={done:b.add,fail:c.add,progress:d.add,state:function(){return e},isResolved:b.fired,isRejected:c.fired,then:function(a,b,c){i.done(a).fail(b).progress(c);return this},always:function(){i.done.apply(i,arguments).fail.apply(i,arguments);return this},pipe:function(a,b,c){return f.Deferred(function(d){f.each({done:[a,"resolve"],fail:[b,"reject"],progress:[c,"notify"]},function(a,b){var c=b[0],e=b[1],g;f.isFunction(c)?i[a](function(){g=c.apply(this,arguments),g&&f.isFunction(g.promise)?g.promise().then(d.resolve,d.reject,d.notify):d[e+"With"](this===i?d:this,[g])}):i[a](d[e])})}).promise()},promise:function(a){if(a==null)a=h;else for(var b in h)a[b]=h[b];return a}},i=h.promise({}),j;for(j in g)i[j]=g[j].fire,i[j+"With"]=g[j].fireWith;i.done(function(){e="resolved"},c.disable,d.lock).fail(function(){e="rejected"},b.disable,d.lock),a&&a.call(i,i);return i},when:function(a){function m(a){return function(b){e[a]=arguments.length>1?i.call(arguments,0):b,j.notifyWith(k,e)}}function l(a){return function(c){b[a]=arguments.length>1?i.call(arguments,0):c,--g||j.resolveWith(j,b)}}var b=i.call(arguments,0),c=0,d=b.length,e=Array(d),g=d,h=d,j=d<=1&&a&&f.isFunction(a.promise)?a:f.Deferred(),k=j.promise();if(d>1){for(;c<d;c++)b[c]&&b[c].promise&&f.isFunction(b[c].promise)?b[c].promise().then(l(c),j.reject,m(c)):--g;g||j.resolveWith(j,b)}else j!==a&&j.resolveWith(j,d?[a]:[]);return k}}),f.support=function(){var b,d,e,g,h,i,j,k,l,m,n,o,p,q=c.createElement("div"),r=c.documentElement;q.setAttribute("className","t"),q.innerHTML="   <link/><table></table><a href='/a' style='top:1px;float:left;opacity:.55;'>a</a><input type='checkbox'/>",d=q.getElementsByTagName("*"),e=q.getElementsByTagName("a")[0];if(!d||!d.length||!e)return{};g=c.createElement("select"),h=g.appendChild(c.createElement("option")),i=q.getElementsByTagName("input")[0],b={leadingWhitespace:q.firstChild.nodeType===3,tbody:!q.getElementsByTagName("tbody").length,htmlSerialize:!!q.getElementsByTagName("link").length,style:/top/.test(e.getAttribute("style")),hrefNormalized:e.getAttribute("href")==="/a",opacity:/^0.55/.test(e.style.opacity),cssFloat:!!e.style.cssFloat,checkOn:i.value==="on",optSelected:h.selected,getSetAttribute:q.className!=="t",enctype:!!c.createElement("form").enctype,html5Clone:c.createElement("nav").cloneNode(!0).outerHTML!=="<:nav></:nav>",submitBubbles:!0,changeBubbles:!0,focusinBubbles:!1,deleteExpando:!0,noCloneEvent:!0,inlineBlockNeedsLayout:!1,shrinkWrapBlocks:!1,reliableMarginRight:!0},i.checked=!0,b.noCloneChecked=i.cloneNode(!0).checked,g.disabled=!0,b.optDisabled=!h.disabled;try{delete q.test}catch(s){b.deleteExpando=!1}!q.addEventListener&&q.attachEvent&&q.fireEvent&&(q.attachEvent("onclick",function(){b.noCloneEvent=!1}),q.cloneNode(!0).fireEvent("onclick")),i=c.createElement("input"),i.value="t",i.setAttribute("type","radio"),b.radioValue=i.value==="t",i.setAttribute("checked","checked"),q.appendChild(i),k=c.createDocumentFragment(),k.appendChild(q.lastChild),b.checkClone=k.cloneNode(!0).cloneNode(!0).lastChild.checked,b.appendChecked=i.checked,k.removeChild(i),k.appendChild(q),q.innerHTML="",a.getComputedStyle&&(j=c.createElement("div"),j.style.width="0",j.style.marginRight="0",q.style.width="2px",q.appendChild(j),b.reliableMarginRight=(parseInt((a.getComputedStyle(j,null)||{marginRight:0}).marginRight,10)||0)===0);if(q.attachEvent)for(o in{submit:1,change:1,focusin:1})n="on"+o,p=n in q,p||(q.setAttribute(n,"return;"),p=typeof q[n]=="function"),b[o+"Bubbles"]=p;k.removeChild(q),k=g=h=j=q=i=null,f(function(){var a,d,e,g,h,i,j,k,m,n,o,r=c.getElementsByTagName("body")[0];!r||(j=1,k="position:absolute;top:0;left:0;width:1px;height:1px;margin:0;",m="visibility:hidden;border:0;",n="style='"+k+"border:5px solid #000;padding:0;'",o="<div "+n+"><div></div></div>"+"<table "+n+" cellpadding='0' cellspacing='0'>"+"<tr><td></td></tr></table>",a=c.createElement("div"),a.style.cssText=m+"width:0;height:0;position:static;top:0;margin-top:"+j+"px",r.insertBefore(a,r.firstChild),q=c.createElement("div"),a.appendChild(q),q.innerHTML="<table><tr><td style='padding:0;border:0;display:none'></td><td>t</td></tr></table>",l=q.getElementsByTagName("td"),p=l[0].offsetHeight===0,l[0].style.display="",l[1].style.display="none",b.reliableHiddenOffsets=p&&l[0].offsetHeight===0,q.innerHTML="",q.style.width=q.style.paddingLeft="1px",f.boxModel=b.boxModel=q.offsetWidth===2,typeof q.style.zoom!="undefined"&&(q.style.display="inline",q.style.zoom=1,b.inlineBlockNeedsLayout=q.offsetWidth===2,q.style.display="",q.innerHTML="<div style='width:4px;'></div>",b.shrinkWrapBlocks=q.offsetWidth!==2),q.style.cssText=k+m,q.innerHTML=o,d=q.firstChild,e=d.firstChild,h=d.nextSibling.firstChild.firstChild,i={doesNotAddBorder:e.offsetTop!==5,doesAddBorderForTableAndCells:h.offsetTop===5},e.style.position="fixed",e.style.top="20px",i.fixedPosition=e.offsetTop===20||e.offsetTop===15,e.style.position=e.style.top="",d.style.overflow="hidden",d.style.position="relative",i.subtractsBorderForOverflowNotVisible=e.offsetTop===-5,i.doesNotIncludeMarginInBodyOffset=r.offsetTop!==j,r.removeChild(a),q=a=null,f.extend(b,i))});return b}();var j=/^(?:\{.*\}|\[.*\])$/,k=/([A-Z])/g;f.extend({cache:{},uuid:0,expando:"jQuery"+(f.fn.jquery+Math.random()).replace(/\D/g,""),noData:{embed:!0,object:"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000",applet:!0},hasData:function(a){a=a.nodeType?f.cache[a[f.expando]]:a[f.expando];return!!a&&!m(a)},data:function(a,c,d,e){if(!!f.acceptData(a)){var g,h,i,j=f.expando,k=typeof c=="string",l=a.nodeType,m=l?f.cache:a,n=l?a[j]:a[j]&&j,o=c==="events";if((!n||!m[n]||!o&&!e&&!m[n].data)&&k&&d===b)return;n||(l?a[j]=n=++f.uuid:n=j),m[n]||(m[n]={},l||(m[n].toJSON=f.noop));if(typeof c=="object"||typeof c=="function")e?m[n]=f.extend(m[n],c):m[n].data=f.extend(m[n].data,c);g=h=m[n],e||(h.data||(h.data={}),h=h.data),d!==b&&(h[f.camelCase(c)]=d);if(o&&!h[c])return g.events;k?(i=h[c],i==null&&(i=h[f.camelCase(c)])):i=h;return i}},removeData:function(a,b,c){if(!!f.acceptData(a)){var d,e,g,h=f.expando,i=a.nodeType,j=i?f.cache:a,k=i?a[h]:h;if(!j[k])return;if(b){d=c?j[k]:j[k].data;if(d){f.isArray(b)||(b in d?b=[b]:(b=f.camelCase(b),b in d?b=[b]:b=b.split(" ")));for(e=0,g=b.length;e<g;e++)delete d[b[e]];if(!(c?m:f.isEmptyObject)(d))return}}if(!c){delete j[k].data;if(!m(j[k]))return}f.support.deleteExpando||!j.setInterval?delete j[k]:j[k]=null,i&&(f.support.deleteExpando?delete a[h]:a.removeAttribute?a.removeAttribute(h):a[h]=null)}},_data:function(a,b,c){return f.data(a,b,c,!0)},acceptData:function(a){if(a.nodeName){var b=f.noData[a.nodeName.toLowerCase()];if(b)return b!==!0&&a.getAttribute("classid")===b}return!0}}),f.fn.extend({data:function(a,c){var d,e,g,h=null;if(typeof a=="undefined"){if(this.length){h=f.data(this[0]);if(this[0].nodeType===1&&!f._data(this[0],"parsedAttrs")){e=this[0].attributes;for(var i=0,j=e.length;i<j;i++)g=e[i].name,g.indexOf("data-")===0&&(g=f.camelCase(g.substring(5)),l(this[0],g,h[g]));f._data(this[0],"parsedAttrs",!0)}}return h}if(typeof a=="object")return this.each(function(){f.data(this,a)});d=a.split("."),d[1]=d[1]?"."+d[1]:"";if(c===b){h=this.triggerHandler("getData"+d[1]+"!",[d[0]]),h===b&&this.length&&(h=f.data(this[0],a),h=l(this[0],a,h));return h===b&&d[1]?this.data(d[0]):h}return this.each(function(){var b=f(this),e=[d[0],c];b.triggerHandler("setData"+d[1]+"!",e),f.data(this,a,c),b.triggerHandler("changeData"+d[1]+"!",e)})},removeData:function(a){return this.each(function(){f.removeData(this,a)})}}),f.extend({_mark:function(a,b){a&&(b=(b||"fx")+"mark",f._data(a,b,(f._data(a,b)||0)+1))},_unmark:function(a,b,c){a!==!0&&(c=b,b=a,a=!1);if(b){c=c||"fx";var d=c+"mark",e=a?0:(f._data(b,d)||1)-1;e?f._data(b,d,e):(f.removeData(b,d,!0),n(b,c,"mark"))}},queue:function(a,b,c){var d;if(a){b=(b||"fx")+"queue",d=f._data(a,b),c&&(!d||f.isArray(c)?d=f._data(a,b,f.makeArray(c)):d.push(c));return d||[]}},dequeue:function(a,b){b=b||"fx";var c=f.queue(a,b),d=c.shift(),e={};d==="inprogress"&&(d=c.shift()),d&&(b==="fx"&&c.unshift("inprogress"),f._data(a,b+".run",e),d.call(a,function(){f.dequeue(a,b)},e)),c.length||(f.removeData(a,b+"queue "+b+".run",!0),n(a,b,"queue"))}}),f.fn.extend({queue:function(a,c){typeof a!="string"&&(c=a,a="fx");if(c===b)return f.queue(this[0],a);return this.each(function(){var b=f.queue(this,a,c);a==="fx"&&b[0]!=="inprogress"&&f.dequeue(this,a)})},dequeue:function(a){return this.each(function(){f.dequeue(this,a)})},delay:function(a,b){a=f.fx?f.fx.speeds[a]||a:a,b=b||"fx";return this.queue(b,function(b,c){var d=setTimeout(b,a);c.stop=function(){clearTimeout(d)}})},clearQueue:function(a){return this.queue(a||"fx",[])},promise:function(a,c){function m(){--h||d.resolveWith(e,[e])}typeof a!="string"&&(c=a,a=b),a=a||"fx";var d=f.Deferred(),e=this,g=e.length,h=1,i=a+"defer",j=a+"queue",k=a+"mark",l;while(g--)if(l=f.data(e[g],i,b,!0)||(f.data(e[g],j,b,!0)||f.data(e[g],k,b,!0))&&f.data(e[g],i,f.Callbacks("once memory"),!0))h++,l.add(m);m();return d.promise()}});var o=/[\n\t\r]/g,p=/\s+/,q=/\r/g,r=/^(?:button|input)$/i,s=/^(?:button|input|object|select|textarea)$/i,t=/^a(?:rea)?$/i,u=/^(?:autofocus|autoplay|async|checked|controls|defer|disabled|hidden|loop|multiple|open|readonly|required|scoped|selected)$/i,v=f.support.getSetAttribute,w,x,y;f.fn.extend({attr:function(a,b){return f.access(this,a,b,!0,f.attr)},removeAttr:function(a){return this.each(function(){f.removeAttr(this,a)})},prop:function(a,b){return f.access(this,a,b,!0,f.prop)},removeProp:function(a){a=f.propFix[a]||a;return this.each(function(){try{this[a]=b,delete this[a]}catch(c){}})},addClass:function(a){var b,c,d,e,g,h,i;if(f.isFunction(a))return this.each(function(b){f(this).addClass(a.call(this,b,this.className))});if(a&&typeof a=="string"){b=a.split(p);for(c=0,d=this.length;c<d;c++){e=this[c];if(e.nodeType===1)if(!e.className&&b.length===1)e.className=a;else{g=" "+e.className+" ";for(h=0,i=b.length;h<i;h++)~g.indexOf(" "+b[h]+" ")||(g+=b[h]+" ");e.className=f.trim(g)}}}return this},removeClass:function(a){var c,d,e,g,h,i,j;if(f.isFunction(a))return this.each(function(b){f(this).removeClass(a.call(this,b,this.className))});if(a&&typeof a=="string"||a===b){c=(a||"").split(p);for(d=0,e=this.length;d<e;d++){g=this[d];if(g.nodeType===1&&g.className)if(a){h=(" "+g.className+" ").replace(o," ");for(i=0,j=c.length;i<j;i++)h=h.replace(" "+c[i]+" "," ");g.className=f.trim(h)}else g.className=""}}return this},toggleClass:function(a,b){var c=typeof a,d=typeof b=="boolean";if(f.isFunction(a))return this.each(function(c){f(this).toggleClass(a.call(this,c,this.className,b),b)});return this.each(function(){if(c==="string"){var e,g=0,h=f(this),i=b,j=a.split(p);while(e=j[g++])i=d?i:!h.hasClass(e),h[i?"addClass":"removeClass"](e)}else if(c==="undefined"||c==="boolean")this.className&&f._data(this,"__className__",this.className),this.className=this.className||a===!1?"":f._data(this,"__className__")||""})},hasClass:function(a){var b=" "+a+" ",c=0,d=this.length;for(;c<d;c++)if(this[c].nodeType===1&&(" "+this[c].className+" ").replace(o," ").indexOf(b)>-1)return!0;return!1},val:function(a){var c,d,e,g=this[0];{if(!!arguments.length){e=f.isFunction(a);return this.each(function(d){var g=f(this),h;if(this.nodeType===1){e?h=a.call(this,d,g.val()):h=a,h==null?h="":typeof h=="number"?h+="":f.isArray(h)&&(h=f.map(h,function(a){return a==null?"":a+""})),c=f.valHooks[this.nodeName.toLowerCase()]||f.valHooks[this.type];if(!c||!("set"in c)||c.set(this,h,"value")===b)this.value=h}})}if(g){c=f.valHooks[g.nodeName.toLowerCase()]||f.valHooks[g.type];if(c&&"get"in c&&(d=c.get(g,"value"))!==b)return d;d=g.value;return typeof d=="string"?d.replace(q,""):d==null?"":d}}}}),f.extend({valHooks:{option:{get:function(a){var b=a.attributes.value;return!b||b.specified?a.value:a.text}},select:{get:function(a){var b,c,d,e,g=a.selectedIndex,h=[],i=a.options,j=a.type==="select-one";if(g<0)return null;c=j?g:0,d=j?g+1:i.length;for(;c<d;c++){e=i[c];if(e.selected&&(f.support.optDisabled?!e.disabled:e.getAttribute("disabled")===null)&&(!e.parentNode.disabled||!f.nodeName(e.parentNode,"optgroup"))){b=f(e).val();if(j)return b;h.push(b)}}if(j&&!h.length&&i.length)return f(i[g]).val();return h},set:function(a,b){var c=f.makeArray(b);f(a).find("option").each(function(){this.selected=f.inArray(f(this).val(),c)>=0}),c.length||(a.selectedIndex=-1);return c}}},attrFn:{val:!0,css:!0,html:!0,text:!0,data:!0,width:!0,height:!0,offset:!0},attr:function(a,c,d,e){var g,h,i,j=a.nodeType;if(!!a&&j!==3&&j!==8&&j!==2){if(e&&c in f.attrFn)return f(a)[c](d);if(typeof a.getAttribute=="undefined")return f.prop(a,c,d);i=j!==1||!f.isXMLDoc(a),i&&(c=c.toLowerCase(),h=f.attrHooks[c]||(u.test(c)?x:w));if(d!==b){if(d===null){f.removeAttr(a,c);return}if(h&&"set"in h&&i&&(g=h.set(a,d,c))!==b)return g;a.setAttribute(c,""+d);return d}if(h&&"get"in h&&i&&(g=h.get(a,c))!==null)return g;g=a.getAttribute(c);return g===null?b:g}},removeAttr:function(a,b){var c,d,e,g,h=0;if(b&&a.nodeType===1){d=b.toLowerCase().split(p),g=d.length;for(;h<g;h++)e=d[h],e&&(c=f.propFix[e]||e,f.attr(a,e,""),a.removeAttribute(v?e:c),u.test(e)&&c in a&&(a[c]=!1))}},attrHooks:{type:{set:function(a,b){if(r.test(a.nodeName)&&a.parentNode)f.error("type property can't be changed");else if(!f.support.radioValue&&b==="radio"&&f.nodeName(a,"input")){var c=a.value;a.setAttribute("type",b),c&&(a.value=c);return b}}},value:{get:function(a,b){if(w&&f.nodeName(a,"button"))return w.get(a,b);return b in a?a.value:null},set:function(a,b,c){if(w&&f.nodeName(a,"button"))return w.set(a,b,c);a.value=b}}},propFix:{tabindex:"tabIndex",readonly:"readOnly","for":"htmlFor","class":"className",maxlength:"maxLength",cellspacing:"cellSpacing",cellpadding:"cellPadding",rowspan:"rowSpan",colspan:"colSpan",usemap:"useMap",frameborder:"frameBorder",contenteditable:"contentEditable"},prop:function(a,c,d){var e,g,h,i=a.nodeType;if(!!a&&i!==3&&i!==8&&i!==2){h=i!==1||!f.isXMLDoc(a),h&&(c=f.propFix[c]||c,g=f.propHooks[c]);return d!==b?g&&"set"in g&&(e=g.set(a,d,c))!==b?e:a[c]=d:g&&"get"in g&&(e=g.get(a,c))!==null?e:a[c]}},propHooks:{tabIndex:{get:function(a){var c=a.getAttributeNode("tabindex");return c&&c.specified?parseInt(c.value,10):s.test(a.nodeName)||t.test(a.nodeName)&&a.href?0:b}}}}),f.attrHooks.tabindex=f.propHooks.tabIndex,x={get:function(a,c){var d,e=f.prop(a,c);return e===!0||typeof e!="boolean"&&(d=a.getAttributeNode(c))&&d.nodeValue!==!1?c.toLowerCase():b},set:function(a,b,c){var d;b===!1?f.removeAttr(a,c):(d=f.propFix[c]||c,d in a&&(a[d]=!0),a.setAttribute(c,c.toLowerCase()));return c}},v||(y={name:!0,id:!0},w=f.valHooks.button={get:function(a,c){var d;d=a.getAttributeNode(c);return d&&(y[c]?d.nodeValue!=="":d.specified)?d.nodeValue:b},set:function(a,b,d){var e=a.getAttributeNode(d);e||(e=c.createAttribute(d),a.setAttributeNode(e));return e.nodeValue=b+""}},f.attrHooks.tabindex.set=w.set,f.each(["width","height"],function(a,b){f.attrHooks[b]=f.extend(f.attrHooks[b],{set:function(a,c){if(c===""){a.setAttribute(b,"auto");return c}}})}),f.attrHooks.contenteditable={get:w.get,set:function(a,b,c){b===""&&(b="false"),w.set(a,b,c)}}),f.support.hrefNormalized||f.each(["href","src","width","height"],function(a,c){f.attrHooks[c]=f.extend(f.attrHooks[c],{get:function(a){var d=a.getAttribute(c,2);return d===null?b:d}})}),f.support.style||(f.attrHooks.style={get:function(a){return a.style.cssText.toLowerCase()||b},set:function(a,b){return a.style.cssText=""+b}}),f.support.optSelected||(f.propHooks.selected=f.extend(f.propHooks.selected,{get:function(a){var b=a.parentNode;b&&(b.selectedIndex,b.parentNode&&b.parentNode.selectedIndex);return null}})),f.support.enctype||(f.propFix.enctype="encoding"),f.support.checkOn||f.each(["radio","checkbox"],function(){f.valHooks[this]={get:function(a){return a.getAttribute("value")===null?"on":a.value}}}),f.each(["radio","checkbox"],function(){f.valHooks[this]=f.extend(f.valHooks[this],{set:function(a,b){if(f.isArray(b))return a.checked=f.inArray(f(a).val(),b)>=0}})});var z=/^(?:textarea|input|select)$/i,A=/^([^\.]*)?(?:\.(.+))?$/,B=/\bhover(\.\S+)?\b/,C=/^key/,D=/^(?:mouse|contextmenu)|click/,E=/^(?:focusinfocus|focusoutblur)$/,F=/^(\w*)(?:#([\w\-]+))?(?:\.([\w\-]+))?$/,G=function(a){var b=F.exec(a);b&&(b[1]=(b[1]||"").toLowerCase(),b[3]=b[3]&&new RegExp("(?:^|\\s)"+b[3]+"(?:\\s|$)"));return b},H=function(a,b){var c=a.attributes||{};return(!b[1]||a.nodeName.toLowerCase()===b[1])&&(!b[2]||(c.id||{}).value===b[2])&&(!b[3]||b[3].test((c["class"]||{}).value))},I=function(a){return f.event.special.hover?a:a.replace(B,"mouseenter$1 mouseleave$1")};
+f.event={add:function(a,c,d,e,g){var h,i,j,k,l,m,n,o,p,q,r,s;if(!(a.nodeType===3||a.nodeType===8||!c||!d||!(h=f._data(a)))){d.handler&&(p=d,d=p.handler),d.guid||(d.guid=f.guid++),j=h.events,j||(h.events=j={}),i=h.handle,i||(h.handle=i=function(a){return typeof f!="undefined"&&(!a||f.event.triggered!==a.type)?f.event.dispatch.apply(i.elem,arguments):b},i.elem=a),c=f.trim(I(c)).split(" ");for(k=0;k<c.length;k++){l=A.exec(c[k])||[],m=l[1],n=(l[2]||"").split(".").sort(),s=f.event.special[m]||{},m=(g?s.delegateType:s.bindType)||m,s=f.event.special[m]||{},o=f.extend({type:m,origType:l[1],data:e,handler:d,guid:d.guid,selector:g,quick:G(g),namespace:n.join(".")},p),r=j[m];if(!r){r=j[m]=[],r.delegateCount=0;if(!s.setup||s.setup.call(a,e,n,i)===!1)a.addEventListener?a.addEventListener(m,i,!1):a.attachEvent&&a.attachEvent("on"+m,i)}s.add&&(s.add.call(a,o),o.handler.guid||(o.handler.guid=d.guid)),g?r.splice(r.delegateCount++,0,o):r.push(o),f.event.global[m]=!0}a=null}},global:{},remove:function(a,b,c,d,e){var g=f.hasData(a)&&f._data(a),h,i,j,k,l,m,n,o,p,q,r,s;if(!!g&&!!(o=g.events)){b=f.trim(I(b||"")).split(" ");for(h=0;h<b.length;h++){i=A.exec(b[h])||[],j=k=i[1],l=i[2];if(!j){for(j in o)f.event.remove(a,j+b[h],c,d,!0);continue}p=f.event.special[j]||{},j=(d?p.delegateType:p.bindType)||j,r=o[j]||[],m=r.length,l=l?new RegExp("(^|\\.)"+l.split(".").sort().join("\\.(?:.*\\.)?")+"(\\.|$)"):null;for(n=0;n<r.length;n++)s=r[n],(e||k===s.origType)&&(!c||c.guid===s.guid)&&(!l||l.test(s.namespace))&&(!d||d===s.selector||d==="**"&&s.selector)&&(r.splice(n--,1),s.selector&&r.delegateCount--,p.remove&&p.remove.call(a,s));r.length===0&&m!==r.length&&((!p.teardown||p.teardown.call(a,l)===!1)&&f.removeEvent(a,j,g.handle),delete o[j])}f.isEmptyObject(o)&&(q=g.handle,q&&(q.elem=null),f.removeData(a,["events","handle"],!0))}},customEvent:{getData:!0,setData:!0,changeData:!0},trigger:function(c,d,e,g){if(!e||e.nodeType!==3&&e.nodeType!==8){var h=c.type||c,i=[],j,k,l,m,n,o,p,q,r,s;if(E.test(h+f.event.triggered))return;h.indexOf("!")>=0&&(h=h.slice(0,-1),k=!0),h.indexOf(".")>=0&&(i=h.split("."),h=i.shift(),i.sort());if((!e||f.event.customEvent[h])&&!f.event.global[h])return;c=typeof c=="object"?c[f.expando]?c:new f.Event(h,c):new f.Event(h),c.type=h,c.isTrigger=!0,c.exclusive=k,c.namespace=i.join("."),c.namespace_re=c.namespace?new RegExp("(^|\\.)"+i.join("\\.(?:.*\\.)?")+"(\\.|$)"):null,o=h.indexOf(":")<0?"on"+h:"";if(!e){j=f.cache;for(l in j)j[l].events&&j[l].events[h]&&f.event.trigger(c,d,j[l].handle.elem,!0);return}c.result=b,c.target||(c.target=e),d=d!=null?f.makeArray(d):[],d.unshift(c),p=f.event.special[h]||{};if(p.trigger&&p.trigger.apply(e,d)===!1)return;r=[[e,p.bindType||h]];if(!g&&!p.noBubble&&!f.isWindow(e)){s=p.delegateType||h,m=E.test(s+h)?e:e.parentNode,n=null;for(;m;m=m.parentNode)r.push([m,s]),n=m;n&&n===e.ownerDocument&&r.push([n.defaultView||n.parentWindow||a,s])}for(l=0;l<r.length&&!c.isPropagationStopped();l++)m=r[l][0],c.type=r[l][1],q=(f._data(m,"events")||{})[c.type]&&f._data(m,"handle"),q&&q.apply(m,d),q=o&&m[o],q&&f.acceptData(m)&&q.apply(m,d)===!1&&c.preventDefault();c.type=h,!g&&!c.isDefaultPrevented()&&(!p._default||p._default.apply(e.ownerDocument,d)===!1)&&(h!=="click"||!f.nodeName(e,"a"))&&f.acceptData(e)&&o&&e[h]&&(h!=="focus"&&h!=="blur"||c.target.offsetWidth!==0)&&!f.isWindow(e)&&(n=e[o],n&&(e[o]=null),f.event.triggered=h,e[h](),f.event.triggered=b,n&&(e[o]=n));return c.result}},dispatch:function(c){c=f.event.fix(c||a.event);var d=(f._data(this,"events")||{})[c.type]||[],e=d.delegateCount,g=[].slice.call(arguments,0),h=!c.exclusive&&!c.namespace,i=[],j,k,l,m,n,o,p,q,r,s,t;g[0]=c,c.delegateTarget=this;if(e&&!c.target.disabled&&(!c.button||c.type!=="click")){m=f(this),m.context=this.ownerDocument||this;for(l=c.target;l!=this;l=l.parentNode||this){o={},q=[],m[0]=l;for(j=0;j<e;j++)r=d[j],s=r.selector,o[s]===b&&(o[s]=r.quick?H(l,r.quick):m.is(s)),o[s]&&q.push(r);q.length&&i.push({elem:l,matches:q})}}d.length>e&&i.push({elem:this,matches:d.slice(e)});for(j=0;j<i.length&&!c.isPropagationStopped();j++){p=i[j],c.currentTarget=p.elem;for(k=0;k<p.matches.length&&!c.isImmediatePropagationStopped();k++){r=p.matches[k];if(h||!c.namespace&&!r.namespace||c.namespace_re&&c.namespace_re.test(r.namespace))c.data=r.data,c.handleObj=r,n=((f.event.special[r.origType]||{}).handle||r.handler).apply(p.elem,g),n!==b&&(c.result=n,n===!1&&(c.preventDefault(),c.stopPropagation()))}}return c.result},props:"attrChange attrName relatedNode srcElement altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "),fixHooks:{},keyHooks:{props:"char charCode key keyCode".split(" "),filter:function(a,b){a.which==null&&(a.which=b.charCode!=null?b.charCode:b.keyCode);return a}},mouseHooks:{props:"button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement".split(" "),filter:function(a,d){var e,f,g,h=d.button,i=d.fromElement;a.pageX==null&&d.clientX!=null&&(e=a.target.ownerDocument||c,f=e.documentElement,g=e.body,a.pageX=d.clientX+(f&&f.scrollLeft||g&&g.scrollLeft||0)-(f&&f.clientLeft||g&&g.clientLeft||0),a.pageY=d.clientY+(f&&f.scrollTop||g&&g.scrollTop||0)-(f&&f.clientTop||g&&g.clientTop||0)),!a.relatedTarget&&i&&(a.relatedTarget=i===a.target?d.toElement:i),!a.which&&h!==b&&(a.which=h&1?1:h&2?3:h&4?2:0);return a}},fix:function(a){if(a[f.expando])return a;var d,e,g=a,h=f.event.fixHooks[a.type]||{},i=h.props?this.props.concat(h.props):this.props;a=f.Event(g);for(d=i.length;d;)e=i[--d],a[e]=g[e];a.target||(a.target=g.srcElement||c),a.target.nodeType===3&&(a.target=a.target.parentNode),a.metaKey===b&&(a.metaKey=a.ctrlKey);return h.filter?h.filter(a,g):a},special:{ready:{setup:f.bindReady},load:{noBubble:!0},focus:{delegateType:"focusin"},blur:{delegateType:"focusout"},beforeunload:{setup:function(a,b,c){f.isWindow(this)&&(this.onbeforeunload=c)},teardown:function(a,b){this.onbeforeunload===b&&(this.onbeforeunload=null)}}},simulate:function(a,b,c,d){var e=f.extend(new f.Event,c,{type:a,isSimulated:!0,originalEvent:{}});d?f.event.trigger(e,null,b):f.event.dispatch.call(b,e),e.isDefaultPrevented()&&c.preventDefault()}},f.event.handle=f.event.dispatch,f.removeEvent=c.removeEventListener?function(a,b,c){a.removeEventListener&&a.removeEventListener(b,c,!1)}:function(a,b,c){a.detachEvent&&a.detachEvent("on"+b,c)},f.Event=function(a,b){if(!(this instanceof f.Event))return new f.Event(a,b);a&&a.type?(this.originalEvent=a,this.type=a.type,this.isDefaultPrevented=a.defaultPrevented||a.returnValue===!1||a.getPreventDefault&&a.getPreventDefault()?K:J):this.type=a,b&&f.extend(this,b),this.timeStamp=a&&a.timeStamp||f.now(),this[f.expando]=!0},f.Event.prototype={preventDefault:function(){this.isDefaultPrevented=K;var a=this.originalEvent;!a||(a.preventDefault?a.preventDefault():a.returnValue=!1)},stopPropagation:function(){this.isPropagationStopped=K;var a=this.originalEvent;!a||(a.stopPropagation&&a.stopPropagation(),a.cancelBubble=!0)},stopImmediatePropagation:function(){this.isImmediatePropagationStopped=K,this.stopPropagation()},isDefaultPrevented:J,isPropagationStopped:J,isImmediatePropagationStopped:J},f.each({mouseenter:"mouseover",mouseleave:"mouseout"},function(a,b){f.event.special[a]={delegateType:b,bindType:b,handle:function(a){var c=this,d=a.relatedTarget,e=a.handleObj,g=e.selector,h;if(!d||d!==c&&!f.contains(c,d))a.type=e.origType,h=e.handler.apply(this,arguments),a.type=b;return h}}}),f.support.submitBubbles||(f.event.special.submit={setup:function(){if(f.nodeName(this,"form"))return!1;f.event.add(this,"click._submit keypress._submit",function(a){var c=a.target,d=f.nodeName(c,"input")||f.nodeName(c,"button")?c.form:b;d&&!d._submit_attached&&(f.event.add(d,"submit._submit",function(a){this.parentNode&&!a.isTrigger&&f.event.simulate("submit",this.parentNode,a,!0)}),d._submit_attached=!0)})},teardown:function(){if(f.nodeName(this,"form"))return!1;f.event.remove(this,"._submit")}}),f.support.changeBubbles||(f.event.special.change={setup:function(){if(z.test(this.nodeName)){if(this.type==="checkbox"||this.type==="radio")f.event.add(this,"propertychange._change",function(a){a.originalEvent.propertyName==="checked"&&(this._just_changed=!0)}),f.event.add(this,"click._change",function(a){this._just_changed&&!a.isTrigger&&(this._just_changed=!1,f.event.simulate("change",this,a,!0))});return!1}f.event.add(this,"beforeactivate._change",function(a){var b=a.target;z.test(b.nodeName)&&!b._change_attached&&(f.event.add(b,"change._change",function(a){this.parentNode&&!a.isSimulated&&!a.isTrigger&&f.event.simulate("change",this.parentNode,a,!0)}),b._change_attached=!0)})},handle:function(a){var b=a.target;if(this!==b||a.isSimulated||a.isTrigger||b.type!=="radio"&&b.type!=="checkbox")return a.handleObj.handler.apply(this,arguments)},teardown:function(){f.event.remove(this,"._change");return z.test(this.nodeName)}}),f.support.focusinBubbles||f.each({focus:"focusin",blur:"focusout"},function(a,b){var d=0,e=function(a){f.event.simulate(b,a.target,f.event.fix(a),!0)};f.event.special[b]={setup:function(){d++===0&&c.addEventListener(a,e,!0)},teardown:function(){--d===0&&c.removeEventListener(a,e,!0)}}}),f.fn.extend({on:function(a,c,d,e,g){var h,i;if(typeof a=="object"){typeof c!="string"&&(d=c,c=b);for(i in a)this.on(i,c,d,a[i],g);return this}d==null&&e==null?(e=c,d=c=b):e==null&&(typeof c=="string"?(e=d,d=b):(e=d,d=c,c=b));if(e===!1)e=J;else if(!e)return this;g===1&&(h=e,e=function(a){f().off(a);return h.apply(this,arguments)},e.guid=h.guid||(h.guid=f.guid++));return this.each(function(){f.event.add(this,a,e,d,c)})},one:function(a,b,c,d){return this.on.call(this,a,b,c,d,1)},off:function(a,c,d){if(a&&a.preventDefault&&a.handleObj){var e=a.handleObj;f(a.delegateTarget).off(e.namespace?e.type+"."+e.namespace:e.type,e.selector,e.handler);return this}if(typeof a=="object"){for(var g in a)this.off(g,c,a[g]);return this}if(c===!1||typeof c=="function")d=c,c=b;d===!1&&(d=J);return this.each(function(){f.event.remove(this,a,d,c)})},bind:function(a,b,c){return this.on(a,null,b,c)},unbind:function(a,b){return this.off(a,null,b)},live:function(a,b,c){f(this.context).on(a,this.selector,b,c);return this},die:function(a,b){f(this.context).off(a,this.selector||"**",b);return this},delegate:function(a,b,c,d){return this.on(b,a,c,d)},undelegate:function(a,b,c){return arguments.length==1?this.off(a,"**"):this.off(b,a,c)},trigger:function(a,b){return this.each(function(){f.event.trigger(a,b,this)})},triggerHandler:function(a,b){if(this[0])return f.event.trigger(a,b,this[0],!0)},toggle:function(a){var b=arguments,c=a.guid||f.guid++,d=0,e=function(c){var e=(f._data(this,"lastToggle"+a.guid)||0)%d;f._data(this,"lastToggle"+a.guid,e+1),c.preventDefault();return b[e].apply(this,arguments)||!1};e.guid=c;while(d<b.length)b[d++].guid=c;return this.click(e)},hover:function(a,b){return this.mouseenter(a).mouseleave(b||a)}}),f.each("blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error contextmenu".split(" "),function(a,b){f.fn[b]=function(a,c){c==null&&(c=a,a=null);return arguments.length>0?this.on(b,null,a,c):this.trigger(b)},f.attrFn&&(f.attrFn[b]=!0),C.test(b)&&(f.event.fixHooks[b]=f.event.keyHooks),D.test(b)&&(f.event.fixHooks[b]=f.event.mouseHooks)}),function(){function x(a,b,c,e,f,g){for(var h=0,i=e.length;h<i;h++){var j=e[h];if(j){var k=!1;j=j[a];while(j){if(j[d]===c){k=e[j.sizset];break}if(j.nodeType===1){g||(j[d]=c,j.sizset=h);if(typeof b!="string"){if(j===b){k=!0;break}}else if(m.filter(b,[j]).length>0){k=j;break}}j=j[a]}e[h]=k}}}function w(a,b,c,e,f,g){for(var h=0,i=e.length;h<i;h++){var j=e[h];if(j){var k=!1;j=j[a];while(j){if(j[d]===c){k=e[j.sizset];break}j.nodeType===1&&!g&&(j[d]=c,j.sizset=h);if(j.nodeName.toLowerCase()===b){k=j;break}j=j[a]}e[h]=k}}}var a=/((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^\[\]]*\]|['"][^'"]*['"]|[^\[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,d="sizcache"+(Math.random()+"").replace(".",""),e=0,g=Object.prototype.toString,h=!1,i=!0,j=/\\/g,k=/\r\n/g,l=/\W/;[0,0].sort(function(){i=!1;return 0});var m=function(b,d,e,f){e=e||[],d=d||c;var h=d;if(d.nodeType!==1&&d.nodeType!==9)return[];if(!b||typeof b!="string")return e;var i,j,k,l,n,q,r,t,u=!0,v=m.isXML(d),w=[],x=b;do{a.exec(""),i=a.exec(x);if(i){x=i[3],w.push(i[1]);if(i[2]){l=i[3];break}}}while(i);if(w.length>1&&p.exec(b))if(w.length===2&&o.relative[w[0]])j=y(w[0]+w[1],d,f);else{j=o.relative[w[0]]?[d]:m(w.shift(),d);while(w.length)b=w.shift(),o.relative[b]&&(b+=w.shift()),j=y(b,j,f)}else{!f&&w.length>1&&d.nodeType===9&&!v&&o.match.ID.test(w[0])&&!o.match.ID.test(w[w.length-1])&&(n=m.find(w.shift(),d,v),d=n.expr?m.filter(n.expr,n.set)[0]:n.set[0]);if(d){n=f?{expr:w.pop(),set:s(f)}:m.find(w.pop(),w.length===1&&(w[0]==="~"||w[0]==="+")&&d.parentNode?d.parentNode:d,v),j=n.expr?m.filter(n.expr,n.set):n.set,w.length>0?k=s(j):u=!1;while(w.length)q=w.pop(),r=q,o.relative[q]?r=w.pop():q="",r==null&&(r=d),o.relative[q](k,r,v)}else k=w=[]}k||(k=j),k||m.error(q||b);if(g.call(k)==="[object Array]")if(!u)e.push.apply(e,k);else if(d&&d.nodeType===1)for(t=0;k[t]!=null;t++)k[t]&&(k[t]===!0||k[t].nodeType===1&&m.contains(d,k[t]))&&e.push(j[t]);else for(t=0;k[t]!=null;t++)k[t]&&k[t].nodeType===1&&e.push(j[t]);else s(k,e);l&&(m(l,h,e,f),m.uniqueSort(e));return e};m.uniqueSort=function(a){if(u){h=i,a.sort(u);if(h)for(var b=1;b<a.length;b++)a[b]===a[b-1]&&a.splice(b--,1)}return a},m.matches=function(a,b){return m(a,null,null,b)},m.matchesSelector=function(a,b){return m(b,null,null,[a]).length>0},m.find=function(a,b,c){var d,e,f,g,h,i;if(!a)return[];for(e=0,f=o.order.length;e<f;e++){h=o.order[e];if(g=o.leftMatch[h].exec(a)){i=g[1],g.splice(1,1);if(i.substr(i.length-1)!=="\\"){g[1]=(g[1]||"").replace(j,""),d=o.find[h](g,b,c);if(d!=null){a=a.replace(o.match[h],"");break}}}}d||(d=typeof b.getElementsByTagName!="undefined"?b.getElementsByTagName("*"):[]);return{set:d,expr:a}},m.filter=function(a,c,d,e){var f,g,h,i,j,k,l,n,p,q=a,r=[],s=c,t=c&&c[0]&&m.isXML(c[0]);while(a&&c.length){for(h in o.filter)if((f=o.leftMatch[h].exec(a))!=null&&f[2]){k=o.filter[h],l=f[1],g=!1,f.splice(1,1);if(l.substr(l.length-1)==="\\")continue;s===r&&(r=[]);if(o.preFilter[h]){f=o.preFilter[h](f,s,d,r,e,t);if(!f)g=i=!0;else if(f===!0)continue}if(f)for(n=0;(j=s[n])!=null;n++)j&&(i=k(j,f,n,s),p=e^i,d&&i!=null?p?g=!0:s[n]=!1:p&&(r.push(j),g=!0));if(i!==b){d||(s=r),a=a.replace(o.match[h],"");if(!g)return[];break}}if(a===q)if(g==null)m.error(a);else break;q=a}return s},m.error=function(a){throw new Error("Syntax error, unrecognized expression: "+a)};var n=m.getText=function(a){var b,c,d=a.nodeType,e="";if(d){if(d===1||d===9){if(typeof a.textContent=="string")return a.textContent;if(typeof a.innerText=="string")return a.innerText.replace(k,"");for(a=a.firstChild;a;a=a.nextSibling)e+=n(a)}else if(d===3||d===4)return a.nodeValue}else for(b=0;c=a[b];b++)c.nodeType!==8&&(e+=n(c));return e},o=m.selectors={order:["ID","NAME","TAG"],match:{ID:/#((?:[\w\u00c0-\uFFFF\-]|\\.)+)/,CLASS:/\.((?:[\w\u00c0-\uFFFF\-]|\\.)+)/,NAME:/\[name=['"]*((?:[\w\u00c0-\uFFFF\-]|\\.)+)['"]*\]/,ATTR:/\[\s*((?:[\w\u00c0-\uFFFF\-]|\\.)+)\s*(?:(\S?=)\s*(?:(['"])(.*?)\3|(#?(?:[\w\u00c0-\uFFFF\-]|\\.)*)|)|)\s*\]/,TAG:/^((?:[\w\u00c0-\uFFFF\*\-]|\\.)+)/,CHILD:/:(only|nth|last|first)-child(?:\(\s*(even|odd|(?:[+\-]?\d+|(?:[+\-]?\d*)?n\s*(?:[+\-]\s*\d+)?))\s*\))?/,POS:/:(nth|eq|gt|lt|first|last|even|odd)(?:\((\d*)\))?(?=[^\-]|$)/,PSEUDO:/:((?:[\w\u00c0-\uFFFF\-]|\\.)+)(?:\((['"]?)((?:\([^\)]+\)|[^\(\)]*)+)\2\))?/},leftMatch:{},attrMap:{"class":"className","for":"htmlFor"},attrHandle:{href:function(a){return a.getAttribute("href")},type:function(a){return a.getAttribute("type")}},relative:{"+":function(a,b){var c=typeof b=="string",d=c&&!l.test(b),e=c&&!d;d&&(b=b.toLowerCase());for(var f=0,g=a.length,h;f<g;f++)if(h=a[f]){while((h=h.previousSibling)&&h.nodeType!==1);a[f]=e||h&&h.nodeName.toLowerCase()===b?h||!1:h===b}e&&m.filter(b,a,!0)},">":function(a,b){var c,d=typeof b=="string",e=0,f=a.length;if(d&&!l.test(b)){b=b.toLowerCase();for(;e<f;e++){c=a[e];if(c){var g=c.parentNode;a[e]=g.nodeName.toLowerCase()===b?g:!1}}}else{for(;e<f;e++)c=a[e],c&&(a[e]=d?c.parentNode:c.parentNode===b);d&&m.filter(b,a,!0)}},"":function(a,b,c){var d,f=e++,g=x;typeof b=="string"&&!l.test(b)&&(b=b.toLowerCase(),d=b,g=w),g("parentNode",b,f,a,d,c)},"~":function(a,b,c){var d,f=e++,g=x;typeof b=="string"&&!l.test(b)&&(b=b.toLowerCase(),d=b,g=w),g("previousSibling",b,f,a,d,c)}},find:{ID:function(a,b,c){if(typeof b.getElementById!="undefined"&&!c){var d=b.getElementById(a[1]);return d&&d.parentNode?[d]:[]}},NAME:function(a,b){if(typeof b.getElementsByName!="undefined"){var c=[],d=b.getElementsByName(a[1]);for(var e=0,f=d.length;e<f;e++)d[e].getAttribute("name")===a[1]&&c.push(d[e]);return c.length===0?null:c}},TAG:function(a,b){if(typeof b.getElementsByTagName!="undefined")return b.getElementsByTagName(a[1])}},preFilter:{CLASS:function(a,b,c,d,e,f){a=" "+a[1].replace(j,"")+" ";if(f)return a;for(var g=0,h;(h=b[g])!=null;g++)h&&(e^(h.className&&(" "+h.className+" ").replace(/[\t\n\r]/g," ").indexOf(a)>=0)?c||d.push(h):c&&(b[g]=!1));return!1},ID:function(a){return a[1].replace(j,"")},TAG:function(a,b){return a[1].replace(j,"").toLowerCase()},CHILD:function(a){if(a[1]==="nth"){a[2]||m.error(a[0]),a[2]=a[2].replace(/^\+|\s*/g,"");var b=/(-?)(\d*)(?:n([+\-]?\d*))?/.exec(a[2]==="even"&&"2n"||a[2]==="odd"&&"2n+1"||!/\D/.test(a[2])&&"0n+"+a[2]||a[2]);a[2]=b[1]+(b[2]||1)-0,a[3]=b[3]-0}else a[2]&&m.error(a[0]);a[0]=e++;return a},ATTR:function(a,b,c,d,e,f){var g=a[1]=a[1].replace(j,"");!f&&o.attrMap[g]&&(a[1]=o.attrMap[g]),a[4]=(a[4]||a[5]||"").replace(j,""),a[2]==="~="&&(a[4]=" "+a[4]+" ");return a},PSEUDO:function(b,c,d,e,f){if(b[1]==="not")if((a.exec(b[3])||"").length>1||/^\w/.test(b[3]))b[3]=m(b[3],null,null,c);else{var g=m.filter(b[3],c,d,!0^f);d||e.push.apply(e,g);return!1}else if(o.match.POS.test(b[0])||o.match.CHILD.test(b[0]))return!0;return b},POS:function(a){a.unshift(!0);return a}},filters:{enabled:function(a){return a.disabled===!1&&a.type!=="hidden"},disabled:function(a){return a.disabled===!0},checked:function(a){return a.checked===!0},selected:function(a){a.parentNode&&a.parentNode.selectedIndex;return a.selected===!0},parent:function(a){return!!a.firstChild},empty:function(a){return!a.firstChild},has:function(a,b,c){return!!m(c[3],a).length},header:function(a){return/h\d/i.test(a.nodeName)},text:function(a){var b=a.getAttribute("type"),c=a.type;return a.nodeName.toLowerCase()==="input"&&"text"===c&&(b===c||b===null)},radio:function(a){return a.nodeName.toLowerCase()==="input"&&"radio"===a.type},checkbox:function(a){return a.nodeName.toLowerCase()==="input"&&"checkbox"===a.type},file:function(a){return a.nodeName.toLowerCase()==="input"&&"file"===a.type},password:function(a){return a.nodeName.toLowerCase()==="input"&&"password"===a.type},submit:function(a){var b=a.nodeName.toLowerCase();return(b==="input"||b==="button")&&"submit"===a.type},image:function(a){return a.nodeName.toLowerCase()==="input"&&"image"===a.type},reset:function(a){var b=a.nodeName.toLowerCase();return(b==="input"||b==="button")&&"reset"===a.type},button:function(a){var b=a.nodeName.toLowerCase();return b==="input"&&"button"===a.type||b==="button"},input:function(a){return/input|select|textarea|button/i.test(a.nodeName)},focus:function(a){return a===a.ownerDocument.activeElement}},setFilters:{first:function(a,b){return b===0},last:function(a,b,c,d){return b===d.length-1},even:function(a,b){return b%2===0},odd:function(a,b){return b%2===1},lt:function(a,b,c){return b<c[3]-0},gt:function(a,b,c){return b>c[3]-0},nth:function(a,b,c){return c[3]-0===b},eq:function(a,b,c){return c[3]-0===b}},filter:{PSEUDO:function(a,b,c,d){var e=b[1],f=o.filters[e];if(f)return f(a,c,b,d);if(e==="contains")return(a.textContent||a.innerText||n([a])||"").indexOf(b[3])>=0;if(e==="not"){var g=b[3];for(var h=0,i=g.length;h<i;h++)if(g[h]===a)return!1;return!0}m.error(e)},CHILD:function(a,b){var c,e,f,g,h,i,j,k=b[1],l=a;switch(k){case"only":case"first":while(l=l.previousSibling)if(l.nodeType===1)return!1;if(k==="first")return!0;l=a;case"last":while(l=l.nextSibling)if(l.nodeType===1)return!1;return!0;case"nth":c=b[2],e=b[3];if(c===1&&e===0)return!0;f=b[0],g=a.parentNode;if(g&&(g[d]!==f||!a.nodeIndex)){i=0;for(l=g.firstChild;l;l=l.nextSibling)l.nodeType===1&&(l.nodeIndex=++i);g[d]=f}j=a.nodeIndex-e;return c===0?j===0:j%c===0&&j/c>=0}},ID:function(a,b){return a.nodeType===1&&a.getAttribute("id")===b},TAG:function(a,b){return b==="*"&&a.nodeType===1||!!a.nodeName&&a.nodeName.toLowerCase()===b},CLASS:function(a,b){return(" "+(a.className||a.getAttribute("class"))+" ").indexOf(b)>-1},ATTR:function(a,b){var c=b[1],d=m.attr?m.attr(a,c):o.attrHandle[c]?o.attrHandle[c](a):a[c]!=null?a[c]:a.getAttribute(c),e=d+"",f=b[2],g=b[4];return d==null?f==="!=":!f&&m.attr?d!=null:f==="="?e===g:f==="*="?e.indexOf(g)>=0:f==="~="?(" "+e+" ").indexOf(g)>=0:g?f==="!="?e!==g:f==="^="?e.indexOf(g)===0:f==="$="?e.substr(e.length-g.length)===g:f==="|="?e===g||e.substr(0,g.length+1)===g+"-":!1:e&&d!==!1},POS:function(a,b,c,d){var e=b[2],f=o.setFilters[e];if(f)return f(a,c,b,d)}}},p=o.match.POS,q=function(a,b){return"\\"+(b-0+1)};for(var r in o.match)o.match[r]=new RegExp(o.match[r].source+/(?![^\[]*\])(?![^\(]*\))/.source),o.leftMatch[r]=new RegExp(/(^(?:.|\r|\n)*?)/.source+o.match[r].source.replace(/\\(\d+)/g,q));var s=function(a,b){a=Array.prototype.slice.call(a,0);if(b){b.push.apply(b,a);return b}return a};try{Array.prototype.slice.call(c.documentElement.childNodes,0)[0].nodeType}catch(t){s=function(a,b){var c=0,d=b||[];if(g.call(a)==="[object Array]")Array.prototype.push.apply(d,a);else if(typeof a.length=="number")for(var e=a.length;c<e;c++)d.push(a[c]);else for(;a[c];c++)d.push(a[c]);return d}}var u,v;c.documentElement.compareDocumentPosition?u=function(a,b){if(a===b){h=!0;return 0}if(!a.compareDocumentPosition||!b.compareDocumentPosition)return a.compareDocumentPosition?-1:1;return a.compareDocumentPosition(b)&4?-1:1}:(u=function(a,b){if(a===b){h=!0;return 0}if(a.sourceIndex&&b.sourceIndex)return a.sourceIndex-b.sourceIndex;var c,d,e=[],f=[],g=a.parentNode,i=b.parentNode,j=g;if(g===i)return v(a,b);if(!g)return-1;if(!i)return 1;while(j)e.unshift(j),j=j.parentNode;j=i;while(j)f.unshift(j),j=j.parentNode;c=e.length,d=f.length;for(var k=0;k<c&&k<d;k++)if(e[k]!==f[k])return v(e[k],f[k]);return k===c?v(a,f[k],-1):v(e[k],b,1)},v=function(a,b,c){if(a===b)return c;var d=a.nextSibling;while(d){if(d===b)return-1;d=d.nextSibling}return 1}),function(){var a=c.createElement("div"),d="script"+(new Date).getTime(),e=c.documentElement;a.innerHTML="<a name='"+d+"'/>",e.insertBefore(a,e.firstChild),c.getElementById(d)&&(o.find.ID=function(a,c,d){if(typeof c.getElementById!="undefined"&&!d){var e=c.getElementById(a[1]);return e?e.id===a[1]||typeof e.getAttributeNode!="undefined"&&e.getAttributeNode("id").nodeValue===a[1]?[e]:b:[]}},o.filter.ID=function(a,b){var c=typeof a.getAttributeNode!="undefined"&&a.getAttributeNode("id");return a.nodeType===1&&c&&c.nodeValue===b}),e.removeChild(a),e=a=null}(),function(){var a=c.createElement("div");a.appendChild(c.createComment("")),a.getElementsByTagName("*").length>0&&(o.find.TAG=function(a,b){var c=b.getElementsByTagName(a[1]);if(a[1]==="*"){var d=[];for(var e=0;c[e];e++)c[e].nodeType===1&&d.push(c[e]);c=d}return c}),a.innerHTML="<a href='#'></a>",a.firstChild&&typeof a.firstChild.getAttribute!="undefined"&&a.firstChild.getAttribute("href")!=="#"&&(o.attrHandle.href=function(a){return a.getAttribute("href",2)}),a=null}(),c.querySelectorAll&&function(){var a=m,b=c.createElement("div"),d="__sizzle__";b.innerHTML="<p class='TEST'></p>";if(!b.querySelectorAll||b.querySelectorAll(".TEST").length!==0){m=function(b,e,f,g){e=e||c;if(!g&&!m.isXML(e)){var h=/^(\w+$)|^\.([\w\-]+$)|^#([\w\-]+$)/.exec(b);if(h&&(e.nodeType===1||e.nodeType===9)){if(h[1])return s(e.getElementsByTagName(b),f);if(h[2]&&o.find.CLASS&&e.getElementsByClassName)return s(e.getElementsByClassName(h[2]),f)}if(e.nodeType===9){if(b==="body"&&e.body)return s([e.body],f);if(h&&h[3]){var i=e.getElementById(h[3]);if(!i||!i.parentNode)return s([],f);if(i.id===h[3])return s([i],f)}try{return s(e.querySelectorAll(b),f)}catch(j){}}else if(e.nodeType===1&&e.nodeName.toLowerCase()!=="object"){var k=e,l=e.getAttribute("id"),n=l||d,p=e.parentNode,q=/^\s*[+~]/.test(b);l?n=n.replace(/'/g,"\\$&"):e.setAttribute("id",n),q&&p&&(e=e.parentNode);try{if(!q||p)return s(e.querySelectorAll("[id='"+n+"'] "+b),f)}catch(r){}finally{l||k.removeAttribute("id")}}}return a(b,e,f,g)};for(var e in a)m[e]=a[e];b=null}}(),function(){var a=c.documentElement,b=a.matchesSelector||a.mozMatchesSelector||a.webkitMatchesSelector||a.msMatchesSelector;if(b){var d=!b.call(c.createElement("div"),"div"),e=!1;try{b.call(c.documentElement,"[test!='']:sizzle")}catch(f){e=!0}m.matchesSelector=function(a,c){c=c.replace(/\=\s*([^'"\]]*)\s*\]/g,"='$1']");if(!m.isXML(a))try{if(e||!o.match.PSEUDO.test(c)&&!/!=/.test(c)){var f=b.call(a,c);if(f||!d||a.document&&a.document.nodeType!==11)return f}}catch(g){}return m(c,null,null,[a]).length>0}}}(),function(){var a=c.createElement("div");a.innerHTML="<div class='test e'></div><div class='test'></div>";if(!!a.getElementsByClassName&&a.getElementsByClassName("e").length!==0){a.lastChild.className="e";if(a.getElementsByClassName("e").length===1)return;o.order.splice(1,0,"CLASS"),o.find.CLASS=function(a,b,c){if(typeof b.getElementsByClassName!="undefined"&&!c)return b.getElementsByClassName(a[1])},a=null}}(),c.documentElement.contains?m.contains=function(a,b){return a!==b&&(a.contains?a.contains(b):!0)}:c.documentElement.compareDocumentPosition?m.contains=function(a,b){return!!(a.compareDocumentPosition(b)&16)}:m.contains=function(){return!1},m.isXML=function(a){var b=(a?a.ownerDocument||a:0).documentElement;return b?b.nodeName!=="HTML":!1};var y=function(a,b,c){var d,e=[],f="",g=b.nodeType?[b]:b;while(d=o.match.PSEUDO.exec(a))f+=d[0],a=a.replace(o.match.PSEUDO,"");a=o.relative[a]?a+"*":a;for(var h=0,i=g.length;h<i;h++)m(a,g[h],e,c);return m.filter(f,e)};m.attr=f.attr,m.selectors.attrMap={},f.find=m,f.expr=m.selectors,f.expr[":"]=f.expr.filters,f.unique=m.uniqueSort,f.text=m.getText,f.isXMLDoc=m.isXML,f.contains=m.contains}();var L=/Until$/,M=/^(?:parents|prevUntil|prevAll)/,N=/,/,O=/^.[^:#\[\.,]*$/,P=Array.prototype.slice,Q=f.expr.match.POS,R={children:!0,contents:!0,next:!0,prev:!0};f.fn.extend({find:function(a){var b=this,c,d;if(typeof a!="string")return f(a).filter(function(){for(c=0,d=b.length;c<d;c++)if(f.contains(b[c],this))return!0});var e=this.pushStack("","find",a),g,h,i;for(c=0,d=this.length;c<d;c++){g=e.length,f.find(a,this[c],e);if(c>0)for(h=g;h<e.length;h++)for(i=0;i<g;i++)if(e[i]===e[h]){e.splice(h--,1);break}}return e},has:function(a){var b=f(a);return this.filter(function(){for(var a=0,c=b.length;a<c;a++)if(f.contains(this,b[a]))return!0})},not:function(a){return this.pushStack(T(this,a,!1),"not",a)},filter:function(a){return this.pushStack(T(this,a,!0),"filter",a)},is:function(a){return!!a&&(typeof a=="string"?Q.test(a)?f(a,this.context).index(this[0])>=0:f.filter(a,this).length>0:this.filter(a).length>0)},closest:function(a,b){var c=[],d,e,g=this[0];if(f.isArray(a)){var h=1;while(g&&g.ownerDocument&&g!==b){for(d=0;d<a.length;d++)f(g).is(a[d])&&c.push({selector:a[d],elem:g,level:h});g=g.parentNode,h++}return c}var i=Q.test(a)||typeof a!="string"?f(a,b||this.context):0;for(d=0,e=this.length;d<e;d++){g=this[d];while(g){if(i?i.index(g)>-1:f.find.matchesSelector(g,a)){c.push(g);break}g=g.parentNode;if(!g||!g.ownerDocument||g===b||g.nodeType===11)break}}c=c.length>1?f.unique(c):c;return this.pushStack(c,"closest",a)},index:function(a){if(!a)return this[0]&&this[0].parentNode?this.prevAll().length:-1;if(typeof a=="string")return f.inArray(this[0],f(a));return f.inArray(a.jquery?a[0]:a,this)},add:function(a,b){var c=typeof a=="string"?f(a,b):f.makeArray(a&&a.nodeType?[a]:a),d=f.merge(this.get(),c);return this.pushStack(S(c[0])||S(d[0])?d:f.unique(d))},andSelf:function(){return this.add(this.prevObject)}}),f.each({parent:function(a){var b=a.parentNode;return b&&b.nodeType!==11?b:null},parents:function(a){return f.dir(a,"parentNode")},parentsUntil:function(a,b,c){return f.dir(a,"parentNode",c)},next:function(a){return f.nth(a,2,"nextSibling")},prev:function(a){return f.nth(a,2,"previousSibling")},nextAll:function(a){return f.dir(a,"nextSibling")},prevAll:function(a){return f.dir(a,"previousSibling")},nextUntil:function(a,b,c){return f.dir(a,"nextSibling",c)},prevUntil:function(a,b,c){return f.dir(a,"previousSibling",c)},siblings:function(a){return f.sibling(a.parentNode.firstChild,a)},children:function(a){return f.sibling(a.firstChild)},contents:function(a){return f.nodeName(a,"iframe")?a.contentDocument||a.contentWindow.document:f.makeArray(a.childNodes)}},function(a,b){f.fn[a]=function(c,d){var e=f.map(this,b,c);L.test(a)||(d=c),d&&typeof d=="string"&&(e=f.filter(d,e)),e=this.length>1&&!R[a]?f.unique(e):e,(this.length>1||N.test(d))&&M.test(a)&&(e=e.reverse());return this.pushStack(e,a,P.call(arguments).join(","))}}),f.extend({filter:function(a,b,c){c&&(a=":not("+a+")");return b.length===1?f.find.matchesSelector(b[0],a)?[b[0]]:[]:f.find.matches(a,b)},dir:function(a,c,d){var e=[],g=a[c];while(g&&g.nodeType!==9&&(d===b||g.nodeType!==1||!f(g).is(d)))g.nodeType===1&&e.push(g),g=g[c];return e},nth:function(a,b,c,d){b=b||1;var e=0;for(;a;a=a[c])if(a.nodeType===1&&++e===b)break;return a},sibling:function(a,b){var c=[];for(;a;a=a.nextSibling)a.nodeType===1&&a!==b&&c.push(a);return c}});var V="abbr|article|aside|audio|canvas|datalist|details|figcaption|figure|footer|header|hgroup|mark|meter|nav|output|progress|section|summary|time|video",W=/ jQuery\d+="(?:\d+|null)"/g,X=/^\s+/,Y=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/ig,Z=/<([\w:]+)/,$=/<tbody/i,_=/<|&#?\w+;/,ba=/<(?:script|style)/i,bb=/<(?:script|object|embed|option|style)/i,bc=new RegExp("<(?:"+V+")","i"),bd=/checked\s*(?:[^=]|=\s*.checked.)/i,be=/\/(java|ecma)script/i,bf=/^\s*<!(?:\[CDATA\[|\-\-)/,bg={option:[1,"<select multiple='multiple'>","</select>"],legend:[1,"<fieldset>","</fieldset>"],thead:[1,"<table>","</table>"],tr:[2,"<table><tbody>","</tbody></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],col:[2,"<table><tbody></tbody><colgroup>","</colgroup></table>"],area:[1,"<map>","</map>"],_default:[0,"",""]},bh=U(c);bg.optgroup=bg.option,bg.tbody=bg.tfoot=bg.colgroup=bg.caption=bg.thead,bg.th=bg.td,f.support.htmlSerialize||(bg._default=[1,"div<div>","</div>"]),f.fn.extend({text:function(a){if(f.isFunction(a))return this.each(function(b){var c=f(this);c.text(a.call(this,b,c.text()))});if(typeof a!="object"&&a!==b)return this.empty().append((this[0]&&this[0].ownerDocument||c).createTextNode(a));return f.text(this)},wrapAll:function(a){if(f.isFunction(a))return this.each(function(b){f(this).wrapAll(a.call(this,b))});if(this[0]){var b=f(a,this[0].ownerDocument).eq(0).clone(!0);this[0].parentNode&&b.insertBefore(this[0]),b.map(function(){var a=this;while(a.firstChild&&a.firstChild.nodeType===1)a=a.firstChild;return a}).append(this)}return this},wrapInner:function(a){if(f.isFunction(a))return this.each(function(b){f(this).wrapInner(a.call(this,b))});return this.each(function(){var b=f(this),c=b.contents();c.length?c.wrapAll(a):b.append(a)})},wrap:function(a){var b=f.isFunction(a);return this.each(function(c){f(this).wrapAll(b?a.call(this,c):a)})},unwrap:function(){return this.parent().each(function(){f.nodeName(this,"body")||f(this).replaceWith(this.childNodes)}).end()},append:function(){return this.domManip(arguments,!0,function(a){this.nodeType===1&&this.appendChild(a)})},prepend:function(){return this.domManip(arguments,!0,function(a){this.nodeType===1&&this.insertBefore(a,this.firstChild)})},before:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this)});if(arguments.length){var a=f.clean(arguments);a.push.apply(a,this.toArray());return this.pushStack(a,"before",arguments)}},after:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this.nextSibling)});if(arguments.length){var a=this.pushStack(this,"after",arguments);a.push.apply(a,f.clean(arguments));return a}},remove:function(a,b){for(var c=0,d;(d=this[c])!=null;c++)if(!a||f.filter(a,[d]).length)!b&&d.nodeType===1&&(f.cleanData(d.getElementsByTagName("*")),f.cleanData([d])),d.parentNode&&d.parentNode.removeChild(d);return this},empty:function()
+{for(var a=0,b;(b=this[a])!=null;a++){b.nodeType===1&&f.cleanData(b.getElementsByTagName("*"));while(b.firstChild)b.removeChild(b.firstChild)}return this},clone:function(a,b){a=a==null?!1:a,b=b==null?a:b;return this.map(function(){return f.clone(this,a,b)})},html:function(a){if(a===b)return this[0]&&this[0].nodeType===1?this[0].innerHTML.replace(W,""):null;if(typeof a=="string"&&!ba.test(a)&&(f.support.leadingWhitespace||!X.test(a))&&!bg[(Z.exec(a)||["",""])[1].toLowerCase()]){a=a.replace(Y,"<$1></$2>");try{for(var c=0,d=this.length;c<d;c++)this[c].nodeType===1&&(f.cleanData(this[c].getElementsByTagName("*")),this[c].innerHTML=a)}catch(e){this.empty().append(a)}}else f.isFunction(a)?this.each(function(b){var c=f(this);c.html(a.call(this,b,c.html()))}):this.empty().append(a);return this},replaceWith:function(a){if(this[0]&&this[0].parentNode){if(f.isFunction(a))return this.each(function(b){var c=f(this),d=c.html();c.replaceWith(a.call(this,b,d))});typeof a!="string"&&(a=f(a).detach());return this.each(function(){var b=this.nextSibling,c=this.parentNode;f(this).remove(),b?f(b).before(a):f(c).append(a)})}return this.length?this.pushStack(f(f.isFunction(a)?a():a),"replaceWith",a):this},detach:function(a){return this.remove(a,!0)},domManip:function(a,c,d){var e,g,h,i,j=a[0],k=[];if(!f.support.checkClone&&arguments.length===3&&typeof j=="string"&&bd.test(j))return this.each(function(){f(this).domManip(a,c,d,!0)});if(f.isFunction(j))return this.each(function(e){var g=f(this);a[0]=j.call(this,e,c?g.html():b),g.domManip(a,c,d)});if(this[0]){i=j&&j.parentNode,f.support.parentNode&&i&&i.nodeType===11&&i.childNodes.length===this.length?e={fragment:i}:e=f.buildFragment(a,this,k),h=e.fragment,h.childNodes.length===1?g=h=h.firstChild:g=h.firstChild;if(g){c=c&&f.nodeName(g,"tr");for(var l=0,m=this.length,n=m-1;l<m;l++)d.call(c?bi(this[l],g):this[l],e.cacheable||m>1&&l<n?f.clone(h,!0,!0):h)}k.length&&f.each(k,bp)}return this}}),f.buildFragment=function(a,b,d){var e,g,h,i,j=a[0];b&&b[0]&&(i=b[0].ownerDocument||b[0]),i.createDocumentFragment||(i=c),a.length===1&&typeof j=="string"&&j.length<512&&i===c&&j.charAt(0)==="<"&&!bb.test(j)&&(f.support.checkClone||!bd.test(j))&&(f.support.html5Clone||!bc.test(j))&&(g=!0,h=f.fragments[j],h&&h!==1&&(e=h)),e||(e=i.createDocumentFragment(),f.clean(a,i,e,d)),g&&(f.fragments[j]=h?e:1);return{fragment:e,cacheable:g}},f.fragments={},f.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){f.fn[a]=function(c){var d=[],e=f(c),g=this.length===1&&this[0].parentNode;if(g&&g.nodeType===11&&g.childNodes.length===1&&e.length===1){e[b](this[0]);return this}for(var h=0,i=e.length;h<i;h++){var j=(h>0?this.clone(!0):this).get();f(e[h])[b](j),d=d.concat(j)}return this.pushStack(d,a,e.selector)}}),f.extend({clone:function(a,b,c){var d,e,g,h=f.support.html5Clone||!bc.test("<"+a.nodeName)?a.cloneNode(!0):bo(a);if((!f.support.noCloneEvent||!f.support.noCloneChecked)&&(a.nodeType===1||a.nodeType===11)&&!f.isXMLDoc(a)){bk(a,h),d=bl(a),e=bl(h);for(g=0;d[g];++g)e[g]&&bk(d[g],e[g])}if(b){bj(a,h);if(c){d=bl(a),e=bl(h);for(g=0;d[g];++g)bj(d[g],e[g])}}d=e=null;return h},clean:function(a,b,d,e){var g;b=b||c,typeof b.createElement=="undefined"&&(b=b.ownerDocument||b[0]&&b[0].ownerDocument||c);var h=[],i;for(var j=0,k;(k=a[j])!=null;j++){typeof k=="number"&&(k+="");if(!k)continue;if(typeof k=="string")if(!_.test(k))k=b.createTextNode(k);else{k=k.replace(Y,"<$1></$2>");var l=(Z.exec(k)||["",""])[1].toLowerCase(),m=bg[l]||bg._default,n=m[0],o=b.createElement("div");b===c?bh.appendChild(o):U(b).appendChild(o),o.innerHTML=m[1]+k+m[2];while(n--)o=o.lastChild;if(!f.support.tbody){var p=$.test(k),q=l==="table"&&!p?o.firstChild&&o.firstChild.childNodes:m[1]==="<table>"&&!p?o.childNodes:[];for(i=q.length-1;i>=0;--i)f.nodeName(q[i],"tbody")&&!q[i].childNodes.length&&q[i].parentNode.removeChild(q[i])}!f.support.leadingWhitespace&&X.test(k)&&o.insertBefore(b.createTextNode(X.exec(k)[0]),o.firstChild),k=o.childNodes}var r;if(!f.support.appendChecked)if(k[0]&&typeof (r=k.length)=="number")for(i=0;i<r;i++)bn(k[i]);else bn(k);k.nodeType?h.push(k):h=f.merge(h,k)}if(d){g=function(a){return!a.type||be.test(a.type)};for(j=0;h[j];j++)if(e&&f.nodeName(h[j],"script")&&(!h[j].type||h[j].type.toLowerCase()==="text/javascript"))e.push(h[j].parentNode?h[j].parentNode.removeChild(h[j]):h[j]);else{if(h[j].nodeType===1){var s=f.grep(h[j].getElementsByTagName("script"),g);h.splice.apply(h,[j+1,0].concat(s))}d.appendChild(h[j])}}return h},cleanData:function(a){var b,c,d=f.cache,e=f.event.special,g=f.support.deleteExpando;for(var h=0,i;(i=a[h])!=null;h++){if(i.nodeName&&f.noData[i.nodeName.toLowerCase()])continue;c=i[f.expando];if(c){b=d[c];if(b&&b.events){for(var j in b.events)e[j]?f.event.remove(i,j):f.removeEvent(i,j,b.handle);b.handle&&(b.handle.elem=null)}g?delete i[f.expando]:i.removeAttribute&&i.removeAttribute(f.expando),delete d[c]}}}});var bq=/alpha\([^)]*\)/i,br=/opacity=([^)]*)/,bs=/([A-Z]|^ms)/g,bt=/^-?\d+(?:px)?$/i,bu=/^-?\d/,bv=/^([\-+])=([\-+.\de]+)/,bw={position:"absolute",visibility:"hidden",display:"block"},bx=["Left","Right"],by=["Top","Bottom"],bz,bA,bB;f.fn.css=function(a,c){if(arguments.length===2&&c===b)return this;return f.access(this,a,c,!0,function(a,c,d){return d!==b?f.style(a,c,d):f.css(a,c)})},f.extend({cssHooks:{opacity:{get:function(a,b){if(b){var c=bz(a,"opacity","opacity");return c===""?"1":c}return a.style.opacity}}},cssNumber:{fillOpacity:!0,fontWeight:!0,lineHeight:!0,opacity:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{"float":f.support.cssFloat?"cssFloat":"styleFloat"},style:function(a,c,d,e){if(!!a&&a.nodeType!==3&&a.nodeType!==8&&!!a.style){var g,h,i=f.camelCase(c),j=a.style,k=f.cssHooks[i];c=f.cssProps[i]||i;if(d===b){if(k&&"get"in k&&(g=k.get(a,!1,e))!==b)return g;return j[c]}h=typeof d,h==="string"&&(g=bv.exec(d))&&(d=+(g[1]+1)*+g[2]+parseFloat(f.css(a,c)),h="number");if(d==null||h==="number"&&isNaN(d))return;h==="number"&&!f.cssNumber[i]&&(d+="px");if(!k||!("set"in k)||(d=k.set(a,d))!==b)try{j[c]=d}catch(l){}}},css:function(a,c,d){var e,g;c=f.camelCase(c),g=f.cssHooks[c],c=f.cssProps[c]||c,c==="cssFloat"&&(c="float");if(g&&"get"in g&&(e=g.get(a,!0,d))!==b)return e;if(bz)return bz(a,c)},swap:function(a,b,c){var d={};for(var e in b)d[e]=a.style[e],a.style[e]=b[e];c.call(a);for(e in b)a.style[e]=d[e]}}),f.curCSS=f.css,f.each(["height","width"],function(a,b){f.cssHooks[b]={get:function(a,c,d){var e;if(c){if(a.offsetWidth!==0)return bC(a,b,d);f.swap(a,bw,function(){e=bC(a,b,d)});return e}},set:function(a,b){if(!bt.test(b))return b;b=parseFloat(b);if(b>=0)return b+"px"}}}),f.support.opacity||(f.cssHooks.opacity={get:function(a,b){return br.test((b&&a.currentStyle?a.currentStyle.filter:a.style.filter)||"")?parseFloat(RegExp.$1)/100+"":b?"1":""},set:function(a,b){var c=a.style,d=a.currentStyle,e=f.isNumeric(b)?"alpha(opacity="+b*100+")":"",g=d&&d.filter||c.filter||"";c.zoom=1;if(b>=1&&f.trim(g.replace(bq,""))===""){c.removeAttribute("filter");if(d&&!d.filter)return}c.filter=bq.test(g)?g.replace(bq,e):g+" "+e}}),f(function(){f.support.reliableMarginRight||(f.cssHooks.marginRight={get:function(a,b){var c;f.swap(a,{display:"inline-block"},function(){b?c=bz(a,"margin-right","marginRight"):c=a.style.marginRight});return c}})}),c.defaultView&&c.defaultView.getComputedStyle&&(bA=function(a,b){var c,d,e;b=b.replace(bs,"-$1").toLowerCase(),(d=a.ownerDocument.defaultView)&&(e=d.getComputedStyle(a,null))&&(c=e.getPropertyValue(b),c===""&&!f.contains(a.ownerDocument.documentElement,a)&&(c=f.style(a,b)));return c}),c.documentElement.currentStyle&&(bB=function(a,b){var c,d,e,f=a.currentStyle&&a.currentStyle[b],g=a.style;f===null&&g&&(e=g[b])&&(f=e),!bt.test(f)&&bu.test(f)&&(c=g.left,d=a.runtimeStyle&&a.runtimeStyle.left,d&&(a.runtimeStyle.left=a.currentStyle.left),g.left=b==="fontSize"?"1em":f||0,f=g.pixelLeft+"px",g.left=c,d&&(a.runtimeStyle.left=d));return f===""?"auto":f}),bz=bA||bB,f.expr&&f.expr.filters&&(f.expr.filters.hidden=function(a){var b=a.offsetWidth,c=a.offsetHeight;return b===0&&c===0||!f.support.reliableHiddenOffsets&&(a.style&&a.style.display||f.css(a,"display"))==="none"},f.expr.filters.visible=function(a){return!f.expr.filters.hidden(a)});var bD=/%20/g,bE=/\[\]$/,bF=/\r?\n/g,bG=/#.*$/,bH=/^(.*?):[ \t]*([^\r\n]*)\r?$/mg,bI=/^(?:color|date|datetime|datetime-local|email|hidden|month|number|password|range|search|tel|text|time|url|week)$/i,bJ=/^(?:about|app|app\-storage|.+\-extension|file|res|widget):$/,bK=/^(?:GET|HEAD)$/,bL=/^\/\//,bM=/\?/,bN=/<script\b[^<]*(?:(?!<\/script>)<[^<]*)*<\/script>/gi,bO=/^(?:select|textarea)/i,bP=/\s+/,bQ=/([?&])_=[^&]*/,bR=/^([\w\+\.\-]+:)(?:\/\/([^\/?#:]*)(?::(\d+))?)?/,bS=f.fn.load,bT={},bU={},bV,bW,bX=["*/"]+["*"];try{bV=e.href}catch(bY){bV=c.createElement("a"),bV.href="",bV=bV.href}bW=bR.exec(bV.toLowerCase())||[],f.fn.extend({load:function(a,c,d){if(typeof a!="string"&&bS)return bS.apply(this,arguments);if(!this.length)return this;var e=a.indexOf(" ");if(e>=0){var g=a.slice(e,a.length);a=a.slice(0,e)}var h="GET";c&&(f.isFunction(c)?(d=c,c=b):typeof c=="object"&&(c=f.param(c,f.ajaxSettings.traditional),h="POST"));var i=this;f.ajax({url:a,type:h,dataType:"html",data:c,complete:function(a,b,c){c=a.responseText,a.isResolved()&&(a.done(function(a){c=a}),i.html(g?f("<div>").append(c.replace(bN,"")).find(g):c)),d&&i.each(d,[c,b,a])}});return this},serialize:function(){return f.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?f.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||bO.test(this.nodeName)||bI.test(this.type))}).map(function(a,b){var c=f(this).val();return c==null?null:f.isArray(c)?f.map(c,function(a,c){return{name:b.name,value:a.replace(bF,"\r\n")}}):{name:b.name,value:c.replace(bF,"\r\n")}}).get()}}),f.each("ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "),function(a,b){f.fn[b]=function(a){return this.on(b,a)}}),f.each(["get","post"],function(a,c){f[c]=function(a,d,e,g){f.isFunction(d)&&(g=g||e,e=d,d=b);return f.ajax({type:c,url:a,data:d,success:e,dataType:g})}}),f.extend({getScript:function(a,c){return f.get(a,b,c,"script")},getJSON:function(a,b,c){return f.get(a,b,c,"json")},ajaxSetup:function(a,b){b?b_(a,f.ajaxSettings):(b=a,a=f.ajaxSettings),b_(a,b);return a},ajaxSettings:{url:bV,isLocal:bJ.test(bW[1]),global:!0,type:"GET",contentType:"application/x-www-form-urlencoded",processData:!0,async:!0,accepts:{xml:"application/xml, text/xml",html:"text/html",text:"text/plain",json:"application/json, text/javascript","*":bX},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText"},converters:{"* text":a.String,"text html":!0,"text json":f.parseJSON,"text xml":f.parseXML},flatOptions:{context:!0,url:!0}},ajaxPrefilter:bZ(bT),ajaxTransport:bZ(bU),ajax:function(a,c){function w(a,c,l,m){if(s!==2){s=2,q&&clearTimeout(q),p=b,n=m||"",v.readyState=a>0?4:0;var o,r,u,w=c,x=l?cb(d,v,l):b,y,z;if(a>=200&&a<300||a===304){if(d.ifModified){if(y=v.getResponseHeader("Last-Modified"))f.lastModified[k]=y;if(z=v.getResponseHeader("Etag"))f.etag[k]=z}if(a===304)w="notmodified",o=!0;else try{r=cc(d,x),w="success",o=!0}catch(A){w="parsererror",u=A}}else{u=w;if(!w||a)w="error",a<0&&(a=0)}v.status=a,v.statusText=""+(c||w),o?h.resolveWith(e,[r,w,v]):h.rejectWith(e,[v,w,u]),v.statusCode(j),j=b,t&&g.trigger("ajax"+(o?"Success":"Error"),[v,d,o?r:u]),i.fireWith(e,[v,w]),t&&(g.trigger("ajaxComplete",[v,d]),--f.active||f.event.trigger("ajaxStop"))}}typeof a=="object"&&(c=a,a=b),c=c||{};var d=f.ajaxSetup({},c),e=d.context||d,g=e!==d&&(e.nodeType||e instanceof f)?f(e):f.event,h=f.Deferred(),i=f.Callbacks("once memory"),j=d.statusCode||{},k,l={},m={},n,o,p,q,r,s=0,t,u,v={readyState:0,setRequestHeader:function(a,b){if(!s){var c=a.toLowerCase();a=m[c]=m[c]||a,l[a]=b}return this},getAllResponseHeaders:function(){return s===2?n:null},getResponseHeader:function(a){var c;if(s===2){if(!o){o={};while(c=bH.exec(n))o[c[1].toLowerCase()]=c[2]}c=o[a.toLowerCase()]}return c===b?null:c},overrideMimeType:function(a){s||(d.mimeType=a);return this},abort:function(a){a=a||"abort",p&&p.abort(a),w(0,a);return this}};h.promise(v),v.success=v.done,v.error=v.fail,v.complete=i.add,v.statusCode=function(a){if(a){var b;if(s<2)for(b in a)j[b]=[j[b],a[b]];else b=a[v.status],v.then(b,b)}return this},d.url=((a||d.url)+"").replace(bG,"").replace(bL,bW[1]+"//"),d.dataTypes=f.trim(d.dataType||"*").toLowerCase().split(bP),d.crossDomain==null&&(r=bR.exec(d.url.toLowerCase()),d.crossDomain=!(!r||r[1]==bW[1]&&r[2]==bW[2]&&(r[3]||(r[1]==="http:"?80:443))==(bW[3]||(bW[1]==="http:"?80:443)))),d.data&&d.processData&&typeof d.data!="string"&&(d.data=f.param(d.data,d.traditional)),b$(bT,d,c,v);if(s===2)return!1;t=d.global,d.type=d.type.toUpperCase(),d.hasContent=!bK.test(d.type),t&&f.active++===0&&f.event.trigger("ajaxStart");if(!d.hasContent){d.data&&(d.url+=(bM.test(d.url)?"&":"?")+d.data,delete d.data),k=d.url;if(d.cache===!1){var x=f.now(),y=d.url.replace(bQ,"$1_="+x);d.url=y+(y===d.url?(bM.test(d.url)?"&":"?")+"_="+x:"")}}(d.data&&d.hasContent&&d.contentType!==!1||c.contentType)&&v.setRequestHeader("Content-Type",d.contentType),d.ifModified&&(k=k||d.url,f.lastModified[k]&&v.setRequestHeader("If-Modified-Since",f.lastModified[k]),f.etag[k]&&v.setRequestHeader("If-None-Match",f.etag[k])),v.setRequestHeader("Accept",d.dataTypes[0]&&d.accepts[d.dataTypes[0]]?d.accepts[d.dataTypes[0]]+(d.dataTypes[0]!=="*"?", "+bX+"; q=0.01":""):d.accepts["*"]);for(u in d.headers)v.setRequestHeader(u,d.headers[u]);if(d.beforeSend&&(d.beforeSend.call(e,v,d)===!1||s===2)){v.abort();return!1}for(u in{success:1,error:1,complete:1})v[u](d[u]);p=b$(bU,d,c,v);if(!p)w(-1,"No Transport");else{v.readyState=1,t&&g.trigger("ajaxSend",[v,d]),d.async&&d.timeout>0&&(q=setTimeout(function(){v.abort("timeout")},d.timeout));try{s=1,p.send(l,w)}catch(z){if(s<2)w(-1,z);else throw z}}return v},param:function(a,c){var d=[],e=function(a,b){b=f.isFunction(b)?b():b,d[d.length]=encodeURIComponent(a)+"="+encodeURIComponent(b)};c===b&&(c=f.ajaxSettings.traditional);if(f.isArray(a)||a.jquery&&!f.isPlainObject(a))f.each(a,function(){e(this.name,this.value)});else for(var g in a)ca(g,a[g],c,e);return d.join("&").replace(bD,"+")}}),f.extend({active:0,lastModified:{},etag:{}});var cd=f.now(),ce=/(\=)\?(&|$)|\?\?/i;f.ajaxSetup({jsonp:"callback",jsonpCallback:function(){return f.expando+"_"+cd++}}),f.ajaxPrefilter("json jsonp",function(b,c,d){var e=b.contentType==="application/x-www-form-urlencoded"&&typeof b.data=="string";if(b.dataTypes[0]==="jsonp"||b.jsonp!==!1&&(ce.test(b.url)||e&&ce.test(b.data))){var g,h=b.jsonpCallback=f.isFunction(b.jsonpCallback)?b.jsonpCallback():b.jsonpCallback,i=a[h],j=b.url,k=b.data,l="$1"+h+"$2";b.jsonp!==!1&&(j=j.replace(ce,l),b.url===j&&(e&&(k=k.replace(ce,l)),b.data===k&&(j+=(/\?/.test(j)?"&":"?")+b.jsonp+"="+h))),b.url=j,b.data=k,a[h]=function(a){g=[a]},d.always(function(){a[h]=i,g&&f.isFunction(i)&&a[h](g[0])}),b.converters["script json"]=function(){g||f.error(h+" was not called");return g[0]},b.dataTypes[0]="json";return"script"}}),f.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/javascript|ecmascript/},converters:{"text script":function(a){f.globalEval(a);return a}}}),f.ajaxPrefilter("script",function(a){a.cache===b&&(a.cache=!1),a.crossDomain&&(a.type="GET",a.global=!1)}),f.ajaxTransport("script",function(a){if(a.crossDomain){var d,e=c.head||c.getElementsByTagName("head")[0]||c.documentElement;return{send:function(f,g){d=c.createElement("script"),d.async="async",a.scriptCharset&&(d.charset=a.scriptCharset),d.src=a.url,d.onload=d.onreadystatechange=function(a,c){if(c||!d.readyState||/loaded|complete/.test(d.readyState))d.onload=d.onreadystatechange=null,e&&d.parentNode&&e.removeChild(d),d=b,c||g(200,"success")},e.insertBefore(d,e.firstChild)},abort:function(){d&&d.onload(0,1)}}}});var cf=a.ActiveXObject?function(){for(var a in ch)ch[a](0,1)}:!1,cg=0,ch;f.ajaxSettings.xhr=a.ActiveXObject?function(){return!this.isLocal&&ci()||cj()}:ci,function(a){f.extend(f.support,{ajax:!!a,cors:!!a&&"withCredentials"in a})}(f.ajaxSettings.xhr()),f.support.ajax&&f.ajaxTransport(function(c){if(!c.crossDomain||f.support.cors){var d;return{send:function(e,g){var h=c.xhr(),i,j;c.username?h.open(c.type,c.url,c.async,c.username,c.password):h.open(c.type,c.url,c.async);if(c.xhrFields)for(j in c.xhrFields)h[j]=c.xhrFields[j];c.mimeType&&h.overrideMimeType&&h.overrideMimeType(c.mimeType),!c.crossDomain&&!e["X-Requested-With"]&&(e["X-Requested-With"]="XMLHttpRequest");try{for(j in e)h.setRequestHeader(j,e[j])}catch(k){}h.send(c.hasContent&&c.data||null),d=function(a,e){var j,k,l,m,n;try{if(d&&(e||h.readyState===4)){d=b,i&&(h.onreadystatechange=f.noop,cf&&delete ch[i]);if(e)h.readyState!==4&&h.abort();else{j=h.status,l=h.getAllResponseHeaders(),m={},n=h.responseXML,n&&n.documentElement&&(m.xml=n),m.text=h.responseText;try{k=h.statusText}catch(o){k=""}!j&&c.isLocal&&!c.crossDomain?j=m.text?200:404:j===1223&&(j=204)}}}catch(p){e||g(-1,p)}m&&g(j,k,m,l)},!c.async||h.readyState===4?d():(i=++cg,cf&&(ch||(ch={},f(a).unload(cf)),ch[i]=d),h.onreadystatechange=d)},abort:function(){d&&d(0,1)}}}});var ck={},cl,cm,cn=/^(?:toggle|show|hide)$/,co=/^([+\-]=)?([\d+.\-]+)([a-z%]*)$/i,cp,cq=[["height","marginTop","marginBottom","paddingTop","paddingBottom"],["width","marginLeft","marginRight","paddingLeft","paddingRight"],["opacity"]],cr;f.fn.extend({show:function(a,b,c){var d,e;if(a||a===0)return this.animate(cu("show",3),a,b,c);for(var g=0,h=this.length;g<h;g++)d=this[g],d.style&&(e=d.style.display,!f._data(d,"olddisplay")&&e==="none"&&(e=d.style.display=""),e===""&&f.css(d,"display")==="none"&&f._data(d,"olddisplay",cv(d.nodeName)));for(g=0;g<h;g++){d=this[g];if(d.style){e=d.style.display;if(e===""||e==="none")d.style.display=f._data(d,"olddisplay")||""}}return this},hide:function(a,b,c){if(a||a===0)return this.animate(cu("hide",3),a,b,c);var d,e,g=0,h=this.length;for(;g<h;g++)d=this[g],d.style&&(e=f.css(d,"display"),e!=="none"&&!f._data(d,"olddisplay")&&f._data(d,"olddisplay",e));for(g=0;g<h;g++)this[g].style&&(this[g].style.display="none");return this},_toggle:f.fn.toggle,toggle:function(a,b,c){var d=typeof a=="boolean";f.isFunction(a)&&f.isFunction(b)?this._toggle.apply(this,arguments):a==null||d?this.each(function(){var b=d?a:f(this).is(":hidden");f(this)[b?"show":"hide"]()}):this.animate(cu("toggle",3),a,b,c);return this},fadeTo:function(a,b,c,d){return this.filter(":hidden").css("opacity",0).show().end().animate({opacity:b},a,c,d)},animate:function(a,b,c,d){function g(){e.queue===!1&&f._mark(this);var b=f.extend({},e),c=this.nodeType===1,d=c&&f(this).is(":hidden"),g,h,i,j,k,l,m,n,o;b.animatedProperties={};for(i in a){g=f.camelCase(i),i!==g&&(a[g]=a[i],delete a[i]),h=a[g],f.isArray(h)?(b.animatedProperties[g]=h[1],h=a[g]=h[0]):b.animatedProperties[g]=b.specialEasing&&b.specialEasing[g]||b.easing||"swing";if(h==="hide"&&d||h==="show"&&!d)return b.complete.call(this);c&&(g==="height"||g==="width")&&(b.overflow=[this.style.overflow,this.style.overflowX,this.style.overflowY],f.css(this,"display")==="inline"&&f.css(this,"float")==="none"&&(!f.support.inlineBlockNeedsLayout||cv(this.nodeName)==="inline"?this.style.display="inline-block":this.style.zoom=1))}b.overflow!=null&&(this.style.overflow="hidden");for(i in a)j=new f.fx(this,b,i),h=a[i],cn.test(h)?(o=f._data(this,"toggle"+i)||(h==="toggle"?d?"show":"hide":0),o?(f._data(this,"toggle"+i,o==="show"?"hide":"show"),j[o]()):j[h]()):(k=co.exec(h),l=j.cur(),k?(m=parseFloat(k[2]),n=k[3]||(f.cssNumber[i]?"":"px"),n!=="px"&&(f.style(this,i,(m||1)+n),l=(m||1)/j.cur()*l,f.style(this,i,l+n)),k[1]&&(m=(k[1]==="-="?-1:1)*m+l),j.custom(l,m,n)):j.custom(l,h,""));return!0}var e=f.speed(b,c,d);if(f.isEmptyObject(a))return this.each(e.complete,[!1]);a=f.extend({},a);return e.queue===!1?this.each(g):this.queue(e.queue,g)},stop:function(a,c,d){typeof a!="string"&&(d=c,c=a,a=b),c&&a!==!1&&this.queue(a||"fx",[]);return this.each(function(){function h(a,b,c){var e=b[c];f.removeData(a,c,!0),e.stop(d)}var b,c=!1,e=f.timers,g=f._data(this);d||f._unmark(!0,this);if(a==null)for(b in g)g[b]&&g[b].stop&&b.indexOf(".run")===b.length-4&&h(this,g,b);else g[b=a+".run"]&&g[b].stop&&h(this,g,b);for(b=e.length;b--;)e[b].elem===this&&(a==null||e[b].queue===a)&&(d?e[b](!0):e[b].saveState(),c=!0,e.splice(b,1));(!d||!c)&&f.dequeue(this,a)})}}),f.each({slideDown:cu("show",1),slideUp:cu("hide",1),slideToggle:cu("toggle",1),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(a,b){f.fn[a]=function(a,c,d){return this.animate(b,a,c,d)}}),f.extend({speed:function(a,b,c){var d=a&&typeof a=="object"?f.extend({},a):{complete:c||!c&&b||f.isFunction(a)&&a,duration:a,easing:c&&b||b&&!f.isFunction(b)&&b};d.duration=f.fx.off?0:typeof d.duration=="number"?d.duration:d.duration in f.fx.speeds?f.fx.speeds[d.duration]:f.fx.speeds._default;if(d.queue==null||d.queue===!0)d.queue="fx";d.old=d.complete,d.complete=function(a){f.isFunction(d.old)&&d.old.call(this),d.queue?f.dequeue(this,d.queue):a!==!1&&f._unmark(this)};return d},easing:{linear:function(a,b,c,d){return c+d*a},swing:function(a,b,c,d){return(-Math.cos(a*Math.PI)/2+.5)*d+c}},timers:[],fx:function(a,b,c){this.options=b,this.elem=a,this.prop=c,b.orig=b.orig||{}}}),f.fx.prototype={update:function(){this.options.step&&this.options.step.call(this.elem,this.now,this),(f.fx.step[this.prop]||f.fx.step._default)(this)},cur:function(){if(this.elem[this.prop]!=null&&(!this.elem.style||this.elem.style[this.prop]==null))return this.elem[this.prop];var a,b=f.css(this.elem,this.prop);return isNaN(a=parseFloat(b))?!b||b==="auto"?0:b:a},custom:function(a,c,d){function h(a){return e.step(a)}var e=this,g=f.fx;this.startTime=cr||cs(),this.end=c,this.now=this.start=a,this.pos=this.state=0,this.unit=d||this.unit||(f.cssNumber[this.prop]?"":"px"),h.queue=this.options.queue,h.elem=this.elem,h.saveState=function(){e.options.hide&&f._data(e.elem,"fxshow"+e.prop)===b&&f._data(e.elem,"fxshow"+e.prop,e.start)},h()&&f.timers.push(h)&&!cp&&(cp=setInterval(g.tick,g.interval))},show:function(){var a=f._data(this.elem,"fxshow"+this.prop);this.options.orig[this.prop]=a||f.style(this.elem,this.prop),this.options.show=!0,a!==b?this.custom(this.cur(),a):this.custom(this.prop==="width"||this.prop==="height"?1:0,this.cur()),f(this.elem).show()},hide:function(){this.options.orig[this.prop]=f._data(this.elem,"fxshow"+this.prop)||f.style(this.elem,this.prop),this.options.hide=!0,this.custom(this.cur(),0)},step:function(a){var b,c,d,e=cr||cs(),g=!0,h=this.elem,i=this.options;if(a||e>=i.duration+this.startTime){this.now=this.end,this.pos=this.state=1,this.update(),i.animatedProperties[this.prop]=!0;for(b in i.animatedProperties)i.animatedProperties[b]!==!0&&(g=!1);if(g){i.overflow!=null&&!f.support.shrinkWrapBlocks&&f.each(["","X","Y"],function(a,b){h.style["overflow"+b]=i.overflow[a]}),i.hide&&f(h).hide();if(i.hide||i.show)for(b in i.animatedProperties)f.style(h,b,i.orig[b]),f.removeData(h,"fxshow"+b,!0),f.removeData(h,"toggle"+b,!0);d=i.complete,d&&(i.complete=!1,d.call(h))}return!1}i.duration==Infinity?this.now=e:(c=e-this.startTime,this.state=c/i.duration,this.pos=f.easing[i.animatedProperties[this.prop]](this.state,c,0,1,i.duration),this.now=this.start+(this.end-this.start)*this.pos),this.update();return!0}},f.extend(f.fx,{tick:function(){var a,b=f.timers,c=0;for(;c<b.length;c++)a=b[c],!a()&&b[c]===a&&b.splice(c--,1);b.length||f.fx.stop()},interval:13,stop:function(){clearInterval(cp),cp=null},speeds:{slow:600,fast:200,_default:400},step:{opacity:function(a){f.style(a.elem,"opacity",a.now)},_default:function(a){a.elem.style&&a.elem.style[a.prop]!=null?a.elem.style[a.prop]=a.now+a.unit:a.elem[a.prop]=a.now}}}),f.each(["width","height"],function(a,b){f.fx.step[b]=function(a){f.style(a.elem,b,Math.max(0,a.now)+a.unit)}}),f.expr&&f.expr.filters&&(f.expr.filters.animated=function(a){return f.grep(f.timers,function(b){return a===b.elem}).length});var cw=/^t(?:able|d|h)$/i,cx=/^(?:body|html)$/i;"getBoundingClientRect"in c.documentElement?f.fn.offset=function(a){var b=this[0],c;if(a)return this.each(function(b){f.offset.setOffset(this,a,b)});if(!b||!b.ownerDocument)return null;if(b===b.ownerDocument.body)return f.offset.bodyOffset(b);try{c=b.getBoundingClientRect()}catch(d){}var e=b.ownerDocument,g=e.documentElement;if(!c||!f.contains(g,b))return c?{top:c.top,left:c.left}:{top:0,left:0};var h=e.body,i=cy(e),j=g.clientTop||h.clientTop||0,k=g.clientLeft||h.clientLeft||0,l=i.pageYOffset||f.support.boxModel&&g.scrollTop||h.scrollTop,m=i.pageXOffset||f.support.boxModel&&g.scrollLeft||h.scrollLeft,n=c.top+l-j,o=c.left+m-k;return{top:n,left:o}}:f.fn.offset=function(a){var b=this[0];if(a)return this.each(function(b){f.offset.setOffset(this,a,b)});if(!b||!b.ownerDocument)return null;if(b===b.ownerDocument.body)return f.offset.bodyOffset(b);var c,d=b.offsetParent,e=b,g=b.ownerDocument,h=g.documentElement,i=g.body,j=g.defaultView,k=j?j.getComputedStyle(b,null):b.currentStyle,l=b.offsetTop,m=b.offsetLeft;while((b=b.parentNode)&&b!==i&&b!==h){if(f.support.fixedPosition&&k.position==="fixed")break;c=j?j.getComputedStyle(b,null):b.currentStyle,l-=b.scrollTop,m-=b.scrollLeft,b===d&&(l+=b.offsetTop,m+=b.offsetLeft,f.support.doesNotAddBorder&&(!f.support.doesAddBorderForTableAndCells||!cw.test(b.nodeName))&&(l+=parseFloat(c.borderTopWidth)||0,m+=parseFloat(c.borderLeftWidth)||0),e=d,d=b.offsetParent),f.support.subtractsBorderForOverflowNotVisible&&c.overflow!=="visible"&&(l+=parseFloat(c.borderTopWidth)||0,m+=parseFloat(c.borderLeftWidth)||0),k=c}if(k.position==="relative"||k.position==="static")l+=i.offsetTop,m+=i.offsetLeft;f.support.fixedPosition&&k.position==="fixed"&&(l+=Math.max(h.scrollTop,i.scrollTop),m+=Math.max(h.scrollLeft,i.scrollLeft));return{top:l,left:m}},f.offset={bodyOffset:function(a){var b=a.offsetTop,c=a.offsetLeft;f.support.doesNotIncludeMarginInBodyOffset&&(b+=parseFloat(f.css(a,"marginTop"))||0,c+=parseFloat(f.css(a,"marginLeft"))||0);return{top:b,left:c}},setOffset:function(a,b,c){var d=f.css(a,"position");d==="static"&&(a.style.position="relative");var e=f(a),g=e.offset(),h=f.css(a,"top"),i=f.css(a,"left"),j=(d==="absolute"||d==="fixed")&&f.inArray("auto",[h,i])>-1,k={},l={},m,n;j?(l=e.position(),m=l.top,n=l.left):(m=parseFloat(h)||0,n=parseFloat(i)||0),f.isFunction(b)&&(b=b.call(a,c,g)),b.top!=null&&(k.top=b.top-g.top+m),b.left!=null&&(k.left=b.left-g.left+n),"using"in b?b.using.call(a,k):e.css(k)}},f.fn.extend({position:function(){if(!this[0])return null;var a=this[0],b=this.offsetParent(),c=this.offset(),d=cx.test(b[0].nodeName)?{top:0,left:0}:b.offset();c.top-=parseFloat(f.css(a,"marginTop"))||0,c.left-=parseFloat(f.css(a,"marginLeft"))||0,d.top+=parseFloat(f.css(b[0],"borderTopWidth"))||0,d.left+=parseFloat(f.css(b[0],"borderLeftWidth"))||0;return{top:c.top-d.top,left:c.left-d.left}},offsetParent:function(){return this.map(function(){var a=this.offsetParent||c.body;while(a&&!cx.test(a.nodeName)&&f.css(a,"position")==="static")a=a.offsetParent;return a})}}),f.each(["Left","Top"],function(a,c){var d="scroll"+c;f.fn[d]=function(c){var e,g;if(c===b){e=this[0];if(!e)return null;g=cy(e);return g?"pageXOffset"in g?g[a?"pageYOffset":"pageXOffset"]:f.support.boxModel&&g.document.documentElement[d]||g.document.body[d]:e[d]}return this.each(function(){g=cy(this),g?g.scrollTo(a?f(g).scrollLeft():c,a?c:f(g).scrollTop()):this[d]=c})}}),f.each(["Height","Width"],function(a,c){var d=c.toLowerCase();f.fn["inner"+c]=function(){var a=this[0];return a?a.style?parseFloat(f.css(a,d,"padding")):this[d]():null},f.fn["outer"+c]=function(a){var b=this[0];return b?b.style?parseFloat(f.css(b,d,a?"margin":"border")):this[d]():null},f.fn[d]=function(a){var e=this[0];if(!e)return a==null?null:this;if(f.isFunction(a))return this.each(function(b){var c=f(this);c[d](a.call(this,b,c[d]()))});if(f.isWindow(e)){var g=e.document.documentElement["client"+c],h=e.document.body;return e.document.compatMode==="CSS1Compat"&&g||h&&h["client"+c]||g}if(e.nodeType===9)return Math.max(e.documentElement["client"+c],e.body["scroll"+c],e.documentElement["scroll"+c],e.body["offset"+c],e.documentElement["offset"+c]);if(a===b){var i=f.css(e,d),j=parseFloat(i);return f.isNumeric(j)?j:i}return this.css(d,typeof a=="string"?a:a+"px")}}),a.jQuery=a.$=f,typeof define=="function"&&define.amd&&define.amd.jQuery&&define("jquery",[],function(){return f})})(window);
\ No newline at end of file
diff --git a/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/manager/style/orange.jpg b/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/manager/style/orange.jpg
new file mode 100755 (executable)
index 0000000..ac4c749
Binary files /dev/null and b/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/manager/style/orange.jpg differ
diff --git a/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/manager/style/popup.js b/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/manager/style/popup.js
new file mode 100755 (executable)
index 0000000..5f994f4
--- /dev/null
@@ -0,0 +1,1215 @@
+/**
+ * Copyright (c)2005-2009 Matt Kruse (javascripttoolbox.com)
+ * 
+ * Dual licensed under the MIT and GPL licenses. 
+ * This basically means you can use this code however you want for
+ * free, but don't claim to have written it yourself!
+ * Donations always accepted: http://www.JavascriptToolbox.com/donate/
+ * 
+ * Please do not link to the .js files on javascripttoolbox.com from
+ * your site. Copy the files locally to your server instead.
+ * 
+ */
+/* ******************************************************************* */
+/*   UTIL FUNCTIONS                                                    */
+/* ******************************************************************* */
+var Util = {'$VERSION':1.06};
+
+// Util functions - these are GLOBAL so they
+// look like built-in functions.
+
+// Determine if an object is an array
+function isArray(o) {
+       return (o!=null && typeof(o)=="object" && typeof(o.length)=="number" && (o.length==0 || defined(o[0])));
+};
+
+// Determine if an object is an Object
+function isObject(o) {
+       return (o!=null && typeof(o)=="object" && defined(o.constructor) && o.constructor==Object && !defined(o.nodeName));
+};
+
+// Determine if a reference is defined
+function defined(o) {
+       return (typeof(o)!="undefined");
+};
+
+// Iterate over an array, object, or list of items and run code against each item
+// Similar functionality to Perl's map() function
+function map(func) {
+       var i,j,o;
+       var results = [];
+       if (typeof(func)=="string") {
+               func = new Function('$_',func);
+       }
+       for (i=1; i<arguments.length; i++) {
+               o = arguments[i];
+               if (isArray(o)) {
+                       for (j=0; j<o.length; j++) {
+                               results[results.length] = func(o[j]);
+                       }
+               }
+               else if (isObject(o)) {
+                       for (j in o) {
+                               results[results.length] = func(o[j]);
+                       }
+               }
+               else {
+                       results[results.length] = func(o);
+               }
+       }
+       return results;
+};
+
+// Set default values in an object if they are undefined
+function setDefaultValues(o,values) {
+       if (!defined(o) || o==null) {
+               o = {};
+       }
+       if (!defined(values) || values==null) {
+               return o;
+       }
+       for (var val in values) {
+               if (!defined(o[val])) {
+                       o[val] = values[val];
+               }
+       }
+       return o;
+};
+
+/* ******************************************************************* */
+/*   DEFAULT OBJECT PROTOTYPE ENHANCEMENTS                             */
+/* ******************************************************************* */
+// These functions add useful functionality to built-in objects
+Array.prototype.contains = function(o) {
+       var i,l;
+       if (!(l = this.length)) { return false; }
+       for (i=0; i<l; i++) {
+               if (o==this[i]) {
+                       return true;
+               }
+       }
+};
+
+/* ******************************************************************* */
+/*   DOM FUNCTIONS                                                     */
+/* ******************************************************************* */
+var DOM = (function() { 
+       var dom = {};
+       
+       // Get a parent tag with a given nodename
+       dom.getParentByTagName = function(o,tagNames) {
+               if(o==null) { return null; }
+               if (isArray(tagNames)) {
+                       tagNames = map("return $_.toUpperCase()",tagNames);
+                       while (o=o.parentNode) {
+                               if (o.nodeName && tagNames.contains(o.nodeName)) {
+                                       return o;
+                               }
+                       }
+               }
+               else {
+                       tagNames = tagNames.toUpperCase();
+                       while (o=o.parentNode) {
+                               if (o.nodeName && tagNames==o.nodeName) {
+                                       return o;
+                               }
+                       }
+               }
+               return null;
+       };
+       
+       // Remove a node from its parent
+       dom.removeNode = function(o) {
+               if (o!=null && o.parentNode && o.parentNode.removeChild) {
+                       // First remove all attributes which are func references, to avoid memory leaks
+                       for (var i in o) {
+                               if (typeof(o[i])=="function") {
+                                       o[i] = null;
+                               }
+                       }
+                       o.parentNode.removeChild(o);
+                       return true;
+               }
+               return false;
+       };
+
+       // Get the outer width in pixels of an object, including borders, padding, and margin
+       dom.getOuterWidth = function(o) {
+               if (defined(o.offsetWidth)) {
+                       return o.offsetWidth;
+               }
+               return null;
+       };
+
+       // Get the outer height in pixels of an object, including borders, padding, and margin
+       dom.getOuterHeight = function(o) {
+               if (defined(o.offsetHeight)) {
+                       return o.offsetHeight;
+               }
+               return null;
+       };
+
+       // Resolve an item, an array of items, or an object of items
+       dom.resolve = function() {
+               var results = new Array();
+               var i,j,o;
+               for (var i=0; i<arguments.length; i++) {
+                       var o = arguments[i];
+                       if (o==null) {
+                               if (arguments.length==1) {
+                                       return null;
+                               }
+                               results[results.length] = null;
+                       }
+                       else if (typeof(o)=='string') {
+                               if (document.getElementById) {
+                                       o = document.getElementById(o);
+                               }
+                               else if (document.all) {
+                                       o = document.all[o];
+                               }
+                               if (arguments.length==1) {
+                                       return o;
+                               }
+                               results[results.length] = o;
+                       }
+                       else if (isArray(o)) {
+                               for (j=0; j<o.length; j++) {
+                                       results[results.length] = o[j];
+                               }
+                       }
+                       else if (isObject(o)) {
+                               for (j in o) {
+                                       results[results.length] = o[j];
+                               }
+                       }
+                       else if (arguments.length==1) {
+                               return o;
+                       }
+                       else {
+                               results[results.length] = o;
+                       }
+         }
+         return results;
+       };
+       dom.$ = dom.resolve;
+       
+       return dom;
+})();
+
+/* ******************************************************************* */
+/*   CSS FUNCTIONS                                                     */
+/* ******************************************************************* */
+var CSS = (function(){
+       var css = {};
+
+       // Convert an RGB string in the form "rgb (255, 255, 255)" to "#ffffff"
+       css.rgb2hex = function(rgbString) {
+               if (typeof(rgbString)!="string" || !defined(rgbString.match)) { return null; }
+               var result = rgbString.match(/^\s*rgb\s*\(\s*(\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*/);
+               if (result==null) { return rgbString; }
+               var rgb = +result[1] << 16 | +result[2] << 8 | +result[3];
+               var hex = "";
+               var digits = "0123456789abcdef";
+               while(rgb!=0) { 
+                       hex = digits.charAt(rgb&0xf)+hex; 
+                       rgb>>>=4; 
+               } 
+               while(hex.length<6) { hex='0'+hex; }
+               return "#" + hex;
+       };
+
+       // Convert hyphen style names like border-width to camel case like borderWidth
+       css.hyphen2camel = function(property) {
+               if (!defined(property) || property==null) { return null; }
+               if (property.indexOf("-")<0) { return property; }
+               var str = "";
+               var c = null;
+               var l = property.length;
+               for (var i=0; i<l; i++) {
+                       c = property.charAt(i);
+                       str += (c!="-")?c:property.charAt(++i).toUpperCase();
+               }
+               return str;
+       };
+       
+       // Determine if an object or class string contains a given class.
+       css.hasClass = function(obj,className) {
+               if (!defined(obj) || obj==null || !RegExp) { return false; }
+               var re = new RegExp("(^|\\s)" + className + "(\\s|$)");
+               if (typeof(obj)=="string") {
+                       return re.test(obj);
+               }
+               else if (typeof(obj)=="object" && obj.className) {
+                       return re.test(obj.className);
+               }
+               return false;
+       };
+       
+       // Add a class to an object
+       css.addClass = function(obj,className) {
+               if (typeof(obj)!="object" || obj==null || !defined(obj.className)) { return false; }
+               if (obj.className==null || obj.className=='') { 
+                       obj.className = className; 
+                       return true; 
+               }
+               if (css.hasClass(obj,className)) { return true; }
+               obj.className = obj.className + " " + className;
+               return true;
+       };
+       
+       // Remove a class from an object
+       css.removeClass = function(obj,className) {
+               if (typeof(obj)!="object" || obj==null || !defined(obj.className) || obj.className==null) { return false; }
+               if (!css.hasClass(obj,className)) { return false; }
+               var re = new RegExp("(^|\\s+)" + className + "(\\s+|$)");
+               obj.className = obj.className.replace(re,' ');
+               return true;
+       };
+       
+       // Fully replace a class with a new one
+       css.replaceClass = function(obj,className,newClassName) {
+               if (typeof(obj)!="object" || obj==null || !defined(obj.className) || obj.className==null) { return false; }
+               css.removeClass(obj,className);
+               css.addClass(obj,newClassName);
+               return true;
+       };
+       
+       // Get the currently-applied style of an object
+       css.getStyle = function(o, property) {
+               if (o==null) { return null; }
+               var val = null;
+               var camelProperty = css.hyphen2camel(property);
+               // Handle "float" property as a special case
+               if (property=="float") {
+                       val = css.getStyle(o,"cssFloat");
+                       if (val==null) { 
+                               val = css.getStyle(o,"styleFloat"); 
+                       }
+               }
+               else if (o.currentStyle && defined(o.currentStyle[camelProperty])) {
+                       val = o.currentStyle[camelProperty];
+               }
+               else if (window.getComputedStyle) {
+                       val = window.getComputedStyle(o,null).getPropertyValue(property);
+               }
+               else if (o.style && defined(o.style[camelProperty])) {
+                       val = o.style[camelProperty];
+               }
+               // For color values, make the value consistent across browsers
+               // Convert rgb() colors back to hex for consistency
+               if (/^\s*rgb\s*\(/.test(val)) {
+                       val = css.rgb2hex(val);
+               }
+               // Lowercase all #hex values
+               if (/^#/.test(val)) {
+                       val = val.toLowerCase();
+               }
+               return val;
+       };
+       css.get = css.getStyle;
+
+       // Set a style on an object
+       css.setStyle = function(o, property, value) {
+               if (o==null || !defined(o.style) || !defined(property) || property==null || !defined(value)) { return false; }
+               if (property=="float") {
+                       o.style["cssFloat"] = value;
+                       o.style["styleFloat"] = value;
+               }
+               else if (property=="opacity") {
+                       o.style['-moz-opacity'] = value;
+                       o.style['-khtml-opacity'] = value;
+                       o.style.opacity = value;
+                       if (defined(o.style.filter)) {
+                               o.style.filter = "alpha(opacity=" + value*100 + ")";
+                       }
+               }
+               else {
+                       o.style[css.hyphen2camel(property)] = value;
+               }
+               return true;
+       };
+       css.set = css.setStyle;
+       
+       // Get a unique ID which doesn't already exist on the page
+       css.uniqueIdNumber=1000;
+       css.createId = function(o) {
+               if (defined(o) && o!=null && defined(o.id) && o.id!=null && o.id!="") { 
+                       return o.id;
+               }
+               var id = null;
+               while (id==null || document.getElementById(id)!=null) {
+                       id = "ID_"+(css.uniqueIdNumber++);
+               }
+               if (defined(o) && o!=null && (!defined(o.id)||o.id=="")) {
+                       o.id = id;
+               }
+               return id;
+       };
+       
+       return css;
+})();
+
+/* ******************************************************************* */
+/*   EVENT FUNCTIONS                                                   */
+/* ******************************************************************* */
+
+var Event = (function(){
+       var ev = {};
+       
+       // Resolve an event using IE's window.event if necessary
+       // --------------------------------------------------------------------
+       ev.resolve = function(e) {
+               if (!defined(e) && defined(window.event)) {
+                       e = window.event;
+               }
+               return e;
+       };
+       
+       // Add an event handler to a function
+       // Note: Don't use 'this' within functions added using this method, since
+       // the attachEvent and addEventListener models differ.
+       // --------------------------------------------------------------------
+       ev.add = function( obj, type, fn, capture ) {
+               if (obj.addEventListener) {
+                       obj.addEventListener( type, fn, capture );
+                       return true;
+               }
+               else if (obj.attachEvent) {
+                       obj.attachEvent( "on"+type, fn );
+                       return true;
+               }
+               return false;
+       };
+
+       // Get the mouse position of an event
+       // --------------------------------------------------------------------
+       // PageX/Y, where they exist, are more reliable than ClientX/Y because 
+       // of some browser bugs in Opera/Safari
+       ev.getMouseX = function(e) {
+               e = ev.resolve(e);
+               if (defined(e.pageX)) {
+                       return e.pageX;
+               }
+               if (defined(e.clientX)) {
+                       return e.clientX+Screen.getScrollLeft();
+               }
+               return null;
+       };
+       ev.getMouseY = function(e) {
+               e = ev.resolve(e);
+               if (defined(e.pageY)) {
+                       return e.pageY;
+               }
+               if (defined(e.clientY)) {
+                       return e.clientY+Screen.getScrollTop();
+               }
+               return null;
+       };
+
+       // Stop the event from bubbling up to parent elements.
+       // Two method names map to the same function
+       // --------------------------------------------------------------------
+       ev.cancelBubble = function(e) {
+               e = ev.resolve(e);
+               if (typeof(e.stopPropagation)=="function") { e.stopPropagation(); } 
+               if (defined(e.cancelBubble)) { e.cancelBubble = true; }
+       };
+       ev.stopPropagation = ev.cancelBubble;
+
+       // Prevent the default handling of the event to occur
+       // --------------------------------------------------------------------
+       ev.preventDefault = function(e) {
+               e = ev.resolve(e);
+               if (typeof(e.preventDefault)=="function") { e.preventDefault(); } 
+               if (defined(e.returnValue)) { e.returnValue = false; }
+       };
+       
+       return ev;
+})();
+
+/* ******************************************************************* */
+/*   SCREEN FUNCTIONS                                                  */
+/* ******************************************************************* */
+var Screen = (function() {
+       var screen = {};
+
+       // Get a reference to the body
+       // --------------------------------------------------------------------
+       screen.getBody = function() {
+               if (document.body) {
+                       return document.body;
+               }
+               if (document.getElementsByTagName) {
+                       var bodies = document.getElementsByTagName("BODY");
+                       if (bodies!=null && bodies.length>0) {
+                               return bodies[0];
+                       }
+               }
+               return null;
+       };
+
+       // Get the amount that the main document has scrolled from top
+       // --------------------------------------------------------------------
+       screen.getScrollTop = function() {
+               if (document.documentElement && defined(document.documentElement.scrollTop) && document.documentElement.scrollTop>0) {
+                       return document.documentElement.scrollTop;
+               }
+               if (document.body && defined(document.body.scrollTop)) {
+                       return document.body.scrollTop;
+               }
+               return null;
+       };
+       
+       // Get the amount that the main document has scrolled from left
+       // --------------------------------------------------------------------
+       screen.getScrollLeft = function() {
+               if (document.documentElement && defined(document.documentElement.scrollLeft) && document.documentElement.scrollLeft>0) {
+                       return document.documentElement.scrollLeft;
+               }
+               if (document.body && defined(document.body.scrollLeft)) {
+                       return document.body.scrollLeft;
+               }
+               return null;
+       };
+       
+       // Util function to default a bad number to 0
+       // --------------------------------------------------------------------
+       screen.zero = function(n) {
+               return (!defined(n) || isNaN(n))?0:n;
+       };
+
+       // Get the width of the entire document
+       // --------------------------------------------------------------------
+       screen.getDocumentWidth = function() {
+               var width = 0;
+               var body = screen.getBody();
+               if (document.documentElement && (!document.compatMode || document.compatMode=="CSS1Compat")) {
+                   var rightMargin = parseInt(CSS.get(body,'marginRight'),10) || 0;
+                   var leftMargin = parseInt(CSS.get(body,'marginLeft'), 10) || 0;
+                       width = Math.max(body.offsetWidth + leftMargin + rightMargin, document.documentElement.clientWidth);
+               }
+               else {
+                       width =  Math.max(body.clientWidth, body.scrollWidth);
+               }
+               if (isNaN(width) || width==0) {
+                       width = screen.zero(self.innerWidth);
+               }
+               return width;
+       };
+       
+       // Get the height of the entire document
+       // --------------------------------------------------------------------
+       screen.getDocumentHeight = function() {
+               var body = screen.getBody();
+               var innerHeight = (defined(self.innerHeight)&&!isNaN(self.innerHeight))?self.innerHeight:0;
+               if (document.documentElement && (!document.compatMode || document.compatMode=="CSS1Compat")) {
+                   var topMargin = parseInt(CSS.get(body,'marginTop'),10) || 0;
+                   var bottomMargin = parseInt(CSS.get(body,'marginBottom'), 10) || 0;
+                       return Math.max(body.offsetHeight + topMargin + bottomMargin, document.documentElement.clientHeight, document.documentElement.scrollHeight, screen.zero(self.innerHeight));
+               }
+               return Math.max(body.scrollHeight, body.clientHeight, screen.zero(self.innerHeight));
+       };
+       
+       // Get the width of the viewport (viewable area) in the browser window
+       // --------------------------------------------------------------------
+       screen.getViewportWidth = function() {
+               if (document.documentElement && (!document.compatMode || document.compatMode=="CSS1Compat")) {
+                       return document.documentElement.clientWidth;
+               }
+               else if (document.compatMode && document.body) {
+                       return document.body.clientWidth;
+               }
+               return screen.zero(self.innerWidth);
+       };
+       
+       // Get the height of the viewport (viewable area) in the browser window
+       // --------------------------------------------------------------------
+       screen.getViewportHeight = function() {
+               if (!window.opera && document.documentElement && (!document.compatMode || document.compatMode=="CSS1Compat")) {
+                       return document.documentElement.clientHeight;
+               }
+               else if (document.compatMode && !window.opera && document.body) {
+                       return document.body.clientHeight;
+               }
+               return screen.zero(self.innerHeight);
+       };
+
+       return screen;
+})();var Sort = (function(){
+       var sort = {};
+       sort.AlphaNumeric = function(a,b) {
+               if (a==b) { return 0; }
+               if (a<b) { return -1; }
+               return 1;
+       };
+
+       sort.Default = sort.AlphaNumeric;
+       
+       sort.NumericConversion = function(val) {
+               if (typeof(val)!="number") {
+                       if (typeof(val)=="string") {
+                               val = parseFloat(val.replace(/,/g,''));
+                               if (isNaN(val) || val==null) { val=0; }
+                       }
+                       else {
+                               val = 0;
+                       }
+               }
+               return val;
+       };
+       
+       sort.Numeric = function(a,b) {
+               return sort.NumericConversion(a)-sort.NumericConversion(b);
+       };
+
+       sort.IgnoreCaseConversion = function(val) {
+               if (val==null) { val=""; }
+               return (""+val).toLowerCase();
+       };
+
+       sort.IgnoreCase = function(a,b) {
+               return sort.AlphaNumeric(sort.IgnoreCaseConversion(a),sort.IgnoreCaseConversion(b));
+       };
+
+       sort.CurrencyConversion = function(val) {
+               if (typeof(val)=="string") {
+                       val = val.replace(/^[^\d\.]/,'');
+               }
+               return sort.NumericConversion(val);
+       };
+       
+       sort.Currency = function(a,b) {
+               return sort.Numeric(sort.CurrencyConversion(a),sort.CurrencyConversion(b));
+       };
+       
+       sort.DateConversion = function(val) {
+               // inner util function to parse date formats
+               function getdate(str) {
+                       // inner util function to convert 2-digit years to 4
+                       function fixYear(yr) {
+                               yr = +yr;
+                               if (yr<50) { yr += 2000; }
+                               else if (yr<100) { yr += 1900; }
+                               return yr;
+                       };
+                       var ret;
+                       // YYYY-MM-DD
+                       if (ret=str.match(/(\d{2,4})-(\d{1,2})-(\d{1,2})/)) {
+                               return (fixYear(ret[1])*10000) + (ret[2]*100) + (+ret[3]);
+                       }
+                       // MM/DD/YY[YY] or MM-DD-YY[YY]
+                       if (ret=str.match(/(\d{1,2})[\/-](\d{1,2})[\/-](\d{2,4})/)) {
+                               return (fixYear(ret[3])*10000) + (ret[1]*100) + (+ret[2]);
+                       }
+                       return 99999999; // So non-parsed dates will be last, not first
+               };
+               return getdate(val);
+       };
+
+       sort.Date = function(a,b) {
+               return sort.Numeric(sort.DateConversion(a),sort.DateConversion(b));
+       };
+
+       return sort;
+})();
+
+var Position = (function() {
+       // Resolve a string identifier to an object
+       // ========================================
+       function resolveObject(s) {
+               if (document.getElementById && document.getElementById(s)!=null) {
+                       return document.getElementById(s);
+               }
+               else if (document.all && document.all[s]!=null) {
+                       return document.all[s];
+               }
+               else if (document.anchors && document.anchors.length && document.anchors.length>0 && document.anchors[0].x) {
+                       for (var i=0; i<document.anchors.length; i++) {
+                               if (document.anchors[i].name==s) { 
+                                       return document.anchors[i]
+                               }
+                       }
+               }
+       }
+       
+       var pos = {};
+       pos.$VERSION = 1.0;
+       
+       // Set the position of an object
+       // =============================
+       pos.set = function(o,left,top) {
+               if (typeof(o)=="string") {
+                       o = resolveObject(o);
+               }
+               if (o==null || !o.style) {
+                       return false;
+               }
+               
+               // If the second parameter is an object, it is assumed to be the result of getPosition()
+               if (typeof(left)=="object") {
+                       var pos = left;
+                       left = pos.left;
+                       top = pos.top;
+               }
+               
+               o.style.left = left + "px";
+               o.style.top = top + "px";
+               return true;
+       };
+       
+       // Retrieve the position and size of an object
+       // ===========================================
+       pos.get = function(o) {
+               var fixBrowserQuirks = true;
+                       // If a string is passed in instead of an object ref, resolve it
+               if (typeof(o)=="string") {
+                       o = resolveObject(o);
+               }
+               
+               if (o==null) {
+                       return null;
+               }
+               
+               var left = 0;
+               var top = 0;
+               var width = 0;
+               var height = 0;
+               var parentNode = null;
+               var offsetParent = null;
+       
+               
+               offsetParent = o.offsetParent;
+               var originalObject = o;
+               var el = o; // "el" will be nodes as we walk up, "o" will be saved for offsetParent references
+               while (el.parentNode!=null) {
+                       el = el.parentNode;
+                       if (el.offsetParent==null) {
+                       }
+                       else {
+                               var considerScroll = true;
+                               /*
+                               In Opera, if parentNode of the first object is scrollable, then offsetLeft/offsetTop already 
+                               take its scroll position into account. If elements further up the chain are scrollable, their 
+                               scroll offsets still need to be added in. And for some reason, TR nodes have a scrolltop value
+                               which must be ignored.
+                               */
+                               if (fixBrowserQuirks && window.opera) {
+                                       if (el==originalObject.parentNode || el.nodeName=="TR") {
+                                               considerScroll = false;
+                                       }
+                               }
+                               if (considerScroll) {
+                                       if (el.scrollTop && el.scrollTop>0) {
+                                               top -= el.scrollTop;
+                                       }
+                                       if (el.scrollLeft && el.scrollLeft>0) {
+                                               left -= el.scrollLeft;
+                                       }
+                               }
+                       }
+                       // If this node is also the offsetParent, add on the offsets and reset to the new offsetParent
+                       if (el == offsetParent) {
+                               left += o.offsetLeft;
+                               if (el.clientLeft && el.nodeName!="TABLE") { 
+                                       left += el.clientLeft;
+                               }
+                               top += o.offsetTop;
+                               if (el.clientTop && el.nodeName!="TABLE") {
+                                       top += el.clientTop;
+                               }
+                               o = el;
+                               if (o.offsetParent==null) {
+                                       if (o.offsetLeft) {
+                                               left += o.offsetLeft;
+                                       }
+                                       if (o.offsetTop) {
+                                               top += o.offsetTop;
+                                       }
+                               }
+                               offsetParent = o.offsetParent;
+                       }
+               }
+               
+       
+               if (originalObject.offsetWidth) {
+                       width = originalObject.offsetWidth;
+               }
+               if (originalObject.offsetHeight) {
+                       height = originalObject.offsetHeight;
+               }
+               
+               return {'left':left, 'top':top, 'width':width, 'height':height
+                               };
+       };
+       
+       // Retrieve the position of an object's center point
+       // =================================================
+       pos.getCenter = function(o) {
+               var c = this.get(o);
+               if (c==null) { return null; }
+               c.left = c.left + (c.width/2);
+               c.top = c.top + (c.height/2);
+               return c;
+       };
+       
+       return pos;
+})();// CLASS CONSTRUCTOR
+// --------------------------------------------------------------------
+var Popup = function(div, options) {
+       this.div = defined(div)?div:null;
+       this.index = Popup.maxIndex++;
+       this.ref = "Popup.objects["+this.index+"]";
+       Popup.objects[this.index] = this;
+       // Store a reference to the DIV by id, also
+       if (typeof(this.div)=="string") {
+               Popup.objectsById[this.div] = this;
+       }
+       if (defined(this.div) && this.div!=null && defined(this.div.id)) {
+               Popup.objectsById[this.div.id] = this.div.id;
+       }
+       // Apply passed-in options
+       if (defined(options) && options!=null && typeof(options)=="object") {
+               for (var i in options) {
+                       this[i] = options[i];
+               }
+       }
+       return this;
+};
+
+// CLASS PROPERTIES
+// --------------------------------------------------------------------
+// Index of popup objects, to maintain a global reference if necessary
+Popup.maxIndex = 0;
+Popup.objects = {};
+Popup.objectsById = {};
+
+// The z-index value that popups will start at
+Popup.minZIndex = 101;
+
+// Class names to assign to other objects
+Popup.screenClass = "PopupScreen";
+Popup.iframeClass = "PopupIframe";
+Popup.screenIframeClass = "PopupScreenIframe";
+
+// CLASS METHODS
+// --------------------------------------------------------------------
+
+// Hide all currently-visible non-modal dialogs
+Popup.hideAll = function() {
+       for (var i in Popup.objects) {
+               var p = Popup.objects[i];
+               if (!p.modal && p.autoHide) {
+                       p.hide();
+               }
+       }
+};
+// Catch global events as a trigger to hide auto-hide popups
+Event.add(document, "mouseup", Popup.hideAll, false);
+
+// A simple class method to show a popup without creating an instance
+Popup.show = function(divObject, referenceObject, position, options, modal) {
+       var popup;
+       if (defined(divObject)) { 
+               popup = new Popup(divObject);
+       }
+       else {
+               popup = new Popup();
+               popup.destroyDivOnHide = true;
+       }
+       if (defined(referenceObject)) { popup.reference = DOM.resolve(referenceObject); }
+       if (defined(position)) { popup.position = position; }
+       if (defined(options) && options!=null && typeof(options)=="object") {
+               for (var i in options) {
+                       popup[i] = options[i];
+               }
+       }
+       if (typeof(modal)=="boolean") {
+               popup.modal = modal;
+       }
+       popup.destroyObjectsOnHide = true;
+       popup.show();
+       return popup;
+};
+
+// A simple class method to show a modal popup
+Popup.showModal = function(divObject, referenceObject, position, options) {
+       Popup.show(divObject, referenceObject, position, options, true);
+};
+
+// A method to retrieve a popup object based on a div ID
+Popup.get = function(divId) {
+       if (defined(Popup.objectsById[divId])) {
+               return Popup.objectsById[divId];
+       }
+       return null;
+};
+
+// A method to hide a popup based on a div id
+Popup.hide = function(divId) {
+       var popup = Popup.get(divId);
+       if (popup!=null) {
+               popup.hide();
+       }
+};
+
+// PROTOTYPE PROPERTIES
+// --------------------------------------------------------------------
+Popup.prototype.content = null;
+Popup.prototype.className = "PopupDiv";
+Popup.prototype.style = null; // Styles to be applied to the DIV
+Popup.prototype.width = null;
+Popup.prototype.height = null;
+Popup.prototype.top = null;
+Popup.prototype.left = null;
+Popup.prototype.offsetLeft = 0;
+Popup.prototype.offsetTop = 0;
+Popup.prototype.constrainToScreen = true;
+Popup.prototype.autoHide = true;
+Popup.prototype.useIframeShim = false; /*@cc_on @*/ /*@if (@_win32) {Popup.prototype.useIframeShim = true;} @end @*/ 
+Popup.prototype.iframe = null;
+Popup.prototype.position = null; // vertical: "above top center bottom below", horizontal: "adjacent-left,left,center,right,adjacent-right"
+Popup.prototype.reference = null;
+Popup.prototype.modal = false;
+Popup.prototype.destroyDivOnHide = false;
+Popup.prototype.destroyObjectsOnHide = false;
+Popup.prototype.screen = null;
+Popup.prototype.screenIframeShim = null;
+Popup.prototype.screenOpacity=.4;
+Popup.prototype.screenColor="#cccccc";
+
+// INSTANCE METHODS
+// --------------------------------------------------------------------
+
+// Show the popup
+// --------------------------------------------------------------------
+Popup.prototype.show = function(options, modal) {
+       this.modal = this.modal || (typeof(modal)=="boolean" && modal);
+       if (defined(options) && options!=null && typeof(options)=="object") {
+               for (var i in options) {
+                       this[i] = options[i];
+               }
+       }
+       this.div = DOM.resolve(this.div);
+       CSS.setStyle(this.div,'position','absolute');
+       
+       // If there is no div pre-defined to use, create one
+       if (this.div==null) {
+               this.div = this.createDiv();
+       }
+       if (this.content!=null) {
+               this.div.innerHTML = this.content;
+               this.content = null;
+       }
+       if (this.className!=null) {
+               this.div.className = this.className;
+       }
+       if (this.style!=null) {
+               this.applyStyle();
+       }
+       if (this.width!=null) {
+               this.div.style.width = this.width+"px";
+               this.div.style.overflowX="auto";
+       }
+       if (this.height!=null) {
+               this.div.style.height = this.height+"px";
+               this.div.style.overflowY="auto";
+       }
+
+       // Do the actual display - this is a separate method so display transitions can be implemented
+       this.transition();
+       
+       // Make sure clicks on the DIV don't bubble up to the document
+       this.div.onclick = function(e) { 
+               Event.cancelBubble(Event.resolve(e));
+       };
+       this.div.onmouseup = this.div.onclick;
+       
+       // Focus to the DIV if possible 
+       if (this.modal && this.div.focus) {
+               this.div.focus();
+       }
+};
+
+// Show the popup but make it modal
+// --------------------------------------------------------------------
+Popup.prototype.transition = function() {
+       if (this.modal) {
+               this.addScreen();
+       }
+       
+       // Make the DIV displayed but hidden so its size can be measured
+       CSS.setStyle(this.div,'visibility','hidden');
+       CSS.setStyle(this.div,'display','block');
+
+       // Position the popup
+       this.setPosition();
+
+       // Add the shim if necessary    
+       if (this.useIframeShim) {
+               this.addIframeShim();
+       }
+
+       // Make sure the DIV is higher than the shim
+       this.div.style.zIndex = Popup.minZIndex++;
+
+       CSS.setStyle(this.div,'display','block');
+       CSS.setStyle(this.div,'visibility','visible');
+};
+
+// Show the popup but make it modal
+// --------------------------------------------------------------------
+Popup.prototype.showModal = function(options) {
+       this.show(options,true);
+};
+
+// Apply user styles to the DIV
+// --------------------------------------------------------------------
+Popup.prototype.applyStyle = function() {
+       if (this.div!=null && this.style!=null && typeof(this.style)=="object") {
+               for (var i in this.style) {
+                       this.div.style[i] = this.style[i];
+               }
+       }
+};
+
+// Hide the popup
+// --------------------------------------------------------------------
+Popup.prototype.hide = function() {
+       // If this was a temp object creating on-the-fly, then remove objects from the DOM so
+       // The document doesn't get littered with extra objects
+       if (this.destroyDivOnHide) {
+               DOM.removeNode(this.div);
+               this.div = null;
+               delete Popup.objects[this.id];
+       }
+       else if (this.div!=null) {
+               CSS.setStyle(this.div,'display','none');
+       }
+
+       if (this.destroyObjectsOnHide) {
+               DOM.removeNode(this.iframe);
+               DOM.removeNode(this.screen);
+               DOM.removeNode(this.screenIframeShim);
+       }
+       else {
+               if (this.iframe!=null) {
+                       this.iframe.style.display = "none";
+               }
+               if (this.screen!=null) {
+                       this.screen.style.display = "none";
+               }
+               if (this.screenIframeShim!=null) {
+                       this.screenIframeShim.style.display = "none";
+               }
+       }
+};
+
+// Util funcs for position
+// --------------------------------------------------------------------
+Popup.prototype.setTop = function(top) {
+       this.div.style.top = top+"px";
+};
+Popup.prototype.setLeft = function(left) {
+       this.div.style.left = left+"px";
+};
+Popup.prototype.getTop = function() {
+       return parseInt(CSS.getStyle(this.div,"top"),10);
+};
+Popup.prototype.getLeft = function() {
+       return parseInt(CSS.getStyle(this.div,"left"),10);
+};
+
+// All the logic to position the popup based on various criteria
+// --------------------------------------------------------------------
+Popup.prototype.setPosition = function() {
+       if (this.position!=null) {
+               var m = this.position.match(/^(\S+)\s+(\S+)/); 
+               if (m!=null && m.length==3) {
+                       var v = m[1];
+                       var h = m[2];
+
+                       var ref = this.reference;
+                       if (ref==null) { ref = Screen.getBody(); }
+                       var p = Position.get(ref);
+                       var refTop = p.top;
+                       var refLeft = p.left;
+                       var refWidth = DOM.getOuterWidth(ref);
+                       var refHeight = DOM.getOuterHeight(ref);
+                       
+                       var width = DOM.getOuterWidth(this.div);
+                       var height = DOM.getOuterHeight(this.div);
+                       
+                       var scrollLeft = Screen.getScrollLeft();
+                       var scrollTop = Screen.getScrollTop();
+
+                       // Set vertical position relative to reference object
+                       if (v=="above") { this.setTop(refTop-height+this.offsetTop); }
+                       else if (v=="top") { this.setTop(refTop+this.offsetTop); }
+                       else if (v=="center") { this.setTop(refTop+(refHeight/2)-(height/2)+this.offsetTop); }
+                       else if (v=="bottom") { this.setTop(refTop+refHeight-height+this.offsetTop); }
+                       else if (v=="below") { this.setTop(refTop+refHeight+this.offsetTop); }
+
+                       // Set horizontal position relative to reference object
+                       if (h=="adjacent-left") { this.setLeft(refLeft-width+this.offsetLeft); }
+                       else if (h=="left") { this.setLeft(refLeft+this.offsetLeft); }
+                       else if (h=="center") { this.setLeft(refLeft+(refWidth/2)-(width/2)+this.offsetLeft); }
+                       else if (h=="right") { this.setLeft(refLeft+refWidth-width+this.offsetLeft); }
+                       else if (h=="adjacent-right") { this.setLeft(refLeft+refWidth+this.offsetLeft); }
+               }
+       }
+       else if (this.top==null && this.left==null) {
+               this.center();
+       }
+       else {
+               if (this.top==null) { this.top=0; }
+               if (this.left==null) { this.left=0; }
+               this.div.style.top = this.top+this.offsetTop+"px";
+               this.div.style.left = this.left+this.offsetLeft+"px";
+       }
+
+       // Re-position to make sure it stays on the screen
+       if (this.constrainToScreen) {
+               this.fitToScreen();
+       }
+};
+
+// Append an object to the body
+// --------------------------------------------------------------------
+Popup.prototype.appendToBody = function(o) {
+       var body = Screen.getBody();
+       if (body && body.appendChild) {
+               body.appendChild(o);
+       }
+};
+
+// Create a new DIV object to be used for a popup
+// --------------------------------------------------------------------
+Popup.prototype.createDiv = function() {
+       if (document.createElement) {
+               var d = document.createElement("DIV");
+               d.style.position="absolute";
+               d.style.display="block";
+               d.style.visibility="hidden";
+               this.appendToBody(d);
+               return d;
+       }
+       alert("ERROR: Couldn't create DIV element in Popup.prototype.createDiv()");
+       return null;
+};
+
+// Create a new IFRAME object to be used behind the popup
+// --------------------------------------------------------------------
+Popup.prototype.createIframe = function() {
+       if (document.createElement) {
+               var i= document.createElement("IFRAME");
+               i.style.position="absolute";
+               i.style.display="block";
+               i.style.visibility="hidden";
+               i.style.background="none";
+               this.appendToBody(i);
+               return i;
+       }
+       else {
+               alert("ERROR: Couldn't create IFRAME object in Popup.prototype.createIframe()");
+       }
+};
+
+// Add an IFRAME shim for the DIV
+// --------------------------------------------------------------------
+Popup.prototype.addIframeShim = function() {
+       if (this.iframe==null) {
+               this.iframe = this.createIframe();
+       }
+       this.iframe.className = Popup.iframeClass;
+       CSS.setStyle(this.iframe,'top',this.getTop()+"px");
+       CSS.setStyle(this.iframe,'left',this.getLeft()+"px");
+       CSS.setStyle(this.iframe,'width',DOM.getOuterWidth(this.div) + "px");
+       CSS.setStyle(this.iframe,'height',DOM.getOuterHeight(this.div) + "px");
+       CSS.setStyle(this.iframe,'zIndex',Popup.minZIndex++);
+       CSS.setStyle(this.iframe,'opacity',0);
+       CSS.setStyle(this.iframe,'visibility','visible');
+       CSS.setStyle(this.iframe,'display','block');
+};
+
+// Create a "screen" to make a popup modal
+// --------------------------------------------------------------------
+Popup.prototype.addScreen = function() {
+       if (this.screen==null) {
+               this.screen = this.createDiv();
+               this.screen.style.top="0px";
+               this.screen.style.left="0px";
+               this.screen.style.backgroundColor = this.screenColor;
+               this.screen.className=Popup.screenClass;;
+               CSS.setStyle(this.screen,"opacity",this.screenOpacity);
+               this.screen.onclick = function(e) { Event.cancelBubble(Event.resolve(e)); }
+       }
+       if (this.screenIframeShim==null) {
+               this.screenIframeShim = this.createIframe();
+               this.screenIframeShim.style.top="0px";
+               this.screenIframeShim.style.left="0px";
+               this.screenIframeShim.className=Popup.screenIframeClass;
+               CSS.setStyle(this.screenIframeShim,"opacity",0);
+       }
+       this.screen.style.width = Screen.getDocumentWidth()+"px";
+       this.screen.style.height = Screen.getDocumentHeight()+"px";
+       this.screenIframeShim.style.width = Screen.getDocumentWidth()+"px";
+       this.screenIframeShim.style.height = Screen.getDocumentHeight()+"px";
+       this.screenIframeShim.style.zIndex = Popup.minZIndex++;
+       this.screenIframeShim.style.visibility="visible";
+       this.screenIframeShim.style.display="block";
+       this.screen.style.zIndex = Popup.minZIndex++;
+       this.screen.style.visibility="visible";
+       this.screen.style.display="block";
+};
+
+// Re-position the DIV so it stays on the screen
+// --------------------------------------------------------------------
+Popup.prototype.fitToScreen = function() {
+       var width = DOM.getOuterWidth(this.div);
+       var height = DOM.getOuterHeight(this.div);
+       var top = this.getTop();
+       var left = this.getLeft();
+       
+       var clientWidth = Screen.getViewportWidth();
+       var clientHeight = Screen.getViewportHeight();
+       
+       var scrollLeft = Screen.getScrollLeft();
+       var scrollTop = Screen.getScrollTop();
+
+       if (top-scrollTop+height>clientHeight) {
+               top = top - ((top+height) - (scrollTop+clientHeight));
+               this.div.style.top = top + "px";
+       }
+       if (left-scrollLeft+width>clientWidth) {
+               left = left - ((left+width) - (scrollLeft+clientWidth));
+               this.div.style.left = left + "px";
+       }
+       if (top<scrollTop) {
+               this.div.style.top=scrollTop+"px";
+       }
+       if (left<scrollLeft) {
+               this.div.style.left=scrollLeft+"px";
+       }
+};
+
+// Center the DIV object
+// --------------------------------------------------------------------
+Popup.prototype.center = function() {
+       var left = DOM.getOuterWidth(this.div);
+       var top = DOM.getOuterHeight(this.div);
+       if (isNaN(left)) { left=0; }
+       if (isNaN(top)) { top=0; }      
+       var clientW = Screen.getViewportWidth();
+       var clientH = Screen.getViewportHeight();
+       if (clientW!=null && clientH!=null) {
+               top = (clientH-top)/2;
+               left = (clientW-left)/2;
+       }
+       top += Screen.getScrollTop();
+       left += Screen.getScrollLeft();
+       
+       this.div.style.top = top+this.offsetTop+"px";
+       this.div.style.left = left+this.offsetLeft+"px";
+};
+
diff --git a/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/manager/style/red.jpg b/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/manager/style/red.jpg
new file mode 100755 (executable)
index 0000000..ab67c5a
Binary files /dev/null and b/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/manager/style/red.jpg differ
diff --git a/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/manager/style/summary.xsl b/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/manager/style/summary.xsl
new file mode 100755 (executable)
index 0000000..2f7f0df
--- /dev/null
@@ -0,0 +1,523 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<xsl:stylesheet version="1.0"
+       xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
+       <xsl:output method="html" version="1.0" encoding="UTF-8"
+               indent="yes" />
+       <xsl:template match="/">
+               <html>
+                       <STYLE type="text/css">
+                               @import "./style/tests.css";
+                       </STYLE>
+                       <head>
+                               <script type="text/javascript" src="./style/jquery.min.js" />
+                       </head>
+                       <body>
+                               <div id="testcasepage">
+                                       <div id="title">
+                                               <table>
+                                                       <tr>
+                                                               <td>
+                                                                       <h1>TCT Report</h1>
+                                                               </td>
+                                                       </tr>
+                                               </table>
+                                       </div>
+                                       <div id="overview">
+                                       <table>
+                                               <tr>
+                                                       <td>
+                                       <div id="summary">
+                                               <table>
+                                                       <tr>
+                                                               <th colspan="2">Test Summary</th>
+                                                       </tr>
+                                                       <tr>
+                                                               <td>TCT Version</td>
+                                                               <td>
+                                                                       <xsl:value-of select="result_summary/environment/@tct_version" />
+                                                               </td>
+                                                       </tr>
+                                                       <tr>
+                                                               <td>Test Plan Name</td>
+                                                               <td>
+                                                                       <xsl:value-of select="result_summary/@plan_name" />
+                                                               </td>
+                                                       </tr>
+                                                       <tr>
+                                                               <td>Test Profile</td>
+                                                               <td>
+                                                                       <xsl:value-of select="result_summary/environment/@tct_profile" />
+                                                               </td>
+                                                       </tr>
+                                                       <tr>
+                                                               <td>Build ID</td>
+                                                               <td>
+                                                                       <xsl:choose>
+                                                                               <xsl:when test="result_summary/environment/@build_id">
+                                                                                       <xsl:if test="result_summary/environment/@build_id = ''">
+                                                                                               N/A
+                                                                                       </xsl:if>
+                                                                                       <xsl:value-of select="result_summary/environment/@build_id" />
+                                                                               </xsl:when>
+                                                                               <xsl:otherwise>
+                                                                                       N/A
+                                                                               </xsl:otherwise>
+                                                                       </xsl:choose>
+                                                               </td>
+                                                       </tr>
+                                                       <tr>
+                                                               <td>Test Total</td>
+                                                               <td>
+                                                                       <xsl:value-of select="sum(result_summary//suite/total_case)" />
+                                                               </td>
+                                                       </tr>
+                                                       <tr>
+                                                               <td>Test Passed</td>
+                                                               <td>
+                                                                       <xsl:value-of select="sum(result_summary//suite/pass_case)" />
+                                                               </td>
+                                                       </tr>
+                                                       <tr>
+                                                               <td>Test Failed</td>
+                                                               <td>
+                                                                       <xsl:value-of select="sum(result_summary//suite/fail_case)" />
+                                                               </td>
+                                                       </tr>
+                                                       <tr>
+                                                               <td>Test Blocked</td>
+                                                               <td>
+                                                                       <xsl:value-of select="sum(result_summary//suite/block_case)" />
+                                                               </td>
+                                                       </tr>
+                                                       <tr>
+                                                               <td>Test Not Executed</td>
+                                                               <td>
+                                                                       <xsl:value-of select="sum(result_summary//suite/na_case)" />
+                                                               </td>
+                                                       </tr>
+                                                       <tr>
+                                                               <td>Time</td>
+                                                               <td>
+                                                                       <xsl:value-of select="result_summary/summary/start_at" />
+                                                                       ~
+                                                                       <xsl:value-of select="result_summary/summary/end_at" />
+                                                               </td>
+                                                       </tr>
+                                               </table>
+                                       </div>
+                                       </td>
+                                       <td>
+                                       <div id="device">
+                                               <table>
+                                                       <tr>
+                                                               <th colspan="2">Device Information</th>
+                                                       </tr>
+                                                       <tr>
+                                                               <td>Host Device</td>
+                                                               <td>
+                                                                       <xsl:choose>
+                                                                               <xsl:when test="result_summary/environment/@host">
+                                                                                       <xsl:if test="result_summary/environment/@host = ''">
+                                                                                               N/A
+                                                                                       </xsl:if>
+                                                                                       <xsl:value-of select="result_summary/environment/@host" />
+                                                                               </xsl:when>
+                                                                               <xsl:otherwise>
+                                                                                       N/A
+                                                                               </xsl:otherwise>
+                                                                       </xsl:choose>
+                                                               </td>
+                                                       </tr>
+                                                       <tr>
+                                                               <td>Manufacturer</td>
+                                                               <td>
+                                                                       <xsl:choose>
+                                                                               <xsl:when test="result_summary/environment/@manufacturer">
+                                                                                       <xsl:if test="result_summary/environment/@manufacturer = ''">
+                                                                                               N/A
+                                                                                       </xsl:if>
+                                                                                       <xsl:value-of select="result_summary/environment/@manufacturer" />
+                                                                               </xsl:when>
+                                                                               <xsl:otherwise>
+                                                                                       N/A
+                                                                               </xsl:otherwise>
+                                                                       </xsl:choose>
+                                                               </td>
+                                                       </tr>
+                                                       <tr>
+                                                               <td>Device Model</td>
+                                                               <td>
+                                                                       <xsl:choose>
+                                                                               <xsl:when test="result_summary/environment/@device_model">
+                                                                                       <xsl:if test="result_summary/environment/@device_model = ''">
+                                                                                               N/A
+                                                                                       </xsl:if>
+                                                                                       <xsl:value-of select="result_summary/environment/@device_model" />
+                                                                               </xsl:when>
+                                                                               <xsl:otherwise>
+                                                                                       N/A
+                                                                               </xsl:otherwise>
+                                                                       </xsl:choose>
+                                                               </td>
+                                                       </tr>
+                                                       <tr>
+                                                               <td>Device ID</td>
+                                                               <td>
+                                                                       <xsl:choose>
+                                                                               <xsl:when test="result_summary/environment/@device_id">
+                                                                                       <xsl:if test="result_summary/environment/@device_id = ''">
+                                                                                               N/A
+                                                                                       </xsl:if>
+                                                                                       <xsl:value-of select="result_summary/environment/@device_id" />
+                                                                               </xsl:when>
+                                                                               <xsl:otherwise>
+                                                                                       N/A
+                                                                               </xsl:otherwise>
+                                                                       </xsl:choose>
+                                                               </td>
+                                                       </tr>
+                                                       <tr>
+                                                               <td>Screen Size</td>
+                                                               <td>
+                                                                       <xsl:choose>
+                                                                               <xsl:when test="result_summary/environment/@screen_size">
+                                                                                       <xsl:if test="result_summary/environment/@screen_size = ''">
+                                                                                               N/A
+                                                                                       </xsl:if>
+                                                                                       <xsl:value-of select="result_summary/environment/@screen_size" />
+                                                                               </xsl:when>
+                                                                               <xsl:otherwise>
+                                                                                       N/A
+                                                                               </xsl:otherwise>
+                                                                       </xsl:choose>
+                                                               </td>
+                                                       </tr>
+                                                       <tr>
+                                                               <td>Resolution</td>
+                                                               <td>
+                                                                       <xsl:choose>
+                                                                               <xsl:when test="result_summary/environment/@resolution">
+                                                                                       <xsl:if test="result_summary/environment/@resolution = ''">
+                                                                                               N/A
+                                                                                       </xsl:if>
+                                                                                       <xsl:value-of select="result_summary/environment/@resolution" />
+                                                                               </xsl:when>
+                                                                               <xsl:otherwise>
+                                                                                       N/A
+                                                                               </xsl:otherwise>
+                                                                       </xsl:choose>
+                                                               </td>
+                                                       </tr>
+                                               </table>
+                                       </div>
+                                       </td>
+                                       </tr>
+                                       </table>
+                                       </div>
+                                       <div id="capability">
+                                               <div id="title">
+                                                       <a name="contents"></a>
+                                                       <table>
+                                                               <tr>
+                                                                       <td class="title">
+                                                                               <h1><a href="#" class="see_capabilities">Device Capability</a></h1>
+                                                                       </td>
+                                                               </tr>
+                                                       </table>
+                                               </div>
+                                               <xsl:choose>
+                                                       <xsl:when test="result_summary/capabilities">
+                                                               <div id="capability_table" style="display:none;">
+                                                               <table>
+                                                                       <tr>
+                                                                               <th>Capability Name</th>
+                                                                               <th>Type</th>
+                                                                               <th>Value</th>
+                                                                       </tr>
+                                                                       <xsl:for-each select="result_summary/capabilities/capability">
+                                                                               <xsl:sort select="@name" />
+                                                                               <tr>
+                                                                                       <td>
+                                                                                               <xsl:value-of select="@name" />
+                                                                                       </td>
+                                                                                       <td>
+                                                                                               <xsl:value-of select="@type" />
+                                                                                       </td>
+                                                                                       <td>
+                                                                                               <xsl:choose>
+                                                                                                       <xsl:when test="value">
+                                                                                                               <xsl:value-of select="value" />
+                                                                                                       </xsl:when>
+                                                                                                       <xsl:otherwise>
+                                                                                                               <xsl:value-of select="@support" />
+                                                                                                       </xsl:otherwise>
+                                                                                               </xsl:choose>
+                                                                                       </td>
+                                                                               </tr>
+                                                                       </xsl:for-each>
+                                                               </table>
+                                                               </div>
+                                                       </xsl:when>
+                                                       <xsl:otherwise>
+                                                               The information of device capability is not available.
+                                                       </xsl:otherwise>
+                                               </xsl:choose>
+                                       </div>
+                                       <div id="btc">
+                                               <table>
+                                                       <tr>
+                                                               <td>
+                                                                       <a href="#" class="see_all">Show all</a>
+                                                               </td>
+                                                               <td>
+                                                                       <a href="#" class="see_failed">Show only failed</a>
+                                                               </td>
+                                                               <td>
+                                                                       <a href="#" class="see_blocked">Show only blocked</a>
+                                                               </td>
+                                                               <td>
+                                                                       <a href="#" class="see_na">Show only not executed</a>
+                                                               </td>
+                                                       </tr>
+                                               </table>
+                                       </div>
+                                       <div id="title">
+                                               <h1></h1>
+                                       </div>
+                                       <div id="suite_summary">
+                                               <div id="title">
+                                                       <a name="contents"></a>
+                                                       <table>
+                                                               <tr>
+                                                                       <td class="title">
+                                                                               <h1>Test Summary by Suite</h1>
+                                                                       </td>
+                                                               </tr>
+                                                       </table>
+                                               </div>
+                                               <div id="see_all">
+                                                       <table>
+                                                               <tr>
+                                                                       <th>Suite</th>
+                                                                       <th>Total</th>
+                                                                       <th>Passed</th>
+                                                                       <th>Failed</th>
+                                                                       <th>Blocked</th>
+                                                                       <th>Not Executed</th>
+                                                                       <th class="Ratio">Ratio</th>
+                                                               </tr>
+                                                               <xsl:for-each select="result_summary/suite">
+                                                                       <xsl:if test="total_case &gt; 0">
+                                                                               <tr class="suite_item">
+                                                                                       <xsl:attribute name="id">
+                                                               <xsl:value-of
+                                                                                               select="@name" />
+                                                   </xsl:attribute>
+                                                                                       <td>
+                                                                                               <a>
+                                                                                                       <xsl:attribute name="href"><xsl:value-of
+                                                                                                               select="@name" />.xml</xsl:attribute>
+                                                                                                       <xsl:value-of select="@name" />
+                                                                                               </a>
+                                                                                       </td>
+                                                                                       <td class="total">
+                                                                                               <xsl:value-of select="total_case" />
+                                                                                       </td>
+                                                                                       <td class="pass">
+                                                                                               <xsl:value-of select="pass_case" />
+                                                                                       </td>
+                                                                                       <td class="fail">
+                                                                                               <xsl:value-of select="fail_case" />
+                                                                                       </td>
+                                                                                       <td class="block">
+                                                                                               <xsl:value-of select="block_case" />
+                                                                                       </td>
+                                                                                       <td class="na">
+                                                                                               <xsl:value-of select="na_case" />
+                                                                                       </td>
+                                                                                       <td class="Ratio">
+                                                                                               <div class="RatioGraphic" />
+                                                                                       </td>
+                                                                               </tr>
+                                                                       </xsl:if>
+                                                               </xsl:for-each>
+                                                       </table>
+                                               </div>
+                                               <div id="see_fail" style="display:none;">
+                                                       <table>
+                                                               <tr>
+                                                                       <th>Suite</th>
+                                                                       <th>Total</th>
+                                                                       <th>Passed</th>
+                                                                       <th>Failed</th>
+                                                                       <th>Blocked</th>
+                                                                       <th>Not Executed</th>
+                                                                       <th class="Ratio">Ratio</th>
+                                                               </tr>
+                                                               <xsl:for-each select="result_summary/suite">
+                                                                       <xsl:if test="fail_case &gt; 0">
+                                                                               <tr class="suite_item">
+                                                                                       <xsl:attribute name="id">
+                                                               <xsl:value-of
+                                                                                               select="@name" />
+                                                   </xsl:attribute>
+                                                                                       <td>
+                                                                                               <a>
+                                                                                                       <xsl:attribute name="href"><xsl:value-of
+                                                                                                               select="@name" />.xml</xsl:attribute>
+                                                                                                       <xsl:value-of select="@name" />
+                                                                                               </a>
+                                                                                       </td>
+                                                                                       <td class="total">
+                                                                                               <xsl:value-of select="total_case" />
+                                                                                       </td>
+                                                                                       <td class="pass">
+                                                                                               <xsl:value-of select="pass_case" />
+                                                                                       </td>
+                                                                                       <td class="fail">
+                                                                                               <xsl:value-of select="fail_case" />
+                                                                                       </td>
+                                                                                       <td class="block">
+                                                                                               <xsl:value-of select="block_case" />
+                                                                                       </td>
+                                                                                       <td class="na">
+                                                                                               <xsl:value-of select="na_case" />
+                                                                                       </td>
+                                                                                       <td class="Ratio">
+                                                                                               <div class="RatioGraphic" />
+                                                                                       </td>
+                                                                               </tr>
+                                                                       </xsl:if>
+                                                               </xsl:for-each>
+                                                       </table>
+                                               </div>
+                                               <div id="see_block" style="display:none;">
+                                                       <table>
+                                                               <tr>
+                                                                       <th>Suite</th>
+                                                                       <th>Total</th>
+                                                                       <th>Passed</th>
+                                                                       <th>Failed</th>
+                                                                       <th>Blocked</th>
+                                                                       <th>Not Executed</th>
+                                                                       <th class="Ratio">Ratio</th>
+                                                               </tr>
+                                                               <xsl:for-each select="result_summary/suite">
+                                                                       <xsl:if test="block_case &gt; 0">
+                                                                               <tr class="suite_item">
+                                                                                       <xsl:attribute name="id">
+                                                               <xsl:value-of
+                                                                                               select="@name" />
+                                                   </xsl:attribute>
+                                                                                       <td>
+                                                                                               <a>
+                                                                                                       <xsl:attribute name="href"><xsl:value-of
+                                                                                                               select="@name" />.xml</xsl:attribute>
+                                                                                                       <xsl:value-of select="@name" />
+                                                                                               </a>
+                                                                                       </td>
+                                                                                       <td class="total">
+                                                                                               <xsl:value-of select="total_case" />
+                                                                                       </td>
+                                                                                       <td class="pass">
+                                                                                               <xsl:value-of select="pass_case" />
+                                                                                       </td>
+                                                                                       <td class="fail">
+                                                                                               <xsl:value-of select="fail_case" />
+                                                                                       </td>
+                                                                                       <td class="block">
+                                                                                               <xsl:value-of select="block_case" />
+                                                                                       </td>
+                                                                                       <td class="na">
+                                                                                               <xsl:value-of select="na_case" />
+                                                                                       </td>
+                                                                                       <td class="Ratio">
+                                                                                               <div class="RatioGraphic" />
+                                                                                       </td>
+                                                                               </tr>
+                                                                       </xsl:if>
+                                                               </xsl:for-each>
+                                                       </table>
+                                               </div>
+                                               <div id="see_na" style="display:none;">
+                                                       <table>
+                                                               <tr>
+                                                                       <th>Suite</th>
+                                                                       <th>Total</th>
+                                                                       <th>Passed</th>
+                                                                       <th>Failed</th>
+                                                                       <th>Blocked</th>
+                                                                       <th>Not Executed</th>
+                                                                       <th class="Ratio">Ratio</th>
+                                                               </tr>
+                                                               <xsl:for-each select="result_summary/suite">
+                                                                       <xsl:if test="na_case &gt; 0">
+                                                                               <tr class="suite_item">
+                                                                                       <xsl:attribute name="id">
+                                                               <xsl:value-of
+                                                                                               select="@name" />
+                                                   </xsl:attribute>
+                                                                                       <td>
+                                                                                               <a>
+                                                                                                       <xsl:attribute name="href"><xsl:value-of
+                                                                                                               select="@name" />.xml</xsl:attribute>
+                                                                                                       <xsl:value-of select="@name" />
+                                                                                               </a>
+                                                                                       </td>
+                                                                                       <td class="total">
+                                                                                               <xsl:value-of select="total_case" />
+                                                                                       </td>
+                                                                                       <td class="pass">
+                                                                                               <xsl:value-of select="pass_case" />
+                                                                                       </td>
+                                                                                       <td class="fail">
+                                                                                               <xsl:value-of select="fail_case" />
+                                                                                       </td>
+                                                                                       <td class="block">
+                                                                                               <xsl:value-of select="block_case" />
+                                                                                       </td>
+                                                                                       <td class="na">
+                                                                                               <xsl:value-of select="na_case" />
+                                                                                       </td>
+                                                                                       <td class="Ratio">
+                                                                                               <div class="RatioGraphic" />
+                                                                                       </td>
+                                                                               </tr>
+                                                                       </xsl:if>
+                                                               </xsl:for-each>
+                                                       </table>
+                                               </div>
+                                       </div>
+                               </div>
+                               <div id="goTopBtn">
+                                       <img border="0" src="./style/back_top.png" />
+                               </div>
+                               <script type="text/javascript" src="./style/application.js" />
+                               <script language="javascript" type="text/javascript">
+                                       $(document).ready(function(){
+                                       goTopEx();
+                                       drawRatio();
+                                       });
+                               </script>
+                       </body>
+               </html>
+       </xsl:template>
+       <xsl:template name="br-replace">
+               <xsl:param name="word" />
+               <xsl:variable name="cr">
+                       <xsl:text>\n</xsl:text>
+               </xsl:variable>
+               <xsl:choose>
+                       <xsl:when test="contains($word,$cr)">
+                               <xsl:value-of select="substring-before($word,$cr)" />
+                               <br />
+                               <xsl:call-template name="br-replace">
+                                       <xsl:with-param name="word" select="substring-after($word,$cr)" />
+                               </xsl:call-template>
+                       </xsl:when>
+                       <xsl:otherwise>
+                               <xsl:value-of select="$word" />
+                       </xsl:otherwise>
+               </xsl:choose>
+       </xsl:template>
+</xsl:stylesheet>
diff --git a/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/manager/style/testresult.xsl b/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/manager/style/testresult.xsl
new file mode 100755 (executable)
index 0000000..244c187
--- /dev/null
@@ -0,0 +1,559 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<xsl:stylesheet version="1.0"
+       xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
+       <xsl:output method="html" version="1.0" encoding="UTF-8"
+               indent="yes" />
+       <xsl:template match="/">
+               <html>
+                       <STYLE type="text/css">
+                               @import "./style/tests.css";
+                       </STYLE>
+                       <head>
+                               <script type="text/javascript" src="./style/jquery.min.js" />
+                               <script type="text/javascript" src="./style/popup.js" />
+                       </head>
+                       <body>
+                               <div id="title">
+                                       <table>
+                                               <tr>
+                                                       <td class="title">
+                                                               <h1 align="center">Suite Test Results</h1>
+                                                       </td>
+                                               </tr>
+                                       </table>
+                               </div>
+                               <div id="btc">
+                                       <table>
+                                               <tr>
+                                                       <td>
+                                                               <a href="#" class="see_all">Show all</a>
+                                                       </td>
+                                                       <td>
+                                                               <a href="#" class="see_failed">Show only failed</a>
+                                                       </td>
+                                                       <td>
+                                                               <a href="#" class="see_blocked">Show only blocked</a>
+                                                       </td>
+                                                       <td>
+                                                               <a href="#" class="see_na">Show only not executed</a>
+                                                       </td>
+                                                       <td>
+                                                               <a href="summary.xml">Summary</a>
+                                                       </td>
+                                               </tr>
+                                       </table>
+                               </div>
+                               <div id="testcasepage">
+                                       <div id="cases">
+                                               <div id="see_all">
+                                                       <xsl:for-each select="test_definition/suite">
+                                                               <div id="suite_title">
+                                                                       <h2>
+                                                                               Test Suite:
+                                                                               <xsl:value-of select="@name" />
+                                                                               (All)
+                                                                       </h2>
+                                                                       <a>
+                                                                               <xsl:attribute name="name">
+                                                                     <xsl:value-of
+                                                                                       select="@name" />
+                                                                  </xsl:attribute>
+                                                                       </a>
+                                                               </div>
+                                                               <table>
+                                                                       <tr>
+                                                                               <th>Case_ID</th>
+                                                                               <th>Purpose</th>
+                                                                               <th>Result</th>
+                                                                               <th>Stdout</th>
+                                                                       </tr>
+                                                                       <xsl:for-each select=".//set">
+                                                                               <tr>
+                                                                                       <xsl:choose>
+                                                                                               <xsl:when test="@name">
+                                                                                                       <td colspan="3">
+                                                                                                               <h3>
+                                                                                                                       Test Set:
+                                                                                                                       <xsl:value-of select="@name" />
+                                                                                                               </h3>
+                                                                                                       </td>
+                                                                                                       <td colspan="1">
+                                                                                                               <h4>
+                                                                                                                       <a>
+                                                                                                                               <xsl:attribute name="href"><xsl:value-of
+                                                                                                                                       select="@set_debug_msg" /></xsl:attribute>
+                                                                                                                               dlog
+                                                                                                                       </a>
+                                                                                                               </h4>
+                                                                                                       </td>
+                                                                                               </xsl:when>
+                                                                                               <xsl:otherwise>
+                                                                                                       <td colspan="4">
+                                                                                                               <h3>
+                                                                                                                       Test Set:
+                                                                                                                       <xsl:value-of select="@name" />
+                                                                                                               </h3>
+                                                                                                       </td>
+                                                                                               </xsl:otherwise>
+                                                                                       </xsl:choose>
+                                                                               </tr>
+                                                                               <xsl:for-each select=".//testcase">
+                                                                                       <tr>
+                                                                                               <td>
+                                                                                                       <div
+                                                                                                               style="background-color:#F5DEB3;border:1px solid black;display:none;">
+                                                                                                               <xsl:attribute name="id"><xsl:value-of
+                                                                                                                       select="@id" /></xsl:attribute>
+                                                                                                               <p>
+                                                                                                                       <xsl:for-each select="./description/steps//step">
+                                                                                                                               <xsl:sort select="@order" />
+                                                                                                                               <B>
+                                                                                                                                       Step
+                                                                                                                                       <xsl:value-of select="@order" />
+                                                                                                                                       :
+                                                                                                                               </B>
+                                                                                                                               <br />
+                                                                                                                               <xsl:value-of select=".//step_desc" />
+                                                                                                                               <br />
+                                                                                                                               <B>Expected:</B>
+                                                                                                                               <xsl:value-of select=".//expected" />
+                                                                                                                               <br />
+                                                                                                                       </xsl:for-each>
+                                                                                                               </p>
+                                                                                                               <p>
+                                                                                                                       <br />
+                                                                                                                       <B>
+                                                                                                                               Entry:
+                                                                                                                               <br />
+                                                                                                                       </B>
+                                                                                                                       <xsl:value-of select="./description//test_script_entry" />
+                                                                                                                       <br />
+                                                                                                               </p>
+                                                                                                       </div>
+                                                                                                       <a href="#" class="test_case_popup">
+                                                                                                               <xsl:attribute name="id"><xsl:value-of
+                                                                                                                       select="@id" /></xsl:attribute>
+                                                                                                               <xsl:value-of select="@id" />
+                                                                                                       </a>
+                                                                                               </td>
+                                                                                               <td>
+                                                                                                       <xsl:value-of select="@purpose" />
+                                                                                               </td>
+
+                                                                                               <xsl:choose>
+                                                                                                       <xsl:when test="@result">
+                                                                                                               <xsl:if test="@result = 'FAIL'">
+                                                                                                                       <td class="red_rate">
+                                                                                                                               <xsl:value-of select="@result" />
+                                                                                                                       </td>
+                                                                                                               </xsl:if>
+                                                                                                               <xsl:if test="@result = 'PASS'">
+                                                                                                                       <td class="green_rate">
+                                                                                                                               <xsl:value-of select="@result" />
+                                                                                                                       </td>
+                                                                                                               </xsl:if>
+                                                                                                               <xsl:if test="@result = 'BLOCK' ">
+                                                                                                                       <td class="orange_rate">
+                                                                                                                               BLOCK
+                                                                                                                       </td>
+                                                                                                               </xsl:if>
+                                                                                                               <xsl:if
+                                                                                                                       test="@result != 'BLOCK' and @result != 'FAIL' and @result != 'PASS' ">
+                                                                                                                       <td class="gray_rate">
+                                                                                                                               Not Run
+                                                                                                                       </td>
+                                                                                                               </xsl:if>
+                                                                                                       </xsl:when>
+                                                                                                       <xsl:otherwise>
+                                                                                                               <td>
+
+                                                                                                               </td>
+                                                                                                       </xsl:otherwise>
+                                                                                               </xsl:choose>
+                                                                                               <td>
+                                                                                                       <xsl:call-template name="br-replace">
+                                                                                                               <xsl:with-param name="word"
+                                                                                                                       select=".//result_info/stdout" />
+                                                                                                       </xsl:call-template>
+                                                                                                       <xsl:if test=".//result_info/stdout = ''">
+                                                                                                               N/A
+                                                                                                       </xsl:if>
+                                                                                               </td>
+                                                                                       </tr>
+                                                                               </xsl:for-each>
+                                                                       </xsl:for-each>
+                                                               </table>
+                                                       </xsl:for-each>
+                                               </div>
+                                               <div id="see_fail" style="display:none;">
+                                                       <xsl:for-each select="test_definition/suite">
+                                                               <div id="suite_title">
+                                                                       <h2>
+                                                                               Test Suite:
+                                                                               <xsl:value-of select="@name" />
+                                                                               (Failed only)
+                                                                       </h2>
+                                                                       <a>
+                                                                               <xsl:attribute name="name">
+                                                                     <xsl:value-of
+                                                                                       select="@name" />
+                                                                  </xsl:attribute>
+                                                                       </a>
+                                                               </div>
+                                                               <table>
+                                                                       <tr>
+                                                                               <th>Case_ID</th>
+                                                                               <th>Purpose</th>
+                                                                               <th>Result</th>
+                                                                               <th>Stdout</th>
+                                                                       </tr>
+                                                                       <xsl:for-each select=".//set">
+                                                                               <tr>
+                                                                                       <xsl:choose>
+                                                                                               <xsl:when test="@name">
+                                                                                                       <td colspan="3">
+                                                                                                               <h3>
+                                                                                                                       Test Set:
+                                                                                                                       <xsl:value-of select="@name" />
+                                                                                                               </h3>
+                                                                                                       </td>
+                                                                                                       <td colspan="1">
+                                                                                                               <h4>
+                                                                                                                       <a>
+                                                                                                                               <xsl:attribute name="href"><xsl:value-of
+                                                                                                                                       select="@set_debug_msg" /></xsl:attribute>
+                                                                                                                               dlog
+                                                                                                                       </a>
+                                                                                                               </h4>
+                                                                                                       </td>
+                                                                                               </xsl:when>
+                                                                                               <xsl:otherwise>
+                                                                                                       <td colspan="4">
+                                                                                                               <h3>
+                                                                                                                       Test Set:
+                                                                                                                       <xsl:value-of select="@name" />
+                                                                                                               </h3>
+                                                                                                       </td>
+                                                                                               </xsl:otherwise>
+                                                                                       </xsl:choose>
+                                                                               </tr>
+                                                                               <xsl:for-each select=".//testcase[@result='FAIL']">
+                                                                                       <tr>
+                                                                                               <td>
+                                                                                                       <div
+                                                                                                               style="background-color:#F5DEB3;border:1px solid black;display:none;">
+                                                                                                               <xsl:attribute name="id">fail_<xsl:value-of
+                                                                                                                       select="@id" /></xsl:attribute>
+                                                                                                               <p>
+                                                                                                                       <xsl:for-each select="./description/steps//step">
+                                                                                                                               <xsl:sort select="@order" />
+                                                                                                                               <B>
+                                                                                                                                       Step
+                                                                                                                                       <xsl:value-of select="@order" />
+                                                                                                                                       :
+                                                                                                                               </B>
+                                                                                                                               <br />
+                                                                                                                               <xsl:value-of select=".//step_desc" />
+                                                                                                                               <br />
+                                                                                                                               <B>Expected:</B>
+                                                                                                                               <xsl:value-of select=".//expected" />
+                                                                                                                               <br />
+                                                                                                                       </xsl:for-each>
+                                                                                                               </p>
+                                                                                                               <p>
+                                                                                                                       <br />
+                                                                                                                       <B>
+                                                                                                                               Entry:
+                                                                                                                               <br />
+                                                                                                                       </B>
+                                                                                                                       <xsl:value-of select="./description//test_script_entry" />
+                                                                                                                       <br />
+                                                                                                               </p>
+                                                                                                       </div>
+                                                                                                       <a href="#" class="test_case_popup">
+                                                                                                               <xsl:attribute name="id">fail_<xsl:value-of
+                                                                                                                       select="@id" /></xsl:attribute>
+                                                                                                               <xsl:value-of select="@id" />
+                                                                                                       </a>
+                                                                                               </td>
+                                                                                               <td>
+                                                                                                       <xsl:value-of select="@purpose" />
+                                                                                               </td>
+
+                                                                                               <td class="red_rate">
+                                                                                                       <xsl:value-of select="@result" />
+                                                                                               </td>
+                                                                                               <td>
+                                                                                                       <xsl:call-template name="br-replace">
+                                                                                                               <xsl:with-param name="word"
+                                                                                                                       select=".//result_info/stdout" />
+                                                                                                       </xsl:call-template>
+                                                                                                       <xsl:if test=".//result_info/stdout = ''">
+                                                                                                               N/A
+                                                                                                       </xsl:if>
+                                                                                               </td>
+                                                                                       </tr>
+                                                                               </xsl:for-each>
+                                                                       </xsl:for-each>
+                                                               </table>
+                                                       </xsl:for-each>
+                                               </div>
+                                               <div id="see_block" style="display:none;">
+                                                       <xsl:for-each select="test_definition/suite">
+                                                               <div id="suite_title">
+                                                                       <h2>
+                                                                               Test Suite:
+                                                                               <xsl:value-of select="@name" />
+                                                                               (Blocked Only)
+                                                                       </h2>
+                                                                       <a>
+                                                                               <xsl:attribute name="name">
+                                                                     <xsl:value-of
+                                                                                       select="@name" />
+                                                                  </xsl:attribute>
+                                                                       </a>
+                                                               </div>
+                                                               <table>
+                                                                       <tr>
+                                                                               <th>Case_ID</th>
+                                                                               <th>Purpose</th>
+                                                                               <th>Result</th>
+                                                                               <th>Stdout</th>
+                                                                       </tr>
+                                                                       <xsl:for-each select=".//set">
+                                                                               <tr>
+                                                                                       <xsl:choose>
+                                                                                               <xsl:when test="@name">
+                                                                                                       <td colspan="3">
+                                                                                                               <h3>
+                                                                                                                       Test Set:
+                                                                                                                       <xsl:value-of select="@name" />
+                                                                                                               </h3>
+                                                                                                       </td>
+                                                                                                       <td colspan="1">
+                                                                                                               <h4>
+                                                                                                                       <a>
+                                                                                                                               <xsl:attribute name="href"><xsl:value-of
+                                                                                                                                       select="@set_debug_msg" /></xsl:attribute>
+                                                                                                                               dlog
+                                                                                                                       </a>
+                                                                                                               </h4>
+                                                                                                       </td>
+                                                                                               </xsl:when>
+                                                                                               <xsl:otherwise>
+                                                                                                       <td colspan="4">
+                                                                                                               <h3>
+                                                                                                                       Test Set:
+                                                                                                                       <xsl:value-of select="@name" />
+                                                                                                               </h3>
+                                                                                                       </td>
+                                                                                               </xsl:otherwise>
+                                                                                       </xsl:choose>
+                                                                               </tr>
+                                                                               <xsl:for-each select=".//testcase[@result='BLOCK']">
+                                                                                       <tr>
+                                                                                               <td>
+                                                                                                       <div
+                                                                                                               style="background-color:#F5DEB3;border:1px solid black;display:none;">
+                                                                                                               <xsl:attribute name="id">block_<xsl:value-of
+                                                                                                                       select="@id" /></xsl:attribute>
+                                                                                                               <p>
+                                                                                                                       <xsl:for-each select="./description/steps//step">
+                                                                                                                               <xsl:sort select="@order" />
+                                                                                                                               <B>
+                                                                                                                                       Step
+                                                                                                                                       <xsl:value-of select="@order" />
+                                                                                                                                       :
+                                                                                                                               </B>
+                                                                                                                               <br />
+                                                                                                                               <xsl:value-of select=".//step_desc" />
+                                                                                                                               <br />
+                                                                                                                               <B>Expected:</B>
+                                                                                                                               <xsl:value-of select=".//expected" />
+                                                                                                                               <br />
+                                                                                                                       </xsl:for-each>
+                                                                                                               </p>
+                                                                                                               <p>
+                                                                                                                       <br />
+                                                                                                                       <B>
+                                                                                                                               Entry:
+                                                                                                                               <br />
+                                                                                                                       </B>
+                                                                                                                       <xsl:value-of select="./description//test_script_entry" />
+                                                                                                                       <br />
+                                                                                                               </p>
+                                                                                                       </div>
+                                                                                                       <a href="#" class="test_case_popup">
+                                                                                                               <xsl:attribute name="id">block_<xsl:value-of
+                                                                                                                       select="@id" /></xsl:attribute>
+                                                                                                               <xsl:value-of select="@id" />
+                                                                                                       </a>
+                                                                                               </td>
+                                                                                               <td>
+                                                                                                       <xsl:value-of select="@purpose" />
+                                                                                               </td>
+
+                                                                                               <td class="orange_rate">
+                                                                                                       <xsl:value-of select="@result" />
+                                                                                               </td>
+                                                                                               <td>
+                                                                                                       <xsl:call-template name="br-replace">
+                                                                                                               <xsl:with-param name="word"
+                                                                                                                       select=".//result_info/stdout" />
+                                                                                                       </xsl:call-template>
+                                                                                                       <xsl:if test=".//result_info/stdout = ''">
+                                                                                                               N/A
+                                                                                                       </xsl:if>
+                                                                                               </td>
+                                                                                       </tr>
+                                                                               </xsl:for-each>
+                                                                       </xsl:for-each>
+                                                               </table>
+                                                       </xsl:for-each>
+                                               </div>
+                                               <div id="see_na" style="display:none;">
+                                                       <xsl:for-each select="test_definition/suite">
+                                                               <div id="suite_title">
+                                                                       <h2>
+                                                                               Test Suite:
+                                                                               <xsl:value-of select="@name" />
+                                                                               (Not executed Only)
+                                                                       </h2>
+                                                                       <a>
+                                                                               <xsl:attribute name="name">
+                                                                     <xsl:value-of
+                                                                                       select="@name" />
+                                                                  </xsl:attribute>
+                                                                       </a>
+                                                               </div>
+                                                               <table>
+                                                                       <tr>
+                                                                               <th>Case_ID</th>
+                                                                               <th>Purpose</th>
+                                                                               <th>Result</th>
+                                                                               <th>Stdout</th>
+                                                                       </tr>
+                                                                       <xsl:for-each select=".//set">
+                                                                               <tr>
+                                                                                       <xsl:choose>
+                                                                                               <xsl:when test="@name">
+                                                                                                       <td colspan="3">
+                                                                                                               <h3>
+                                                                                                                       Test Set:
+                                                                                                                       <xsl:value-of select="@name" />
+                                                                                                               </h3>
+                                                                                                       </td>
+                                                                                                       <td colspan="1">
+                                                                                                               <h4>
+                                                                                                                       <a>
+                                                                                                                               <xsl:attribute name="href"><xsl:value-of
+                                                                                                                                       select="@set_debug_msg" /></xsl:attribute>
+                                                                                                                               dlog
+                                                                                                                       </a>
+                                                                                                               </h4>
+                                                                                                       </td>
+                                                                                               </xsl:when>
+                                                                                               <xsl:otherwise>
+                                                                                                       <td colspan="4">
+                                                                                                               <h3>
+                                                                                                                       Test Set:
+                                                                                                                       <xsl:value-of select="@name" />
+                                                                                                               </h3>
+                                                                                                       </td>
+                                                                                               </xsl:otherwise>
+                                                                                       </xsl:choose>
+                                                                               </tr>
+                                                                               <xsl:for-each select=".//testcase[@result='N/A']">
+                                                                                       <tr>
+                                                                                               <td>
+                                                                                                       <div
+                                                                                                               style="background-color:#F5DEB3;border:1px solid black;display:none;">
+                                                                                                               <xsl:attribute name="id">na_<xsl:value-of
+                                                                                                                       select="@id" /></xsl:attribute>
+                                                                                                               <p>
+                                                                                                                       <xsl:for-each select="./description/steps//step">
+                                                                                                                               <xsl:sort select="@order" />
+                                                                                                                               <B>
+                                                                                                                                       Step
+                                                                                                                                       <xsl:value-of select="@order" />
+                                                                                                                                       :
+                                                                                                                               </B>
+                                                                                                                               <br />
+                                                                                                                               <xsl:value-of select=".//step_desc" />
+                                                                                                                               <br />
+                                                                                                                               <B>Expected:</B>
+                                                                                                                               <xsl:value-of select=".//expected" />
+                                                                                                                               <br />
+                                                                                                                       </xsl:for-each>
+                                                                                                               </p>
+                                                                                                               <p>
+                                                                                                                       <br />
+                                                                                                                       <B>
+                                                                                                                               Entry:
+                                                                                                                               <br />
+                                                                                                                       </B>
+                                                                                                                       <xsl:value-of select="./description//test_script_entry" />
+                                                                                                                       <br />
+                                                                                                               </p>
+                                                                                                       </div>
+                                                                                                       <a href="#" class="test_case_popup">
+                                                                                                               <xsl:attribute name="id">na_<xsl:value-of
+                                                                                                                       select="@id" /></xsl:attribute>
+                                                                                                               <xsl:value-of select="@id" />
+                                                                                                       </a>
+                                                                                               </td>
+                                                                                               <td>
+                                                                                                       <xsl:value-of select="@purpose" />
+                                                                                               </td>
+
+                                                                                               <td class="gray_rate">
+                                                                                                       <xsl:value-of select="@result" />
+                                                                                               </td>
+                                                                                               <td>
+                                                                                                       <xsl:call-template name="br-replace">
+                                                                                                               <xsl:with-param name="word"
+                                                                                                                       select=".//result_info/stdout" />
+                                                                                                       </xsl:call-template>
+                                                                                                       <xsl:if test=".//result_info/stdout = ''">
+                                                                                                               N/A
+                                                                                                       </xsl:if>
+                                                                                               </td>
+                                                                                       </tr>
+                                                                               </xsl:for-each>
+                                                                       </xsl:for-each>
+                                                               </table>
+                                                       </xsl:for-each>
+                                               </div>
+                                       </div>
+                               </div>
+                               <div id="goTopBtn">
+                                       <img border="0" src="./style/back_top.png" />
+                               </div>
+                               <script type="text/javascript" src="./style/application.js" />
+                               <script language="javascript" type="text/javascript">
+                                       $(document).ready(function(){
+                                       goTopEx();
+                                       });
+                               </script>
+                       </body>
+               </html>
+       </xsl:template>
+       <xsl:template name="br-replace">
+               <xsl:param name="word" />
+               <xsl:variable name="cr">
+                       <xsl:text>\n</xsl:text>
+               </xsl:variable>
+               <xsl:choose>
+                       <xsl:when test="contains($word,$cr)">
+                               <xsl:value-of select="substring-before($word,$cr)" />
+                               <br />
+                               <xsl:call-template name="br-replace">
+                                       <xsl:with-param name="word" select="substring-after($word,$cr)" />
+                               </xsl:call-template>
+                       </xsl:when>
+                       <xsl:otherwise>
+                               <xsl:value-of select="$word" />
+                       </xsl:otherwise>
+               </xsl:choose>
+       </xsl:template>
+</xsl:stylesheet>
diff --git a/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/manager/style/tests.css b/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/manager/style/tests.css
new file mode 100755 (executable)
index 0000000..487bca0
--- /dev/null
@@ -0,0 +1,195 @@
+@charset "UTF-8";\r
+/* CSS Document */\r
+#testcasepage div,#testcasepage h1,#testcasepage p,#testcasepage table,#testcasepage tr,#testcasepage th,#testcasepage td\r
+       {\r
+       margin: 0;\r
+       padding: 0;\r
+       border: 0;\r
+       font-weight: inherit;\r
+       font-style: inherit;\r
+       font-size: 0.96em;\r
+       font-family: arial;\r
+       vertical-align: baseline;\r
+}\r
+\r
+#title td, #btc td{\r
+       margin: 0;\r
+       padding: 0;\r
+       border: 0;\r
+       font-weight: inherit;\r
+       font-style: inherit;\r
+       font-size: 0.96em;\r
+       font-family: arial;\r
+       vertical-align: baseline;\r
+}\r
+\r
+td.Ratio {\r
+       text-align: left;\r
+       font-weight: normal;\r
+       padding: 4px 10px 4px 5px;\r
+       vertical-align: middle;\r
+}\r
+\r
+th.Ratio {\r
+       width: 400px;\r
+}\r
+\r
+#testcasepage p {\r
+       text-align: left;\r
+}\r
+\r
+#suite_title {\r
+       text-align: left;\r
+}\r
+\r
+#btc {\r
+       text-align: right;\r
+}\r
+\r
+#btc table {\r
+       position: absolute;\r
+       right: 0px;\r
+       width: 600px;\r
+}\r
+\r
+#testcasepage table {\r
+       border-collapse: separate;\r
+       border-spacing: 0;\r
+       margin-bottom: 1.4em;\r
+       vertical-align: middle;\r
+}\r
+\r
+#testcasepage th,#testcasepage td {\r
+       text-align: left;\r
+       font-weight: normal;\r
+       padding: 4px 10px 4px 5px;\r
+       vertical-align: middle;\r
+}\r
+\r
+#cases table {\r
+       width: 101%;\r
+}\r
+\r
+#cases td {\r
+       border-left: 0px;\r
+       font-weight: normal;\r
+       border-bottom: 0px;\r
+}\r
+\r
+#suite_summary table {\r
+       width: 100%;\r
+}\r
+\r
+\r
+#overview table {\r
+       width: 101%;\r
+}\r
+\r
+#overview table, #overview td, #overview tr {\r
+       border-left: none;\r
+       border-bottom: none;\r
+       border-right: none;\r
+       vertical-align: top;\r
+}\r
+\r
+#overview td{\r
+       width: 50%;\r
+}\r
+\r
+#capability table {\r
+       width: 50%;\r
+}\r
+\r
+#fail_cases table {\r
+       width: 101%;\r
+}\r
+\r
+#title table {\r
+       width: 101%;\r
+}\r
+\r
+#device table {\r
+       width: 100%;\r
+}\r
+\r
+#summary table {\r
+       width: 100%;\r
+}\r
+\r
+#testcasepage th {\r
+       border-bottom: 1px solid #000;\r
+       background-color: #AAAAAA;\r
+       border-left: 1px solid #000;\r
+       border-top: 1px solid #000;\r
+       color: #000;\r
+       font-weight: bold;\r
+       vertical-align: bottom;\r
+}\r
+\r
+#summary th:last-child,#summary td:last-child, #device th:last-child,#device td:last-child, #suite_summary th:last-child,#suite_summary td:last-child,#cases th:last-child,#cases td:last-child,#capability th:last-child,#capability td:last-child {\r
+       border-right: 1px solid #000;\r
+}\r
+\r
+#testcasepage td {\r
+       font-weight: normal;\r
+}\r
+\r
+#summary td, #device td, #capability td, #suite_summary td, #cases td{\r
+       border-left: 1px solid;\r
+       font-weight: normal;\r
+       border-bottom: 1px solid;\r
+}\r
+\r
+#testcasepage td.yellow_rate {\r
+       background-color: #ffcc00;\r
+}\r
+\r
+#testcasepage td.green_rate {\r
+       background-color: #1E90FF;\r
+}\r
+\r
+#testcasepage td.dgreen_rate {\r
+       background-color: #339933;\r
+}\r
+\r
+#testcasepage td.red_rate {\r
+       background-color: #FF3333;\r
+}\r
+\r
+#testcasepage td.orange_rate {\r
+       background-color: #FFA500;\r
+}\r
+\r
+#testcasepage td.gray_rate {\r
+       background-color: #AAAAAA;\r
+}\r
+\r
+#title table,#title tr,#title td {\r
+       border-left: none;\r
+       border-bottom: none;\r
+       text-align: center;\r
+}\r
+\r
+#title td:last-child {\r
+       border-right: none;\r
+}\r
+\r
+#testcasepage h1 {\r
+       font-size: 2em;\r
+       font-family: Arial, sans-serif;\r
+       font-weight: bold;\r
+       line-height: 1;\r
+       color: #000;\r
+       margin-bottom: 0.75em;\r
+       padding-top: 0.25em;\r
+       font-weight: bold;\r
+}\r
+\r
+#goTopBtn {\r
+       right: 0px;\r
+       bottom: 0px;\r
+       position: fixed; +\r
+       position: absolute;\r
+       top: expression(parseInt(document.body.scrollTop)+document.body.clientHeight-40\r
+               );\r
+}\r
diff --git a/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/manager/tmp/temp b/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/manager/tmp/temp
new file mode 100755 (executable)
index 0000000..e69de29
diff --git a/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/plugin/native_templates/.cproject b/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/plugin/native_templates/.cproject
new file mode 100755 (executable)
index 0000000..db22a91
--- /dev/null
@@ -0,0 +1,543 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<?fileVersion 4.0.0?><cproject storage_type_id="org.eclipse.cdt.core.XmlProjectDescriptionStorage">
+       <storageModule moduleId="org.eclipse.cdt.core.settings">
+               <cconfiguration id="org.tizen.nativecore.config.sbi.gcc45.app.debug.542757660">
+                       <storageModule buildSystemId="org.eclipse.cdt.managedbuilder.core.configurationDataProvider" id="org.tizen.nativecore.config.sbi.gcc45.app.debug.542757660" moduleId="org.eclipse.cdt.core.settings" name="Debug">
+                               <externalSettings/>
+                               <extensions>
+                                       <extension id="org.eclipse.cdt.core.ELF" point="org.eclipse.cdt.core.BinaryParser"/>
+                                       <extension id="org.eclipse.cdt.core.GmakeErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
+                                       <extension id="org.eclipse.cdt.core.CWDLocator" point="org.eclipse.cdt.core.ErrorParser"/>
+                                       <extension id="org.eclipse.cdt.core.MakeErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
+                                       <extension id="org.eclipse.cdt.core.GCCErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
+                                       <extension id="org.eclipse.cdt.core.GASErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
+                                       <extension id="org.eclipse.cdt.core.GLDErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
+                               </extensions>
+                       </storageModule>
+                       <storageModule moduleId="cdtBuildSystem" version="4.0.0">
+                               <configuration artifactName="{TESTSUITE_NAME}" buildArtefactType="org.tizen.nativecore.buildArtefactType.app" buildProperties="org.eclipse.cdt.build.core.buildType=org.eclipse.cdt.build.core.buildType.debug,org.eclipse.cdt.build.core.buildArtefactType=org.tizen.nativecore.buildArtefactType.app" description="" errorParsers="org.eclipse.cdt.core.MakeErrorParser;org.eclipse.cdt.core.GCCErrorParser;" id="org.tizen.nativecore.config.sbi.gcc45.app.debug.542757660" name="Debug" parent="org.tizen.nativecore.config.sbi.gcc45.app.debug">
+                                       <folderInfo id="org.tizen.nativecore.config.sbi.gcc45.app.debug.542757660." name="/" resourcePath="">
+                                               <toolChain id="org.tizen.nativecore.toolchain.sbi.gcc45.app.debug.1784086492" name="Tizen Native Toolchain" superClass="org.tizen.nativecore.toolchain.sbi.gcc45.app.debug">
+                                                       <targetPlatform binaryParser="org.eclipse.cdt.core.ELF" id="org.tizen.nativeide.target.sbi.gnu.platform.base.165304646" osList="linux,win32" superClass="org.tizen.nativeide.target.sbi.gnu.platform.base"/>
+                                                       <builder autoBuildTarget="all" buildPath="${workspace_loc:/{TESTSUITE_NAME}/Debug}" enableAutoBuild="true" id="org.tizen.nativecore.target.sbi.gnu.builder.910776161" keepEnvironmentInBuildfile="false" managedBuildOn="true" name="Tizen Application Builder" superClass="org.tizen.nativecore.target.sbi.gnu.builder"/>
+                                                       <tool id="org.tizen.nativecore.tool.sbi.gnu.archiver.707842937" name="Archiver" superClass="org.tizen.nativecore.tool.sbi.gnu.archiver"/>
+                                                       <tool command="clang++" id="org.tizen.nativecore.tool.sbi.gnu.cpp.compiler.1219153705" name="C++ Compiler" superClass="org.tizen.nativecore.tool.sbi.gnu.cpp.compiler">
+                                                               <option id="gnu.cpp.compiler.option.optimization.level.235211314" name="Optimization Level" superClass="gnu.cpp.compiler.option.optimization.level" value="gnu.cpp.compiler.optimization.level.none" valueType="enumerated"/>
+                                                               <option id="sbi.gnu.cpp.compiler.option.debugging.level.275888905" name="Debug level" superClass="sbi.gnu.cpp.compiler.option.debugging.level" value="gnu.cpp.compiler.debugging.level.max" valueType="enumerated"/>
+                                                               <option id="sbi.gnu.cpp.compiler.option.debug.applog.437831432" name="Enable application logging (-D_APP_LOG)" superClass="sbi.gnu.cpp.compiler.option.debug.applog" value="true" valueType="boolean"/>
+                                                               <option id="sbi.gnu.cpp.compiler.option.2067868547" superClass="sbi.gnu.cpp.compiler.option" valueType="userObjs">
+                                                                       <listOptionValue builtIn="false" value="mobile-2.4-emulator.core_llvm36.i386.core.app"/>
+                                                               </option>
+                                                               <option id="sbi.gnu.cpp.compiler.option.frameworks_inc.core.1395160493" superClass="sbi.gnu.cpp.compiler.option.frameworks_inc.core" valueType="includePath">
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/libxml2&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/appcore-agent&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/appfw&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/attach-panel&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/badge&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/base&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/cairo&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/calendar-service2&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/ckm&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/contacts-svc&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/content&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/context-service&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/dali&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/dali-toolkit&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/dbus-1.0&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/device&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/dlog&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/ecore-1&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/ecore-con-1&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/ecore-evas-1&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/ecore-file-1&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/ecore-imf-1&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/ecore-imf-evas-1&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/ecore-input-1&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/ecore-input-evas-1&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/ecore-ipc-1&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/ecore-x-1&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/e_dbus-1&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/edje-1&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/eet-1&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/efl-1&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/efl-extension&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/efreet-1&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/eina-1&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/eina-1/eina&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/eio-1&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/eldbus-1&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/elementary-1&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/embryo-1&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/eo-1&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/eom&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/ethumb-1&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/ethumb-client-1&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/evas-1&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/ewebkit2-0&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/feedback&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/fontconfig&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/freetype2&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/geofence&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/gio-unix-2.0&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/glib-2.0&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/harfbuzz&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/json-glib-1.0&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/location&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/maps&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/media&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/media-content&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/messaging&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/metadata-editor&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/minicontrol&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/minizip&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/network&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/notification&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/phonenumber-utils&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/sensor&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/shortcut&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/storage&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/system&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/telephony&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/ui&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/web&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/widget_service&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/widget_viewer_evas&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/wifi-direct&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/lib/dbus-1.0/include&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/lib/glib-2.0/include&quot;"/>
+                                                               </option>
+                                                               <option id="sbi.gnu.cpp.compiler.option.frameworks_cflags.core.2042453024" superClass="sbi.gnu.cpp.compiler.option.frameworks_cflags.core" valueType="stringList">
+                                                                       <listOptionValue builtIn="false" value="${TC_COMPILER_MISC}"/>
+                                                                       <listOptionValue builtIn="false" value="${RS_COMPILER_MISC}"/>
+                                                                       <listOptionValue builtIn="false" value=" -fPIE"/>
+                                                                       <listOptionValue builtIn="false" value="--sysroot=&quot;${SBI_SYSROOT}&quot;"/>
+                                                               </option>
+                                                               <option id="gnu.cpp.compiler.option.include.paths.1491943414" superClass="gnu.cpp.compiler.option.include.paths" valueType="includePath">
+                                                                       <listOptionValue builtIn="false" value="&quot;${workspace_loc:/${ProjName}/inc}&quot;"/>
+                                                               </option>
+                                                               <option id="sbi.gnu.cpp.compiler.option.frameworks.core.399579441" superClass="sbi.gnu.cpp.compiler.option.frameworks.core" valueType="userObjs">
+                                                                       <listOptionValue builtIn="false" value="Native_API"/>
+                                                               </option>
+                                                               <option id="gnu.cpp.compiler.option.preprocessor.def.1290489636" superClass="gnu.cpp.compiler.option.preprocessor.def" valueType="definedSymbols">
+                                                                       <listOptionValue builtIn="false" value="_DEBUG"/>
+                                                               </option>
+                                                               <inputType id="sbi.gnu.cpp.compiler.tizen.inputType.1444030222"/>
+                                                               <inputType id="cdt.managedbuild.tool.gnu.cpp.compiler.input.828773414" superClass="cdt.managedbuild.tool.gnu.cpp.compiler.input"/>
+                                                       </tool>
+                                                       <tool command="clang" id="org.tizen.nativecore.tool.sbi.gnu.c.compiler.1332097163" name="C Compiler" superClass="org.tizen.nativecore.tool.sbi.gnu.c.compiler">
+                                                               <option defaultValue="gnu.c.optimization.level.none" id="gnu.c.compiler.option.optimization.level.569133032" name="Optimization Level" superClass="gnu.c.compiler.option.optimization.level" valueType="enumerated"/>
+                                                               <option id="sbi.gnu.c.compiler.option.debugging.level.1038790997" name="Debug level" superClass="sbi.gnu.c.compiler.option.debugging.level" value="gnu.c.debugging.level.max" valueType="enumerated"/>
+                                                               <option id="sbi.gnu.c.compiler.option.debug.applog.30619937" name="Enable application logging (-D_APP_LOG)" superClass="sbi.gnu.c.compiler.option.debug.applog" value="true" valueType="boolean"/>
+                                                               <option id="sbi.gnu.c.compiler.option.2093892473" superClass="sbi.gnu.c.compiler.option" valueType="userObjs">
+                                                                       <listOptionValue builtIn="false" value="mobile-2.4-emulator.core_llvm36.i386.core.app"/>
+                                                               </option>
+                                                               <option id="sbi.gnu.c.compiler.option.frameworks_inc.core.1795177369" superClass="sbi.gnu.c.compiler.option.frameworks_inc.core" valueType="includePath">
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/libxml2&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/appcore-agent&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/appfw&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/attach-panel&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/badge&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/base&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/cairo&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/calendar-service2&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/ckm&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/contacts-svc&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/content&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/context-service&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/dali&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/dali-toolkit&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/dbus-1.0&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/device&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/dlog&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/ecore-1&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/ecore-con-1&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/ecore-evas-1&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/ecore-file-1&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/ecore-imf-1&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/ecore-imf-evas-1&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/ecore-input-1&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/ecore-input-evas-1&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/ecore-ipc-1&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/ecore-x-1&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/e_dbus-1&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/edje-1&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/eet-1&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/efl-1&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/efl-extension&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/efreet-1&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/eina-1&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/eina-1/eina&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/eio-1&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/eldbus-1&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/elementary-1&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/embryo-1&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/eo-1&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/eom&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/ethumb-1&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/ethumb-client-1&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/evas-1&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/ewebkit2-0&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/feedback&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/fontconfig&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/freetype2&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/geofence&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/gio-unix-2.0&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/glib-2.0&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/harfbuzz&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/json-glib-1.0&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/location&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/maps&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/media&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/media-content&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/messaging&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/metadata-editor&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/minicontrol&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/minizip&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/network&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/notification&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/phonenumber-utils&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/sensor&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/shortcut&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/storage&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/system&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/telephony&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/ui&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/web&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/widget_service&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/widget_viewer_evas&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/wifi-direct&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/lib/dbus-1.0/include&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/lib/glib-2.0/include&quot;"/>
+                                                               </option>
+                                                               <option id="sbi.gnu.c.compiler.option.frameworks_cflags.core.129230233" superClass="sbi.gnu.c.compiler.option.frameworks_cflags.core" valueType="stringList">
+                                                                       <listOptionValue builtIn="false" value="${TC_COMPILER_MISC}"/>
+                                                                       <listOptionValue builtIn="false" value="${RS_COMPILER_MISC}"/>
+                                                                       <listOptionValue builtIn="false" value=" -fPIE"/>
+                                                                       <listOptionValue builtIn="false" value="--sysroot=&quot;${SBI_SYSROOT}&quot;"/>
+                                                               </option>
+                                                               <option id="gnu.c.compiler.option.include.paths.2147015964" superClass="gnu.c.compiler.option.include.paths" valueType="includePath">
+                                                                       <listOptionValue builtIn="false" value="&quot;${workspace_loc:/${ProjName}/inc}&quot;"/>
+                                                               </option>
+                                                               <option id="sbi.gnu.c.compiler.option.frameworks.core.435620859" superClass="sbi.gnu.c.compiler.option.frameworks.core" valueType="userObjs">
+                                                                       <listOptionValue builtIn="false" value="Native_API"/>
+                                                               </option>
+                                                               <option id="gnu.c.compiler.option.preprocessor.def.symbols.927058880" superClass="gnu.c.compiler.option.preprocessor.def.symbols" valueType="definedSymbols">
+                                                                       <listOptionValue builtIn="false" value="_DEBUG"/>
+                                                               </option>
+                                                               <inputType id="sbi.gnu.c.compiler.tizen.inputType.386884738"/>
+                                                               <inputType id="cdt.managedbuild.tool.gnu.c.compiler.input.981494680" superClass="cdt.managedbuild.tool.gnu.c.compiler.input"/>
+                                                       </tool>
+                                                       <tool id="org.tizen.nativeide.tool.sbi.gnu.c.linker.base.640241801" name="C Linker" superClass="org.tizen.nativeide.tool.sbi.gnu.c.linker.base"/>
+                                                       <tool command="clang++" id="org.tizen.nativecore.tool.sbi.gnu.cpp.linker.901135465" name="C++ Linker" superClass="org.tizen.nativecore.tool.sbi.gnu.cpp.linker">
+                                                               <option id="sbi.gnu.cpp.linker.option.frameworks_lflags.core.787442281" superClass="sbi.gnu.cpp.linker.option.frameworks_lflags.core" valueType="stringList">
+                                                                       <listOptionValue builtIn="false" value="${TC_LINKER_MISC}"/>
+                                                                       <listOptionValue builtIn="false" value="${RS_LINKER_MISC}"/>
+                                                                       <listOptionValue builtIn="false" value="-pie -lpthread "/>
+                                                                       <listOptionValue builtIn="false" value="-Xlinker -rpath=&quot;/home/developer/sdk_tools/lib&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="--sysroot=&quot;${SBI_SYSROOT}&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="-Xlinker --version-script=&quot;${PROJ_PATH}/.exportMap&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="-L&quot;${SBI_SYSROOT}/usr/lib&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="$(RS_LIBRARIES)"/>
+                                                               </option>
+                                                               <option id="gnu.cpp.link.option.paths.1307041173" superClass="gnu.cpp.link.option.paths" valueType="libPaths">
+                                                                       <listOptionValue builtIn="false" value="&quot;${workspace_loc:/${ProjName}/lib}&quot;"/>
+                                                               </option>
+                                                               <inputType id="cdt.managedbuild.tool.gnu.cpp.linker.input.2119600729" superClass="cdt.managedbuild.tool.gnu.cpp.linker.input">
+                                                                       <additionalInput kind="additionalinputdependency" paths="$(USER_OBJS)"/>
+                                                                       <additionalInput kind="additionalinput" paths="$(LIBS)"/>
+                                                               </inputType>
+                                                       </tool>
+                                                       <tool command="i386-linux-gnueabi-as" id="org.tizen.nativeapp.tool.sbi.gnu.assembler.base.2146766494" name="Assembler" superClass="org.tizen.nativeapp.tool.sbi.gnu.assembler.base">
+                                                               <inputType id="cdt.managedbuild.tool.gnu.assembler.input.2008442855" superClass="cdt.managedbuild.tool.gnu.assembler.input"/>
+                                                       </tool>
+                                                       <tool id="org.tizen.nativecore.tool.sbi.po.compiler.248419226" name="PO Resource Compiler" superClass="org.tizen.nativecore.tool.sbi.po.compiler"/>
+                                                       <tool id="org.tizen.nativecore.tool.sbi.edc.compiler.2010848909" name="EDC Resource Compiler" superClass="org.tizen.nativecore.tool.sbi.edc.compiler"/>
+                                                       <tool id="org.tizen.nativecore.tool.fnmapgen.147350839" name="C FN-Map Generator" superClass="org.tizen.nativecore.tool.fnmapgen"/>
+                                                       <tool id="org.tizen.nativecore.tool.fnmapgen.cpp.2051940365" name="C++ FN-Map Generator" superClass="org.tizen.nativecore.tool.fnmapgen.cpp"/>
+                                                       <tool id="org.tizen.nativecore.tool.ast.1075947210" name="C Static Analyzer" superClass="org.tizen.nativecore.tool.ast"/>
+                                                       <tool id="org.tizen.nativecore.tool.ast.cpp.255856593" name="C++ Static Analyzer" superClass="org.tizen.nativecore.tool.ast.cpp"/>
+                                                       <tool id="org.tizen.nativecore.tool.sbi.gnu.archiver.mergelib.1173374538" name="Archive Generator" superClass="org.tizen.nativecore.tool.sbi.gnu.archiver.mergelib"/>
+                                               </toolChain>
+                                       </folderInfo>
+                                       <sourceEntries>
+                                               <entry flags="VALUE_WORKSPACE_PATH|RESOLVED" kind="sourcePath" name="res"/>
+                                               <entry flags="VALUE_WORKSPACE_PATH|RESOLVED" kind="sourcePath" name="src"/>
+                                               <entry flags="VALUE_WORKSPACE_PATH|RESOLVED" kind="sourcePath" name="inc"/>
+                                       </sourceEntries>
+                               </configuration>
+                       </storageModule>
+                       <storageModule moduleId="org.eclipse.cdt.core.externalSettings"/>
+               </cconfiguration>
+               <cconfiguration id="org.tizen.nativecore.config.sbi.gcc45.app.release.728069853">
+                       <storageModule buildSystemId="org.eclipse.cdt.managedbuilder.core.configurationDataProvider" id="org.tizen.nativecore.config.sbi.gcc45.app.release.728069853" moduleId="org.eclipse.cdt.core.settings" name="Release">
+                               <externalSettings/>
+                               <extensions>
+                                       <extension id="org.eclipse.cdt.core.ELF" point="org.eclipse.cdt.core.BinaryParser"/>
+                                       <extension id="org.eclipse.cdt.core.GmakeErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
+                                       <extension id="org.eclipse.cdt.core.CWDLocator" point="org.eclipse.cdt.core.ErrorParser"/>
+                                       <extension id="org.eclipse.cdt.core.MakeErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
+                                       <extension id="org.eclipse.cdt.core.GCCErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
+                                       <extension id="org.eclipse.cdt.core.GASErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
+                                       <extension id="org.eclipse.cdt.core.GLDErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
+                               </extensions>
+                       </storageModule>
+                       <storageModule moduleId="cdtBuildSystem" version="4.0.0">
+                               <configuration artifactName="${ProjName}" buildArtefactType="org.tizen.nativecore.buildArtefactType.app" buildProperties="org.eclipse.cdt.build.core.buildType=org.eclipse.cdt.build.core.buildType.release,org.eclipse.cdt.build.core.buildArtefactType=org.tizen.nativecore.buildArtefactType.app" description="" errorParsers="org.eclipse.cdt.core.MakeErrorParser;org.eclipse.cdt.core.GCCErrorParser;" id="org.tizen.nativecore.config.sbi.gcc45.app.release.728069853" name="Release" parent="org.tizen.nativecore.config.sbi.gcc45.app.release">
+                                       <folderInfo id="org.tizen.nativecore.config.sbi.gcc45.app.release.728069853." name="/" resourcePath="">
+                                               <toolChain id="org.tizen.nativecore.toolchain.sbi.gcc45.app.release.1698569602" name="Tizen Native Toolchain" superClass="org.tizen.nativecore.toolchain.sbi.gcc45.app.release">
+                                                       <targetPlatform binaryParser="org.eclipse.cdt.core.ELF" id="org.tizen.nativeide.target.sbi.gnu.platform.base.530558826" osList="linux,win32" superClass="org.tizen.nativeide.target.sbi.gnu.platform.base"/>
+                                                       <builder buildPath="${workspace_loc:/{TESTSUITE_NAME}/Release}" id="org.tizen.nativecore.target.sbi.gnu.builder.975214550" keepEnvironmentInBuildfile="false" managedBuildOn="true" name="Tizen Application Builder" superClass="org.tizen.nativecore.target.sbi.gnu.builder"/>
+                                                       <tool id="org.tizen.nativecore.tool.sbi.gnu.archiver.1514849212" name="Archiver" superClass="org.tizen.nativecore.tool.sbi.gnu.archiver"/>
+                                                       <tool command="clang++" id="org.tizen.nativecore.tool.sbi.gnu.cpp.compiler.1790549045" name="C++ Compiler" superClass="org.tizen.nativecore.tool.sbi.gnu.cpp.compiler">
+                                                               <option id="gnu.cpp.compiler.option.optimization.level.316489008" name="Optimization Level" superClass="gnu.cpp.compiler.option.optimization.level" value="gnu.cpp.compiler.optimization.level.most" valueType="enumerated"/>
+                                                               <option id="sbi.gnu.cpp.compiler.option.debugging.level.1500294719" name="Debug level" superClass="sbi.gnu.cpp.compiler.option.debugging.level"/>
+                                                               <option id="sbi.gnu.cpp.compiler.option.debug.applog.220428565" name="Enable application logging (-D_APP_LOG)" superClass="sbi.gnu.cpp.compiler.option.debug.applog"/>
+                                                               <option id="sbi.gnu.cpp.compiler.option.900296718" superClass="sbi.gnu.cpp.compiler.option" valueType="userObjs">
+                                                                       <listOptionValue builtIn="false" value="mobile-2.4-emulator.core_llvm36.i386.core.app"/>
+                                                               </option>
+                                                               <option id="sbi.gnu.cpp.compiler.option.frameworks_inc.core.1334366520" superClass="sbi.gnu.cpp.compiler.option.frameworks_inc.core" valueType="includePath">
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/libxml2&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/appcore-agent&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/appfw&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/attach-panel&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/badge&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/base&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/cairo&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/calendar-service2&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/ckm&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/contacts-svc&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/content&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/context-service&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/dali&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/dali-toolkit&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/dbus-1.0&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/device&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/dlog&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/ecore-1&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/ecore-con-1&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/ecore-evas-1&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/ecore-file-1&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/ecore-imf-1&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/ecore-imf-evas-1&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/ecore-input-1&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/ecore-input-evas-1&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/ecore-ipc-1&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/ecore-x-1&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/e_dbus-1&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/edje-1&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/eet-1&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/efl-1&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/efl-extension&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/efreet-1&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/eina-1&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/eina-1/eina&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/eio-1&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/eldbus-1&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/elementary-1&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/embryo-1&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/eo-1&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/eom&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/ethumb-1&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/ethumb-client-1&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/evas-1&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/ewebkit2-0&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/feedback&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/fontconfig&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/freetype2&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/geofence&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/gio-unix-2.0&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/glib-2.0&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/harfbuzz&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/json-glib-1.0&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/location&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/maps&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/media&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/media-content&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/messaging&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/metadata-editor&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/minicontrol&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/minizip&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/network&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/notification&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/phonenumber-utils&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/sensor&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/shortcut&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/storage&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/system&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/telephony&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/ui&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/web&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/widget_service&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/widget_viewer_evas&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/wifi-direct&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/lib/dbus-1.0/include&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/lib/glib-2.0/include&quot;"/>
+                                                               </option>
+                                                               <option id="sbi.gnu.cpp.compiler.option.frameworks_cflags.core.528700311" superClass="sbi.gnu.cpp.compiler.option.frameworks_cflags.core" valueType="stringList">
+                                                                       <listOptionValue builtIn="false" value="${TC_COMPILER_MISC}"/>
+                                                                       <listOptionValue builtIn="false" value="${RS_COMPILER_MISC}"/>
+                                                                       <listOptionValue builtIn="false" value=" -fPIE"/>
+                                                                       <listOptionValue builtIn="false" value="--sysroot=&quot;${SBI_SYSROOT}&quot;"/>
+                                                               </option>
+                                                               <option id="gnu.cpp.compiler.option.include.paths.623797688" superClass="gnu.cpp.compiler.option.include.paths" valueType="includePath">
+                                                                       <listOptionValue builtIn="false" value="&quot;${workspace_loc:/${ProjName}/inc}&quot;"/>
+                                                               </option>
+                                                               <option id="sbi.gnu.cpp.compiler.option.frameworks.core.1909718066" superClass="sbi.gnu.cpp.compiler.option.frameworks.core" valueType="userObjs">
+                                                                       <listOptionValue builtIn="false" value="Native_API"/>
+                                                               </option>
+                                                               <inputType id="sbi.gnu.cpp.compiler.tizen.inputType.1912377546"/>
+                                                               <inputType id="cdt.managedbuild.tool.gnu.cpp.compiler.input.916984243" superClass="cdt.managedbuild.tool.gnu.cpp.compiler.input"/>
+                                                       </tool>
+                                                       <tool command="clang" id="org.tizen.nativecore.tool.sbi.gnu.c.compiler.2061633942" name="C Compiler" superClass="org.tizen.nativecore.tool.sbi.gnu.c.compiler">
+                                                               <option defaultValue="gnu.c.optimization.level.most" id="gnu.c.compiler.option.optimization.level.2022990414" name="Optimization Level" superClass="gnu.c.compiler.option.optimization.level" valueType="enumerated"/>
+                                                               <option id="sbi.gnu.c.compiler.option.debugging.level.2037589780" name="Debug level" superClass="sbi.gnu.c.compiler.option.debugging.level"/>
+                                                               <option id="sbi.gnu.c.compiler.option.debug.applog.930351060" name="Enable application logging (-D_APP_LOG)" superClass="sbi.gnu.c.compiler.option.debug.applog"/>
+                                                               <option id="sbi.gnu.c.compiler.option.623943791" superClass="sbi.gnu.c.compiler.option" valueType="userObjs">
+                                                                       <listOptionValue builtIn="false" value="mobile-2.4-emulator.core_llvm36.i386.core.app"/>
+                                                               </option>
+                                                               <option id="sbi.gnu.c.compiler.option.frameworks_inc.core.1091342970" superClass="sbi.gnu.c.compiler.option.frameworks_inc.core" valueType="includePath">
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/libxml2&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/appcore-agent&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/appfw&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/attach-panel&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/badge&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/base&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/cairo&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/calendar-service2&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/ckm&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/contacts-svc&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/content&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/context-service&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/dali&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/dali-toolkit&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/dbus-1.0&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/device&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/dlog&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/ecore-1&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/ecore-con-1&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/ecore-evas-1&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/ecore-file-1&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/ecore-imf-1&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/ecore-imf-evas-1&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/ecore-input-1&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/ecore-input-evas-1&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/ecore-ipc-1&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/ecore-x-1&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/e_dbus-1&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/edje-1&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/eet-1&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/efl-1&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/efl-extension&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/efreet-1&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/eina-1&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/eina-1/eina&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/eio-1&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/eldbus-1&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/elementary-1&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/embryo-1&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/eo-1&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/eom&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/ethumb-1&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/ethumb-client-1&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/evas-1&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/ewebkit2-0&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/feedback&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/fontconfig&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/freetype2&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/geofence&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/gio-unix-2.0&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/glib-2.0&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/harfbuzz&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/json-glib-1.0&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/location&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/maps&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/media&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/media-content&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/messaging&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/metadata-editor&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/minicontrol&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/minizip&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/network&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/notification&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/phonenumber-utils&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/sensor&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/shortcut&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/storage&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/system&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/telephony&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/ui&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/web&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/widget_service&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/widget_viewer_evas&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/include/wifi-direct&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/lib/dbus-1.0/include&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="&quot;${SBI_SYSROOT}/usr/lib/glib-2.0/include&quot;"/>
+                                                               </option>
+                                                               <option id="sbi.gnu.c.compiler.option.frameworks_cflags.core.1782808167" superClass="sbi.gnu.c.compiler.option.frameworks_cflags.core" valueType="stringList">
+                                                                       <listOptionValue builtIn="false" value="${TC_COMPILER_MISC}"/>
+                                                                       <listOptionValue builtIn="false" value="${RS_COMPILER_MISC}"/>
+                                                                       <listOptionValue builtIn="false" value=" -fPIE"/>
+                                                                       <listOptionValue builtIn="false" value="--sysroot=&quot;${SBI_SYSROOT}&quot;"/>
+                                                               </option>
+                                                               <option id="gnu.c.compiler.option.include.paths.499488519" superClass="gnu.c.compiler.option.include.paths" valueType="includePath">
+                                                                       <listOptionValue builtIn="false" value="&quot;${workspace_loc:/${ProjName}/inc}&quot;"/>
+                                                               </option>
+                                                               <option id="sbi.gnu.c.compiler.option.frameworks.core.120447946" superClass="sbi.gnu.c.compiler.option.frameworks.core" valueType="userObjs">
+                                                                       <listOptionValue builtIn="false" value="Native_API"/>
+                                                               </option>
+                                                               <inputType id="sbi.gnu.c.compiler.tizen.inputType.1431704404"/>
+                                                               <inputType id="cdt.managedbuild.tool.gnu.c.compiler.input.27305889" superClass="cdt.managedbuild.tool.gnu.c.compiler.input"/>
+                                                       </tool>
+                                                       <tool id="org.tizen.nativeide.tool.sbi.gnu.c.linker.base.267766539" name="C Linker" superClass="org.tizen.nativeide.tool.sbi.gnu.c.linker.base"/>
+                                                       <tool command="clang++" id="org.tizen.nativecore.tool.sbi.gnu.cpp.linker.1382202266" name="C++ Linker" superClass="org.tizen.nativecore.tool.sbi.gnu.cpp.linker">
+                                                               <option id="sbi.gnu.cpp.linker.option.frameworks_lflags.core.476062144" superClass="sbi.gnu.cpp.linker.option.frameworks_lflags.core" valueType="stringList">
+                                                                       <listOptionValue builtIn="false" value="${TC_LINKER_MISC}"/>
+                                                                       <listOptionValue builtIn="false" value="${RS_LINKER_MISC}"/>
+                                                                       <listOptionValue builtIn="false" value="-pie -lpthread "/>
+                                                                       <listOptionValue builtIn="false" value="-Xlinker -rpath=&quot;/home/developer/sdk_tools/lib&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="--sysroot=&quot;${SBI_SYSROOT}&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="-Xlinker --version-script=&quot;${PROJ_PATH}/.exportMap&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="-L&quot;${SBI_SYSROOT}/usr/lib&quot;"/>
+                                                                       <listOptionValue builtIn="false" value="$(RS_LIBRARIES)"/>
+                                                               </option>
+                                                               <option id="gnu.cpp.link.option.paths.29188932" superClass="gnu.cpp.link.option.paths" valueType="libPaths">
+                                                                       <listOptionValue builtIn="false" value="&quot;${workspace_loc:/${ProjName}/lib}&quot;"/>
+                                                               </option>
+                                                               <inputType id="cdt.managedbuild.tool.gnu.cpp.linker.input.140241049" superClass="cdt.managedbuild.tool.gnu.cpp.linker.input">
+                                                                       <additionalInput kind="additionalinputdependency" paths="$(USER_OBJS)"/>
+                                                                       <additionalInput kind="additionalinput" paths="$(LIBS)"/>
+                                                               </inputType>
+                                                       </tool>
+                                                       <tool command="i386-linux-gnueabi-as" id="org.tizen.nativeapp.tool.sbi.gnu.assembler.base.1380224608" name="Assembler" superClass="org.tizen.nativeapp.tool.sbi.gnu.assembler.base">
+                                                               <inputType id="cdt.managedbuild.tool.gnu.assembler.input.383736666" superClass="cdt.managedbuild.tool.gnu.assembler.input"/>
+                                                       </tool>
+                                                       <tool id="org.tizen.nativecore.tool.sbi.po.compiler.1356965384" name="PO Resource Compiler" superClass="org.tizen.nativecore.tool.sbi.po.compiler"/>
+                                                       <tool id="org.tizen.nativecore.tool.sbi.edc.compiler.1251472052" name="EDC Resource Compiler" superClass="org.tizen.nativecore.tool.sbi.edc.compiler"/>
+                                                       <tool id="org.tizen.nativecore.tool.fnmapgen.1001165225" name="C FN-Map Generator" superClass="org.tizen.nativecore.tool.fnmapgen"/>
+                                                       <tool id="org.tizen.nativecore.tool.fnmapgen.cpp.259998567" name="C++ FN-Map Generator" superClass="org.tizen.nativecore.tool.fnmapgen.cpp"/>
+                                                       <tool id="org.tizen.nativecore.tool.ast.277372493" name="C Static Analyzer" superClass="org.tizen.nativecore.tool.ast"/>
+                                                       <tool id="org.tizen.nativecore.tool.ast.cpp.616356266" name="C++ Static Analyzer" superClass="org.tizen.nativecore.tool.ast.cpp"/>
+                                                       <tool id="org.tizen.nativecore.tool.sbi.gnu.archiver.mergelib.1007103551" name="Archive Generator" superClass="org.tizen.nativecore.tool.sbi.gnu.archiver.mergelib"/>
+                                               </toolChain>
+                                       </folderInfo>
+                                       <sourceEntries>
+                                               <entry flags="VALUE_WORKSPACE_PATH|RESOLVED" kind="sourcePath" name="res"/>
+                                               <entry flags="VALUE_WORKSPACE_PATH|RESOLVED" kind="sourcePath" name="src"/>
+                                               <entry flags="VALUE_WORKSPACE_PATH|RESOLVED" kind="sourcePath" name="inc"/>
+                                       </sourceEntries>
+                               </configuration>
+                       </storageModule>
+                       <storageModule moduleId="org.eclipse.cdt.core.externalSettings"/>
+               </cconfiguration>
+       </storageModule>
+       <storageModule moduleId="cdtBuildSystem" version="4.0.0">
+               <project id="{TESTSUITE_NAME}.org.tizen.nativecore.target.sbi.gcc45.app.893663013" name="Tizen Core Application" projectType="org.tizen.nativecore.target.sbi.gcc45.app"/>
+       </storageModule>
+       <storageModule moduleId="com.samsung.tizen.nativeapp.projectInfo" version="1.0.0"/>
+       <storageModule moduleId="scannerConfiguration"/>
+       <storageModule moduleId="org.eclipse.cdt.core.LanguageSettingsProviders"/>
+</cproject>
diff --git a/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/plugin/native_templates/.exportMap b/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/plugin/native_templates/.exportMap
new file mode 100755 (executable)
index 0000000..43e310e
--- /dev/null
@@ -0,0 +1,4 @@
+{
+       global: main;
+       local: *;
+};
diff --git a/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/plugin/native_templates/.project b/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/plugin/native_templates/.project
new file mode 100755 (executable)
index 0000000..8b7ae50
--- /dev/null
@@ -0,0 +1,99 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+       <name>{TESTSUITE_NAME}</name>
+       <comment></comment>
+       <projects>
+       </projects>
+       <buildSpec>
+               <buildCommand>
+                       <name>org.eclipse.cdt.managedbuilder.core.genmakebuilder</name>
+                       <arguments>
+                               <dictionary>
+                                       <key>?name?</key>
+                                       <value></value>
+                               </dictionary>
+                               <dictionary>
+                                       <key>org.eclipse.cdt.make.core.append_environment</key>
+                                       <value>true</value>
+                               </dictionary>
+                               <dictionary>
+                                       <key>org.eclipse.cdt.make.core.autoBuildTarget</key>
+                                       <value>all</value>
+                               </dictionary>
+                               <dictionary>
+                                       <key>org.eclipse.cdt.make.core.buildArguments</key>
+                                       <value></value>
+                               </dictionary>
+                               <dictionary>
+                                       <key>org.eclipse.cdt.make.core.buildCommand</key>
+                                       <value>sbi-make</value>
+                               </dictionary>
+                               <dictionary>
+                                       <key>org.eclipse.cdt.make.core.buildLocation</key>
+                                       <value>${workspace_loc:/{TESTSUITE_NAME}/Debug}</value>
+                               </dictionary>
+                               <dictionary>
+                                       <key>org.eclipse.cdt.make.core.cleanBuildTarget</key>
+                                       <value>clean</value>
+                               </dictionary>
+                               <dictionary>
+                                       <key>org.eclipse.cdt.make.core.contents</key>
+                                       <value>org.eclipse.cdt.make.core.activeConfigSettings</value>
+                               </dictionary>
+                               <dictionary>
+                                       <key>org.eclipse.cdt.make.core.enableAutoBuild</key>
+                                       <value>true</value>
+                               </dictionary>
+                               <dictionary>
+                                       <key>org.eclipse.cdt.make.core.enableCleanBuild</key>
+                                       <value>true</value>
+                               </dictionary>
+                               <dictionary>
+                                       <key>org.eclipse.cdt.make.core.enableFullBuild</key>
+                                       <value>true</value>
+                               </dictionary>
+                               <dictionary>
+                                       <key>org.eclipse.cdt.make.core.fullBuildTarget</key>
+                                       <value>all</value>
+                               </dictionary>
+                               <dictionary>
+                                       <key>org.eclipse.cdt.make.core.stopOnError</key>
+                                       <value>true</value>
+                               </dictionary>
+                               <dictionary>
+                                       <key>org.eclipse.cdt.make.core.useDefaultBuildCmd</key>
+                                       <value>true</value>
+                               </dictionary>
+                       </arguments>
+               </buildCommand>
+               <buildCommand>
+                       <name>org.eclipse.cdt.managedbuilder.core.ScannerConfigBuilder</name>
+                       <triggers>full,incremental,</triggers>
+                       <arguments>
+                       </arguments>
+               </buildCommand>
+               <buildCommand>
+                       <name>org.tizen.nativecore.apichecker.core.builder</name>
+                       <arguments>
+                       </arguments>
+               </buildCommand>
+       </buildSpec>
+       <natures>
+               <nature>org.eclipse.cdt.core.cnature</nature>
+               <nature>org.eclipse.cdt.core.ccnature</nature>
+               <nature>org.eclipse.cdt.managedbuilder.core.managedBuildNature</nature>
+               <nature>org.eclipse.cdt.managedbuilder.core.ScannerConfigNature</nature>
+               <nature>org.tizen.nativecore.apichecker.core.tizenCppNature</nature>
+       </natures>
+       <filteredResources>
+               <filter>
+                       <id>1360216703005</id>
+                       <name></name>
+                       <type>26</type>
+                       <matcher>
+                               <id>org.eclipse.ui.ide.multiFilter</id>
+                               <arguments>1.0-projectRelativePath-matches-false-false-*/.tpk</arguments>
+                       </matcher>
+               </filter>
+       </filteredResources>
+</projectDescription>
diff --git a/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/plugin/native_templates/.tproject b/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/plugin/native_templates/.tproject
new file mode 100755 (executable)
index 0000000..7a02b61
--- /dev/null
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
+<tproject xmlns="http://www.tizen.org/tproject">
+    <platforms>
+        <platform>
+            <name>mobile-2.4</name>
+        </platform>
+    </platforms>
+</tproject>
diff --git a/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/plugin/native_templates/Build/appendix.mk b/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/plugin/native_templates/Build/appendix.mk
new file mode 100755 (executable)
index 0000000..fad5ae4
--- /dev/null
@@ -0,0 +1 @@
+# Appendix
diff --git a/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/plugin/native_templates/Build/basedef.mk b/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/plugin/native_templates/Build/basedef.mk
new file mode 100755 (executable)
index 0000000..1324388
--- /dev/null
@@ -0,0 +1,113 @@
+# Add inputs and outputs from these tool invocations to the build variables
+
+C_DEPS +=
+
+USES_EFL = yes
+USES_USR_INC = yes
+
+SYSROOT = $(SBI_SYSROOT)
+
+ifneq ($(strip $(SYSROOT)),)
+
+ifeq ($(strip $(USES_EFL)),yes)
+_EFL_INCS := \
+     ecore-1 \
+     ecore-audio-1 \
+     ecore-avahi-1 \
+     ecore-con-1 \
+     ecore-evas-1 \
+     ecore-fb-1 \
+     ecore-file-1  \
+     ecore-imf-1 \
+     ecore-imf-evas-1 \
+     ecore-input-1 \
+     ecore-input-evas-1 \
+     ecore-ipc-1 \
+     ecore-x-1 \
+     e_dbus-1 \
+     edje-1 \
+     eet-1 \
+     efl-1 \
+     efl-extension efl-extension/default efl-extension/circle \
+     efreet-1 \
+     eina-1 eina-1/eina \
+     eio-1 \
+     eldbus-1 \
+     elementary-1 \
+     embryo-1 \
+     eo-1 \
+     eom \
+     ethumb-1 \
+     ethumb-client-1 \
+     evas-1 \
+     ewebkit2-0
+_EFL_INC_ROOT := $(SYSROOT)/usr/include
+EFL_INCS := $(addprefix -I $(_EFL_INC_ROOT)/,$(_EFL_INCS))
+endif
+
+ifeq ($(strip $(USES_USR_INC)),yes)
+_USR_INCS := \
+     usr/include \
+     usr/include/AL \
+     usr/include/feedback \
+     usr/include/ui-extension \
+     usr/include/vconf \
+     usr/include/weconn \
+     usr/include/wipc \
+     usr/include/wnoti-service \
+     usr/include/appcore-agent \
+     usr/include/appcore-watch \
+     usr/include/appfw \
+     usr/include/badge \
+     usr/include/base \
+     usr/include/cairo \
+     usr/include/calendar-service2 \
+     usr/include/ckm \
+     usr/include/contacts-svc \
+     usr/include/content \
+     usr/include/context-manager \
+     usr/include/context-service \
+     usr/include/dali \
+     usr/include/dali-toolkit \
+     usr/include/dbus-1.0 \
+     usr/include/device \
+     usr/include/dlog \
+     usr/include/fontconfig \
+     usr/include/freetype2 \
+     usr/include/geofence \
+     usr/include/gio-unix-2.0 \
+     usr/include/glib-2.0 \
+     usr/include/json-glib-1.0 \
+     usr/include/json-glib-1.0/json-glib \
+     usr/include/libxml2 \
+     usr/include/location \
+     usr/include/maps \
+     usr/include/media \
+     usr/include/media-content \
+     usr/include/messaging \
+     usr/include/metadata-editor \
+     usr/include/minicontrol \
+     usr/include/minizip \
+     usr/include/network \
+     usr/include/notification \
+     usr/include/phonenumber-utils \
+     usr/include/sensor \
+     usr/include/shortcut \
+     usr/include/storage \
+     usr/include/system \
+     usr/include/telephony \
+     usr/include/ui \
+     usr/include/web \
+     usr/include/widget_service \
+     usr/include/widget_viewer_evas \
+     usr/include/wifi-direct \
+     usr/lib/dbus-1.0/include \
+     usr/lib/glib-2.0/include 
+_USR_INC_ROOT := $(SYSROOT)
+USR_INCS := $(addprefix -I $(_USR_INC_ROOT)/,$(_USR_INCS))
+endif
+
+PLATFORM_INCS = $(USR_INCS) $(EFL_INCS) \
+     -I"$(SDK_PATH)/library" 
+
+endif
diff --git a/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/plugin/native_templates/Build/flags.mk b/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/plugin/native_templates/Build/flags.mk
new file mode 100755 (executable)
index 0000000..3305cb8
--- /dev/null
@@ -0,0 +1,10 @@
+
+COMPILE_FLAGS = $(DEBUG_OP) $(OPTIMIZATION_OP) -Wall -c -fmessage-length=0 
+
+CPP_COMPILE_FLAGS = $(DEBUG_OP) $(OPTIMIZATION_OP) 
+
+LINK_FLAGS = 
+
+AR_FLAGS = 
+
+EDC_COMPILE_FLAGS = 
\ No newline at end of file
diff --git a/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/plugin/native_templates/Build/makefile b/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/plugin/native_templates/Build/makefile
new file mode 100755 (executable)
index 0000000..d0a02f2
--- /dev/null
@@ -0,0 +1,265 @@
+BUILD_SCRIPT_VERSION := 1.0.6
+
+BSLASH := \\#
+
+PROJ_ROOT := $(subst $(BSLASH),/,$(PROJPATH))
+
+-include $(PROJ_ROOT)/project_def.prop
+-include basedef.mk
+-include tooldef.mk
+-include flags.mk
+-include prepost.mk
+
+APPTYPE := $(type)
+
+OBJ_OUTPUT := $(OUTPUT_DIR)/objs
+
+OS_NAME = $(shell $(UNAME))
+
+ifneq ($(strip $(PLATFORM_INCS)),)
+PLATFORM_INCS_FILE := $(OBJ_OUTPUT)/platform_incs_file.inc 
+endif
+
+FIND_FILES = $(shell $(FIND) $(PROJ_ROOT)/$(dir $(1)) -type f -name $(notdir $(1)) -printf '$(dir $(1))%P ')
+
+#USER_SRCS2 := $(shell sed -n '/^\s*USER_SRCS\s*=/s/USER_SRCS\s*=\s*//gp' '$(PROJ_ROOT)/project_def.prop')
+USER_SRCS2 := $(shell sed --version)
+
+NORMAL_SRCS := $(filter-out %*.c %*.cpp,$(USER_SRCS))
+WIDLCARD_SRCS := $(filter %*.c %*.cpp,$(USER_SRCS))
+ALL_SRCS := $(NORMAL_SRCS) $(foreach var,$(WIDLCARD_SRCS),$(call FIND_FILES,$(var)))
+
+C_SRCS := $(filter %.c,$(ALL_SRCS))
+CPP_SRCS := $(filter %.cpp,$(ALL_SRCS))
+
+USER_EDCS := $(subst $(BSLASH),/,$(USER_EDCS))
+NORMAL_EDCS := $(filter-out %*.edc,$(USER_EDCS))
+WIDLCARD_EDCS := $(filter %*.edc,$(USER_EDCS))
+EDCS := $(NORMAL_EDCS) $(foreach var,$(WIDLCARD_EDCS),$(call FIND_FILES,$(var)))
+
+NORMAL_POS := $(filter-out %*.po,$(USER_POS))
+WIDLCARD_POS := $(filter %*.po,$(USER_POS))
+POS := $(NORMAL_POS) $(foreach var,$(WIDLCARD_POS),$(call FIND_FILES,$(var)))
+
+LIBPATHS := $(addprefix -L$(PROJ_ROOT)/,$(USER_LIB_DIRS)) \
+                       $(addprefix -L,$(USER_LIB_DIRS_ABS))
+LIBS += $(addprefix -l,$(USER_LIBS))
+UOBJS := $(addprefix $(PROJ_ROOT)/,$(USER_OBJS)) \
+                $(USER_OBJS_ABS)
+
+M_OPT = -MMD -MP -MF"$(@:%.o=%.d)"
+
+#LOWER_APPNAME := $(shell echo translit($(APPNAME),[A-Z],[a-z])|$(M4))
+LOWER_APPNAME := $(shell echo $(APPNAME)|$(TR) [A-Z] [a-z])
+
+ifeq ($(strip $(APPTYPE)),app)
+APPFILE := $(OUTPUT_DIR)/$(LOWER_APPNAME)
+endif
+ifeq ($(strip $(APPTYPE)),staticLib)
+APPFILE := $(OUTPUT_DIR)/lib$(LOWER_APPNAME).a
+endif
+ifeq ($(strip $(APPTYPE)),sharedLib)
+APPFILE := $(OUTPUT_DIR)/lib$(LOWER_APPNAME).so
+endif
+
+FUNC_C2O = $(patsubst %.c,$(OBJ_OUTPUT)/%.o,$(1))
+FUNC_CPP2O = $(patsubst %.cpp,$(OBJ_OUTPUT)/%.o,$(1))
+FUNC_EDC2EDJ = $(patsubst %.edc,$(OUTPUT_DIR)/%.edj,$(1))
+FUNC_PO2MO = $(patsubst %.po,$(OUTPUT_DIR)/res/locale/%/LC_MESSAGES/$(LOWER_APPNAME).mo,$(notdir $(1)))
+
+
+C_OBJS := $(call FUNC_C2O,$(C_SRCS)) 
+CPP_OBJS := $(call FUNC_CPP2O,$(CPP_SRCS)) 
+OBJS := $(C_OBJS) $(CPP_OBJS)
+EDJ_FILES := $(call FUNC_EDC2EDJ,$(EDCS))
+MO_FILES := $(call FUNC_PO2MO,$(POS))
+DEPS := $(OBJS:.o=.d)
+
+
+all : preproc $(APPFILE) secondary-outputs postproc
+
+ifneq ($(strip $(DEPS)),)
+-include $(DEPS)
+endif
+
+ifeq ($(strip $(APPTYPE)),app)
+$(APPFILE) : $(OBJS) $(UOBJS)
+       @echo '  Building target: $@'
+       @echo '  Invoking: C/C++ Linker'
+       @$(MKDIR) $(MKDIR_OP) $(subst $(BSLASH),/,$(@D))
+       $(CXX) -o "$(APPFILE)" $(OBJS) $(UOBJS) $(LIBPATHS) $(LIBS) $(LINK_FLAGS) $(TC_LINKER_MISC) $(RS_LINKER_MISC) -pie -lpthread -Xlinker -rpath="/home/developer/sdk_tools/lib" --sysroot="$(SYSROOT)" -Xlinker --version-script="$(PROJ_PATH)/.exportMap" -L"$(SBI_SYSROOT)/usr/lib" $(RS_LIBRARIES) -Xlinker -rpath="/opt/usr/apps/$(APPID)/lib" -Werror-implicit-function-declaration
+       @echo '  Finished building target: $@'
+endif
+ifeq ($(strip $(APPTYPE)),staticLib)
+$(APPFILE) : $(OBJS) $(UOBJS)
+       @echo '  Building target: $@'
+       @echo '  Invoking: Archive utility'
+       @$(MKDIR) $(MKDIR_OP) $(subst $(BSLASH),/,$(@D))
+       $(AR) -r "$(APPFILE)" $(OBJS) $(UOBJS) $(AR_FLAGS)
+       @echo '  Finished building target: $@'
+endif
+ifeq ($(strip $(APPTYPE)),sharedLib)
+$(APPFILE) : $(OBJS) $(UOBJS)
+       @echo '  Building target: $@'
+       @echo '  Invoking: C/C++ Linker'
+       @$(MKDIR) $(MKDIR_OP) $(subst $(BSLASH),/,$(@D))
+       $(CXX) -o "$(APPFILE)" $(OBJS) $(UOBJS) $(LIBPATHS) $(LIBS) $(LINK_FLAGS) $(TC_LINKER_MISC) $(RS_LINKER_MISC) -shared -lpthread --sysroot="$(SYSROOT)" -L"$(SYSROOT)/usr/lib" $(RS_LIBRARIES)
+       @echo '  Finished building target: $@'
+endif
+
+
+ifneq ($(strip $(C_SRCS)),)
+CDEFS += $(addprefix -D,$(USER_DEFS))
+CDEFS += $(addprefix -U,$(USER_UNDEFS))
+
+INCS := $(addprefix -I$(PROJ_ROOT)/,$(USER_INC_DIRS)) \
+               $(addprefix -I,$(USER_INC_DIRS_ABS)) \
+               $(addprefix -include$(PROJ_ROOT)/,$(USER_INC_FILES)) \
+               $(addprefix -include,$(USER_INC_FILES_ABS))
+
+$(C_OBJS) : $(OBJ_OUTPUT)/%.o : $(PROJ_ROOT)/%.c $(PLATFORM_INCS_FILE)  
+       @echo '  Building file: $<'
+       @echo '  Invoking: C Compiler'
+       @$(MKDIR) $(MKDIR_OP) $(subst $(BSLASH),/,$(@D))
+ifeq ($(strip $(APPTYPE)),sharedLib)
+       $(CC) -c $< -o $@ $(CDEFS) $(INCS) -I"pch" $(COMPILE_FLAGS) $(TC_COMPILER_MISC) $(RS_COMPILER_MISC) -fPIC --sysroot="$(SYSROOT)" -Werror-implicit-function-declaration $(M_OPT) @$(PLATFORM_INCS_FILE)
+else
+       $(CC) -c $< -o $@ $(CDEFS) $(INCS) -I"pch" $(COMPILE_FLAGS) $(TC_COMPILER_MISC) $(RS_COMPILER_MISC) -fPIE --sysroot="$(SYSROOT)" -Werror-implicit-function-declaration $(M_OPT) @$(PLATFORM_INCS_FILE)
+endif
+       @echo '  Finished building: $<'
+endif
+
+ifneq ($(strip $(CPP_SRCS)),)
+CPPDEFS += $(addprefix -D,$(USER_CPP_DEFS))
+CPPDEFS += $(addprefix -U,$(USER_CPP_UNDEFS))
+
+CPP_INCS := $(addprefix -I$(PROJ_ROOT)/,$(USER_CPP_INC_DIRS)) \
+               $(addprefix -I,$(USER_CPP_INC_DIRS_ABS)) \
+               $(addprefix -include$(PROJ_ROOT)/,$(USER_CPP_INC_FILES)) \
+               $(addprefix -include,$(USER_CPP_INC_FILES_ABS))
+               
+$(CPP_OBJS) : $(OBJ_OUTPUT)/%.o : $(PROJ_ROOT)/%.cpp $(PLATFORM_INCS_FILE)  
+       @echo '  Building file: $<'
+       @echo '  Invoking: C++ Compiler'
+       @$(MKDIR) $(MKDIR_OP) $(subst $(BSLASH),/,$(@D))
+ifeq ($(strip $(APPTYPE)),sharedLib)
+       $(CXX) -c $< -o $@ $(CPPDEFS) $(CPP_INCS) -I"pch" $(CPP_COMPILE_FLAGS) $(TC_COMPILER_MISC) $(RS_COMPILER_MISC) -fPIC --sysroot="$(SYSROOT)" -Werror-implicit-function-declaration $(M_OPT) @$(PLATFORM_INCS_FILE)
+else
+       $(CXX) -c $< -o $@ $(CPPDEFS) $(CPP_INCS) -I"pch" $(CPP_COMPILE_FLAGS) $(TC_COMPILER_MISC) $(RS_COMPILER_MISC) -fPIE --sysroot="$(SYSROOT)" -Werror-implicit-function-declaration $(M_OPT) @$(PLATFORM_INCS_FILE)
+endif
+       @echo '  Finished building: $<'
+endif
+
+preproc :
+ifneq ($(strip $(PREBUILD_COMMAND)),)
+ifneq ($(strip $(PREBUILD_DESC)),)
+       @echo $(PREBUILD_DESC)
+endif  
+       @echo $(shell $(PREBUILD_COMMAND))
+endif  
+       @$(MKDIR) $(MKDIR_OP) $(subst $(BSLASH),/,$(OBJ_OUTPUT))
+
+postproc :
+ifneq ($(strip $(POSTBUILD_COMMAND)),)
+ifneq ($(strip $(POSTBUILD_DESC)),)
+       @echo $(POSTBUILD_DESC)
+endif  
+       @echo $(shell $(POSTBUILD_COMMAND))
+endif  
+
+ifneq ($(strip $(PLATFORM_INCS)),)
+$(PLATFORM_INCS_FILE) :
+       @$(MKDIR) $(MKDIR_OP) $(subst $(BSLASH),/,$(@D))
+ifneq ($(findstring Linux,$(OS_NAME)),)
+       @echo $(PLATFORM_INCS) > $@
+else
+ifneq ($(findstring 3.82,$(MAKE_VERSION)),)
+       $(file > $@,$(PLATFORM_INCS))
+else
+       @echo $(PLATFORM_INCS) > $@
+endif   
+endif
+endif
+
+ALL_EDJ_FILES :=
+
+define EDJ_PROC
+ALL_EDCS := $$(subst $(BSLASH),/,$$($(2)))
+NORMAL_EDCS := $$(filter-out %*.edc,$$(ALL_EDCS))
+WIDLCARD_EDCS := $$(filter %*.edc,$$(ALL_EDCS))
+EDCS := $$(NORMAL_EDCS) $$(foreach var_edc,$$(WIDLCARD_EDCS),$$(call FIND_FILES,$$(var_edc)))
+
+ifneq ($$(strip $$(EDCS)),)
+EDJ_FILES := $$(call FUNC_EDC2EDJ,$$(EDCS))
+
+ALL_EDJ_FILES += $$(EDJ_FILES)
+
+EDC_$(1)_COMPILER_FLAGS := -id "$$(SDK_TOOLPATH)/enventor/share/enventor/images"
+EDC_$(1)_COMPILER_FLAGS += -sd "$$(SDK_TOOLPATH)/enventor/share/enventor/sounds"
+EDC_$(1)_COMPILER_FLAGS += -fd "$$(SDK_TOOLPATH)/enventor/share/enventor/fonts"
+
+ifneq ($$(strip $(3)),)
+EDC_$(1)_COMPILER_FLAGS += $$(addprefix -id $$(PROJ_PATH)/,$$($(3)))
+endif
+ifneq ($$(strip $(4)),)
+EDC_$(1)_COMPILER_FLAGS += $$(addprefix -id ,$$($(4)))
+endif
+ifneq ($$(strip $(5)),)
+EDC_$(1)_COMPILER_FLAGS += $$(addprefix -sd $$(PROJ_PATH)/,$$($(5)))
+endif
+ifneq ($$(strip $(6)),)
+EDC_$(1)_COMPILER_FLAGS += $$(addprefix -sd ,$$($(6)))
+endif
+ifneq ($$(strip $(7)),)
+EDC_$(1)_COMPILER_FLAGS += $$(addprefix -fd $$(PROJ_PATH)/,$$($(7)))
+endif
+ifneq ($$(strip $(8)),)
+EDC_$(1)_COMPILER_FLAGS += $$(addprefix -fd ,$$($(8)))
+endif
+
+$$(EDJ_FILES) : $$(OUTPUT_DIR)/%.edj : $$(PROJ_ROOT)/%.edc 
+       @echo '  Building file: $$<'
+       @echo '  Invoking: EDC Resource Compiler'
+       @$$(MKDIR) $$(MKDIR_OP) $$(subst $$(BSLASH),/,$$(@D))
+       $$(EDJE_CC) $$(EDC_$(1)_COMPILER_FLAGS) $$(CDEFS) "$$<" "$$@"
+       @echo '  Finished building: $$<'
+endif
+endef
+
+# Global EDCs
+ifneq ($(strip $(USER_EDCS)),)
+$(eval $(call EDJ_PROC,,USER_EDCS,USER_EDCS_IMAGE_DIRS,USER_EDCS_IMAGE_DIRS_ABS,USER_EDCS_SOUND_DIRS,USER_EDCS_SOUND_DIRS_ABS,USER_EDCS_FONT_DIRS,USER_EDCS_FONT_DIRS_ABS))
+endif
+
+# Individual EDCs
+ifneq ($(strip $(USER_EXT_EDC_KEYS)),)
+$(foreach var,$(USER_EXT_EDC_KEYS),$(eval $(call EDJ_PROC,$(var),USER_EXT_$(var)_EDCS,USER_EXT_$(var)_EDCS_IMAGE_DIRS,USER_EXT_$(var)_EDCS_IMAGE_DIRS_ABS,USER_EXT_$(var)_EDCS_SOUND_DIRS,USER_EXT_$(var)_EDCS_SOUND_DIRS_ABS,USER_EXT_$(var)_EDCS_FONT_DIRS,USER_EXT_$(var)_EDCS_FONT_DIRS_ABS)))
+endif
+
+
+ifneq ($(strip $(POS)),)
+define MO_RULE
+$(call FUNC_PO2MO,$(1)) : $(PROJ_ROOT)/$(1)
+       @echo '  Building file: $$<'
+       @echo '  Invoking: msgfmt String Formatter'
+       @$$(MKDIR) $$(MKDIR_OP) $$(subst $$(BSLASH),/,$$(@D))
+       $$(MSGFMT) -o $$@ $$<
+       @echo '  Finished building: $$<'
+endef
+
+$(foreach var,$(POS),$(eval $(call MO_RULE,$(var))))
+endif
+
+
+secondary-outputs : $(ALL_EDJ_FILES) $(MO_FILES)
+
+-include appendix.mk
+
+
+clean :
+       rm -f "$(APPFILE)"
+       rm -rf "$(OUTPUT_DIR)"
+
+
+version :
+       @echo $(BUILD_SCRIPT_VERSION)
diff --git a/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/plugin/native_templates/Build/prepost.mk b/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/plugin/native_templates/Build/prepost.mk
new file mode 100755 (executable)
index 0000000..6bb5e2f
--- /dev/null
@@ -0,0 +1,6 @@
+
+# Add pre/post build process
+PREBUILD_DESC = 
+PREBUILD_COMMAND = 
+POSTBUILD_DESC = 
+POSTBUILD_COMMAND = 
diff --git a/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/plugin/native_templates/Build/tooldef.mk b/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/plugin/native_templates/Build/tooldef.mk
new file mode 100755 (executable)
index 0000000..4244fb3
--- /dev/null
@@ -0,0 +1,61 @@
+# Add inputs and outputs from these tool invocations to the build variables
+
+ifeq ($(strip $(BUILD_CONFIG)),)
+BUILD_CONFIG = Debug
+endif
+
+ifeq ($(strip $(OUTPUT_DIR)),)
+OUTPUT_DIR := $(PROJPATH)/$(BUILD_CONFIG)
+endif
+
+
+ifneq ($(strip $(MKDIR_BIN)),)
+MKDIR = $(MKDIR_BIN)
+MKDIR_OP = -p
+else
+MKDIR = mkdir
+MKDIR_OP = -p
+endif
+
+ifneq ($(strip $(UNAME_BIN)),)
+UNAME = $(UNAME_BIN)
+else
+UNAME = uname
+endif
+
+ifneq ($(strip $(M4_BIN)),)
+M4 = $(M4_BIN)
+else
+M4 = m4
+endif
+
+ifneq ($(strip $(TR_BIN)),)
+TR = $(TR_BIN)
+else
+TR = tr
+endif
+
+ifneq ($(strip $(FIND_BIN)),)
+FIND = $(FIND_BIN)
+else
+FIND = find
+endif
+
+ifneq ($(strip $(GREP_BIN)),)
+GREP = $(GREP_BIN)
+else
+GREP = grep
+endif
+
+ifneq ($(strip $(EDJE_CC_BIN)),)
+EDJE_CC = $(EDJE_CC_BIN)
+else
+EDJE_CC = edje_cc
+endif
+
+ifneq ($(strip $(MSGFMT_BIN)),)
+MSGFMT = $(MSGFMT_BIN)
+else
+MSGFMT = msgfmt
+endif
+
diff --git a/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/plugin/native_templates/inc/assert.h b/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/plugin/native_templates/inc/assert.h
new file mode 100755 (executable)
index 0000000..594bf5c
--- /dev/null
@@ -0,0 +1,70 @@
+//
+// Copyright (c) 2014 Samsung Electronics Co., Ltd.
+//
+// Licensed under the Apache License, Version 2.0 (the License);
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//     http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+#ifndef _ASSERT_H_
+#define _ASSERT_H_
+#include <stdio.h>
+#include <stdlib.h>
+
+#define assert(exp) \
+    if (!(exp)) { \
+        fprintf(stderr, \
+            "\\n[TCT][%s][Line : %d] Assert Fail; Following expression is not true: %s\\n", __FILE__, __LINE__, #exp); \
+        return 1; \
+    }
+
+#define assert_eq(var, ref) \
+    if (var != ref) { \
+        fprintf(stderr, \
+            "\\n[TCT][%s][Line : %d] Assert fail; Values (%s) and (%s) are not equal\\n", __FILE__, __LINE__, #var, #ref); \
+        return 1; \
+    }
+
+#define assert_neq(var, ref) \
+   if (var == ref) { \
+        fprintf(stderr, \
+            "\\n[TCT][%s][Line : %d] Assert fail; Values (%s) and (%s) are equal\\n", __FILE__, __LINE__, #var, #ref); \
+        return 1; \
+    }
+
+#define assert_gt(var, ref) \
+    if (var <= ref) { \
+        fprintf(stderr, \
+            "\\n[TCT][%s][Line : %d] Assert fail; Values (%s) is not greater than (%s)\\n", __FILE__, __LINE__, #var, #ref); \
+        return 1; \
+    }
+
+#define assert_geq(var, ref) \
+    if (var < ref) { \
+        fprintf(stderr, \
+            "\\n[TCT][%s][Line : %d] Assert fail; Values (%s) is not greater than or equal to (%s)\\n", __FILE__, __LINE__, #var, #ref); \
+        return 1; \
+    }
+
+#define assert_lt(var, ref) \
+    if (var >= ref) { \
+        fprintf(stderr, \
+            "\\n[TCT][%s][Line : %d] Assert fail; Values (%s) is not lower than (%s)\\n", __FILE__, __LINE__, #var, #ref); \
+        return 1; \
+    }
+
+#define assert_leq(var, ref) \
+    if (var > ref) { \
+        fprintf(stderr, \
+            "\\n[TCT][%s][Line : %d] Assert fail; Values (%s) is not lower than or equal to (%s)\\n", __FILE__, __LINE__, #var, #ref); \
+        return 1; \
+    }
+
+#endif //  _ASSERT_H_
diff --git a/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/plugin/native_templates/inc/assert_common.h b/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/plugin/native_templates/inc/assert_common.h
new file mode 100755 (executable)
index 0000000..0a3e388
--- /dev/null
@@ -0,0 +1,83 @@
+#ifndef __ASSERT_COMMON_H__
+#define __ASSERT_COMMON_H__
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <app.h>
+
+int utc_result;
+
+#define assert_with_exit(exp) do { \
+               if (!(exp)) { \
+                       fprintf(stderr, \
+                               "Assert fail in %s:%d\n", __FILE__, __LINE__); \
+                       fprintf(stderr, \
+                               "Following expression is not true:\n" \
+                               "%s\n", #exp); \
+                       utc_result = 1; \
+                       ui_app_exit(); \
+                       return 1; \
+               } \
+       } while (0)
+
+#define assert_eq_with_exit(var, ref) do { \
+               if (var != ref) { \
+                       fprintf(stderr, \
+                               "Assert fail in %s:%d\n", __FILE__, __LINE__); \
+                       fprintf(stderr, \
+                               "Values \"%s\" and \"%s\" are not equal:\n" \
+                               "%s == %d, %s == %d\n", \
+                               #var, #ref, #var, (int)var, #ref, (int)ref); \
+                       utc_result = 1; \
+                       ui_app_exit(); \
+                       return 1; \
+               } \
+       } while (0)
+
+#define assert_neq_with_exit(var, ref) do { \
+               if (var == ref) { \
+                       fprintf(stderr, \
+                               "Assert fail in %s:%d\n", __FILE__, __LINE__); \
+                       fprintf(stderr, \
+                               "Values \"%s\" and \"%s\" are equal:\n" \
+                               "%s == %s == %d\n", \
+                               #var, #ref, #var, #ref, (int)ref); \
+                       utc_result = 1; \
+                       ui_app_exit(); \
+                       return 1; \
+               } \
+       } while (0)
+
+#define assert_eq_without_exit(var, ref) do { \
+               if (var != ref) { \
+                       fprintf(stderr, \
+                               "Assert fail in %s:%d\n", __FILE__, __LINE__); \
+                       fprintf(stderr, \
+                               "Values \"%s\" and \"%s\" are not equal:\n" \
+                               "%s == %d, %s == %d\n", \
+                               #var, #ref, #var, (int)var, #ref, (int)ref); \
+                       utc_result = 1; \
+                       return 1; \
+               } \
+       } while (0)
+
+#define assert_neq_without_exit(var, ref) do { \
+               if (var == ref) { \
+                       fprintf(stderr, \
+                               "Assert fail in %s:%d\n", __FILE__, __LINE__); \
+                       fprintf(stderr, \
+                               "Values \"%s\" and \"%s\" are equal:\n" \
+                               "%s == %s == %d\n", \
+                               #var, #ref, #var, #ref, (int)ref); \
+                       utc_result = 1; \
+                       return 1; \
+               } \
+       } while (0)
+
+#define normal_exit(result) do { \
+               utc_result = result; \
+               ui_app_exit(); \
+       } while (0)
+
+
+#endif /* __ASSERT_COMMON_H__ */
diff --git a/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/plugin/native_templates/inc/tct_common.h b/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/plugin/native_templates/inc/tct_common.h
new file mode 100755 (executable)
index 0000000..85fff6e
--- /dev/null
@@ -0,0 +1,190 @@
+//
+// Copyright (c) 2014 Samsung Electronics Co., Ltd.
+//
+// Licensed under the Apache License, Version 2.0 (the License);
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//     http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+#ifndef _TCT_COMMON_H_
+#define _TCT_COMMON_H_
+
+#include "assert.h"
+
+#include <malloc.h>
+#include <stdbool.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <unistd.h>
+#include <string.h>
+#include <sys/stat.h>
+#include <system_info.h>
+
+#define DEBUG 1
+#define ERR_LOG "/tmp/tclog"
+#define TC_RESULT "/tmp/tcresult"
+#define UTC_LOG "/tmp/utclog_core"
+#define CONFIGFILE_PATH "/tmp/TC_Config.txt"
+#define CONFIG_LINE_LEN_MAX                    2048
+#define CONFIG_VALUE_LEN_MAX           1024
+
+FILE *g_fpLog;
+FILE *g_fpLogDump;
+
+#define FPRINTF(...) {\
+       g_fpLog = fopen(ERR_LOG, "a");\
+       fprintf(g_fpLog, __VA_ARGS__);\
+       fclose(g_fpLog);\
+}
+
+#define DUMP_UTC_ERRLOG() {\
+       g_fpLogDump = freopen(ERR_LOG, "w", stderr);\
+       fflush(stderr);\
+}
+
+#define CLOSE_UTC_ERRLOG() {\
+       if(g_fpLogDump) \
+       {       fclose(g_fpLogDump); g_fpLogDump = NULL; }\
+}
+
+#define PRINT_UTC_LOG(...) {\
+       g_fpLog = fopen(UTC_LOG, "a");\
+       fprintf(g_fpLog, __VA_ARGS__);\
+       fclose(g_fpLog);\
+}
+
+
+#define PRINT_TC_RESULT(...) {\
+       g_fpLog = fopen(TC_RESULT, "w");\
+       fprintf(g_fpLog, __VA_ARGS__);\
+       fclose(g_fpLog);\
+}
+
+
+#define IS_FEATURE_SUPPORTED(feature_name, featureFlag, ModuleName)\
+{\
+       if ( !(TCTCheckSystemInfoFeatureSupported(feature_name, ModuleName)) )\
+{\
+       featureFlag = false;\
+}\
+       else\
+{\
+       featureFlag = true;\
+}\
+}
+
+#define PRINT_RESULT(eCompare, eRetVal, API, Error) {\
+       if ( eRetVal == eCompare )\
+{\
+       if ( DEBUG )\
+{\
+       FPRINTF("[Line : %d][%s] %s passed\\n", __LINE__, API_NAMESPACE, API);\
+}\
+}\
+       else \
+{\
+       FPRINTF("[Line : %d][%s] %s failed, error returned = %s [%d]\\n", __LINE__, API_NAMESPACE, API, Error, eRetVal);\
+       return 1;\
+}\
+}
+
+#define PRINT_RESULT_NORETURN(eCompare, eRetVal, API, Error) {\
+       if ( eRetVal == eCompare )\
+{\
+       if ( DEBUG )\
+{\
+       FPRINTF("[Line : %d][%s] %s passed\\n", __LINE__, API_NAMESPACE, API);\
+}\
+}\
+       else \
+{\
+       FPRINTF("[Line : %d][%s] %s failed, error returned = %s [%d]\\n", __LINE__, API_NAMESPACE, API, Error, eRetVal);\
+}\
+}
+
+#define PRINT_RESULT_CLEANUP(eCompare, eRetVal, API, Error, FreeResource) {\
+       if ( eRetVal == eCompare )\
+{\
+       if ( DEBUG )\
+{\
+       FPRINTF("[Line : %d][%s] %s passed\\n", __LINE__, API_NAMESPACE, API);\
+}\
+}\
+else \
+{\
+       FPRINTF("[Line : %d][%s] %s failed, error returned = %s [%d]\\n", __LINE__, API_NAMESPACE, API, Error, eRetVal);\
+       FreeResource;\
+       return 1;\
+}\
+}
+
+
+#define PRINT_RESULT(eCompare, eRetVal, API, Error) {\
+       if ( eRetVal == eCompare )\
+{\
+       if ( DEBUG )\
+{\
+       FPRINTF("[Line : %d][%s] %s passed\\n", __LINE__, API_NAMESPACE, API);\
+}\
+}\
+       else \
+{\
+       FPRINTF("[Line : %d][%s] %s failed, error returned = %s [%d]\\n", __LINE__, API_NAMESPACE, API, Error, eRetVal);\
+       return 1;\
+}\
+}
+
+
+#define CHECK_VALUE_STRING(StringVariable, API) {\
+       if ( StringVariable == NULL )\
+{\
+       FPRINTF("[Line : %d][%s] %s failed, error returned = value returned is NULL\\n", __LINE__, API_NAMESPACE, API);\
+       return 1;\
+}\
+       else if ( DEBUG )\
+{\
+       FPRINTF("[Line : %d][%s] value returned = %s\\n", __LINE__, API_NAMESPACE, StringVariable);\
+}\
+       free(StringVariable);\
+       StringVariable = NULL;\
+}
+
+#define CHECK_VALUE_INT(Variable, API) {\
+       if ( Variable == 0 )\
+{\
+       FPRINTF("[Line : %d][%s] %s failed, error returned = value returned is Zero\\n", __LINE__, API_NAMESPACE, API);\
+       return 1;\
+}\
+       else if ( DEBUG )\
+{\
+       FPRINTF("[Line : %d][%s] value returned = %d\\n", __LINE__, API_NAMESPACE, Variable);\
+}\
+}
+
+#define CHECK_HANDLE(Handle, API) {\
+       if ( Handle == NULL )\
+{\
+       FPRINTF("[Line : %d][%s] %s failed, error returned = Handle returned is NULL\\n", __LINE__, API_NAMESPACE, API);\
+       return 1;\
+}\
+}
+
+#define FREE_MEMORY(buffer) {\
+       if ( buffer != NULL )\
+{\
+       free(buffer);\
+       buffer = NULL;\
+}\
+}
+
+bool TCTCheckSystemInfoFeatureSupported(char* pszKey, char* pszModuleName);
+char* TCTSystemInfoGetError(int nRet);
+bool GetValueFromConfigFile(char* pstrKeyString, char* pstrValue, char* pstrModule);
+#endif // _TCT_COMMON_H_
diff --git a/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/plugin/native_templates/inc/testcase.h b/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/plugin/native_templates/inc/testcase.h
new file mode 100755 (executable)
index 0000000..63584c9
--- /dev/null
@@ -0,0 +1,33 @@
+//
+// Copyright (c) 2014 Samsung Electronics Co., Ltd.
+//
+// Licensed under the Apache License, Version 2.0 (the License);
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//     http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+#ifndef _TESTCASE_H_
+#define _TESTCASE_H_
+
+/* pointer to startup/cleanup functions */
+typedef void (*void_fun_ptr)(void);
+
+/* pointer to testcase functions */
+typedef int (*tc_fun_ptr)(void);
+
+/* struct describing specific testcase */
+typedef struct testcase_s {
+    const char* name;
+    tc_fun_ptr function;
+    void_fun_ptr startup;
+    void_fun_ptr cleanup;
+} testcase;
+
+#endif // _TESTCASE_H_
diff --git a/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/plugin/native_templates/inc/{TESTSUITE_NAME}.h b/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/plugin/native_templates/inc/{TESTSUITE_NAME}.h
new file mode 100755 (executable)
index 0000000..f88b5ce
--- /dev/null
@@ -0,0 +1,27 @@
+//
+// Copyright (c) 2014 Samsung Electronics Co., Ltd.
+//
+// Licensed under the Apache License, Version 2.0 (the License);
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//     http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+#ifndef __{TESTSUITE_NAME}_H__
+#define __{TESTSUITE_NAME}_H__
+
+#include "testcase.h"
+#include "tct_common.h"
+
+
+testcase tc_array[] = {
+    {NULL, NULL}
+};
+
+#endif
diff --git a/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/plugin/native_templates/project_def.prop b/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/plugin/native_templates/project_def.prop
new file mode 100755 (executable)
index 0000000..9156e17
--- /dev/null
@@ -0,0 +1,61 @@
+
+# Project Name
+APPNAME = {TESTSUITE_NAME}
+
+# Project Type
+type = app
+
+# Project Profile
+profile = mobile-2.4
+
+# C Sources
+USER_SRCS = src/tct_common.c src/{TESTSUITE_NAME}.c
+
+# EDC Sources
+USER_EDCS =  
+
+# PO Sources
+USER_POS = 
+
+# User Defines
+USER_DEFS = 
+USER_CPP_DEFS = 
+
+# User Undefines
+USER_UNDEFS = 
+USER_CPP_UNDEFS = 
+
+# User Libraries
+USER_LIBS = 
+
+# User Objects
+USER_OBJS = 
+USER_OBJS_ABS = 
+
+# User Includes
+## C Compiler
+USER_INC_DIRS = inc 
+USER_INC_DIRS_ABS = 
+USER_INC_FILES = 
+USER_INC_FILES_ABS = 
+## C++ Compiler
+USER_CPP_INC_DIRS = 
+USER_CPP_INC_DIRS_ABS = 
+USER_CPP_INC_FILES = 
+USER_CPP_INC_FILES_ABS = 
+
+# User Library Path
+USER_LIB_DIRS = 
+USER_LIB_DIRS_ABS = 
+
+# EDC Resource Path
+USER_EDCS_IMAGE_DIRS = 
+USER_EDCS_IMAGE_DIRS_ABS = 
+USER_EDCS_SOUND_DIRS = 
+USER_EDCS_SOUND_DIRS_ABS = 
+USER_EDCS_FONT_DIRS = 
+USER_EDCS_FONT_DIRS_ABS = 
+
+# EDC Flags
+USER_EXT_EDC_KEYS = 
+
diff --git a/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/plugin/native_templates/shared/res/res/org.tizen.helloworld-1.0.0-arm.tpk b/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/plugin/native_templates/shared/res/res/org.tizen.helloworld-1.0.0-arm.tpk
new file mode 100755 (executable)
index 0000000..502b223
Binary files /dev/null and b/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/plugin/native_templates/shared/res/res/org.tizen.helloworld-1.0.0-arm.tpk differ
diff --git a/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/plugin/native_templates/shared/res/res/org.tizen.helloworld-1.0.0-i386.tpk b/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/plugin/native_templates/shared/res/res/org.tizen.helloworld-1.0.0-i386.tpk
new file mode 100755 (executable)
index 0000000..8569cb7
Binary files /dev/null and b/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/plugin/native_templates/shared/res/res/org.tizen.helloworld-1.0.0-i386.tpk differ
diff --git a/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/plugin/native_templates/shared/res/res/org.tizen.helloworld2-1.0.0-arm.tpk b/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/plugin/native_templates/shared/res/res/org.tizen.helloworld2-1.0.0-arm.tpk
new file mode 100755 (executable)
index 0000000..757c942
Binary files /dev/null and b/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/plugin/native_templates/shared/res/res/org.tizen.helloworld2-1.0.0-arm.tpk differ
diff --git a/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/plugin/native_templates/shared/res/res/org.tizen.helloworld2-1.0.0-i386.tpk b/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/plugin/native_templates/shared/res/res/org.tizen.helloworld2-1.0.0-i386.tpk
new file mode 100755 (executable)
index 0000000..67e98f2
Binary files /dev/null and b/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/plugin/native_templates/shared/res/res/org.tizen.helloworld2-1.0.0-i386.tpk differ
diff --git a/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/plugin/native_templates/shared/res/{TESTSUITE_NAME}.png b/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/plugin/native_templates/shared/res/{TESTSUITE_NAME}.png
new file mode 100755 (executable)
index 0000000..9765b1b
Binary files /dev/null and b/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/plugin/native_templates/shared/res/{TESTSUITE_NAME}.png differ
diff --git a/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/plugin/native_templates/src/tct_common.c b/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/plugin/native_templates/src/tct_common.c
new file mode 100755 (executable)
index 0000000..51059ae
--- /dev/null
@@ -0,0 +1,140 @@
+//
+// Copyright (c) 2014 Samsung Electronics Co., Ltd.
+//
+// Licensed under the Apache License, Version 2.0 (the License);
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//     http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+
+#include "tct_common.h"
+
+/**
+* @function            TCTCheckSystemInfoFeatureSupported
+* @description         Check the supported feature for the given key value
+* @parameter           char* pszKey : key value, char* pszModuleName : module name
+* @return                      true if supported else false
+*/
+bool TCTCheckSystemInfoFeatureSupported(char* pszKey, char* pszModuleName)
+{
+       if ( NULL == pszKey )
+       {
+               FPRINTF("[Line : %d][%s] Null key value passed to function : TCTCheckSystemInfoFeatureSupported\\n", __LINE__, pszModuleName);
+               return false;
+       }
+
+       bool bValue = false;
+       int nRet = system_info_get_platform_bool (pszKey, &bValue);
+
+       if ( nRet != SYSTEM_INFO_ERROR_NONE )
+       {
+               FPRINTF("[Line : %d][%s] system_info_get_platform_bool returned (error = %s) for (key = %s)\\n", __LINE__, pszModuleName, TCTSystemInfoGetError(nRet), pszKey);
+               return false;
+       }
+
+       if ( bValue )
+       {
+               FPRINTF("[Line : %d][%s] Feature %s is supported\\n", __LINE__, pszModuleName, pszKey);
+       }
+       else
+       {
+               FPRINTF("[Line : %d][%s] Feature %s is not supported\\n", __LINE__, pszModuleName, pszKey);
+       }
+
+
+       return bValue;
+}
+
+/**
+* @function            TCTSystemInfoGetError
+* @description         Maps error enums to string values
+* @parameter           nRet : error code returned
+* @return                      error string
+*/
+char* TCTSystemInfoGetError(int nRet)
+{
+       char *szErrorVal = NULL;
+
+       switch ( nRet )
+       {
+       case SYSTEM_INFO_ERROR_NONE:                            szErrorVal = "SYSTEM_INFO_ERROR_NONE";                                  break;
+       case SYSTEM_INFO_ERROR_INVALID_PARAMETER:       szErrorVal = "SYSTEM_INFO_ERROR_INVALID_PARAMETER";             break;
+       case SYSTEM_INFO_ERROR_IO_ERROR:                        szErrorVal = "SYSTEM_INFO_ERROR_IO_ERROR";                              break;
+       case SYSTEM_INFO_ERROR_OUT_OF_MEMORY :          szErrorVal = "SYSTEM_INFO_ERROR_OUT_OF_MEMORY";                 break;
+       default :                                                                       szErrorVal = "Unknown error";                                                   break;
+       }
+
+       return szErrorVal;
+}
+
+/**
+* @function            GetValueFromConfigFile
+* @description         Get the corresponding value for a key from config file
+* @parameter           pstrKeyString : Key, pstrValue : Value
+* @return                      true for success, false for failure
+*/ 
+bool GetValueFromConfigFile(char* pstrKeyString, char* pstrValue, char* pstrModule)
+{
+       if ( NULL == pstrKeyString )
+       {
+               FPRINTF("[Line : %d][%s] The key string provided to fetch config file value is null\\n", __LINE__, pstrModule);
+               return false;
+       }
+
+
+       FILE* pfilePtr = fopen(CONFIGFILE_PATH, "r");
+       if ( NULL == pfilePtr )
+       {
+               FPRINTF("[Line : %d][%s] Unable to open configuration file : %s\\n", __LINE__, pstrModule, CONFIGFILE_PATH);
+               return false;
+       }
+
+       char* pszKey = NULL;
+       char* pszValue = NULL;
+       char* pszDelim = "=\n";
+       char szConfigLine[CONFIG_LINE_LEN_MAX] = {0,};
+
+       while ( !feof(pfilePtr) )
+       {
+               if ( fgets(szConfigLine, CONFIG_LINE_LEN_MAX, pfilePtr) != NULL )
+               {
+                       pszKey = strtok(szConfigLine, pszDelim);
+                       pszValue = strtok(NULL, pszDelim);
+
+                       if ( 0 == strcmp(pszKey, pstrKeyString) )
+                       {
+#if DEBUG
+                               FPRINTF("[Line : %d][%s][Key = %s;Config value = %s]\\n", __LINE__, pstrModule, pszKey, pszValue);
+#endif
+                               break;
+                       }
+
+                       pszKey = NULL;
+                       pszValue = NULL;
+               }
+       }
+
+       fclose(pfilePtr);
+       if ( NULL == pszValue )
+       {
+               FPRINTF("[Line : %d][%s][Key = %s;Unable to retrieve config value for this key. Check key at config file location : %s]\\n", __LINE__, pstrModule, pstrKeyString, CONFIGFILE_PATH);
+               return false;
+       }
+
+       if (strlen(pszValue) >= CONFIG_VALUE_LEN_MAX )
+       {
+               FPRINTF("[Line : %d][%s][Key = %s;Config Value should be less than %d characters in length]\\n", __LINE__, pstrModule, pszKey, CONFIG_VALUE_LEN_MAX);
+               return false;
+       }
+
+       memset(pstrValue, 0, CONFIG_VALUE_LEN_MAX);
+       strcpy(pstrValue, pszValue);
+       return true;
+}
diff --git a/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/plugin/native_templates/src/{TESTSUITE_NAME}.c b/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/plugin/native_templates/src/{TESTSUITE_NAME}.c
new file mode 100755 (executable)
index 0000000..42d5fe3
--- /dev/null
@@ -0,0 +1,122 @@
+//
+// Copyright (c) 2014 Samsung Electronics Co., Ltd.
+//
+// Licensed under the Apache License, Version 2.0 (the License);
+// you may not use this g_TCFILE except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//     http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+#include <stdio.h>
+#include <string.h>
+#include "{TESTSUITE_NAME}.h"
+#include <malloc.h>
+#include <unistd.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <sys/wait.h>
+#include <glib.h>
+#include <stdbool.h>
+#include "tct_common.h"
+#include <app.h>
+#include <dlog.h>
+#include <errno.h>
+
+#include <Elementary.h>
+#include <efl_extension.h>
+
+typedef struct appdata {
+       Evas_Object *win;
+       Evas_Object *conform;
+       Evas_Object *label;
+} appdata_s;
+
+static bool app_create(void *data)
+{
+       return true;
+}
+
+static void app_control(app_control_h app_control, void *data)
+{
+       char* pszGetTCName = NULL;
+       int i=0, result=0, nRet=0;
+       nRet = app_control_get_extra_data(app_control, "testcase_name", &pszGetTCName);
+       if(nRet != APP_CONTROL_ERROR_NONE)
+       {
+               dlog_print(DLOG_ERROR, "NativeTCT", "[%s:%d] app_control_get_extra_data returns error = %d", __FUNCTION__, __LINE__, nRet);
+               PRINT_UTC_LOG("\\n[%s][Line : %d]Unable to fetch test case name: app_control_get_extra_data API call fails\\n", __FILE__, __LINE__);
+               PRINT_TC_RESULT("%d",1);
+               FREE_MEMORY(pszGetTCName);
+               return;
+       }
+
+       dlog_print(DLOG_INFO, "NativeTCT", "[%s:%d] Executing TC Name = %s", __FUNCTION__, __LINE__, pszGetTCName);
+       for ( i = 0; tc_array[i].name; i++ )
+       {
+               if ( 0 == strncmp(pszGetTCName, tc_array[i].name, strlen(pszGetTCName)) )
+               {
+                       DUMP_UTC_ERRLOG();
+                       if ( tc_array[i].startup )
+                       {
+                               dlog_print(DLOG_INFO, "NativeTCT", "%s : Start up", pszGetTCName);
+                               tc_array[i].startup();
+                       }
+
+                       dlog_print(DLOG_INFO, "NativeTCT", "%s : Body", pszGetTCName);
+                       result = tc_array[i].function();
+                       dlog_print(DLOG_INFO, "NativeTCT", "%s returns value = %d", pszGetTCName, result);
+
+                       if ( tc_array[i].cleanup )
+                       {
+                               dlog_print(DLOG_INFO, "NativeTCT", "%s : Clean up", pszGetTCName);
+                               tc_array[i].cleanup();
+                       }
+
+                       CLOSE_UTC_ERRLOG();
+                       PRINT_TC_RESULT("%d",result);
+                       FREE_MEMORY(pszGetTCName);
+                       return;
+               }
+       }
+
+       dlog_print(DLOG_ERROR, "NativeTCT", "[%s:%d] Unable to execute %s : Unknown Test Case Name", __FUNCTION__, __LINE__, pszGetTCName);
+       PRINT_UTC_LOG("\\n[%s][Line : %d]Unable to execute %s : Unknown Test Case Name\\n", __FILE__, __LINE__, pszGetTCName);
+       PRINT_TC_RESULT("%d",1);
+       FREE_MEMORY(pszGetTCName);
+       return;
+}
+
+static void app_terminate(void *data)
+{
+       dlog_print(DLOG_INFO, "NativeTCT", "[%s:%d] Application Package is now Terminating", __FUNCTION__, __LINE__);
+}
+
+int main(int argc, char *argv[])
+{
+       int ret = 0;
+       appdata_s ad = {0,};
+
+       ui_app_lifecycle_callback_s event_callback = {0,};
+       event_callback.create = app_create;
+       event_callback.terminate = app_terminate;
+       event_callback.app_control = app_control;
+
+       dlog_print(DLOG_INFO, "NativeTCT", "[%s:%d] Application Main Function is Invoked", __FUNCTION__, __LINE__);
+       ret = ui_app_main(argc, argv, &event_callback, &ad);
+       if (ret != APP_ERROR_NONE)
+       {
+               dlog_print(DLOG_ERROR, "NativeTCT", "Application ui_app_main call gets failed. err = %d", ret);
+               PRINT_UTC_LOG("\\n[%s][Line : %d]Application ui_app_main call gets failed. err = %d\\n", __FILE__, __LINE__, ret);
+               PRINT_TC_RESULT("%d",1);
+               return ret;
+       }
+
+       dlog_print(DLOG_INFO, "NativeTCT", "[%s:%d] Application Package is Terminated", __FUNCTION__, __LINE__);
+       return ret;
+}
diff --git a/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/plugin/native_templates/tizen-manifest.xml b/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/plugin/native_templates/tizen-manifest.xml
new file mode 100755 (executable)
index 0000000..1af5391
--- /dev/null
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="utf-8"?>
+<manifest xmlns="http://tizen.org/ns/packages" api-version="2.4" package="org.tizen.{TESTSUITE_NAME}" version="1.0.0">
+       <profile name="mobile" />
+       <ui-application appid="org.tizen.{TESTSUITE_NAME}" exec="{TESTSUITE_NAME}" type="capp" multiple="false" taskmanage="true" nodisplay="false">
+               <icon>{TESTSUITE_NAME}.png</icon>
+               <label>{TESTSUITE_NAME}</label>
+       </ui-application>
+   <privileges>
+               <privilege></privilege>
+    </privileges>
+</manifest>
diff --git a/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/plugin/web_templates/COPYING b/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/plugin/web_templates/COPYING
new file mode 100755 (executable)
index 0000000..9485674
--- /dev/null
@@ -0,0 +1,25 @@
+Copyright (c) 2015 Samsung Electronics Co.
+
+Redistribution and use in source and binary forms, with or without modification, 
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list 
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice, 
+  this list of conditions and the following disclaimer in the documentation 
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors 
+  may be used to endorse or promote products derived from this work without 
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS" 
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT, 
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, 
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY 
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING 
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, 
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
diff --git a/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/plugin/web_templates/LICENSE.Apache-2.0 b/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/plugin/web_templates/LICENSE.Apache-2.0
new file mode 100755 (executable)
index 0000000..d645695
--- /dev/null
@@ -0,0 +1,202 @@
+
+                                 Apache License
+                           Version 2.0, January 2004
+                        http://www.apache.org/licenses/
+
+   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+   1. Definitions.
+
+      "License" shall mean the terms and conditions for use, reproduction,
+      and distribution as defined by Sections 1 through 9 of this document.
+
+      "Licensor" shall mean the copyright owner or entity authorized by
+      the copyright owner that is granting the License.
+
+      "Legal Entity" shall mean the union of the acting entity and all
+      other entities that control, are controlled by, or are under common
+      control with that entity. For the purposes of this definition,
+      "control" means (i) the power, direct or indirect, to cause the
+      direction or management of such entity, whether by contract or
+      otherwise, or (ii) ownership of fifty percent (50%) or more of the
+      outstanding shares, or (iii) beneficial ownership of such entity.
+
+      "You" (or "Your") shall mean an individual or Legal Entity
+      exercising permissions granted by this License.
+
+      "Source" form shall mean the preferred form for making modifications,
+      including but not limited to software source code, documentation
+      source, and configuration files.
+
+      "Object" form shall mean any form resulting from mechanical
+      transformation or translation of a Source form, including but
+      not limited to compiled object code, generated documentation,
+      and conversions to other media types.
+
+      "Work" shall mean the work of authorship, whether in Source or
+      Object form, made available under the License, as indicated by a
+      copyright notice that is included in or attached to the work
+      (an example is provided in the Appendix below).
+
+      "Derivative Works" shall mean any work, whether in Source or Object
+      form, that is based on (or derived from) the Work and for which the
+      editorial revisions, annotations, elaborations, or other modifications
+      represent, as a whole, an original work of authorship. For the purposes
+      of this License, Derivative Works shall not include works that remain
+      separable from, or merely link (or bind by name) to the interfaces of,
+      the Work and Derivative Works thereof.
+
+      "Contribution" shall mean any work of authorship, including
+      the original version of the Work and any modifications or additions
+      to that Work or Derivative Works thereof, that is intentionally
+      submitted to Licensor for inclusion in the Work by the copyright owner
+      or by an individual or Legal Entity authorized to submit on behalf of
+      the copyright owner. For the purposes of this definition, "submitted"
+      means any form of electronic, verbal, or written communication sent
+      to the Licensor or its representatives, including but not limited to
+      communication on electronic mailing lists, source code control systems,
+      and issue tracking systems that are managed by, or on behalf of, the
+      Licensor for the purpose of discussing and improving the Work, but
+      excluding communication that is conspicuously marked or otherwise
+      designated in writing by the copyright owner as "Not a Contribution."
+
+      "Contributor" shall mean Licensor and any individual or Legal Entity
+      on behalf of whom a Contribution has been received by Licensor and
+      subsequently incorporated within the Work.
+
+   2. Grant of Copyright License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      copyright license to reproduce, prepare Derivative Works of,
+      publicly display, publicly perform, sublicense, and distribute the
+      Work and such Derivative Works in Source or Object form.
+
+   3. Grant of Patent License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      (except as stated in this section) patent license to make, have made,
+      use, offer to sell, sell, import, and otherwise transfer the Work,
+      where such license applies only to those patent claims licensable
+      by such Contributor that are necessarily infringed by their
+      Contribution(s) alone or by combination of their Contribution(s)
+      with the Work to which such Contribution(s) was submitted. If You
+      institute patent litigation against any entity (including a
+      cross-claim or counterclaim in a lawsuit) alleging that the Work
+      or a Contribution incorporated within the Work constitutes direct
+      or contributory patent infringement, then any patent licenses
+      granted to You under this License for that Work shall terminate
+      as of the date such litigation is filed.
+
+   4. Redistribution. You may reproduce and distribute copies of the
+      Work or Derivative Works thereof in any medium, with or without
+      modifications, and in Source or Object form, provided that You
+      meet the following conditions:
+
+      (a) You must give any other recipients of the Work or
+          Derivative Works a copy of this License; and
+
+      (b) You must cause any modified files to carry prominent notices
+          stating that You changed the files; and
+
+      (c) You must retain, in the Source form of any Derivative Works
+          that You distribute, all copyright, patent, trademark, and
+          attribution notices from the Source form of the Work,
+          excluding those notices that do not pertain to any part of
+          the Derivative Works; and
+
+      (d) If the Work includes a "NOTICE" text file as part of its
+          distribution, then any Derivative Works that You distribute must
+          include a readable copy of the attribution notices contained
+          within such NOTICE file, excluding those notices that do not
+          pertain to any part of the Derivative Works, in at least one
+          of the following places: within a NOTICE text file distributed
+          as part of the Derivative Works; within the Source form or
+          documentation, if provided along with the Derivative Works; or,
+          within a display generated by the Derivative Works, if and
+          wherever such third-party notices normally appear. The contents
+          of the NOTICE file are for informational purposes only and
+          do not modify the License. You may add Your own attribution
+          notices within Derivative Works that You distribute, alongside
+          or as an addendum to the NOTICE text from the Work, provided
+          that such additional attribution notices cannot be construed
+          as modifying the License.
+
+      You may add Your own copyright statement to Your modifications and
+      may provide additional or different license terms and conditions
+      for use, reproduction, or distribution of Your modifications, or
+      for any such Derivative Works as a whole, provided Your use,
+      reproduction, and distribution of the Work otherwise complies with
+      the conditions stated in this License.
+
+   5. Submission of Contributions. Unless You explicitly state otherwise,
+      any Contribution intentionally submitted for inclusion in the Work
+      by You to the Licensor shall be under the terms and conditions of
+      this License, without any additional terms or conditions.
+      Notwithstanding the above, nothing herein shall supersede or modify
+      the terms of any separate license agreement you may have executed
+      with Licensor regarding such Contributions.
+
+   6. Trademarks. This License does not grant permission to use the trade
+      names, trademarks, service marks, or product names of the Licensor,
+      except as required for reasonable and customary use in describing the
+      origin of the Work and reproducing the content of the NOTICE file.
+
+   7. Disclaimer of Warranty. Unless required by applicable law or
+      agreed to in writing, Licensor provides the Work (and each
+      Contributor provides its Contributions) on an "AS IS" BASIS,
+      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+      implied, including, without limitation, any warranties or conditions
+      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+      PARTICULAR PURPOSE. You are solely responsible for determining the
+      appropriateness of using or redistributing the Work and assume any
+      risks associated with Your exercise of permissions under this License.
+
+   8. Limitation of Liability. In no event and under no legal theory,
+      whether in tort (including negligence), contract, or otherwise,
+      unless required by applicable law (such as deliberate and grossly
+      negligent acts) or agreed to in writing, shall any Contributor be
+      liable to You for damages, including any direct, indirect, special,
+      incidental, or consequential damages of any character arising as a
+      result of this License or out of the use or inability to use the
+      Work (including but not limited to damages for loss of goodwill,
+      work stoppage, computer failure or malfunction, or any and all
+      other commercial damages or losses), even if such Contributor
+      has been advised of the possibility of such damages.
+
+   9. Accepting Warranty or Additional Liability. While redistributing
+      the Work or Derivative Works thereof, You may choose to offer,
+      and charge a fee for, acceptance of support, warranty, indemnity,
+      or other liability obligations and/or rights consistent with this
+      License. However, in accepting such obligations, You may act only
+      on Your own behalf and on Your sole responsibility, not on behalf
+      of any other Contributor, and only if You agree to indemnify,
+      defend, and hold each Contributor harmless for any liability
+      incurred by, or claims asserted against, such Contributor by reason
+      of your accepting any such warranty or additional liability.
+
+   END OF TERMS AND CONDITIONS
+
+   APPENDIX: How to apply the Apache License to your work.
+
+      To apply the Apache License to your work, attach the following
+      boilerplate notice, with the fields enclosed by brackets "[]"
+      replaced with your own identifying information. (Don't include
+      the brackets!)  The text should be enclosed in the appropriate
+      comment syntax for the file format. We also recommend that a
+      file or class name and description of purpose be included on the
+      same "printed page" as the copyright notice for easier
+      identification within third-party archives.
+
+   Copyright [yyyy] [name of copyright owner]
+
+   Licensed under the Apache License, Version 2.0 (the "License");
+   you may not use this file except in compliance with the License.
+   You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
diff --git a/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/plugin/web_templates/Makefile.am b/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/plugin/web_templates/Makefile.am
new file mode 100755 (executable)
index 0000000..0062d68
--- /dev/null
@@ -0,0 +1,4 @@
+commondir = resources webrunner
+SUBDIRS = testcase $(commondir)
+docdir = $(prefix)/opt/{TESTSUITE_NAME}
+dist_doc_DATA = README tests.xml tests.full.xml NOTICE LICENSE.Apache-2.0 COPYING
diff --git a/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/plugin/web_templates/NOTICE b/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/plugin/web_templates/NOTICE
new file mode 100755 (executable)
index 0000000..e6f64da
--- /dev/null
@@ -0,0 +1,5 @@
+Copyright (c) 2015 Samsung Electronics Co., Ltd. All rights reserved.
+Copyright (c) 2012 Intel Corporation.
+Except as noted, this software is licensed under Apache License, Version 2 or BSD-3-Clause License.
+Please, see the LICENSE.Apache-2.0 file for Apache License, Version 2 terms and conditions
+or the COPYING file for BSD-3-Clause License.
diff --git a/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/plugin/web_templates/README b/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/plugin/web_templates/README
new file mode 100755 (executable)
index 0000000..564d9fc
--- /dev/null
@@ -0,0 +1,67 @@
+----------------------------------------------
+License
+----------------------------------------------
+Copyright (c) 2015 Samsung Electronics Co. 
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+
+
+----------------------------------------------
+Introduction
+----------------------------------------------
+This test suite is for testing Tizen {API_NAME} API, which covers the following specifications:
+
+
+
+----------------------------------------------
+Test Environment
+----------------------------------------------
+1. Testkit-stub must be installed on target device.
+2. Testkit-lite must be installed on test machine.
+
+
+----------------------------------------------
+Build and Run
+----------------------------------------------
+(Suppose you only get the source code and Testkit-Lite has been set up on your test machine.
+ If you have obtained tct-alarm-tizen-tests ZIP packages, you can directly go to step 3 on the test machine;
+ if you have not installed Testkit-Lite, you need to install the latest version.)
+
+Steps:
+1. Prepare for building by running the following command:
+   cd {TESTSUITE_NAME}
+
+2. Build ZIP package by running the following command:
+   ./pack.sh
+
+3. Unzip the package on the test machine by running the following command:
+   unzip -o {TESTSUITE_NAME}-<version>.zip -d /opt/usr/media/tct
+
+4. Install the package on the test machine by running the following command:
+   /opt/usr/media/tct/opt/{TESTSUITE_NAME}/inst.sh
+
+5. Run test cases by running the following command on host:
+   testkit-lite -f device:/opt/usr/media/tct/opt/{TESTSUITE_NAME}/tests.xml -e "WRTLauncher" -o {TESTSUITE_NAME}.results.xml
diff --git a/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/plugin/web_templates/autogen b/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/plugin/web_templates/autogen
new file mode 100755 (executable)
index 0000000..c5a7472
--- /dev/null
@@ -0,0 +1,3 @@
+#!/bin/sh
+
+autoreconf --install
diff --git a/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/plugin/web_templates/config.xml b/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/plugin/web_templates/config.xml
new file mode 100755 (executable)
index 0000000..3cdca4e
--- /dev/null
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<widget id='http://tizen.org/test/{TESTSUITE_NAME}' xmlns='http://www.w3.org/ns/widgets' xmlns:tizen='http://tizen.org/ns/widgets' version='{TIZEN_VERSION}'>
+  <name>{TESTSUITE_NAME}</name>
+  <icon src="icon.png" height="117" width="117"/>
+  <tizen:application id="{APP_ID}" package="{PACK_ID}" required_version="{REQUIRED_VER}"/>
+  <tizen:setting screen-orientation="landscape" />
+  <tizen:setting background-support="enable"/>
+</widget>
diff --git a/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/plugin/web_templates/configure.ac b/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/plugin/web_templates/configure.ac
new file mode 100755 (executable)
index 0000000..62e72ed
--- /dev/null
@@ -0,0 +1,8 @@
+AC_INIT([{TESTSUITE_NAME}], [2.4], [kimsamsung@samsung.com])
+AM_INIT_AUTOMAKE([-Wall -Werror foreign])
+
+AC_CONFIG_FILES([Makefile \
+testcase/Makefile \
+resources/Makefile \
+webrunner/Makefile])
+AC_OUTPUT
diff --git a/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/plugin/web_templates/icon.png b/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/plugin/web_templates/icon.png
new file mode 100755 (executable)
index 0000000..aa50240
Binary files /dev/null and b/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/plugin/web_templates/icon.png differ
diff --git a/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/plugin/web_templates/inst.sh b/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/plugin/web_templates/inst.sh
new file mode 100755 (executable)
index 0000000..b21fb56
--- /dev/null
@@ -0,0 +1,89 @@
+#!/bin/bash
+wgt_installer="pkgcmd"
+NAME=$(basename $(cd $(dirname $0);pwd))
+
+#parse params
+USAGE="Usage: ./inst.sh [-i] [-u]
+  -i install wgt and config environment 
+  -u uninstall wgt and remove source file
+[-i] option was set as default."
+
+function installpkg(){
+### install wgt ###
+type $wgt_installer > /dev/null 2>&1
+if [ $? -eq 0 ]; then
+    [ -e /opt/usr/media/tct/opt/$NAME/$NAME.wgt ] && $wgt_installer -i -t wgt -q -p /opt/usr/media/tct/opt/$NAME/$NAME.wgt
+    if [ $? -eq 0 ]; then
+        echo "Install /opt/usr/media/tct/opt/$NAME/$NAME.wgt to /opt/usr/apps/`wrt-launcher -l 2> /dev/null | grep $NAME | tail -n 1 | awk '{ print $(NF-1) }'` done"
+        echo "$(wrt-launcher -l | grep $NAME | awk '{ print $(NF-1) }') sdbd rw" | smackload
+    else
+        echo "Install /opt/$NAME/$NAME.wgt fail ..."
+    fi
+    sync
+fi
+}
+
+function uninstallpkg(){
+### uninstall wgt ###
+type $wgt_installer > /dev/null 2>&1
+if [ $? -eq 0 ]; then
+    package_id=`wrt-launcher -l 2> /dev/null | grep $NAME | tail -n 1 | awk '{ print $(NF-1) }'`
+    if [ -n "$(ps -ef | grep $package_id | grep -v grep | awk '{print $2}')" ]; then
+        for i in $(ps -ef | grep $package_id | grep -v grep | awk '{print $2}')
+        do
+            kill -9 $i
+            if [ "$?" -ne 0 ]; then
+                echo "Kill the processes of $NAME fail ..."
+            else
+                echo "Kill the processes of $NAME done"
+            fi
+        done
+    fi
+    if [ -n "$package_id" ]; then
+        $wgt_installer -u -q -t wgt -n $package_id
+        if [ "$?" -ne 0 ]; then
+                echo "Uninstall $NAME fail ..."
+        else
+                echo "Uninstall $NAME done"
+        fi
+        sync
+    fi
+    for i in testalar00
+    do
+        if [ -n "$(ps -ef | grep $i | grep -v grep | awk '{print $2}')" ]; then
+            kill -9 $(ps -ef | grep $i | grep -v grep | awk '{print $2}')
+            if [ "$?" -ne 0 ]; then
+                echo "Kill the processes of $i fail ..."
+            else
+                echo "Kill the processes of $i done"
+           fi
+        fi
+        INSTALLED=`wrt-launcher -l | awk /$i/' { print $(NF); }'`
+        if [ -n "$INSTALLED" ] ; then
+            $wgt_installer -u -q -t wgt -n $i
+            if [ "$?" -ne 0 ]; then
+                echo "Uninstall $i fail ..."
+            else
+                echo "Uninstall $i done"
+            fi
+        fi
+    done
+fi
+
+### remove source file ###
+if [ -d /opt/usr/media/tct/opt/$NAME ];then
+    rm -rf /opt/usr/media/tct/opt/$NAME
+else
+    echo "Remove source file fail,please check if the source file exist: /opt/usr/media/tct/opt/$NAME ..."
+fi
+}
+
+case "$1" in
+    -h|--help) echo "$USAGE"
+               exit ;;
+    ""|-i) installpkg;;
+    -u) uninstallpkg;;
+    *) echo "Unknown option: $1"
+       echo "$USAGE"
+       exit ;;
+esac
diff --git a/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/plugin/web_templates/manifest.json b/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/plugin/web_templates/manifest.json
new file mode 100755 (executable)
index 0000000..f8b3349
--- /dev/null
@@ -0,0 +1,13 @@
+{
+    "version": "{TIZEN_VERSION}",
+    "name": "{TESTSUITE_NAME}",
+    "permissions": ["tabs", "unlimited_storage", "notifications", "http://*/*", "https://*/*"],
+    "description": "{TESTSUITE_NAME}",
+    "webapimanager": true,
+    "file_name": "manifest.json",
+    "app": {
+        "launch": {
+            "local_path": "index.html"
+        }
+    }
+}
diff --git a/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/plugin/web_templates/pack.sh b/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/plugin/web_templates/pack.sh
new file mode 100755 (executable)
index 0000000..5d069a1
--- /dev/null
@@ -0,0 +1,274 @@
+#!/bin/bash
+source $(dirname $0)/$(basename $(pwd)).spec
+
+#parse params
+usage="Usage: ./pack.sh [-t <package type: wgt | apk | crx | xpk>]
+[-t wgt] option was set as default."
+
+if [[ $1 == "-h" || $1 == "--help" ]]; then
+    echo $usage
+    exit 1
+fi
+
+type="wgt"
+while getopts t: o
+do
+    case "$o" in
+    t) type=$OPTARG;;
+    *) echo $usage
+       exit 1;;
+    esac
+done
+
+if [[ $type == "wgt" || $type == "apk" || $type == "crx" || $type == "xpk" ]];then
+    echo "Create package with $type and raw source"
+else 
+    echo "Sorry,$type is not support... >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>"
+    echo "$usage"
+    exit 1
+fi
+
+if [[ -z $name || -z $version || -z $appname ]];then
+    echo "Package name or version not specified in setting file"
+    exit 1
+fi
+
+SRC_ROOT=$PWD
+BUILD_ROOT=/tmp/${name}_pack
+BUILD_DEST=/tmp/${name}
+
+# check precondition
+function check_precondition(){
+    which $1 > /dev/null 2>&1
+    if [ $? -ne 0 ]; then
+        echo "Error: no tool: $1"
+        exit 1
+    fi
+}
+check_precondition autoreconf
+check_precondition gcc
+check_precondition make
+
+# clean
+function clean_workspace(){
+echo "cleaning workspace... >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>"
+rm -rf $BUILD_ROOT $BUILD_DEST
+}
+
+clean_workspace
+mkdir -p $BUILD_ROOT $BUILD_DEST
+
+# copy source code
+rm -rf *.rpm *.tar.bz2 *.tar.gz *.zip
+cp -arf $SRC_ROOT/* $BUILD_ROOT/
+
+# build
+echo "build from workspace... >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>"
+cd  $BUILD_ROOT
+./autogen && ./configure --prefix=/ && make && make install DESTDIR=$BUILD_DEST
+if [ $? -ne 0 ];then
+    echo "build fail,please check Makefile.am and cofigure.ac... >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>"
+    clean_workspace
+    exit 1
+fi
+find $BUILD_DEST -name "Makefile*" -delete
+
+## function for create wgt apk xpk ##
+
+function create_wgt(){
+# create wgt
+cd $BUILD_DEST
+cp -a $BUILD_ROOT/manifest.json   $BUILD_DEST/
+cp -a $BUILD_ROOT/icon.png     $BUILD_DEST/
+cat > index.html << EOF
+<!doctype html>
+<head>
+    <meta http-equiv="Refresh" content="1; url=opt/$name/webrunner/index.html?testsuite=/opt/usr/media/tct/opt/$name/tests.xml">
+</head>
+EOF
+cp -f $BUILD_ROOT/config.xml $BUILD_DEST/config.xml
+zip -rq $BUILD_DEST/opt/$name/$name.wgt *
+if [ $? -ne 0 ];then
+    echo "Create $name.wgt fail.... >>>>>>>>>>>>>>>>>>>>>>>>>"
+    clean_workspace
+    exit 1
+fi
+
+# sign wgt
+if [ $sign -eq 1 ];then
+    # copy signing tool
+    echo "copy signing tool... >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>"
+    cp -arf $SRC_ROOT/../../tools/signing $BUILD_ROOT/signing
+    if [ $? -ne 0 ];then
+        echo "No signing tool found in $SRC_ROOT/../tools.... >>>>>>>>>>>>>>>>>>>>>>>>>"
+        clean_workspace
+        exit 1
+    fi
+    wgt=$(find $BUILD_DEST/opt/$name/ -name *.wgt)
+    for wgt in $(find $BUILD_DEST/opt/$name/ -name *.wgt);do
+        $BUILD_ROOT/signing/sign-widget.sh --dist platform $wgt
+        if [ $? -ne 0 ];then
+            echo "Please check your signature files... >>>>>>>>>>>>>>>>>>>>>>>>>"
+            clean_workspace
+            exit 1
+        fi
+    done
+fi
+}
+
+function create_apk(){
+cd $BUILD_DEST
+cat > index.html << EOF
+<!doctype html>
+<head>
+    <meta http-equiv="Refresh" content="1; url=opt/$name/webrunner/index.html?testsuite=../tests.xml&testprefix=../../..">
+</head>
+EOF
+cp $BUILD_DEST/opt/$name/tests.xml $BUILD_DEST/
+cp -a $BUILD_ROOT/icon.png     $BUILD_DEST/
+cp -r $SRC_ROOT/../tools/xwalk_app_template $BUILD_ROOT/xwalk_app_template
+
+cd $BUILD_ROOT/xwalk_app_template
+python make_apk.py --package=org.xwalk.$appname --name=$appname --app-root=$BUILD_DEST --app-local-path=index.html --icon=$BUILD_DEST/icon.png
+if [ $? -ne 0 ];then
+    echo "Create $name.apk fail.... >>>>>>>>>>>>>>>>>>>>>>>>>"
+    clean_workspace
+    exit 1
+fi
+}
+
+function create_xpk(){
+cp -a $BUILD_ROOT/manifest.json   $BUILD_DEST/
+cp -a $BUILD_ROOT/icon.png     $BUILD_DEST/
+
+cd $BUILD_DEST
+cat > index.html << EOF
+<!doctype html>
+<head>
+    <meta http-equiv="Refresh" content="1; url=opt/$name/webrunner/index.html?testsuite=../tests.xml&testprefix=../../..">
+</head>
+EOF
+
+cp $SRC_ROOT/../tools/xpk_generator $BUILD_ROOT/xpk_generator
+cd $BUILD_ROOT
+./xpk_generator /tmp/$name key
+if [ $? -ne 0 ];then
+    echo "Create $name.xpk fail.... >>>>>>>>>>>>>>>>>>>>>>>>>"
+    clean_workspace
+    exit 1
+fi
+}
+
+function create_crx(){
+echo "crx is not support yet... >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>"
+clean_workspace
+exit 1
+}
+
+## zip function ##
+function zip_for_wgt(){
+cd $BUILD_DEST
+# cp inst.sh script #
+cp -af $BUILD_ROOT/inst.sh $BUILD_DEST/opt/$name/inst.sh
+
+if [ $src_file -eq 0 ];then
+    for file in $(ls opt/$name |grep -v wgt);do
+        if [[ "${whitelist[@]}" =~ $file ]];then
+            echo "$file in whitelist,keep it..."
+        else
+            echo "Remove unnessary file:$file..."
+            rm -rf opt/$name/$file
+        fi
+    done
+fi
+zip -Drq $BUILD_DEST/$name-$version.zip opt/
+if [ $? -ne 0 ];then
+    echo "Create zip package fail... >>>>>>>>>>>>>>>>>>>>>>>>>"
+    clean_workspace
+    exit 1
+fi
+}
+
+function zip_for_apk(){
+cd $BUILD_DEST
+# cp inst.sh script #
+cp -af $BUILD_ROOT/inst.sh.apk $BUILD_DEST/opt/$name/inst.sh
+mv $BUILD_ROOT/xwalk_app_template/$appname.apk $BUILD_DEST/opt/$name/
+
+if [ $src_file -eq 0 ];then
+    for file in $(ls opt/$name |grep -v apk);do
+        if [[ "${whitelist[@]}" =~ $file ]];then
+            echo "$file in whitelist,keep it..."
+        else
+            echo "Remove unnessary file:$file..."
+            rm -rf opt/$name/$file
+        fi
+    done
+fi
+zip -Drq $BUILD_DEST/$name-$version.zip opt/
+if [ $? -ne 0 ];then
+    echo "Create zip package fail... >>>>>>>>>>>>>>>>>>>>>>>>>"
+    clean_workspace
+    exit 1
+fi
+}
+
+function zip_for_xpk(){
+cd $BUILD_DEST
+cp -af $BUILD_ROOT/inst.sh.xpk $BUILD_DEST/opt/$name/inst.sh
+mv $BUILD_ROOT/$name.xpk $BUILD_DEST/opt/$name/
+
+if [ $src_file -eq 0 ];then
+    for file in $(ls opt/$name |grep -v xpk);do
+        if [[ "${whitelist[@]}" =~ $file ]];then
+            echo "$file in whitelist,keep it..."
+        else
+            echo "Remove unnessary file:$file..."
+            rm -rf opt/$name/$file
+        fi
+    done
+fi
+zip -Drq $BUILD_DEST/$name-$version.zip opt/
+if [ $? -ne 0 ];then
+    echo "Create zip package fail... >>>>>>>>>>>>>>>>>>>>>>>>>"
+    clean_workspace
+    exit 1
+fi
+}
+
+function zip_for_crx(){
+echo "zip_for_crx not ready yet... >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>"
+clean_workspace
+exit 1
+}
+
+## create wgt crx apk xpk and zip package ##
+case $type in
+    wgt) create_wgt
+         zip_for_wgt;;
+    apk) create_apk
+         zip_for_apk;;
+    xpk) create_xpk
+         zip_for_xpk;;
+    crx) create_crx
+         zip_for_crx;;
+esac
+
+
+# copy zip file
+echo "copy package from workspace... >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>"
+cp -f $BUILD_DEST/$name-$version.zip $SRC_ROOT/$name-$version.zip
+
+# clean workspace
+clean_workspace
+
+# validate
+echo "checking result... >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>"
+if [ -z "`ls $SRC_ROOT | grep "\.zip"`" ];then
+    echo "------------------------------ FAILED to build $name packages --------------------------"
+    exit 1
+fi
+
+echo "------------------------------ Done to build $name packages --------------------------"
+cd $SRC_ROOT
+ls *.zip 2>/dev/null
diff --git a/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/plugin/web_templates/resources/COPYING b/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/plugin/web_templates/resources/COPYING
new file mode 100755 (executable)
index 0000000..1866d2d
--- /dev/null
@@ -0,0 +1,12 @@
+All test files under this folder except COPYING and Makefile.am come from
+https://github.com/w3c/testharness.js (commit 81649066b179216eed02dfb58f631eb8bb6c7629)
+without any modification besides the necessary adjustment on reference path to test harness
+
+These tests are copyright by W3C and/or the author listed in the test
+file. The tests are dual-licensed under the W3C Test Suite License:
+http://www.w3.org/Consortium/Legal/2008/04-testsuite-license
+and the BSD 3-clause License:
+http://www.w3.org/Consortium/Legal/2008/03-bsd-license
+under W3C's test suite licensing policy:
+http://www.w3.org/Consortium/Legal/2008/04-testsuite-copyright
+
diff --git a/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/plugin/web_templates/resources/Makefile.am b/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/plugin/web_templates/resources/Makefile.am
new file mode 100755 (executable)
index 0000000..9624e21
--- /dev/null
@@ -0,0 +1,5 @@
+resources_SCRIPTS = *
+resourcesdir = $(prefix)/opt/{TESTSUITE_NAME}/resources
+EXTRA_DIST = $(resources_SCRIPTS)
+docdir = $(prefix)/opt/{TESTSUITE_NAME}/resources
+dist_doc_DATA = COPYING
diff --git a/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/plugin/web_templates/resources/testharness.css b/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/plugin/web_templates/resources/testharness.css
new file mode 100755 (executable)
index 0000000..365084f
--- /dev/null
@@ -0,0 +1,92 @@
+html {
+    font-family:DejaVu Sans, Bitstream Vera Sans, Arial, Sans;
+}
+
+#log .warning,
+#log .warning a {
+  color: black;
+  background: yellow;
+}
+
+#log .error,
+#log .error a {
+  color: white;
+  background: red;
+}
+
+#log pre {
+  border: 1px solid black;
+  padding: 1em;
+}
+
+section#summary {
+    margin-bottom:1em;
+}
+
+table#results {
+    border-collapse:collapse;
+    table-layout:fixed;
+    width:100%;
+}
+
+table#results th:first-child,
+table#results td:first-child {
+    width:4em;
+}
+
+table#results th:last-child,
+table#results td:last-child {
+    width:50%;
+}
+
+table#results.assertions th:last-child,
+table#results.assertions td:last-child {
+    width:35%;
+}
+
+table#results th {
+    padding:0;
+    padding-bottom:0.5em;
+    border-bottom:medium solid black;
+}
+
+table#results td {
+    padding:1em;
+    padding-bottom:0.5em;
+    border-bottom:thin solid black;
+}
+
+tr.pass > td:first-child {
+    color:green;
+}
+
+tr.fail > td:first-child {
+    color:red;
+}
+
+tr.timeout > td:first-child {
+    color:red;
+}
+
+tr.notrun > td:first-child {
+    color:blue;
+}
+
+.pass > td:first-child, .fail > td:first-child, .timeout > td:first-child, .notrun > td:first-child {
+    font-variant:small-caps;
+}
+
+table#results span {
+    display:block;
+}
+
+table#results span.expected {
+    font-family:DejaVu Sans Mono, Bitstream Vera Sans Mono, Monospace;
+    white-space:pre;
+}
+
+table#results span.actual {
+    font-family:DejaVu Sans Mono, Bitstream Vera Sans Mono, Monospace;
+    white-space:pre;
+}
+
diff --git a/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/plugin/web_templates/resources/testharness.js b/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/plugin/web_templates/resources/testharness.js
new file mode 100755 (executable)
index 0000000..a07de77
--- /dev/null
@@ -0,0 +1,2223 @@
+/*
+Distributed under both the W3C Test Suite License [1] and the W3C
+3-clause BSD License [2]. To contribute to a W3C Test Suite, see the
+policies and contribution forms [3].
+
+[1] http://www.w3.org/Consortium/Legal/2008/04-testsuite-license
+[2] http://www.w3.org/Consortium/Legal/2008/03-bsd-license
+[3] http://www.w3.org/2004/10/27-testcases
+*/
+
+/*
+ * == Introduction ==
+ *
+ * This file provides a framework for writing testcases. It is intended to
+ * provide a convenient API for making common assertions, and to work both
+ * for testing synchronous and asynchronous DOM features in a way that
+ * promotes clear, robust, tests.
+ *
+ * == Basic Usage ==
+ *
+ * To use this file, import the script and the testharnessreport script into
+ * the test document:
+ * <script src="/resources/testharness.js"></script>
+ * <script src="/resources/testharnessreport.js"></script>
+ *
+ * Within each file one may define one or more tests. Each test is atomic
+ * in the sense that a single test has a single result (pass/fail/timeout).
+ * Within each test one may have a number of asserts. The test fails at the
+ * first failing assert, and the remainder of the test is (typically) not run.
+ *
+ * If the file containing the tests is a HTML file with an element of id "log"
+ * this will be populated with a table containing the test results after all
+ * the tests have run.
+ *
+ * NOTE: By default tests must be created before the load event fires. For ways
+ *       to create tests after the load event, see "Determining when all tests
+ *       are complete", below
+ *
+ * == Synchronous Tests ==
+ *
+ * To create a synchronous test use the test() function:
+ *
+ * test(test_function, name, properties)
+ *
+ * test_function is a function that contains the code to test. For example a
+ * trivial passing test would be:
+ *
+ * test(function() {assert_true(true)}, "assert_true with true")
+ *
+ * The function passed in is run in the test() call.
+ *
+ * properties is an object that overrides default test properties. The
+ * recognised properties are:
+ *    timeout - the test timeout in ms
+ *
+ * e.g.
+ * test(test_function, "Sample test", {timeout:1000})
+ *
+ * would run test_function with a timeout of 1s.
+ *
+ * Additionally, test-specific metadata can be passed in the properties. These
+ * are used when the individual test has different metadata from that stored 
+ * in the <head>.
+ * The recognized metadata properties are:
+ *
+ *    help - The url of the part of the specification being tested
+ *
+ *    assert - A human readable description of what the test is attempting 
+ *             to prove
+ *
+ *    author - Name and contact information for the author of the test in the
+ *             format: "Name <email_addr>" or "Name http://contact/url"
+ *
+ * == Asynchronous Tests ==
+ *
+ * Testing asynchronous features is somewhat more complex since the result of
+ * a test may depend on one or more events or other callbacks. The API provided
+ * for testing these features is indended to be rather low-level but hopefully
+ * applicable to many situations.
+ *
+ * To create a test, one starts by getting a Test object using async_test:
+ *
+ * async_test(name, properties)
+ *
+ * e.g.
+ * var t = async_test("Simple async test")
+ *
+ * Assertions can be added to the test by calling the step method of the test
+ * object with a function containing the test assertions:
+ *
+ * t.step(function() {assert_true(true)});
+ *
+ * When all the steps are complete, the done() method must be called:
+ *
+ * t.done();
+ *
+ * As a convenience, async_test can also takes a function as first argument.
+ * This function is called with the test object as both its `this` object and
+ * first argument. The above example can be rewritten as:
+ *
+ * async_test(function(t) {
+ *     object.some_event = function() {
+ *         t.step(function (){assert_true(true); t.done();});
+ *     };
+ * }, "Simple async test");
+ *
+ * which avoids cluttering the global scope with references to async
+ * tests instances.
+ *
+ * The properties argument is identical to that for test().
+ *
+ * In many cases it is convenient to run a step in response to an event or a
+ * callback. A convenient method of doing this is through the step_func method
+ * which returns a function that, when called runs a test step. For example
+ *
+ * object.some_event = t.step_func(function(e) {assert_true(e.a)});
+ *
+ * == Making assertions ==
+ *
+ * Functions for making assertions start assert_
+ * The best way to get a list is to look in this file for functions names
+ * matching that pattern. The general signature is
+ *
+ * assert_something(actual, expected, description)
+ *
+ * although not all assertions precisely match this pattern e.g. assert_true
+ * only takes actual and description as arguments.
+ *
+ * The description parameter is used to present more useful error messages when
+ * a test fails
+ *
+ * NOTE: All asserts must be located in a test() or a step of an async_test().
+ *       asserts outside these places won't be detected correctly by the harness
+ *       and may cause a file to stop testing.
+ *
+ * == Setup ==
+ *
+ * Sometimes tests require non-trivial setup that may fail. For this purpose
+ * there is a setup() function, that may be called with one or two arguments.
+ * The two argument version is:
+ *
+ * setup(func, properties)
+ *
+ * The one argument versions may omit either argument.
+ * func is a function to be run synchronously. setup() becomes a no-op once
+ * any tests have returned results. Properties are global properties of the test
+ * harness. Currently recognised properties are:
+ *
+ * timeout - The time in ms after which the harness should stop waiting for
+ *           tests to complete (this is different to the per-test timeout
+ *           because async tests do not start their timer until .step is called)
+ *
+ * explicit_done - Wait for an explicit call to done() before declaring all
+ *                 tests complete (see below)
+ *
+ * output_document - The document to which results should be logged. By default
+ *                   this is the current document but could be an ancestor
+ *                   document in some cases e.g. a SVG test loaded in an HTML
+ *                   wrapper
+ *
+ * explicit_timeout - disable file timeout; only stop waiting for results
+ *                    when the timeout() function is called (typically for
+ *                    use when integrating with some existing test framework
+ *                    that has its own timeout mechanism).
+ *
+ * == Determining when all tests are complete ==
+ *
+ * By default the test harness will assume there are no more results to come
+ * when:
+ * 1) There are no Test objects that have been created but not completed
+ * 2) The load event on the document has fired
+ *
+ * This behaviour can be overridden by setting the explicit_done property to
+ * true in a call to setup(). If explicit_done is true, the test harness will
+ * not assume it is done until the global done() function is called. Once done()
+ * is called, the two conditions above apply like normal.
+ *
+ * == Generating tests ==
+ *
+ * NOTE: this functionality may be removed
+ *
+ * There are scenarios in which is is desirable to create a large number of
+ * (synchronous) tests that are internally similar but vary in the parameters
+ * used. To make this easier, the generate_tests function allows a single
+ * function to be called with each set of parameters in a list:
+ *
+ * generate_tests(test_function, parameter_lists, properties)
+ *
+ * For example:
+ *
+ * generate_tests(assert_equals, [
+ *     ["Sum one and one", 1+1, 2],
+ *     ["Sum one and zero", 1+0, 1]
+ *     ])
+ *
+ * Is equivalent to:
+ *
+ * test(function() {assert_equals(1+1, 2)}, "Sum one and one")
+ * test(function() {assert_equals(1+0, 1)}, "Sum one and zero")
+ *
+ * Note that the first item in each parameter list corresponds to the name of
+ * the test.
+ *
+ * The properties argument is identical to that for test(). This may be a 
+ * single object (used for all generated tests) or an array.
+ *
+ * == Callback API ==
+ *
+ * The framework provides callbacks corresponding to 3 events:
+ *
+ * start - happens when the first Test is created
+ * result - happens when a test result is recieved
+ * complete - happens when all results are recieved
+ *
+ * The page defining the tests may add callbacks for these events by calling
+ * the following methods:
+ *
+ *   add_start_callback(callback) - callback called with no arguments
+ *   add_result_callback(callback) - callback called with a test argument
+ *   add_completion_callback(callback) - callback called with an array of tests
+ *                                       and an status object
+ *
+ * tests have the following properties:
+ *   status: A status code. This can be compared to the PASS, FAIL, TIMEOUT and
+ *           NOTRUN properties on the test object
+ *   message: A message indicating the reason for failure. In the future this
+ *            will always be a string
+ *
+ *  The status object gives the overall status of the harness. It has the
+ *  following properties:
+ *    status: Can be compared to the OK, ERROR and TIMEOUT properties
+ *    message: An error message set when the status is ERROR
+ *
+ * == External API ==
+ *
+ * In order to collect the results of multiple pages containing tests, the test
+ * harness will, when loaded in a nested browsing context, attempt to call
+ * certain functions in each ancestor and opener browsing context:
+ *
+ * start - start_callback
+ * result - result_callback
+ * complete - completion_callback
+ *
+ * These are given the same arguments as the corresponding internal callbacks
+ * described above.
+ *
+ * == External API through cross-document messaging ==
+ *
+ * Where supported, the test harness will also send messages using
+ * cross-document messaging to each ancestor and opener browsing context. Since
+ * it uses the wildcard keyword (*), cross-origin communication is enabled and
+ * script on different origins can collect the results.
+ *
+ * This API follows similar conventions as those described above only slightly
+ * modified to accommodate message event API. Each message is sent by the harness
+ * is passed a single vanilla object, available as the `data` property of the
+ * event object. These objects are structures as follows:
+ *
+ * start - { type: "start" }
+ * result - { type: "result", test: Test }
+ * complete - { type: "complete", tests: [Test, ...], status: TestsStatus }
+ *
+ * == List of assertions ==
+ *
+ * assert_true(actual, description)
+ *   asserts that /actual/ is strictly true
+ *
+ * assert_false(actual, description)
+ *   asserts that /actual/ is strictly false
+ *
+ * assert_equals(actual, expected, description)
+ *   asserts that /actual/ is the same value as /expected/
+ *
+ * assert_not_equals(actual, expected, description)
+ *   asserts that /actual/ is a different value to /expected/. Yes, this means
+ *   that "expected" is a misnomer
+ *
+ * assert_in_array(actual, expected, description)
+ *   asserts that /expected/ is an Array, and /actual/ is equal to one of the
+ *   members -- expected.indexOf(actual) != -1
+ *
+ * assert_array_equals(actual, expected, description)
+ *   asserts that /actual/ and /expected/ have the same length and the value of
+ *   each indexed property in /actual/ is the strictly equal to the corresponding
+ *   property value in /expected/
+ *
+ * assert_approx_equals(actual, expected, epsilon, description)
+ *   asserts that /actual/ is a number within +/- /epsilon/ of /expected/
+ *
+ * assert_less_than(actual, expected, description)
+ *   asserts that /actual/ is a number less than /expected/
+ *
+ * assert_greater_than(actual, expected, description)
+ *   asserts that /actual/ is a number greater than /expected/
+ *
+ * assert_less_than_equal(actual, expected, description)
+ *   asserts that /actual/ is a number less than or equal to /expected/
+ *
+ * assert_greater_than_equal(actual, expected, description)
+ *   asserts that /actual/ is a number greater than or equal to /expected/
+ *
+ * assert_regexp_match(actual, expected, description)
+ *   asserts that /actual/ matches the regexp /expected/
+ *
+ * assert_class_string(object, class_name, description)
+ *   asserts that the class string of /object/ as returned in
+ *   Object.prototype.toString is equal to /class_name/.
+ *
+ * assert_own_property(object, property_name, description)
+ *   assert that object has own property property_name
+ *
+ * assert_inherits(object, property_name, description)
+ *   assert that object does not have an own property named property_name
+ *   but that property_name is present in the prototype chain for object
+ *
+ * assert_idl_attribute(object, attribute_name, description)
+ *   assert that an object that is an instance of some interface has the
+ *   attribute attribute_name following the conditions specified by WebIDL
+ *
+ * assert_readonly(object, property_name, description)
+ *   assert that property property_name on object is readonly
+ *
+ * assert_throws(code, func, description)
+ *   code - the expected exception:
+ *     o string: the thrown exception must be a DOMException with the given
+ *               name, e.g., "TimeoutError" (for compatibility with existing
+ *               tests, a constant is also supported, e.g., "TIMEOUT_ERR")
+ *     o object: the thrown exception must have a property called "name" that
+ *               matches code.name
+ *     o null:   allow any exception (in general, one of the options above
+ *               should be used)
+ *   func - a function that should throw
+ *
+ * assert_unreached(description)
+ *   asserts if called. Used to ensure that some codepath is *not* taken e.g.
+ *   an event does not fire.
+ *
+ * assert_any(assert_func, actual, expected_array, extra_arg_1, ... extra_arg_N)
+ *   asserts that one assert_func(actual, expected_array_N, extra_arg1, ..., extra_arg_N)
+ *   is true for some expected_array_N in expected_array. This only works for assert_func
+ *   with signature assert_func(actual, expected, args_1, ..., args_N). Note that tests
+ *   with multiple allowed pass conditions are bad practice unless the spec specifically
+ *   allows multiple behaviours. Test authors should not use this method simply to hide 
+ *   UA bugs.
+ *
+ * assert_exists(object, property_name, description)
+ *   *** deprecated ***
+ *   asserts that object has an own property property_name
+ *
+ * assert_not_exists(object, property_name, description)
+ *   *** deprecated ***
+ *   assert that object does not have own property property_name
+ */
+
+(function ()
+{
+    var debug = false;
+    // default timeout is 5 seconds, test can override if needed
+    var settings = {
+      output:true,
+      timeout:5000,
+      test_timeout:2000
+    };
+
+    var xhtml_ns = "http://www.w3.org/1999/xhtml";
+
+    // script_prefix is used by Output.prototype.show_results() to figure out
+    // where to get testharness.css from.  It's enclosed in an extra closure to
+    // not pollute the library's namespace with variables like "src".
+    var script_prefix = null;
+    (function ()
+    {
+        var scripts = document.getElementsByTagName("script");
+        for (var i = 0; i < scripts.length; i++)
+        {
+            if (scripts[i].src)
+            {
+                var src = scripts[i].src;
+            }
+            else if (scripts[i].href)
+            {
+                //SVG case
+                var src = scripts[i].href.baseVal;
+            }
+            if (src && src.slice(src.length - "testharness.js".length) === "testharness.js")
+            {
+                script_prefix = src.slice(0, src.length - "testharness.js".length);
+                break;
+            }
+        }
+    })();
+
+    /*
+     * API functions
+     */
+
+    var name_counter = 0;
+    function next_default_name()
+    {
+        //Don't use document.title to work around an Opera bug in XHTML documents
+        var prefix = document.getElementsByTagName("title").length > 0 ?
+                         document.getElementsByTagName("title")[0].firstChild.data :
+                         "Untitled";
+        var suffix = name_counter > 0 ? " " + name_counter : "";
+        name_counter++;
+        return prefix + suffix;
+    }
+
+    function test(func, name, properties)
+    {
+        var test_name = name ? name : next_default_name();
+        properties = properties ? properties : {};
+        var test_obj = new Test(test_name, properties);
+        test_obj.step(func);
+        if (test_obj.status === test_obj.NOTRUN) {
+            test_obj.done();
+        }
+    }
+
+    function async_test(func, name, properties)
+    {
+        if (typeof func !== "function") {
+            properties = name;
+            name = func;
+            func = null;
+        }
+        var test_name = name ? name : next_default_name();
+        properties = properties ? properties : {};
+        var test_obj = new Test(test_name, properties);
+        if (func) {
+            test_obj.step(func, test_obj, test_obj);
+        }
+        return test_obj;
+    }
+
+    function setup(func_or_properties, maybe_properties)
+    {
+        var func = null;
+        var properties = {};
+        if (arguments.length === 2) {
+            func = func_or_properties;
+            properties = maybe_properties;
+        } else if (func_or_properties instanceof Function){
+            func = func_or_properties;
+        } else {
+            properties = func_or_properties;
+        }
+        tests.setup(func, properties);
+        output.setup(properties);
+    }
+
+    function done() {
+        tests.end_wait();
+    }
+
+    function generate_tests(func, args, properties) {
+        forEach(args, function(x, i)
+                {
+                    var name = x[0];
+                    test(function()
+                         {
+                             func.apply(this, x.slice(1));
+                         }, 
+                         name, 
+                         Array.isArray(properties) ? properties[i] : properties);
+                });
+    }
+
+    function on_event(object, event, callback)
+    {
+      object.addEventListener(event, callback, false);
+    }
+
+    expose(test, 'test');
+    expose(async_test, 'async_test');
+    expose(generate_tests, 'generate_tests');
+    expose(setup, 'setup');
+    expose(done, 'done');
+    expose(on_event, 'on_event');
+
+    /*
+     * Return a string truncated to the given length, with ... added at the end
+     * if it was longer.
+     */
+    function truncate(s, len)
+    {
+        if (s.length > len) {
+            return s.substring(0, len - 3) + "...";
+        }
+        return s;
+    }
+
+    /*
+     * Convert a value to a nice, human-readable string
+     */
+    function format_value(val)
+    {
+        if (Array.isArray(val))
+        {
+            return "[" + val.map(format_value).join(", ") + "]";
+        }
+
+        switch (typeof val)
+        {
+        case "string":
+            val = val.replace("\\", "\\\\");
+            for (var i = 0; i < 32; i++)
+            {
+                var replace = "\\";
+                switch (i) {
+                case 0: replace += "0"; break;
+                case 1: replace += "x01"; break;
+                case 2: replace += "x02"; break;
+                case 3: replace += "x03"; break;
+                case 4: replace += "x04"; break;
+                case 5: replace += "x05"; break;
+                case 6: replace += "x06"; break;
+                case 7: replace += "x07"; break;
+                case 8: replace += "b"; break;
+                case 9: replace += "t"; break;
+                case 10: replace += "n"; break;
+                case 11: replace += "v"; break;
+                case 12: replace += "f"; break;
+                case 13: replace += "r"; break;
+                case 14: replace += "x0e"; break;
+                case 15: replace += "x0f"; break;
+                case 16: replace += "x10"; break;
+                case 17: replace += "x11"; break;
+                case 18: replace += "x12"; break;
+                case 19: replace += "x13"; break;
+                case 20: replace += "x14"; break;
+                case 21: replace += "x15"; break;
+                case 22: replace += "x16"; break;
+                case 23: replace += "x17"; break;
+                case 24: replace += "x18"; break;
+                case 25: replace += "x19"; break;
+                case 26: replace += "x1a"; break;
+                case 27: replace += "x1b"; break;
+                case 28: replace += "x1c"; break;
+                case 29: replace += "x1d"; break;
+                case 30: replace += "x1e"; break;
+                case 31: replace += "x1f"; break;
+                }
+                val = val.replace(RegExp(String.fromCharCode(i), "g"), replace);
+            }
+            return '"' + val.replace(/"/g, '\\"') + '"';
+        case "boolean":
+        case "undefined":
+            return String(val);
+        case "number":
+            // In JavaScript, -0 === 0 and String(-0) == "0", so we have to
+            // special-case.
+            if (val === -0 && 1/val === -Infinity)
+            {
+                return "-0";
+            }
+            return String(val);
+        case "object":
+            if (val === null)
+            {
+                return "null";
+            }
+
+            // Special-case Node objects, since those come up a lot in my tests.  I
+            // ignore namespaces.  I use duck-typing instead of instanceof, because
+            // instanceof doesn't work if the node is from another window (like an
+            // iframe's contentWindow):
+            // http://www.w3.org/Bugs/Public/show_bug.cgi?id=12295
+            if ("nodeType" in val
+            && "nodeName" in val
+            && "nodeValue" in val
+            && "childNodes" in val)
+            {
+                switch (val.nodeType)
+                {
+                case Node.ELEMENT_NODE:
+                    var ret = "<" + val.tagName.toLowerCase();
+                    for (var i = 0; i < val.attributes.length; i++)
+                    {
+                        ret += " " + val.attributes[i].name + '="' + val.attributes[i].value + '"';
+                    }
+                    ret += ">" + val.innerHTML + "</" + val.tagName.toLowerCase() + ">";
+                    return "Element node " + truncate(ret, 60);
+                case Node.TEXT_NODE:
+                    return 'Text node "' + truncate(val.data, 60) + '"';
+                case Node.PROCESSING_INSTRUCTION_NODE:
+                    return "ProcessingInstruction node with target " + format_value(truncate(val.target, 60)) + " and data " + format_value(truncate(val.data, 60));
+                case Node.COMMENT_NODE:
+                    return "Comment node <!--" + truncate(val.data, 60) + "-->";
+                case Node.DOCUMENT_NODE:
+                    return "Document node with " + val.childNodes.length + (val.childNodes.length == 1 ? " child" : " children");
+                case Node.DOCUMENT_TYPE_NODE:
+                    return "DocumentType node";
+                case Node.DOCUMENT_FRAGMENT_NODE:
+                    return "DocumentFragment node with " + val.childNodes.length + (val.childNodes.length == 1 ? " child" : " children");
+                default:
+                    return "Node object of unknown type";
+                }
+            }
+
+            // Fall through to default
+        default:
+            return typeof val + ' "' + truncate(String(val), 60) + '"';
+        }
+    }
+    expose(format_value, "format_value");
+
+    /*
+     * Assertions
+     */
+
+    function assert_true(actual, description)
+    {
+        assert(actual === true, "assert_true", description,
+                                "expected true got ${actual}", {actual:actual});
+    };
+    expose(assert_true, "assert_true");
+
+    function assert_false(actual, description)
+    {
+        assert(actual === false, "assert_false", description,
+                                 "expected false got ${actual}", {actual:actual});
+    };
+    expose(assert_false, "assert_false");
+
+    function same_value(x, y) {
+        if (y !== y)
+        {
+            //NaN case
+            return x !== x;
+        }
+        else if (x === 0 && y === 0) {
+            //Distinguish +0 and -0
+            return 1/x === 1/y;
+        }
+        else
+        {
+            //typical case
+            return x === y;
+        }
+    }
+
+    function assert_equals(actual, expected, description)
+    {
+         /*
+          * Test if two primitives are equal or two objects
+          * are the same object
+          */
+        if (typeof actual != typeof expected)
+        {
+            assert(false, "assert_equals", description,
+                          "expected (" + typeof expected + ") ${expected} but got (" + typeof actual + ") ${actual}",
+                          {expected:expected, actual:actual});
+            return;
+        }
+        assert(same_value(actual, expected), "assert_equals", description,
+                                             "expected ${expected} but got ${actual}",
+                                             {expected:expected, actual:actual});
+    };
+    expose(assert_equals, "assert_equals");
+
+    function assert_not_equals(actual, expected, description)
+    {
+         /*
+          * Test if two primitives are unequal or two objects
+          * are different objects
+          */
+        assert(!same_value(actual, expected), "assert_not_equals", description,
+                                              "got disallowed value ${actual}",
+                                              {actual:actual});
+    };
+    expose(assert_not_equals, "assert_not_equals");
+
+    function assert_in_array(actual, expected, description)
+    {
+        assert(expected.indexOf(actual) != -1, "assert_in_array", description,
+                                               "value ${actual} not in array ${expected}",
+                                               {actual:actual, expected:expected});
+    }
+    expose(assert_in_array, "assert_in_array");
+
+    function assert_object_equals(actual, expected, description)
+    {
+         //This needs to be improved a great deal
+         function check_equal(actual, expected, stack)
+         {
+             stack.push(actual);
+
+             var p;
+             for (p in actual)
+             {
+                 assert(expected.hasOwnProperty(p), "assert_object_equals", description,
+                                                    "unexpected property ${p}", {p:p});
+
+                 if (typeof actual[p] === "object" && actual[p] !== null)
+                 {
+                     if (stack.indexOf(actual[p]) === -1)
+                     {
+                         check_equal(actual[p], expected[p], stack);
+                     }
+                 }
+                 else
+                 {
+                     assert(same_value(actual[p], expected[p]), "assert_object_equals", description,
+                                                       "property ${p} expected ${expected} got ${actual}",
+                                                       {p:p, expected:expected, actual:actual});
+                 }
+             }
+             for (p in expected)
+             {
+                 assert(actual.hasOwnProperty(p),
+                        "assert_object_equals", description,
+                        "expected property ${p} missing", {p:p});
+             }
+             stack.pop();
+         }
+         check_equal(actual, expected, []);
+    };
+    expose(assert_object_equals, "assert_object_equals");
+
+    function assert_array_equals(actual, expected, description)
+    {
+        assert(actual.length === expected.length,
+               "assert_array_equals", description,
+               "lengths differ, expected ${expected} got ${actual}",
+               {expected:expected.length, actual:actual.length});
+
+        for (var i=0; i < actual.length; i++)
+        {
+            assert(actual.hasOwnProperty(i) === expected.hasOwnProperty(i),
+                   "assert_array_equals", description,
+                   "property ${i}, property expected to be $expected but was $actual",
+                   {i:i, expected:expected.hasOwnProperty(i) ? "present" : "missing",
+                   actual:actual.hasOwnProperty(i) ? "present" : "missing"});
+            assert(same_value(expected[i], actual[i]),
+                   "assert_array_equals", description,
+                   "property ${i}, expected ${expected} but got ${actual}",
+                   {i:i, expected:expected[i], actual:actual[i]});
+        }
+    }
+    expose(assert_array_equals, "assert_array_equals");
+
+    function assert_approx_equals(actual, expected, epsilon, description)
+    {
+        /*
+         * Test if two primitive numbers are equal withing +/- epsilon
+         */
+        assert(typeof actual === "number",
+               "assert_approx_equals", description,
+               "expected a number but got a ${type_actual}",
+               {type_actual:typeof actual});
+
+        assert(Math.abs(actual - expected) <= epsilon,
+               "assert_approx_equals", description,
+               "expected ${expected} +/- ${epsilon} but got ${actual}",
+               {expected:expected, actual:actual, epsilon:epsilon});
+    };
+    expose(assert_approx_equals, "assert_approx_equals");
+
+    function assert_less_than(actual, expected, description)
+    {
+        /*
+         * Test if a primitive number is less than another
+         */
+        assert(typeof actual === "number",
+               "assert_less_than", description,
+               "expected a number but got a ${type_actual}",
+               {type_actual:typeof actual});
+
+        assert(actual < expected,
+               "assert_less_than", description,
+               "expected a number less than ${expected} but got ${actual}",
+               {expected:expected, actual:actual});
+    };
+    expose(assert_less_than, "assert_less_than");
+
+    function assert_greater_than(actual, expected, description)
+    {
+        /*
+         * Test if a primitive number is greater than another
+         */
+        assert(typeof actual === "number",
+               "assert_greater_than", description,
+               "expected a number but got a ${type_actual}",
+               {type_actual:typeof actual});
+
+        assert(actual > expected,
+               "assert_greater_than", description,
+               "expected a number greater than ${expected} but got ${actual}",
+               {expected:expected, actual:actual});
+    };
+    expose(assert_greater_than, "assert_greater_than");
+
+    function assert_less_than_equal(actual, expected, description)
+    {
+        /*
+         * Test if a primitive number is less than or equal to another
+         */
+        assert(typeof actual === "number",
+               "assert_less_than_equal", description,
+               "expected a number but got a ${type_actual}",
+               {type_actual:typeof actual});
+
+        assert(actual <= expected,
+               "assert_less_than", description,
+               "expected a number less than or equal to ${expected} but got ${actual}",
+               {expected:expected, actual:actual});
+    };
+    expose(assert_less_than_equal, "assert_less_than_equal");
+
+    function assert_greater_than_equal(actual, expected, description)
+    {
+        /*
+         * Test if a primitive number is greater than or equal to another
+         */
+        assert(typeof actual === "number",
+               "assert_greater_than_equal", description,
+               "expected a number but got a ${type_actual}",
+               {type_actual:typeof actual});
+
+        assert(actual >= expected,
+               "assert_greater_than_equal", description,
+               "expected a number greater than or equal to ${expected} but got ${actual}",
+               {expected:expected, actual:actual});
+    };
+    expose(assert_greater_than_equal, "assert_greater_than_equal");
+
+    function assert_regexp_match(actual, expected, description) {
+        /*
+         * Test if a string (actual) matches a regexp (expected)
+         */
+        assert(expected.test(actual),
+               "assert_regexp_match", description,
+               "expected ${expected} but got ${actual}",
+               {expected:expected, actual:actual});
+    }
+    expose(assert_regexp_match, "assert_regexp_match");
+
+    function assert_class_string(object, class_string, description) {
+        assert_equals({}.toString.call(object), "[object " + class_string + "]",
+                      description);
+    }
+    expose(assert_class_string, "assert_class_string");
+
+
+    function _assert_own_property(name) {
+        return function(object, property_name, description)
+        {
+            assert(object.hasOwnProperty(property_name),
+                   name, description,
+                   "expected property ${p} missing", {p:property_name});
+        };
+    }
+    expose(_assert_own_property("assert_exists"), "assert_exists");
+    expose(_assert_own_property("assert_own_property"), "assert_own_property");
+
+    function assert_not_exists(object, property_name, description)
+    {
+        assert(!object.hasOwnProperty(property_name),
+               "assert_not_exists", description,
+               "unexpected property ${p} found", {p:property_name});
+    };
+    expose(assert_not_exists, "assert_not_exists");
+
+    function _assert_inherits(name) {
+        return function (object, property_name, description)
+        {
+            assert(typeof object === "object",
+                   name, description,
+                   "provided value is not an object");
+
+            assert("hasOwnProperty" in object,
+                   name, description,
+                   "provided value is an object but has no hasOwnProperty method");
+
+            assert(!object.hasOwnProperty(property_name),
+                   name, description,
+                   "property ${p} found on object expected in prototype chain",
+                   {p:property_name});
+
+            assert(property_name in object,
+                   name, description,
+                   "property ${p} not found in prototype chain",
+                   {p:property_name});
+        };
+    }
+    expose(_assert_inherits("assert_inherits"), "assert_inherits");
+    expose(_assert_inherits("assert_idl_attribute"), "assert_idl_attribute");
+
+    function assert_readonly(object, property_name, description)
+    {
+         var initial_value = object[property_name];
+         try {
+             //Note that this can have side effects in the case where
+             //the property has PutForwards
+             object[property_name] = initial_value + "a"; //XXX use some other value here?
+             assert(same_value(object[property_name], initial_value),
+                    "assert_readonly", description,
+                    "changing property ${p} succeeded",
+                    {p:property_name});
+         }
+         finally
+         {
+             object[property_name] = initial_value;
+         }
+    };
+    expose(assert_readonly, "assert_readonly");
+
+    function assert_throws(code, func, description)
+    {
+        try
+        {
+            func.call(this);
+            assert(false, "assert_throws", description,
+                   "${func} did not throw", {func:func});
+        }
+        catch(e)
+        {
+            if (e instanceof AssertionError) {
+                throw(e);
+            }
+            if (code === null)
+            {
+                return;
+            }
+            if (typeof code === "object")
+            {
+                assert(typeof e == "object" && "name" in e && e.name == code.name,
+                       "assert_throws", description,
+                       "${func} threw ${actual} (${actual_name}) expected ${expected} (${expected_name})",
+                                    {func:func, actual:e, actual_name:e.name,
+                                     expected:code,
+                                     expected_name:code.name});
+                return;
+            }
+
+            var code_name_map = {
+                INDEX_SIZE_ERR: 'IndexSizeError',
+                HIERARCHY_REQUEST_ERR: 'HierarchyRequestError',
+                WRONG_DOCUMENT_ERR: 'WrongDocumentError',
+                INVALID_CHARACTER_ERR: 'InvalidCharacterError',
+                NO_MODIFICATION_ALLOWED_ERR: 'NoModificationAllowedError',
+                NOT_FOUND_ERR: 'NotFoundError',
+                NOT_SUPPORTED_ERR: 'NotSupportedError',
+                INVALID_STATE_ERR: 'InvalidStateError',
+                SYNTAX_ERR: 'SyntaxError',
+                INVALID_MODIFICATION_ERR: 'InvalidModificationError',
+                NAMESPACE_ERR: 'NamespaceError',
+                INVALID_ACCESS_ERR: 'InvalidAccessError',
+                TYPE_MISMATCH_ERR: 'TypeMismatchError',
+                SECURITY_ERR: 'SecurityError',
+                NETWORK_ERR: 'NetworkError',
+                ABORT_ERR: 'AbortError',
+                URL_MISMATCH_ERR: 'URLMismatchError',
+                QUOTA_EXCEEDED_ERR: 'QuotaExceededError',
+                TIMEOUT_ERR: 'TimeoutError',
+                INVALID_NODE_TYPE_ERR: 'InvalidNodeTypeError',
+                DATA_CLONE_ERR: 'DataCloneError'
+            };
+
+            var name = code in code_name_map ? code_name_map[code] : code;
+
+            var name_code_map = {
+                IndexSizeError: 1,
+                HierarchyRequestError: 3,
+                WrongDocumentError: 4,
+                InvalidCharacterError: 5,
+                NoModificationAllowedError: 7,
+                NotFoundError: 8,
+                NotSupportedError: 9,
+                InvalidStateError: 11,
+                SyntaxError: 12,
+                InvalidModificationError: 13,
+                NamespaceError: 14,
+                InvalidAccessError: 15,
+                TypeMismatchError: 17,
+                SecurityError: 18,
+                NetworkError: 19,
+                AbortError: 20,
+                URLMismatchError: 21,
+                QuotaExceededError: 22,
+                TimeoutError: 23,
+                InvalidNodeTypeError: 24,
+                DataCloneError: 25,
+
+                UnknownError: 0,
+                ConstraintError: 0,
+                DataError: 0,
+                TransactionInactiveError: 0,
+                ReadOnlyError: 0,
+                VersionError: 0
+            };
+
+            if (!(name in name_code_map))
+            {
+                throw new AssertionError('Test bug: unrecognized DOMException code "' + code + '" passed to assert_throws()');
+            }
+
+            var required_props = { code: name_code_map[name] };
+
+            if (required_props.code === 0
+            || ("name" in e && e.name !== e.name.toUpperCase() && e.name !== "DOMException"))
+            {
+                // New style exception: also test the name property.
+                required_props.name = name;
+            }
+
+            //We'd like to test that e instanceof the appropriate interface,
+            //but we can't, because we don't know what window it was created
+            //in.  It might be an instanceof the appropriate interface on some
+            //unknown other window.  TODO: Work around this somehow?
+
+            assert(typeof e == "object",
+                   "assert_throws", description,
+                   "${func} threw ${e} with type ${type}, not an object",
+                   {func:func, e:e, type:typeof e});
+
+            for (var prop in required_props)
+            {
+                assert(typeof e == "object" && prop in e && e[prop] == required_props[prop],
+                       "assert_throws", description,
+                       "${func} threw ${e} that is not a DOMException " + code + ": property ${prop} is equal to ${actual}, expected ${expected}",
+                       {func:func, e:e, prop:prop, actual:e[prop], expected:required_props[prop]});
+            }
+        }
+    }
+    expose(assert_throws, "assert_throws");
+
+    function assert_unreached(description) {
+         assert(false, "assert_unreached", description,
+                "Reached unreachable code");
+    }
+    expose(assert_unreached, "assert_unreached");
+
+    function assert_any(assert_func, actual, expected_array) 
+    {
+        var args = [].slice.call(arguments, 3)
+        var errors = []
+        var passed = false;
+        forEach(expected_array, 
+                function(expected)
+                {
+                    try {
+                        assert_func.apply(this, [actual, expected].concat(args))
+                        passed = true;
+                    } catch(e) {
+                        errors.push(e.message);
+                    }
+                });
+        if (!passed) {
+            throw new AssertionError(errors.join("\n\n"));
+        }
+    }
+    expose(assert_any, "assert_any");
+
+    function Test(name, properties)
+    {
+        this.name = name;
+        this.status = this.NOTRUN;
+        this.timeout_id = null;
+        this.is_done = false;
+
+        this.properties = properties;
+        this.timeout_length = properties.timeout ? properties.timeout : settings.test_timeout;
+
+        this.message = null;
+
+        var this_obj = this;
+        this.steps = [];
+
+        tests.push(this);
+    }
+
+    Test.statuses = {
+        PASS:0,
+        FAIL:1,
+        TIMEOUT:2,
+        NOTRUN:3
+    };
+
+    Test.prototype = merge({}, Test.statuses);
+
+    Test.prototype.structured_clone = function()
+    {
+        if(!this._structured_clone)
+        {
+            var msg = this.message;
+            msg = msg ? String(msg) : msg;
+            this._structured_clone = merge({
+                name:String(this.name),
+                status:this.status,
+                message:msg
+            }, Test.statuses);
+        }
+        return this._structured_clone;
+    };
+
+    Test.prototype.step = function(func, this_obj)
+    {
+        //In case the test has already failed
+        if (this.status !== this.NOTRUN)
+        {
+          return;
+        }
+
+        tests.started = true;
+
+        if (this.timeout_id === null) {
+            this.set_timeout();
+        }
+
+        this.steps.push(func);
+
+        if (arguments.length === 1)
+        {
+            this_obj = this;
+        }
+
+        try
+        {
+            return func.apply(this_obj, Array.prototype.slice.call(arguments, 2));
+        }
+        catch(e)
+        {
+            //This can happen if something called synchronously invoked another
+            //step
+            if (this.status !== this.NOTRUN)
+            {
+                return;
+            }
+            this.status = this.FAIL;
+            this.message = (typeof e === "object" && e !== null) ? e.message : e;
+            if (typeof e.stack != "undefined" && typeof e.message == "string") {
+                //Try to make it more informative for some exceptions, at least
+                //in Gecko and WebKit.  This results in a stack dump instead of
+                //just errors like "Cannot read property 'parentNode' of null"
+                //or "root is null".  Makes it a lot longer, of course.
+                this.message += "(stack: " + e.stack + ")";
+            }
+            this.done();
+            if (debug && e.constructor !== AssertionError) {
+                throw e;
+            }
+        }
+    };
+
+    Test.prototype.step_func = function(func, this_obj)
+    {
+        var test_this = this;
+
+        if (arguments.length === 1)
+        {
+            this_obj = test_this;
+        }
+
+        return function()
+        {
+            test_this.step.apply(test_this, [func, this_obj].concat(
+                Array.prototype.slice.call(arguments)));
+        };
+    };
+
+    Test.prototype.step_func_done = function(func, this_obj)
+    {
+        var test_this = this;
+
+        if (arguments.length === 1)
+        {
+            this_obj = test_this;
+        }
+
+        return function()
+        {
+            test_this.step.apply(test_this, [func, this_obj].concat(
+                Array.prototype.slice.call(arguments)));
+            test_this.done();
+        };
+    };
+
+    Test.prototype.set_timeout = function()
+    {
+        var this_obj = this;
+        this.timeout_id = setTimeout(function()
+                                     {
+                                         this_obj.timeout();
+                                     }, this.timeout_length);
+    };
+
+    Test.prototype.timeout = function()
+    {
+        this.status = this.TIMEOUT;
+        this.timeout_id = null;
+        this.message = "Test timed out";
+        this.done();
+    };
+
+    Test.prototype.done = function()
+    {
+        if (this.is_done) {
+            return;
+        }
+        clearTimeout(this.timeout_id);
+        if (this.status === this.NOTRUN)
+        {
+            this.status = this.PASS;
+        }
+        this.is_done = true;
+        tests.result(this);
+    };
+
+
+    /*
+     * Harness
+     */
+
+    function TestsStatus()
+    {
+        this.status = null;
+        this.message = null;
+    }
+
+    TestsStatus.statuses = {
+        OK:0,
+        ERROR:1,
+        TIMEOUT:2
+    };
+
+    TestsStatus.prototype = merge({}, TestsStatus.statuses);
+
+    TestsStatus.prototype.structured_clone = function()
+    {
+        if(!this._structured_clone)
+        {
+            var msg = this.message;
+            msg = msg ? String(msg) : msg;
+            this._structured_clone = merge({
+                status:this.status,
+                message:msg
+            }, TestsStatus.statuses);
+        }
+        return this._structured_clone;
+    };
+
+    function Tests()
+    {
+        this.tests = [];
+        this.num_pending = 0;
+
+        this.phases = {
+            INITIAL:0,
+            SETUP:1,
+            HAVE_TESTS:2,
+            HAVE_RESULTS:3,
+            COMPLETE:4
+        };
+        this.phase = this.phases.INITIAL;
+
+        this.properties = {};
+
+        //All tests can't be done until the load event fires
+        this.all_loaded = false;
+        this.wait_for_finish = false;
+        this.processing_callbacks = false;
+
+        this.timeout_length = settings.timeout;
+        this.timeout_id = null;
+
+        this.start_callbacks = [];
+        this.test_done_callbacks = [];
+        this.all_done_callbacks = [];
+
+        this.status = new TestsStatus();
+
+        var this_obj = this;
+
+        on_event(window, "load",
+                 function()
+                 {
+                     this_obj.all_loaded = true;
+                     if (this_obj.all_done())
+                     {
+                         this_obj.complete();
+                     }
+                 });
+
+        this.set_timeout();
+    }
+
+    Tests.prototype.setup = function(func, properties)
+    {
+        if (this.phase >= this.phases.HAVE_RESULTS)
+        {
+            return;
+        }
+        if (this.phase < this.phases.SETUP)
+        {
+            this.phase = this.phases.SETUP;
+        }
+
+        for (var p in properties)
+        {
+            if (properties.hasOwnProperty(p))
+            {
+                this.properties[p] = properties[p];
+            }
+        }
+
+        if (properties.timeout)
+        {
+            this.timeout_length = properties.timeout;
+        }
+        if (properties.explicit_done)
+        {
+            this.wait_for_finish = true;
+        }
+        if (properties.explicit_timeout) {
+            this.timeout_length = null;
+        }
+
+        if (func)
+        {
+            try
+            {
+                func();
+            } catch(e)
+            {
+                this.status.status = this.status.ERROR;
+                this.status.message = e;
+            };
+        }
+        this.set_timeout();
+    };
+
+    Tests.prototype.set_timeout = function()
+    {
+        var this_obj = this;
+        clearTimeout(this.timeout_id);
+        if (this.timeout_length !== null)
+        {
+            this.timeout_id = setTimeout(function() {
+                                             this_obj.timeout();
+                                         }, this.timeout_length);
+        }
+    };
+
+    Tests.prototype.timeout = function() {
+        this.status.status = this.status.TIMEOUT;
+        this.complete();
+    };
+
+    Tests.prototype.end_wait = function()
+    {
+        this.wait_for_finish = false;
+        if (this.all_done()) {
+            this.complete();
+        }
+    };
+
+    Tests.prototype.push = function(test)
+    {
+        if (this.phase < this.phases.HAVE_TESTS) {
+            this.start();
+        }
+        this.num_pending++;
+        this.tests.push(test);
+    };
+
+    Tests.prototype.all_done = function() {
+        return (this.all_loaded && this.num_pending === 0 &&
+                !this.wait_for_finish && !this.processing_callbacks);
+    };
+
+    Tests.prototype.start = function() {
+        this.phase = this.phases.HAVE_TESTS;
+        this.notify_start();
+    };
+
+    Tests.prototype.notify_start = function() {
+        var this_obj = this;
+        forEach (this.start_callbacks,
+                 function(callback)
+                 {
+                     callback(this_obj.properties);
+                 });
+        forEach_windows(
+                function(w, is_same_origin)
+                {
+                    if(is_same_origin && w.start_callback)
+                    {
+                        try
+                        {
+                            w.start_callback(this_obj.properties);
+                        }
+                        catch(e)
+                        {
+                            if (debug)
+                            {
+                                throw(e);
+                            }
+                        }
+                    }
+                    if (supports_post_message(w) && w !== self)
+                    {
+                        w.postMessage({
+                            type: "start",
+                            properties: this_obj.properties
+                        }, "*");
+                    }
+                });
+    };
+
+    Tests.prototype.result = function(test)
+    {
+        if (this.phase > this.phases.HAVE_RESULTS)
+        {
+            return;
+        }
+        this.phase = this.phases.HAVE_RESULTS;
+        this.num_pending--;
+        this.notify_result(test);
+    };
+
+    Tests.prototype.notify_result = function(test) {
+        var this_obj = this;
+        this.processing_callbacks = true;
+        forEach(this.test_done_callbacks,
+                function(callback)
+                {
+                    callback(test, this_obj);
+                });
+
+        forEach_windows(
+                function(w, is_same_origin)
+                {
+                    if(is_same_origin && w.result_callback)
+                    {
+                        try
+                        {
+                            w.result_callback(test);
+                        }
+                        catch(e)
+                        {
+                            if(debug) {
+                                throw e;
+                            }
+                        }
+                    }
+                    if (supports_post_message(w) && w !== self)
+                    {
+                        w.postMessage({
+                            type: "result",
+                            test: test.structured_clone()
+                        }, "*");
+                    }
+                });
+        this.processing_callbacks = false;
+        if (this_obj.all_done())
+        {
+            this_obj.complete();
+        }
+    };
+
+    Tests.prototype.complete = function() {
+        if (this.phase === this.phases.COMPLETE) {
+            return;
+        }
+        this.phase = this.phases.COMPLETE;
+        var this_obj = this;
+        this.tests.forEach(
+            function(x)
+            {
+                if(x.status === x.NOTRUN)
+                {
+                    this_obj.notify_result(x);
+                }
+            }
+        );
+        this.notify_complete();
+    };
+
+    Tests.prototype.notify_complete = function()
+    {
+        clearTimeout(this.timeout_id);
+        var this_obj = this;
+        var tests = map(this_obj.tests,
+                        function(test)
+                        {
+                            return test.structured_clone();
+                        });
+        if (this.status.status === null)
+        {
+            this.status.status = this.status.OK;
+        }
+
+        forEach (this.all_done_callbacks,
+                 function(callback)
+                 {
+                     callback(this_obj.tests, this_obj.status);
+                 });
+
+        forEach_windows(
+                function(w, is_same_origin)
+                {
+                    if(is_same_origin && w.completion_callback)
+                    {
+                        try
+                        {
+                            w.completion_callback(this_obj.tests, this_obj.status);
+                        }
+                        catch(e)
+                        {
+                            if (debug)
+                            {
+                                throw e;
+                            }
+                        }
+                    }
+                    if (supports_post_message(w) && w !== self)
+                    {
+                        w.postMessage({
+                            type: "complete",
+                            tests: tests,
+                            status: this_obj.status.structured_clone()
+                        }, "*");
+                    }
+                });
+    };
+
+    var tests = new Tests();
+
+    function timeout() {
+        if (tests.timeout_length === null)
+        {
+            tests.timeout();
+        }
+    }
+    expose(timeout, 'timeout');
+
+    function add_start_callback(callback) {
+        tests.start_callbacks.push(callback);
+    }
+
+    function add_result_callback(callback)
+    {
+        tests.test_done_callbacks.push(callback);
+    }
+
+    function add_completion_callback(callback)
+    {
+       tests.all_done_callbacks.push(callback);
+    }
+
+    expose(add_start_callback, 'add_start_callback');
+    expose(add_result_callback, 'add_result_callback');
+    expose(add_completion_callback, 'add_completion_callback');
+
+    /*
+     * Output listener
+    */
+
+    function Output() {
+      this.output_document = document;
+      this.output_node = null;
+      this.done_count = 0;
+      this.enabled = settings.output;
+      this.phase = this.INITIAL;
+    }
+
+    Output.prototype.INITIAL = 0;
+    Output.prototype.STARTED = 1;
+    Output.prototype.HAVE_RESULTS = 2;
+    Output.prototype.COMPLETE = 3;
+
+    Output.prototype.setup = function(properties) {
+        if (this.phase > this.INITIAL) {
+            return;
+        }
+
+        //If output is disabled in testharnessreport.js the test shouldn't be
+        //able to override that
+        this.enabled = this.enabled && (properties.hasOwnProperty("output") ?
+                                        properties.output : settings.output);
+    };
+
+    Output.prototype.init = function(properties)
+    {
+        if (this.phase >= this.STARTED) {
+            return;
+        }
+        if (properties.output_document) {
+            this.output_document = properties.output_document;
+        } else {
+            this.output_document = document;
+        }
+        this.phase = this.STARTED;
+    };
+
+    Output.prototype.resolve_log = function()
+    {
+        var output_document;
+        if (typeof this.output_document === "function")
+        {
+            output_document = this.output_document.apply(undefined);
+        } else
+        {
+            output_document = this.output_document;
+        }
+        if (!output_document)
+        {
+            return;
+        }
+        var node = output_document.getElementById("log");
+        if (node)
+        {
+            this.output_document = output_document;
+            this.output_node = node;
+        }
+    };
+
+    Output.prototype.show_status = function(test)
+    {
+        if (this.phase < this.STARTED)
+        {
+            this.init();
+        }
+        if (!this.enabled)
+        {
+            return;
+        }
+        if (this.phase < this.HAVE_RESULTS)
+        {
+            this.resolve_log();
+            this.phase = this.HAVE_RESULTS;
+        }
+        this.done_count++;
+        if (this.output_node)
+        {
+            if (this.done_count < 100
+            || (this.done_count < 1000 && this.done_count % 100 == 0)
+            || this.done_count % 1000 == 0) {
+                this.output_node.textContent = "Running, "
+                    + this.done_count + " complete, "
+                    + tests.num_pending + " remain";
+            }
+        }
+    };
+
+    Output.prototype.show_results = function (tests, harness_status)
+    {
+        if (this.phase >= this.COMPLETE) {
+            return;
+        }
+        if (!this.enabled)
+        {
+            return;
+        }
+        if (!this.output_node) {
+            this.resolve_log();
+        }
+        this.phase = this.COMPLETE;
+
+        var log = this.output_node;
+        if (!log)
+        {
+            return;
+        }
+        var output_document = this.output_document;
+
+        while (log.lastChild)
+        {
+            log.removeChild(log.lastChild);
+        }
+
+        if (script_prefix != null) {
+            var stylesheet = output_document.createElementNS(xhtml_ns, "link");
+            stylesheet.setAttribute("rel", "stylesheet");
+            stylesheet.setAttribute("href", script_prefix + "testharness.css");
+            var heads = output_document.getElementsByTagName("head");
+            if (heads.length) {
+                heads[0].appendChild(stylesheet);
+            }
+        }
+
+        var status_text = {};
+        status_text[Test.prototype.PASS] = "Pass";
+        status_text[Test.prototype.FAIL] = "Fail";
+        status_text[Test.prototype.TIMEOUT] = "Timeout";
+        status_text[Test.prototype.NOTRUN] = "Not Run";
+
+        var status_number = {};
+        forEach(tests, function(test) {
+                    var status = status_text[test.status];
+                    if (status_number.hasOwnProperty(status))
+                    {
+                        status_number[status] += 1;
+                    } else {
+                        status_number[status] = 1;
+                    }
+                });
+
+        function status_class(status)
+        {
+            return status.replace(/\s/g, '').toLowerCase();
+        }
+
+        var summary_template = ["section", {"id":"summary"},
+                                ["h2", {}, "Summary"],
+                                ["p", {}, "Found ${num_tests} tests"],
+                                function(vars) {
+                                    var rv = [["div", {}]];
+                                    var i=0;
+                                    while (status_text.hasOwnProperty(i)) {
+                                        if (status_number.hasOwnProperty(status_text[i])) {
+                                            var status = status_text[i];
+                                            rv[0].push(["div", {"class":status_class(status)},
+                                                        ["label", {},
+                                                         ["input", {type:"checkbox", checked:"checked"}],
+                                                         status_number[status] + " " + status]]);
+                                        }
+                                        i++;
+                                    }
+                                    return rv;
+                                }];
+
+        log.appendChild(render(summary_template, {num_tests:tests.length}, output_document));
+
+        forEach(output_document.querySelectorAll("section#summary label"),
+                function(element)
+                {
+                    on_event(element, "click",
+                             function(e)
+                             {
+                                 if (output_document.getElementById("results") === null)
+                                 {
+                                     e.preventDefault();
+                                     return;
+                                 }
+                                 var result_class = element.parentNode.getAttribute("class");
+                                 var style_element = output_document.querySelector("style#hide-" + result_class);
+                                 var input_element = element.querySelector("input");
+                                 if (!style_element && !input_element.checked) {
+                                     style_element = output_document.createElementNS(xhtml_ns, "style");
+                                     style_element.id = "hide-" + result_class;
+                                     style_element.textContent = "table#results > tbody > tr."+result_class+"{display:none}";
+                                     output_document.body.appendChild(style_element);
+                                 } else if (style_element && input_element.checked) {
+                                     style_element.parentNode.removeChild(style_element);
+                                 }
+                             });
+                });
+
+        // This use of innerHTML plus manual escaping is not recommended in
+        // general, but is necessary here for performance.  Using textContent
+        // on each individual <td> adds tens of seconds of execution time for
+        // large test suites (tens of thousands of tests).
+        function escape_html(s)
+        {
+            return s.replace(/\&/g, "&amp;")
+                .replace(/</g, "&lt;")
+                .replace(/"/g, "&quot;")
+                .replace(/'/g, "&#39;");
+        }
+
+        function has_assertions()
+        {
+            for (var i = 0; i < tests.length; i++) {
+                if (tests[i].properties.hasOwnProperty("assert")) {
+                    return true;
+                }
+            }
+            return false;
+        }
+        
+        function get_assertion(test)
+        {
+            if (test.properties.hasOwnProperty("assert")) {
+                if (Array.isArray(test.properties.assert)) {
+                    return test.properties.assert.join(' ');
+                }
+                return test.properties.assert;
+            }
+            return '';
+        }
+        
+        log.appendChild(document.createElementNS(xhtml_ns, "section"));
+        var assertions = has_assertions();
+        var html = "<h2>Details</h2><table id='results' " + (assertions ? "class='assertions'" : "" ) + ">"
+            + "<thead><tr><th>Result</th><th>Test Name</th>"
+            + (assertions ? "<th>Assertion</th>" : "")
+            + "<th>Message</th></tr></thead>"
+            + "<tbody>";
+        for (var i = 0; i < tests.length; i++) {
+            html += '<tr class="'
+                + escape_html(status_class(status_text[tests[i].status]))
+                + '"><td>'
+                + escape_html(status_text[tests[i].status])
+                + "</td><td>"
+                + escape_html(tests[i].name)
+                + "</td><td>"
+                + (assertions ? escape_html(get_assertion(tests[i])) + "</td><td>" : "")
+                + escape_html(tests[i].message ? tests[i].message : " ")
+                + "</td></tr>";
+        }
+        html += "</tbody></table>";
+        try {
+            log.lastChild.innerHTML = html;
+        } catch (e) {
+            log.appendChild(document.createElementNS(xhtml_ns, "p"))
+               .textContent = "Setting innerHTML for the log threw an exception.";
+            log.appendChild(document.createElementNS(xhtml_ns, "pre"))
+               .textContent = html;
+        }
+    };
+
+    var output = new Output();
+    add_start_callback(function (properties) {output.init(properties);});
+    add_result_callback(function (test) {output.show_status(tests);});
+    add_completion_callback(function (tests, harness_status) {output.show_results(tests, harness_status);});
+
+    /*
+     * Template code
+     *
+     * A template is just a javascript structure. An element is represented as:
+     *
+     * [tag_name, {attr_name:attr_value}, child1, child2]
+     *
+     * the children can either be strings (which act like text nodes), other templates or
+     * functions (see below)
+     *
+     * A text node is represented as
+     *
+     * ["{text}", value]
+     *
+     * String values have a simple substitution syntax; ${foo} represents a variable foo.
+     *
+     * It is possible to embed logic in templates by using a function in a place where a
+     * node would usually go. The function must either return part of a template or null.
+     *
+     * In cases where a set of nodes are required as output rather than a single node
+     * with children it is possible to just use a list
+     * [node1, node2, node3]
+     *
+     * Usage:
+     *
+     * render(template, substitutions) - take a template and an object mapping
+     * variable names to parameters and return either a DOM node or a list of DOM nodes
+     *
+     * substitute(template, substitutions) - take a template and variable mapping object,
+     * make the variable substitutions and return the substituted template
+     *
+     */
+
+    function is_single_node(template)
+    {
+        return typeof template[0] === "string";
+    }
+
+    function substitute(template, substitutions)
+    {
+        if (typeof template === "function") {
+            var replacement = template(substitutions);
+            if (replacement)
+            {
+                var rv = substitute(replacement, substitutions);
+                return rv;
+            }
+            else
+            {
+                return null;
+            }
+        }
+        else if (is_single_node(template))
+        {
+            return substitute_single(template, substitutions);
+        }
+        else
+        {
+            return filter(map(template, function(x) {
+                                  return substitute(x, substitutions);
+                              }), function(x) {return x !== null;});
+        }
+    }
+
+    function substitute_single(template, substitutions)
+    {
+        var substitution_re = /\${([^ }]*)}/g;
+
+        function do_substitution(input) {
+            var components = input.split(substitution_re);
+            var rv = [];
+            for (var i=0; i<components.length; i+=2)
+            {
+                rv.push(components[i]);
+                if (components[i+1])
+                {
+                    rv.push(String(substitutions[components[i+1]]));
+                }
+            }
+            return rv;
+        }
+
+        var rv = [];
+        rv.push(do_substitution(String(template[0])).join(""));
+
+        if (template[0] === "{text}") {
+            substitute_children(template.slice(1), rv);
+        } else {
+            substitute_attrs(template[1], rv);
+            substitute_children(template.slice(2), rv);
+        }
+
+        function substitute_attrs(attrs, rv)
+        {
+            rv[1] = {};
+            for (var name in template[1])
+            {
+                if (attrs.hasOwnProperty(name))
+                {
+                    var new_name = do_substitution(name).join("");
+                    var new_value = do_substitution(attrs[name]).join("");
+                    rv[1][new_name] = new_value;
+                };
+            }
+        }
+
+        function substitute_children(children, rv)
+        {
+            for (var i=0; i<children.length; i++)
+            {
+                if (children[i] instanceof Object) {
+                    var replacement = substitute(children[i], substitutions);
+                    if (replacement !== null)
+                    {
+                        if (is_single_node(replacement))
+                        {
+                            rv.push(replacement);
+                        }
+                        else
+                        {
+                            extend(rv, replacement);
+                        }
+                    }
+                }
+                else
+                {
+                    extend(rv, do_substitution(String(children[i])));
+                }
+            }
+            return rv;
+        }
+
+        return rv;
+    }
+
+ function make_dom_single(template, doc)
+ {
+     var output_document = doc || document;
+     if (template[0] === "{text}")
+     {
+         var element = output_document.createTextNode("");
+         for (var i=1; i<template.length; i++)
+         {
+             element.data += template[i];
+         }
+     }
+     else
+     {
+         var element = output_document.createElementNS(xhtml_ns, template[0]);
+         for (var name in template[1]) {
+             if (template[1].hasOwnProperty(name))
+             {
+                 element.setAttribute(name, template[1][name]);
+             }
+         }
+         for (var i=2; i<template.length; i++)
+         {
+             if (template[i] instanceof Object)
+             {
+                 var sub_element = make_dom(template[i]);
+                 element.appendChild(sub_element);
+             }
+             else
+             {
+                 var text_node = output_document.createTextNode(template[i]);
+                 element.appendChild(text_node);
+             }
+         }
+     }
+
+     return element;
+ }
+
+
+
+ function make_dom(template, substitutions, output_document)
+    {
+        if (is_single_node(template))
+        {
+            return make_dom_single(template, output_document);
+        }
+        else
+        {
+            return map(template, function(x) {
+                           return make_dom_single(x, output_document);
+                       });
+        }
+    }
+
+ function render(template, substitutions, output_document)
+    {
+        return make_dom(substitute(template, substitutions), output_document);
+    }
+
+    /*
+     * Utility funcions
+     */
+    function assert(expected_true, function_name, description, error, substitutions)
+    {
+        if (expected_true !== true)
+        {
+            throw new AssertionError(make_message(function_name, description,
+                                                  error, substitutions));
+        }
+    }
+
+    function AssertionError(message)
+    {
+        this.message = message;
+    }
+
+    function make_message(function_name, description, error, substitutions)
+    {
+        for (var p in substitutions) {
+            if (substitutions.hasOwnProperty(p)) {
+                substitutions[p] = format_value(substitutions[p]);
+            }
+        }
+        var node_form = substitute(["{text}", "${function_name}: ${description}" + error],
+                                   merge({function_name:function_name,
+                                          description:(description?description + " ":"")},
+                                          substitutions));
+        return node_form.slice(1).join("");
+    }
+
+    function filter(array, callable, thisObj) {
+        var rv = [];
+        for (var i=0; i<array.length; i++)
+        {
+            if (array.hasOwnProperty(i))
+            {
+                var pass = callable.call(thisObj, array[i], i, array);
+                if (pass) {
+                    rv.push(array[i]);
+                }
+            }
+        }
+        return rv;
+    }
+
+    function map(array, callable, thisObj)
+    {
+        var rv = [];
+        rv.length = array.length;
+        for (var i=0; i<array.length; i++)
+        {
+            if (array.hasOwnProperty(i))
+            {
+                rv[i] = callable.call(thisObj, array[i], i, array);
+            }
+        }
+        return rv;
+    }
+
+    function extend(array, items)
+    {
+        Array.prototype.push.apply(array, items);
+    }
+
+    function forEach (array, callback, thisObj)
+    {
+        for (var i=0; i<array.length; i++)
+        {
+            if (array.hasOwnProperty(i))
+            {
+                callback.call(thisObj, array[i], i, array);
+            }
+        }
+    }
+
+    function merge(a,b)
+    {
+        var rv = {};
+        var p;
+        for (p in a)
+        {
+            rv[p] = a[p];
+        }
+        for (p in b) {
+            rv[p] = b[p];
+        }
+        return rv;
+    }
+
+    function expose(object, name)
+    {
+        var components = name.split(".");
+        var target = window;
+        for (var i=0; i<components.length - 1; i++)
+        {
+            if (!(components[i] in target))
+            {
+                target[components[i]] = {};
+            }
+            target = target[components[i]];
+        }
+        target[components[components.length - 1]] = object;
+    }
+
+    function forEach_windows(callback) {
+        // Iterate of the the windows [self ... top, opener]. The callback is passed
+        // two objects, the first one is the windows object itself, the second one
+        // is a boolean indicating whether or not its on the same origin as the
+        // current window.
+        var cache = forEach_windows.result_cache;
+        if (!cache) {
+            cache = [[self, true]];
+            var w = self;
+            var i = 0;
+            var so;
+            var origins = location.ancestorOrigins;
+            while (w != w.parent)
+            {
+                w = w.parent;
+                // In WebKit, calls to parent windows' properties that aren't on the same
+                // origin cause an error message to be displayed in the error console but
+                // don't throw an exception. This is a deviation from the current HTML5
+                // spec. See: https://bugs.webkit.org/show_bug.cgi?id=43504
+                // The problem with WebKit's behavior is that it pollutes the error console
+                // with error messages that can't be caught.
+                //
+                // This issue can be mitigated by relying on the (for now) proprietary
+                // `location.ancestorOrigins` property which returns an ordered list of
+                // the origins of enclosing windows. See:
+                // http://trac.webkit.org/changeset/113945.
+                if(origins) {
+                    so = (location.origin == origins[i]);
+                }
+                else
+                {
+                    so = is_same_origin(w);
+                }
+                cache.push([w, so]);
+                i++;
+            }
+            w = window.opener;
+            if(w)
+            {
+                // window.opener isn't included in the `location.ancestorOrigins` prop.
+                // We'll just have to deal with a simple check and an error msg on WebKit
+                // browsers in this case.
+                cache.push([w, is_same_origin(w)]);
+            }
+            forEach_windows.result_cache = cache;
+        }
+
+        forEach(cache,
+                function(a)
+                {
+                    callback.apply(null, a);
+                });
+    }
+
+    function is_same_origin(w) {
+        try {
+            'random_prop' in w;
+            return true;
+        } catch(e) {
+            return false;
+        }
+    }
+
+    function supports_post_message(w)
+    {
+        var supports;
+        var type;
+        // Given IE  implements postMessage across nested iframes but not across
+        // windows or tabs, you can't infer cross-origin communication from the presence
+        // of postMessage on the current window object only.
+        //
+        // Touching the postMessage prop on a window can throw if the window is
+        // not from the same origin AND post message is not supported in that
+        // browser. So just doing an existence test here won't do, you also need
+        // to wrap it in a try..cacth block.
+        try
+        {
+            type = typeof w.postMessage;
+            if (type === "function")
+            {
+                supports = true;
+            }
+            // IE8 supports postMessage, but implements it as a host object which
+            // returns "object" as its `typeof`.
+            else if (type === "object")
+            {
+                supports = true;
+            }
+            // This is the case where postMessage isn't supported AND accessing a
+            // window property across origins does NOT throw (e.g. old Safari browser).
+            else
+            {
+                supports = false;
+            }
+        }
+        catch(e) {
+            // This is the case where postMessage isn't supported AND accessing a
+            // window property across origins throws (e.g. old Firefox browser).
+            supports = false;
+        }
+        return supports;
+    }
+})();
+
+// vim: set expandtab shiftwidth=4 tabstop=4:
diff --git a/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/plugin/web_templates/resources/testharnessreport.js b/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/plugin/web_templates/resources/testharnessreport.js
new file mode 100755 (executable)
index 0000000..fa73347
--- /dev/null
@@ -0,0 +1,380 @@
+/*
+ * This file is intended for vendors to implement
+ * code needed to integrate testharness.js tests with their own test systems.
+ *
+ * The default implementation extracts metadata from the tests and validates 
+ * it against the cached version that should be present in the test source 
+ * file. If the cache is not found or is out of sync, source code suitable for
+ * caching the metadata is optionally generated.
+ *
+ * The cached metadata is present for extraction by test processing tools that
+ * are unable to execute javascript.
+ *
+ * Metadata is attached to tests via the properties parameter in the test
+ * constructor. See testharness.js for details.
+ *
+ * Typically test system integration will attach callbacks when each test has
+ * run, using add_result_callback(callback(test)), or when the whole test file
+ * has completed, using 
+ * add_completion_callback(callback(tests, harness_status)).
+ *
+ * For more documentation about the callback functions and the
+ * parameters they are called with see testharness.js
+ */
+
+
+
+var metadata_generator = {
+
+    currentMetadata: {},
+    cachedMetadata: false,
+    metadataProperties: ['help', 'assert', 'author'],
+    
+    error: function(message) {
+        var messageElement = document.createElement('p');
+        messageElement.setAttribute('class', 'error');
+        this.appendText(messageElement, message);
+        
+        var summary = document.getElementById('summary');
+        if (summary) {
+            summary.parentNode.insertBefore(messageElement, summary);
+        }
+        else {
+            document.body.appendChild(messageElement);
+        }
+    },
+
+    /**
+     * Ensure property value has contact information
+     */
+    validateContact: function(test, propertyName) {
+        var result = true;
+        var value = test.properties[propertyName];
+        var values = Array.isArray(value) ? value : [value];
+        for (var index = 0; index < values.length; index++) {
+            value = values[index];
+            var re = /(\S+)(\s*)<(.*)>(.*)/;
+            if (! re.test(value)) {
+                re = /(\S+)(\s+)(http[s]?:\/\/)(.*)/
+                if (! re.test(value)) {
+                    this.error('Metadata property "' + propertyName + 
+                        '" for test: "' + test.name +
+                        '" must have name and contact information ' +
+                        '("name <email>" or "name http(s)://")');
+                    result = false;
+                }
+            }
+        }
+        return result;
+    },
+    
+    /**
+     * Extract metadata from test object
+     */
+    extractFromTest: function(test) {
+        var testMetadata = {};
+        // filter out metadata from other properties in test
+        for (var metaIndex = 0; metaIndex < this.metadataProperties.length;
+             metaIndex++) {
+            var meta = this.metadataProperties[metaIndex];
+            if (test.properties.hasOwnProperty(meta)) {
+                if ('author' == meta) {
+                    this.validateContact(test, meta);
+                }
+                testMetadata[meta] = test.properties[meta];
+            }
+        }
+        return testMetadata;
+    },
+    
+    /**
+     * Compare cached metadata to extracted metadata
+     */
+    validateCache: function() {
+        for (var testName in this.currentMetadata) {
+            if (! this.cachedMetadata.hasOwnProperty(testName)) {
+                return false;
+            }
+            var testMetadata = this.currentMetadata[testName];
+            var cachedTestMetadata = this.cachedMetadata[testName];
+            delete this.cachedMetadata[testName];
+            
+            for (var metaIndex = 0; metaIndex < this.metadataProperties.length;
+                 metaIndex++) {
+                var meta = this.metadataProperties[metaIndex];
+                if (cachedTestMetadata.hasOwnProperty(meta) && 
+                    testMetadata.hasOwnProperty(meta)) {
+                    if (Array.isArray(cachedTestMetadata[meta])) {
+                      if (! Array.isArray(testMetadata[meta])) {
+                          return false;
+                      }
+                      if (cachedTestMetadata[meta].length == 
+                          testMetadata[meta].length) {
+                          for (var index = 0; 
+                               index < cachedTestMetadata[meta].length; 
+                               index++) {
+                              if (cachedTestMetadata[meta][index] != 
+                                  testMetadata[meta][index]) {
+                                  return false;
+                              }
+                          }
+                      }
+                      else {
+                          return false;
+                      }
+                    }
+                    else {
+                      if (Array.isArray(testMetadata[meta])) {
+                        return false;
+                      }
+                      if (cachedTestMetadata[meta] != testMetadata[meta]) {
+                        return false;
+                      }
+                    }
+                }
+                else if (cachedTestMetadata.hasOwnProperty(meta) || 
+                         testMetadata.hasOwnProperty(meta)) {
+                    return false;
+                }
+            }
+        }
+        for (var testName in this.cachedMetadata) {
+            return false;
+        }
+        return true;
+    },
+  
+    appendText: function(elemement, text) {
+        elemement.appendChild(document.createTextNode(text));
+    },
+  
+    jsonifyArray: function(arrayValue, indent) {
+        var output = '[';
+
+        if (1 == arrayValue.length) {
+            output += JSON.stringify(arrayValue[0]);
+        }
+        else {
+            for (var index = 0; index < arrayValue.length; index++) {
+                if (0 < index) {
+                    output += ',\n  ' + indent;
+                }
+                output += JSON.stringify(arrayValue[index]);
+            }
+        }
+        output += ']';
+        return output;
+    },
+    
+    jsonifyObject: function(objectValue, indent) {
+        var output = '{';
+        
+        var count = 0;
+        for (var property in objectValue) {
+            ++count;
+            if (Array.isArray(objectValue[property]) || 
+                ('object' == typeof(value))) {
+                ++count;
+            }
+        }
+        if (1 == count) {
+            for (var property in objectValue) {
+                output += ' "' + property + '": '
+                          + JSON.stringify(objectValue[property])
+                          + ' ';
+            }
+        }
+        else {
+            var first = true;
+            for (var property in objectValue) {
+                if (! first) {
+                    output += ',';
+                }
+                first = false;
+                output += '\n  ' + indent + '"' + property + '": ';
+                var value = objectValue[property];
+                if (Array.isArray(value)) {
+                    output += this.jsonifyArray(value, indent + 
+                        '                '.substr(0, 5 + property.length));
+                }
+                else if ('object' == typeof(value)) {
+                    output += this.jsonifyObject(value, indent + '  ');
+                }
+                else {
+                    output += JSON.stringify(value);
+                }
+            }
+            if (1 < output.length) {
+                output += '\n' + indent;
+            }
+        }
+        output += '}';
+        return output;
+    },
+  
+    /**
+     * Generate javascript source code for captured metadata
+     * Metadata is in pretty-printed JSON format
+     */
+    generateSource: function() {
+        var source = 
+            '<script id="metadata_cache">/*\n' + 
+            this.jsonifyObject(this.currentMetadata, '') + '\n' + 
+            '*/</script>\n';
+        return source;
+    },
+    
+    /**
+     * Add element containing metadata source code
+     */
+    addSourceElement: function(event) {
+        var sourceWrapper = document.createElement('div');
+        sourceWrapper.setAttribute('id', 'metadata_source');
+
+        var instructions = document.createElement('p');
+        if (this.cachedMetadata) {
+            this.appendText(instructions, 
+                'Replace the existing <script id="metadata_cache"> element ' + 
+                'in the test\'s <head> with the following:');
+        }
+        else {
+            this.appendText(instructions, 
+                'Copy the following into the <head> element of the test ' +
+                'or the test\'s metadata sidecar file:');
+        }
+        sourceWrapper.appendChild(instructions);
+        
+        var sourceElement = document.createElement('pre');
+        this.appendText(sourceElement, this.generateSource());
+
+        sourceWrapper.appendChild(sourceElement);
+        
+        var messageElement = document.getElementById('metadata_issue');
+        messageElement.parentNode.insertBefore(sourceWrapper, 
+                                               messageElement.nextSibling);
+        messageElement.parentNode.removeChild(messageElement);
+
+        (event.preventDefault) ? event.preventDefault() : 
+                                 event.returnValue = false;
+    },
+    
+    /**
+     * Extract the metadata cache from the cache element if present
+     */
+    getCachedMetadata: function() {
+        var cacheElement = document.getElementById('metadata_cache');
+        
+        if (cacheElement) {
+            var cacheText = cacheElement.firstChild.nodeValue;
+            var openBrace = cacheText.indexOf('{');
+            var closeBrace = cacheText.lastIndexOf('}');
+            if ((-1 < openBrace) && (-1 < closeBrace)) {
+                cacheText = cacheText.slice(openBrace, closeBrace + 1);
+                try {
+                    this.cachedMetadata = JSON.parse(cacheText);
+                }
+                catch (exc) {
+                    this.cachedMetadata = 'Invalid JSON in Cached metadata. ';
+                }
+            }
+            else {
+                this.cachedMetadata = 'Metadata not found in cache element. ';
+            }
+        }
+    },
+    
+    /**
+     * Main entry point, extract metadata from tests, compare to cached version
+     * if present.
+     * If cache not present or differs from extrated metadata, generate an error
+     */
+    process: function(tests, harness_status) {
+        for (var index = 0; index < tests.length; index++) {
+            var test = tests[index];
+            if (this.currentMetadata.hasOwnProperty(test.name)) {
+                this.error('Duplicate test name: ' + test.name);
+            }
+            else {
+                this.currentMetadata[test.name] = this.extractFromTest(test);
+            }
+        }
+
+        this.getCachedMetadata();
+        
+        var message = null;
+        var messageClass = 'warning';
+        var showSource = false;
+        
+        if (0 == tests.length) {
+            if (this.cachedMetadata) {
+                message = 'Cached metadata present but no tests. ';
+            }
+        }
+        else if (1 == tests.length) {
+            if (this.cachedMetadata) {
+                message = 'Single test files should not have cached metadata. ';
+            }
+            else {
+                var testMetadata = this.currentMetadata[tests[0].name];
+                var hasMetadata = false;
+                for (var meta in testMetadata) {
+                    hasMetadata |= testMetadata.hasOwnProperty(meta);
+                }
+                if (hasMetadata) {
+                    message = 'Single tests should not have metadata. ' +
+                              'Move metadata to <head>. ';
+                }
+            }
+        }
+        else {
+            if (this.cachedMetadata) {
+                messageClass = 'error';
+                if ('string' == typeof(this.cachedMetadata)) {
+                    message = this.cachedMetadata;
+                    showSource = true;
+                }
+                else if (! this.validateCache()) {
+                    message = 'Cached metadata out of sync. ';
+                    showSource = true;
+                }
+            }
+        }
+        
+        if (message) {
+            var messageElement = document.createElement('p');
+            messageElement.setAttribute('id', 'metadata_issue');
+            messageElement.setAttribute('class', messageClass);
+            this.appendText(messageElement, message);
+            
+            if (showSource) {
+                var link = document.createElement('a');
+                this.appendText(link, 'Click for source code.');
+                link.setAttribute('href', '#');
+                link.setAttribute('onclick', 
+                                  'metadata_generator.addSourceElement(event)');
+                messageElement.appendChild(link);
+            }
+            
+            var summary = document.getElementById('summary');
+            if (summary) {
+                summary.parentNode.insertBefore(messageElement, summary);
+            }
+            else {
+                var log = document.getElementById('log');
+                if (log) {
+                    log.appendChild(messageElement);
+                }
+            }
+        }
+    },
+
+    setup: function() {
+        add_completion_callback(
+            function (tests, harness_status) { 
+                metadata_generator.process(tests, harness_status)
+            });
+    }
+}
+
+metadata_generator.setup();
+// vim: set expandtab shiftwidth=4 tabstop=4:
diff --git a/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/plugin/web_templates/testcase.xsl b/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/plugin/web_templates/testcase.xsl
new file mode 100755 (executable)
index 0000000..8623c28
--- /dev/null
@@ -0,0 +1,181 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<xsl:stylesheet version="1.0"
+       xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
+       <xsl:output method="html" version="1.0" encoding="UTF-8"
+               indent="yes" />
+       <xsl:template match="/">
+               <html>
+                       <STYLE type="text/css">
+                               @import "tests.css";
+                       </STYLE>
+
+                       <body>
+                               <div id="testcasepage">
+                                       <div id="title">
+                                               <table>
+                                                       <tr>
+                                                               <td>
+                                                                       <h1>Test Cases</h1>
+                                                               </td>
+                                                       </tr>
+                                               </table>
+                                       </div>
+                                       <div id="suites">
+                                               <table>
+                                                       <tr>
+                                                               <th>Test Suite</th>
+                                                               <th>Total</th>
+                                                               <th>Auto</th>
+                                                               <th>Manual</th>
+                                                       </tr>
+                                                       <tr>
+                                                               <td>
+                                                                       Total
+                                                               </td>
+                                                               <td>
+                                                                       <xsl:value-of select="count(test_definition/suite/set//testcase)" />
+                                                               </td>
+                                                               <td>
+                                                                       <xsl:value-of
+                                                                               select="count(test_definition/suite/set//testcase[@execution_type = 'auto'])" />
+                                                               </td>
+                                                               <td>
+                                                                       <xsl:value-of
+                                                                               select="count(test_definition/suite/set//testcase[@execution_type != 'auto'])" />
+                                                               </td>
+                                                       </tr>
+                                                       <xsl:for-each select="test_definition/suite">
+                                                               <tr>
+                                                                       <td>
+                                                                               <xsl:value-of select="@name" />
+                                                                       </td>
+                                                                       <td>
+                                                                               <xsl:value-of select="count(set//testcase)" />
+                                                                       </td>
+                                                                       <td>
+                                                                               <xsl:value-of select="count(set/testcase[@execution_type = 'auto'])" />
+                                                                       </td>
+                                                                       <td>
+                                                                               <xsl:value-of select="count(set/testcase[@execution_type != 'auto'])" />
+                                                                       </td>
+                                                               </tr>
+                                                       </xsl:for-each>
+                                               </table>
+                                       </div>
+                                       <div id="title">
+                                               <table>
+                                                       <tr>
+                                                               <td class="title">
+                                                                       <h1>Detailed Test Cases</h1>
+                                                               </td>
+                                                       </tr>
+                                               </table>
+                                       </div>
+                                       <div id="cases">
+                                               <xsl:for-each select="test_definition/suite">
+                                                       <xsl:sort select="@name" />
+                                                       <p>
+                                                               Test Suite:
+                                                               <xsl:value-of select="@name" />
+                                                       </p>
+                                                       <table>
+                                                               <tr>
+                                                                       <th>Case_ID</th>
+                                                                       <th>Purpose</th>
+                                                                       <th>Type</th>
+                                                                       <th>Component</th>
+                                                                       <th>Execution Type</th>
+                                                                       <th>Description</th>
+                                                                       <th>Specification</th>
+                                                               </tr>
+                                                               <xsl:for-each select=".//set">
+                                                                       <xsl:sort select="@name" />
+                                                                       <tr>
+                                                                               <td colspan="7">
+                                                                                       Test Set:
+                                                                                       <xsl:value-of select="@name" />
+                                                                               </td>
+                                                                       </tr>
+                                                                       <xsl:for-each select=".//testcase">
+                                                                               <xsl:sort select="@id" />
+                                                                               <tr>
+                                                                                       <td>
+                                                                                               <xsl:value-of select="@id" />
+                                                                                       </td>
+                                                                                       <td>
+                                                                                               <xsl:value-of select="@purpose" />
+                                                                                       </td>
+                                                                                       <td>
+                                                                                               <xsl:value-of select="@type" />
+                                                                                       </td>
+                                                                                       <td>
+                                                                                               <xsl:value-of select="@component" />
+                                                                                       </td>
+                                                                                       <td>
+                                                                                               <xsl:value-of select="@execution_type" />
+                                                                                       </td>
+                                                                                       <td>
+                                                                                               <p>
+                                                                                                       Pre_condition:
+                                                                                                       <xsl:value-of select=".//description/pre_condition" />
+                                                                                               </p>
+                                                                                               <p>
+                                                                                                       Post_condition:
+                                                                                                       <xsl:value-of select=".//description/post_condition" />
+                                                                                               </p>
+                                                                                               <p>
+                                                                                                       Test Script Entry:
+                                                                                                       <xsl:value-of select=".//description/test_script_entry" />
+                                                                                               </p>
+                                                                                               <p>
+                                                                                                       Steps:
+                                                                                                       <p />
+                                                                                                       <xsl:for-each select=".//description/steps/step">
+                                                                                                               <xsl:sort select="@order" />
+                                                                                                               Step
+                                                                                                               <xsl:value-of select="@order" />
+                                                                                                               :
+                                                                                                               <xsl:value-of select="./step_desc" />
+                                                                                                               ;
+                                                                                                               <p />
+                                                                                                               Expected Result:
+                                                                                                               <xsl:value-of select="./expected" />
+                                                                                                               <p />
+                                                                                                       </xsl:for-each>
+                                                                                               </p>
+                                                                                       </td>
+                                                                                       <td>
+                                                                                               <xsl:call-template name="br-replace">
+                                                                                                       <xsl:with-param name="word" select=".//spec" />
+                                                                                               </xsl:call-template>
+                                                                                       </td>
+                                                                               </tr>
+                                                                       </xsl:for-each>
+                                                               </xsl:for-each>
+                                                       </table>
+                                               </xsl:for-each>
+                                       </div>
+                               </div>
+                       </body>
+               </html>
+       </xsl:template>
+       <xsl:template name="br-replace">
+               <xsl:param name="word" />
+               <xsl:variable name="cr">
+                       <xsl:text>
+</xsl:text>
+               </xsl:variable>
+               <xsl:choose>
+                       <xsl:when test="contains($word,$cr)">
+                               <xsl:value-of select="substring-before($word,$cr)" />
+                               <br />
+                               <xsl:call-template name="br-replace">
+                                       <xsl:with-param name="word" select="substring-after($word,$cr)" />
+                               </xsl:call-template>
+                       </xsl:when>
+                       <xsl:otherwise>
+                               <xsl:value-of select="$word" />
+                       </xsl:otherwise>
+               </xsl:choose>
+       </xsl:template>
+</xsl:stylesheet>
\ No newline at end of file
diff --git a/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/plugin/web_templates/testcase/Makefile.am b/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/plugin/web_templates/testcase/Makefile.am
new file mode 100755 (executable)
index 0000000..4cc5091
--- /dev/null
@@ -0,0 +1,3 @@
+testcase_SCRIPTS = *
+testcasedir = $(prefix)/opt/{TESTSUITE_NAME}/testcase
+EXTRA_DIST = $(testcase_SCRIPTS)
diff --git a/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/plugin/web_templates/testresult.xsl b/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/plugin/web_templates/testresult.xsl
new file mode 100755 (executable)
index 0000000..d1ad1b9
--- /dev/null
@@ -0,0 +1,273 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<xsl:stylesheet version="1.0"
+       xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
+       <xsl:output method="html" version="1.0" encoding="UTF-8"
+               indent="yes" />
+       <xsl:template match="/">
+               <html>
+                       <STYLE type="text/css">
+                               @import "tests.css";
+                       </STYLE>
+
+                       <body>
+                               <div id="testcasepage">
+                                       <div id="title">
+                                               <table>
+                                                       <tr>
+                                                               <td>
+                                                                       <h1>Test Report</h1>
+                                                               </td>
+                                                       </tr>
+                                               </table>
+                                       </div>
+                                       <div id="device">
+                                               <table>
+                                                       <tr>
+                                                               <th colspan="2">Device Information</th>
+                                                       </tr>
+                                                       <tr>
+                                                               <td>Device Name</td>
+                                                               <td>
+                                                                       <xsl:value-of select="test_definition/environment/@device_name" />
+                                                               </td>
+                                                       </tr>
+                                                       <tr>
+                                                               <td>Device Model</td>
+                                                               <td>
+                                                                       <xsl:value-of select="test_definition/environment/@device_model" />
+                                                               </td>
+                                                       </tr>
+                                                       <tr>
+                                                               <td>OS Version</td>
+                                                               <td>
+                                                                       <xsl:value-of select="test_definition/environment/@os_version" />
+                                                               </td>
+                                                       </tr>
+                                                       <tr>
+                                                               <td>Device ID</td>
+                                                               <td>
+                                                                       <xsl:value-of select="test_definition/environment/@device_id" />
+                                                               </td>
+                                                       </tr>
+                                                       <tr>
+                                                               <td>Firmware Version</td>
+                                                               <td>
+                                                                       <xsl:value-of select="test_definition/environment/@firmware_version" />
+                                                               </td>
+                                                       </tr>
+                                                       <tr>
+                                                               <td>Screen Size</td>
+                                                               <td>
+                                                                       <xsl:value-of select="test_definition/environment/@screen_size" />
+                                                               </td>
+                                                       </tr>
+                                                       <tr>
+                                                               <td>Resolution</td>
+                                                               <td>
+                                                                       <xsl:value-of select="test_definition/environment/@resolution" />
+                                                               </td>
+                                                       </tr>
+                                                       <tr>
+                                                               <td>Host Info</td>
+                                                               <td>
+                                                                       <xsl:value-of select="test_definition/environment/@host" />
+                                                               </td>
+                                                       </tr>
+                                                       <tr>
+                                                               <td>Others</td>
+                                                               <td>
+                                                                       <xsl:value-of select="test_definition/environment/other" />
+                                                               </td>
+                                                       </tr>
+                                               </table>
+                                       </div>
+
+                                       <div id="summary">
+                                               <table>
+                                                       <tr>
+                                                               <th colspan="2">Test Summary</th>
+                                                       </tr>
+                                                       <tr>
+                                                               <td>Test Plan Name</td>
+                                                               <td>
+                                                                       <xsl:value-of select="test_definition/summary/@test_plan_name" />
+                                                               </td>
+                                                       </tr>
+                                                       <tr>
+                                                               <td>Tests Total</td>
+                                                               <td>
+                                                                       <xsl:value-of select="count(test_definition//suite/set/testcase)" />
+                                                               </td>
+                                                       </tr>
+                                                       <tr>
+                                                               <td>Test Passed</td>
+                                                               <td>
+                                                                       <xsl:value-of
+                                                                               select="count(test_definition//suite/set/testcase[@result = 'PASS'])" />
+                                                               </td>
+                                                       </tr>
+                                                       <tr>
+                                                               <td>Test Failed</td>
+                                                               <td>
+                                                                       <xsl:value-of
+                                                                               select="count(test_definition//suite/set/testcase[@result = 'FAIL'])" />
+                                                               </td>
+                                                       </tr>
+                                                       <tr>
+                                                               <td>Test N/A</td>
+                                                               <td>
+                                                                       <xsl:value-of
+                                                                               select="count(test_definition//suite/set/testcase[@result = 'BLOCK'])" />
+                                                               </td>
+                                                       </tr>
+                                                       <tr>
+                                                               <td>Test Not Run</td>
+                                                               <td>
+                                                                       <xsl:value-of
+                                                                               select="count(test_definition//suite/set/testcase) - count(test_definition//suite/set/testcase[@result = 'PASS']) - count(test_definition//suite/set/testcase[@result = 'FAIL']) - count(test_definition//suite/set/testcase[@result = 'BLOCK'])" />
+                                                               </td>
+                                                       </tr>
+                                                       <tr>
+                                                               <td>Start time</td>
+                                                               <td>
+                                                                       <xsl:value-of select="test_definition/summary/start_at" />
+                                                               </td>
+                                                       </tr>
+                                                       <tr>
+                                                               <td>End time</td>
+                                                               <td>
+                                                                       <xsl:value-of select="test_definition/summary/end_at" />
+                                                               </td>
+                                                       </tr>
+                                               </table>
+                                       </div>
+
+
+                                       <div id="suite_summary">
+                                               <div id="title">
+                                                       <table>
+                                                               <tr>
+                                                                       <td class="title">
+                                                                               <h1>Test Summary by Suite</h1>
+                                                                       </td>
+                                                               </tr>
+                                                       </table>
+                                               </div>
+                                               <table>
+                                                       <tr>
+                                                               <th>Suite</th>
+                                                               <th>Passed</th>
+                                                               <th>Failed</th>
+                                                               <th>N/A</th>
+                                                               <th>Not Run</th>
+                                                               <th>Total</th>
+                                                       </tr>
+                                                       <xsl:for-each select="test_definition/suite">
+                                                               <xsl:sort select="@name" />
+                                                               <tr>
+                                                                       <td>
+                                                                               <xsl:value-of select="@name" />
+                                                                       </td>
+                                                                       <td>
+                                                                               <xsl:value-of select="count(set//testcase[@result = 'PASS'])" />
+                                                                       </td>
+                                                                       <td>
+                                                                               <xsl:value-of select="count(set//testcase[@result = 'FAIL'])" />
+                                                                       </td>
+                                                                       <td>
+                                                                               <xsl:value-of select="count(set//testcase[@result = 'BLOCK'])" />
+                                                                       </td>
+                                                                       <td>
+                                                                               <xsl:value-of
+                                                                                       select="count(set//testcase) - count(set//testcase[@result = 'PASS']) - count(set//testcase[@result = 'FAIL']) - count(set//testcase[@result = 'BLOCK'])" />
+                                                                       </td>
+                                                                       <td>
+                                                                               <xsl:value-of select="count(set//testcase)" />
+                                                                       </td>
+                                                               </tr>
+                                                       </xsl:for-each>
+                                               </table>
+                                       </div>
+
+                                       <div id="cases">
+                                               <div id="title">
+                                                       <table>
+                                                               <tr>
+                                                                       <td class="title">
+                                                                               <h1 align="center">Detailed Test Results</h1>
+                                                                       </td>
+                                                               </tr>
+                                                       </table>
+                                               </div>
+                                               <xsl:for-each select="test_definition/suite">
+                                                       <xsl:sort select="@name" />
+                                                       <p>
+                                                               Test Suite:
+                                                               <xsl:value-of select="@name" />
+                                                       </p>
+                                                       <table>
+                                                               <tr>
+                                                                       <th>Case_ID</th>
+                                                                       <th>Purpose</th>
+                                                                       <th>Result</th>
+                                                                       <th>Stdout</th>
+                                                               </tr>
+                                                               <xsl:for-each select=".//set">
+                                                                       <xsl:sort select="@name" />
+                                                                       <tr>
+                                                                               <td colspan="4">
+                                                                                       Test Set:
+                                                                                       <xsl:value-of select="@name" />
+                                                                               </td>
+                                                                       </tr>
+                                                                       <xsl:for-each select=".//testcase">
+                                                                               <xsl:sort select="@id" />
+                                                                               <tr>
+                                                                                       <td>
+                                                                                               <xsl:value-of select="@id" />
+                                                                                       </td>
+                                                                                       <td>
+                                                                                               <xsl:value-of select="@purpose" />
+                                                                                       </td>
+
+                                                                                       <xsl:choose>
+                                                                                               <xsl:when test="@result">
+                                                                                                       <xsl:if test="@result = 'FAIL'">
+                                                                                                               <td class="red_rate">
+                                                                                                                       <xsl:value-of select="@result" />
+                                                                                                               </td>
+                                                                                                       </xsl:if>
+                                                                                                       <xsl:if test="@result = 'PASS'">
+                                                                                                               <td class="green_rate">
+                                                                                                                       <xsl:value-of select="@result" />
+                                                                                                               </td>
+                                                                                                       </xsl:if>
+                                                                                                       <xsl:if test="@result = 'BLOCK' ">
+                                                                                                               <td>
+                                                                                                                       BLOCK
+                                                                                                               </td>
+                                                                                                       </xsl:if>
+                                                                                               </xsl:when>
+                                                                                               <xsl:otherwise>
+                                                                                                       <td>
+
+                                                                                                       </td>
+                                                                                               </xsl:otherwise>
+                                                                                       </xsl:choose>
+                                                                                       <td>
+                                                                                               <xsl:value-of select=".//result_info/stdout" />
+                                                                                               <xsl:if test=".//result_info/stdout = ''">
+                                                                                                       N/A
+                                                                                               </xsl:if>
+                                                                                       </td>
+                                                                               </tr>
+                                                                       </xsl:for-each>
+                                                               </xsl:for-each>
+                                                       </table>
+                                               </xsl:for-each>
+                                       </div>
+                               </div>
+                       </body>
+               </html>
+       </xsl:template>
+</xsl:stylesheet>
\ No newline at end of file
diff --git a/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/plugin/web_templates/tests.css b/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/plugin/web_templates/tests.css
new file mode 100755 (executable)
index 0000000..30c3670
--- /dev/null
@@ -0,0 +1,103 @@
+@charset "UTF-8";
+/* CSS Document */
+#testcasepage div,#testcasepage h1,#testcasepage p,#testcasepage table,#testcasepage tr,#testcasepage th,#testcasepage td
+       {
+       margin: 0;
+       padding: 0;
+       border: 0;
+       font-weight: inherit;
+       font-style: inherit;
+       font-size: 0.96em;
+       font-family: arial;
+       vertical-align: baseline;
+}
+
+#testcasepage p {
+       text-align: left;
+}
+
+#testcasepage table {
+       border-collapse: separate;
+       border-spacing: 0;
+       margin-bottom: 1.4em;
+       vertical-align: middle;
+}
+
+#testcasepage th,#testcasepage td {
+       text-align: left;
+       font-weight: normal;
+       padding: 4px 10px 4px 5px;
+       vertical-align: middle;
+}
+
+#cases table {
+       width: 101%;
+}
+
+#title table {
+       width: 101%;
+}
+
+#device table {
+       width: 50%;
+}
+
+#summary table {
+       width: 50%;
+}
+
+#testcasepage th {
+       border-bottom: 1px solid #000;
+       background-color: #AAAAAA;
+       border-left: 1px solid #000;
+       border-top: 1px solid #000;
+       color: #000;
+       font-weight: bold;
+       vertical-align: bottom;
+}
+
+#testcasepage th:last-child, #testcasepage td:last-child {
+       border-right: 1px solid #000;
+}
+
+#testcasepage td {
+       border-left: 1px solid;
+       font-weight: normal;
+       border-bottom: 1px solid;
+}
+
+#testcasepage td.yellow_rate {
+       background-color: #ffcc00;
+}
+
+#testcasepage td.green_rate {
+       background-color: #33cc33;
+}
+
+#testcasepage td.dgreen_rate {
+       background-color: #339933;
+}
+
+#testcasepage td.red_rate {
+       background-color: #FF3333;
+}
+
+#title table, #title tr, #title td {
+       border-left: none;
+       border-bottom: none;
+       text-align: center;
+}
+
+#title td:last-child {
+       border-right: none;
+}
+
+#testcasepage h1 {
+       font-size: 2em;
+       font-family: Arial, sans-serif; font-weight : bold;
+       line-height: 1;
+       color: #000;
+       margin-bottom: 0.75em;
+       padding-top: 0.25em;
+       font-weight: bold;
+}
\ No newline at end of file
diff --git a/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/plugin/web_templates/tests.full.xml b/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/plugin/web_templates/tests.full.xml
new file mode 100755 (executable)
index 0000000..53e541d
--- /dev/null
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?xml-stylesheet type="text/xsl"  href="./testcase.xsl"?>
+<test_definition>
+  <suite name="{TESTSUITE_NAME}" launcher="WRTLauncher" category="undefined">
+    <set name="Default">
+      <testcase component="TizenAPI/Application/Default" execution_type="auto"  id="testcase" priority="P1" purpose="" type="" status="approved">
+        <description>
+          <test_script_entry>/opt/{TESTSUITE_NAME}/testcase/{TESTCASE}.html</test_script_entry>
+        </description>
+        <specs>
+          <spec>
+            <spec_assertion element_type="" element_name="" interface="" specification="" section="" category=""/>
+            <spec_url></spec_url>
+            <spec_statement/>
+          </spec>
+        </specs>
+      </testcase>
+    </set>
+  </suite>
+</test_definition>
diff --git a/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/plugin/web_templates/tests.xml b/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/plugin/web_templates/tests.xml
new file mode 100755 (executable)
index 0000000..b8c5326
--- /dev/null
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?xml-stylesheet type="text/xsl" href="./testcase.xsl"?>
+<test_definition>
+  <suite name="{TESTSUITE_NAME}" launcher="WRTLauncher" category="undefined">
+    <set name="Default">
+      <testcase component="TizenAPI/Application/Default" execution_type="auto" id="testcase" priority="P1" purpose="">
+        <description>
+          <test_script_entry>/opt/{TESTSUITE_NAME}/testcase/{TESTCASE}.html</test_script_entry>
+        </description>
+      </testcase>
+    </set>
+  </suite>
+</test_definition>
diff --git a/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/plugin/web_templates/webrunner/Makefile.am b/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/plugin/web_templates/webrunner/Makefile.am
new file mode 100755 (executable)
index 0000000..82b67c5
--- /dev/null
@@ -0,0 +1,3 @@
+webrunner_SCRIPTS = *
+webrunnerdir = $(prefix)/opt/{TESTSUITE_NAME}/webrunner
+EXTRA_DIST = $(webrunner_SCRIPTS)
diff --git a/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/plugin/web_templates/webrunner/index.html b/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/plugin/web_templates/webrunner/index.html
new file mode 100755 (executable)
index 0000000..51e03b2
--- /dev/null
@@ -0,0 +1,141 @@
+<!doctype html>
+<!--
+Copyright (c) 2015 Samsung Electronics Co.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+
+
+-->
+
+<head>
+<meta name="viewport" content="width=device-width">
+<script src="jquery-1.10.2.min.js"></script>
+<style type="text/css">
+html {
+       font-family:DejaVu Sans, Bitstream Vera Sans, Arial, Sans;
+}
+
+body {
+       background-color: white;
+}
+
+table#browse {
+       border-collapse:collapse;
+       table-layout:fixed;width:80%;
+}
+
+table#browse th:first-child,table#browse td:first-child {width:40%;}
+
+table#browse th:last-child,table#browse td:last-child {width:30%;}
+
+table#browse th {
+       padding:0;
+       padding-bottom:0.5em;
+       text-align:left;
+       border-bottom:medium solid black;
+}
+table#browse td {
+       padding:1em;
+       padding-bottom:0.5em;
+       border-bottom:thin solid black;
+}
+div#navbar{
+       box-sizing: border-box;
+       width: 99%;
+       border: 0px;
+       text-align: left;
+       background: slateblue;
+       color: white;
+}
+div#footbar{
+       width: 99%;
+       border: 0px;
+       text-align: left;
+}
+textarea#testinfo{
+       width: 99%;
+       font-size: 0.8em;
+}
+input{
+       font-size: 1.2em;
+       padding-top: 0.1em;
+       padding-bottom: 0.1em;
+}
+
+#btnPrev,#btnNext{
+       width: 8%;
+}
+#btnDone,#btnRun,#btnList,#btnPass,#btnFail,#btnBlock{
+       width: 12%;
+       font-weight: bold;
+}
+
+#btnPass { color: green;}
+#btnFail { color: red;}
+#btnBlock { color: orange;}
+#labBatch{
+       font-size: 0.5em;
+}
+#textTest {
+       width: 60%;
+}
+
+#frmTest {
+       border: none;
+}
+.singlemode { display: none;}
+.short{
+       padding-left: 1em;
+}
+</style>
+</head>
+
+<body>
+<div id="navbar" class="batchmode">
+       <span class="short singlemode"><input type="button" id="btnList" value="List"/></span>
+       <span class="singlemode short">
+               <input type="button" id="btnPrev" value="<"/>
+               <input type="text"  id="textTest" readonly />
+               <input type="button" id="btnNext" value=">"/> 
+       </span>
+       <span class="short listmode"> <input type="button" id="btnDone" value="Done"/></span>
+</div>
+<div id="divSum"> </div>
+<div width="99%" class="singlemode">
+       <textarea class="batchmode" id="testinfo" rows=4 disabled>
+       </textarea>
+</div>
+<div id="footbar" class="batchmode">
+       <span class="short"><input type="button"  id="btnRun" value="Run"/></span>
+       <span class="short singlemode"><input type="button" id="btnPass" value="PASS"/></span>
+       <span class="short singlemode"><input type="button" id="btnFail" value="FAIL"/></span>
+       <span class="short singlemode"><input type="button" id="btnBlock" value="BLOCK"/></span>
+</div>
+<iframe width="100%" id="frmTest" allowFullScreen="true" mozAllowFullScreen="true" webkitAllowFullscreen="true" src="">
+</iframe>
+<script src="testrunner.js"> </script>
+</body>
+</html>
diff --git a/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/plugin/web_templates/webrunner/jquery-1.10.2.min.js b/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/plugin/web_templates/webrunner/jquery-1.10.2.min.js
new file mode 100755 (executable)
index 0000000..da41706
--- /dev/null
@@ -0,0 +1,6 @@
+/*! jQuery v1.10.2 | (c) 2005, 2013 jQuery Foundation, Inc. | jquery.org/license
+//@ sourceMappingURL=jquery-1.10.2.min.map
+*/
+(function(e,t){var n,r,i=typeof t,o=e.location,a=e.document,s=a.documentElement,l=e.jQuery,u=e.$,c={},p=[],f="1.10.2",d=p.concat,h=p.push,g=p.slice,m=p.indexOf,y=c.toString,v=c.hasOwnProperty,b=f.trim,x=function(e,t){return new x.fn.init(e,t,r)},w=/[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source,T=/\S+/g,C=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,N=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/,k=/^<(\w+)\s*\/?>(?:<\/\1>|)$/,E=/^[\],:{}\s]*$/,S=/(?:^|:|,)(?:\s*\[)+/g,A=/\\(?:["\\\/bfnrt]|u[\da-fA-F]{4})/g,j=/"[^"\\\r\n]*"|true|false|null|-?(?:\d+\.|)\d+(?:[eE][+-]?\d+|)/g,D=/^-ms-/,L=/-([\da-z])/gi,H=function(e,t){return t.toUpperCase()},q=function(e){(a.addEventListener||"load"===e.type||"complete"===a.readyState)&&(_(),x.ready())},_=function(){a.addEventListener?(a.removeEventListener("DOMContentLoaded",q,!1),e.removeEventListener("load",q,!1)):(a.detachEvent("onreadystatechange",q),e.detachEvent("onload",q))};x.fn=x.prototype={jquery:f,constructor:x,init:function(e,n,r){var i,o;if(!e)return this;if("string"==typeof e){if(i="<"===e.charAt(0)&&">"===e.charAt(e.length-1)&&e.length>=3?[null,e,null]:N.exec(e),!i||!i[1]&&n)return!n||n.jquery?(n||r).find(e):this.constructor(n).find(e);if(i[1]){if(n=n instanceof x?n[0]:n,x.merge(this,x.parseHTML(i[1],n&&n.nodeType?n.ownerDocument||n:a,!0)),k.test(i[1])&&x.isPlainObject(n))for(i in n)x.isFunction(this[i])?this[i](n[i]):this.attr(i,n[i]);return this}if(o=a.getElementById(i[2]),o&&o.parentNode){if(o.id!==i[2])return r.find(e);this.length=1,this[0]=o}return this.context=a,this.selector=e,this}return e.nodeType?(this.context=this[0]=e,this.length=1,this):x.isFunction(e)?r.ready(e):(e.selector!==t&&(this.selector=e.selector,this.context=e.context),x.makeArray(e,this))},selector:"",length:0,toArray:function(){return g.call(this)},get:function(e){return null==e?this.toArray():0>e?this[this.length+e]:this[e]},pushStack:function(e){var t=x.merge(this.constructor(),e);return t.prevObject=this,t.context=this.context,t},each:function(e,t){return x.each(this,e,t)},ready:function(e){return x.ready.promise().done(e),this},slice:function(){return this.pushStack(g.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(e){var t=this.length,n=+e+(0>e?t:0);return this.pushStack(n>=0&&t>n?[this[n]]:[])},map:function(e){return this.pushStack(x.map(this,function(t,n){return e.call(t,n,t)}))},end:function(){return this.prevObject||this.constructor(null)},push:h,sort:[].sort,splice:[].splice},x.fn.init.prototype=x.fn,x.extend=x.fn.extend=function(){var e,n,r,i,o,a,s=arguments[0]||{},l=1,u=arguments.length,c=!1;for("boolean"==typeof s&&(c=s,s=arguments[1]||{},l=2),"object"==typeof s||x.isFunction(s)||(s={}),u===l&&(s=this,--l);u>l;l++)if(null!=(o=arguments[l]))for(i in o)e=s[i],r=o[i],s!==r&&(c&&r&&(x.isPlainObject(r)||(n=x.isArray(r)))?(n?(n=!1,a=e&&x.isArray(e)?e:[]):a=e&&x.isPlainObject(e)?e:{},s[i]=x.extend(c,a,r)):r!==t&&(s[i]=r));return s},x.extend({expando:"jQuery"+(f+Math.random()).replace(/\D/g,""),noConflict:function(t){return e.$===x&&(e.$=u),t&&e.jQuery===x&&(e.jQuery=l),x},isReady:!1,readyWait:1,holdReady:function(e){e?x.readyWait++:x.ready(!0)},ready:function(e){if(e===!0?!--x.readyWait:!x.isReady){if(!a.body)return setTimeout(x.ready);x.isReady=!0,e!==!0&&--x.readyWait>0||(n.resolveWith(a,[x]),x.fn.trigger&&x(a).trigger("ready").off("ready"))}},isFunction:function(e){return"function"===x.type(e)},isArray:Array.isArray||function(e){return"array"===x.type(e)},isWindow:function(e){return null!=e&&e==e.window},isNumeric:function(e){return!isNaN(parseFloat(e))&&isFinite(e)},type:function(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?c[y.call(e)]||"object":typeof e},isPlainObject:function(e){var n;if(!e||"object"!==x.type(e)||e.nodeType||x.isWindow(e))return!1;try{if(e.constructor&&!v.call(e,"constructor")&&!v.call(e.constructor.prototype,"isPrototypeOf"))return!1}catch(r){return!1}if(x.support.ownLast)for(n in e)return v.call(e,n);for(n in e);return n===t||v.call(e,n)},isEmptyObject:function(e){var t;for(t in e)return!1;return!0},error:function(e){throw Error(e)},parseHTML:function(e,t,n){if(!e||"string"!=typeof e)return null;"boolean"==typeof t&&(n=t,t=!1),t=t||a;var r=k.exec(e),i=!n&&[];return r?[t.createElement(r[1])]:(r=x.buildFragment([e],t,i),i&&x(i).remove(),x.merge([],r.childNodes))},parseJSON:function(n){return e.JSON&&e.JSON.parse?e.JSON.parse(n):null===n?n:"string"==typeof n&&(n=x.trim(n),n&&E.test(n.replace(A,"@").replace(j,"]").replace(S,"")))?Function("return "+n)():(x.error("Invalid JSON: "+n),t)},parseXML:function(n){var r,i;if(!n||"string"!=typeof n)return null;try{e.DOMParser?(i=new DOMParser,r=i.parseFromString(n,"text/xml")):(r=new ActiveXObject("Microsoft.XMLDOM"),r.async="false",r.loadXML(n))}catch(o){r=t}return r&&r.documentElement&&!r.getElementsByTagName("parsererror").length||x.error("Invalid XML: "+n),r},noop:function(){},globalEval:function(t){t&&x.trim(t)&&(e.execScript||function(t){e.eval.call(e,t)})(t)},camelCase:function(e){return e.replace(D,"ms-").replace(L,H)},nodeName:function(e,t){return e.nodeName&&e.nodeName.toLowerCase()===t.toLowerCase()},each:function(e,t,n){var r,i=0,o=e.length,a=M(e);if(n){if(a){for(;o>i;i++)if(r=t.apply(e[i],n),r===!1)break}else for(i in e)if(r=t.apply(e[i],n),r===!1)break}else if(a){for(;o>i;i++)if(r=t.call(e[i],i,e[i]),r===!1)break}else for(i in e)if(r=t.call(e[i],i,e[i]),r===!1)break;return e},trim:b&&!b.call("\ufeff\u00a0")?function(e){return null==e?"":b.call(e)}:function(e){return null==e?"":(e+"").replace(C,"")},makeArray:function(e,t){var n=t||[];return null!=e&&(M(Object(e))?x.merge(n,"string"==typeof e?[e]:e):h.call(n,e)),n},inArray:function(e,t,n){var r;if(t){if(m)return m.call(t,e,n);for(r=t.length,n=n?0>n?Math.max(0,r+n):n:0;r>n;n++)if(n in t&&t[n]===e)return n}return-1},merge:function(e,n){var r=n.length,i=e.length,o=0;if("number"==typeof r)for(;r>o;o++)e[i++]=n[o];else while(n[o]!==t)e[i++]=n[o++];return e.length=i,e},grep:function(e,t,n){var r,i=[],o=0,a=e.length;for(n=!!n;a>o;o++)r=!!t(e[o],o),n!==r&&i.push(e[o]);return i},map:function(e,t,n){var r,i=0,o=e.length,a=M(e),s=[];if(a)for(;o>i;i++)r=t(e[i],i,n),null!=r&&(s[s.length]=r);else for(i in e)r=t(e[i],i,n),null!=r&&(s[s.length]=r);return d.apply([],s)},guid:1,proxy:function(e,n){var r,i,o;return"string"==typeof n&&(o=e[n],n=e,e=o),x.isFunction(e)?(r=g.call(arguments,2),i=function(){return e.apply(n||this,r.concat(g.call(arguments)))},i.guid=e.guid=e.guid||x.guid++,i):t},access:function(e,n,r,i,o,a,s){var l=0,u=e.length,c=null==r;if("object"===x.type(r)){o=!0;for(l in r)x.access(e,n,l,r[l],!0,a,s)}else if(i!==t&&(o=!0,x.isFunction(i)||(s=!0),c&&(s?(n.call(e,i),n=null):(c=n,n=function(e,t,n){return c.call(x(e),n)})),n))for(;u>l;l++)n(e[l],r,s?i:i.call(e[l],l,n(e[l],r)));return o?e:c?n.call(e):u?n(e[0],r):a},now:function(){return(new Date).getTime()},swap:function(e,t,n,r){var i,o,a={};for(o in t)a[o]=e.style[o],e.style[o]=t[o];i=n.apply(e,r||[]);for(o in t)e.style[o]=a[o];return i}}),x.ready.promise=function(t){if(!n)if(n=x.Deferred(),"complete"===a.readyState)setTimeout(x.ready);else if(a.addEventListener)a.addEventListener("DOMContentLoaded",q,!1),e.addEventListener("load",q,!1);else{a.attachEvent("onreadystatechange",q),e.attachEvent("onload",q);var r=!1;try{r=null==e.frameElement&&a.documentElement}catch(i){}r&&r.doScroll&&function o(){if(!x.isReady){try{r.doScroll("left")}catch(e){return setTimeout(o,50)}_(),x.ready()}}()}return n.promise(t)},x.each("Boolean Number String Function Array Date RegExp Object Error".split(" "),function(e,t){c["[object "+t+"]"]=t.toLowerCase()});function M(e){var t=e.length,n=x.type(e);return x.isWindow(e)?!1:1===e.nodeType&&t?!0:"array"===n||"function"!==n&&(0===t||"number"==typeof t&&t>0&&t-1 in e)}r=x(a),function(e,t){var n,r,i,o,a,s,l,u,c,p,f,d,h,g,m,y,v,b="sizzle"+-new Date,w=e.document,T=0,C=0,N=st(),k=st(),E=st(),S=!1,A=function(e,t){return e===t?(S=!0,0):0},j=typeof t,D=1<<31,L={}.hasOwnProperty,H=[],q=H.pop,_=H.push,M=H.push,O=H.slice,F=H.indexOf||function(e){var t=0,n=this.length;for(;n>t;t++)if(this[t]===e)return t;return-1},B="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",P="[\\x20\\t\\r\\n\\f]",R="(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+",W=R.replace("w","w#"),$="\\["+P+"*("+R+")"+P+"*(?:([*^$|!~]?=)"+P+"*(?:(['\"])((?:\\\\.|[^\\\\])*?)\\3|("+W+")|)|)"+P+"*\\]",I=":("+R+")(?:\\(((['\"])((?:\\\\.|[^\\\\])*?)\\3|((?:\\\\.|[^\\\\()[\\]]|"+$.replace(3,8)+")*)|.*)\\)|)",z=RegExp("^"+P+"+|((?:^|[^\\\\])(?:\\\\.)*)"+P+"+$","g"),X=RegExp("^"+P+"*,"+P+"*"),U=RegExp("^"+P+"*([>+~]|"+P+")"+P+"*"),V=RegExp(P+"*[+~]"),Y=RegExp("="+P+"*([^\\]'\"]*)"+P+"*\\]","g"),J=RegExp(I),G=RegExp("^"+W+"$"),Q={ID:RegExp("^#("+R+")"),CLASS:RegExp("^\\.("+R+")"),TAG:RegExp("^("+R.replace("w","w*")+")"),ATTR:RegExp("^"+$),PSEUDO:RegExp("^"+I),CHILD:RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+P+"*(even|odd|(([+-]|)(\\d*)n|)"+P+"*(?:([+-]|)"+P+"*(\\d+)|))"+P+"*\\)|)","i"),bool:RegExp("^(?:"+B+")$","i"),needsContext:RegExp("^"+P+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+P+"*((?:-\\d)?\\d*)"+P+"*\\)|)(?=[^-]|$)","i")},K=/^[^{]+\{\s*\[native \w/,Z=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,et=/^(?:input|select|textarea|button)$/i,tt=/^h\d$/i,nt=/'|\\/g,rt=RegExp("\\\\([\\da-f]{1,6}"+P+"?|("+P+")|.)","ig"),it=function(e,t,n){var r="0x"+t-65536;return r!==r||n?t:0>r?String.fromCharCode(r+65536):String.fromCharCode(55296|r>>10,56320|1023&r)};try{M.apply(H=O.call(w.childNodes),w.childNodes),H[w.childNodes.length].nodeType}catch(ot){M={apply:H.length?function(e,t){_.apply(e,O.call(t))}:function(e,t){var n=e.length,r=0;while(e[n++]=t[r++]);e.length=n-1}}}function at(e,t,n,i){var o,a,s,l,u,c,d,m,y,x;if((t?t.ownerDocument||t:w)!==f&&p(t),t=t||f,n=n||[],!e||"string"!=typeof e)return n;if(1!==(l=t.nodeType)&&9!==l)return[];if(h&&!i){if(o=Z.exec(e))if(s=o[1]){if(9===l){if(a=t.getElementById(s),!a||!a.parentNode)return n;if(a.id===s)return n.push(a),n}else if(t.ownerDocument&&(a=t.ownerDocument.getElementById(s))&&v(t,a)&&a.id===s)return n.push(a),n}else{if(o[2])return M.apply(n,t.getElementsByTagName(e)),n;if((s=o[3])&&r.getElementsByClassName&&t.getElementsByClassName)return M.apply(n,t.getElementsByClassName(s)),n}if(r.qsa&&(!g||!g.test(e))){if(m=d=b,y=t,x=9===l&&e,1===l&&"object"!==t.nodeName.toLowerCase()){c=mt(e),(d=t.getAttribute("id"))?m=d.replace(nt,"\\$&"):t.setAttribute("id",m),m="[id='"+m+"'] ",u=c.length;while(u--)c[u]=m+yt(c[u]);y=V.test(e)&&t.parentNode||t,x=c.join(",")}if(x)try{return M.apply(n,y.querySelectorAll(x)),n}catch(T){}finally{d||t.removeAttribute("id")}}}return kt(e.replace(z,"$1"),t,n,i)}function st(){var e=[];function t(n,r){return e.push(n+=" ")>o.cacheLength&&delete t[e.shift()],t[n]=r}return t}function lt(e){return e[b]=!0,e}function ut(e){var t=f.createElement("div");try{return!!e(t)}catch(n){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function ct(e,t){var n=e.split("|"),r=e.length;while(r--)o.attrHandle[n[r]]=t}function pt(e,t){var n=t&&e,r=n&&1===e.nodeType&&1===t.nodeType&&(~t.sourceIndex||D)-(~e.sourceIndex||D);if(r)return r;if(n)while(n=n.nextSibling)if(n===t)return-1;return e?1:-1}function ft(e){return function(t){var n=t.nodeName.toLowerCase();return"input"===n&&t.type===e}}function dt(e){return function(t){var n=t.nodeName.toLowerCase();return("input"===n||"button"===n)&&t.type===e}}function ht(e){return lt(function(t){return t=+t,lt(function(n,r){var i,o=e([],n.length,t),a=o.length;while(a--)n[i=o[a]]&&(n[i]=!(r[i]=n[i]))})})}s=at.isXML=function(e){var t=e&&(e.ownerDocument||e).documentElement;return t?"HTML"!==t.nodeName:!1},r=at.support={},p=at.setDocument=function(e){var n=e?e.ownerDocument||e:w,i=n.defaultView;return n!==f&&9===n.nodeType&&n.documentElement?(f=n,d=n.documentElement,h=!s(n),i&&i.attachEvent&&i!==i.top&&i.attachEvent("onbeforeunload",function(){p()}),r.attributes=ut(function(e){return e.className="i",!e.getAttribute("className")}),r.getElementsByTagName=ut(function(e){return e.appendChild(n.createComment("")),!e.getElementsByTagName("*").length}),r.getElementsByClassName=ut(function(e){return e.innerHTML="<div class='a'></div><div class='a i'></div>",e.firstChild.className="i",2===e.getElementsByClassName("i").length}),r.getById=ut(function(e){return d.appendChild(e).id=b,!n.getElementsByName||!n.getElementsByName(b).length}),r.getById?(o.find.ID=function(e,t){if(typeof t.getElementById!==j&&h){var n=t.getElementById(e);return n&&n.parentNode?[n]:[]}},o.filter.ID=function(e){var t=e.replace(rt,it);return function(e){return e.getAttribute("id")===t}}):(delete o.find.ID,o.filter.ID=function(e){var t=e.replace(rt,it);return function(e){var n=typeof e.getAttributeNode!==j&&e.getAttributeNode("id");return n&&n.value===t}}),o.find.TAG=r.getElementsByTagName?function(e,n){return typeof n.getElementsByTagName!==j?n.getElementsByTagName(e):t}:function(e,t){var n,r=[],i=0,o=t.getElementsByTagName(e);if("*"===e){while(n=o[i++])1===n.nodeType&&r.push(n);return r}return o},o.find.CLASS=r.getElementsByClassName&&function(e,n){return typeof n.getElementsByClassName!==j&&h?n.getElementsByClassName(e):t},m=[],g=[],(r.qsa=K.test(n.querySelectorAll))&&(ut(function(e){e.innerHTML="<select><option selected=''></option></select>",e.querySelectorAll("[selected]").length||g.push("\\["+P+"*(?:value|"+B+")"),e.querySelectorAll(":checked").length||g.push(":checked")}),ut(function(e){var t=n.createElement("input");t.setAttribute("type","hidden"),e.appendChild(t).setAttribute("t",""),e.querySelectorAll("[t^='']").length&&g.push("[*^$]="+P+"*(?:''|\"\")"),e.querySelectorAll(":enabled").length||g.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),g.push(",.*:")})),(r.matchesSelector=K.test(y=d.webkitMatchesSelector||d.mozMatchesSelector||d.oMatchesSelector||d.msMatchesSelector))&&ut(function(e){r.disconnectedMatch=y.call(e,"div"),y.call(e,"[s!='']:x"),m.push("!=",I)}),g=g.length&&RegExp(g.join("|")),m=m.length&&RegExp(m.join("|")),v=K.test(d.contains)||d.compareDocumentPosition?function(e,t){var n=9===e.nodeType?e.documentElement:e,r=t&&t.parentNode;return e===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):e.compareDocumentPosition&&16&e.compareDocumentPosition(r)))}:function(e,t){if(t)while(t=t.parentNode)if(t===e)return!0;return!1},A=d.compareDocumentPosition?function(e,t){if(e===t)return S=!0,0;var i=t.compareDocumentPosition&&e.compareDocumentPosition&&e.compareDocumentPosition(t);return i?1&i||!r.sortDetached&&t.compareDocumentPosition(e)===i?e===n||v(w,e)?-1:t===n||v(w,t)?1:c?F.call(c,e)-F.call(c,t):0:4&i?-1:1:e.compareDocumentPosition?-1:1}:function(e,t){var r,i=0,o=e.parentNode,a=t.parentNode,s=[e],l=[t];if(e===t)return S=!0,0;if(!o||!a)return e===n?-1:t===n?1:o?-1:a?1:c?F.call(c,e)-F.call(c,t):0;if(o===a)return pt(e,t);r=e;while(r=r.parentNode)s.unshift(r);r=t;while(r=r.parentNode)l.unshift(r);while(s[i]===l[i])i++;return i?pt(s[i],l[i]):s[i]===w?-1:l[i]===w?1:0},n):f},at.matches=function(e,t){return at(e,null,null,t)},at.matchesSelector=function(e,t){if((e.ownerDocument||e)!==f&&p(e),t=t.replace(Y,"='$1']"),!(!r.matchesSelector||!h||m&&m.test(t)||g&&g.test(t)))try{var n=y.call(e,t);if(n||r.disconnectedMatch||e.document&&11!==e.document.nodeType)return n}catch(i){}return at(t,f,null,[e]).length>0},at.contains=function(e,t){return(e.ownerDocument||e)!==f&&p(e),v(e,t)},at.attr=function(e,n){(e.ownerDocument||e)!==f&&p(e);var i=o.attrHandle[n.toLowerCase()],a=i&&L.call(o.attrHandle,n.toLowerCase())?i(e,n,!h):t;return a===t?r.attributes||!h?e.getAttribute(n):(a=e.getAttributeNode(n))&&a.specified?a.value:null:a},at.error=function(e){throw Error("Syntax error, unrecognized expression: "+e)},at.uniqueSort=function(e){var t,n=[],i=0,o=0;if(S=!r.detectDuplicates,c=!r.sortStable&&e.slice(0),e.sort(A),S){while(t=e[o++])t===e[o]&&(i=n.push(o));while(i--)e.splice(n[i],1)}return e},a=at.getText=function(e){var t,n="",r=0,i=e.nodeType;if(i){if(1===i||9===i||11===i){if("string"==typeof e.textContent)return e.textContent;for(e=e.firstChild;e;e=e.nextSibling)n+=a(e)}else if(3===i||4===i)return e.nodeValue}else for(;t=e[r];r++)n+=a(t);return n},o=at.selectors={cacheLength:50,createPseudo:lt,match:Q,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(rt,it),e[3]=(e[4]||e[5]||"").replace(rt,it),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||at.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&at.error(e[0]),e},PSEUDO:function(e){var n,r=!e[5]&&e[2];return Q.CHILD.test(e[0])?null:(e[3]&&e[4]!==t?e[2]=e[4]:r&&J.test(r)&&(n=mt(r,!0))&&(n=r.indexOf(")",r.length-n)-r.length)&&(e[0]=e[0].slice(0,n),e[2]=r.slice(0,n)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(rt,it).toLowerCase();return"*"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=N[e+" "];return t||(t=RegExp("(^|"+P+")"+e+"("+P+"|$)"))&&N(e,function(e){return t.test("string"==typeof e.className&&e.className||typeof e.getAttribute!==j&&e.getAttribute("class")||"")})},ATTR:function(e,t,n){return function(r){var i=at.attr(r,e);return null==i?"!="===t:t?(i+="","="===t?i===n:"!="===t?i!==n:"^="===t?n&&0===i.indexOf(n):"*="===t?n&&i.indexOf(n)>-1:"$="===t?n&&i.slice(-n.length)===n:"~="===t?(" "+i+" ").indexOf(n)>-1:"|="===t?i===n||i.slice(0,n.length+1)===n+"-":!1):!0}},CHILD:function(e,t,n,r,i){var o="nth"!==e.slice(0,3),a="last"!==e.slice(-4),s="of-type"===t;return 1===r&&0===i?function(e){return!!e.parentNode}:function(t,n,l){var u,c,p,f,d,h,g=o!==a?"nextSibling":"previousSibling",m=t.parentNode,y=s&&t.nodeName.toLowerCase(),v=!l&&!s;if(m){if(o){while(g){p=t;while(p=p[g])if(s?p.nodeName.toLowerCase()===y:1===p.nodeType)return!1;h=g="only"===e&&!h&&"nextSibling"}return!0}if(h=[a?m.firstChild:m.lastChild],a&&v){c=m[b]||(m[b]={}),u=c[e]||[],d=u[0]===T&&u[1],f=u[0]===T&&u[2],p=d&&m.childNodes[d];while(p=++d&&p&&p[g]||(f=d=0)||h.pop())if(1===p.nodeType&&++f&&p===t){c[e]=[T,d,f];break}}else if(v&&(u=(t[b]||(t[b]={}))[e])&&u[0]===T)f=u[1];else while(p=++d&&p&&p[g]||(f=d=0)||h.pop())if((s?p.nodeName.toLowerCase()===y:1===p.nodeType)&&++f&&(v&&((p[b]||(p[b]={}))[e]=[T,f]),p===t))break;return f-=i,f===r||0===f%r&&f/r>=0}}},PSEUDO:function(e,t){var n,r=o.pseudos[e]||o.setFilters[e.toLowerCase()]||at.error("unsupported pseudo: "+e);return r[b]?r(t):r.length>1?(n=[e,e,"",t],o.setFilters.hasOwnProperty(e.toLowerCase())?lt(function(e,n){var i,o=r(e,t),a=o.length;while(a--)i=F.call(e,o[a]),e[i]=!(n[i]=o[a])}):function(e){return r(e,0,n)}):r}},pseudos:{not:lt(function(e){var t=[],n=[],r=l(e.replace(z,"$1"));return r[b]?lt(function(e,t,n,i){var o,a=r(e,null,i,[]),s=e.length;while(s--)(o=a[s])&&(e[s]=!(t[s]=o))}):function(e,i,o){return t[0]=e,r(t,null,o,n),!n.pop()}}),has:lt(function(e){return function(t){return at(e,t).length>0}}),contains:lt(function(e){return function(t){return(t.textContent||t.innerText||a(t)).indexOf(e)>-1}}),lang:lt(function(e){return G.test(e||"")||at.error("unsupported lang: "+e),e=e.replace(rt,it).toLowerCase(),function(t){var n;do if(n=h?t.lang:t.getAttribute("xml:lang")||t.getAttribute("lang"))return n=n.toLowerCase(),n===e||0===n.indexOf(e+"-");while((t=t.parentNode)&&1===t.nodeType);return!1}}),target:function(t){var n=e.location&&e.location.hash;return n&&n.slice(1)===t.id},root:function(e){return e===d},focus:function(e){return e===f.activeElement&&(!f.hasFocus||f.hasFocus())&&!!(e.type||e.href||~e.tabIndex)},enabled:function(e){return e.disabled===!1},disabled:function(e){return e.disabled===!0},checked:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&!!e.checked||"option"===t&&!!e.selected},selected:function(e){return e.parentNode&&e.parentNode.selectedIndex,e.selected===!0},empty:function(e){for(e=e.firstChild;e;e=e.nextSibling)if(e.nodeName>"@"||3===e.nodeType||4===e.nodeType)return!1;return!0},parent:function(e){return!o.pseudos.empty(e)},header:function(e){return tt.test(e.nodeName)},input:function(e){return et.test(e.nodeName)},button:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&"button"===e.type||"button"===t},text:function(e){var t;return"input"===e.nodeName.toLowerCase()&&"text"===e.type&&(null==(t=e.getAttribute("type"))||t.toLowerCase()===e.type)},first:ht(function(){return[0]}),last:ht(function(e,t){return[t-1]}),eq:ht(function(e,t,n){return[0>n?n+t:n]}),even:ht(function(e,t){var n=0;for(;t>n;n+=2)e.push(n);return e}),odd:ht(function(e,t){var n=1;for(;t>n;n+=2)e.push(n);return e}),lt:ht(function(e,t,n){var r=0>n?n+t:n;for(;--r>=0;)e.push(r);return e}),gt:ht(function(e,t,n){var r=0>n?n+t:n;for(;t>++r;)e.push(r);return e})}},o.pseudos.nth=o.pseudos.eq;for(n in{radio:!0,checkbox:!0,file:!0,password:!0,image:!0})o.pseudos[n]=ft(n);for(n in{submit:!0,reset:!0})o.pseudos[n]=dt(n);function gt(){}gt.prototype=o.filters=o.pseudos,o.setFilters=new gt;function mt(e,t){var n,r,i,a,s,l,u,c=k[e+" "];if(c)return t?0:c.slice(0);s=e,l=[],u=o.preFilter;while(s){(!n||(r=X.exec(s)))&&(r&&(s=s.slice(r[0].length)||s),l.push(i=[])),n=!1,(r=U.exec(s))&&(n=r.shift(),i.push({value:n,type:r[0].replace(z," ")}),s=s.slice(n.length));for(a in o.filter)!(r=Q[a].exec(s))||u[a]&&!(r=u[a](r))||(n=r.shift(),i.push({value:n,type:a,matches:r}),s=s.slice(n.length));if(!n)break}return t?s.length:s?at.error(e):k(e,l).slice(0)}function yt(e){var t=0,n=e.length,r="";for(;n>t;t++)r+=e[t].value;return r}function vt(e,t,n){var r=t.dir,o=n&&"parentNode"===r,a=C++;return t.first?function(t,n,i){while(t=t[r])if(1===t.nodeType||o)return e(t,n,i)}:function(t,n,s){var l,u,c,p=T+" "+a;if(s){while(t=t[r])if((1===t.nodeType||o)&&e(t,n,s))return!0}else while(t=t[r])if(1===t.nodeType||o)if(c=t[b]||(t[b]={}),(u=c[r])&&u[0]===p){if((l=u[1])===!0||l===i)return l===!0}else if(u=c[r]=[p],u[1]=e(t,n,s)||i,u[1]===!0)return!0}}function bt(e){return e.length>1?function(t,n,r){var i=e.length;while(i--)if(!e[i](t,n,r))return!1;return!0}:e[0]}function xt(e,t,n,r,i){var o,a=[],s=0,l=e.length,u=null!=t;for(;l>s;s++)(o=e[s])&&(!n||n(o,r,i))&&(a.push(o),u&&t.push(s));return a}function wt(e,t,n,r,i,o){return r&&!r[b]&&(r=wt(r)),i&&!i[b]&&(i=wt(i,o)),lt(function(o,a,s,l){var u,c,p,f=[],d=[],h=a.length,g=o||Nt(t||"*",s.nodeType?[s]:s,[]),m=!e||!o&&t?g:xt(g,f,e,s,l),y=n?i||(o?e:h||r)?[]:a:m;if(n&&n(m,y,s,l),r){u=xt(y,d),r(u,[],s,l),c=u.length;while(c--)(p=u[c])&&(y[d[c]]=!(m[d[c]]=p))}if(o){if(i||e){if(i){u=[],c=y.length;while(c--)(p=y[c])&&u.push(m[c]=p);i(null,y=[],u,l)}c=y.length;while(c--)(p=y[c])&&(u=i?F.call(o,p):f[c])>-1&&(o[u]=!(a[u]=p))}}else y=xt(y===a?y.splice(h,y.length):y),i?i(null,a,y,l):M.apply(a,y)})}function Tt(e){var t,n,r,i=e.length,a=o.relative[e[0].type],s=a||o.relative[" "],l=a?1:0,c=vt(function(e){return e===t},s,!0),p=vt(function(e){return F.call(t,e)>-1},s,!0),f=[function(e,n,r){return!a&&(r||n!==u)||((t=n).nodeType?c(e,n,r):p(e,n,r))}];for(;i>l;l++)if(n=o.relative[e[l].type])f=[vt(bt(f),n)];else{if(n=o.filter[e[l].type].apply(null,e[l].matches),n[b]){for(r=++l;i>r;r++)if(o.relative[e[r].type])break;return wt(l>1&&bt(f),l>1&&yt(e.slice(0,l-1).concat({value:" "===e[l-2].type?"*":""})).replace(z,"$1"),n,r>l&&Tt(e.slice(l,r)),i>r&&Tt(e=e.slice(r)),i>r&&yt(e))}f.push(n)}return bt(f)}function Ct(e,t){var n=0,r=t.length>0,a=e.length>0,s=function(s,l,c,p,d){var h,g,m,y=[],v=0,b="0",x=s&&[],w=null!=d,C=u,N=s||a&&o.find.TAG("*",d&&l.parentNode||l),k=T+=null==C?1:Math.random()||.1;for(w&&(u=l!==f&&l,i=n);null!=(h=N[b]);b++){if(a&&h){g=0;while(m=e[g++])if(m(h,l,c)){p.push(h);break}w&&(T=k,i=++n)}r&&((h=!m&&h)&&v--,s&&x.push(h))}if(v+=b,r&&b!==v){g=0;while(m=t[g++])m(x,y,l,c);if(s){if(v>0)while(b--)x[b]||y[b]||(y[b]=q.call(p));y=xt(y)}M.apply(p,y),w&&!s&&y.length>0&&v+t.length>1&&at.uniqueSort(p)}return w&&(T=k,u=C),x};return r?lt(s):s}l=at.compile=function(e,t){var n,r=[],i=[],o=E[e+" "];if(!o){t||(t=mt(e)),n=t.length;while(n--)o=Tt(t[n]),o[b]?r.push(o):i.push(o);o=E(e,Ct(i,r))}return o};function Nt(e,t,n){var r=0,i=t.length;for(;i>r;r++)at(e,t[r],n);return n}function kt(e,t,n,i){var a,s,u,c,p,f=mt(e);if(!i&&1===f.length){if(s=f[0]=f[0].slice(0),s.length>2&&"ID"===(u=s[0]).type&&r.getById&&9===t.nodeType&&h&&o.relative[s[1].type]){if(t=(o.find.ID(u.matches[0].replace(rt,it),t)||[])[0],!t)return n;e=e.slice(s.shift().value.length)}a=Q.needsContext.test(e)?0:s.length;while(a--){if(u=s[a],o.relative[c=u.type])break;if((p=o.find[c])&&(i=p(u.matches[0].replace(rt,it),V.test(s[0].type)&&t.parentNode||t))){if(s.splice(a,1),e=i.length&&yt(s),!e)return M.apply(n,i),n;break}}}return l(e,f)(i,t,!h,n,V.test(e)),n}r.sortStable=b.split("").sort(A).join("")===b,r.detectDuplicates=S,p(),r.sortDetached=ut(function(e){return 1&e.compareDocumentPosition(f.createElement("div"))}),ut(function(e){return e.innerHTML="<a href='#'></a>","#"===e.firstChild.getAttribute("href")})||ct("type|href|height|width",function(e,n,r){return r?t:e.getAttribute(n,"type"===n.toLowerCase()?1:2)}),r.attributes&&ut(function(e){return e.innerHTML="<input/>",e.firstChild.setAttribute("value",""),""===e.firstChild.getAttribute("value")})||ct("value",function(e,n,r){return r||"input"!==e.nodeName.toLowerCase()?t:e.defaultValue}),ut(function(e){return null==e.getAttribute("disabled")})||ct(B,function(e,n,r){var i;return r?t:(i=e.getAttributeNode(n))&&i.specified?i.value:e[n]===!0?n.toLowerCase():null}),x.find=at,x.expr=at.selectors,x.expr[":"]=x.expr.pseudos,x.unique=at.uniqueSort,x.text=at.getText,x.isXMLDoc=at.isXML,x.contains=at.contains}(e);var O={};function F(e){var t=O[e]={};return x.each(e.match(T)||[],function(e,n){t[n]=!0}),t}x.Callbacks=function(e){e="string"==typeof e?O[e]||F(e):x.extend({},e);var n,r,i,o,a,s,l=[],u=!e.once&&[],c=function(t){for(r=e.memory&&t,i=!0,a=s||0,s=0,o=l.length,n=!0;l&&o>a;a++)if(l[a].apply(t[0],t[1])===!1&&e.stopOnFalse){r=!1;break}n=!1,l&&(u?u.length&&c(u.shift()):r?l=[]:p.disable())},p={add:function(){if(l){var t=l.length;(function i(t){x.each(t,function(t,n){var r=x.type(n);"function"===r?e.unique&&p.has(n)||l.push(n):n&&n.length&&"string"!==r&&i(n)})})(arguments),n?o=l.length:r&&(s=t,c(r))}return this},remove:function(){return l&&x.each(arguments,function(e,t){var r;while((r=x.inArray(t,l,r))>-1)l.splice(r,1),n&&(o>=r&&o--,a>=r&&a--)}),this},has:function(e){return e?x.inArray(e,l)>-1:!(!l||!l.length)},empty:function(){return l=[],o=0,this},disable:function(){return l=u=r=t,this},disabled:function(){return!l},lock:function(){return u=t,r||p.disable(),this},locked:function(){return!u},fireWith:function(e,t){return!l||i&&!u||(t=t||[],t=[e,t.slice?t.slice():t],n?u.push(t):c(t)),this},fire:function(){return p.fireWith(this,arguments),this},fired:function(){return!!i}};return p},x.extend({Deferred:function(e){var t=[["resolve","done",x.Callbacks("once memory"),"resolved"],["reject","fail",x.Callbacks("once memory"),"rejected"],["notify","progress",x.Callbacks("memory")]],n="pending",r={state:function(){return n},always:function(){return i.done(arguments).fail(arguments),this},then:function(){var e=arguments;return x.Deferred(function(n){x.each(t,function(t,o){var a=o[0],s=x.isFunction(e[t])&&e[t];i[o[1]](function(){var e=s&&s.apply(this,arguments);e&&x.isFunction(e.promise)?e.promise().done(n.resolve).fail(n.reject).progress(n.notify):n[a+"With"](this===r?n.promise():this,s?[e]:arguments)})}),e=null}).promise()},promise:function(e){return null!=e?x.extend(e,r):r}},i={};return r.pipe=r.then,x.each(t,function(e,o){var a=o[2],s=o[3];r[o[1]]=a.add,s&&a.add(function(){n=s},t[1^e][2].disable,t[2][2].lock),i[o[0]]=function(){return i[o[0]+"With"](this===i?r:this,arguments),this},i[o[0]+"With"]=a.fireWith}),r.promise(i),e&&e.call(i,i),i},when:function(e){var t=0,n=g.call(arguments),r=n.length,i=1!==r||e&&x.isFunction(e.promise)?r:0,o=1===i?e:x.Deferred(),a=function(e,t,n){return function(r){t[e]=this,n[e]=arguments.length>1?g.call(arguments):r,n===s?o.notifyWith(t,n):--i||o.resolveWith(t,n)}},s,l,u;if(r>1)for(s=Array(r),l=Array(r),u=Array(r);r>t;t++)n[t]&&x.isFunction(n[t].promise)?n[t].promise().done(a(t,u,n)).fail(o.reject).progress(a(t,l,s)):--i;return i||o.resolveWith(u,n),o.promise()}}),x.support=function(t){var n,r,o,s,l,u,c,p,f,d=a.createElement("div");if(d.setAttribute("className","t"),d.innerHTML="  <link/><table></table><a href='/a'>a</a><input type='checkbox'/>",n=d.getElementsByTagName("*")||[],r=d.getElementsByTagName("a")[0],!r||!r.style||!n.length)return t;s=a.createElement("select"),u=s.appendChild(a.createElement("option")),o=d.getElementsByTagName("input")[0],r.style.cssText="top:1px;float:left;opacity:.5",t.getSetAttribute="t"!==d.className,t.leadingWhitespace=3===d.firstChild.nodeType,t.tbody=!d.getElementsByTagName("tbody").length,t.htmlSerialize=!!d.getElementsByTagName("link").length,t.style=/top/.test(r.getAttribute("style")),t.hrefNormalized="/a"===r.getAttribute("href"),t.opacity=/^0.5/.test(r.style.opacity),t.cssFloat=!!r.style.cssFloat,t.checkOn=!!o.value,t.optSelected=u.selected,t.enctype=!!a.createElement("form").enctype,t.html5Clone="<:nav></:nav>"!==a.createElement("nav").cloneNode(!0).outerHTML,t.inlineBlockNeedsLayout=!1,t.shrinkWrapBlocks=!1,t.pixelPosition=!1,t.deleteExpando=!0,t.noCloneEvent=!0,t.reliableMarginRight=!0,t.boxSizingReliable=!0,o.checked=!0,t.noCloneChecked=o.cloneNode(!0).checked,s.disabled=!0,t.optDisabled=!u.disabled;try{delete d.test}catch(h){t.deleteExpando=!1}o=a.createElement("input"),o.setAttribute("value",""),t.input=""===o.getAttribute("value"),o.value="t",o.setAttribute("type","radio"),t.radioValue="t"===o.value,o.setAttribute("checked","t"),o.setAttribute("name","t"),l=a.createDocumentFragment(),l.appendChild(o),t.appendChecked=o.checked,t.checkClone=l.cloneNode(!0).cloneNode(!0).lastChild.checked,d.attachEvent&&(d.attachEvent("onclick",function(){t.noCloneEvent=!1}),d.cloneNode(!0).click());for(f in{submit:!0,change:!0,focusin:!0})d.setAttribute(c="on"+f,"t"),t[f+"Bubbles"]=c in e||d.attributes[c].expando===!1;d.style.backgroundClip="content-box",d.cloneNode(!0).style.backgroundClip="",t.clearCloneStyle="content-box"===d.style.backgroundClip;for(f in x(t))break;return t.ownLast="0"!==f,x(function(){var n,r,o,s="padding:0;margin:0;border:0;display:block;box-sizing:content-box;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;",l=a.getElementsByTagName("body")[0];l&&(n=a.createElement("div"),n.style.cssText="border:0;width:0;height:0;position:absolute;top:0;left:-9999px;margin-top:1px",l.appendChild(n).appendChild(d),d.innerHTML="<table><tr><td></td><td>t</td></tr></table>",o=d.getElementsByTagName("td"),o[0].style.cssText="padding:0;margin:0;border:0;display:none",p=0===o[0].offsetHeight,o[0].style.display="",o[1].style.display="none",t.reliableHiddenOffsets=p&&0===o[0].offsetHeight,d.innerHTML="",d.style.cssText="box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;padding:1px;border:1px;display:block;width:4px;margin-top:1%;position:absolute;top:1%;",x.swap(l,null!=l.style.zoom?{zoom:1}:{},function(){t.boxSizing=4===d.offsetWidth}),e.getComputedStyle&&(t.pixelPosition="1%"!==(e.getComputedStyle(d,null)||{}).top,t.boxSizingReliable="4px"===(e.getComputedStyle(d,null)||{width:"4px"}).width,r=d.appendChild(a.createElement("div")),r.style.cssText=d.style.cssText=s,r.style.marginRight=r.style.width="0",d.style.width="1px",t.reliableMarginRight=!parseFloat((e.getComputedStyle(r,null)||{}).marginRight)),typeof d.style.zoom!==i&&(d.innerHTML="",d.style.cssText=s+"width:1px;padding:1px;display:inline;zoom:1",t.inlineBlockNeedsLayout=3===d.offsetWidth,d.style.display="block",d.innerHTML="<div></div>",d.firstChild.style.width="5px",t.shrinkWrapBlocks=3!==d.offsetWidth,t.inlineBlockNeedsLayout&&(l.style.zoom=1)),l.removeChild(n),n=d=o=r=null)}),n=s=l=u=r=o=null,t
+}({});var B=/(?:\{[\s\S]*\}|\[[\s\S]*\])$/,P=/([A-Z])/g;function R(e,n,r,i){if(x.acceptData(e)){var o,a,s=x.expando,l=e.nodeType,u=l?x.cache:e,c=l?e[s]:e[s]&&s;if(c&&u[c]&&(i||u[c].data)||r!==t||"string"!=typeof n)return c||(c=l?e[s]=p.pop()||x.guid++:s),u[c]||(u[c]=l?{}:{toJSON:x.noop}),("object"==typeof n||"function"==typeof n)&&(i?u[c]=x.extend(u[c],n):u[c].data=x.extend(u[c].data,n)),a=u[c],i||(a.data||(a.data={}),a=a.data),r!==t&&(a[x.camelCase(n)]=r),"string"==typeof n?(o=a[n],null==o&&(o=a[x.camelCase(n)])):o=a,o}}function W(e,t,n){if(x.acceptData(e)){var r,i,o=e.nodeType,a=o?x.cache:e,s=o?e[x.expando]:x.expando;if(a[s]){if(t&&(r=n?a[s]:a[s].data)){x.isArray(t)?t=t.concat(x.map(t,x.camelCase)):t in r?t=[t]:(t=x.camelCase(t),t=t in r?[t]:t.split(" ")),i=t.length;while(i--)delete r[t[i]];if(n?!I(r):!x.isEmptyObject(r))return}(n||(delete a[s].data,I(a[s])))&&(o?x.cleanData([e],!0):x.support.deleteExpando||a!=a.window?delete a[s]:a[s]=null)}}}x.extend({cache:{},noData:{applet:!0,embed:!0,object:"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"},hasData:function(e){return e=e.nodeType?x.cache[e[x.expando]]:e[x.expando],!!e&&!I(e)},data:function(e,t,n){return R(e,t,n)},removeData:function(e,t){return W(e,t)},_data:function(e,t,n){return R(e,t,n,!0)},_removeData:function(e,t){return W(e,t,!0)},acceptData:function(e){if(e.nodeType&&1!==e.nodeType&&9!==e.nodeType)return!1;var t=e.nodeName&&x.noData[e.nodeName.toLowerCase()];return!t||t!==!0&&e.getAttribute("classid")===t}}),x.fn.extend({data:function(e,n){var r,i,o=null,a=0,s=this[0];if(e===t){if(this.length&&(o=x.data(s),1===s.nodeType&&!x._data(s,"parsedAttrs"))){for(r=s.attributes;r.length>a;a++)i=r[a].name,0===i.indexOf("data-")&&(i=x.camelCase(i.slice(5)),$(s,i,o[i]));x._data(s,"parsedAttrs",!0)}return o}return"object"==typeof e?this.each(function(){x.data(this,e)}):arguments.length>1?this.each(function(){x.data(this,e,n)}):s?$(s,e,x.data(s,e)):null},removeData:function(e){return this.each(function(){x.removeData(this,e)})}});function $(e,n,r){if(r===t&&1===e.nodeType){var i="data-"+n.replace(P,"-$1").toLowerCase();if(r=e.getAttribute(i),"string"==typeof r){try{r="true"===r?!0:"false"===r?!1:"null"===r?null:+r+""===r?+r:B.test(r)?x.parseJSON(r):r}catch(o){}x.data(e,n,r)}else r=t}return r}function I(e){var t;for(t in e)if(("data"!==t||!x.isEmptyObject(e[t]))&&"toJSON"!==t)return!1;return!0}x.extend({queue:function(e,n,r){var i;return e?(n=(n||"fx")+"queue",i=x._data(e,n),r&&(!i||x.isArray(r)?i=x._data(e,n,x.makeArray(r)):i.push(r)),i||[]):t},dequeue:function(e,t){t=t||"fx";var n=x.queue(e,t),r=n.length,i=n.shift(),o=x._queueHooks(e,t),a=function(){x.dequeue(e,t)};"inprogress"===i&&(i=n.shift(),r--),i&&("fx"===t&&n.unshift("inprogress"),delete o.stop,i.call(e,a,o)),!r&&o&&o.empty.fire()},_queueHooks:function(e,t){var n=t+"queueHooks";return x._data(e,n)||x._data(e,n,{empty:x.Callbacks("once memory").add(function(){x._removeData(e,t+"queue"),x._removeData(e,n)})})}}),x.fn.extend({queue:function(e,n){var r=2;return"string"!=typeof e&&(n=e,e="fx",r--),r>arguments.length?x.queue(this[0],e):n===t?this:this.each(function(){var t=x.queue(this,e,n);x._queueHooks(this,e),"fx"===e&&"inprogress"!==t[0]&&x.dequeue(this,e)})},dequeue:function(e){return this.each(function(){x.dequeue(this,e)})},delay:function(e,t){return e=x.fx?x.fx.speeds[e]||e:e,t=t||"fx",this.queue(t,function(t,n){var r=setTimeout(t,e);n.stop=function(){clearTimeout(r)}})},clearQueue:function(e){return this.queue(e||"fx",[])},promise:function(e,n){var r,i=1,o=x.Deferred(),a=this,s=this.length,l=function(){--i||o.resolveWith(a,[a])};"string"!=typeof e&&(n=e,e=t),e=e||"fx";while(s--)r=x._data(a[s],e+"queueHooks"),r&&r.empty&&(i++,r.empty.add(l));return l(),o.promise(n)}});var z,X,U=/[\t\r\n\f]/g,V=/\r/g,Y=/^(?:input|select|textarea|button|object)$/i,J=/^(?:a|area)$/i,G=/^(?:checked|selected)$/i,Q=x.support.getSetAttribute,K=x.support.input;x.fn.extend({attr:function(e,t){return x.access(this,x.attr,e,t,arguments.length>1)},removeAttr:function(e){return this.each(function(){x.removeAttr(this,e)})},prop:function(e,t){return x.access(this,x.prop,e,t,arguments.length>1)},removeProp:function(e){return e=x.propFix[e]||e,this.each(function(){try{this[e]=t,delete this[e]}catch(n){}})},addClass:function(e){var t,n,r,i,o,a=0,s=this.length,l="string"==typeof e&&e;if(x.isFunction(e))return this.each(function(t){x(this).addClass(e.call(this,t,this.className))});if(l)for(t=(e||"").match(T)||[];s>a;a++)if(n=this[a],r=1===n.nodeType&&(n.className?(" "+n.className+" ").replace(U," "):" ")){o=0;while(i=t[o++])0>r.indexOf(" "+i+" ")&&(r+=i+" ");n.className=x.trim(r)}return this},removeClass:function(e){var t,n,r,i,o,a=0,s=this.length,l=0===arguments.length||"string"==typeof e&&e;if(x.isFunction(e))return this.each(function(t){x(this).removeClass(e.call(this,t,this.className))});if(l)for(t=(e||"").match(T)||[];s>a;a++)if(n=this[a],r=1===n.nodeType&&(n.className?(" "+n.className+" ").replace(U," "):"")){o=0;while(i=t[o++])while(r.indexOf(" "+i+" ")>=0)r=r.replace(" "+i+" "," ");n.className=e?x.trim(r):""}return this},toggleClass:function(e,t){var n=typeof e;return"boolean"==typeof t&&"string"===n?t?this.addClass(e):this.removeClass(e):x.isFunction(e)?this.each(function(n){x(this).toggleClass(e.call(this,n,this.className,t),t)}):this.each(function(){if("string"===n){var t,r=0,o=x(this),a=e.match(T)||[];while(t=a[r++])o.hasClass(t)?o.removeClass(t):o.addClass(t)}else(n===i||"boolean"===n)&&(this.className&&x._data(this,"__className__",this.className),this.className=this.className||e===!1?"":x._data(this,"__className__")||"")})},hasClass:function(e){var t=" "+e+" ",n=0,r=this.length;for(;r>n;n++)if(1===this[n].nodeType&&(" "+this[n].className+" ").replace(U," ").indexOf(t)>=0)return!0;return!1},val:function(e){var n,r,i,o=this[0];{if(arguments.length)return i=x.isFunction(e),this.each(function(n){var o;1===this.nodeType&&(o=i?e.call(this,n,x(this).val()):e,null==o?o="":"number"==typeof o?o+="":x.isArray(o)&&(o=x.map(o,function(e){return null==e?"":e+""})),r=x.valHooks[this.type]||x.valHooks[this.nodeName.toLowerCase()],r&&"set"in r&&r.set(this,o,"value")!==t||(this.value=o))});if(o)return r=x.valHooks[o.type]||x.valHooks[o.nodeName.toLowerCase()],r&&"get"in r&&(n=r.get(o,"value"))!==t?n:(n=o.value,"string"==typeof n?n.replace(V,""):null==n?"":n)}}}),x.extend({valHooks:{option:{get:function(e){var t=x.find.attr(e,"value");return null!=t?t:e.text}},select:{get:function(e){var t,n,r=e.options,i=e.selectedIndex,o="select-one"===e.type||0>i,a=o?null:[],s=o?i+1:r.length,l=0>i?s:o?i:0;for(;s>l;l++)if(n=r[l],!(!n.selected&&l!==i||(x.support.optDisabled?n.disabled:null!==n.getAttribute("disabled"))||n.parentNode.disabled&&x.nodeName(n.parentNode,"optgroup"))){if(t=x(n).val(),o)return t;a.push(t)}return a},set:function(e,t){var n,r,i=e.options,o=x.makeArray(t),a=i.length;while(a--)r=i[a],(r.selected=x.inArray(x(r).val(),o)>=0)&&(n=!0);return n||(e.selectedIndex=-1),o}}},attr:function(e,n,r){var o,a,s=e.nodeType;if(e&&3!==s&&8!==s&&2!==s)return typeof e.getAttribute===i?x.prop(e,n,r):(1===s&&x.isXMLDoc(e)||(n=n.toLowerCase(),o=x.attrHooks[n]||(x.expr.match.bool.test(n)?X:z)),r===t?o&&"get"in o&&null!==(a=o.get(e,n))?a:(a=x.find.attr(e,n),null==a?t:a):null!==r?o&&"set"in o&&(a=o.set(e,r,n))!==t?a:(e.setAttribute(n,r+""),r):(x.removeAttr(e,n),t))},removeAttr:function(e,t){var n,r,i=0,o=t&&t.match(T);if(o&&1===e.nodeType)while(n=o[i++])r=x.propFix[n]||n,x.expr.match.bool.test(n)?K&&Q||!G.test(n)?e[r]=!1:e[x.camelCase("default-"+n)]=e[r]=!1:x.attr(e,n,""),e.removeAttribute(Q?n:r)},attrHooks:{type:{set:function(e,t){if(!x.support.radioValue&&"radio"===t&&x.nodeName(e,"input")){var n=e.value;return e.setAttribute("type",t),n&&(e.value=n),t}}}},propFix:{"for":"htmlFor","class":"className"},prop:function(e,n,r){var i,o,a,s=e.nodeType;if(e&&3!==s&&8!==s&&2!==s)return a=1!==s||!x.isXMLDoc(e),a&&(n=x.propFix[n]||n,o=x.propHooks[n]),r!==t?o&&"set"in o&&(i=o.set(e,r,n))!==t?i:e[n]=r:o&&"get"in o&&null!==(i=o.get(e,n))?i:e[n]},propHooks:{tabIndex:{get:function(e){var t=x.find.attr(e,"tabindex");return t?parseInt(t,10):Y.test(e.nodeName)||J.test(e.nodeName)&&e.href?0:-1}}}}),X={set:function(e,t,n){return t===!1?x.removeAttr(e,n):K&&Q||!G.test(n)?e.setAttribute(!Q&&x.propFix[n]||n,n):e[x.camelCase("default-"+n)]=e[n]=!0,n}},x.each(x.expr.match.bool.source.match(/\w+/g),function(e,n){var r=x.expr.attrHandle[n]||x.find.attr;x.expr.attrHandle[n]=K&&Q||!G.test(n)?function(e,n,i){var o=x.expr.attrHandle[n],a=i?t:(x.expr.attrHandle[n]=t)!=r(e,n,i)?n.toLowerCase():null;return x.expr.attrHandle[n]=o,a}:function(e,n,r){return r?t:e[x.camelCase("default-"+n)]?n.toLowerCase():null}}),K&&Q||(x.attrHooks.value={set:function(e,n,r){return x.nodeName(e,"input")?(e.defaultValue=n,t):z&&z.set(e,n,r)}}),Q||(z={set:function(e,n,r){var i=e.getAttributeNode(r);return i||e.setAttributeNode(i=e.ownerDocument.createAttribute(r)),i.value=n+="","value"===r||n===e.getAttribute(r)?n:t}},x.expr.attrHandle.id=x.expr.attrHandle.name=x.expr.attrHandle.coords=function(e,n,r){var i;return r?t:(i=e.getAttributeNode(n))&&""!==i.value?i.value:null},x.valHooks.button={get:function(e,n){var r=e.getAttributeNode(n);return r&&r.specified?r.value:t},set:z.set},x.attrHooks.contenteditable={set:function(e,t,n){z.set(e,""===t?!1:t,n)}},x.each(["width","height"],function(e,n){x.attrHooks[n]={set:function(e,r){return""===r?(e.setAttribute(n,"auto"),r):t}}})),x.support.hrefNormalized||x.each(["href","src"],function(e,t){x.propHooks[t]={get:function(e){return e.getAttribute(t,4)}}}),x.support.style||(x.attrHooks.style={get:function(e){return e.style.cssText||t},set:function(e,t){return e.style.cssText=t+""}}),x.support.optSelected||(x.propHooks.selected={get:function(e){var t=e.parentNode;return t&&(t.selectedIndex,t.parentNode&&t.parentNode.selectedIndex),null}}),x.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],function(){x.propFix[this.toLowerCase()]=this}),x.support.enctype||(x.propFix.enctype="encoding"),x.each(["radio","checkbox"],function(){x.valHooks[this]={set:function(e,n){return x.isArray(n)?e.checked=x.inArray(x(e).val(),n)>=0:t}},x.support.checkOn||(x.valHooks[this].get=function(e){return null===e.getAttribute("value")?"on":e.value})});var Z=/^(?:input|select|textarea)$/i,et=/^key/,tt=/^(?:mouse|contextmenu)|click/,nt=/^(?:focusinfocus|focusoutblur)$/,rt=/^([^.]*)(?:\.(.+)|)$/;function it(){return!0}function ot(){return!1}function at(){try{return a.activeElement}catch(e){}}x.event={global:{},add:function(e,n,r,o,a){var s,l,u,c,p,f,d,h,g,m,y,v=x._data(e);if(v){r.handler&&(c=r,r=c.handler,a=c.selector),r.guid||(r.guid=x.guid++),(l=v.events)||(l=v.events={}),(f=v.handle)||(f=v.handle=function(e){return typeof x===i||e&&x.event.triggered===e.type?t:x.event.dispatch.apply(f.elem,arguments)},f.elem=e),n=(n||"").match(T)||[""],u=n.length;while(u--)s=rt.exec(n[u])||[],g=y=s[1],m=(s[2]||"").split(".").sort(),g&&(p=x.event.special[g]||{},g=(a?p.delegateType:p.bindType)||g,p=x.event.special[g]||{},d=x.extend({type:g,origType:y,data:o,handler:r,guid:r.guid,selector:a,needsContext:a&&x.expr.match.needsContext.test(a),namespace:m.join(".")},c),(h=l[g])||(h=l[g]=[],h.delegateCount=0,p.setup&&p.setup.call(e,o,m,f)!==!1||(e.addEventListener?e.addEventListener(g,f,!1):e.attachEvent&&e.attachEvent("on"+g,f))),p.add&&(p.add.call(e,d),d.handler.guid||(d.handler.guid=r.guid)),a?h.splice(h.delegateCount++,0,d):h.push(d),x.event.global[g]=!0);e=null}},remove:function(e,t,n,r,i){var o,a,s,l,u,c,p,f,d,h,g,m=x.hasData(e)&&x._data(e);if(m&&(c=m.events)){t=(t||"").match(T)||[""],u=t.length;while(u--)if(s=rt.exec(t[u])||[],d=g=s[1],h=(s[2]||"").split(".").sort(),d){p=x.event.special[d]||{},d=(r?p.delegateType:p.bindType)||d,f=c[d]||[],s=s[2]&&RegExp("(^|\\.)"+h.join("\\.(?:.*\\.|)")+"(\\.|$)"),l=o=f.length;while(o--)a=f[o],!i&&g!==a.origType||n&&n.guid!==a.guid||s&&!s.test(a.namespace)||r&&r!==a.selector&&("**"!==r||!a.selector)||(f.splice(o,1),a.selector&&f.delegateCount--,p.remove&&p.remove.call(e,a));l&&!f.length&&(p.teardown&&p.teardown.call(e,h,m.handle)!==!1||x.removeEvent(e,d,m.handle),delete c[d])}else for(d in c)x.event.remove(e,d+t[u],n,r,!0);x.isEmptyObject(c)&&(delete m.handle,x._removeData(e,"events"))}},trigger:function(n,r,i,o){var s,l,u,c,p,f,d,h=[i||a],g=v.call(n,"type")?n.type:n,m=v.call(n,"namespace")?n.namespace.split("."):[];if(u=f=i=i||a,3!==i.nodeType&&8!==i.nodeType&&!nt.test(g+x.event.triggered)&&(g.indexOf(".")>=0&&(m=g.split("."),g=m.shift(),m.sort()),l=0>g.indexOf(":")&&"on"+g,n=n[x.expando]?n:new x.Event(g,"object"==typeof n&&n),n.isTrigger=o?2:3,n.namespace=m.join("."),n.namespace_re=n.namespace?RegExp("(^|\\.)"+m.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,n.result=t,n.target||(n.target=i),r=null==r?[n]:x.makeArray(r,[n]),p=x.event.special[g]||{},o||!p.trigger||p.trigger.apply(i,r)!==!1)){if(!o&&!p.noBubble&&!x.isWindow(i)){for(c=p.delegateType||g,nt.test(c+g)||(u=u.parentNode);u;u=u.parentNode)h.push(u),f=u;f===(i.ownerDocument||a)&&h.push(f.defaultView||f.parentWindow||e)}d=0;while((u=h[d++])&&!n.isPropagationStopped())n.type=d>1?c:p.bindType||g,s=(x._data(u,"events")||{})[n.type]&&x._data(u,"handle"),s&&s.apply(u,r),s=l&&u[l],s&&x.acceptData(u)&&s.apply&&s.apply(u,r)===!1&&n.preventDefault();if(n.type=g,!o&&!n.isDefaultPrevented()&&(!p._default||p._default.apply(h.pop(),r)===!1)&&x.acceptData(i)&&l&&i[g]&&!x.isWindow(i)){f=i[l],f&&(i[l]=null),x.event.triggered=g;try{i[g]()}catch(y){}x.event.triggered=t,f&&(i[l]=f)}return n.result}},dispatch:function(e){e=x.event.fix(e);var n,r,i,o,a,s=[],l=g.call(arguments),u=(x._data(this,"events")||{})[e.type]||[],c=x.event.special[e.type]||{};if(l[0]=e,e.delegateTarget=this,!c.preDispatch||c.preDispatch.call(this,e)!==!1){s=x.event.handlers.call(this,e,u),n=0;while((o=s[n++])&&!e.isPropagationStopped()){e.currentTarget=o.elem,a=0;while((i=o.handlers[a++])&&!e.isImmediatePropagationStopped())(!e.namespace_re||e.namespace_re.test(i.namespace))&&(e.handleObj=i,e.data=i.data,r=((x.event.special[i.origType]||{}).handle||i.handler).apply(o.elem,l),r!==t&&(e.result=r)===!1&&(e.preventDefault(),e.stopPropagation()))}return c.postDispatch&&c.postDispatch.call(this,e),e.result}},handlers:function(e,n){var r,i,o,a,s=[],l=n.delegateCount,u=e.target;if(l&&u.nodeType&&(!e.button||"click"!==e.type))for(;u!=this;u=u.parentNode||this)if(1===u.nodeType&&(u.disabled!==!0||"click"!==e.type)){for(o=[],a=0;l>a;a++)i=n[a],r=i.selector+" ",o[r]===t&&(o[r]=i.needsContext?x(r,this).index(u)>=0:x.find(r,this,null,[u]).length),o[r]&&o.push(i);o.length&&s.push({elem:u,handlers:o})}return n.length>l&&s.push({elem:this,handlers:n.slice(l)}),s},fix:function(e){if(e[x.expando])return e;var t,n,r,i=e.type,o=e,s=this.fixHooks[i];s||(this.fixHooks[i]=s=tt.test(i)?this.mouseHooks:et.test(i)?this.keyHooks:{}),r=s.props?this.props.concat(s.props):this.props,e=new x.Event(o),t=r.length;while(t--)n=r[t],e[n]=o[n];return e.target||(e.target=o.srcElement||a),3===e.target.nodeType&&(e.target=e.target.parentNode),e.metaKey=!!e.metaKey,s.filter?s.filter(e,o):e},props:"altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "),fixHooks:{},keyHooks:{props:"char charCode key keyCode".split(" "),filter:function(e,t){return null==e.which&&(e.which=null!=t.charCode?t.charCode:t.keyCode),e}},mouseHooks:{props:"button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement".split(" "),filter:function(e,n){var r,i,o,s=n.button,l=n.fromElement;return null==e.pageX&&null!=n.clientX&&(i=e.target.ownerDocument||a,o=i.documentElement,r=i.body,e.pageX=n.clientX+(o&&o.scrollLeft||r&&r.scrollLeft||0)-(o&&o.clientLeft||r&&r.clientLeft||0),e.pageY=n.clientY+(o&&o.scrollTop||r&&r.scrollTop||0)-(o&&o.clientTop||r&&r.clientTop||0)),!e.relatedTarget&&l&&(e.relatedTarget=l===e.target?n.toElement:l),e.which||s===t||(e.which=1&s?1:2&s?3:4&s?2:0),e}},special:{load:{noBubble:!0},focus:{trigger:function(){if(this!==at()&&this.focus)try{return this.focus(),!1}catch(e){}},delegateType:"focusin"},blur:{trigger:function(){return this===at()&&this.blur?(this.blur(),!1):t},delegateType:"focusout"},click:{trigger:function(){return x.nodeName(this,"input")&&"checkbox"===this.type&&this.click?(this.click(),!1):t},_default:function(e){return x.nodeName(e.target,"a")}},beforeunload:{postDispatch:function(e){e.result!==t&&(e.originalEvent.returnValue=e.result)}}},simulate:function(e,t,n,r){var i=x.extend(new x.Event,n,{type:e,isSimulated:!0,originalEvent:{}});r?x.event.trigger(i,null,t):x.event.dispatch.call(t,i),i.isDefaultPrevented()&&n.preventDefault()}},x.removeEvent=a.removeEventListener?function(e,t,n){e.removeEventListener&&e.removeEventListener(t,n,!1)}:function(e,t,n){var r="on"+t;e.detachEvent&&(typeof e[r]===i&&(e[r]=null),e.detachEvent(r,n))},x.Event=function(e,n){return this instanceof x.Event?(e&&e.type?(this.originalEvent=e,this.type=e.type,this.isDefaultPrevented=e.defaultPrevented||e.returnValue===!1||e.getPreventDefault&&e.getPreventDefault()?it:ot):this.type=e,n&&x.extend(this,n),this.timeStamp=e&&e.timeStamp||x.now(),this[x.expando]=!0,t):new x.Event(e,n)},x.Event.prototype={isDefaultPrevented:ot,isPropagationStopped:ot,isImmediatePropagationStopped:ot,preventDefault:function(){var e=this.originalEvent;this.isDefaultPrevented=it,e&&(e.preventDefault?e.preventDefault():e.returnValue=!1)},stopPropagation:function(){var e=this.originalEvent;this.isPropagationStopped=it,e&&(e.stopPropagation&&e.stopPropagation(),e.cancelBubble=!0)},stopImmediatePropagation:function(){this.isImmediatePropagationStopped=it,this.stopPropagation()}},x.each({mouseenter:"mouseover",mouseleave:"mouseout"},function(e,t){x.event.special[e]={delegateType:t,bindType:t,handle:function(e){var n,r=this,i=e.relatedTarget,o=e.handleObj;return(!i||i!==r&&!x.contains(r,i))&&(e.type=o.origType,n=o.handler.apply(this,arguments),e.type=t),n}}}),x.support.submitBubbles||(x.event.special.submit={setup:function(){return x.nodeName(this,"form")?!1:(x.event.add(this,"click._submit keypress._submit",function(e){var n=e.target,r=x.nodeName(n,"input")||x.nodeName(n,"button")?n.form:t;r&&!x._data(r,"submitBubbles")&&(x.event.add(r,"submit._submit",function(e){e._submit_bubble=!0}),x._data(r,"submitBubbles",!0))}),t)},postDispatch:function(e){e._submit_bubble&&(delete e._submit_bubble,this.parentNode&&!e.isTrigger&&x.event.simulate("submit",this.parentNode,e,!0))},teardown:function(){return x.nodeName(this,"form")?!1:(x.event.remove(this,"._submit"),t)}}),x.support.changeBubbles||(x.event.special.change={setup:function(){return Z.test(this.nodeName)?(("checkbox"===this.type||"radio"===this.type)&&(x.event.add(this,"propertychange._change",function(e){"checked"===e.originalEvent.propertyName&&(this._just_changed=!0)}),x.event.add(this,"click._change",function(e){this._just_changed&&!e.isTrigger&&(this._just_changed=!1),x.event.simulate("change",this,e,!0)})),!1):(x.event.add(this,"beforeactivate._change",function(e){var t=e.target;Z.test(t.nodeName)&&!x._data(t,"changeBubbles")&&(x.event.add(t,"change._change",function(e){!this.parentNode||e.isSimulated||e.isTrigger||x.event.simulate("change",this.parentNode,e,!0)}),x._data(t,"changeBubbles",!0))}),t)},handle:function(e){var n=e.target;return this!==n||e.isSimulated||e.isTrigger||"radio"!==n.type&&"checkbox"!==n.type?e.handleObj.handler.apply(this,arguments):t},teardown:function(){return x.event.remove(this,"._change"),!Z.test(this.nodeName)}}),x.support.focusinBubbles||x.each({focus:"focusin",blur:"focusout"},function(e,t){var n=0,r=function(e){x.event.simulate(t,e.target,x.event.fix(e),!0)};x.event.special[t]={setup:function(){0===n++&&a.addEventListener(e,r,!0)},teardown:function(){0===--n&&a.removeEventListener(e,r,!0)}}}),x.fn.extend({on:function(e,n,r,i,o){var a,s;if("object"==typeof e){"string"!=typeof n&&(r=r||n,n=t);for(a in e)this.on(a,n,r,e[a],o);return this}if(null==r&&null==i?(i=n,r=n=t):null==i&&("string"==typeof n?(i=r,r=t):(i=r,r=n,n=t)),i===!1)i=ot;else if(!i)return this;return 1===o&&(s=i,i=function(e){return x().off(e),s.apply(this,arguments)},i.guid=s.guid||(s.guid=x.guid++)),this.each(function(){x.event.add(this,e,i,r,n)})},one:function(e,t,n,r){return this.on(e,t,n,r,1)},off:function(e,n,r){var i,o;if(e&&e.preventDefault&&e.handleObj)return i=e.handleObj,x(e.delegateTarget).off(i.namespace?i.origType+"."+i.namespace:i.origType,i.selector,i.handler),this;if("object"==typeof e){for(o in e)this.off(o,n,e[o]);return this}return(n===!1||"function"==typeof n)&&(r=n,n=t),r===!1&&(r=ot),this.each(function(){x.event.remove(this,e,r,n)})},trigger:function(e,t){return this.each(function(){x.event.trigger(e,t,this)})},triggerHandler:function(e,n){var r=this[0];return r?x.event.trigger(e,n,r,!0):t}});var st=/^.[^:#\[\.,]*$/,lt=/^(?:parents|prev(?:Until|All))/,ut=x.expr.match.needsContext,ct={children:!0,contents:!0,next:!0,prev:!0};x.fn.extend({find:function(e){var t,n=[],r=this,i=r.length;if("string"!=typeof e)return this.pushStack(x(e).filter(function(){for(t=0;i>t;t++)if(x.contains(r[t],this))return!0}));for(t=0;i>t;t++)x.find(e,r[t],n);return n=this.pushStack(i>1?x.unique(n):n),n.selector=this.selector?this.selector+" "+e:e,n},has:function(e){var t,n=x(e,this),r=n.length;return this.filter(function(){for(t=0;r>t;t++)if(x.contains(this,n[t]))return!0})},not:function(e){return this.pushStack(ft(this,e||[],!0))},filter:function(e){return this.pushStack(ft(this,e||[],!1))},is:function(e){return!!ft(this,"string"==typeof e&&ut.test(e)?x(e):e||[],!1).length},closest:function(e,t){var n,r=0,i=this.length,o=[],a=ut.test(e)||"string"!=typeof e?x(e,t||this.context):0;for(;i>r;r++)for(n=this[r];n&&n!==t;n=n.parentNode)if(11>n.nodeType&&(a?a.index(n)>-1:1===n.nodeType&&x.find.matchesSelector(n,e))){n=o.push(n);break}return this.pushStack(o.length>1?x.unique(o):o)},index:function(e){return e?"string"==typeof e?x.inArray(this[0],x(e)):x.inArray(e.jquery?e[0]:e,this):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(e,t){var n="string"==typeof e?x(e,t):x.makeArray(e&&e.nodeType?[e]:e),r=x.merge(this.get(),n);return this.pushStack(x.unique(r))},addBack:function(e){return this.add(null==e?this.prevObject:this.prevObject.filter(e))}});function pt(e,t){do e=e[t];while(e&&1!==e.nodeType);return e}x.each({parent:function(e){var t=e.parentNode;return t&&11!==t.nodeType?t:null},parents:function(e){return x.dir(e,"parentNode")},parentsUntil:function(e,t,n){return x.dir(e,"parentNode",n)},next:function(e){return pt(e,"nextSibling")},prev:function(e){return pt(e,"previousSibling")},nextAll:function(e){return x.dir(e,"nextSibling")},prevAll:function(e){return x.dir(e,"previousSibling")},nextUntil:function(e,t,n){return x.dir(e,"nextSibling",n)},prevUntil:function(e,t,n){return x.dir(e,"previousSibling",n)},siblings:function(e){return x.sibling((e.parentNode||{}).firstChild,e)},children:function(e){return x.sibling(e.firstChild)},contents:function(e){return x.nodeName(e,"iframe")?e.contentDocument||e.contentWindow.document:x.merge([],e.childNodes)}},function(e,t){x.fn[e]=function(n,r){var i=x.map(this,t,n);return"Until"!==e.slice(-5)&&(r=n),r&&"string"==typeof r&&(i=x.filter(r,i)),this.length>1&&(ct[e]||(i=x.unique(i)),lt.test(e)&&(i=i.reverse())),this.pushStack(i)}}),x.extend({filter:function(e,t,n){var r=t[0];return n&&(e=":not("+e+")"),1===t.length&&1===r.nodeType?x.find.matchesSelector(r,e)?[r]:[]:x.find.matches(e,x.grep(t,function(e){return 1===e.nodeType}))},dir:function(e,n,r){var i=[],o=e[n];while(o&&9!==o.nodeType&&(r===t||1!==o.nodeType||!x(o).is(r)))1===o.nodeType&&i.push(o),o=o[n];return i},sibling:function(e,t){var n=[];for(;e;e=e.nextSibling)1===e.nodeType&&e!==t&&n.push(e);return n}});function ft(e,t,n){if(x.isFunction(t))return x.grep(e,function(e,r){return!!t.call(e,r,e)!==n});if(t.nodeType)return x.grep(e,function(e){return e===t!==n});if("string"==typeof t){if(st.test(t))return x.filter(t,e,n);t=x.filter(t,e)}return x.grep(e,function(e){return x.inArray(e,t)>=0!==n})}function dt(e){var t=ht.split("|"),n=e.createDocumentFragment();if(n.createElement)while(t.length)n.createElement(t.pop());return n}var ht="abbr|article|aside|audio|bdi|canvas|data|datalist|details|figcaption|figure|footer|header|hgroup|mark|meter|nav|output|progress|section|summary|time|video",gt=/ jQuery\d+="(?:null|\d+)"/g,mt=RegExp("<(?:"+ht+")[\\s/>]","i"),yt=/^\s+/,vt=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi,bt=/<([\w:]+)/,xt=/<tbody/i,wt=/<|&#?\w+;/,Tt=/<(?:script|style|link)/i,Ct=/^(?:checkbox|radio)$/i,Nt=/checked\s*(?:[^=]|=\s*.checked.)/i,kt=/^$|\/(?:java|ecma)script/i,Et=/^true\/(.*)/,St=/^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g,At={option:[1,"<select multiple='multiple'>","</select>"],legend:[1,"<fieldset>","</fieldset>"],area:[1,"<map>","</map>"],param:[1,"<object>","</object>"],thead:[1,"<table>","</table>"],tr:[2,"<table><tbody>","</tbody></table>"],col:[2,"<table><tbody></tbody><colgroup>","</colgroup></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],_default:x.support.htmlSerialize?[0,"",""]:[1,"X<div>","</div>"]},jt=dt(a),Dt=jt.appendChild(a.createElement("div"));At.optgroup=At.option,At.tbody=At.tfoot=At.colgroup=At.caption=At.thead,At.th=At.td,x.fn.extend({text:function(e){return x.access(this,function(e){return e===t?x.text(this):this.empty().append((this[0]&&this[0].ownerDocument||a).createTextNode(e))},null,e,arguments.length)},append:function(){return this.domManip(arguments,function(e){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var t=Lt(this,e);t.appendChild(e)}})},prepend:function(){return this.domManip(arguments,function(e){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var t=Lt(this,e);t.insertBefore(e,t.firstChild)}})},before:function(){return this.domManip(arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this)})},after:function(){return this.domManip(arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this.nextSibling)})},remove:function(e,t){var n,r=e?x.filter(e,this):this,i=0;for(;null!=(n=r[i]);i++)t||1!==n.nodeType||x.cleanData(Ft(n)),n.parentNode&&(t&&x.contains(n.ownerDocument,n)&&_t(Ft(n,"script")),n.parentNode.removeChild(n));return this},empty:function(){var e,t=0;for(;null!=(e=this[t]);t++){1===e.nodeType&&x.cleanData(Ft(e,!1));while(e.firstChild)e.removeChild(e.firstChild);e.options&&x.nodeName(e,"select")&&(e.options.length=0)}return this},clone:function(e,t){return e=null==e?!1:e,t=null==t?e:t,this.map(function(){return x.clone(this,e,t)})},html:function(e){return x.access(this,function(e){var n=this[0]||{},r=0,i=this.length;if(e===t)return 1===n.nodeType?n.innerHTML.replace(gt,""):t;if(!("string"!=typeof e||Tt.test(e)||!x.support.htmlSerialize&&mt.test(e)||!x.support.leadingWhitespace&&yt.test(e)||At[(bt.exec(e)||["",""])[1].toLowerCase()])){e=e.replace(vt,"<$1></$2>");try{for(;i>r;r++)n=this[r]||{},1===n.nodeType&&(x.cleanData(Ft(n,!1)),n.innerHTML=e);n=0}catch(o){}}n&&this.empty().append(e)},null,e,arguments.length)},replaceWith:function(){var e=x.map(this,function(e){return[e.nextSibling,e.parentNode]}),t=0;return this.domManip(arguments,function(n){var r=e[t++],i=e[t++];i&&(r&&r.parentNode!==i&&(r=this.nextSibling),x(this).remove(),i.insertBefore(n,r))},!0),t?this:this.remove()},detach:function(e){return this.remove(e,!0)},domManip:function(e,t,n){e=d.apply([],e);var r,i,o,a,s,l,u=0,c=this.length,p=this,f=c-1,h=e[0],g=x.isFunction(h);if(g||!(1>=c||"string"!=typeof h||x.support.checkClone)&&Nt.test(h))return this.each(function(r){var i=p.eq(r);g&&(e[0]=h.call(this,r,i.html())),i.domManip(e,t,n)});if(c&&(l=x.buildFragment(e,this[0].ownerDocument,!1,!n&&this),r=l.firstChild,1===l.childNodes.length&&(l=r),r)){for(a=x.map(Ft(l,"script"),Ht),o=a.length;c>u;u++)i=l,u!==f&&(i=x.clone(i,!0,!0),o&&x.merge(a,Ft(i,"script"))),t.call(this[u],i,u);if(o)for(s=a[a.length-1].ownerDocument,x.map(a,qt),u=0;o>u;u++)i=a[u],kt.test(i.type||"")&&!x._data(i,"globalEval")&&x.contains(s,i)&&(i.src?x._evalUrl(i.src):x.globalEval((i.text||i.textContent||i.innerHTML||"").replace(St,"")));l=r=null}return this}});function Lt(e,t){return x.nodeName(e,"table")&&x.nodeName(1===t.nodeType?t:t.firstChild,"tr")?e.getElementsByTagName("tbody")[0]||e.appendChild(e.ownerDocument.createElement("tbody")):e}function Ht(e){return e.type=(null!==x.find.attr(e,"type"))+"/"+e.type,e}function qt(e){var t=Et.exec(e.type);return t?e.type=t[1]:e.removeAttribute("type"),e}function _t(e,t){var n,r=0;for(;null!=(n=e[r]);r++)x._data(n,"globalEval",!t||x._data(t[r],"globalEval"))}function Mt(e,t){if(1===t.nodeType&&x.hasData(e)){var n,r,i,o=x._data(e),a=x._data(t,o),s=o.events;if(s){delete a.handle,a.events={};for(n in s)for(r=0,i=s[n].length;i>r;r++)x.event.add(t,n,s[n][r])}a.data&&(a.data=x.extend({},a.data))}}function Ot(e,t){var n,r,i;if(1===t.nodeType){if(n=t.nodeName.toLowerCase(),!x.support.noCloneEvent&&t[x.expando]){i=x._data(t);for(r in i.events)x.removeEvent(t,r,i.handle);t.removeAttribute(x.expando)}"script"===n&&t.text!==e.text?(Ht(t).text=e.text,qt(t)):"object"===n?(t.parentNode&&(t.outerHTML=e.outerHTML),x.support.html5Clone&&e.innerHTML&&!x.trim(t.innerHTML)&&(t.innerHTML=e.innerHTML)):"input"===n&&Ct.test(e.type)?(t.defaultChecked=t.checked=e.checked,t.value!==e.value&&(t.value=e.value)):"option"===n?t.defaultSelected=t.selected=e.defaultSelected:("input"===n||"textarea"===n)&&(t.defaultValue=e.defaultValue)}}x.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(e,t){x.fn[e]=function(e){var n,r=0,i=[],o=x(e),a=o.length-1;for(;a>=r;r++)n=r===a?this:this.clone(!0),x(o[r])[t](n),h.apply(i,n.get());return this.pushStack(i)}});function Ft(e,n){var r,o,a=0,s=typeof e.getElementsByTagName!==i?e.getElementsByTagName(n||"*"):typeof e.querySelectorAll!==i?e.querySelectorAll(n||"*"):t;if(!s)for(s=[],r=e.childNodes||e;null!=(o=r[a]);a++)!n||x.nodeName(o,n)?s.push(o):x.merge(s,Ft(o,n));return n===t||n&&x.nodeName(e,n)?x.merge([e],s):s}function Bt(e){Ct.test(e.type)&&(e.defaultChecked=e.checked)}x.extend({clone:function(e,t,n){var r,i,o,a,s,l=x.contains(e.ownerDocument,e);if(x.support.html5Clone||x.isXMLDoc(e)||!mt.test("<"+e.nodeName+">")?o=e.cloneNode(!0):(Dt.innerHTML=e.outerHTML,Dt.removeChild(o=Dt.firstChild)),!(x.support.noCloneEvent&&x.support.noCloneChecked||1!==e.nodeType&&11!==e.nodeType||x.isXMLDoc(e)))for(r=Ft(o),s=Ft(e),a=0;null!=(i=s[a]);++a)r[a]&&Ot(i,r[a]);if(t)if(n)for(s=s||Ft(e),r=r||Ft(o),a=0;null!=(i=s[a]);a++)Mt(i,r[a]);else Mt(e,o);return r=Ft(o,"script"),r.length>0&&_t(r,!l&&Ft(e,"script")),r=s=i=null,o},buildFragment:function(e,t,n,r){var i,o,a,s,l,u,c,p=e.length,f=dt(t),d=[],h=0;for(;p>h;h++)if(o=e[h],o||0===o)if("object"===x.type(o))x.merge(d,o.nodeType?[o]:o);else if(wt.test(o)){s=s||f.appendChild(t.createElement("div")),l=(bt.exec(o)||["",""])[1].toLowerCase(),c=At[l]||At._default,s.innerHTML=c[1]+o.replace(vt,"<$1></$2>")+c[2],i=c[0];while(i--)s=s.lastChild;if(!x.support.leadingWhitespace&&yt.test(o)&&d.push(t.createTextNode(yt.exec(o)[0])),!x.support.tbody){o="table"!==l||xt.test(o)?"<table>"!==c[1]||xt.test(o)?0:s:s.firstChild,i=o&&o.childNodes.length;while(i--)x.nodeName(u=o.childNodes[i],"tbody")&&!u.childNodes.length&&o.removeChild(u)}x.merge(d,s.childNodes),s.textContent="";while(s.firstChild)s.removeChild(s.firstChild);s=f.lastChild}else d.push(t.createTextNode(o));s&&f.removeChild(s),x.support.appendChecked||x.grep(Ft(d,"input"),Bt),h=0;while(o=d[h++])if((!r||-1===x.inArray(o,r))&&(a=x.contains(o.ownerDocument,o),s=Ft(f.appendChild(o),"script"),a&&_t(s),n)){i=0;while(o=s[i++])kt.test(o.type||"")&&n.push(o)}return s=null,f},cleanData:function(e,t){var n,r,o,a,s=0,l=x.expando,u=x.cache,c=x.support.deleteExpando,f=x.event.special;for(;null!=(n=e[s]);s++)if((t||x.acceptData(n))&&(o=n[l],a=o&&u[o])){if(a.events)for(r in a.events)f[r]?x.event.remove(n,r):x.removeEvent(n,r,a.handle);
+u[o]&&(delete u[o],c?delete n[l]:typeof n.removeAttribute!==i?n.removeAttribute(l):n[l]=null,p.push(o))}},_evalUrl:function(e){return x.ajax({url:e,type:"GET",dataType:"script",async:!1,global:!1,"throws":!0})}}),x.fn.extend({wrapAll:function(e){if(x.isFunction(e))return this.each(function(t){x(this).wrapAll(e.call(this,t))});if(this[0]){var t=x(e,this[0].ownerDocument).eq(0).clone(!0);this[0].parentNode&&t.insertBefore(this[0]),t.map(function(){var e=this;while(e.firstChild&&1===e.firstChild.nodeType)e=e.firstChild;return e}).append(this)}return this},wrapInner:function(e){return x.isFunction(e)?this.each(function(t){x(this).wrapInner(e.call(this,t))}):this.each(function(){var t=x(this),n=t.contents();n.length?n.wrapAll(e):t.append(e)})},wrap:function(e){var t=x.isFunction(e);return this.each(function(n){x(this).wrapAll(t?e.call(this,n):e)})},unwrap:function(){return this.parent().each(function(){x.nodeName(this,"body")||x(this).replaceWith(this.childNodes)}).end()}});var Pt,Rt,Wt,$t=/alpha\([^)]*\)/i,It=/opacity\s*=\s*([^)]*)/,zt=/^(top|right|bottom|left)$/,Xt=/^(none|table(?!-c[ea]).+)/,Ut=/^margin/,Vt=RegExp("^("+w+")(.*)$","i"),Yt=RegExp("^("+w+")(?!px)[a-z%]+$","i"),Jt=RegExp("^([+-])=("+w+")","i"),Gt={BODY:"block"},Qt={position:"absolute",visibility:"hidden",display:"block"},Kt={letterSpacing:0,fontWeight:400},Zt=["Top","Right","Bottom","Left"],en=["Webkit","O","Moz","ms"];function tn(e,t){if(t in e)return t;var n=t.charAt(0).toUpperCase()+t.slice(1),r=t,i=en.length;while(i--)if(t=en[i]+n,t in e)return t;return r}function nn(e,t){return e=t||e,"none"===x.css(e,"display")||!x.contains(e.ownerDocument,e)}function rn(e,t){var n,r,i,o=[],a=0,s=e.length;for(;s>a;a++)r=e[a],r.style&&(o[a]=x._data(r,"olddisplay"),n=r.style.display,t?(o[a]||"none"!==n||(r.style.display=""),""===r.style.display&&nn(r)&&(o[a]=x._data(r,"olddisplay",ln(r.nodeName)))):o[a]||(i=nn(r),(n&&"none"!==n||!i)&&x._data(r,"olddisplay",i?n:x.css(r,"display"))));for(a=0;s>a;a++)r=e[a],r.style&&(t&&"none"!==r.style.display&&""!==r.style.display||(r.style.display=t?o[a]||"":"none"));return e}x.fn.extend({css:function(e,n){return x.access(this,function(e,n,r){var i,o,a={},s=0;if(x.isArray(n)){for(o=Rt(e),i=n.length;i>s;s++)a[n[s]]=x.css(e,n[s],!1,o);return a}return r!==t?x.style(e,n,r):x.css(e,n)},e,n,arguments.length>1)},show:function(){return rn(this,!0)},hide:function(){return rn(this)},toggle:function(e){return"boolean"==typeof e?e?this.show():this.hide():this.each(function(){nn(this)?x(this).show():x(this).hide()})}}),x.extend({cssHooks:{opacity:{get:function(e,t){if(t){var n=Wt(e,"opacity");return""===n?"1":n}}}},cssNumber:{columnCount:!0,fillOpacity:!0,fontWeight:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{"float":x.support.cssFloat?"cssFloat":"styleFloat"},style:function(e,n,r,i){if(e&&3!==e.nodeType&&8!==e.nodeType&&e.style){var o,a,s,l=x.camelCase(n),u=e.style;if(n=x.cssProps[l]||(x.cssProps[l]=tn(u,l)),s=x.cssHooks[n]||x.cssHooks[l],r===t)return s&&"get"in s&&(o=s.get(e,!1,i))!==t?o:u[n];if(a=typeof r,"string"===a&&(o=Jt.exec(r))&&(r=(o[1]+1)*o[2]+parseFloat(x.css(e,n)),a="number"),!(null==r||"number"===a&&isNaN(r)||("number"!==a||x.cssNumber[l]||(r+="px"),x.support.clearCloneStyle||""!==r||0!==n.indexOf("background")||(u[n]="inherit"),s&&"set"in s&&(r=s.set(e,r,i))===t)))try{u[n]=r}catch(c){}}},css:function(e,n,r,i){var o,a,s,l=x.camelCase(n);return n=x.cssProps[l]||(x.cssProps[l]=tn(e.style,l)),s=x.cssHooks[n]||x.cssHooks[l],s&&"get"in s&&(a=s.get(e,!0,r)),a===t&&(a=Wt(e,n,i)),"normal"===a&&n in Kt&&(a=Kt[n]),""===r||r?(o=parseFloat(a),r===!0||x.isNumeric(o)?o||0:a):a}}),e.getComputedStyle?(Rt=function(t){return e.getComputedStyle(t,null)},Wt=function(e,n,r){var i,o,a,s=r||Rt(e),l=s?s.getPropertyValue(n)||s[n]:t,u=e.style;return s&&(""!==l||x.contains(e.ownerDocument,e)||(l=x.style(e,n)),Yt.test(l)&&Ut.test(n)&&(i=u.width,o=u.minWidth,a=u.maxWidth,u.minWidth=u.maxWidth=u.width=l,l=s.width,u.width=i,u.minWidth=o,u.maxWidth=a)),l}):a.documentElement.currentStyle&&(Rt=function(e){return e.currentStyle},Wt=function(e,n,r){var i,o,a,s=r||Rt(e),l=s?s[n]:t,u=e.style;return null==l&&u&&u[n]&&(l=u[n]),Yt.test(l)&&!zt.test(n)&&(i=u.left,o=e.runtimeStyle,a=o&&o.left,a&&(o.left=e.currentStyle.left),u.left="fontSize"===n?"1em":l,l=u.pixelLeft+"px",u.left=i,a&&(o.left=a)),""===l?"auto":l});function on(e,t,n){var r=Vt.exec(t);return r?Math.max(0,r[1]-(n||0))+(r[2]||"px"):t}function an(e,t,n,r,i){var o=n===(r?"border":"content")?4:"width"===t?1:0,a=0;for(;4>o;o+=2)"margin"===n&&(a+=x.css(e,n+Zt[o],!0,i)),r?("content"===n&&(a-=x.css(e,"padding"+Zt[o],!0,i)),"margin"!==n&&(a-=x.css(e,"border"+Zt[o]+"Width",!0,i))):(a+=x.css(e,"padding"+Zt[o],!0,i),"padding"!==n&&(a+=x.css(e,"border"+Zt[o]+"Width",!0,i)));return a}function sn(e,t,n){var r=!0,i="width"===t?e.offsetWidth:e.offsetHeight,o=Rt(e),a=x.support.boxSizing&&"border-box"===x.css(e,"boxSizing",!1,o);if(0>=i||null==i){if(i=Wt(e,t,o),(0>i||null==i)&&(i=e.style[t]),Yt.test(i))return i;r=a&&(x.support.boxSizingReliable||i===e.style[t]),i=parseFloat(i)||0}return i+an(e,t,n||(a?"border":"content"),r,o)+"px"}function ln(e){var t=a,n=Gt[e];return n||(n=un(e,t),"none"!==n&&n||(Pt=(Pt||x("<iframe frameborder='0' width='0' height='0'/>").css("cssText","display:block !important")).appendTo(t.documentElement),t=(Pt[0].contentWindow||Pt[0].contentDocument).document,t.write("<!doctype html><html><body>"),t.close(),n=un(e,t),Pt.detach()),Gt[e]=n),n}function un(e,t){var n=x(t.createElement(e)).appendTo(t.body),r=x.css(n[0],"display");return n.remove(),r}x.each(["height","width"],function(e,n){x.cssHooks[n]={get:function(e,r,i){return r?0===e.offsetWidth&&Xt.test(x.css(e,"display"))?x.swap(e,Qt,function(){return sn(e,n,i)}):sn(e,n,i):t},set:function(e,t,r){var i=r&&Rt(e);return on(e,t,r?an(e,n,r,x.support.boxSizing&&"border-box"===x.css(e,"boxSizing",!1,i),i):0)}}}),x.support.opacity||(x.cssHooks.opacity={get:function(e,t){return It.test((t&&e.currentStyle?e.currentStyle.filter:e.style.filter)||"")?.01*parseFloat(RegExp.$1)+"":t?"1":""},set:function(e,t){var n=e.style,r=e.currentStyle,i=x.isNumeric(t)?"alpha(opacity="+100*t+")":"",o=r&&r.filter||n.filter||"";n.zoom=1,(t>=1||""===t)&&""===x.trim(o.replace($t,""))&&n.removeAttribute&&(n.removeAttribute("filter"),""===t||r&&!r.filter)||(n.filter=$t.test(o)?o.replace($t,i):o+" "+i)}}),x(function(){x.support.reliableMarginRight||(x.cssHooks.marginRight={get:function(e,n){return n?x.swap(e,{display:"inline-block"},Wt,[e,"marginRight"]):t}}),!x.support.pixelPosition&&x.fn.position&&x.each(["top","left"],function(e,n){x.cssHooks[n]={get:function(e,r){return r?(r=Wt(e,n),Yt.test(r)?x(e).position()[n]+"px":r):t}}})}),x.expr&&x.expr.filters&&(x.expr.filters.hidden=function(e){return 0>=e.offsetWidth&&0>=e.offsetHeight||!x.support.reliableHiddenOffsets&&"none"===(e.style&&e.style.display||x.css(e,"display"))},x.expr.filters.visible=function(e){return!x.expr.filters.hidden(e)}),x.each({margin:"",padding:"",border:"Width"},function(e,t){x.cssHooks[e+t]={expand:function(n){var r=0,i={},o="string"==typeof n?n.split(" "):[n];for(;4>r;r++)i[e+Zt[r]+t]=o[r]||o[r-2]||o[0];return i}},Ut.test(e)||(x.cssHooks[e+t].set=on)});var cn=/%20/g,pn=/\[\]$/,fn=/\r?\n/g,dn=/^(?:submit|button|image|reset|file)$/i,hn=/^(?:input|select|textarea|keygen)/i;x.fn.extend({serialize:function(){return x.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var e=x.prop(this,"elements");return e?x.makeArray(e):this}).filter(function(){var e=this.type;return this.name&&!x(this).is(":disabled")&&hn.test(this.nodeName)&&!dn.test(e)&&(this.checked||!Ct.test(e))}).map(function(e,t){var n=x(this).val();return null==n?null:x.isArray(n)?x.map(n,function(e){return{name:t.name,value:e.replace(fn,"\r\n")}}):{name:t.name,value:n.replace(fn,"\r\n")}}).get()}}),x.param=function(e,n){var r,i=[],o=function(e,t){t=x.isFunction(t)?t():null==t?"":t,i[i.length]=encodeURIComponent(e)+"="+encodeURIComponent(t)};if(n===t&&(n=x.ajaxSettings&&x.ajaxSettings.traditional),x.isArray(e)||e.jquery&&!x.isPlainObject(e))x.each(e,function(){o(this.name,this.value)});else for(r in e)gn(r,e[r],n,o);return i.join("&").replace(cn,"+")};function gn(e,t,n,r){var i;if(x.isArray(t))x.each(t,function(t,i){n||pn.test(e)?r(e,i):gn(e+"["+("object"==typeof i?t:"")+"]",i,n,r)});else if(n||"object"!==x.type(t))r(e,t);else for(i in t)gn(e+"["+i+"]",t[i],n,r)}x.each("blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error contextmenu".split(" "),function(e,t){x.fn[t]=function(e,n){return arguments.length>0?this.on(t,null,e,n):this.trigger(t)}}),x.fn.extend({hover:function(e,t){return this.mouseenter(e).mouseleave(t||e)},bind:function(e,t,n){return this.on(e,null,t,n)},unbind:function(e,t){return this.off(e,null,t)},delegate:function(e,t,n,r){return this.on(t,e,n,r)},undelegate:function(e,t,n){return 1===arguments.length?this.off(e,"**"):this.off(t,e||"**",n)}});var mn,yn,vn=x.now(),bn=/\?/,xn=/#.*$/,wn=/([?&])_=[^&]*/,Tn=/^(.*?):[ \t]*([^\r\n]*)\r?$/gm,Cn=/^(?:about|app|app-storage|.+-extension|file|res|widget):$/,Nn=/^(?:GET|HEAD)$/,kn=/^\/\//,En=/^([\w.+-]+:)(?:\/\/([^\/?#:]*)(?::(\d+)|)|)/,Sn=x.fn.load,An={},jn={},Dn="*/".concat("*");try{yn=o.href}catch(Ln){yn=a.createElement("a"),yn.href="",yn=yn.href}mn=En.exec(yn.toLowerCase())||[];function Hn(e){return function(t,n){"string"!=typeof t&&(n=t,t="*");var r,i=0,o=t.toLowerCase().match(T)||[];if(x.isFunction(n))while(r=o[i++])"+"===r[0]?(r=r.slice(1)||"*",(e[r]=e[r]||[]).unshift(n)):(e[r]=e[r]||[]).push(n)}}function qn(e,n,r,i){var o={},a=e===jn;function s(l){var u;return o[l]=!0,x.each(e[l]||[],function(e,l){var c=l(n,r,i);return"string"!=typeof c||a||o[c]?a?!(u=c):t:(n.dataTypes.unshift(c),s(c),!1)}),u}return s(n.dataTypes[0])||!o["*"]&&s("*")}function _n(e,n){var r,i,o=x.ajaxSettings.flatOptions||{};for(i in n)n[i]!==t&&((o[i]?e:r||(r={}))[i]=n[i]);return r&&x.extend(!0,e,r),e}x.fn.load=function(e,n,r){if("string"!=typeof e&&Sn)return Sn.apply(this,arguments);var i,o,a,s=this,l=e.indexOf(" ");return l>=0&&(i=e.slice(l,e.length),e=e.slice(0,l)),x.isFunction(n)?(r=n,n=t):n&&"object"==typeof n&&(a="POST"),s.length>0&&x.ajax({url:e,type:a,dataType:"html",data:n}).done(function(e){o=arguments,s.html(i?x("<div>").append(x.parseHTML(e)).find(i):e)}).complete(r&&function(e,t){s.each(r,o||[e.responseText,t,e])}),this},x.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(e,t){x.fn[t]=function(e){return this.on(t,e)}}),x.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:yn,type:"GET",isLocal:Cn.test(mn[1]),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":Dn,text:"text/plain",html:"text/html",xml:"application/xml, text/xml",json:"application/json, text/javascript"},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText",json:"responseJSON"},converters:{"* text":String,"text html":!0,"text json":x.parseJSON,"text xml":x.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(e,t){return t?_n(_n(e,x.ajaxSettings),t):_n(x.ajaxSettings,e)},ajaxPrefilter:Hn(An),ajaxTransport:Hn(jn),ajax:function(e,n){"object"==typeof e&&(n=e,e=t),n=n||{};var r,i,o,a,s,l,u,c,p=x.ajaxSetup({},n),f=p.context||p,d=p.context&&(f.nodeType||f.jquery)?x(f):x.event,h=x.Deferred(),g=x.Callbacks("once memory"),m=p.statusCode||{},y={},v={},b=0,w="canceled",C={readyState:0,getResponseHeader:function(e){var t;if(2===b){if(!c){c={};while(t=Tn.exec(a))c[t[1].toLowerCase()]=t[2]}t=c[e.toLowerCase()]}return null==t?null:t},getAllResponseHeaders:function(){return 2===b?a:null},setRequestHeader:function(e,t){var n=e.toLowerCase();return b||(e=v[n]=v[n]||e,y[e]=t),this},overrideMimeType:function(e){return b||(p.mimeType=e),this},statusCode:function(e){var t;if(e)if(2>b)for(t in e)m[t]=[m[t],e[t]];else C.always(e[C.status]);return this},abort:function(e){var t=e||w;return u&&u.abort(t),k(0,t),this}};if(h.promise(C).complete=g.add,C.success=C.done,C.error=C.fail,p.url=((e||p.url||yn)+"").replace(xn,"").replace(kn,mn[1]+"//"),p.type=n.method||n.type||p.method||p.type,p.dataTypes=x.trim(p.dataType||"*").toLowerCase().match(T)||[""],null==p.crossDomain&&(r=En.exec(p.url.toLowerCase()),p.crossDomain=!(!r||r[1]===mn[1]&&r[2]===mn[2]&&(r[3]||("http:"===r[1]?"80":"443"))===(mn[3]||("http:"===mn[1]?"80":"443")))),p.data&&p.processData&&"string"!=typeof p.data&&(p.data=x.param(p.data,p.traditional)),qn(An,p,n,C),2===b)return C;l=p.global,l&&0===x.active++&&x.event.trigger("ajaxStart"),p.type=p.type.toUpperCase(),p.hasContent=!Nn.test(p.type),o=p.url,p.hasContent||(p.data&&(o=p.url+=(bn.test(o)?"&":"?")+p.data,delete p.data),p.cache===!1&&(p.url=wn.test(o)?o.replace(wn,"$1_="+vn++):o+(bn.test(o)?"&":"?")+"_="+vn++)),p.ifModified&&(x.lastModified[o]&&C.setRequestHeader("If-Modified-Since",x.lastModified[o]),x.etag[o]&&C.setRequestHeader("If-None-Match",x.etag[o])),(p.data&&p.hasContent&&p.contentType!==!1||n.contentType)&&C.setRequestHeader("Content-Type",p.contentType),C.setRequestHeader("Accept",p.dataTypes[0]&&p.accepts[p.dataTypes[0]]?p.accepts[p.dataTypes[0]]+("*"!==p.dataTypes[0]?", "+Dn+"; q=0.01":""):p.accepts["*"]);for(i in p.headers)C.setRequestHeader(i,p.headers[i]);if(p.beforeSend&&(p.beforeSend.call(f,C,p)===!1||2===b))return C.abort();w="abort";for(i in{success:1,error:1,complete:1})C[i](p[i]);if(u=qn(jn,p,n,C)){C.readyState=1,l&&d.trigger("ajaxSend",[C,p]),p.async&&p.timeout>0&&(s=setTimeout(function(){C.abort("timeout")},p.timeout));try{b=1,u.send(y,k)}catch(N){if(!(2>b))throw N;k(-1,N)}}else k(-1,"No Transport");function k(e,n,r,i){var c,y,v,w,T,N=n;2!==b&&(b=2,s&&clearTimeout(s),u=t,a=i||"",C.readyState=e>0?4:0,c=e>=200&&300>e||304===e,r&&(w=Mn(p,C,r)),w=On(p,w,C,c),c?(p.ifModified&&(T=C.getResponseHeader("Last-Modified"),T&&(x.lastModified[o]=T),T=C.getResponseHeader("etag"),T&&(x.etag[o]=T)),204===e||"HEAD"===p.type?N="nocontent":304===e?N="notmodified":(N=w.state,y=w.data,v=w.error,c=!v)):(v=N,(e||!N)&&(N="error",0>e&&(e=0))),C.status=e,C.statusText=(n||N)+"",c?h.resolveWith(f,[y,N,C]):h.rejectWith(f,[C,N,v]),C.statusCode(m),m=t,l&&d.trigger(c?"ajaxSuccess":"ajaxError",[C,p,c?y:v]),g.fireWith(f,[C,N]),l&&(d.trigger("ajaxComplete",[C,p]),--x.active||x.event.trigger("ajaxStop")))}return C},getJSON:function(e,t,n){return x.get(e,t,n,"json")},getScript:function(e,n){return x.get(e,t,n,"script")}}),x.each(["get","post"],function(e,n){x[n]=function(e,r,i,o){return x.isFunction(r)&&(o=o||i,i=r,r=t),x.ajax({url:e,type:n,dataType:o,data:r,success:i})}});function Mn(e,n,r){var i,o,a,s,l=e.contents,u=e.dataTypes;while("*"===u[0])u.shift(),o===t&&(o=e.mimeType||n.getResponseHeader("Content-Type"));if(o)for(s in l)if(l[s]&&l[s].test(o)){u.unshift(s);break}if(u[0]in r)a=u[0];else{for(s in r){if(!u[0]||e.converters[s+" "+u[0]]){a=s;break}i||(i=s)}a=a||i}return a?(a!==u[0]&&u.unshift(a),r[a]):t}function On(e,t,n,r){var i,o,a,s,l,u={},c=e.dataTypes.slice();if(c[1])for(a in e.converters)u[a.toLowerCase()]=e.converters[a];o=c.shift();while(o)if(e.responseFields[o]&&(n[e.responseFields[o]]=t),!l&&r&&e.dataFilter&&(t=e.dataFilter(t,e.dataType)),l=o,o=c.shift())if("*"===o)o=l;else if("*"!==l&&l!==o){if(a=u[l+" "+o]||u["* "+o],!a)for(i in u)if(s=i.split(" "),s[1]===o&&(a=u[l+" "+s[0]]||u["* "+s[0]])){a===!0?a=u[i]:u[i]!==!0&&(o=s[0],c.unshift(s[1]));break}if(a!==!0)if(a&&e["throws"])t=a(t);else try{t=a(t)}catch(p){return{state:"parsererror",error:a?p:"No conversion from "+l+" to "+o}}}return{state:"success",data:t}}x.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/(?:java|ecma)script/},converters:{"text script":function(e){return x.globalEval(e),e}}}),x.ajaxPrefilter("script",function(e){e.cache===t&&(e.cache=!1),e.crossDomain&&(e.type="GET",e.global=!1)}),x.ajaxTransport("script",function(e){if(e.crossDomain){var n,r=a.head||x("head")[0]||a.documentElement;return{send:function(t,i){n=a.createElement("script"),n.async=!0,e.scriptCharset&&(n.charset=e.scriptCharset),n.src=e.url,n.onload=n.onreadystatechange=function(e,t){(t||!n.readyState||/loaded|complete/.test(n.readyState))&&(n.onload=n.onreadystatechange=null,n.parentNode&&n.parentNode.removeChild(n),n=null,t||i(200,"success"))},r.insertBefore(n,r.firstChild)},abort:function(){n&&n.onload(t,!0)}}}});var Fn=[],Bn=/(=)\?(?=&|$)|\?\?/;x.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var e=Fn.pop()||x.expando+"_"+vn++;return this[e]=!0,e}}),x.ajaxPrefilter("json jsonp",function(n,r,i){var o,a,s,l=n.jsonp!==!1&&(Bn.test(n.url)?"url":"string"==typeof n.data&&!(n.contentType||"").indexOf("application/x-www-form-urlencoded")&&Bn.test(n.data)&&"data");return l||"jsonp"===n.dataTypes[0]?(o=n.jsonpCallback=x.isFunction(n.jsonpCallback)?n.jsonpCallback():n.jsonpCallback,l?n[l]=n[l].replace(Bn,"$1"+o):n.jsonp!==!1&&(n.url+=(bn.test(n.url)?"&":"?")+n.jsonp+"="+o),n.converters["script json"]=function(){return s||x.error(o+" was not called"),s[0]},n.dataTypes[0]="json",a=e[o],e[o]=function(){s=arguments},i.always(function(){e[o]=a,n[o]&&(n.jsonpCallback=r.jsonpCallback,Fn.push(o)),s&&x.isFunction(a)&&a(s[0]),s=a=t}),"script"):t});var Pn,Rn,Wn=0,$n=e.ActiveXObject&&function(){var e;for(e in Pn)Pn[e](t,!0)};function In(){try{return new e.XMLHttpRequest}catch(t){}}function zn(){try{return new e.ActiveXObject("Microsoft.XMLHTTP")}catch(t){}}x.ajaxSettings.xhr=e.ActiveXObject?function(){return!this.isLocal&&In()||zn()}:In,Rn=x.ajaxSettings.xhr(),x.support.cors=!!Rn&&"withCredentials"in Rn,Rn=x.support.ajax=!!Rn,Rn&&x.ajaxTransport(function(n){if(!n.crossDomain||x.support.cors){var r;return{send:function(i,o){var a,s,l=n.xhr();if(n.username?l.open(n.type,n.url,n.async,n.username,n.password):l.open(n.type,n.url,n.async),n.xhrFields)for(s in n.xhrFields)l[s]=n.xhrFields[s];n.mimeType&&l.overrideMimeType&&l.overrideMimeType(n.mimeType),n.crossDomain||i["X-Requested-With"]||(i["X-Requested-With"]="XMLHttpRequest");try{for(s in i)l.setRequestHeader(s,i[s])}catch(u){}l.send(n.hasContent&&n.data||null),r=function(e,i){var s,u,c,p;try{if(r&&(i||4===l.readyState))if(r=t,a&&(l.onreadystatechange=x.noop,$n&&delete Pn[a]),i)4!==l.readyState&&l.abort();else{p={},s=l.status,u=l.getAllResponseHeaders(),"string"==typeof l.responseText&&(p.text=l.responseText);try{c=l.statusText}catch(f){c=""}s||!n.isLocal||n.crossDomain?1223===s&&(s=204):s=p.text?200:404}}catch(d){i||o(-1,d)}p&&o(s,c,p,u)},n.async?4===l.readyState?setTimeout(r):(a=++Wn,$n&&(Pn||(Pn={},x(e).unload($n)),Pn[a]=r),l.onreadystatechange=r):r()},abort:function(){r&&r(t,!0)}}}});var Xn,Un,Vn=/^(?:toggle|show|hide)$/,Yn=RegExp("^(?:([+-])=|)("+w+")([a-z%]*)$","i"),Jn=/queueHooks$/,Gn=[nr],Qn={"*":[function(e,t){var n=this.createTween(e,t),r=n.cur(),i=Yn.exec(t),o=i&&i[3]||(x.cssNumber[e]?"":"px"),a=(x.cssNumber[e]||"px"!==o&&+r)&&Yn.exec(x.css(n.elem,e)),s=1,l=20;if(a&&a[3]!==o){o=o||a[3],i=i||[],a=+r||1;do s=s||".5",a/=s,x.style(n.elem,e,a+o);while(s!==(s=n.cur()/r)&&1!==s&&--l)}return i&&(a=n.start=+a||+r||0,n.unit=o,n.end=i[1]?a+(i[1]+1)*i[2]:+i[2]),n}]};function Kn(){return setTimeout(function(){Xn=t}),Xn=x.now()}function Zn(e,t,n){var r,i=(Qn[t]||[]).concat(Qn["*"]),o=0,a=i.length;for(;a>o;o++)if(r=i[o].call(n,t,e))return r}function er(e,t,n){var r,i,o=0,a=Gn.length,s=x.Deferred().always(function(){delete l.elem}),l=function(){if(i)return!1;var t=Xn||Kn(),n=Math.max(0,u.startTime+u.duration-t),r=n/u.duration||0,o=1-r,a=0,l=u.tweens.length;for(;l>a;a++)u.tweens[a].run(o);return s.notifyWith(e,[u,o,n]),1>o&&l?n:(s.resolveWith(e,[u]),!1)},u=s.promise({elem:e,props:x.extend({},t),opts:x.extend(!0,{specialEasing:{}},n),originalProperties:t,originalOptions:n,startTime:Xn||Kn(),duration:n.duration,tweens:[],createTween:function(t,n){var r=x.Tween(e,u.opts,t,n,u.opts.specialEasing[t]||u.opts.easing);return u.tweens.push(r),r},stop:function(t){var n=0,r=t?u.tweens.length:0;if(i)return this;for(i=!0;r>n;n++)u.tweens[n].run(1);return t?s.resolveWith(e,[u,t]):s.rejectWith(e,[u,t]),this}}),c=u.props;for(tr(c,u.opts.specialEasing);a>o;o++)if(r=Gn[o].call(u,e,c,u.opts))return r;return x.map(c,Zn,u),x.isFunction(u.opts.start)&&u.opts.start.call(e,u),x.fx.timer(x.extend(l,{elem:e,anim:u,queue:u.opts.queue})),u.progress(u.opts.progress).done(u.opts.done,u.opts.complete).fail(u.opts.fail).always(u.opts.always)}function tr(e,t){var n,r,i,o,a;for(n in e)if(r=x.camelCase(n),i=t[r],o=e[n],x.isArray(o)&&(i=o[1],o=e[n]=o[0]),n!==r&&(e[r]=o,delete e[n]),a=x.cssHooks[r],a&&"expand"in a){o=a.expand(o),delete e[r];for(n in o)n in e||(e[n]=o[n],t[n]=i)}else t[r]=i}x.Animation=x.extend(er,{tweener:function(e,t){x.isFunction(e)?(t=e,e=["*"]):e=e.split(" ");var n,r=0,i=e.length;for(;i>r;r++)n=e[r],Qn[n]=Qn[n]||[],Qn[n].unshift(t)},prefilter:function(e,t){t?Gn.unshift(e):Gn.push(e)}});function nr(e,t,n){var r,i,o,a,s,l,u=this,c={},p=e.style,f=e.nodeType&&nn(e),d=x._data(e,"fxshow");n.queue||(s=x._queueHooks(e,"fx"),null==s.unqueued&&(s.unqueued=0,l=s.empty.fire,s.empty.fire=function(){s.unqueued||l()}),s.unqueued++,u.always(function(){u.always(function(){s.unqueued--,x.queue(e,"fx").length||s.empty.fire()})})),1===e.nodeType&&("height"in t||"width"in t)&&(n.overflow=[p.overflow,p.overflowX,p.overflowY],"inline"===x.css(e,"display")&&"none"===x.css(e,"float")&&(x.support.inlineBlockNeedsLayout&&"inline"!==ln(e.nodeName)?p.zoom=1:p.display="inline-block")),n.overflow&&(p.overflow="hidden",x.support.shrinkWrapBlocks||u.always(function(){p.overflow=n.overflow[0],p.overflowX=n.overflow[1],p.overflowY=n.overflow[2]}));for(r in t)if(i=t[r],Vn.exec(i)){if(delete t[r],o=o||"toggle"===i,i===(f?"hide":"show"))continue;c[r]=d&&d[r]||x.style(e,r)}if(!x.isEmptyObject(c)){d?"hidden"in d&&(f=d.hidden):d=x._data(e,"fxshow",{}),o&&(d.hidden=!f),f?x(e).show():u.done(function(){x(e).hide()}),u.done(function(){var t;x._removeData(e,"fxshow");for(t in c)x.style(e,t,c[t])});for(r in c)a=Zn(f?d[r]:0,r,u),r in d||(d[r]=a.start,f&&(a.end=a.start,a.start="width"===r||"height"===r?1:0))}}function rr(e,t,n,r,i){return new rr.prototype.init(e,t,n,r,i)}x.Tween=rr,rr.prototype={constructor:rr,init:function(e,t,n,r,i,o){this.elem=e,this.prop=n,this.easing=i||"swing",this.options=t,this.start=this.now=this.cur(),this.end=r,this.unit=o||(x.cssNumber[n]?"":"px")},cur:function(){var e=rr.propHooks[this.prop];return e&&e.get?e.get(this):rr.propHooks._default.get(this)},run:function(e){var t,n=rr.propHooks[this.prop];return this.pos=t=this.options.duration?x.easing[this.easing](e,this.options.duration*e,0,1,this.options.duration):e,this.now=(this.end-this.start)*t+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),n&&n.set?n.set(this):rr.propHooks._default.set(this),this}},rr.prototype.init.prototype=rr.prototype,rr.propHooks={_default:{get:function(e){var t;return null==e.elem[e.prop]||e.elem.style&&null!=e.elem.style[e.prop]?(t=x.css(e.elem,e.prop,""),t&&"auto"!==t?t:0):e.elem[e.prop]},set:function(e){x.fx.step[e.prop]?x.fx.step[e.prop](e):e.elem.style&&(null!=e.elem.style[x.cssProps[e.prop]]||x.cssHooks[e.prop])?x.style(e.elem,e.prop,e.now+e.unit):e.elem[e.prop]=e.now}}},rr.propHooks.scrollTop=rr.propHooks.scrollLeft={set:function(e){e.elem.nodeType&&e.elem.parentNode&&(e.elem[e.prop]=e.now)}},x.each(["toggle","show","hide"],function(e,t){var n=x.fn[t];x.fn[t]=function(e,r,i){return null==e||"boolean"==typeof e?n.apply(this,arguments):this.animate(ir(t,!0),e,r,i)}}),x.fn.extend({fadeTo:function(e,t,n,r){return this.filter(nn).css("opacity",0).show().end().animate({opacity:t},e,n,r)},animate:function(e,t,n,r){var i=x.isEmptyObject(e),o=x.speed(t,n,r),a=function(){var t=er(this,x.extend({},e),o);(i||x._data(this,"finish"))&&t.stop(!0)};return a.finish=a,i||o.queue===!1?this.each(a):this.queue(o.queue,a)},stop:function(e,n,r){var i=function(e){var t=e.stop;delete e.stop,t(r)};return"string"!=typeof e&&(r=n,n=e,e=t),n&&e!==!1&&this.queue(e||"fx",[]),this.each(function(){var t=!0,n=null!=e&&e+"queueHooks",o=x.timers,a=x._data(this);if(n)a[n]&&a[n].stop&&i(a[n]);else for(n in a)a[n]&&a[n].stop&&Jn.test(n)&&i(a[n]);for(n=o.length;n--;)o[n].elem!==this||null!=e&&o[n].queue!==e||(o[n].anim.stop(r),t=!1,o.splice(n,1));(t||!r)&&x.dequeue(this,e)})},finish:function(e){return e!==!1&&(e=e||"fx"),this.each(function(){var t,n=x._data(this),r=n[e+"queue"],i=n[e+"queueHooks"],o=x.timers,a=r?r.length:0;for(n.finish=!0,x.queue(this,e,[]),i&&i.stop&&i.stop.call(this,!0),t=o.length;t--;)o[t].elem===this&&o[t].queue===e&&(o[t].anim.stop(!0),o.splice(t,1));for(t=0;a>t;t++)r[t]&&r[t].finish&&r[t].finish.call(this);delete n.finish})}});function ir(e,t){var n,r={height:e},i=0;for(t=t?1:0;4>i;i+=2-t)n=Zt[i],r["margin"+n]=r["padding"+n]=e;return t&&(r.opacity=r.width=e),r}x.each({slideDown:ir("show"),slideUp:ir("hide"),slideToggle:ir("toggle"),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(e,t){x.fn[e]=function(e,n,r){return this.animate(t,e,n,r)}}),x.speed=function(e,t,n){var r=e&&"object"==typeof e?x.extend({},e):{complete:n||!n&&t||x.isFunction(e)&&e,duration:e,easing:n&&t||t&&!x.isFunction(t)&&t};return r.duration=x.fx.off?0:"number"==typeof r.duration?r.duration:r.duration in x.fx.speeds?x.fx.speeds[r.duration]:x.fx.speeds._default,(null==r.queue||r.queue===!0)&&(r.queue="fx"),r.old=r.complete,r.complete=function(){x.isFunction(r.old)&&r.old.call(this),r.queue&&x.dequeue(this,r.queue)},r},x.easing={linear:function(e){return e},swing:function(e){return.5-Math.cos(e*Math.PI)/2}},x.timers=[],x.fx=rr.prototype.init,x.fx.tick=function(){var e,n=x.timers,r=0;for(Xn=x.now();n.length>r;r++)e=n[r],e()||n[r]!==e||n.splice(r--,1);n.length||x.fx.stop(),Xn=t},x.fx.timer=function(e){e()&&x.timers.push(e)&&x.fx.start()},x.fx.interval=13,x.fx.start=function(){Un||(Un=setInterval(x.fx.tick,x.fx.interval))},x.fx.stop=function(){clearInterval(Un),Un=null},x.fx.speeds={slow:600,fast:200,_default:400},x.fx.step={},x.expr&&x.expr.filters&&(x.expr.filters.animated=function(e){return x.grep(x.timers,function(t){return e===t.elem}).length}),x.fn.offset=function(e){if(arguments.length)return e===t?this:this.each(function(t){x.offset.setOffset(this,e,t)});var n,r,o={top:0,left:0},a=this[0],s=a&&a.ownerDocument;if(s)return n=s.documentElement,x.contains(n,a)?(typeof a.getBoundingClientRect!==i&&(o=a.getBoundingClientRect()),r=or(s),{top:o.top+(r.pageYOffset||n.scrollTop)-(n.clientTop||0),left:o.left+(r.pageXOffset||n.scrollLeft)-(n.clientLeft||0)}):o},x.offset={setOffset:function(e,t,n){var r=x.css(e,"position");"static"===r&&(e.style.position="relative");var i=x(e),o=i.offset(),a=x.css(e,"top"),s=x.css(e,"left"),l=("absolute"===r||"fixed"===r)&&x.inArray("auto",[a,s])>-1,u={},c={},p,f;l?(c=i.position(),p=c.top,f=c.left):(p=parseFloat(a)||0,f=parseFloat(s)||0),x.isFunction(t)&&(t=t.call(e,n,o)),null!=t.top&&(u.top=t.top-o.top+p),null!=t.left&&(u.left=t.left-o.left+f),"using"in t?t.using.call(e,u):i.css(u)}},x.fn.extend({position:function(){if(this[0]){var e,t,n={top:0,left:0},r=this[0];return"fixed"===x.css(r,"position")?t=r.getBoundingClientRect():(e=this.offsetParent(),t=this.offset(),x.nodeName(e[0],"html")||(n=e.offset()),n.top+=x.css(e[0],"borderTopWidth",!0),n.left+=x.css(e[0],"borderLeftWidth",!0)),{top:t.top-n.top-x.css(r,"marginTop",!0),left:t.left-n.left-x.css(r,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var e=this.offsetParent||s;while(e&&!x.nodeName(e,"html")&&"static"===x.css(e,"position"))e=e.offsetParent;return e||s})}}),x.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(e,n){var r=/Y/.test(n);x.fn[e]=function(i){return x.access(this,function(e,i,o){var a=or(e);return o===t?a?n in a?a[n]:a.document.documentElement[i]:e[i]:(a?a.scrollTo(r?x(a).scrollLeft():o,r?o:x(a).scrollTop()):e[i]=o,t)},e,i,arguments.length,null)}});function or(e){return x.isWindow(e)?e:9===e.nodeType?e.defaultView||e.parentWindow:!1}x.each({Height:"height",Width:"width"},function(e,n){x.each({padding:"inner"+e,content:n,"":"outer"+e},function(r,i){x.fn[i]=function(i,o){var a=arguments.length&&(r||"boolean"!=typeof i),s=r||(i===!0||o===!0?"margin":"border");return x.access(this,function(n,r,i){var o;return x.isWindow(n)?n.document.documentElement["client"+e]:9===n.nodeType?(o=n.documentElement,Math.max(n.body["scroll"+e],o["scroll"+e],n.body["offset"+e],o["offset"+e],o["client"+e])):i===t?x.css(n,r,s):x.style(n,r,i,s)},n,a?i:t,a,null)}})}),x.fn.size=function(){return this.length},x.fn.andSelf=x.fn.addBack,"object"==typeof module&&module&&"object"==typeof module.exports?module.exports=x:(e.jQuery=e.$=x,"function"==typeof define&&define.amd&&define("jquery",[],function(){return x}))})(window);
diff --git a/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/plugin/web_templates/webrunner/testrunner.js b/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/plugin/web_templates/webrunner/testrunner.js
new file mode 100755 (executable)
index 0000000..9b2e69f
--- /dev/null
@@ -0,0 +1,792 @@
+/*
+Copyright (c) 2015 Samsung Electronics Co.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+
+*/
+var STUB_PORT = "";
+var RESOURCE_DIR = "/opt/usr/media";
+$.ajax({
+  url:RESOURCE_DIR + "/tct/portconfigure.json",
+  dataType:"json",
+  data:{},
+  async:false,
+  success:function(data){
+    STUB_PORT = data[0]["STUB_PORT"];
+  }
+});
+
+$(function(){
+ try {
+     // Checks if a device supports bluetooth API or not
+     var shape = tizen.systeminfo.getCapability("http://tizen.org/feature/screen.shape");
+    console.log("Shape = " + shape);
+     //alert(" Shape = " + shape);
+ } catch (error) {
+    // alert("Error name: " + error.name + ", message: " + error.message);
+    console.log("Error name: " + error.name + ", message: " + error.message);
+ }
+
+    if(shape=="circle"){
+       $('body').css('max-width', '100%');
+       $('body').css('max-height', '100%');
+       $('body').css('background-color', 'white');
+       $('body').css('margin-top', '20%');
+       $('body').css('margin-bottom', '20%');
+       $('body').css('margin-left', '20%');
+       $('body').css('margin-right', '20%');
+       }
+});
+(function (window){
+       function TestRunner() {
+               this.start = null;
+               this.ui = null;
+               this.submitResult = null;
+               this.report = function (result, message) {};
+               this.doTest = function () {};
+       }
+
+       TestRunner.prototype = (function () {
+               var index = -1;
+               var Tests = [];
+               var Sets =  {};
+               function newSummary() {
+                       return {"TOTAL": 0,
+                               "PASS" : 0,
+                               "FAIL" : 0,
+                               "BLOCK" : 0,
+                               "NOTRUN" : 0};
+               }
+               function newTestContext() {
+                       return {start_time: null,
+                               prev_uri: "",
+                               uri: "",
+                               sub_index: 0,
+                               onload_delay: 0
+                       };
+               }
+               function getParms () {
+                       var parms = {};
+                       var items = location.search.substring(1).split('&');
+                       for ( var i = 0, max = items.length; i < max; i++) {
+                               var pos = items[i].indexOf('=');
+                               if (pos > 0) {
+                                       var key = items[i].substring(0, pos);
+                                       var val = items[i].substring(pos + 1);
+                                       if (!parms[key]) {
+                                               var rawVal = decodeURI(val);
+                                               if (rawVal.indexOf(',') < 0)
+                                                       parms[key] = rawVal;
+                                               else
+                                                       parms[key] = rawVal.split(',');
+                                       }
+                               } else
+                                  parms[items[i]] = 1;
+                       }
+                       if (!parms.testsuite)
+                               parms.testsuite = 'tests.xml';
+                       return parms;
+               }
+               var parms = getParms();
+               var sum = newSummary();
+               var testContext =  newTestContext();
+               return { 
+                       constructor: TestRunner,
+                       options:  parms,
+                       getTestContext: function (field) {
+                               return testContext[field];
+                       },
+
+                       goNext: function () {
+                               if (Tests.length === 0) return false;
+                               if (index >= Tests.length) {
+                                       index = -1;
+                                       return false;
+                               }
+                               index++;
+                               return true;
+                       },
+       
+                       goPrev: function () {
+                               if (Tests.length === 0) return false;
+                               if (index < 0) {
+                                       index = Tests.length;
+                                       return false;
+                               }
+                               index--;
+                               return true;
+                       },
+
+                       runAll: function () {
+                               testContext = newTestContext();
+                               this.ui.updateView(VIEWFLAGS.add("batch"));
+                               this.ui.updateView(VIEWFLAGS.del("list"));
+                               this.testIndex(-1);     
+                               this.doTest();
+                       },
+       
+                       cleanTests: function () {
+                               Tests = [];
+                       },
+
+                       testIndex: function (ind) {
+                               if (typeof ind === "undefined")
+                                       return index;
+                               index = ind;
+                       },
+
+                       getTest: function (ind) {
+                               if (typeof ind === "undefined")
+                                       ind = index;
+                               return Tests[ind];
+                       },
+
+                       addTest: function (test) {
+                               if (test instanceof Array)
+                                       Tests = Tests.concat(test);
+                               else
+                                       Tests.push(test);
+                       },
+
+                       sumInit: function (num) {
+                               if (typeof num === "undefined")
+                                       num = Tests.length;
+                               sum.TOTAL = sum.NOTRUN = num;
+                               sum.PASS = sum.FAIL = sum.BLOCK = 0;
+                       },
+                       
+                       sumUpdate: function (oldRes, newRes, set) {
+                               if (oldRes !== null) {
+                                       sum[oldRes]--;
+                                       if (set !== null) Sets[set][oldRes]--;
+                               }
+                               if (newRes !== null) {
+                                       sum[newRes]++;
+                                       if (set != null) Sets[set][newRes]++;
+                               }
+                       },
+
+                       checkResult: function (oTestDoc) {
+                               var message = "";
+                               // Handle sub-index test
+                               if (testContext.sub_index > 0) {
+                                       var oRes = $(oTestDoc).find("table#results");
+                                       if (oRes.length == 0)
+                                               return false;
+                                       var ind = testContext.sub_index - 1;
+                                       var $n = $(oRes).find('tbody > tr').eq(ind);
+                                       if ($n.length == 0)
+                                               return false
+                                       var result = $n.children("td:eq(0)").text();
+                                       message = $n.children("td:eq(2)").text();
+                                       this.report(result.toUpperCase(), message);
+                                       return true;
+                               }
+
+                               var oPass = $(oTestDoc).find(".pass");
+                               var oFail = $(oTestDoc).find(".fail");
+                               // All tests pass
+                               if (oPass.length > 0 && oFail.length == 0) {
+                                       this.report('PASS', message);
+                                       return true;
+                               }
+                               // Handle failed tests
+                               if (oFail.length > 0) {
+                                       var oRes = $(oTestDoc).find("table#results");
+                                       $(oRes).find('tr.fail').each(function() {
+                                               message += " *" + $(this).children("td:eq(1)").text() + ": ";
+                                               message += $(this).children("td:eq(2)").text();
+                                       });
+                                       this.report('FAIL', message);
+                                       return true;
+                               }
+                               return false;
+                       },
+
+                       testInfo: function (ind) {
+                               var info = "";
+                               var tc = this.getTest();
+                               if (!tc) return info;
+                               info += "Test   : (" + (index + 1) + "/" + sum.TOTAL + ") ";
+                               info += tc.test_script_entry;
+                               info += "\nPurpose: " +  tc.purpose;
+                               if (tc.pre_condition)
+                                       info += "\nPrecondition: " + tc.pre_condition;
+                               if (tc.steps)
+                                       info += "\n" + tc.steps;
+                               return info;
+                       },
+
+                       getTestCaseUrl: function () {
+                               function getUriField(uri, param) {
+                                       var querys = uri.split("?")
+                                       if (querys.length <= 1)
+                                               return "";
+                                       uri = querys[1];
+                                       var start = uri.indexOf(param);
+                                       if (start == -1)
+                                               return "";
+                                       start += param.length + 1;
+                                       var end = uri.indexOf("&", start);
+                                       if (end == -1)
+                                               return uri.substring(start);
+                                       return uri.substring(start, end);
+                               }
+                               var tc = this.getTest();
+                               if (!tc) return null;
+                               var delay = tc.onload_delay;
+                               if (delay)
+                                       testContext.onload_delay = parseInt(delay) * 1000;
+                               else
+                                       testContext.onload_delay = 5000;
+
+                               var uri = tc.test_script_entry;
+                               if (typeof this.options.testprefix !== "undefined") {
+                                       var pos = uri.indexOf('http://');
+                                       if (pos !== 0)
+                                               uri = this.options.testprefix + uri
+                               }
+                               var val = getUriField(uri, "value");
+                               if (val && tc.execution_type == "auto" && VIEWFLAGS.has("batch")) { // Need sub index in TC
+                                       testContext.sub_index = parseInt(val);
+                                       testContext.uri = uri.split("?")[0];
+                                       if (testContext.uri == testContext.prev_uri)
+                                               return "";
+                               } else {
+                                       testContext.uri = uri;
+                                       testContext.sub_index = 0;
+                               }
+                               testContext.prev_uri = testContext.uri;
+                               testContext.start_time = new Date();
+                               return testContext.uri;
+                       },
+
+                       loadReady: function () {
+                               if (!VIEWFLAGS.has("batch"))
+                                       return;
+                               if (!this.ui.testComplete()){
+                                       if (testContext.onload_delay > 0){
+                                               var tval = 500;
+                                               var self = this;
+                                               setTimeout(function() {self.loadReady();}, tval);
+                                               testContext.onload_delay -= tval;
+                                               return
+                                       }
+                                       this.report("BLOCK", "Timeout");
+                               }
+                               this.doTest();
+                       },
+
+                       getTestSum: function (include_set) {
+                               var sumdata = "<section><h3>Total:" + sum.TOTAL
+                                               + " Pass:<span style='color:green;'>" + sum.PASS
+                                               + "</span> Fail:<span style='color:red;'>" + sum.FAIL
+                                               + "</span> Block:<span style='color:orange;'>" + sum.BLOCK
+                                               + "</span> NotRun:<span style='color:black;'>" + sum.NOTRUN
+                                               + "</span></h3></section>";
+                               if (VIEWFLAGS.has("batch")) {
+                                       var tc = this.getTest();
+                                       if (tc) sumdata += "<h4><span style='background-color: wheat'>(#" + index + ") " + tc.id + "</span></h4>";
+                               }
+
+                               if (include_set) {
+                                       sumdata += "<p><table id='browse'><tr><th>TestSet</th>";
+                                       sumdata += "<th>Total</th><th>Pass</th><th>Fail</th><th>Block</th></tr>";
+                                       $.each(Sets, function (key, val){
+                                               sumdata += "<tr><td>" + key+ "</td>";
+                                               sumdata += "<td style='color:black;'>" + val.TOTAL + "</td>";
+                                               sumdata += "<td style='color:green;'>" + val.PASS + "</td>";
+                                               sumdata += "<td style='color:red;'>" + val.FAIL + "</td>";
+                                               sumdata += "<td style='color:orange;'>" + val.BLOCK + "</td></tr>";
+                                       });
+                                       sumdata += "</table>";
+                               }
+                               return sumdata;
+                       },
+
+                       getBrowseInfo: function () {
+                               var failList = passList = blockList = notrunList = "";
+                               function createTestList(tc, color, ind) {
+                                       var mtag = (tc.execution_type === "manual") ? "(M)" : ""; 
+                                       return "<li>" + mtag + "<a rel='" + ind + "' href='' style ='color:" + color + ";'>" + tc.id + "</a>" + "</li>";
+                               }
+                               Sets = {};
+                               $.each(Tests, function (ind ,val) {
+                                       if (this.set === null)
+                                               this.set = "default";
+                                       if (typeof Sets[this.set] === "undefined")
+                                               Sets[this.set] = newSummary(); 
+                                       Sets[this.set][this.result]++;
+                                       Sets[this.set]["TOTAL"]++;
+                                       if (this.result == "FAIL")
+                                               failList += createTestList(this, "red", ind);
+                                       if (this.result == "PASS")
+                                               passList += createTestList(this, "green", ind);
+                                       if (this.result == "BLOCK")
+                                               blockList += createTestList(this, "orange", ind);
+                                       if (this.result == "NOTRUN")
+                                               notrunList += createTestList(this, "black", ind);
+                               });
+                               var data = "<html><head><style>ul li {padding-bottom:0.8em;font-size: 1.3em;}";
+                               data += "html{font-family:DejaVu Sans, Bitstream Vera Sans, Arial, Sans;}</style></head><body>";
+                               if (notrunList)
+                                       data += "<section><h3>Notruns</h3><ul>" + notrunList + "</ul></section>";
+                               if (failList)
+                                       data += "<section><h3 style='color: red;'>Fails</h3><ul>" + failList + "</ul></section>";
+                               if (blockList)
+                                       data += "<section><h3 style='color: orange;'>Blocks</h3><ul>" + blockList + "</ul></section>";
+                               if (passList)
+                                       data += "<section><h3 style='color: green'>Passes</h3><ul>" + passList + "</ul></section>";
+                               data += "</body></html>";
+                               return data;
+                       },
+
+                       TestCase: function () {
+                               return {
+                                       id: null,
+                                       test_script_entry: null,
+                                       execution_type: "manual",
+                                       result: "NOTRUN",
+                                       purpose: "",
+                                       set: null,
+                                       pre_condition: "",
+                                       onload_delay: 0,
+                                       steps: "",
+                                       data: null};
+                       }
+               };
+          }());
+       // Standalone test runner
+       var master_runner = new TestRunner();
+       master_runner.start = function (ui) {
+               function filter(xml, self) {
+                       var set_ind = 0;
+                       var manuals = [];
+                       $(xml).find("set").each(function () {
+                               var setname = $(this).attr("name");
+                               if (!setname)
+                                       setname = "set" + set_ind;
+                               $(this).find("testcase").each(function () {
+                                       var v = $(this).attr('execution_type');
+                                       if (self.options.execution_type && v != self.options.execution_type
+                                                       && $.inArray(v, self.options.execution_type) < 0) {
+                                               $(this).remove();
+                                               return;
+                                       }
+                                       v = $(this).attr('priority');
+                                       if (self.options.priority && v != self.options.priority
+                                                       && $.inArray(v, self.options.priority) < 0){
+                                               $(this).remove();
+                                               return;
+                                       }
+                                       var test = self.TestCase();
+                                       test.id = $(this).attr("id");
+                                       test.execution_type = $(this).attr("execution_type");
+                                       test.test_script_entry = $(this).find("test_script_entry").text();
+                                       test.purpose = $(this).attr("purpose");
+                                       test.pre_condition = $(this).find("pre_condition").text();
+                                       test.onload_delay = $(this).attr("onload_delay");
+                                       test.result = "NOTRUN";
+                                       test.set = setname;
+                                       test.data = this;
+                                       if (test.execution_type === "auto")
+                                               self.addTest(test);
+                                       else
+                                               manuals.push(test);
+                               });
+                               set_ind++;
+                       });
+                       self.addTest(manuals);
+               }
+
+               var self = this;
+               ui.bind(self);
+               $.get(self.options.testsuite, null, function (xml) {
+                       self.internal.xmldoc = xml;
+                       filter(xml, self);
+                       self.sumInit();
+                       setTimeout(function () {
+                               self.ui.browse();
+                               setTimeout(function () {
+                                       if (self.options.autorun)
+                                               self.runAll();
+                               }, 2000);
+                       }, 100);
+               }, "xml");
+       };
+
+       master_runner.doTest = function () {
+               var self = this, tc = null;
+               while (self.goNext()) {
+                       tc = self.getTest();
+                       if (!tc || tc.execution_type === "manual")
+                               break;
+                       self.ui.updateTestInfo(self.testInfo(), null, null);
+                       self.ui.runTest(self.getTestCaseUrl());
+                       return;
+               }
+               if (self.options.autorun) {
+                       self.submitResult();
+                       close_window();
+                       return;
+               }
+               this.ui.updateView(VIEWFLAGS.del("batch"));
+               if (!tc) {
+                       setTimeout(function () {self.ui.browse();}, 500);
+                       return;
+               }
+               this.ui.updateTest();   
+       };
+
+       master_runner.report = function (result, log) {
+               var tc = this.getTest();
+               if (!tc) return;
+               var oldresult = tc.result;
+               this.sumUpdate(oldresult, result, tc.set);
+               tc.result = result;
+               $(tc.data).find('result_info').remove();
+               $(tc.data).attr('result', result);
+               var doc = $.parseXML("<result_info><actual_result>" + result +
+                                  "</actual_result><start>" + this.getTestContext("start_time") +
+                                  "</start><end>" + new Date() + "</end><stdout>" +
+                                  escape_html(log) + "</stdout></result_info>");
+               $(tc.data).append(doc.documentElement);
+               if (VIEWFLAGS.has("batch")) result = null;
+               this.ui.updateTestInfo(null, this.getTestSum(false), result);
+       };
+
+       master_runner.submitResult = function () {
+               var xmldoc = this.internal.xmldoc;
+               var contents = (new XMLSerializer()).serializeToString(xmldoc);
+               if (window.opener) window.opener.postMessage(contents, "*");
+       };
+
+       master_runner.internal = {xmldoc: null};
+
+       // Controlled test runner
+       var slave_runner = new TestRunner();
+       slave_runner.start = function (ui) {
+               function sync_session_id() {
+                       $.get(SERVER + "/init_session_id?session_id="
+                                         + self.internal.session_id);
+               }
+               var self = this;
+               self.internal.session_id = Math.round(Math.random() * 10000);
+               sync_session_id();
+               var next_step = self.internal.get_json("ask_next_step");
+               if (!next_step || next_step.step != "continue")
+                        return false;
+               ui.bind(self);
+               var f = function () {
+                       var p = self.internal.get_json("check_execution_progress");
+                       if (p) self.sumInit(parseInt(p.total));
+                       self.doTest();
+               };
+               self.ui.updateView(VIEWFLAGS.add("batch"));
+               self.ui.updateView(VIEWFLAGS.del("list"));
+               setTimeout(f, 1000);
+               return true;
+       };
+
+       slave_runner.doTest = function () {
+               var self = this;
+               if (self.internal.stage > 0) {
+                       self.ui.updateView(VIEWFLAGS.del("batch"));
+                       self.goNext();
+                       self.ui.updateTest();
+                       return;
+               }
+               var next_step = self.internal.get_json("ask_next_step");
+               if (next_step && next_step.step == "continue") {
+                       var task = self.internal.get_json("auto_test_task");
+                       if (task === null) {
+                               print_error("ask_test_task", "Fail get task");
+                       } else if (task.invalid === 0) {
+                               print_error("ask_test_task", "Invalid session");
+                       } else if (task.stop === 0) {
+                               print_error("ask_test_task", "close window");
+                       } else if (task.none !== 0) { //handle auto test
+                               var test = self.TestCase();
+                               test.id = task.case_id;
+                               test.onload_delay = task.onload_delay;
+                               test.test_script_entry = task.entry;
+                               test.execution_type = "auto";
+                               test.purpose = task.purpose;
+                               test.pre_condition = task.pre_condition;
+                               self.addTest(test);
+                               self.goNext();
+                               self.ui.updateTestInfo(self.testInfo(), null, null);
+                               self.ui.runTest(self.getTestCaseUrl());
+                               return;
+                       } else {  //handle manual test
+                               self.ui.updateView(VIEWFLAGS.del("batch"));
+                               self.internal.stage = 1;
+                               var mtask = self.internal.get_json("manual_cases");
+                               if (mtask && mtask.none != 0) {
+                                       self.cleanTests();
+                                       for (var i = 0, max = mtask.length; i < max; i++) {
+                                               var test = self.TestCase();
+                                               test.id = mtask[i].case_id;
+                                               test.test_script_entry = mtask[i].entry;
+                                               test.purpose = mtask[i].purpose;
+                                               test.pre_condition = mtask[i].pre_condition;
+                                               test.result = "NOTRUN";
+                                               test.execution_type = "manual";
+                                               test.index = i;
+                                               var steps = "";
+                                               $(mtask[i].steps).each(function () {
+                                                       steps += "Step-" + this.order + "\t: " + this.step_desc + "\n";
+                                                       steps += "Expect\t: " + this.expected + "\n";
+                                               });
+                                               test.steps = steps;
+                                               self.addTest(test);
+                                       }
+                                       self.ui.updateTest(-1);
+                                       self.sumInit();
+                                       self.ui.browse();
+                               } else
+                                       close_window();
+                               return;
+                       }
+               }
+               close_window();
+       };
+
+       slave_runner.report = function(result, log) {
+               var tc = this.getTest();
+               var oldresult;
+               if (this.internal.stage > 0) {
+                       this.internal.post_json("commit_manual_result",
+                               {"case_id": tc.id, "result": result});
+                       oldresult = tc.result
+                       tc.result = result;
+               } else {
+                       this.internal.post_json("commit_result",
+                               { "case_id" : tc.id,
+                                 "result" : result,
+                                 "msg" : "[Message]" + log,
+                                 "session_id" : this.internal.session_id});
+                       oldresult = "NOTRUN";
+               }
+               this.sumUpdate(oldresult, result, null);
+               if (VIEWFLAGS.has("batch")) result = null;
+               this.ui.updateTestInfo(null, this.getTestSum(false), result);
+       };
+
+       slave_runner.submitResult = function () {
+               $.get(SERVER + "/generate_xml");
+       };
+
+       slave_runner.internal = {
+               session_id: null,
+               stage: 0,
+               get_json: function (name) {
+                       var jsondata = null;
+                       $.getJSON(SERVER + "/" + name + "?session_id="
+                                + this.session_id, function(data) {
+                                        jsondata = data;});
+                       return jsondata; },
+               post_json: function (name, d) {
+                  $.post(SERVER + "/" + name, d, null, "json");
+               }
+       };
+
+       var i_ui = (function () {
+               var testinfo = $("#testinfo").get(0);
+               var frmTest = $("#frmTest").get(0);
+               var textTest  = $("#textTest").get(0);
+               var btnPass = $("#btnPass").get(0);
+               var btnFail = $("#btnFail").get(0);
+               var btnBlock = $("#btnBlock").get(0);
+               var btnDone = $("#btnDone").get(0);
+               var btnNext = $("#btnNext").get(0);
+               var btnPrev = $("#btnPrev").get(0);
+               var btnRun      = $("#btnRun").get(0);
+               var divSum = $("#divSum").get(0);
+               var btnList = $("#btnList").get(0);
+               var runner = null;
+               var listmode = null;
+               var nextTest = function () {
+                       runner.goNext();
+                       selectTest();
+               };
+
+               var prevTest = function() {
+                       runner.goPrev();
+                       selectTest();
+               };
+
+               var selectResult = function() {
+                       runner.report(this.value, "");
+               };
+
+               var selectTest = function () {
+                       frmTest.src = "";
+                       var tc = runner.getTest();
+                       if (!tc) {
+                               if (runner.testIndex() === -1)
+                                       textTest.value = "---Begin---";
+                               else
+                                       textTest.value = "---End---";
+                               changeColor("NOTRUN");
+                               return;
+                       }
+                       testinfo.value = runner.testInfo();
+                       $(divSum).html(runner.getTestSum(false));
+                       textTest.value = ((tc.execution_type === "manual") ? "(M)" : "") + tc.id;
+                       changeColor(tc.result);
+               };
+
+               function changeColor(result) {
+                       if (result === "PASS")
+                               $(textTest).css("backgroundColor", "lightgreen");
+                       else if (result === "FAIL")
+                               $(textTest).css("backgroundColor", "tomato");
+                       else if (result === "BLOCK")
+                               $(textTest).css("backgroundColor", "yellow");
+                       else
+                               $(textTest).css("backgroundColor", "white");
+               }
+
+               return {
+                       bind: function (r) {
+                               var self = this;
+                               r.ui = self;
+                               runner = r;
+                               $(btnPass).on("click", selectResult);
+                               $(btnFail).on("click", selectResult);
+                               $(btnBlock).on("click", selectResult);
+                               $(btnNext).on("click", nextTest);
+                               $(btnPrev).on("click", prevTest);
+                               $(btnRun).on("click",  function () {
+                                       if (VIEWFLAGS.has("list")) {
+                                               runner.runAll();
+                                       } else 
+                                               self.runTest(runner.getTestCaseUrl());
+                               });
+                               $(frmTest).on("load",  function () {runner.loadReady();});
+                               $(btnDone).on("click", function () {
+                                       runner.submitResult();
+                                       close_window();
+                               });
+                               $(btnList).on("click", function () {
+                                       frmTest.src = "";
+                                       //self.updateTest(-1);
+                                       setTimeout(function () {self.browse();}, 300);
+                               });
+                               frmTest.height = $(window).height();
+                       },
+               
+                       browse: function () {
+                               var tdoc = frmTest.contentWindow.document;
+                               tdoc.open("text/html", "replace");
+                               tdoc.writeln(runner.getBrowseInfo());
+                               var self = this;
+                               $(tdoc).find("section ul li>a").on("click", function (e) {
+                                       var ind = parseInt($(this).attr("rel"));
+                                       self.updateView(VIEWFLAGS.del("list")); 
+                                       self.updateTest(ind);
+                                       window.scrollTo(0, 0);
+                                       e.preventDefault();
+                               });
+                               $(divSum).html(runner.getTestSum(true));
+                               self.updateView(VIEWFLAGS.add("list")); 
+                       },
+       
+                       updateTest: function (ind) {
+                               if (typeof ind !== "undefined") runner.testIndex(ind);
+                               selectTest();
+                       },
+
+                       updateView: function (flags) {
+                               if (flags & VIEWFLAGS.flags.list) {
+                                       $(".listmode").show();
+                                       $(".singlemode").hide();
+                               } else {
+                                       $(".listmode").hide();
+                                       $(".singlemode").show();
+                               }
+                               if (flags & VIEWFLAGS.flags.batch)
+                                       $(".batchmode").hide();
+                               else
+                                       $(".batchmode").show();
+                       },
+
+                       testComplete: function () {
+                               return runner.checkResult(frmTest.contentWindow.document);
+                       },
+                       runTest: function (uri) {
+                               if (uri === null) return;
+                               if (uri)
+                                       frmTest.src = uri;
+                               else
+                                       runner.loadReady();
+                               
+                       },
+
+                       updateTestInfo: function (info, sum, result) {
+                               if (info !== null)
+                                       testinfo.value = info;
+                               if (sum !== null)
+                                       $(divSum).html(sum);
+                               if (result !== null)
+                                       changeColor(result);
+                       },
+          };
+       } ());
+
+       function escape_html(s) {
+               return s.replace(/\&/g, "&amp;").replace(/</g, "&lt;").replace(/"/g,
+                       "&quot;").replace(/'/g, "&#39;");
+       }
+
+       function print_error(command, message) {
+               console.warn("Command -" + command + ": " + message);
+       }
+
+       function close_window() {
+               setTimeout("window.open('','_self','');window.close()", 1000);
+       }
+
+       function pre_init() {
+               var runner_ok = false;
+               $.get(SERVER + "/check_server", function () {
+                       runner_ok = slave_runner.start(i_ui);
+               });
+               if (!runner_ok)
+                       master_runner.start(i_ui);
+       }
+       var SERVER = "http://127.0.0.1:"+STUB_PORT;
+       var VIEWFLAGS = { val: 0,
+               flags: {list: 1, batch: 2},
+               add: function (f) { this.val |= this.flags[f]; return this.val},
+               del: function (f) { this.val &= ~this.flags[f]; return this.val},
+               has: function (f) { return this.val & this.flags[f];},
+       };
+       $.ajaxSetup({ async: false});
+       $(window).on("ready", pre_init);
+})(window);
diff --git a/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/plugin/web_templates/{TESTSUITE_NAME}.spec b/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/plugin/web_templates/{TESTSUITE_NAME}.spec
new file mode 100755 (executable)
index 0000000..9da7f3a
--- /dev/null
@@ -0,0 +1,22 @@
+name=$(basename $(pwd))
+main_version="2.4"
+release=""
+version="$main_version"
+appname=$(echo $name|sed 's/-/_/g')
+
+# set value "1" if this suite need to sign,otherwise set "0" #
+sign="1"
+
+# set value "1" if this suite need to keep src_file,otherwise set "0" #
+src_file="0"
+
+# specified files to be kept in whitelist #
+whitelist="
+inst.sh
+tests.xml
+tests.full.xml
+COPYING
+LICENSE.Apache-2.0
+LICENSE.CC-BY-3.0
+NOTICE
+mediasrc"
diff --git a/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/sdb/sdb-32 b/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/sdb/sdb-32
new file mode 100755 (executable)
index 0000000..a3f6c27
Binary files /dev/null and b/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/sdb/sdb-32 differ
diff --git a/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/sdb/sdb-32.exe b/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/sdb/sdb-32.exe
new file mode 100755 (executable)
index 0000000..b522f56
Binary files /dev/null and b/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/sdb/sdb-32.exe differ
diff --git a/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/sdb/sdb-64 b/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/sdb/sdb-64
new file mode 100755 (executable)
index 0000000..5ae10e3
Binary files /dev/null and b/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/sdb/sdb-64 differ
diff --git a/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/sdb/sdb-64.exe b/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/sdb/sdb-64.exe
new file mode 100755 (executable)
index 0000000..b522f56
Binary files /dev/null and b/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/sdb/sdb-64.exe differ
diff --git a/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/shell/CONFIG b/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/shell/CONFIG
new file mode 100755 (executable)
index 0000000..3ec9518
--- /dev/null
@@ -0,0 +1,26 @@
+[TCTSHELL]
+WRT_LAUNCHR_CMD = WRTLauncher
+TCT_SHELL_HOME  = /opt/tools/shell/
+TCT_PLAN_FOLDER = /opt/tools/shell/plan/
+
+[DISTRIBUTE_MODE]
+DEVICE_EXCEPTIONS =
+#Devices to ignore for distribute mode.
+#example: 
+#       example_device1
+#      example_device2
+       DEVICE1
+       DEVICE2
+#      0000d81400006200
+
+[Device]
+DEVICE_TMP_FOLDER = /tmp/
+DEVICE_TESTS_FILE = /opt/usr/media/tct/opt/%s/tests.xml
+DEVICE_CAPABILITY_PATH = /opt/usr/media/Documents/tct/capability.xml
+DEVICE_BUILD_INFO_PATH = /opt/usr/media/Documents/tct/buildinfo.xml
+DEVICE_DEFAULT_CONF_PATH = /opt/usr/media/tct/opt/tct-testconfig/tct-testconfig.ini
+DEVICE_DEFAULT_ISON_CONF_PATH = /opt/usr/media/tct/preconfigure.json
+DEVICE_PORT_JSON_CONF_PATH = /opt/usr/media/tct/portconfigure.json
+DEVICE_PRECONFIGURE_FILE_PATH = /opt/usr/media/Documents/tct/pre_configure.conf
+
+
diff --git a/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/shell/LICENSE b/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/shell/LICENSE
new file mode 100755 (executable)
index 0000000..6d45519
--- /dev/null
@@ -0,0 +1,340 @@
+                   GNU GENERAL PUBLIC LICENSE
+                      Version 2, June 1991
+
+ Copyright (C) 1989, 1991 Free Software Foundation, Inc.
+                       51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+                           Preamble
+
+  The licenses for most software are designed to take away your
+freedom to share and change it.  By contrast, the GNU General Public
+License is intended to guarantee your freedom to share and change free
+software--to make sure the software is free for all its users.  This
+General Public License applies to most of the Free Software
+Foundation's software and to any other program whose authors commit to
+using it.  (Some other Free Software Foundation software is covered by
+the GNU Library General Public License instead.)  You can apply it to
+your programs, too.
+
+  When we speak of free software, we are referring to freedom, not
+price.  Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+this service if you wish), that you receive source code or can get it
+if you want it, that you can change the software or use pieces of it
+in new free programs; and that you know you can do these things.
+
+  To protect your rights, we need to make restrictions that forbid
+anyone to deny you these rights or to ask you to surrender the rights.
+These restrictions translate to certain responsibilities for you if you
+distribute copies of the software, or if you modify it.
+
+  For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must give the recipients all the rights that
+you have.  You must make sure that they, too, receive or can get the
+source code.  And you must show them these terms so they know their
+rights.
+
+  We protect your rights with two steps: (1) copyright the software, and
+(2) offer you this license which gives you legal permission to copy,
+distribute and/or modify the software.
+
+  Also, for each author's protection and ours, we want to make certain
+that everyone understands that there is no warranty for this free
+software.  If the software is modified by someone else and passed on, we
+want its recipients to know that what they have is not the original, so
+that any problems introduced by others will not reflect on the original
+authors' reputations.
+
+  Finally, any free program is threatened constantly by software
+patents.  We wish to avoid the danger that redistributors of a free
+program will individually obtain patent licenses, in effect making the
+program proprietary.  To prevent this, we have made it clear that any
+patent must be licensed for everyone's free use or not licensed at all.
+
+  The precise terms and conditions for copying, distribution and
+modification follow.
+
+                   GNU GENERAL PUBLIC LICENSE
+   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+  0. This License applies to any program or other work which contains
+a notice placed by the copyright holder saying it may be distributed
+under the terms of this General Public License.  The "Program", below,
+refers to any such program or work, and a "work based on the Program"
+means either the Program or any derivative work under copyright law:
+that is to say, a work containing the Program or a portion of it,
+either verbatim or with modifications and/or translated into another
+language.  (Hereinafter, translation is included without limitation in
+the term "modification".)  Each licensee is addressed as "you".
+
+Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope.  The act of
+running the Program is not restricted, and the output from the Program
+is covered only if its contents constitute a work based on the
+Program (independent of having been made by running the Program).
+Whether that is true depends on what the Program does.
+
+  1. You may copy and distribute verbatim copies of the Program's
+source code as you receive it, in any medium, provided that you
+conspicuously and appropriately publish on each copy an appropriate
+copyright notice and disclaimer of warranty; keep intact all the
+notices that refer to this License and to the absence of any warranty;
+and give any other recipients of the Program a copy of this License
+along with the Program.
+
+You may charge a fee for the physical act of transferring a copy, and
+you may at your option offer warranty protection in exchange for a fee.
+
+  2. You may modify your copy or copies of the Program or any portion
+of it, thus forming a work based on the Program, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+    a) You must cause the modified files to carry prominent notices
+    stating that you changed the files and the date of any change.
+
+    b) You must cause any work that you distribute or publish, that in
+    whole or in part contains or is derived from the Program or any
+    part thereof, to be licensed as a whole at no charge to all third
+    parties under the terms of this License.
+
+    c) If the modified program normally reads commands interactively
+    when run, you must cause it, when started running for such
+    interactive use in the most ordinary way, to print or display an
+    announcement including an appropriate copyright notice and a
+    notice that there is no warranty (or else, saying that you provide
+    a warranty) and that users may redistribute the program under
+    these conditions, and telling the user how to view a copy of this
+    License.  (Exception: if the Program itself is interactive but
+    does not normally print such an announcement, your work based on
+    the Program is not required to print an announcement.)
+
+These requirements apply to the modified work as a whole.  If
+identifiable sections of that work are not derived from the Program,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works.  But when you
+distribute the same sections as part of a whole which is a work based
+on the Program, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Program.
+
+In addition, mere aggregation of another work not based on the Program
+with the Program (or with a work based on the Program) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+  3. You may copy and distribute the Program (or a work based on it,
+under Section 2) in object code or executable form under the terms of
+Sections 1 and 2 above provided that you also do one of the following:
+
+    a) Accompany it with the complete corresponding machine-readable
+    source code, which must be distributed under the terms of Sections
+    1 and 2 above on a medium customarily used for software interchange; or,
+
+    b) Accompany it with a written offer, valid for at least three
+    years, to give any third party, for a charge no more than your
+    cost of physically performing source distribution, a complete
+    machine-readable copy of the corresponding source code, to be
+    distributed under the terms of Sections 1 and 2 above on a medium
+    customarily used for software interchange; or,
+
+    c) Accompany it with the information you received as to the offer
+    to distribute corresponding source code.  (This alternative is
+    allowed only for noncommercial distribution and only if you
+    received the program in object code or executable form with such
+    an offer, in accord with Subsection b above.)
+
+The source code for a work means the preferred form of the work for
+making modifications to it.  For an executable work, complete source
+code means all the source code for all modules it contains, plus any
+associated interface definition files, plus the scripts used to
+control compilation and installation of the executable.  However, as a
+special exception, the source code distributed need not include
+anything that is normally distributed (in either source or binary
+form) with the major components (compiler, kernel, and so on) of the
+operating system on which the executable runs, unless that component
+itself accompanies the executable.
+
+If distribution of executable or object code is made by offering
+access to copy from a designated place, then offering equivalent
+access to copy the source code from the same place counts as
+distribution of the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+  4. You may not copy, modify, sublicense, or distribute the Program
+except as expressly provided under this License.  Any attempt
+otherwise to copy, modify, sublicense or distribute the Program is
+void, and will automatically terminate your rights under this License.
+However, parties who have received copies, or rights, from you under
+this License will not have their licenses terminated so long as such
+parties remain in full compliance.
+
+  5. You are not required to accept this License, since you have not
+signed it.  However, nothing else grants you permission to modify or
+distribute the Program or its derivative works.  These actions are
+prohibited by law if you do not accept this License.  Therefore, by
+modifying or distributing the Program (or any work based on the
+Program), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Program or works based on it.
+
+  6. Each time you redistribute the Program (or any work based on the
+Program), the recipient automatically receives a license from the
+original licensor to copy, distribute or modify the Program subject to
+these terms and conditions.  You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties to
+this License.
+
+  7. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License.  If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Program at all.  For example, if a patent
+license would not permit royalty-free redistribution of the Program by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Program.
+
+If any portion of this section is held invalid or unenforceable under
+any particular circumstance, the balance of the section is intended to
+apply and the section as a whole is intended to apply in other
+circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system, which is
+implemented by public license practices.  Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+  8. If the distribution and/or use of the Program is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Program under this License
+may add an explicit geographical distribution limitation excluding
+those countries, so that distribution is permitted only in or among
+countries not thus excluded.  In such case, this License incorporates
+the limitation as if written in the body of this License.
+
+  9. The Free Software Foundation may publish revised and/or new versions
+of the General Public License from time to time.  Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+Each version is given a distinguishing version number.  If the Program
+specifies a version number of this License which applies to it and "any
+later version", you have the option of following the terms and conditions
+either of that version or of any later version published by the Free
+Software Foundation.  If the Program does not specify a version number of
+this License, you may choose any version ever published by the Free Software
+Foundation.
+
+  10. If you wish to incorporate parts of the Program into other free
+programs whose distribution conditions are different, write to the author
+to ask for permission.  For software which is copyrighted by the Free
+Software Foundation, write to the Free Software Foundation; we sometimes
+make exceptions for this.  Our decision will be guided by the two goals
+of preserving the free status of all derivatives of our free software and
+of promoting the sharing and reuse of software generally.
+
+                           NO WARRANTY
+
+  11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
+FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW.  EXCEPT WHEN
+OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
+PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
+OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.  THE ENTIRE RISK AS
+TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.  SHOULD THE
+PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
+REPAIR OR CORRECTION.
+
+  12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
+REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
+INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
+OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
+TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
+YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
+PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGES.
+
+                    END OF TERMS AND CONDITIONS
+
+           How to Apply These Terms to Your New Programs
+
+  If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+  To do so, attach the following notices to the program.  It is safest
+to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+    <one line to give the program's name and a brief idea of what it does.>
+    Copyright (C) <year>  <name of author>
+
+    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 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+
+
+Also add information on how to contact you by electronic and paper mail.
+
+If the program is interactive, make it output a short notice like this
+when it starts in an interactive mode:
+
+    Gnomovision version 69, Copyright (C) year name of author
+    Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+    This is free software, and you are welcome to redistribute it
+    under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License.  Of course, the commands you use may
+be called something other than `show w' and `show c'; they could even be
+mouse-clicks or menu items--whatever suits your program.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the program, if
+necessary.  Here is a sample; alter the names:
+
+  Yoyodyne, Inc., hereby disclaims all copyright interest in the program
+  `Gnomovision' (which makes passes at compilers) written by James Hacker.
+
+  <signature of Ty Coon>, 1 April 1989
+  Ty Coon, President of Vice
+
+This General Public License does not permit incorporating your program into
+proprietary programs.  If your program is a subroutine library, you may
+consider it more useful to permit linking proprietary applications with the
+library.  If this is what you want to do, use the GNU Library General
+Public License instead of this License.
diff --git a/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/shell/README b/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/shell/README
new file mode 100755 (executable)
index 0000000..e845566
--- /dev/null
@@ -0,0 +1 @@
+README
diff --git a/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/shell/VERSION b/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/shell/VERSION
new file mode 100755 (executable)
index 0000000..9a77768
--- /dev/null
@@ -0,0 +1,6 @@
+[public_version]
+version=TCT_2.4
+[internal_version]
+version=TCT_2.4
+[public_shell_version]
+version=TCTSHELL_3.1.0-20160418
diff --git a/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/shell/debian/changelog b/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/shell/debian/changelog
new file mode 100755 (executable)
index 0000000..2d20c21
--- /dev/null
@@ -0,0 +1,5 @@
+tct-shell (1.0.16) unstable; urgency=low
+
+  * Packaged for Ubuntu
+
+ -- Ed Bartosh <eduard.bartosh@intel.com>  Mon, 06 May 2013 14:37:15 +0300
diff --git a/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/shell/debian/compat b/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/shell/debian/compat
new file mode 100755 (executable)
index 0000000..45a4fb7
--- /dev/null
@@ -0,0 +1 @@
+8
diff --git a/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/shell/debian/control b/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/shell/debian/control
new file mode 100755 (executable)
index 0000000..7f37172
--- /dev/null
@@ -0,0 +1,13 @@
+Source: tct-shell
+Section: utils
+Priority: standard
+Maintainer: Lei Yang <lei.a.yang@intel.com>
+Build-Depends: debhelper (>= 8.0.0), python-setuptools
+Standards-Version: 3.9.4
+Package: tct-shell
+Architecture: all
+Depends: ${shlibs:Depends}, ${misc:Depends}, ${python:Depends}
+Description: Console tool for Tizen Compliance Test
+ This tool provides an alternative way to execute TCT with testkit-lite
+ when testkit-manager is not available
diff --git a/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/shell/debian/copyright b/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/shell/debian/copyright
new file mode 100755 (executable)
index 0000000..1af0f16
--- /dev/null
@@ -0,0 +1,26 @@
+Format: http://dep.debian.net/deps/dep5
+Source: https://github.com/testkit/testkit-manager
+
+Files: *
+Copyright: 2012-2013 Intel Corp. 
+License: GPL-2.0
+
+Files: debian/*
+Copyright: 2012-2013 Intel Corp.
+License: GPL-2.0
+
+License: GPL-2.0
+ 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 of the License
+ .
+ This package is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ GNU General Public License for more details.
+ .
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+ .
+ On Debian systems, the complete text of the GNU General
+ Public License version 3 can be found in "/usr/share/common-licenses/GPL-3".
diff --git a/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/shell/debian/docs b/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/shell/debian/docs
new file mode 100755 (executable)
index 0000000..8ffb463
--- /dev/null
@@ -0,0 +1,2 @@
+README
+CONFIG
diff --git a/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/shell/debian/files b/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/shell/debian/files
new file mode 100755 (executable)
index 0000000..7441a9c
--- /dev/null
@@ -0,0 +1 @@
+tct-shell_1.0.16_all.deb utils standard
diff --git a/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/shell/debian/postinst b/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/shell/debian/postinst
new file mode 100755 (executable)
index 0000000..cb17476
--- /dev/null
@@ -0,0 +1,6 @@
+#!/bin/sh
+
+# Set permissions
+chmod -R ugo+rwx /opt/tools/shell
+
+#DEBHELPER#
diff --git a/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/shell/debian/rules b/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/shell/debian/rules
new file mode 100755 (executable)
index 0000000..2d33f6a
--- /dev/null
@@ -0,0 +1,4 @@
+#!/usr/bin/make -f
+
+%:
+       dh $@
diff --git a/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/shell/packaging/Makefile b/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/shell/packaging/Makefile
new file mode 100755 (executable)
index 0000000..f0ec281
--- /dev/null
@@ -0,0 +1,20 @@
+PKG_NAME := tct-shell
+SPECFILE = $(addsuffix .spec, $(PKG_NAME))
+PKG_VERSION := $(shell grep '^Version: ' $(SPECFILE)|awk '{print $$2}')
+
+TARBALL := $(PKG_NAME)_$(PKG_VERSION).tar.gz
+
+dsc: tarball
+       $(eval MD5=$(shell md5sum $(TARBALL) | sed "s/  / $(shell stat -c '%s' $(TARBALL)) /"))
+       @sed  -i 's/^Version:.*/Version: $(PKG_VERSION)/' $(PKG_NAME).dsc
+       @sed  -i 's/ [a-f0-9]\+ [0-9]\+ $(PKG_NAME).*tar.*/ $(MD5)/' $(PKG_NAME).dsc
+
+tarball:
+       @cd "$$(git rev-parse --show-toplevel)" \
+               && git archive --prefix $(PKG_NAME)-$(PKG_VERSION)/ HEAD \
+               | gzip > "$(CURDIR)/$(TARBALL)"
+
+clean:
+       @rm -f $(PKG_NAME)*.tar.gz
+
+all: clean tarball dsc
diff --git a/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/shell/packaging/tct-shell.dsc b/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/shell/packaging/tct-shell.dsc
new file mode 100755 (executable)
index 0000000..b57a386
--- /dev/null
@@ -0,0 +1,11 @@
+Source: tct-shell
+Section: utils
+Priority: standard
+Maintainer: Shaofeng <shaofeng.tang@intel.com>
+Build-Depends: debhelper (>= 8.0.0), python-setuptools, python-support, tree
+Standards-Version: 3.9.2
+Homepage: https://github.com/testkit/
+Version: 1.0.1
+Files:
+ f64f26693160cf59cdae21e8961cf986 15593 tct-shell_1.0.1.tar.gz
+
diff --git a/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/shell/packaging/tct-shell.spec b/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/shell/packaging/tct-shell.spec
new file mode 100755 (executable)
index 0000000..6aa483f
--- /dev/null
@@ -0,0 +1,49 @@
+Summary: TCT-Shell
+Name: tct-shell
+Version: 1.0.15
+Release: 1
+License: GPLv2
+Group: Applications/System
+Source: %name-%version.tar.gz
+BuildRoot: %_tmppath/%name-%version-buildroot
+Requires: python
+
+
+%description
+TCT-Shell is a wrapper pf testkit-lite. provide an alternative way to execute TCT with testkit-lite when testkit-manager is not available
+Provide the following functions:
+1. List available test packages. 
+2. Install/remove test packages on target device according to user's option 
+3. Trigger testing in 3 ways: through test plan, through package, rerun failed test cases. 
+4. Show test result summary in visual way.
+
+%prep
+%setup -q
+
+%build
+./autogen
+./configure
+make
+
+%install
+[ "\$RPM_BUILD_ROOT" != "/" ] && rm -rf "\$RPM_BUILD_ROOT"
+make install DESTDIR=$RPM_BUILD_ROOT
+
+%clean
+
+%post
+# Set permissions
+chmod ugo+rwx /opt/tools/shell
+
+%files
+/usr/lib/python2.7/dist-packages/tctshell/*
+/opt/tools/shell
+/opt/tools/shell/plan
+/opt/tools/shell/style
+/opt/tools/tct-shell
+/opt/tools/tct-plan-generator
+
+%post
+chmod -R 777 /opt/tools/shell
+
+%changelog
diff --git a/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/shell/plan/CSharp_Full_mobile_3.0.xml b/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/shell/plan/CSharp_Full_mobile_3.0.xml
new file mode 100755 (executable)
index 0000000..7f7e69f
--- /dev/null
@@ -0,0 +1,245 @@
+<?xml version="1.0" encoding="UTF-8"?>\r
+<ns3:testplan xmlns:ns3="http://www.example.org/plan/" xmlns="" name="CSharp_Full_mobile_3.0" profile="mobile">\r
+  <execute_type>Auto</execute_type>\r
+  <suite name="Tizen.Applications.Manual.Tests" category="C# Device APIs">\r
+    <auto_tcn>0</auto_tcn>\r
+    <manual_tcn>24</manual_tcn>\r
+    <total_tcn>24</total_tcn>\r
+    <pkg_name>mobile/Tizen.Applications.Manual.Tests-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="Tizen.Applications.Tests" category="C# Device APIs">\r
+    <auto_tcn>129</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>129</total_tcn>\r
+    <pkg_name>mobile/Tizen.Applications.Tests-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="Tizen.Badge.Tests" category="C# Device APIs">\r
+    <auto_tcn>21</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>21</total_tcn>\r
+    <pkg_name>mobile/Tizen.Badge.Tests-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="Tizen.Bluetooth.Manual.Tests" category="C# Device APIs">\r
+    <auto_tcn>0</auto_tcn>\r
+    <manual_tcn>120</manual_tcn>\r
+    <total_tcn>120</total_tcn>\r
+    <pkg_name>mobile/Tizen.Bluetooth.Manual.Tests-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="Tizen.Bluetooth.Tests" category="C# Device APIs">\r
+    <auto_tcn>120</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>120</total_tcn>\r
+    <pkg_name>mobile/Tizen.Bluetooth.Tests-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="Tizen.Device.Manual.Tests" category="C# Device APIs">\r
+    <auto_tcn>0</auto_tcn>\r
+    <manual_tcn>16</manual_tcn>\r
+    <total_tcn>16</total_tcn>\r
+    <pkg_name>mobile/Tizen.Device.Manual.Tests-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="Tizen.Device.Tests" category="C# Device APIs">\r
+    <auto_tcn>22</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>22</total_tcn>\r
+    <pkg_name>mobile/Tizen.Device.Tests-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="Tizen.Download.Manual.Tests" category="C# Device APIs">\r
+    <auto_tcn>0</auto_tcn>\r
+    <manual_tcn>1</manual_tcn>\r
+    <total_tcn>1</total_tcn>\r
+    <pkg_name>mobile/Tizen.Download.Manual.Tests-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="Tizen.Download.Tests" category="C# Device APIs">\r
+    <auto_tcn>53</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>53</total_tcn>\r
+    <pkg_name>mobile/Tizen.Download.Tests-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="Tizen.Feedback.Tests" category="C# Device APIs">\r
+    <auto_tcn>6</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>6</total_tcn>\r
+    <pkg_name>mobile/Tizen.Feedback.Tests-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="Tizen.Location.Manual.Tests" category="C# Device APIs">\r
+    <auto_tcn>0</auto_tcn>\r
+    <manual_tcn>2</manual_tcn>\r
+    <total_tcn>2</total_tcn>\r
+    <pkg_name>mobile/Tizen.Location.Manual.Tests-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="Tizen.Location.Tests" category="C# Device APIs">\r
+    <auto_tcn>102</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>102</total_tcn>\r
+    <pkg_name>mobile/Tizen.Location.Tests-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="Tizen.Mediacontent.Manual.Tests" category="C# Device APIs">\r
+    <auto_tcn>0</auto_tcn>\r
+    <manual_tcn>1</manual_tcn>\r
+    <total_tcn>1</total_tcn>\r
+    <pkg_name>mobile/Tizen.Mediacontent.Manual.Tests-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="Tizen.Mediacontent.Tests" category="C# Device APIs">\r
+    <auto_tcn>228</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>228</total_tcn>\r
+    <pkg_name>mobile/Tizen.Mediacontent.Tests-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="Tizen.Mime.Tests" category="C# Device APIs">\r
+    <auto_tcn>4</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>4</total_tcn>\r
+    <pkg_name>mobile/Tizen.Mime.Tests-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="Tizen.Multimedia.Manual.Tests" category="C# Device APIs">\r
+    <auto_tcn>0</auto_tcn>\r
+    <manual_tcn>50</manual_tcn>\r
+    <total_tcn>50</total_tcn>\r
+    <pkg_name>mobile/Tizen.Multimedia.Manual.Tests-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="Tizen.Multimedia.Tests" category="C# Device APIs">\r
+    <auto_tcn>257</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>257</total_tcn>\r
+    <pkg_name>mobile/Tizen.Multimedia.Tests-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="Tizen.Network.Tests" category="C# Device APIs">\r
+    <auto_tcn>106</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>106</total_tcn>\r
+    <pkg_name>mobile/Tizen.Network.Tests-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="Tizen.Nfc.Tests" category="C# Device APIs">\r
+    <auto_tcn>50</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>50</total_tcn>\r
+    <pkg_name>mobile/Tizen.Nfc.Tests-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="Tizen.Notifications.Manual.Tests" category="C# Device APIs">\r
+    <auto_tcn>0</auto_tcn>\r
+    <manual_tcn>32</manual_tcn>\r
+    <total_tcn>32</total_tcn>\r
+    <pkg_name>mobile/Tizen.Notifications.Manual.Tests-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="Tizen.Notifications.Tests" category="C# Device APIs">\r
+    <auto_tcn>74</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>74</total_tcn>\r
+    <pkg_name>mobile/Tizen.Notifications.Tests-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="Tizen.Packagemanager.Tests" category="C# Device APIs">\r
+    <auto_tcn>59</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>59</total_tcn>\r
+    <pkg_name>mobile/Tizen.Packagemanager.Tests-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="Tizen.Privilege.Tests" category="C# Device APIs">\r
+    <auto_tcn>19</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>19</total_tcn>\r
+    <pkg_name>mobile/Tizen.Privilege.Tests-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="Tizen.Push.Tests" category="C# Device APIs">\r
+    <auto_tcn>22</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>22</total_tcn>\r
+    <pkg_name>mobile/Tizen.Push.Tests-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="Tizen.Runtimeinformation.Manual.Tests" category="C# Device APIs">\r
+    <auto_tcn>0</auto_tcn>\r
+    <manual_tcn>33</manual_tcn>\r
+    <total_tcn>33</total_tcn>\r
+    <pkg_name>mobile/Tizen.Runtimeinformation.Manual.Tests-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="Tizen.Runtimeinformation.Tests" category="C# Device APIs">\r
+    <auto_tcn>45</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>45</total_tcn>\r
+    <pkg_name>mobile/Tizen.Runtimeinformation.Tests-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="Tizen.Sample.Manual.Tests" category="C# Device APIs">\r
+    <auto_tcn>0</auto_tcn>\r
+    <manual_tcn>8</manual_tcn>\r
+    <total_tcn>8</total_tcn>\r
+    <pkg_name>mobile/Tizen.Sample.Manual.Tests-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="Tizen.Sensor.Manual.Tests" category="C# Device APIs">\r
+    <auto_tcn>0</auto_tcn>\r
+    <manual_tcn>90</manual_tcn>\r
+    <total_tcn>90</total_tcn>\r
+    <pkg_name>mobile/Tizen.Sensor.Manual.Tests-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="Tizen.Sensor.Tests" category="C# Device APIs">\r
+    <auto_tcn>276</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>276</total_tcn>\r
+    <pkg_name>mobile/Tizen.Sensor.Tests-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="Tizen.Smartcard.Tests" category="C# Device APIs">\r
+    <auto_tcn>11</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>11</total_tcn>\r
+    <pkg_name>mobile/Tizen.Smartcard.Tests-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="Tizen.System.Manual.Tests" category="C# Device APIs">\r
+    <auto_tcn>0</auto_tcn>\r
+    <manual_tcn>1</manual_tcn>\r
+    <total_tcn>1</total_tcn>\r
+    <pkg_name>mobile/Tizen.System.Manual.Tests-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="Tizen.System.Tests" category="C# Device APIs">\r
+    <auto_tcn>29</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>29</total_tcn>\r
+    <pkg_name>mobile/Tizen.System.Tests-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="Tizen.Systemsettings.Manual.Tests" category="C# Device APIs">\r
+    <auto_tcn>0</auto_tcn>\r
+    <manual_tcn>26</manual_tcn>\r
+    <total_tcn>26</total_tcn>\r
+    <pkg_name>mobile/Tizen.Systemsettings.Manual.Tests-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="Tizen.Systemsettings.Tests" category="C# Device APIs">\r
+    <auto_tcn>114</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>114</total_tcn>\r
+    <pkg_name>mobile/Tizen.Systemsettings.Tests-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="Tizen.Tizen.Manual.Tests" category="C# Device APIs">\r
+    <auto_tcn>0</auto_tcn>\r
+    <manual_tcn>6</manual_tcn>\r
+    <total_tcn>6</total_tcn>\r
+    <pkg_name>mobile/Tizen.Tizen.Manual.Tests-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="Tizen.Tizen.Tests" category="C# Device APIs">\r
+    <auto_tcn>0</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>0</total_tcn>\r
+    <pkg_name>mobile/Tizen.Tizen.Tests-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="Tizen.Tracer.Tests" category="C# Device APIs">\r
+    <auto_tcn>5</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>5</total_tcn>\r
+    <pkg_name>mobile/Tizen.Tracer.Tests-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="Tizen.UI.Manual.Tests" category="C# Device APIs">\r
+    <auto_tcn>0</auto_tcn>\r
+    <manual_tcn>324</manual_tcn>\r
+    <total_tcn>324</total_tcn>\r
+    <pkg_name>mobile/Tizen.UI.Manual.Tests-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="Tizen.UI.Tests" category="C# Device APIs">\r
+    <auto_tcn>1019</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>1019</total_tcn>\r
+    <pkg_name>mobile/Tizen.UI.Tests-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="Tizen.WidgetControl.Tests" category="C# Device APIs">\r
+    <auto_tcn>8</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>8</total_tcn>\r
+    <pkg_name>mobile/Tizen.WidgetControl.Tests-3.0.zip</pkg_name>\r
+  </suite>\r
+</ns3:testplan>\r
+\r
diff --git a/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/shell/plan/Native_Full_mobile_2.4.xml b/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/shell/plan/Native_Full_mobile_2.4.xml
new file mode 100755 (executable)
index 0000000..23e1367
--- /dev/null
@@ -0,0 +1,1163 @@
+<?xml version="1.0" encoding="UTF-8"?>\r
+<ns3:testplan xmlns:ns3="http://www.example.org/plan/" xmlns="" name="Native_Full_mobile_2.4" profile="mobile">\r
+  <execute_type>Auto</execute_type>\r
+  <suite name="tct-connection-native-utc" category=" UnitTestCases ">\r
+    <auto_tcn>172</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>172</total_tcn>\r
+    <pkg_name>mobile/tct-connection-native-utc-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-webkit2-native-utc" category=" UnitTestCases ">\r
+    <auto_tcn>255</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>255</total_tcn>\r
+    <pkg_name>mobile/tct-webkit2-native-utc-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-privilege-info-native-utc" category=" UnitTestCases ">\r
+    <auto_tcn>14</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>14</total_tcn>\r
+    <pkg_name>mobile/tct-privilege-info-native-utc-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-dali-adaptor-native-utc" category=" UnitTestCases ">\r
+    <auto_tcn>98</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>98</total_tcn>\r
+    <pkg_name>mobile/tct-dali-adaptor-native-utc-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-wav-player-native-itc" category=" IntegrationTestCases ">\r
+    <auto_tcn>1</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>1</total_tcn>\r
+    <pkg_name>mobile/tct-wav-player-native-itc-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-native-common-native-itc" category=" IntegrationTestCases ">\r
+    <auto_tcn>2</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>2</total_tcn>\r
+    <pkg_name>mobile/tct-native-common-native-itc-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-widget_viewer_evas-native-utc" category=" UnitTestCases ">\r
+    <auto_tcn>49</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>49</total_tcn>\r
+    <pkg_name>mobile/tct-widget_viewer_evas-native-utc-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-capi-ui-inputmethod-manager-native-utc" category=" UnitTestCases ">\r
+    <auto_tcn>7</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>7</total_tcn>\r
+    <pkg_name>mobile/tct-capi-ui-inputmethod-manager-native-utc-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-filesystem-permission-native-ctc" category=" CompatibilityTestCases ">\r
+    <auto_tcn>32</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>32</total_tcn>\r
+    <pkg_name>mobile/tct-filesystem-permission-native-ctc-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-messages-native-itc" category=" IntegrationTestCases ">\r
+    <auto_tcn>18</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>18</total_tcn>\r
+    <pkg_name>mobile/tct-messages-native-itc-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-badge-native-utc" category=" UnitTestCases ">\r
+    <auto_tcn>25</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>25</total_tcn>\r
+    <pkg_name>mobile/tct-badge-native-utc-2.4.zip</pkg_name>\r
+  </suite>\r
+  <!--\r
+  <suite name="tct-wifi-direct-native-utc" category=" UnitTestCases ">\r
+    <auto_tcn>140</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>140</total_tcn>\r
+    <pkg_name>mobile/tct-wifi-direct-native-utc-2.4.zip</pkg_name>\r
+  </suite>\r
+  -->\r
+  <suite name="tct-widget_viewer_evas-native-itc" category=" IntegrationTestCases ">\r
+    <auto_tcn>23</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>23</total_tcn>\r
+    <pkg_name>mobile/tct-widget_viewer_evas-native-itc-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-capi-message-port-native-itc" category=" IntegrationTestCases ">\r
+    <auto_tcn>6</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>6</total_tcn>\r
+    <pkg_name>mobile/tct-capi-message-port-native-itc-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-system-settings-native-itc" category=" IntegrationTestCases ">\r
+    <auto_tcn>4</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>4</total_tcn>\r
+    <pkg_name>mobile/tct-system-settings-native-itc-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-messages-native-utc" category=" UnitTestCases ">\r
+    <auto_tcn>85</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>85</total_tcn>\r
+    <pkg_name>mobile/tct-messages-native-utc-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-capi-media-tool-native-utc" category=" UnitTestCases ">\r
+    <auto_tcn>109</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>109</total_tcn>\r
+    <pkg_name>mobile/tct-capi-media-tool-native-utc-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-push-native-itc" category=" IntegrationTestCases ">\r
+    <auto_tcn>12</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>12</total_tcn>\r
+    <pkg_name>mobile/tct-push-native-itc-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-sensor-native-ctc" category=" CompatibilityTestCases ">\r
+    <auto_tcn>9</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>9</total_tcn>\r
+    <pkg_name>mobile/tct-sensor-native-ctc-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-appcore-agent-native-itc" category=" IntegrationTestCases ">\r
+    <auto_tcn>2</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>2</total_tcn>\r
+    <pkg_name>mobile/tct-appcore-agent-native-itc-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-radio-native-utc" category=" UnitTestCases ">\r
+    <auto_tcn>40</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>40</total_tcn>\r
+    <pkg_name>mobile/tct-radio-native-utc-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-location-manager-native-utc" category=" UnitTestCases ">\r
+    <auto_tcn>129</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>129</total_tcn>\r
+    <pkg_name>mobile/tct-location-manager-native-utc-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-camera-native-utc" category=" UnitTestCases ">\r
+    <auto_tcn>348</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>348</total_tcn>\r
+    <pkg_name>mobile/tct-camera-native-utc-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-thumbnail-util-native-itc" category=" IntegrationTestCases ">\r
+    <auto_tcn>6</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>6</total_tcn>\r
+    <pkg_name>mobile/tct-thumbnail-util-native-itc-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-cairo-native-utc" category=" UnitTestCases ">\r
+    <auto_tcn>24</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>24</total_tcn>\r
+    <pkg_name>mobile/tct-cairo-native-utc-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-tbm-native-utc" category=" UnitTestCases ">\r
+    <auto_tcn>17</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>17</total_tcn>\r
+    <pkg_name>mobile/tct-tbm-native-utc-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-libstorage-native-ctc" category=" CompatibilityTestCases ">\r
+    <auto_tcn>2</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>2</total_tcn>\r
+    <pkg_name>mobile/tct-libstorage-native-ctc-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-accounts-svc-native-itc" category=" IntegrationTestCases ">\r
+    <auto_tcn>48</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>48</total_tcn>\r
+    <pkg_name>mobile/tct-accounts-svc-native-itc-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-telephony-native-utc" category=" UnitTestCases ">\r
+    <auto_tcn>159</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>159</total_tcn>\r
+    <pkg_name>mobile/tct-telephony-native-utc-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-phonenumber-utils-native-utc" category=" UnitTestCases ">\r
+    <auto_tcn>4</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>4</total_tcn>\r
+    <pkg_name>mobile/tct-phonenumber-utils-native-utc-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-native-common-native-utc" category=" UnitTestCases ">\r
+    <auto_tcn>5</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>5</total_tcn>\r
+    <pkg_name>mobile/tct-native-common-native-utc-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-capi-media-vision-native-utc" category=" UnitTestCases ">\r
+    <auto_tcn>55</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>55</total_tcn>\r
+    <pkg_name>mobile/tct-capi-media-vision-native-utc-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-base-utils-native-itc" category=" IntegrationTestCases ">\r
+    <auto_tcn>288</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>288</total_tcn>\r
+    <pkg_name>mobile/tct-base-utils-native-itc-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-appcore-widget-native-itc" category=" IntegrationTestCases ">\r
+    <auto_tcn>4</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>4</total_tcn>\r
+    <pkg_name>mobile/tct-appcore-widget-native-itc-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-metadata-editor-native-utc" category=" UnitTestCases ">\r
+    <auto_tcn>18</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>18</total_tcn>\r
+    <pkg_name>mobile/tct-metadata-editor-native-utc-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-mediacodec-native-utc" category=" UnitTestCases ">\r
+    <auto_tcn>49</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>49</total_tcn>\r
+    <pkg_name>mobile/tct-mediacodec-native-utc-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-calendar-service2-native-itc" category=" IntegrationTestCases ">\r
+    <auto_tcn>58</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>58</total_tcn>\r
+    <pkg_name>mobile/tct-calendar-service2-native-itc-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-capi-maps-service-native-utc" category=" UnitTestCases ">\r
+    <auto_tcn>296</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>296</total_tcn>\r
+    <pkg_name>mobile/tct-capi-maps-service-native-utc-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-mediacodec-native-itc" category=" IntegrationTestCases ">\r
+    <auto_tcn>17</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>17</total_tcn>\r
+    <pkg_name>mobile/tct-mediacodec-native-itc-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-key-manager-native-utc" category=" UnitTestCases ">\r
+    <auto_tcn>103</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>103</total_tcn>\r
+    <pkg_name>mobile/tct-key-manager-native-utc-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-media-content-native-utc" category=" UnitTestCases ">\r
+    <auto_tcn>475</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>475</total_tcn>\r
+    <pkg_name>mobile/tct-media-content-native-utc-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-opengl-native-ctc" category=" CompatibilityTestCases ">\r
+    <auto_tcn>3</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>3</total_tcn>\r
+    <pkg_name>mobile/tct-opengl-native-ctc-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-sound-manager-native-itc" category=" IntegrationTestCases ">\r
+    <auto_tcn>21</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>21</total_tcn>\r
+    <pkg_name>mobile/tct-sound-manager-native-itc-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-tone-player-native-utc" category=" UnitTestCases ">\r
+    <auto_tcn>5</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>5</total_tcn>\r
+    <pkg_name>mobile/tct-tone-player-native-utc-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-media-controller-native-utc" category=" UnitTestCases ">\r
+    <auto_tcn>85</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>85</total_tcn>\r
+    <pkg_name>mobile/tct-media-controller-native-utc-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-service-adaptor-client-native-utc" category=" UnitTestCases ">\r
+    <auto_tcn>127</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>127</total_tcn>\r
+    <pkg_name>mobile/tct-service-adaptor-client-native-utc-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-appcore-widget-native-utc" category=" UnitTestCases ">\r
+    <auto_tcn>20</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>20</total_tcn>\r
+    <pkg_name>mobile/tct-appcore-widget-native-utc-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-voice-control-elm-native-itc" category=" IntegrationTestCases ">\r
+    <auto_tcn>13</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>13</total_tcn>\r
+    <pkg_name>mobile/tct-voice-control-elm-native-itc-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-efl-ext-native-itc" category=" IntegrationTestCases ">\r
+    <auto_tcn>4</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>4</total_tcn>\r
+    <pkg_name>mobile/tct-efl-ext-native-itc-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-metadata-extractor-native-utc" category=" UnitTestCases ">\r
+    <auto_tcn>23</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>23</total_tcn>\r
+    <pkg_name>mobile/tct-metadata-extractor-native-utc-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-camera-native-itc" category=" IntegrationTestCases ">\r
+    <auto_tcn>78</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>78</total_tcn>\r
+    <pkg_name>mobile/tct-camera-native-itc-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-motion-native-itc" category=" IntegrationTestCases ">\r
+    <auto_tcn>8</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>8</total_tcn>\r
+    <pkg_name>mobile/tct-motion-native-itc-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-screen-mirroring-native-itc" category=" IntegrationTestCases ">\r
+    <auto_tcn>5</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>5</total_tcn>\r
+    <pkg_name>mobile/tct-screen-mirroring-native-itc-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-video-util-native-itc" category=" IntegrationTestCases ">\r
+    <auto_tcn>14</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>14</total_tcn>\r
+    <pkg_name>mobile/tct-video-util-native-itc-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-push-native-utc" category=" UnitTestCases ">\r
+    <auto_tcn>28</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>28</total_tcn>\r
+    <pkg_name>mobile/tct-push-native-utc-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-dlog-native-utc" category=" UnitTestCases ">\r
+    <auto_tcn>4</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>4</total_tcn>\r
+    <pkg_name>mobile/tct-dlog-native-utc-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-geofence-manager-native-itc" category=" IntegrationTestCases ">\r
+    <auto_tcn>25</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>25</total_tcn>\r
+    <pkg_name>mobile/tct-geofence-manager-native-itc-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-app-manager-native-itc" category=" IntegrationTestCases ">\r
+    <auto_tcn>38</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>38</total_tcn>\r
+    <pkg_name>mobile/tct-app-manager-native-itc-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-audio-io-native-utc" category=" UnitTestCases ">\r
+    <auto_tcn>72</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>72</total_tcn>\r
+    <pkg_name>mobile/tct-audio-io-native-utc-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-package-manager-native-utc" category=" UnitTestCases ">\r
+    <auto_tcn>96</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>96</total_tcn>\r
+    <pkg_name>mobile/tct-package-manager-native-utc-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-capi-maps-service-native-itc" category=" IntegrationTestCases ">\r
+    <auto_tcn>57</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>57</total_tcn>\r
+    <pkg_name>mobile/tct-capi-maps-service-native-itc-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-player-native-ctc" category=" CompatibilityTestCases ">\r
+    <auto_tcn>4</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>4</total_tcn>\r
+    <pkg_name>mobile/tct-player-native-ctc-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-dali-core-native-itc" category=" IntegrationTestCases ">\r
+    <auto_tcn>864</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>864</total_tcn>\r
+    <pkg_name>mobile/tct-dali-core-native-itc-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-sync-manager-native-utc" category=" UnitTestCases ">\r
+    <auto_tcn>28</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>28</total_tcn>\r
+    <pkg_name>mobile/tct-sync-manager-native-utc-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-efl-util-native-itc" category=" IntegrationTestCases ">\r
+    <auto_tcn>5</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>5</total_tcn>\r
+    <pkg_name>mobile/tct-efl-util-native-itc-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-efl-ext-native-utc" category=" UnitTestCases ">\r
+    <auto_tcn>24</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>24</total_tcn>\r
+    <pkg_name>mobile/tct-efl-ext-native-utc-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-wifi-native-utc" category=" UnitTestCases ">\r
+    <auto_tcn>202</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>202</total_tcn>\r
+    <pkg_name>mobile/tct-wifi-native-utc-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-sensor-native-utc" category=" UnitTestCases ">\r
+    <auto_tcn>60</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>60</total_tcn>\r
+    <pkg_name>mobile/tct-sensor-native-utc-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-video-util-native-ctc" category=" CompatibilityTestCases ">\r
+    <auto_tcn>6</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>6</total_tcn>\r
+    <pkg_name>mobile/tct-video-util-native-ctc-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-bundle-native-utc" category=" UnitTestCases ">\r
+    <auto_tcn>53</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>53</total_tcn>\r
+    <pkg_name>mobile/tct-bundle-native-utc-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-bundle-native-itc" category=" IntegrationTestCases ">\r
+    <auto_tcn>9</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>9</total_tcn>\r
+    <pkg_name>mobile/tct-bundle-native-itc-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-libstorage-native-utc" category=" UnitTestCases ">\r
+    <auto_tcn>31</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>31</total_tcn>\r
+    <pkg_name>mobile/tct-libstorage-native-utc-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-widget_service-native-utc" category=" UnitTestCases ">\r
+    <auto_tcn>46</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>46</total_tcn>\r
+    <pkg_name>mobile/tct-widget_service-native-utc-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-mime-type-native-utc" category=" UnitTestCases ">\r
+    <auto_tcn>15</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>15</total_tcn>\r
+    <pkg_name>mobile/tct-mime-type-native-utc-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-url-download-native-itc" category=" IntegrationTestCases ">\r
+    <auto_tcn>27</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>27</total_tcn>\r
+    <pkg_name>mobile/tct-url-download-native-itc-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-capi-ui-inputmethod-native-utc" category=" UnitTestCases ">\r
+    <auto_tcn>99</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>99</total_tcn>\r
+    <pkg_name>mobile/tct-capi-ui-inputmethod-native-utc-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-eom-native-itc" category=" IntegrationTestCases ">\r
+    <auto_tcn>13</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>13</total_tcn>\r
+    <pkg_name>mobile/tct-eom-native-itc-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-contacts-service2-native-utc" category=" UnitTestCases ">\r
+    <auto_tcn>198</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>198</total_tcn>\r
+    <pkg_name>mobile/tct-contacts-service2-native-utc-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-application-native-itc" category=" IntegrationTestCases ">\r
+    <auto_tcn>55</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>55</total_tcn>\r
+    <pkg_name>mobile/tct-application-native-itc-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-camera-native-ctc" category=" CompatibilityTestCases ">\r
+    <auto_tcn>1</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>1</total_tcn>\r
+    <pkg_name>mobile/tct-camera-native-ctc-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-player-native-utc" category=" UnitTestCases ">\r
+    <auto_tcn>191</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>191</total_tcn>\r
+    <pkg_name>mobile/tct-player-native-utc-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-minicontrol-native-utc" category=" UnitTestCases ">\r
+    <auto_tcn>11</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>11</total_tcn>\r
+    <pkg_name>mobile/tct-minicontrol-native-utc-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-voice-control-elm-native-utc" category=" UnitTestCases ">\r
+    <auto_tcn>71</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>71</total_tcn>\r
+    <pkg_name>mobile/tct-voice-control-elm-native-utc-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-appcore-agent-native-utc" category=" UnitTestCases ">\r
+    <auto_tcn>11</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>11</total_tcn>\r
+    <pkg_name>mobile/tct-appcore-agent-native-utc-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-system-info-native-utc" category=" UnitTestCases ">\r
+    <auto_tcn>12</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>12</total_tcn>\r
+    <pkg_name>mobile/tct-system-info-native-utc-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-device-native-ctc" category=" CompatibilityTestCases ">\r
+    <auto_tcn>1</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>1</total_tcn>\r
+    <pkg_name>mobile/tct-device-native-ctc-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-context-native-utc" category=" UnitTestCases ">\r
+    <auto_tcn>82</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>82</total_tcn>\r
+    <pkg_name>mobile/tct-context-native-utc-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-application-native-utc" category=" UnitTestCases ">\r
+    <auto_tcn>269</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>269</total_tcn>\r
+    <pkg_name>mobile/tct-application-native-utc-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-radio-native-itc" category=" IntegrationTestCases ">\r
+    <auto_tcn>12</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>12</total_tcn>\r
+    <pkg_name>mobile/tct-radio-native-itc-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-data-control-native-utc" category=" UnitTestCases ">\r
+    <auto_tcn>89</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>89</total_tcn>\r
+    <pkg_name>mobile/tct-data-control-native-utc-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-email-native-utc" category=" UnitTestCases ">\r
+    <auto_tcn>24</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>24</total_tcn>\r
+    <pkg_name>mobile/tct-email-native-utc-2.4.zip</pkg_name>\r
+  </suite>\r
+  <!--\r
+  <suite name="tct-wifi-direct-native-itc" category=" IntegrationTestCases ">\r
+    <auto_tcn>38</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>38</total_tcn>\r
+    <pkg_name>mobile/tct-wifi-direct-native-itc-2.4.zip</pkg_name>\r
+  </suite>\r
+  -->\r
+  <suite name="tct-tts-native-utc" category=" UnitTestCases ">\r
+    <auto_tcn>104</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>104</total_tcn>\r
+    <pkg_name>mobile/tct-tts-native-utc-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-system-settings-native-utc" category=" UnitTestCases ">\r
+    <auto_tcn>78</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>78</total_tcn>\r
+    <pkg_name>mobile/tct-system-settings-native-utc-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-metadata-extractor-native-itc" category=" IntegrationTestCases ">\r
+    <auto_tcn>8</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>8</total_tcn>\r
+    <pkg_name>mobile/tct-metadata-extractor-native-itc-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-device-native-utc" category=" UnitTestCases ">\r
+    <auto_tcn>59</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>59</total_tcn>\r
+    <pkg_name>mobile/tct-device-native-utc-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-capi-message-port-native-utc" category=" UnitTestCases ">\r
+    <auto_tcn>52</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>52</total_tcn>\r
+    <pkg_name>mobile/tct-capi-message-port-native-utc-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-video-util-native-utc" category=" UnitTestCases ">\r
+    <auto_tcn>43</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>43</total_tcn>\r
+    <pkg_name>mobile/tct-video-util-native-utc-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-service-adaptor-client-native-itc" category=" IntegrationTestCases ">\r
+    <auto_tcn>24</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>24</total_tcn>\r
+    <pkg_name>mobile/tct-service-adaptor-client-native-itc-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-sound-manager-native-ctc" category=" CompatibilityTestCases ">\r
+    <auto_tcn>1</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>1</total_tcn>\r
+    <pkg_name>mobile/tct-sound-manager-native-ctc-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-cairo-native-itc" category=" IntegrationTestCases ">\r
+    <auto_tcn>9</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>9</total_tcn>\r
+    <pkg_name>mobile/tct-cairo-native-itc-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-image-util-native-utc" category=" UnitTestCases ">\r
+    <auto_tcn>95</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>95</total_tcn>\r
+    <pkg_name>mobile/tct-image-util-native-utc-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-calendar-service2-native-utc" category=" UnitTestCases ">\r
+    <auto_tcn>149</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>149</total_tcn>\r
+    <pkg_name>mobile/tct-calendar-service2-native-utc-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-capi-ui-inputmethod-manager-native-itc" category=" IntegrationTestCases ">\r
+    <auto_tcn>2</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>2</total_tcn>\r
+    <pkg_name>mobile/tct-capi-ui-inputmethod-manager-native-itc-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-shortcut-native-itc" category=" IntegrationTestCases ">\r
+    <auto_tcn>4</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>4</total_tcn>\r
+    <pkg_name>mobile/tct-shortcut-native-itc-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-geofence-manager-native-utc" category=" UnitTestCases ">\r
+    <auto_tcn>134</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>134</total_tcn>\r
+    <pkg_name>mobile/tct-geofence-manager-native-utc-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-media-key-native-itc" category=" IntegrationTestCases ">\r
+    <auto_tcn>1</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>1</total_tcn>\r
+    <pkg_name>mobile/tct-media-key-native-itc-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-trace-native-utc" category=" UnitTestCases ">\r
+    <auto_tcn>5</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>5</total_tcn>\r
+    <pkg_name>mobile/tct-trace-native-utc-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-nfc-native-utc" category=" UnitTestCases ">\r
+    <auto_tcn>157</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>157</total_tcn>\r
+    <pkg_name>mobile/tct-nfc-native-utc-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-dlog-native-itc" category=" IntegrationTestCases ">\r
+    <auto_tcn>2</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>2</total_tcn>\r
+    <pkg_name>mobile/tct-dlog-native-itc-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-platform-permission-native-ctc" category=" CompatibilityTestCases ">\r
+    <auto_tcn>36</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>36</total_tcn>\r
+    <pkg_name>mobile/tct-platform-permission-native-ctc-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-metadata-editor-native-itc" category=" IntegrationTestCases ">\r
+    <auto_tcn>7</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>7</total_tcn>\r
+    <pkg_name>mobile/tct-metadata-editor-native-itc-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-runtime-info-native-itc" category=" IntegrationTestCases ">\r
+    <auto_tcn>7</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>7</total_tcn>\r
+    <pkg_name>mobile/tct-runtime-info-native-itc-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-libstorage64-native-utc" category=" UnitTestCases ">\r
+    <auto_tcn>31</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>31</total_tcn>\r
+    <pkg_name>mobile/tct-libstorage64-native-utc-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-efl-util-native-utc" category=" UnitTestCases ">\r
+    <auto_tcn>45</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>45</total_tcn>\r
+    <pkg_name>mobile/tct-efl-util-native-utc-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-dali-toolkit-native-itc" category=" IntegrationTestCases ">\r
+    <auto_tcn>231</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>231</total_tcn>\r
+    <pkg_name>mobile/tct-dali-toolkit-native-itc-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-minicontrol-native-itc" category=" IntegrationTestCases ">\r
+    <auto_tcn>5</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>5</total_tcn>\r
+    <pkg_name>mobile/tct-minicontrol-native-itc-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-audio-io-native-ctc" category=" CompatibilityTestCases ">\r
+    <auto_tcn>1</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>1</total_tcn>\r
+    <pkg_name>mobile/tct-audio-io-native-ctc-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-device-native-itc" category=" IntegrationTestCases ">\r
+    <auto_tcn>16</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>16</total_tcn>\r
+    <pkg_name>mobile/tct-device-native-itc-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-base-utils-native-utc" category=" UnitTestCases ">\r
+    <auto_tcn>885</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>885</total_tcn>\r
+    <pkg_name>mobile/tct-base-utils-native-utc-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-oauth2-native-itc" category=" IntegrationTestCases ">\r
+    <auto_tcn>18</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>18</total_tcn>\r
+    <pkg_name>mobile/tct-oauth2-native-itc-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-dali-toolkit-native-utc" category=" UnitTestCases ">\r
+    <auto_tcn>414</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>414</total_tcn>\r
+    <pkg_name>mobile/tct-dali-toolkit-native-utc-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-recorder-native-itc" category=" IntegrationTestCases ">\r
+    <auto_tcn>33</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>33</total_tcn>\r
+    <pkg_name>mobile/tct-recorder-native-itc-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-mediacodec-native-ctc" category=" CompatibilityTestCases ">\r
+    <auto_tcn>1</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>1</total_tcn>\r
+    <pkg_name>mobile/tct-mediacodec-native-ctc-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-player-native-itc" category=" IntegrationTestCases ">\r
+    <auto_tcn>54</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>54</total_tcn>\r
+    <pkg_name>mobile/tct-player-native-itc-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-media-controller-native-itc" category=" IntegrationTestCases ">\r
+    <auto_tcn>28</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>28</total_tcn>\r
+    <pkg_name>mobile/tct-media-controller-native-itc-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-mime-type-native-itc" category=" IntegrationTestCases ">\r
+    <auto_tcn>2</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>2</total_tcn>\r
+    <pkg_name>mobile/tct-mime-type-native-itc-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-system-info-native-ctc" category=" CompatibilityTestCases ">\r
+    <auto_tcn>4</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>4</total_tcn>\r
+    <pkg_name>mobile/tct-system-info-native-ctc-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-thumbnail-util-native-utc" category=" UnitTestCases ">\r
+    <auto_tcn>14</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>14</total_tcn>\r
+    <pkg_name>mobile/tct-thumbnail-util-native-utc-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-key-manager-native-itc" category=" IntegrationTestCases ">\r
+    <auto_tcn>34</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>34</total_tcn>\r
+    <pkg_name>mobile/tct-key-manager-native-itc-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-connection-native-ctc" category=" CompatibilityTestCases ">\r
+    <auto_tcn>1</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>1</total_tcn>\r
+    <pkg_name>mobile/tct-connection-native-ctc-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-runtime-info-native-ctc" category=" CompatibilityTestCases ">\r
+    <auto_tcn>15</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>15</total_tcn>\r
+    <pkg_name>mobile/tct-runtime-info-native-ctc-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-smartcard-native-utc" category=" UnitTestCases ">\r
+    <auto_tcn>33</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>33</total_tcn>\r
+    <pkg_name>mobile/tct-smartcard-native-utc-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-tts-native-itc" category=" IntegrationTestCases ">\r
+    <auto_tcn>14</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>14</total_tcn>\r
+    <pkg_name>mobile/tct-tts-native-itc-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-badge-native-itc" category=" IntegrationTestCases ">\r
+    <auto_tcn>6</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>6</total_tcn>\r
+    <pkg_name>mobile/tct-badge-native-itc-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-smartcard-native-itc" category=" IntegrationTestCases ">\r
+    <auto_tcn>8</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>8</total_tcn>\r
+    <pkg_name>mobile/tct-smartcard-native-itc-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-wifi-native-itc" category=" IntegrationTestCases ">\r
+    <auto_tcn>60</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>60</total_tcn>\r
+    <pkg_name>mobile/tct-wifi-native-itc-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-oauth2-native-utc" category=" UnitTestCases ">\r
+    <auto_tcn>89</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>89</total_tcn>\r
+    <pkg_name>mobile/tct-oauth2-native-utc-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-sync-manager-native-itc" category=" IntegrationTestCases ">\r
+    <auto_tcn>5</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>5</total_tcn>\r
+    <pkg_name>mobile/tct-sync-manager-native-itc-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-accounts-svc-native-utc" category=" UnitTestCases ">\r
+    <auto_tcn>147</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>147</total_tcn>\r
+    <pkg_name>mobile/tct-accounts-svc-native-utc-2.4.zip</pkg_name>\r
+  </suite>\r
+  <!--\r
+  <suite name="tct-wifi-direct-native-ctc" category=" CompatibilityTestCases ">\r
+    <auto_tcn>1</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>1</total_tcn>\r
+    <pkg_name>mobile/tct-wifi-direct-native-ctc-2.4.zip</pkg_name>\r
+  </suite>\r
+  -->\r
+  <suite name="tct-libstorage-native-itc" category=" IntegrationTestCases ">\r
+    <auto_tcn>10</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>10</total_tcn>\r
+    <pkg_name>mobile/tct-libstorage-native-itc-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-url-download-native-utc" category=" UnitTestCases ">\r
+    <auto_tcn>121</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>121</total_tcn>\r
+    <pkg_name>mobile/tct-url-download-native-utc-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-stt-native-utc" category=" UnitTestCases ">\r
+    <auto_tcn>88</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>88</total_tcn>\r
+    <pkg_name>mobile/tct-stt-native-utc-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-stt-native-itc" category=" IntegrationTestCases ">\r
+    <auto_tcn>20</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>20</total_tcn>\r
+    <pkg_name>mobile/tct-stt-native-itc-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-recorder-native-utc" category=" UnitTestCases ">\r
+    <auto_tcn>151</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>151</total_tcn>\r
+    <pkg_name>mobile/tct-recorder-native-utc-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-attach-panel-native-utc" category=" UnitTestCases ">\r
+    <auto_tcn>24</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>24</total_tcn>\r
+    <pkg_name>mobile/tct-attach-panel-native-utc-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-voice-control-native-itc" category=" IntegrationTestCases ">\r
+    <auto_tcn>22</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>22</total_tcn>\r
+    <pkg_name>mobile/tct-voice-control-native-itc-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-context-native-itc" category=" IntegrationTestCases ">\r
+    <auto_tcn>29</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>29</total_tcn>\r
+    <pkg_name>mobile/tct-context-native-itc-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-runtime-info-native-utc" category=" UnitTestCases ">\r
+    <auto_tcn>126</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>126</total_tcn>\r
+    <pkg_name>mobile/tct-runtime-info-native-utc-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-bluetooth-native-utc" category=" UnitTestCases ">\r
+    <auto_tcn>338</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>338</total_tcn>\r
+    <pkg_name>mobile/tct-bluetooth-native-utc-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-dali-core-native-utc" category=" UnitTestCases ">\r
+    <auto_tcn>1600</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>1600</total_tcn>\r
+    <pkg_name>mobile/tct-dali-core-native-utc-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-email-native-itc" category=" IntegrationTestCases ">\r
+    <auto_tcn>9</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>9</total_tcn>\r
+    <pkg_name>mobile/tct-email-native-itc-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-capi-media-tool-native-itc" category=" IntegrationTestCases ">\r
+    <auto_tcn>44</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>44</total_tcn>\r
+    <pkg_name>mobile/tct-capi-media-tool-native-itc-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-location-manager-native-ctc" category=" CompatibilityTestCases ">\r
+    <auto_tcn>1</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>1</total_tcn>\r
+    <pkg_name>mobile/tct-location-manager-native-ctc-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-package-manager-native-itc" category=" IntegrationTestCases ">\r
+    <auto_tcn>38</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>38</total_tcn>\r
+    <pkg_name>mobile/tct-package-manager-native-itc-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-telephony-native-ctc" category=" CompatibilityTestCases ">\r
+    <auto_tcn>1</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>1</total_tcn>\r
+    <pkg_name>mobile/tct-telephony-native-ctc-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-dali-adaptor-native-itc" category=" IntegrationTestCases ">\r
+    <auto_tcn>16</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>16</total_tcn>\r
+    <pkg_name>mobile/tct-dali-adaptor-native-itc-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-media-content-native-itc" category=" IntegrationTestCases ">\r
+    <auto_tcn>181</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>181</total_tcn>\r
+    <pkg_name>mobile/tct-media-content-native-itc-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-tbm-native-itc" category=" IntegrationTestCases ">\r
+    <auto_tcn>7</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>7</total_tcn>\r
+    <pkg_name>mobile/tct-tbm-native-itc-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-libfeedback-native-utc" category=" UnitTestCases ">\r
+    <auto_tcn>13</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>13</total_tcn>\r
+    <pkg_name>mobile/tct-libfeedback-native-utc-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-webkit2-native-itc" category=" IntegrationTestCases ">\r
+    <auto_tcn>103</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>103</total_tcn>\r
+    <pkg_name>mobile/tct-webkit2-native-itc-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-notification-native-utc" category=" UnitTestCases ">\r
+    <auto_tcn>229</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>229</total_tcn>\r
+    <pkg_name>mobile/tct-notification-native-utc-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-sound-manager-native-utc" category=" UnitTestCases ">\r
+    <auto_tcn>71</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>71</total_tcn>\r
+    <pkg_name>mobile/tct-sound-manager-native-utc-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-notification-native-itc" category=" IntegrationTestCases ">\r
+    <auto_tcn>30</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>30</total_tcn>\r
+    <pkg_name>mobile/tct-notification-native-itc-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-voice-control-native-utc" category=" UnitTestCases ">\r
+    <auto_tcn>97</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>97</total_tcn>\r
+    <pkg_name>mobile/tct-voice-control-native-utc-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-eom-native-utc" category=" UnitTestCases ">\r
+    <auto_tcn>42</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>42</total_tcn>\r
+    <pkg_name>mobile/tct-eom-native-utc-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-widget_service-native-itc" category=" IntegrationTestCases ">\r
+    <auto_tcn>18</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>18</total_tcn>\r
+    <pkg_name>mobile/tct-widget_service-native-itc-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-contacts-service2-native-itc" category=" IntegrationTestCases ">\r
+    <auto_tcn>77</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>77</total_tcn>\r
+    <pkg_name>mobile/tct-contacts-service2-native-itc-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-telephony-native-itc" category=" IntegrationTestCases ">\r
+    <auto_tcn>38</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>38</total_tcn>\r
+    <pkg_name>mobile/tct-telephony-native-itc-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-shortcut-native-utc" category=" UnitTestCases ">\r
+    <auto_tcn>8</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>8</total_tcn>\r
+    <pkg_name>mobile/tct-shortcut-native-utc-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-audio-io-native-itc" category=" IntegrationTestCases ">\r
+    <auto_tcn>26</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>26</total_tcn>\r
+    <pkg_name>mobile/tct-audio-io-native-itc-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-location-manager-native-itc" category=" IntegrationTestCases ">\r
+    <auto_tcn>41</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>41</total_tcn>\r
+    <pkg_name>mobile/tct-location-manager-native-itc-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-tone-player-native-itc" category=" IntegrationTestCases ">\r
+    <auto_tcn>1</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>1</total_tcn>\r
+    <pkg_name>mobile/tct-tone-player-native-itc-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-app-manager-native-utc" category=" UnitTestCases ">\r
+    <auto_tcn>121</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>121</total_tcn>\r
+    <pkg_name>mobile/tct-app-manager-native-utc-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-screen-mirroring-native-utc" category=" UnitTestCases ">\r
+    <auto_tcn>55</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>55</total_tcn>\r
+    <pkg_name>mobile/tct-screen-mirroring-native-utc-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-image-util-native-ctc" category=" CompatibilityTestCases ">\r
+    <auto_tcn>2</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>2</total_tcn>\r
+    <pkg_name>mobile/tct-image-util-native-ctc-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-media-vision-native-itc" category=" IntegrationTestCases ">\r
+    <auto_tcn>17</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>17</total_tcn>\r
+    <pkg_name>mobile/tct-media-vision-native-itc-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-privilege-info-native-itc" category=" IntegrationTestCases ">\r
+    <auto_tcn>4</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>4</total_tcn>\r
+    <pkg_name>mobile/tct-privilege-info-native-itc-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-image-util-native-itc" category=" IntegrationTestCases ">\r
+    <auto_tcn>14</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>14</total_tcn>\r
+    <pkg_name>mobile/tct-image-util-native-itc-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-connection-native-itc" category=" IntegrationTestCases ">\r
+    <auto_tcn>61</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>61</total_tcn>\r
+    <pkg_name>mobile/tct-connection-native-itc-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-nfc-native-itc" category=" IntegrationTestCases ">\r
+    <auto_tcn>40</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>40</total_tcn>\r
+    <pkg_name>mobile/tct-nfc-native-itc-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-ttrace-native-itc" category=" IntegrationTestCases ">\r
+    <auto_tcn>3</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>3</total_tcn>\r
+    <pkg_name>mobile/tct-ttrace-native-itc-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-media-key-native-utc" category=" UnitTestCases ">\r
+    <auto_tcn>3</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>3</total_tcn>\r
+    <pkg_name>mobile/tct-media-key-native-utc-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-wav-player-native-utc" category=" UnitTestCases ">\r
+    <auto_tcn>9</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>9</total_tcn>\r
+    <pkg_name>mobile/tct-wav-player-native-utc-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-libfeedback-native-itc" category=" IntegrationTestCases ">\r
+    <auto_tcn>4</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>4</total_tcn>\r
+    <pkg_name>mobile/tct-libfeedback-native-itc-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-phonenumber-utils-native-itc" category=" IntegrationTestCases ">\r
+    <auto_tcn>2</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>2</total_tcn>\r
+    <pkg_name>mobile/tct-phonenumber-utils-native-itc-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-motion-native-utc" category=" UnitTestCases ">\r
+    <auto_tcn>23</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>23</total_tcn>\r
+    <pkg_name>mobile/tct-motion-native-utc-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-bluetooth-native-itc" category=" IntegrationTestCases ">\r
+    <auto_tcn>45</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>45</total_tcn>\r
+    <pkg_name>mobile/tct-bluetooth-native-itc-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-system-info-native-itc" category=" IntegrationTestCases ">\r
+    <auto_tcn>4</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>4</total_tcn>\r
+    <pkg_name>mobile/tct-system-info-native-itc-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-sensor-native-itc" category=" IntegrationTestCases ">\r
+    <auto_tcn>25</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>25</total_tcn>\r
+    <pkg_name>mobile/tct-sensor-native-itc-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-data-control-native-itc" category=" IntegrationTestCases ">\r
+    <auto_tcn>33</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>33</total_tcn>\r
+    <pkg_name>mobile/tct-data-control-native-itc-2.4.zip</pkg_name>\r
+  </suite>\r
+</ns3:testplan>\r
+\r
diff --git a/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/shell/plan/Native_Full_mobile_3.0.xml b/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/shell/plan/Native_Full_mobile_3.0.xml
new file mode 100755 (executable)
index 0000000..22ac02d
--- /dev/null
@@ -0,0 +1,1235 @@
+<?xml version="1.0" encoding="UTF-8"?>\r
+<ns3:testplan xmlns:ns3="http://www.example.org/plan/" xmlns="" name="Native_Full_mobile_3.0" profile="mobile">\r
+  <execute_type>Auto</execute_type>\r
+  <suite name="tct-dali-adaptor-native-utc" category=" UnitTestCases ">\r
+    <auto_tcn>96</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>96</total_tcn>\r
+    <pkg_name>mobile/tct-dali-adaptor-native-utc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-mtp-native-itc" category=" IntegrationTestCases ">\r
+    <auto_tcn>1</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>1</total_tcn>\r
+    <pkg_name>mobile/tct-mtp-native-itc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-wav-player-native-itc" category=" IntegrationTestCases ">\r
+    <auto_tcn>2</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>2</total_tcn>\r
+    <pkg_name>mobile/tct-wav-player-native-itc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-messages-native-itc" category=" IntegrationTestCases ">\r
+    <auto_tcn>18</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>18</total_tcn>\r
+    <pkg_name>mobile/tct-messages-native-itc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-badge-native-utc" category=" UnitTestCases ">\r
+    <auto_tcn>25</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>25</total_tcn>\r
+    <pkg_name>mobile/tct-badge-native-utc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-mediademuxer-native-utc" category=" UnitTestCases ">\r
+    <auto_tcn>36</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>36</total_tcn>\r
+    <pkg_name>mobile/tct-mediademuxer-native-utc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-system-settings-native-itc" category=" IntegrationTestCases ">\r
+    <auto_tcn>4</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>4</total_tcn>\r
+    <pkg_name>mobile/tct-system-settings-native-itc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-thumbnail-util-native-itc" category=" IntegrationTestCases ">\r
+    <auto_tcn>6</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>6</total_tcn>\r
+    <pkg_name>mobile/tct-thumbnail-util-native-itc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-tbm-native-utc" category=" UnitTestCases ">\r
+    <auto_tcn>17</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>17</total_tcn>\r
+    <pkg_name>mobile/tct-tbm-native-utc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-accounts-svc-native-itc" category=" IntegrationTestCases ">\r
+    <auto_tcn>48</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>48</total_tcn>\r
+    <pkg_name>mobile/tct-accounts-svc-native-itc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-telephony-native-utc" category=" UnitTestCases ">\r
+    <auto_tcn>159</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>159</total_tcn>\r
+    <pkg_name>mobile/tct-telephony-native-utc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-capi-media-vision-native-utc" category=" UnitTestCases ">\r
+    <auto_tcn>155</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>155</total_tcn>\r
+    <pkg_name>mobile/tct-capi-media-vision-native-utc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-phonenumber-utils-native-utc" category=" UnitTestCases ">\r
+    <auto_tcn>12</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>12</total_tcn>\r
+    <pkg_name>mobile/tct-phonenumber-utils-native-utc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-fido-client-native-utc" category=" UnitTestCases ">\r
+    <auto_tcn>24</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>24</total_tcn>\r
+    <pkg_name>mobile/tct-fido-client-native-utc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-appcore-widget-native-itc" category=" IntegrationTestCases ">\r
+    <auto_tcn>5</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>5</total_tcn>\r
+    <pkg_name>mobile/tct-appcore-widget-native-itc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-base-utils-native-itc" category=" IntegrationTestCases ">\r
+    <auto_tcn>288</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>288</total_tcn>\r
+    <pkg_name>mobile/tct-base-utils-native-itc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-mediacodec-native-utc" category=" UnitTestCases ">\r
+    <auto_tcn>49</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>49</total_tcn>\r
+    <pkg_name>mobile/tct-mediacodec-native-utc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-calendar-service2-native-itc" category=" IntegrationTestCases ">\r
+    <auto_tcn>58</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>58</total_tcn>\r
+    <pkg_name>mobile/tct-calendar-service2-native-itc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-capi-media-streamer-native-utc" category=" UnitTestCases ">\r
+    <auto_tcn>82</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>82</total_tcn>\r
+    <pkg_name>mobile/tct-capi-media-streamer-native-utc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-media-content-native-utc" category=" UnitTestCases ">\r
+    <auto_tcn>526</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>526</total_tcn>\r
+    <pkg_name>mobile/tct-media-content-native-utc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-sound-manager-native-itc" category=" IntegrationTestCases ">\r
+    <auto_tcn>28</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>28</total_tcn>\r
+    <pkg_name>mobile/tct-sound-manager-native-itc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-opengl-native-ctc" category=" CompatibilityTestCases ">\r
+    <auto_tcn>3</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>3</total_tcn>\r
+    <pkg_name>mobile/tct-opengl-native-ctc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-media-controller-native-utc" category=" UnitTestCases ">\r
+    <auto_tcn>85</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>85</total_tcn>\r
+    <pkg_name>mobile/tct-media-controller-native-utc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-tone-player-native-utc" category=" UnitTestCases ">\r
+    <auto_tcn>9</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>9</total_tcn>\r
+    <pkg_name>mobile/tct-tone-player-native-utc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-voice-control-elm-native-itc" category=" IntegrationTestCases ">\r
+    <auto_tcn>13</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>13</total_tcn>\r
+    <pkg_name>mobile/tct-voice-control-elm-native-itc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-appcore-widget-native-utc" category=" UnitTestCases ">\r
+    <auto_tcn>20</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>20</total_tcn>\r
+    <pkg_name>mobile/tct-appcore-widget-native-utc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-screen-mirroring-native-itc" category=" IntegrationTestCases ">\r
+    <auto_tcn>5</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>5</total_tcn>\r
+    <pkg_name>mobile/tct-screen-mirroring-native-itc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-motion-native-itc" category=" IntegrationTestCases ">\r
+    <auto_tcn>8</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>8</total_tcn>\r
+    <pkg_name>mobile/tct-motion-native-itc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-camera-native-itc" category=" IntegrationTestCases ">\r
+    <auto_tcn>82</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>82</total_tcn>\r
+    <pkg_name>mobile/tct-camera-native-itc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-video-util-native-itc" category=" IntegrationTestCases ">\r
+    <auto_tcn>14</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>14</total_tcn>\r
+    <pkg_name>mobile/tct-video-util-native-itc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-push-native-utc" category=" UnitTestCases ">\r
+    <auto_tcn>28</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>28</total_tcn>\r
+    <pkg_name>mobile/tct-push-native-utc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-geofence-manager-native-itc" category=" IntegrationTestCases ">\r
+    <auto_tcn>26</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>26</total_tcn>\r
+    <pkg_name>mobile/tct-geofence-manager-native-itc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-app-manager-native-itc" category=" IntegrationTestCases ">\r
+    <auto_tcn>42</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>42</total_tcn>\r
+    <pkg_name>mobile/tct-app-manager-native-itc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-audio-io-native-utc" category=" UnitTestCases ">\r
+    <auto_tcn>94</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>94</total_tcn>\r
+    <pkg_name>mobile/tct-audio-io-native-utc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-player-native-ctc" category=" CompatibilityTestCases ">\r
+    <auto_tcn>4</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>4</total_tcn>\r
+    <pkg_name>mobile/tct-player-native-ctc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-dali-core-native-itc" category=" IntegrationTestCases ">\r
+    <auto_tcn>864</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>864</total_tcn>\r
+    <pkg_name>mobile/tct-dali-core-native-itc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-mediatool-native-utc" category=" UnitTestCases ">\r
+    <auto_tcn>133</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>133</total_tcn>\r
+    <pkg_name>mobile/tct-mediatool-native-utc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-sync-manager-native-utc" category=" UnitTestCases ">\r
+    <auto_tcn>28</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>28</total_tcn>\r
+    <pkg_name>mobile/tct-sync-manager-native-utc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-efl-util-native-itc" category=" IntegrationTestCases ">\r
+    <auto_tcn>5</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>5</total_tcn>\r
+    <pkg_name>mobile/tct-efl-util-native-itc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-efl-ext-native-utc" category=" UnitTestCases ">\r
+    <auto_tcn>26</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>26</total_tcn>\r
+    <pkg_name>mobile/tct-efl-ext-native-utc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-wifi-native-utc" category=" UnitTestCases ">\r
+    <auto_tcn>208</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>208</total_tcn>\r
+    <pkg_name>mobile/tct-wifi-native-utc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-bundle-native-itc" category=" IntegrationTestCases ">\r
+    <auto_tcn>9</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>9</total_tcn>\r
+    <pkg_name>mobile/tct-bundle-native-itc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-bundle-native-utc" category=" UnitTestCases ">\r
+    <auto_tcn>53</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>53</total_tcn>\r
+    <pkg_name>mobile/tct-bundle-native-utc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-libstorage-native-utc" category=" UnitTestCases ">\r
+    <auto_tcn>31</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>31</total_tcn>\r
+    <pkg_name>mobile/tct-libstorage-native-utc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-url-download-native-itc" category=" IntegrationTestCases ">\r
+    <auto_tcn>27</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>27</total_tcn>\r
+    <pkg_name>mobile/tct-url-download-native-itc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-capi-ui-inputmethod-native-utc" category=" UnitTestCases ">\r
+    <auto_tcn>99</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>99</total_tcn>\r
+    <pkg_name>mobile/tct-capi-ui-inputmethod-native-utc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-application-native-itc" category=" IntegrationTestCases ">\r
+    <auto_tcn>55</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>55</total_tcn>\r
+    <pkg_name>mobile/tct-application-native-itc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-contacts-service2-native-utc" category=" UnitTestCases ">\r
+    <auto_tcn>200</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>200</total_tcn>\r
+    <pkg_name>mobile/tct-contacts-service2-native-utc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-minicontrol-native-utc" category=" UnitTestCases ">\r
+    <auto_tcn>11</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>11</total_tcn>\r
+    <pkg_name>mobile/tct-minicontrol-native-utc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-player-native-utc" category=" UnitTestCases ">\r
+    <auto_tcn>191</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>191</total_tcn>\r
+    <pkg_name>mobile/tct-player-native-utc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-voice-control-elm-native-utc" category=" UnitTestCases ">\r
+    <auto_tcn>71</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>71</total_tcn>\r
+    <pkg_name>mobile/tct-voice-control-elm-native-utc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-appcore-agent-native-utc" category=" UnitTestCases ">\r
+    <auto_tcn>11</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>11</total_tcn>\r
+    <pkg_name>mobile/tct-appcore-agent-native-utc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-device-native-ctc" category=" CompatibilityTestCases ">\r
+    <auto_tcn>1</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>1</total_tcn>\r
+    <pkg_name>mobile/tct-device-native-ctc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-system-info-native-utc" category=" UnitTestCases ">\r
+    <auto_tcn>12</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>12</total_tcn>\r
+    <pkg_name>mobile/tct-system-info-native-utc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-application-native-utc" category=" UnitTestCases ">\r
+    <auto_tcn>268</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>268</total_tcn>\r
+    <pkg_name>mobile/tct-application-native-utc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-data-control-native-utc" category=" UnitTestCases ">\r
+    <auto_tcn>89</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>89</total_tcn>\r
+    <pkg_name>mobile/tct-data-control-native-utc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-wifi-direct-native-itc" category=" IntegrationTestCases ">\r
+    <auto_tcn>38</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>38</total_tcn>\r
+    <pkg_name>mobile/tct-wifi-direct-native-itc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-email-native-utc" category=" UnitTestCases ">\r
+    <auto_tcn>24</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>24</total_tcn>\r
+    <pkg_name>mobile/tct-email-native-utc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-tts-native-utc" category=" UnitTestCases ">\r
+    <auto_tcn>104</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>104</total_tcn>\r
+    <pkg_name>mobile/tct-tts-native-utc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-device-native-utc" category=" UnitTestCases ">\r
+    <auto_tcn>59</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>59</total_tcn>\r
+    <pkg_name>mobile/tct-device-native-utc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-sound-manager-native-ctc" category=" CompatibilityTestCases ">\r
+    <auto_tcn>1</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>1</total_tcn>\r
+    <pkg_name>mobile/tct-sound-manager-native-ctc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-image-util-native-utc" category=" UnitTestCases ">\r
+    <auto_tcn>215</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>215</total_tcn>\r
+    <pkg_name>mobile/tct-image-util-native-utc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-nfc-native-utc" category=" UnitTestCases ">\r
+    <auto_tcn>157</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>157</total_tcn>\r
+    <pkg_name>mobile/tct-nfc-native-utc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-runtime-info-native-itc" category=" IntegrationTestCases ">\r
+    <auto_tcn>8</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>8</total_tcn>\r
+    <pkg_name>mobile/tct-runtime-info-native-itc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-metadata-editor-native-itc" category=" IntegrationTestCases ">\r
+    <auto_tcn>7</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>7</total_tcn>\r
+    <pkg_name>mobile/tct-metadata-editor-native-itc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-dali-toolkit-native-itc" category=" IntegrationTestCases ">\r
+    <auto_tcn>238</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>238</total_tcn>\r
+    <pkg_name>mobile/tct-dali-toolkit-native-itc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-efl-util-native-utc" category=" UnitTestCases ">\r
+    <auto_tcn>45</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>45</total_tcn>\r
+    <pkg_name>mobile/tct-efl-util-native-utc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-libstorage64-native-utc" category=" UnitTestCases ">\r
+    <auto_tcn>31</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>31</total_tcn>\r
+    <pkg_name>mobile/tct-libstorage64-native-utc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-device-native-itc" category=" IntegrationTestCases ">\r
+    <auto_tcn>16</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>16</total_tcn>\r
+    <pkg_name>mobile/tct-device-native-itc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-recorder-native-itc" category=" IntegrationTestCases ">\r
+    <auto_tcn>33</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>33</total_tcn>\r
+    <pkg_name>mobile/tct-recorder-native-itc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-dali-toolkit-native-utc" category=" UnitTestCases ">\r
+    <auto_tcn>435</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>435</total_tcn>\r
+    <pkg_name>mobile/tct-dali-toolkit-native-utc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-mediacodec-native-ctc" category=" CompatibilityTestCases ">\r
+    <auto_tcn>1</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>1</total_tcn>\r
+    <pkg_name>mobile/tct-mediacodec-native-ctc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-player-native-itc" category=" IntegrationTestCases ">\r
+    <auto_tcn>55</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>55</total_tcn>\r
+    <pkg_name>mobile/tct-player-native-itc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-mime-type-native-itc" category=" IntegrationTestCases ">\r
+    <auto_tcn>2</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>2</total_tcn>\r
+    <pkg_name>mobile/tct-mime-type-native-itc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-tts-native-itc" category=" IntegrationTestCases ">\r
+    <auto_tcn>14</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>14</total_tcn>\r
+    <pkg_name>mobile/tct-tts-native-itc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-badge-native-itc" category=" IntegrationTestCases ">\r
+    <auto_tcn>6</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>6</total_tcn>\r
+    <pkg_name>mobile/tct-badge-native-itc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-wifi-native-itc" category=" IntegrationTestCases ">\r
+    <auto_tcn>60</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>60</total_tcn>\r
+    <pkg_name>mobile/tct-wifi-native-itc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-iotcon-native-utc" category=" UnitTestCases ">\r
+    <auto_tcn>346</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>346</total_tcn>\r
+    <pkg_name>mobile/tct-iotcon-native-utc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-sync-manager-native-itc" category=" IntegrationTestCases ">\r
+    <auto_tcn>5</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>5</total_tcn>\r
+    <pkg_name>mobile/tct-sync-manager-native-itc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-libstorage-native-itc" category=" IntegrationTestCases ">\r
+    <auto_tcn>10</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>10</total_tcn>\r
+    <pkg_name>mobile/tct-libstorage-native-itc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-url-download-native-utc" category=" UnitTestCases ">\r
+    <auto_tcn>121</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>121</total_tcn>\r
+    <pkg_name>mobile/tct-url-download-native-utc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-stt-native-itc" category=" IntegrationTestCases ">\r
+    <auto_tcn>20</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>20</total_tcn>\r
+    <pkg_name>mobile/tct-stt-native-itc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-stt-native-utc" category=" UnitTestCases ">\r
+    <auto_tcn>88</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>88</total_tcn>\r
+    <pkg_name>mobile/tct-stt-native-utc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-recorder-native-utc" category=" UnitTestCases ">\r
+    <auto_tcn>151</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>151</total_tcn>\r
+    <pkg_name>mobile/tct-recorder-native-utc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-context-native-itc" category=" IntegrationTestCases ">\r
+    <auto_tcn>29</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>29</total_tcn>\r
+    <pkg_name>mobile/tct-context-native-itc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-mediastreamrecorder-native-itc" category=" IntegrationTestCases ">\r
+    <auto_tcn>29</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>29</total_tcn>\r
+    <pkg_name>mobile/tct-mediastreamrecorder-native-itc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-runtime-info-native-utc" category=" UnitTestCases ">\r
+    <auto_tcn>126</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>126</total_tcn>\r
+    <pkg_name>mobile/tct-runtime-info-native-utc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-bluetooth-native-utc" category=" UnitTestCases ">\r
+    <auto_tcn>346</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>346</total_tcn>\r
+    <pkg_name>mobile/tct-bluetooth-native-utc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-location-manager-native-ctc" category=" CompatibilityTestCases ">\r
+    <auto_tcn>1</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>1</total_tcn>\r
+    <pkg_name>mobile/tct-location-manager-native-ctc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-telephony-native-ctc" category=" CompatibilityTestCases ">\r
+    <auto_tcn>1</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>1</total_tcn>\r
+    <pkg_name>mobile/tct-telephony-native-ctc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-dali-adaptor-native-itc" category=" IntegrationTestCases ">\r
+    <auto_tcn>16</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>16</total_tcn>\r
+    <pkg_name>mobile/tct-dali-adaptor-native-itc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-tbm-native-itc" category=" IntegrationTestCases ">\r
+    <auto_tcn>7</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>7</total_tcn>\r
+    <pkg_name>mobile/tct-tbm-native-itc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-media-content-native-itc" category=" IntegrationTestCases ">\r
+    <auto_tcn>200</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>200</total_tcn>\r
+    <pkg_name>mobile/tct-media-content-native-itc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-libfeedback-native-utc" category=" UnitTestCases ">\r
+    <auto_tcn>13</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>13</total_tcn>\r
+    <pkg_name>mobile/tct-libfeedback-native-utc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-capi-media-streamer-native-itc" category=" IntegrationTestCases ">\r
+    <auto_tcn>14</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>14</total_tcn>\r
+    <pkg_name>mobile/tct-capi-media-streamer-native-itc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-notification-native-itc" category=" IntegrationTestCases ">\r
+    <auto_tcn>30</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>30</total_tcn>\r
+    <pkg_name>mobile/tct-notification-native-itc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-contacts-service2-native-itc" category=" IntegrationTestCases ">\r
+    <auto_tcn>81</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>81</total_tcn>\r
+    <pkg_name>mobile/tct-contacts-service2-native-itc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-widget_service-native-itc" category=" IntegrationTestCases ">\r
+    <auto_tcn>18</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>18</total_tcn>\r
+    <pkg_name>mobile/tct-widget_service-native-itc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-location-manager-native-itc" category=" IntegrationTestCases ">\r
+    <auto_tcn>43</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>43</total_tcn>\r
+    <pkg_name>mobile/tct-location-manager-native-itc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-image-util-native-ctc" category=" CompatibilityTestCases ">\r
+    <auto_tcn>2</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>2</total_tcn>\r
+    <pkg_name>mobile/tct-image-util-native-ctc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-service-adaptor-native-itc" category=" IntegrationTestCases ">\r
+    <auto_tcn>24</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>24</total_tcn>\r
+    <pkg_name>mobile/tct-service-adaptor-native-itc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-privilege-info-native-itc" category=" IntegrationTestCases ">\r
+    <auto_tcn>4</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>4</total_tcn>\r
+    <pkg_name>mobile/tct-privilege-info-native-itc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-media-vision-native-itc" category=" IntegrationTestCases ">\r
+    <auto_tcn>37</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>37</total_tcn>\r
+    <pkg_name>mobile/tct-media-vision-native-itc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-vpn-native-utc" category=" UnitTestCases ">\r
+    <auto_tcn>30</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>30</total_tcn>\r
+    <pkg_name>mobile/tct-vpn-native-utc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-image-util-native-itc" category=" IntegrationTestCases ">\r
+    <auto_tcn>33</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>33</total_tcn>\r
+    <pkg_name>mobile/tct-image-util-native-itc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-connection-native-itc" category=" IntegrationTestCases ">\r
+    <auto_tcn>61</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>61</total_tcn>\r
+    <pkg_name>mobile/tct-connection-native-itc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-nfc-native-itc" category=" IntegrationTestCases ">\r
+    <auto_tcn>40</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>40</total_tcn>\r
+    <pkg_name>mobile/tct-nfc-native-itc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-ttrace-native-itc" category=" IntegrationTestCases ">\r
+    <auto_tcn>3</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>3</total_tcn>\r
+    <pkg_name>mobile/tct-ttrace-native-itc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-phonenumber-utils-native-itc" category=" IntegrationTestCases ">\r
+    <auto_tcn>4</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>4</total_tcn>\r
+    <pkg_name>mobile/tct-phonenumber-utils-native-itc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-bluetooth-native-itc" category=" IntegrationTestCases ">\r
+    <auto_tcn>45</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>45</total_tcn>\r
+    <pkg_name>mobile/tct-bluetooth-native-itc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-motion-native-utc" category=" UnitTestCases ">\r
+    <auto_tcn>23</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>23</total_tcn>\r
+    <pkg_name>mobile/tct-motion-native-utc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-system-info-native-itc" category=" IntegrationTestCases ">\r
+    <auto_tcn>4</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>4</total_tcn>\r
+    <pkg_name>mobile/tct-system-info-native-itc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-connection-native-utc" category=" UnitTestCases ">\r
+    <auto_tcn>172</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>172</total_tcn>\r
+    <pkg_name>mobile/tct-connection-native-utc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-webkit2-native-utc" category=" UnitTestCases ">\r
+    <auto_tcn>249</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>249</total_tcn>\r
+    <pkg_name>mobile/tct-webkit2-native-utc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-privilege-info-native-utc" category=" UnitTestCases ">\r
+    <auto_tcn>14</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>14</total_tcn>\r
+    <pkg_name>mobile/tct-privilege-info-native-utc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-native-common-native-itc" category=" IntegrationTestCases ">\r
+    <auto_tcn>2</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>2</total_tcn>\r
+    <pkg_name>mobile/tct-native-common-native-itc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-widget_viewer_evas-native-utc" category=" UnitTestCases ">\r
+    <auto_tcn>49</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>49</total_tcn>\r
+    <pkg_name>mobile/tct-widget_viewer_evas-native-utc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-filesystem-permission-native-ctc" category=" CompatibilityTestCases ">\r
+    <auto_tcn>32</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>32</total_tcn>\r
+    <pkg_name>mobile/tct-filesystem-permission-native-ctc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-capi-ui-inputmethod-manager-native-utc" category=" UnitTestCases ">\r
+    <auto_tcn>7</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>7</total_tcn>\r
+    <pkg_name>mobile/tct-capi-ui-inputmethod-manager-native-utc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-wifi-direct-native-utc" category=" UnitTestCases ">\r
+    <auto_tcn>140</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>140</total_tcn>\r
+    <pkg_name>mobile/tct-wifi-direct-native-utc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-widget_viewer_evas-native-itc" category=" IntegrationTestCases ">\r
+    <auto_tcn>23</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>23</total_tcn>\r
+    <pkg_name>mobile/tct-widget_viewer_evas-native-itc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-capi-message-port-native-itc" category=" IntegrationTestCases ">\r
+    <auto_tcn>6</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>6</total_tcn>\r
+    <pkg_name>mobile/tct-capi-message-port-native-itc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-messages-native-utc" category=" UnitTestCases ">\r
+    <auto_tcn>85</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>85</total_tcn>\r
+    <pkg_name>mobile/tct-messages-native-utc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-push-native-itc" category=" IntegrationTestCases ">\r
+    <auto_tcn>12</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>12</total_tcn>\r
+    <pkg_name>mobile/tct-push-native-itc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-sensor-native-ctc" category=" CompatibilityTestCases ">\r
+    <auto_tcn>9</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>9</total_tcn>\r
+    <pkg_name>mobile/tct-sensor-native-ctc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-appcore-agent-native-itc" category=" IntegrationTestCases ">\r
+    <auto_tcn>2</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>2</total_tcn>\r
+    <pkg_name>mobile/tct-appcore-agent-native-itc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-location-manager-native-utc" category=" UnitTestCases ">\r
+    <auto_tcn>143</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>143</total_tcn>\r
+    <pkg_name>mobile/tct-location-manager-native-utc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-camera-native-utc" category=" UnitTestCases ">\r
+    <auto_tcn>351</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>351</total_tcn>\r
+    <pkg_name>mobile/tct-camera-native-utc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-cairo-native-utc" category=" UnitTestCases ">\r
+    <auto_tcn>18</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>18</total_tcn>\r
+    <pkg_name>mobile/tct-cairo-native-utc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-streamrecorder-native-utc" category=" UnitTestCases ">\r
+    <auto_tcn>125</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>125</total_tcn>\r
+    <pkg_name>mobile/tct-streamrecorder-native-utc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-libstorage-native-ctc" category=" CompatibilityTestCases ">\r
+    <auto_tcn>2</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>2</total_tcn>\r
+    <pkg_name>mobile/tct-libstorage-native-ctc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-native-common-native-utc" category=" UnitTestCases ">\r
+    <auto_tcn>5</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>5</total_tcn>\r
+    <pkg_name>mobile/tct-native-common-native-utc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-metadata-editor-native-utc" category=" UnitTestCases ">\r
+    <auto_tcn>18</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>18</total_tcn>\r
+    <pkg_name>mobile/tct-metadata-editor-native-utc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-capi-maps-service-native-utc" category=" UnitTestCases ">\r
+    <auto_tcn>339</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>339</total_tcn>\r
+    <pkg_name>mobile/tct-capi-maps-service-native-utc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-mediacodec-native-itc" category=" IntegrationTestCases ">\r
+    <auto_tcn>17</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>17</total_tcn>\r
+    <pkg_name>mobile/tct-mediacodec-native-itc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-key-manager-native-utc" category=" UnitTestCases ">\r
+    <auto_tcn>127</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>127</total_tcn>\r
+    <pkg_name>mobile/tct-key-manager-native-utc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-efl-ext-native-itc" category=" IntegrationTestCases ">\r
+    <auto_tcn>4</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>4</total_tcn>\r
+    <pkg_name>mobile/tct-efl-ext-native-itc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-service-adaptor-native-utc" category=" UnitTestCases ">\r
+    <auto_tcn>125</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>125</total_tcn>\r
+    <pkg_name>mobile/tct-service-adaptor-native-utc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-metadata-extractor-native-utc" category=" UnitTestCases ">\r
+    <auto_tcn>23</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>23</total_tcn>\r
+    <pkg_name>mobile/tct-metadata-extractor-native-utc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-dlog-native-utc" category=" UnitTestCases ">\r
+    <auto_tcn>4</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>4</total_tcn>\r
+    <pkg_name>mobile/tct-dlog-native-utc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-capi-maps-service-native-itc" category=" IntegrationTestCases ">\r
+    <auto_tcn>70</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>70</total_tcn>\r
+    <pkg_name>mobile/tct-capi-maps-service-native-itc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-package-manager-native-utc" category=" UnitTestCases ">\r
+    <auto_tcn>92</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>92</total_tcn>\r
+    <pkg_name>mobile/tct-package-manager-native-utc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-sensor-native-utc" category=" UnitTestCases ">\r
+    <auto_tcn>62</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>62</total_tcn>\r
+    <pkg_name>mobile/tct-sensor-native-utc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-capi-mediamuxer-native-itc" category=" IntegrationTestCases ">\r
+    <auto_tcn>9</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>9</total_tcn>\r
+    <pkg_name>mobile/tct-capi-mediamuxer-native-itc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-video-util-native-ctc" category=" CompatibilityTestCases ">\r
+    <auto_tcn>6</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>6</total_tcn>\r
+    <pkg_name>mobile/tct-video-util-native-ctc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-widget_service-native-utc" category=" UnitTestCases ">\r
+    <auto_tcn>46</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>46</total_tcn>\r
+    <pkg_name>mobile/tct-widget_service-native-utc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-mime-type-native-utc" category=" UnitTestCases ">\r
+    <auto_tcn>15</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>15</total_tcn>\r
+    <pkg_name>mobile/tct-mime-type-native-utc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-eom-native-itc" category=" IntegrationTestCases ">\r
+    <auto_tcn>13</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>13</total_tcn>\r
+    <pkg_name>mobile/tct-eom-native-itc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-camera-native-ctc" category=" CompatibilityTestCases ">\r
+    <auto_tcn>1</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>1</total_tcn>\r
+    <pkg_name>mobile/tct-camera-native-ctc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-context-native-utc" category=" UnitTestCases ">\r
+    <auto_tcn>82</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>82</total_tcn>\r
+    <pkg_name>mobile/tct-context-native-utc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-radio-native-itc" category=" IntegrationTestCases ">\r
+    <auto_tcn>12</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>12</total_tcn>\r
+    <pkg_name>mobile/tct-radio-native-itc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-system-settings-native-utc" category=" UnitTestCases ">\r
+    <auto_tcn>78</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>78</total_tcn>\r
+    <pkg_name>mobile/tct-system-settings-native-utc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-metadata-extractor-native-itc" category=" IntegrationTestCases ">\r
+    <auto_tcn>8</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>8</total_tcn>\r
+    <pkg_name>mobile/tct-metadata-extractor-native-itc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-capi-message-port-native-utc" category=" UnitTestCases ">\r
+    <auto_tcn>53</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>53</total_tcn>\r
+    <pkg_name>mobile/tct-capi-message-port-native-utc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-video-util-native-utc" category=" UnitTestCases ">\r
+    <auto_tcn>43</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>43</total_tcn>\r
+    <pkg_name>mobile/tct-video-util-native-utc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-cairo-native-itc" category=" IntegrationTestCases ">\r
+    <auto_tcn>9</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>9</total_tcn>\r
+    <pkg_name>mobile/tct-cairo-native-itc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-calendar-service2-native-utc" category=" UnitTestCases ">\r
+    <auto_tcn>149</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>149</total_tcn>\r
+    <pkg_name>mobile/tct-calendar-service2-native-utc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-capi-ui-inputmethod-manager-native-itc" category=" IntegrationTestCases ">\r
+    <auto_tcn>2</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>2</total_tcn>\r
+    <pkg_name>mobile/tct-capi-ui-inputmethod-manager-native-itc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-shortcut-native-itc" category=" IntegrationTestCases ">\r
+    <auto_tcn>4</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>4</total_tcn>\r
+    <pkg_name>mobile/tct-shortcut-native-itc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-media-key-native-itc" category=" IntegrationTestCases ">\r
+    <auto_tcn>1</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>1</total_tcn>\r
+    <pkg_name>mobile/tct-media-key-native-itc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-geofence-manager-native-utc" category=" UnitTestCases ">\r
+    <auto_tcn>139</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>139</total_tcn>\r
+    <pkg_name>mobile/tct-geofence-manager-native-utc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-trace-native-utc" category=" UnitTestCases ">\r
+    <auto_tcn>5</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>5</total_tcn>\r
+    <pkg_name>mobile/tct-trace-native-utc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-platform-permission-native-ctc" category=" CompatibilityTestCases ">\r
+    <auto_tcn>54</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>54</total_tcn>\r
+    <pkg_name>mobile/tct-platform-permission-native-ctc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-dlog-native-itc" category=" IntegrationTestCases ">\r
+    <auto_tcn>2</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>2</total_tcn>\r
+    <pkg_name>mobile/tct-dlog-native-itc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-minicontrol-native-itc" category=" IntegrationTestCases ">\r
+    <auto_tcn>5</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>5</total_tcn>\r
+    <pkg_name>mobile/tct-minicontrol-native-itc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-audio-io-native-ctc" category=" CompatibilityTestCases ">\r
+    <auto_tcn>1</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>1</total_tcn>\r
+    <pkg_name>mobile/tct-audio-io-native-ctc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-oauth2-native-itc" category=" IntegrationTestCases ">\r
+    <auto_tcn>18</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>18</total_tcn>\r
+    <pkg_name>mobile/tct-oauth2-native-itc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-base-utils-native-utc" category=" UnitTestCases ">\r
+    <auto_tcn>884</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>884</total_tcn>\r
+    <pkg_name>mobile/tct-base-utils-native-utc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-media-controller-native-itc" category=" IntegrationTestCases ">\r
+    <auto_tcn>28</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>28</total_tcn>\r
+    <pkg_name>mobile/tct-media-controller-native-itc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-system-info-native-ctc" category=" CompatibilityTestCases ">\r
+    <auto_tcn>4</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>4</total_tcn>\r
+    <pkg_name>mobile/tct-system-info-native-ctc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-key-manager-native-itc" category=" IntegrationTestCases ">\r
+    <auto_tcn>40</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>40</total_tcn>\r
+    <pkg_name>mobile/tct-key-manager-native-itc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-thumbnail-util-native-utc" category=" UnitTestCases ">\r
+    <auto_tcn>14</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>14</total_tcn>\r
+    <pkg_name>mobile/tct-thumbnail-util-native-utc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-connection-native-ctc" category=" CompatibilityTestCases ">\r
+    <auto_tcn>1</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>1</total_tcn>\r
+    <pkg_name>mobile/tct-connection-native-ctc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-runtime-info-native-ctc" category=" CompatibilityTestCases ">\r
+    <auto_tcn>15</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>15</total_tcn>\r
+    <pkg_name>mobile/tct-runtime-info-native-ctc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-smartcard-native-utc" category=" UnitTestCases ">\r
+    <auto_tcn>33</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>33</total_tcn>\r
+    <pkg_name>mobile/tct-smartcard-native-utc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-smartcard-native-itc" category=" IntegrationTestCases ">\r
+    <auto_tcn>8</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>8</total_tcn>\r
+    <pkg_name>mobile/tct-smartcard-native-itc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-mtp-native-utc" category=" UnitTestCases ">\r
+    <auto_tcn>37</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>37</total_tcn>\r
+    <pkg_name>mobile/tct-mtp-native-utc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-fido-client-native-itc" category=" IntegrationTestCases ">\r
+    <auto_tcn>20</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>20</total_tcn>\r
+    <pkg_name>mobile/tct-fido-client-native-itc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-oauth2-native-utc" category=" UnitTestCases ">\r
+    <auto_tcn>89</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>89</total_tcn>\r
+    <pkg_name>mobile/tct-oauth2-native-utc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-wifi-direct-native-ctc" category=" CompatibilityTestCases ">\r
+    <auto_tcn>1</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>1</total_tcn>\r
+    <pkg_name>mobile/tct-wifi-direct-native-ctc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-accounts-svc-native-utc" category=" UnitTestCases ">\r
+    <auto_tcn>147</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>147</total_tcn>\r
+    <pkg_name>mobile/tct-accounts-svc-native-utc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-attach-panel-native-utc" category=" UnitTestCases ">\r
+    <auto_tcn>24</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>24</total_tcn>\r
+    <pkg_name>mobile/tct-attach-panel-native-utc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-voice-control-native-itc" category=" IntegrationTestCases ">\r
+    <auto_tcn>22</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>22</total_tcn>\r
+    <pkg_name>mobile/tct-voice-control-native-itc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-capi-mediademuxer-native-itc" category=" IntegrationTestCases ">\r
+    <auto_tcn>12</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>12</total_tcn>\r
+    <pkg_name>mobile/tct-capi-mediademuxer-native-itc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-dali-core-native-utc" category=" UnitTestCases ">\r
+    <auto_tcn>1645</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>1645</total_tcn>\r
+    <pkg_name>mobile/tct-dali-core-native-utc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-package-manager-native-itc" category=" IntegrationTestCases ">\r
+    <auto_tcn>38</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>38</total_tcn>\r
+    <pkg_name>mobile/tct-package-manager-native-itc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-email-native-itc" category=" IntegrationTestCases ">\r
+    <auto_tcn>9</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>9</total_tcn>\r
+    <pkg_name>mobile/tct-email-native-itc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-capi-media-tool-native-itc" category=" IntegrationTestCases ">\r
+    <auto_tcn>51</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>51</total_tcn>\r
+    <pkg_name>mobile/tct-capi-media-tool-native-itc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-webkit2-native-itc" category=" IntegrationTestCases ">\r
+    <auto_tcn>103</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>103</total_tcn>\r
+    <pkg_name>mobile/tct-webkit2-native-itc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-notification-native-utc" category=" UnitTestCases ">\r
+    <auto_tcn>229</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>229</total_tcn>\r
+    <pkg_name>mobile/tct-notification-native-utc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-sound-manager-native-utc" category=" UnitTestCases ">\r
+    <auto_tcn>101</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>101</total_tcn>\r
+    <pkg_name>mobile/tct-sound-manager-native-utc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-voice-control-native-utc" category=" UnitTestCases ">\r
+    <auto_tcn>97</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>97</total_tcn>\r
+    <pkg_name>mobile/tct-voice-control-native-utc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-telephony-native-itc" category=" IntegrationTestCases ">\r
+    <auto_tcn>38</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>38</total_tcn>\r
+    <pkg_name>mobile/tct-telephony-native-itc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-eom-native-utc" category=" UnitTestCases ">\r
+    <auto_tcn>42</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>42</total_tcn>\r
+    <pkg_name>mobile/tct-eom-native-utc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-audio-io-native-itc" category=" IntegrationTestCases ">\r
+    <auto_tcn>32</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>32</total_tcn>\r
+    <pkg_name>mobile/tct-audio-io-native-itc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-shortcut-native-utc" category=" UnitTestCases ">\r
+    <auto_tcn>8</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>8</total_tcn>\r
+    <pkg_name>mobile/tct-shortcut-native-utc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-tone-player-native-itc" category=" IntegrationTestCases ">\r
+    <auto_tcn>2</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>2</total_tcn>\r
+    <pkg_name>mobile/tct-tone-player-native-itc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-app-manager-native-utc" category=" UnitTestCases ">\r
+    <auto_tcn>130</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>130</total_tcn>\r
+    <pkg_name>mobile/tct-app-manager-native-utc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-screen-mirroring-native-utc" category=" UnitTestCases ">\r
+    <auto_tcn>55</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>55</total_tcn>\r
+    <pkg_name>mobile/tct-screen-mirroring-native-utc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-mediamuxer-native-utc" category=" UnitTestCases ">\r
+    <auto_tcn>30</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>30</total_tcn>\r
+    <pkg_name>mobile/tct-mediamuxer-native-utc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-media-key-native-utc" category=" UnitTestCases ">\r
+    <auto_tcn>3</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>3</total_tcn>\r
+    <pkg_name>mobile/tct-media-key-native-utc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-wav-player-native-utc" category=" UnitTestCases ">\r
+    <auto_tcn>13</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>13</total_tcn>\r
+    <pkg_name>mobile/tct-wav-player-native-utc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-libfeedback-native-itc" category=" IntegrationTestCases ">\r
+    <auto_tcn>4</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>4</total_tcn>\r
+    <pkg_name>mobile/tct-libfeedback-native-itc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-sensor-native-itc" category=" IntegrationTestCases ">\r
+    <auto_tcn>25</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>25</total_tcn>\r
+    <pkg_name>mobile/tct-sensor-native-itc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-data-control-native-itc" category=" IntegrationTestCases ">\r
+    <auto_tcn>33</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>33</total_tcn>\r
+    <pkg_name>mobile/tct-data-control-native-itc-3.0.zip</pkg_name>\r
+  </suite>\r
+</ns3:testplan>\r
+\r
diff --git a/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/shell/plan/Native_Full_tv_2.4.xml b/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/shell/plan/Native_Full_tv_2.4.xml
new file mode 100755 (executable)
index 0000000..d8fe1df
--- /dev/null
@@ -0,0 +1,543 @@
+<ns3:testplan name="Native_Full_tv_2.4" profile="tv" xmlns="" xmlns:ns3="http://www.example.org/plan/">
+  <execute_type>All</execute_type>
+  <suite launcher="WRTLauncher" name="tct-capi-media-tool-native-utc">
+    <auto_tcn>110</auto_tcn>
+    <manual_tcn>0</manual_tcn>
+    <total_tcn>110</total_tcn>
+    <pkg_name>tv/tct-capi-media-tool-native-utc-2.4.zip</pkg_name>
+  </suite>
+  <suite launcher="WRTLauncher" name="tct-appcore-agent-native-itc">
+    <auto_tcn>2</auto_tcn>
+    <manual_tcn>0</manual_tcn>
+    <total_tcn>2</total_tcn>
+    <pkg_name>tv/tct-appcore-agent-native-itc-2.4.zip</pkg_name>
+  </suite>
+  <suite launcher="WRTLauncher" name="tct-libstorage-native-ctc">
+    <auto_tcn>2</auto_tcn>
+    <manual_tcn>0</manual_tcn>
+    <total_tcn>2</total_tcn>
+    <pkg_name>tv/tct-libstorage-native-ctc-2.4.zip</pkg_name>
+  </suite>
+  <suite launcher="WRTLauncher" name="tct-metadata-extractor-native-itc">
+    <auto_tcn>8</auto_tcn>
+    <manual_tcn>0</manual_tcn>
+    <total_tcn>8</total_tcn>
+    <pkg_name>tv/tct-metadata-extractor-native-itc-2.4.zip</pkg_name>
+  </suite>
+  <suite launcher="WRTLauncher" name="tct-thumbnail-util-native-itc">
+    <auto_tcn>6</auto_tcn>
+    <manual_tcn>0</manual_tcn>
+    <total_tcn>6</total_tcn>
+    <pkg_name>tv/tct-thumbnail-util-native-itc-2.4.zip</pkg_name>
+  </suite>
+  <suite launcher="WRTLauncher" name="tct-media-content-native-itc">
+    <auto_tcn>181</auto_tcn>
+    <manual_tcn>0</manual_tcn>
+    <total_tcn>181</total_tcn>
+    <pkg_name>tv/tct-media-content-native-itc-2.4.zip</pkg_name>
+  </suite>
+  <suite launcher="WRTLauncher" name="tct-package-manager-native-itc">
+    <auto_tcn>38</auto_tcn>
+    <manual_tcn>0</manual_tcn>
+    <total_tcn>38</total_tcn>
+    <pkg_name>tv/tct-package-manager-native-itc-2.4.zip</pkg_name>
+  </suite>
+  <suite launcher="WRTLauncher" name="tct-bundle-native-itc">
+    <auto_tcn>9</auto_tcn>
+    <manual_tcn>0</manual_tcn>
+    <total_tcn>9</total_tcn>
+    <pkg_name>tv/tct-bundle-native-itc-2.4.zip</pkg_name>
+  </suite>
+  <suite launcher="WRTLauncher" name="tct-system-info-native-ctc">
+    <auto_tcn>4</auto_tcn>
+    <manual_tcn>0</manual_tcn>
+    <total_tcn>4</total_tcn>
+    <pkg_name>tv/tct-system-info-native-ctc-2.4.zip</pkg_name>
+  </suite>
+  <suite launcher="WRTLauncher" name="tct-mime-type-native-utc">
+    <auto_tcn>15</auto_tcn>
+    <manual_tcn>0</manual_tcn>
+    <total_tcn>15</total_tcn>
+    <pkg_name>tv/tct-mime-type-native-utc-2.4.zip</pkg_name>
+  </suite>
+  <suite launcher="WRTLauncher" name="tct-dlog-native-utc">
+    <auto_tcn>4</auto_tcn>
+    <manual_tcn>0</manual_tcn>
+    <total_tcn>4</total_tcn>
+    <pkg_name>tv/tct-dlog-native-utc-2.4.zip</pkg_name>
+  </suite>
+  <suite launcher="WRTLauncher" name="tct-media-content-native-utc">
+    <auto_tcn>475</auto_tcn>
+    <manual_tcn>0</manual_tcn>
+    <total_tcn>475</total_tcn>
+    <pkg_name>tv/tct-media-content-native-utc-2.4.zip</pkg_name>
+  </suite>
+  <suite launcher="WRTLauncher" name="tct-metadata-editor-native-utc">
+    <auto_tcn>18</auto_tcn>
+    <manual_tcn>0</manual_tcn>
+    <total_tcn>18</total_tcn>
+    <pkg_name>tv/tct-metadata-editor-native-utc-2.4.zip</pkg_name>
+  </suite>
+  <suite launcher="WRTLauncher" name="tct-audio-io-native-utc">
+    <auto_tcn>72</auto_tcn>
+    <manual_tcn>0</manual_tcn>
+    <total_tcn>72</total_tcn>
+    <pkg_name>tv/tct-audio-io-native-utc-2.4.zip</pkg_name>
+  </suite>
+  <suite launcher="WRTLauncher" name="tct-media-controller-native-utc">
+    <auto_tcn>85</auto_tcn>
+    <manual_tcn>0</manual_tcn>
+    <total_tcn>85</total_tcn>
+    <pkg_name>tv/tct-media-controller-native-utc-2.4.zip</pkg_name>
+  </suite>
+  <suite launcher="WRTLauncher" name="tct-opengl-native-ctc">
+    <auto_tcn>3</auto_tcn>
+    <manual_tcn>0</manual_tcn>
+    <total_tcn>3</total_tcn>
+    <pkg_name>tv/tct-opengl-native-ctc-2.4.zip</pkg_name>
+  </suite>
+  <suite launcher="WRTLauncher" name="tct-capi-message-port-native-utc">
+    <auto_tcn>52</auto_tcn>
+    <manual_tcn>0</manual_tcn>
+    <total_tcn>52</total_tcn>
+    <pkg_name>tv/tct-capi-message-port-native-utc-2.4.zip</pkg_name>
+  </suite>
+  <suite launcher="WRTLauncher" name="tct-wav-player-native-itc">
+    <auto_tcn>1</auto_tcn>
+    <manual_tcn>0</manual_tcn>
+    <total_tcn>1</total_tcn>
+    <pkg_name>tv/tct-wav-player-native-itc-2.4.zip</pkg_name>
+  </suite>
+  <suite launcher="WRTLauncher" name="tct-package-manager-native-utc">
+    <auto_tcn>102</auto_tcn>
+    <manual_tcn>0</manual_tcn>
+    <total_tcn>102</total_tcn>
+    <pkg_name>tv/tct-package-manager-native-utc-2.4.zip</pkg_name>
+  </suite>
+  <suite launcher="WRTLauncher" name="tct-key-manager-native-utc">
+    <auto_tcn>103</auto_tcn>
+    <manual_tcn>0</manual_tcn>
+    <total_tcn>103</total_tcn>
+    <pkg_name>tv/tct-key-manager-native-utc-2.4.zip</pkg_name>
+  </suite>
+  <suite launcher="WRTLauncher" name="tct-tone-player-native-utc">
+    <auto_tcn>4</auto_tcn>
+    <manual_tcn>0</manual_tcn>
+    <total_tcn>4</total_tcn>
+    <pkg_name>tv/tct-tone-player-native-utc-2.4.zip</pkg_name>
+  </suite>
+  <suite launcher="WRTLauncher" name="tct-bluetooth-native-utc">
+    <auto_tcn>169</auto_tcn>
+    <manual_tcn>0</manual_tcn>
+    <total_tcn>169</total_tcn>
+    <pkg_name>tv/tct-bluetooth-native-utc-2.4.zip</pkg_name>
+  </suite>
+  <suite launcher="WRTLauncher" name="tct-media-key-native-itc">
+    <auto_tcn>1</auto_tcn>
+    <manual_tcn>0</manual_tcn>
+    <total_tcn>1</total_tcn>
+    <pkg_name>tv/tct-media-key-native-itc-2.4.zip</pkg_name>
+  </suite>
+  <suite launcher="WRTLauncher" name="tct-app-manager-native-utc">
+    <auto_tcn>121</auto_tcn>
+    <manual_tcn>0</manual_tcn>
+    <total_tcn>121</total_tcn>
+    <pkg_name>tv/tct-app-manager-native-utc-2.4.zip</pkg_name>
+  </suite>
+  <suite launcher="WRTLauncher" name="tct-bundle-native-utc">
+    <auto_tcn>53</auto_tcn>
+    <manual_tcn>0</manual_tcn>
+    <total_tcn>53</total_tcn>
+    <pkg_name>tv/tct-bundle-native-utc-2.4.zip</pkg_name>
+  </suite>
+  <suite launcher="WRTLauncher" name="tct-mime-type-native-itc">
+    <auto_tcn>2</auto_tcn>
+    <manual_tcn>0</manual_tcn>
+    <total_tcn>2</total_tcn>
+    <pkg_name>tv/tct-mime-type-native-itc-2.4.zip</pkg_name>
+  </suite>
+  <suite launcher="WRTLauncher" name="tct-webkit2-native-utc">
+    <auto_tcn>184</auto_tcn>
+    <manual_tcn>0</manual_tcn>
+    <total_tcn>184</total_tcn>
+    <pkg_name>tv/tct-webkit2-native-utc-2.4.zip</pkg_name>
+  </suite>
+  <suite launcher="WRTLauncher" name="tct-image-util-native-ctc">
+    <auto_tcn>2</auto_tcn>
+    <manual_tcn>0</manual_tcn>
+    <total_tcn>2</total_tcn>
+    <pkg_name>tv/tct-image-util-native-ctc-2.4.zip</pkg_name>
+  </suite>
+  <suite launcher="WRTLauncher" name="tct-libstorage64-native-utc">
+    <auto_tcn>31</auto_tcn>
+    <manual_tcn>0</manual_tcn>
+    <total_tcn>31</total_tcn>
+    <pkg_name>tv/tct-libstorage64-native-utc-2.4.zip</pkg_name>
+  </suite>
+  <suite launcher="WRTLauncher" name="tct-tts-native-itc">
+    <auto_tcn>14</auto_tcn>
+    <manual_tcn>0</manual_tcn>
+    <total_tcn>14</total_tcn>
+    <pkg_name>tv/tct-tts-native-itc-2.4.zip</pkg_name>
+  </suite>
+  <suite launcher="WRTLauncher" name="tct-wav-player-native-utc">
+    <auto_tcn>9</auto_tcn>
+    <manual_tcn>0</manual_tcn>
+    <total_tcn>9</total_tcn>
+    <pkg_name>tv/tct-wav-player-native-utc-2.4.zip</pkg_name>
+  </suite>
+  <suite launcher="WRTLauncher" name="tct-tts-native-utc">
+    <auto_tcn>104</auto_tcn>
+    <manual_tcn>0</manual_tcn>
+    <total_tcn>104</total_tcn>
+    <pkg_name>tv/tct-tts-native-utc-2.4.zip</pkg_name>
+  </suite>
+  <suite launcher="WRTLauncher" name="tct-screen-mirroring-native-itc">
+    <auto_tcn>5</auto_tcn>
+    <manual_tcn>0</manual_tcn>
+    <total_tcn>5</total_tcn>
+    <pkg_name>tv/tct-screen-mirroring-native-itc-2.4.zip</pkg_name>
+  </suite>
+  <suite launcher="WRTLauncher" name="tct-screen-mirroring-native-utc">
+    <auto_tcn>33</auto_tcn>
+    <manual_tcn>0</manual_tcn>
+    <total_tcn>33</total_tcn>
+    <pkg_name>tv/tct-screen-mirroring-native-utc-2.4.zip</pkg_name>
+  </suite>
+  <suite launcher="WRTLauncher" name="tct-tbm-native-utc">
+    <auto_tcn>17</auto_tcn>
+    <manual_tcn>0</manual_tcn>
+    <total_tcn>17</total_tcn>
+    <pkg_name>tv/tct-tbm-native-utc-2.4.zip</pkg_name>
+  </suite>
+  <suite launcher="WRTLauncher" name="tct-tone-player-native-itc">
+    <auto_tcn>1</auto_tcn>
+    <manual_tcn>0</manual_tcn>
+    <total_tcn>1</total_tcn>
+    <pkg_name>tv/tct-tone-player-native-itc-2.4.zip</pkg_name>
+  </suite>
+  <suite launcher="WRTLauncher" name="tct-system-info-native-utc">
+    <auto_tcn>12</auto_tcn>
+    <manual_tcn>0</manual_tcn>
+    <total_tcn>12</total_tcn>
+    <pkg_name>tv/tct-system-info-native-utc-2.4.zip</pkg_name>
+  </suite>
+  <suite launcher="WRTLauncher" name="tct-thumbnail-util-native-utc">
+    <auto_tcn>14</auto_tcn>
+    <manual_tcn>0</manual_tcn>
+    <total_tcn>14</total_tcn>
+    <pkg_name>tv/tct-thumbnail-util-native-utc-2.4.zip</pkg_name>
+  </suite>
+  <suite launcher="WRTLauncher" name="tct-dlog-native-itc">
+    <auto_tcn>2</auto_tcn>
+    <manual_tcn>0</manual_tcn>
+    <total_tcn>2</total_tcn>
+    <pkg_name>tv/tct-dlog-native-itc-2.4.zip</pkg_name>
+  </suite>
+  <suite launcher="WRTLauncher" name="tct-voice-control-native-utc">
+    <auto_tcn>74</auto_tcn>
+    <manual_tcn>0</manual_tcn>
+    <total_tcn>74</total_tcn>
+    <pkg_name>tv/tct-voice-control-native-utc-2.4.zip</pkg_name>
+  </suite>
+  <suite launcher="WRTLauncher" name="tct-bluetooth-native-itc">
+    <auto_tcn>23</auto_tcn>
+    <manual_tcn>0</manual_tcn>
+    <total_tcn>23</total_tcn>
+    <pkg_name>tv/tct-bluetooth-native-itc-2.4.zip</pkg_name>
+  </suite>
+  <suite launcher="WRTLauncher" name="tct-native-common-native-utc">
+    <auto_tcn>5</auto_tcn>
+    <manual_tcn>0</manual_tcn>
+    <total_tcn>5</total_tcn>
+    <pkg_name>tv/tct-native-common-native-utc-2.4.zip</pkg_name>
+  </suite>
+  <suite launcher="WRTLauncher" name="tct-application-native-utc">
+    <auto_tcn>269</auto_tcn>
+    <manual_tcn>0</manual_tcn>
+    <total_tcn>269</total_tcn>
+    <pkg_name>tv/tct-application-native-utc-2.4.zip</pkg_name>
+  </suite>
+  <suite launcher="WRTLauncher" name="tct-wifi-native-utc">
+    <auto_tcn>154</auto_tcn>
+    <manual_tcn>0</manual_tcn>
+    <total_tcn>154</total_tcn>
+    <pkg_name>tv/tct-wifi-native-utc-2.4.zip</pkg_name>
+  </suite>
+  <suite launcher="WRTLauncher" name="tct-metadata-extractor-native-utc">
+    <auto_tcn>23</auto_tcn>
+    <manual_tcn>0</manual_tcn>
+    <total_tcn>23</total_tcn>
+    <pkg_name>tv/tct-metadata-extractor-native-utc-2.4.zip</pkg_name>
+  </suite>
+  <suite launcher="WRTLauncher" name="tct-sound-manager-native-itc">
+    <auto_tcn>21</auto_tcn>
+    <manual_tcn>0</manual_tcn>
+    <total_tcn>21</total_tcn>
+    <pkg_name>tv/tct-sound-manager-native-itc-2.4.zip</pkg_name>
+  </suite>
+  <suite launcher="WRTLauncher" name="tct-runtime-info-native-ctc">
+    <auto_tcn>15</auto_tcn>
+    <manual_tcn>0</manual_tcn>
+    <total_tcn>15</total_tcn>
+    <pkg_name>tv/tct-runtime-info-native-ctc-2.4.zip</pkg_name>
+  </suite>
+  <suite launcher="WRTLauncher" name="tct-camera-native-utc">
+    <auto_tcn>323</auto_tcn>
+    <manual_tcn>0</manual_tcn>
+    <total_tcn>323</total_tcn>
+    <pkg_name>tv/tct-camera-native-utc-2.4.zip</pkg_name>
+  </suite>
+  <suite launcher="WRTLauncher" name="tct-voice-control-elm-native-utc">
+    <auto_tcn>72</auto_tcn>
+    <manual_tcn>0</manual_tcn>
+    <total_tcn>72</total_tcn>
+    <pkg_name>tv/tct-voice-control-elm-native-utc-2.4.zip</pkg_name>
+  </suite>
+  <suite launcher="WRTLauncher" name="tct-url-download-native-utc">
+    <auto_tcn>121</auto_tcn>
+    <manual_tcn>0</manual_tcn>
+    <total_tcn>121</total_tcn>
+    <pkg_name>tv/tct-url-download-native-utc-2.4.zip</pkg_name>
+  </suite>
+  <suite launcher="WRTLauncher" name="tct-camera-native-itc">
+    <auto_tcn>78</auto_tcn>
+    <manual_tcn>0</manual_tcn>
+    <total_tcn>78</total_tcn>
+    <pkg_name>tv/tct-camera-native-itc-2.4.zip</pkg_name>
+  </suite>
+  <suite launcher="WRTLauncher" name="tct-runtime-info-native-utc">
+    <auto_tcn>126</auto_tcn>
+    <manual_tcn>0</manual_tcn>
+    <total_tcn>126</total_tcn>
+    <pkg_name>tv/tct-runtime-info-native-utc-2.4.zip</pkg_name>
+  </suite>
+  <suite launcher="WRTLauncher" name="tct-app-manager-native-itc">
+    <auto_tcn>38</auto_tcn>
+    <manual_tcn>0</manual_tcn>
+    <total_tcn>38</total_tcn>
+    <pkg_name>tv/tct-app-manager-native-itc-2.4.zip</pkg_name>
+  </suite>
+  <suite launcher="WRTLauncher" name="tct-appcore-agent-native-utc">
+    <auto_tcn>11</auto_tcn>
+    <manual_tcn>0</manual_tcn>
+    <total_tcn>11</total_tcn>
+    <pkg_name>tv/tct-appcore-agent-native-utc-2.4.zip</pkg_name>
+  </suite>
+  <suite launcher="WRTLauncher" name="tct-runtime-info-native-itc">
+    <auto_tcn>7</auto_tcn>
+    <manual_tcn>0</manual_tcn>
+    <total_tcn>7</total_tcn>
+    <pkg_name>tv/tct-runtime-info-native-itc-2.4.zip</pkg_name>
+  </suite>
+  <suite launcher="WRTLauncher" name="tct-connection-native-utc">
+    <auto_tcn>172</auto_tcn>
+    <manual_tcn>0</manual_tcn>
+    <total_tcn>172</total_tcn>
+    <pkg_name>tv/tct-connection-native-utc-2.4.zip</pkg_name>
+  </suite>
+  <suite launcher="WRTLauncher" name="tct-image-util-native-utc">
+    <auto_tcn>95</auto_tcn>
+    <manual_tcn>0</manual_tcn>
+    <total_tcn>95</total_tcn>
+    <pkg_name>tv/tct-image-util-native-utc-2.4.zip</pkg_name>
+  </suite>
+  <suite launcher="WRTLauncher" name="tct-application-native-itc">
+    <auto_tcn>55</auto_tcn>
+    <manual_tcn>0</manual_tcn>
+    <total_tcn>55</total_tcn>
+    <pkg_name>tv/tct-application-native-itc-2.4.zip</pkg_name>
+  </suite>
+  <suite launcher="WRTLauncher" name="tct-recorder-native-utc">
+    <auto_tcn>114</auto_tcn>
+    <manual_tcn>0</manual_tcn>
+    <total_tcn>114</total_tcn>
+    <pkg_name>tv/tct-recorder-native-utc-2.4.zip</pkg_name>
+  </suite>
+  <suite launcher="WRTLauncher" name="tct-native-common-native-itc">
+    <auto_tcn>2</auto_tcn>
+    <manual_tcn>0</manual_tcn>
+    <total_tcn>2</total_tcn>
+    <pkg_name>tv/tct-native-common-native-itc-2.4.zip</pkg_name>
+  </suite>
+  <suite launcher="WRTLauncher" name="tct-media-key-native-utc">
+    <auto_tcn>3</auto_tcn>
+    <manual_tcn>0</manual_tcn>
+    <total_tcn>3</total_tcn>
+    <pkg_name>tv/tct-media-key-native-utc-2.4.zip</pkg_name>
+  </suite>
+  <suite launcher="WRTLauncher" name="tct-data-control-native-utc">
+    <auto_tcn>89</auto_tcn>
+    <manual_tcn>0</manual_tcn>
+    <total_tcn>89</total_tcn>
+    <pkg_name>tv/tct-data-control-native-utc-2.4.zip</pkg_name>
+  </suite>
+  <suite launcher="WRTLauncher" name="tct-audio-io-native-itc">
+    <auto_tcn>26</auto_tcn>
+    <manual_tcn>0</manual_tcn>
+    <total_tcn>26</total_tcn>
+    <pkg_name>tv/tct-audio-io-native-itc-2.4.zip</pkg_name>
+  </suite>
+  <suite launcher="WRTLauncher" name="tct-metadata-editor-native-itc">
+    <auto_tcn>7</auto_tcn>
+    <manual_tcn>0</manual_tcn>
+    <total_tcn>7</total_tcn>
+    <pkg_name>tv/tct-metadata-editor-native-itc-2.4.zip</pkg_name>
+  </suite>
+  <suite launcher="WRTLauncher" name="tct-sound-manager-native-ctc">
+    <auto_tcn>1</auto_tcn>
+    <manual_tcn>0</manual_tcn>
+    <total_tcn>1</total_tcn>
+    <pkg_name>tv/tct-sound-manager-native-ctc-2.4.zip</pkg_name>
+  </suite>
+  <suite launcher="WRTLauncher" name="tct-connection-native-ctc">
+    <auto_tcn>1</auto_tcn>
+    <manual_tcn>0</manual_tcn>
+    <total_tcn>1</total_tcn>
+    <pkg_name>tv/tct-connection-native-ctc-2.4.zip</pkg_name>
+  </suite>
+  <suite launcher="WRTLauncher" name="tct-libstorage-native-itc">
+    <auto_tcn>10</auto_tcn>
+    <manual_tcn>0</manual_tcn>
+    <total_tcn>10</total_tcn>
+    <pkg_name>tv/tct-libstorage-native-itc-2.4.zip</pkg_name>
+  </suite>
+  <suite launcher="WRTLauncher" name="tct-webkit2-native-itc">
+    <auto_tcn>82</auto_tcn>
+    <manual_tcn>0</manual_tcn>
+    <total_tcn>82</total_tcn>
+    <pkg_name>tv/tct-webkit2-native-itc-2.4.zip</pkg_name>
+  </suite>
+  <suite launcher="WRTLauncher" name="tct-key-manager-native-itc">
+    <auto_tcn>34</auto_tcn>
+    <manual_tcn>0</manual_tcn>
+    <total_tcn>34</total_tcn>
+    <pkg_name>tv/tct-key-manager-native-itc-2.4.zip</pkg_name>
+  </suite>
+  <suite launcher="WRTLauncher" name="tct-voice-control-native-itc">
+    <auto_tcn>22</auto_tcn>
+    <manual_tcn>0</manual_tcn>
+    <total_tcn>22</total_tcn>
+    <pkg_name>tv/tct-voice-control-native-itc-2.4.zip</pkg_name>
+  </suite>
+  <suite launcher="WRTLauncher" name="tct-system-info-native-itc">
+    <auto_tcn>4</auto_tcn>
+    <manual_tcn>0</manual_tcn>
+    <total_tcn>4</total_tcn>
+    <pkg_name>tv/tct-system-info-native-itc-2.4.zip</pkg_name>
+  </suite>
+  <suite launcher="WRTLauncher" name="tct-capi-media-tool-native-itc">
+    <auto_tcn>44</auto_tcn>
+    <manual_tcn>0</manual_tcn>
+    <total_tcn>44</total_tcn>
+    <pkg_name>tv/tct-capi-media-tool-native-itc-2.4.zip</pkg_name>
+  </suite>
+  <suite launcher="WRTLauncher" name="tct-libstorage-native-utc">
+    <auto_tcn>31</auto_tcn>
+    <manual_tcn>0</manual_tcn>
+    <total_tcn>31</total_tcn>
+    <pkg_name>tv/tct-libstorage-native-utc-2.4.zip</pkg_name>
+  </suite>
+  <suite launcher="WRTLauncher" name="tct-libfeedback-native-utc">
+    <auto_tcn>13</auto_tcn>
+    <manual_tcn>0</manual_tcn>
+    <total_tcn>13</total_tcn>
+    <pkg_name>tv/tct-libfeedback-native-utc-2.4.zip</pkg_name>
+  </suite>
+  <suite launcher="WRTLauncher" name="tct-efl-util-native-utc">
+    <auto_tcn>27</auto_tcn>
+    <manual_tcn>0</manual_tcn>
+    <total_tcn>27</total_tcn>
+    <pkg_name>tv/tct-efl-util-native-utc-2.4.zip</pkg_name>
+  </suite>
+  <suite launcher="WRTLauncher" name="tct-trace-native-utc">
+    <auto_tcn>5</auto_tcn>
+    <manual_tcn>0</manual_tcn>
+    <total_tcn>5</total_tcn>
+    <pkg_name>tv/tct-trace-native-utc-2.4.zip</pkg_name>
+  </suite>
+  <suite launcher="WRTLauncher" name="tct-libfeedback-native-itc">
+    <auto_tcn>4</auto_tcn>
+    <manual_tcn>0</manual_tcn>
+    <total_tcn>4</total_tcn>
+    <pkg_name>tv/tct-libfeedback-native-itc-2.4.zip</pkg_name>
+  </suite>
+  <suite launcher="WRTLauncher" name="tct-service-adaptor-client-native-itc">
+    <auto_tcn>24</auto_tcn>
+    <manual_tcn>0</manual_tcn>
+    <total_tcn>24</total_tcn>
+    <pkg_name>tv/tct-service-adaptor-client-native-itc-2.4.zip</pkg_name>
+  </suite>
+  <suite launcher="WRTLauncher" name="tct-connection-native-itc">
+    <auto_tcn>61</auto_tcn>
+    <manual_tcn>0</manual_tcn>
+    <total_tcn>61</total_tcn>
+    <pkg_name>tv/tct-connection-native-itc-2.4.zip</pkg_name>
+  </suite>
+  <suite launcher="WRTLauncher" name="tct-capi-message-port-native-itc">
+    <auto_tcn>6</auto_tcn>
+    <manual_tcn>0</manual_tcn>
+    <total_tcn>6</total_tcn>
+    <pkg_name>tv/tct-capi-message-port-native-itc-2.4.zip</pkg_name>
+  </suite>
+  <suite launcher="WRTLauncher" name="tct-image-util-native-itc">
+    <auto_tcn>14</auto_tcn>
+    <manual_tcn>0</manual_tcn>
+    <total_tcn>14</total_tcn>
+    <pkg_name>tv/tct-image-util-native-itc-2.4.zip</pkg_name>
+  </suite>
+  <suite launcher="WRTLauncher" name="tct-audio-io-native-ctc">
+    <auto_tcn>1</auto_tcn>
+    <manual_tcn>0</manual_tcn>
+    <total_tcn>1</total_tcn>
+    <pkg_name>tv/tct-audio-io-native-ctc-2.4.zip</pkg_name>
+  </suite>
+  <suite launcher="WRTLauncher" name="tct-media-controller-native-itc">
+    <auto_tcn>28</auto_tcn>
+    <manual_tcn>0</manual_tcn>
+    <total_tcn>28</total_tcn>
+    <pkg_name>tv/tct-media-controller-native-itc-2.4.zip</pkg_name>
+  </suite>
+  <suite launcher="WRTLauncher" name="tct-tbm-native-itc">
+    <auto_tcn>7</auto_tcn>
+    <manual_tcn>0</manual_tcn>
+    <total_tcn>7</total_tcn>
+    <pkg_name>tv/tct-tbm-native-itc-2.4.zip</pkg_name>
+  </suite>
+  <suite launcher="WRTLauncher" name="tct-recorder-native-itc">
+    <auto_tcn>33</auto_tcn>
+    <manual_tcn>0</manual_tcn>
+    <total_tcn>33</total_tcn>
+    <pkg_name>tv/tct-recorder-native-itc-2.4.zip</pkg_name>
+  </suite>
+  <suite launcher="WRTLauncher" name="tct-sound-manager-native-utc">
+    <auto_tcn>71</auto_tcn>
+    <manual_tcn>0</manual_tcn>
+    <total_tcn>71</total_tcn>
+    <pkg_name>tv/tct-sound-manager-native-utc-2.4.zip</pkg_name>
+  </suite>
+  <suite launcher="WRTLauncher" name="tct-service-adaptor-client-native-utc">
+    <auto_tcn>127</auto_tcn>
+    <manual_tcn>0</manual_tcn>
+    <total_tcn>127</total_tcn>
+    <pkg_name>tv/tct-service-adaptor-client-native-utc-2.4.zip</pkg_name>
+  </suite>
+  <suite launcher="WRTLauncher" name="tct-efl-util-native-itc">
+    <auto_tcn>3</auto_tcn>
+    <manual_tcn>0</manual_tcn>
+    <total_tcn>3</total_tcn>
+    <pkg_name>tv/tct-efl-util-native-itc-2.4.zip</pkg_name>
+  </suite>
+  <suite launcher="WRTLauncher" name="tct-url-download-native-itc">
+    <auto_tcn>27</auto_tcn>
+    <manual_tcn>0</manual_tcn>
+    <total_tcn>27</total_tcn>
+    <pkg_name>tv/tct-url-download-native-itc-2.4.zip</pkg_name>
+  </suite>
+  <suite launcher="WRTLauncher" name="tct-data-control-native-itc">
+    <auto_tcn>33</auto_tcn>
+    <manual_tcn>0</manual_tcn>
+    <total_tcn>33</total_tcn>
+    <pkg_name>tv/tct-data-control-native-itc-2.4.zip</pkg_name>
+  </suite>
+</ns3:testplan>
diff --git a/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/shell/plan/Native_Full_tv_3.0.xml b/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/shell/plan/Native_Full_tv_3.0.xml
new file mode 100755 (executable)
index 0000000..0b5d475
--- /dev/null
@@ -0,0 +1,803 @@
+<?xml version="1.0" encoding="UTF-8"?>\r
+<ns3:testplan xmlns:ns3="http://www.example.org/plan/" xmlns="" name="Native_Full_tv_3.0" profile="tv">\r
+  <execute_type>Auto</execute_type>\r
+  <suite name="tct-connection-native-utc" category=" UnitTestCases ">\r
+    <auto_tcn>172</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>172</total_tcn>\r
+    <pkg_name>tv/tct-connection-native-utc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-webkit2-native-utc" category=" UnitTestCases ">\r
+    <auto_tcn>206</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>206</total_tcn>\r
+    <pkg_name>tv/tct-webkit2-native-utc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-privilege-info-native-utc" category=" UnitTestCases ">\r
+    <auto_tcn>14</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>14</total_tcn>\r
+    <pkg_name>tv/tct-privilege-info-native-utc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-dali-adaptor-native-utc" category=" UnitTestCases ">\r
+    <auto_tcn>96</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>96</total_tcn>\r
+    <pkg_name>tv/tct-dali-adaptor-native-utc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-mtp-native-itc" category=" IntegrationTestCases ">\r
+    <auto_tcn>1</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>1</total_tcn>\r
+    <pkg_name>tv/tct-mtp-native-itc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-native-common-native-itc" category=" IntegrationTestCases ">\r
+    <auto_tcn>2</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>2</total_tcn>\r
+    <pkg_name>tv/tct-native-common-native-itc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-wav-player-native-itc" category=" IntegrationTestCases ">\r
+    <auto_tcn>2</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>2</total_tcn>\r
+    <pkg_name>tv/tct-wav-player-native-itc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-capi-ui-inputmethod-manager-native-utc" category=" UnitTestCases ">\r
+    <auto_tcn>7</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>7</total_tcn>\r
+    <pkg_name>tv/tct-capi-ui-inputmethod-manager-native-utc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-wifi-direct-native-utc" category=" UnitTestCases ">\r
+    <auto_tcn>140</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>140</total_tcn>\r
+    <pkg_name>tv/tct-wifi-direct-native-utc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-mediademuxer-native-utc" category=" UnitTestCases ">\r
+    <auto_tcn>36</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>36</total_tcn>\r
+    <pkg_name>tv/tct-mediademuxer-native-utc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-capi-message-port-native-itc" category=" IntegrationTestCases ">\r
+    <auto_tcn>6</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>6</total_tcn>\r
+    <pkg_name>tv/tct-capi-message-port-native-itc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-push-native-itc" category=" IntegrationTestCases ">\r
+    <auto_tcn>12</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>12</total_tcn>\r
+    <pkg_name>tv/tct-push-native-itc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-appcore-agent-native-itc" category=" IntegrationTestCases ">\r
+    <auto_tcn>2</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>2</total_tcn>\r
+    <pkg_name>tv/tct-appcore-agent-native-itc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-camera-native-utc" category=" UnitTestCases ">\r
+    <auto_tcn>348</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>348</total_tcn>\r
+    <pkg_name>tv/tct-camera-native-utc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-thumbnail-util-native-itc" category=" IntegrationTestCases ">\r
+    <auto_tcn>6</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>6</total_tcn>\r
+    <pkg_name>tv/tct-thumbnail-util-native-itc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-tbm-native-utc" category=" UnitTestCases ">\r
+    <auto_tcn>17</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>17</total_tcn>\r
+    <pkg_name>tv/tct-tbm-native-utc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-libstorage-native-ctc" category=" CompatibilityTestCases ">\r
+    <auto_tcn>2</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>2</total_tcn>\r
+    <pkg_name>tv/tct-libstorage-native-ctc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-accounts-svc-native-itc" category=" IntegrationTestCases ">\r
+    <auto_tcn>48</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>48</total_tcn>\r
+    <pkg_name>tv/tct-accounts-svc-native-itc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-phonenumber-utils-native-utc" category=" UnitTestCases ">\r
+    <auto_tcn>11</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>11</total_tcn>\r
+    <pkg_name>tv/tct-phonenumber-utils-native-utc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-native-common-native-utc" category=" UnitTestCases ">\r
+    <auto_tcn>5</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>5</total_tcn>\r
+    <pkg_name>tv/tct-native-common-native-utc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-metadata-editor-native-utc" category=" UnitTestCases ">\r
+    <auto_tcn>18</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>18</total_tcn>\r
+    <pkg_name>tv/tct-metadata-editor-native-utc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-mediacodec-native-utc" category=" UnitTestCases ">\r
+    <auto_tcn>49</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>49</total_tcn>\r
+    <pkg_name>tv/tct-mediacodec-native-utc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-calendar-service2-native-itc" category=" IntegrationTestCases ">\r
+    <auto_tcn>58</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>58</total_tcn>\r
+    <pkg_name>tv/tct-calendar-service2-native-itc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-mediacodec-native-itc" category=" IntegrationTestCases ">\r
+    <auto_tcn>17</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>17</total_tcn>\r
+    <pkg_name>tv/tct-mediacodec-native-itc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-capi-media-streamer-native-utc" category=" UnitTestCases ">\r
+    <auto_tcn>82</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>82</total_tcn>\r
+    <pkg_name>tv/tct-capi-media-streamer-native-utc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-key-manager-native-utc" category=" UnitTestCases ">\r
+    <auto_tcn>127</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>127</total_tcn>\r
+    <pkg_name>tv/tct-key-manager-native-utc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-media-content-native-utc" category=" UnitTestCases ">\r
+    <auto_tcn>526</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>526</total_tcn>\r
+    <pkg_name>tv/tct-media-content-native-utc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-opengl-native-ctc" category=" CompatibilityTestCases ">\r
+    <auto_tcn>3</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>3</total_tcn>\r
+    <pkg_name>tv/tct-opengl-native-ctc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-sound-manager-native-itc" category=" IntegrationTestCases ">\r
+    <auto_tcn>23</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>23</total_tcn>\r
+    <pkg_name>tv/tct-sound-manager-native-itc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-media-controller-native-utc" category=" UnitTestCases ">\r
+    <auto_tcn>85</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>85</total_tcn>\r
+    <pkg_name>tv/tct-media-controller-native-utc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-efl-ext-native-itc" category=" IntegrationTestCases ">\r
+    <auto_tcn>1</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>1</total_tcn>\r
+    <pkg_name>tv/tct-efl-ext-native-itc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-voice-control-elm-native-itc" category=" IntegrationTestCases ">\r
+    <auto_tcn>13</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>13</total_tcn>\r
+    <pkg_name>tv/tct-voice-control-elm-native-itc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-metadata-extractor-native-utc" category=" UnitTestCases ">\r
+    <auto_tcn>23</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>23</total_tcn>\r
+    <pkg_name>tv/tct-metadata-extractor-native-utc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-camera-native-itc" category=" IntegrationTestCases ">\r
+    <auto_tcn>82</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>82</total_tcn>\r
+    <pkg_name>tv/tct-camera-native-itc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-screen-mirroring-native-itc" category=" IntegrationTestCases ">\r
+    <auto_tcn>5</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>5</total_tcn>\r
+    <pkg_name>tv/tct-screen-mirroring-native-itc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-video-util-native-itc" category=" IntegrationTestCases ">\r
+    <auto_tcn>14</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>14</total_tcn>\r
+    <pkg_name>tv/tct-video-util-native-itc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-push-native-utc" category=" UnitTestCases ">\r
+    <auto_tcn>28</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>28</total_tcn>\r
+    <pkg_name>tv/tct-push-native-utc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-dlog-native-utc" category=" UnitTestCases ">\r
+    <auto_tcn>4</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>4</total_tcn>\r
+    <pkg_name>tv/tct-dlog-native-utc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-app-manager-native-itc" category=" IntegrationTestCases ">\r
+    <auto_tcn>42</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>42</total_tcn>\r
+    <pkg_name>tv/tct-app-manager-native-itc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-audio-io-native-utc" category=" UnitTestCases ">\r
+    <auto_tcn>94</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>94</total_tcn>\r
+    <pkg_name>tv/tct-audio-io-native-utc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-package-manager-native-utc" category=" UnitTestCases ">\r
+    <auto_tcn>92</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>92</total_tcn>\r
+    <pkg_name>tv/tct-package-manager-native-utc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-player-native-ctc" category=" CompatibilityTestCases ">\r
+    <auto_tcn>4</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>4</total_tcn>\r
+    <pkg_name>tv/tct-player-native-ctc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-mediatool-native-utc" category=" UnitTestCases ">\r
+    <auto_tcn>133</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>133</total_tcn>\r
+    <pkg_name>tv/tct-mediatool-native-utc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-dali-core-native-itc" category=" IntegrationTestCases ">\r
+    <auto_tcn>864</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>864</total_tcn>\r
+    <pkg_name>tv/tct-dali-core-native-itc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-sync-manager-native-utc" category=" UnitTestCases ">\r
+    <auto_tcn>28</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>28</total_tcn>\r
+    <pkg_name>tv/tct-sync-manager-native-utc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-efl-util-native-itc" category=" IntegrationTestCases ">\r
+    <auto_tcn>5</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>5</total_tcn>\r
+    <pkg_name>tv/tct-efl-util-native-itc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-efl-ext-native-utc" category=" UnitTestCases ">\r
+    <auto_tcn>14</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>14</total_tcn>\r
+    <pkg_name>tv/tct-efl-ext-native-utc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-wifi-native-utc" category=" UnitTestCases ">\r
+    <auto_tcn>208</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>208</total_tcn>\r
+    <pkg_name>tv/tct-wifi-native-utc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-capi-mediamuxer-native-itc" category=" IntegrationTestCases ">\r
+    <auto_tcn>9</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>9</total_tcn>\r
+    <pkg_name>tv/tct-capi-mediamuxer-native-itc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-video-util-native-ctc" category=" CompatibilityTestCases ">\r
+    <auto_tcn>6</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>6</total_tcn>\r
+    <pkg_name>tv/tct-video-util-native-ctc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-bundle-native-itc" category=" IntegrationTestCases ">\r
+    <auto_tcn>9</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>9</total_tcn>\r
+    <pkg_name>tv/tct-bundle-native-itc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-bundle-native-utc" category=" UnitTestCases ">\r
+    <auto_tcn>53</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>53</total_tcn>\r
+    <pkg_name>tv/tct-bundle-native-utc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-libstorage-native-utc" category=" UnitTestCases ">\r
+    <auto_tcn>31</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>31</total_tcn>\r
+    <pkg_name>tv/tct-libstorage-native-utc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-mime-type-native-utc" category=" UnitTestCases ">\r
+    <auto_tcn>15</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>15</total_tcn>\r
+    <pkg_name>tv/tct-mime-type-native-utc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-url-download-native-itc" category=" IntegrationTestCases ">\r
+    <auto_tcn>27</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>27</total_tcn>\r
+    <pkg_name>tv/tct-url-download-native-itc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-capi-ui-inputmethod-native-utc" category=" UnitTestCases ">\r
+    <auto_tcn>99</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>99</total_tcn>\r
+    <pkg_name>tv/tct-capi-ui-inputmethod-native-utc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-application-native-itc" category=" IntegrationTestCases ">\r
+    <auto_tcn>55</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>55</total_tcn>\r
+    <pkg_name>tv/tct-application-native-itc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-contacts-service2-native-utc" category=" UnitTestCases ">\r
+    <auto_tcn>198</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>198</total_tcn>\r
+    <pkg_name>tv/tct-contacts-service2-native-utc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-player-native-utc" category=" UnitTestCases ">\r
+    <auto_tcn>191</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>191</total_tcn>\r
+    <pkg_name>tv/tct-player-native-utc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-voice-control-elm-native-utc" category=" UnitTestCases ">\r
+    <auto_tcn>71</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>71</total_tcn>\r
+    <pkg_name>tv/tct-voice-control-elm-native-utc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-appcore-agent-native-utc" category=" UnitTestCases ">\r
+    <auto_tcn>11</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>11</total_tcn>\r
+    <pkg_name>tv/tct-appcore-agent-native-utc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-system-info-native-utc" category=" UnitTestCases ">\r
+    <auto_tcn>12</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>12</total_tcn>\r
+    <pkg_name>tv/tct-system-info-native-utc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-context-native-utc" category=" UnitTestCases ">\r
+    <auto_tcn>82</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>82</total_tcn>\r
+    <pkg_name>tv/tct-context-native-utc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-application-native-utc" category=" UnitTestCases ">\r
+    <auto_tcn>268</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>268</total_tcn>\r
+    <pkg_name>tv/tct-application-native-utc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-data-control-native-utc" category=" UnitTestCases ">\r
+    <auto_tcn>89</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>89</total_tcn>\r
+    <pkg_name>tv/tct-data-control-native-utc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-wifi-direct-native-itc" category=" IntegrationTestCases ">\r
+    <auto_tcn>38</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>38</total_tcn>\r
+    <pkg_name>tv/tct-wifi-direct-native-itc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-tts-native-utc" category=" UnitTestCases ">\r
+    <auto_tcn>104</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>104</total_tcn>\r
+    <pkg_name>tv/tct-tts-native-utc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-metadata-extractor-native-itc" category=" IntegrationTestCases ">\r
+    <auto_tcn>8</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>8</total_tcn>\r
+    <pkg_name>tv/tct-metadata-extractor-native-itc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-capi-message-port-native-utc" category=" UnitTestCases ">\r
+    <auto_tcn>52</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>52</total_tcn>\r
+    <pkg_name>tv/tct-capi-message-port-native-utc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-video-util-native-utc" category=" UnitTestCases ">\r
+    <auto_tcn>43</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>43</total_tcn>\r
+    <pkg_name>tv/tct-video-util-native-utc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-sound-manager-native-ctc" category=" CompatibilityTestCases ">\r
+    <auto_tcn>1</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>1</total_tcn>\r
+    <pkg_name>tv/tct-sound-manager-native-ctc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-calendar-service2-native-utc" category=" UnitTestCases ">\r
+    <auto_tcn>149</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>149</total_tcn>\r
+    <pkg_name>tv/tct-calendar-service2-native-utc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-image-util-native-utc" category=" UnitTestCases ">\r
+    <auto_tcn>206</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>206</total_tcn>\r
+    <pkg_name>tv/tct-image-util-native-utc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-capi-ui-inputmethod-manager-native-itc" category=" IntegrationTestCases ">\r
+    <auto_tcn>2</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>2</total_tcn>\r
+    <pkg_name>tv/tct-capi-ui-inputmethod-manager-native-itc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-media-key-native-itc" category=" IntegrationTestCases ">\r
+    <auto_tcn>1</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>1</total_tcn>\r
+    <pkg_name>tv/tct-media-key-native-itc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-metadata-editor-native-itc" category=" IntegrationTestCases ">\r
+    <auto_tcn>7</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>7</total_tcn>\r
+    <pkg_name>tv/tct-metadata-editor-native-itc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-dlog-native-itc" category=" IntegrationTestCases ">\r
+    <auto_tcn>2</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>2</total_tcn>\r
+    <pkg_name>tv/tct-dlog-native-itc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-runtime-info-native-itc" category=" IntegrationTestCases ">\r
+    <auto_tcn>8</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>8</total_tcn>\r
+    <pkg_name>tv/tct-runtime-info-native-itc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-dali-toolkit-native-itc" category=" IntegrationTestCases ">\r
+    <auto_tcn>238</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>238</total_tcn>\r
+    <pkg_name>tv/tct-dali-toolkit-native-itc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-efl-util-native-utc" category=" UnitTestCases ">\r
+    <auto_tcn>45</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>45</total_tcn>\r
+    <pkg_name>tv/tct-efl-util-native-utc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-audio-io-native-ctc" category=" CompatibilityTestCases ">\r
+    <auto_tcn>1</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>1</total_tcn>\r
+    <pkg_name>tv/tct-audio-io-native-ctc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-oauth2-native-itc" category=" IntegrationTestCases ">\r
+    <auto_tcn>18</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>18</total_tcn>\r
+    <pkg_name>tv/tct-oauth2-native-itc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-recorder-native-itc" category=" IntegrationTestCases ">\r
+    <auto_tcn>33</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>33</total_tcn>\r
+    <pkg_name>tv/tct-recorder-native-itc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-dali-toolkit-native-utc" category=" UnitTestCases ">\r
+    <auto_tcn>435</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>435</total_tcn>\r
+    <pkg_name>tv/tct-dali-toolkit-native-utc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-mediacodec-native-ctc" category=" CompatibilityTestCases ">\r
+    <auto_tcn>1</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>1</total_tcn>\r
+    <pkg_name>tv/tct-mediacodec-native-ctc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-player-native-itc" category=" IntegrationTestCases ">\r
+    <auto_tcn>47</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>47</total_tcn>\r
+    <pkg_name>tv/tct-player-native-itc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-mime-type-native-itc" category=" IntegrationTestCases ">\r
+    <auto_tcn>2</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>2</total_tcn>\r
+    <pkg_name>tv/tct-mime-type-native-itc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-media-controller-native-itc" category=" IntegrationTestCases ">\r
+    <auto_tcn>28</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>28</total_tcn>\r
+    <pkg_name>tv/tct-media-controller-native-itc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-system-info-native-ctc" category=" CompatibilityTestCases ">\r
+    <auto_tcn>4</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>4</total_tcn>\r
+    <pkg_name>tv/tct-system-info-native-ctc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-thumbnail-util-native-utc" category=" UnitTestCases ">\r
+    <auto_tcn>14</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>14</total_tcn>\r
+    <pkg_name>tv/tct-thumbnail-util-native-utc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-key-manager-native-itc" category=" IntegrationTestCases ">\r
+    <auto_tcn>40</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>40</total_tcn>\r
+    <pkg_name>tv/tct-key-manager-native-itc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-connection-native-ctc" category=" CompatibilityTestCases ">\r
+    <auto_tcn>1</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>1</total_tcn>\r
+    <pkg_name>tv/tct-connection-native-ctc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-runtime-info-native-ctc" category=" CompatibilityTestCases ">\r
+    <auto_tcn>15</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>15</total_tcn>\r
+    <pkg_name>tv/tct-runtime-info-native-ctc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-tts-native-itc" category=" IntegrationTestCases ">\r
+    <auto_tcn>14</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>14</total_tcn>\r
+    <pkg_name>tv/tct-tts-native-itc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-wifi-native-itc" category=" IntegrationTestCases ">\r
+    <auto_tcn>45</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>45</total_tcn>\r
+    <pkg_name>tv/tct-wifi-native-itc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-oauth2-native-utc" category=" UnitTestCases ">\r
+    <auto_tcn>89</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>89</total_tcn>\r
+    <pkg_name>tv/tct-oauth2-native-utc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-sync-manager-native-itc" category=" IntegrationTestCases ">\r
+    <auto_tcn>5</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>5</total_tcn>\r
+    <pkg_name>tv/tct-sync-manager-native-itc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-libstorage-native-itc" category=" IntegrationTestCases ">\r
+    <auto_tcn>10</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>10</total_tcn>\r
+    <pkg_name>tv/tct-libstorage-native-itc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-wifi-direct-native-ctc" category=" CompatibilityTestCases ">\r
+    <auto_tcn>1</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>1</total_tcn>\r
+    <pkg_name>tv/tct-wifi-direct-native-ctc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-accounts-svc-native-utc" category=" UnitTestCases ">\r
+    <auto_tcn>144</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>144</total_tcn>\r
+    <pkg_name>tv/tct-accounts-svc-native-utc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-url-download-native-utc" category=" UnitTestCases ">\r
+    <auto_tcn>121</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>121</total_tcn>\r
+    <pkg_name>tv/tct-url-download-native-utc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-stt-native-utc" category=" UnitTestCases ">\r
+    <auto_tcn>88</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>88</total_tcn>\r
+    <pkg_name>tv/tct-stt-native-utc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-stt-native-itc" category=" IntegrationTestCases ">\r
+    <auto_tcn>20</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>20</total_tcn>\r
+    <pkg_name>tv/tct-stt-native-itc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-recorder-native-utc" category=" UnitTestCases ">\r
+    <auto_tcn>151</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>151</total_tcn>\r
+    <pkg_name>tv/tct-recorder-native-utc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-voice-control-native-itc" category=" IntegrationTestCases ">\r
+    <auto_tcn>22</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>22</total_tcn>\r
+    <pkg_name>tv/tct-voice-control-native-itc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-context-native-itc" category=" IntegrationTestCases ">\r
+    <auto_tcn>29</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>29</total_tcn>\r
+    <pkg_name>tv/tct-context-native-itc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-runtime-info-native-utc" category=" UnitTestCases ">\r
+    <auto_tcn>126</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>126</total_tcn>\r
+    <pkg_name>tv/tct-runtime-info-native-utc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-capi-mediademuxer-native-itc" category=" IntegrationTestCases ">\r
+    <auto_tcn>12</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>12</total_tcn>\r
+    <pkg_name>tv/tct-capi-mediademuxer-native-itc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-bluetooth-native-utc" category=" UnitTestCases ">\r
+    <auto_tcn>169</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>169</total_tcn>\r
+    <pkg_name>tv/tct-bluetooth-native-utc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-dali-core-native-utc" category=" UnitTestCases ">\r
+    <auto_tcn>1645</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>1645</total_tcn>\r
+    <pkg_name>tv/tct-dali-core-native-utc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-capi-media-tool-native-itc" category=" IntegrationTestCases ">\r
+    <auto_tcn>51</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>51</total_tcn>\r
+    <pkg_name>tv/tct-capi-media-tool-native-itc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-package-manager-native-itc" category=" IntegrationTestCases ">\r
+    <auto_tcn>38</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>38</total_tcn>\r
+    <pkg_name>tv/tct-package-manager-native-itc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-dali-adaptor-native-itc" category=" IntegrationTestCases ">\r
+    <auto_tcn>16</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>16</total_tcn>\r
+    <pkg_name>tv/tct-dali-adaptor-native-itc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-media-content-native-itc" category=" IntegrationTestCases ">\r
+    <auto_tcn>200</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>200</total_tcn>\r
+    <pkg_name>tv/tct-media-content-native-itc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-tbm-native-itc" category=" IntegrationTestCases ">\r
+    <auto_tcn>7</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>7</total_tcn>\r
+    <pkg_name>tv/tct-tbm-native-itc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-webkit2-native-itc" category=" IntegrationTestCases ">\r
+    <auto_tcn>86</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>86</total_tcn>\r
+    <pkg_name>tv/tct-webkit2-native-itc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-capi-media-streamer-native-itc" category=" IntegrationTestCases ">\r
+    <auto_tcn>14</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>14</total_tcn>\r
+    <pkg_name>tv/tct-capi-media-streamer-native-itc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-sound-manager-native-utc" category=" UnitTestCases ">\r
+    <auto_tcn>101</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>101</total_tcn>\r
+    <pkg_name>tv/tct-sound-manager-native-utc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-voice-control-native-utc" category=" UnitTestCases ">\r
+    <auto_tcn>97</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>97</total_tcn>\r
+    <pkg_name>tv/tct-voice-control-native-utc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-contacts-service2-native-itc" category=" IntegrationTestCases ">\r
+    <auto_tcn>81</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>81</total_tcn>\r
+    <pkg_name>tv/tct-contacts-service2-native-itc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-audio-io-native-itc" category=" IntegrationTestCases ">\r
+    <auto_tcn>32</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>32</total_tcn>\r
+    <pkg_name>tv/tct-audio-io-native-itc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-app-manager-native-utc" category=" UnitTestCases ">\r
+    <auto_tcn>121</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>121</total_tcn>\r
+    <pkg_name>tv/tct-app-manager-native-utc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-screen-mirroring-native-utc" category=" UnitTestCases ">\r
+    <auto_tcn>55</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>55</total_tcn>\r
+    <pkg_name>tv/tct-screen-mirroring-native-utc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-image-util-native-ctc" category=" CompatibilityTestCases ">\r
+    <auto_tcn>2</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>2</total_tcn>\r
+    <pkg_name>tv/tct-image-util-native-ctc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-privilege-info-native-itc" category=" IntegrationTestCases ">\r
+    <auto_tcn>4</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>4</total_tcn>\r
+    <pkg_name>tv/tct-privilege-info-native-itc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-image-util-native-itc" category=" IntegrationTestCases ">\r
+    <auto_tcn>32</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>32</total_tcn>\r
+    <pkg_name>tv/tct-image-util-native-itc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-mediamuxer-native-utc" category=" UnitTestCases ">\r
+    <auto_tcn>30</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>30</total_tcn>\r
+    <pkg_name>tv/tct-mediamuxer-native-utc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-media-key-native-utc" category=" UnitTestCases ">\r
+    <auto_tcn>3</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>3</total_tcn>\r
+    <pkg_name>tv/tct-media-key-native-utc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-wav-player-native-utc" category=" UnitTestCases ">\r
+    <auto_tcn>13</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>13</total_tcn>\r
+    <pkg_name>tv/tct-wav-player-native-utc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-phonenumber-utils-native-itc" category=" IntegrationTestCases ">\r
+    <auto_tcn>4</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>4</total_tcn>\r
+    <pkg_name>tv/tct-phonenumber-utils-native-itc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-bluetooth-native-itc" category=" IntegrationTestCases ">\r
+    <auto_tcn>20</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>20</total_tcn>\r
+    <pkg_name>tv/tct-bluetooth-native-itc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-system-info-native-itc" category=" IntegrationTestCases ">\r
+    <auto_tcn>4</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>4</total_tcn>\r
+    <pkg_name>tv/tct-system-info-native-itc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-data-control-native-itc" category=" IntegrationTestCases ">\r
+    <auto_tcn>33</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>33</total_tcn>\r
+    <pkg_name>tv/tct-data-control-native-itc-3.0.zip</pkg_name>\r
+  </suite>\r
+</ns3:testplan>\r
+\r
diff --git a/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/shell/plan/Native_Full_wearable_2.3.2.xml b/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/shell/plan/Native_Full_wearable_2.3.2.xml
new file mode 100755 (executable)
index 0000000..8dd1ab3
--- /dev/null
@@ -0,0 +1,773 @@
+<?xml version="1.0" encoding="UTF-8"?>\r
+<ns3:testplan xmlns:ns3="http://www.example.org/plan/" xmlns="" name="Native_Full_wearable_2.3.2" profile="wearable">\r
+  <execute_type>Auto</execute_type>\r
+  <suite name="tct-connection-native-utc" category=" UnitTestCases ">\r
+    <auto_tcn>162</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>162</total_tcn>\r
+    <pkg_name>wearable/tct-connection-native-utc-2.3.2.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-webkit2-native-utc" category=" UnitTestCases ">\r
+    <auto_tcn>175</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>175</total_tcn>\r
+    <pkg_name>wearable/tct-webkit2-native-utc-2.3.2.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-privilege-info-native-utc" category=" UnitTestCases ">\r
+    <auto_tcn>14</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>14</total_tcn>\r
+    <pkg_name>wearable/tct-privilege-info-native-utc-2.3.2.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-native-common-native-itc" category=" IntegrationTestCases ">\r
+    <auto_tcn>2</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>2</total_tcn>\r
+    <pkg_name>wearable/tct-native-common-native-itc-2.3.2.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-wav-player-native-itc" category=" IntegrationTestCases ">\r
+    <auto_tcn>1</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>1</total_tcn>\r
+    <pkg_name>wearable/tct-wav-player-native-itc-2.3.2.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-messages-native-itc" category=" IntegrationTestCases ">\r
+    <auto_tcn>18</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>18</total_tcn>\r
+    <pkg_name>wearable/tct-messages-native-itc-2.3.2.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-filesystem-permission-native-ctc" category=" CompatibilityTestCases ">\r
+    <auto_tcn>32</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>32</total_tcn>\r
+    <pkg_name>wearable/tct-filesystem-permission-native-ctc-2.3.2.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-badge-native-utc" category=" UnitTestCases ">\r
+    <auto_tcn>14</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>14</total_tcn>\r
+    <pkg_name>wearable/tct-badge-native-utc-2.3.2.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-capi-message-port-native-itc" category=" IntegrationTestCases ">\r
+    <auto_tcn>8</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>8</total_tcn>\r
+    <pkg_name>wearable/tct-capi-message-port-native-itc-2.3.2.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-system-settings-native-itc" category=" IntegrationTestCases ">\r
+    <auto_tcn>4</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>4</total_tcn>\r
+    <pkg_name>wearable/tct-system-settings-native-itc-2.3.2.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-messages-native-utc" category=" UnitTestCases ">\r
+    <auto_tcn>85</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>85</total_tcn>\r
+    <pkg_name>wearable/tct-messages-native-utc-2.3.2.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-push-native-itc" category=" IntegrationTestCases ">\r
+    <auto_tcn>12</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>12</total_tcn>\r
+    <pkg_name>wearable/tct-push-native-itc-2.3.2.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-capi-media-tool-native-utc" category=" UnitTestCases ">\r
+    <auto_tcn>94</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>94</total_tcn>\r
+    <pkg_name>wearable/tct-capi-media-tool-native-utc-2.3.2.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-widget-viewer-evas-native-utc" category=" UnitTestCases ">\r
+    <auto_tcn>50</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>50</total_tcn>\r
+    <pkg_name>wearable/tct-widget-viewer-evas-native-utc-2.3.2.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-sensor-native-ctc" category=" CompatibilityTestCases ">\r
+    <auto_tcn>9</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>9</total_tcn>\r
+    <pkg_name>wearable/tct-sensor-native-ctc-2.3.2.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-appcore-agent-native-itc" category=" IntegrationTestCases ">\r
+    <auto_tcn>2</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>2</total_tcn>\r
+    <pkg_name>wearable/tct-appcore-agent-native-itc-2.3.2.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-appcore-watch-native-utc" category=" UnitTestCases ">\r
+    <auto_tcn>37</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>37</total_tcn>\r
+    <pkg_name>wearable/tct-appcore-watch-native-utc-2.3.2.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-radio-native-utc" category=" UnitTestCases ">\r
+    <auto_tcn>36</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>36</total_tcn>\r
+    <pkg_name>wearable/tct-radio-native-utc-2.3.2.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-location-manager-native-utc" category=" UnitTestCases ">\r
+    <auto_tcn>194</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>194</total_tcn>\r
+    <pkg_name>wearable/tct-location-manager-native-utc-2.3.2.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-camera-native-utc" category=" UnitTestCases ">\r
+    <auto_tcn>320</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>320</total_tcn>\r
+    <pkg_name>wearable/tct-camera-native-utc-2.3.2.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-cairo-native-utc" category=" UnitTestCases ">\r
+    <auto_tcn>24</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>24</total_tcn>\r
+    <pkg_name>wearable/tct-cairo-native-utc-2.3.2.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-tbm-native-utc" category=" UnitTestCases ">\r
+    <auto_tcn>17</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>17</total_tcn>\r
+    <pkg_name>wearable/tct-tbm-native-utc-2.3.2.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-libstorage-native-ctc" category=" CompatibilityTestCases ">\r
+    <auto_tcn>2</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>2</total_tcn>\r
+    <pkg_name>wearable/tct-libstorage-native-ctc-2.3.2.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-telephony-native-utc" category=" UnitTestCases ">\r
+    <auto_tcn>67</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>67</total_tcn>\r
+    <pkg_name>wearable/tct-telephony-native-utc-2.3.2.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-native-common-native-utc" category=" UnitTestCases ">\r
+    <auto_tcn>5</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>5</total_tcn>\r
+    <pkg_name>wearable/tct-native-common-native-utc-2.3.2.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-appcore-widget-native-itc" category=" IntegrationTestCases ">\r
+    <auto_tcn>3</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>3</total_tcn>\r
+    <pkg_name>wearable/tct-appcore-widget-native-itc-2.3.2.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-base-utils-native-itc" category=" IntegrationTestCases ">\r
+    <auto_tcn>284</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>284</total_tcn>\r
+    <pkg_name>wearable/tct-base-utils-native-itc-2.3.2.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-context-manager-native-itc" category=" IntegrationTestCases ">\r
+    <auto_tcn>8</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>8</total_tcn>\r
+    <pkg_name>wearable/tct-context-manager-native-itc-2.3.2.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-mediacodec-native-utc" category=" UnitTestCases ">\r
+    <auto_tcn>39</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>39</total_tcn>\r
+    <pkg_name>wearable/tct-mediacodec-native-utc-2.3.2.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-mediacodec-native-itc" category=" IntegrationTestCases ">\r
+    <auto_tcn>13</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>13</total_tcn>\r
+    <pkg_name>wearable/tct-mediacodec-native-itc-2.3.2.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-key-manager-native-utc" category=" UnitTestCases ">\r
+    <auto_tcn>47</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>47</total_tcn>\r
+    <pkg_name>wearable/tct-key-manager-native-utc-2.3.2.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-media-content-native-utc" category=" UnitTestCases ">\r
+    <auto_tcn>418</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>418</total_tcn>\r
+    <pkg_name>wearable/tct-media-content-native-utc-2.3.2.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-opengl-native-ctc" category=" CompatibilityTestCases ">\r
+    <auto_tcn>3</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>3</total_tcn>\r
+    <pkg_name>wearable/tct-opengl-native-ctc-2.3.2.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-sound-manager-native-itc" category=" IntegrationTestCases ">\r
+    <auto_tcn>20</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>20</total_tcn>\r
+    <pkg_name>wearable/tct-sound-manager-native-itc-2.3.2.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-tone-player-native-utc" category=" UnitTestCases ">\r
+    <auto_tcn>4</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>4</total_tcn>\r
+    <pkg_name>wearable/tct-tone-player-native-utc-2.3.2.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-efl-ext-native-itc" category=" IntegrationTestCases ">\r
+    <auto_tcn>61</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>61</total_tcn>\r
+    <pkg_name>wearable/tct-efl-ext-native-itc-2.3.2.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-appcore-widget-native-utc" category=" UnitTestCases ">\r
+    <auto_tcn>20</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>20</total_tcn>\r
+    <pkg_name>wearable/tct-appcore-widget-native-utc-2.3.2.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-metadata-extractor-native-utc" category=" UnitTestCases ">\r
+    <auto_tcn>23</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>23</total_tcn>\r
+    <pkg_name>wearable/tct-metadata-extractor-native-utc-2.3.2.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-camera-native-itc" category=" IntegrationTestCases ">\r
+    <auto_tcn>78</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>78</total_tcn>\r
+    <pkg_name>wearable/tct-camera-native-itc-2.3.2.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-push-native-utc" category=" UnitTestCases ">\r
+    <auto_tcn>27</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>27</total_tcn>\r
+    <pkg_name>wearable/tct-push-native-utc-2.3.2.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-dlog-native-utc" category=" UnitTestCases ">\r
+    <auto_tcn>4</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>4</total_tcn>\r
+    <pkg_name>wearable/tct-dlog-native-utc-2.3.2.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-app-manager-native-itc" category=" IntegrationTestCases ">\r
+    <auto_tcn>36</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>36</total_tcn>\r
+    <pkg_name>wearable/tct-app-manager-native-itc-2.3.2.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-audio-io-native-utc" category=" UnitTestCases ">\r
+    <auto_tcn>66</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>66</total_tcn>\r
+    <pkg_name>wearable/tct-audio-io-native-utc-2.3.2.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-package-manager-native-utc" category=" UnitTestCases ">\r
+    <auto_tcn>72</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>72</total_tcn>\r
+    <pkg_name>wearable/tct-package-manager-native-utc-2.3.2.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-player-native-ctc" category=" CompatibilityTestCases ">\r
+    <auto_tcn>4</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>4</total_tcn>\r
+    <pkg_name>wearable/tct-player-native-ctc-2.3.2.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-efl-util-native-itc" category=" IntegrationTestCases ">\r
+    <auto_tcn>2</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>2</total_tcn>\r
+    <pkg_name>wearable/tct-efl-util-native-itc-2.3.2.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-efl-ext-native-utc" category=" UnitTestCases ">\r
+    <auto_tcn>192</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>192</total_tcn>\r
+    <pkg_name>wearable/tct-efl-ext-native-utc-2.3.2.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-wifi-native-utc" category=" UnitTestCases ">\r
+    <auto_tcn>148</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>148</total_tcn>\r
+    <pkg_name>wearable/tct-wifi-native-utc-2.3.2.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-sensor-native-utc" category=" UnitTestCases ">\r
+    <auto_tcn>96</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>96</total_tcn>\r
+    <pkg_name>wearable/tct-sensor-native-utc-2.3.2.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-bundle-native-itc" category=" IntegrationTestCases ">\r
+    <auto_tcn>8</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>8</total_tcn>\r
+    <pkg_name>wearable/tct-bundle-native-itc-2.3.2.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-bundle-native-utc" category=" UnitTestCases ">\r
+    <auto_tcn>50</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>50</total_tcn>\r
+    <pkg_name>wearable/tct-bundle-native-utc-2.3.2.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-libstorage-native-utc" category=" UnitTestCases ">\r
+    <auto_tcn>31</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>31</total_tcn>\r
+    <pkg_name>wearable/tct-libstorage-native-utc-2.3.2.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-mime-type-native-utc" category=" UnitTestCases ">\r
+    <auto_tcn>15</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>15</total_tcn>\r
+    <pkg_name>wearable/tct-mime-type-native-utc-2.3.2.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-application-native-itc" category=" IntegrationTestCases ">\r
+    <auto_tcn>47</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>47</total_tcn>\r
+    <pkg_name>wearable/tct-application-native-itc-2.3.2.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-camera-native-ctc" category=" CompatibilityTestCases ">\r
+    <auto_tcn>1</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>1</total_tcn>\r
+    <pkg_name>wearable/tct-camera-native-ctc-2.3.2.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-player-native-utc" category=" UnitTestCases ">\r
+    <auto_tcn>136</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>136</total_tcn>\r
+    <pkg_name>wearable/tct-player-native-utc-2.3.2.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-appcore-agent-native-utc" category=" UnitTestCases ">\r
+    <auto_tcn>8</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>8</total_tcn>\r
+    <pkg_name>wearable/tct-appcore-agent-native-utc-2.3.2.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-system-info-native-utc" category=" UnitTestCases ">\r
+    <auto_tcn>12</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>12</total_tcn>\r
+    <pkg_name>wearable/tct-system-info-native-utc-2.3.2.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-device-native-ctc" category=" CompatibilityTestCases ">\r
+    <auto_tcn>1</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>1</total_tcn>\r
+    <pkg_name>wearable/tct-device-native-ctc-2.3.2.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-radio-native-itc" category=" IntegrationTestCases ">\r
+    <auto_tcn>10</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>10</total_tcn>\r
+    <pkg_name>wearable/tct-radio-native-itc-2.3.2.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-application-native-utc" category=" UnitTestCases ">\r
+    <auto_tcn>186</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>186</total_tcn>\r
+    <pkg_name>wearable/tct-application-native-utc-2.3.2.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-context-manager-native-utc" category=" UnitTestCases ">\r
+    <auto_tcn>23</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>23</total_tcn>\r
+    <pkg_name>wearable/tct-context-manager-native-utc-2.3.2.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-data-control-native-utc" category=" UnitTestCases ">\r
+    <auto_tcn>60</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>60</total_tcn>\r
+    <pkg_name>wearable/tct-data-control-native-utc-2.3.2.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-tts-native-utc" category=" UnitTestCases ">\r
+    <auto_tcn>50</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>50</total_tcn>\r
+    <pkg_name>wearable/tct-tts-native-utc-2.3.2.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-system-settings-native-utc" category=" UnitTestCases ">\r
+    <auto_tcn>11</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>11</total_tcn>\r
+    <pkg_name>wearable/tct-system-settings-native-utc-2.3.2.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-metadata-extractor-native-itc" category=" IntegrationTestCases ">\r
+    <auto_tcn>8</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>8</total_tcn>\r
+    <pkg_name>wearable/tct-metadata-extractor-native-itc-2.3.2.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-capi-message-port-native-utc" category=" UnitTestCases ">\r
+    <auto_tcn>40</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>40</total_tcn>\r
+    <pkg_name>wearable/tct-capi-message-port-native-utc-2.3.2.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-device-native-utc" category=" UnitTestCases ">\r
+    <auto_tcn>59</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>59</total_tcn>\r
+    <pkg_name>wearable/tct-device-native-utc-2.3.2.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-sound-manager-native-ctc" category=" CompatibilityTestCases ">\r
+    <auto_tcn>1</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>1</total_tcn>\r
+    <pkg_name>wearable/tct-sound-manager-native-ctc-2.3.2.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-widget-viewer-evas-native-itc" category=" IntegrationTestCases ">\r
+    <auto_tcn>23</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>23</total_tcn>\r
+    <pkg_name>wearable/tct-widget-viewer-evas-native-itc-2.3.2.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-cairo-native-itc" category=" IntegrationTestCases ">\r
+    <auto_tcn>4</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>4</total_tcn>\r
+    <pkg_name>wearable/tct-cairo-native-itc-2.3.2.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-image-util-native-utc" category=" UnitTestCases ">\r
+    <auto_tcn>57</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>57</total_tcn>\r
+    <pkg_name>wearable/tct-image-util-native-utc-2.3.2.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-media-key-native-itc" category=" IntegrationTestCases ">\r
+    <auto_tcn>1</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>1</total_tcn>\r
+    <pkg_name>wearable/tct-media-key-native-itc-2.3.2.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-nfc-native-utc" category=" UnitTestCases ">\r
+    <auto_tcn>157</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>157</total_tcn>\r
+    <pkg_name>wearable/tct-nfc-native-utc-2.3.2.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-dlog-native-itc" category=" IntegrationTestCases ">\r
+    <auto_tcn>2</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>2</total_tcn>\r
+    <pkg_name>wearable/tct-dlog-native-itc-2.3.2.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-platform-permission-native-ctc" category=" CompatibilityTestCases ">\r
+    <auto_tcn>141</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>141</total_tcn>\r
+    <pkg_name>wearable/tct-platform-permission-native-ctc-2.3.2.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-runtime-info-native-itc" category=" IntegrationTestCases ">\r
+    <auto_tcn>4</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>4</total_tcn>\r
+    <pkg_name>wearable/tct-runtime-info-native-itc-2.3.2.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-efl-util-native-utc" category=" UnitTestCases ">\r
+    <auto_tcn>13</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>13</total_tcn>\r
+    <pkg_name>wearable/tct-efl-util-native-utc-2.3.2.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-audio-io-native-ctc" category=" CompatibilityTestCases ">\r
+    <auto_tcn>1</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>1</total_tcn>\r
+    <pkg_name>wearable/tct-audio-io-native-ctc-2.3.2.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-device-native-itc" category=" IntegrationTestCases ">\r
+    <auto_tcn>16</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>16</total_tcn>\r
+    <pkg_name>wearable/tct-device-native-itc-2.3.2.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-base-utils-native-utc" category=" UnitTestCases ">\r
+    <auto_tcn>645</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>645</total_tcn>\r
+    <pkg_name>wearable/tct-base-utils-native-utc-2.3.2.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-recorder-native-itc" category=" IntegrationTestCases ">\r
+    <auto_tcn>33</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>33</total_tcn>\r
+    <pkg_name>wearable/tct-recorder-native-itc-2.3.2.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-player-native-itc" category=" IntegrationTestCases ">\r
+    <auto_tcn>43</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>43</total_tcn>\r
+    <pkg_name>wearable/tct-player-native-itc-2.3.2.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-mime-type-native-itc" category=" IntegrationTestCases ">\r
+    <auto_tcn>2</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>2</total_tcn>\r
+    <pkg_name>wearable/tct-mime-type-native-itc-2.3.2.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-system-info-native-ctc" category=" CompatibilityTestCases ">\r
+    <auto_tcn>3</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>3</total_tcn>\r
+    <pkg_name>wearable/tct-system-info-native-ctc-2.3.2.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-key-manager-native-itc" category=" IntegrationTestCases ">\r
+    <auto_tcn>26</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>26</total_tcn>\r
+    <pkg_name>wearable/tct-key-manager-native-itc-2.3.2.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-connection-native-ctc" category=" CompatibilityTestCases ">\r
+    <auto_tcn>1</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>1</total_tcn>\r
+    <pkg_name>wearable/tct-connection-native-ctc-2.3.2.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-widget-service-native-itc" category=" IntegrationTestCases ">\r
+    <auto_tcn>18</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>18</total_tcn>\r
+    <pkg_name>wearable/tct-widget-service-native-itc-2.3.2.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-runtime-info-native-ctc" category=" CompatibilityTestCases ">\r
+    <auto_tcn>15</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>15</total_tcn>\r
+    <pkg_name>wearable/tct-runtime-info-native-ctc-2.3.2.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-smartcard-native-utc" category=" UnitTestCases ">\r
+    <auto_tcn>33</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>33</total_tcn>\r
+    <pkg_name>wearable/tct-smartcard-native-utc-2.3.2.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-tts-native-itc" category=" IntegrationTestCases ">\r
+    <auto_tcn>14</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>14</total_tcn>\r
+    <pkg_name>wearable/tct-tts-native-itc-2.3.2.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-badge-native-itc" category=" IntegrationTestCases ">\r
+    <auto_tcn>3</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>3</total_tcn>\r
+    <pkg_name>wearable/tct-badge-native-itc-2.3.2.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-appcore-watch-native-itc" category=" IntegrationTestCases ">\r
+    <auto_tcn>14</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>14</total_tcn>\r
+    <pkg_name>wearable/tct-appcore-watch-native-itc-2.3.2.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-smartcard-native-itc" category=" IntegrationTestCases ">\r
+    <auto_tcn>8</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>8</total_tcn>\r
+    <pkg_name>wearable/tct-smartcard-native-itc-2.3.2.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-wifi-native-itc" category=" IntegrationTestCases ">\r
+    <auto_tcn>46</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>46</total_tcn>\r
+    <pkg_name>wearable/tct-wifi-native-itc-2.3.2.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-libstorage-native-itc" category=" IntegrationTestCases ">\r
+    <auto_tcn>10</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>10</total_tcn>\r
+    <pkg_name>wearable/tct-libstorage-native-itc-2.3.2.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-stt-native-utc" category=" UnitTestCases ">\r
+    <auto_tcn>58</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>58</total_tcn>\r
+    <pkg_name>wearable/tct-stt-native-utc-2.3.2.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-stt-native-itc" category=" IntegrationTestCases ">\r
+    <auto_tcn>20</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>20</total_tcn>\r
+    <pkg_name>wearable/tct-stt-native-itc-2.3.2.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-recorder-native-utc" category=" UnitTestCases ">\r
+    <auto_tcn>114</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>114</total_tcn>\r
+    <pkg_name>wearable/tct-recorder-native-utc-2.3.2.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-runtime-info-native-utc" category=" UnitTestCases ">\r
+    <auto_tcn>114</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>114</total_tcn>\r
+    <pkg_name>wearable/tct-runtime-info-native-utc-2.3.2.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-bluetooth-native-utc" category=" UnitTestCases ">\r
+    <auto_tcn>263</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>263</total_tcn>\r
+    <pkg_name>wearable/tct-bluetooth-native-utc-2.3.2.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-capi-media-tool-native-itc" category=" IntegrationTestCases ">\r
+    <auto_tcn>37</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>37</total_tcn>\r
+    <pkg_name>wearable/tct-capi-media-tool-native-itc-2.3.2.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-location-manager-native-ctc" category=" CompatibilityTestCases ">\r
+    <auto_tcn>1</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>1</total_tcn>\r
+    <pkg_name>wearable/tct-location-manager-native-ctc-2.3.2.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-package-manager-native-itc" category=" IntegrationTestCases ">\r
+    <auto_tcn>30</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>30</total_tcn>\r
+    <pkg_name>wearable/tct-package-manager-native-itc-2.3.2.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-telephony-native-ctc" category=" CompatibilityTestCases ">\r
+    <auto_tcn>1</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>1</total_tcn>\r
+    <pkg_name>wearable/tct-telephony-native-ctc-2.3.2.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-media-content-native-itc" category=" IntegrationTestCases ">\r
+    <auto_tcn>142</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>142</total_tcn>\r
+    <pkg_name>wearable/tct-media-content-native-itc-2.3.2.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-tbm-native-itc" category=" IntegrationTestCases ">\r
+    <auto_tcn>7</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>7</total_tcn>\r
+    <pkg_name>wearable/tct-tbm-native-itc-2.3.2.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-webkit2-native-itc" category=" IntegrationTestCases ">\r
+    <auto_tcn>72</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>72</total_tcn>\r
+    <pkg_name>wearable/tct-webkit2-native-itc-2.3.2.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-notification-native-utc" category=" UnitTestCases ">\r
+    <auto_tcn>98</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>98</total_tcn>\r
+    <pkg_name>wearable/tct-notification-native-utc-2.3.2.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-sound-manager-native-utc" category=" UnitTestCases ">\r
+    <auto_tcn>64</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>64</total_tcn>\r
+    <pkg_name>wearable/tct-sound-manager-native-utc-2.3.2.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-notification-native-itc" category=" IntegrationTestCases ">\r
+    <auto_tcn>41</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>41</total_tcn>\r
+    <pkg_name>wearable/tct-notification-native-itc-2.3.2.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-telephony-native-itc" category=" IntegrationTestCases ">\r
+    <auto_tcn>21</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>21</total_tcn>\r
+    <pkg_name>wearable/tct-telephony-native-itc-2.3.2.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-audio-io-native-itc" category=" IntegrationTestCases ">\r
+    <auto_tcn>21</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>21</total_tcn>\r
+    <pkg_name>wearable/tct-audio-io-native-itc-2.3.2.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-location-manager-native-itc" category=" IntegrationTestCases ">\r
+    <auto_tcn>35</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>35</total_tcn>\r
+    <pkg_name>wearable/tct-location-manager-native-itc-2.3.2.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-tone-player-native-itc" category=" IntegrationTestCases ">\r
+    <auto_tcn>1</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>1</total_tcn>\r
+    <pkg_name>wearable/tct-tone-player-native-itc-2.3.2.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-app-manager-native-utc" category=" UnitTestCases ">\r
+    <auto_tcn>108</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>108</total_tcn>\r
+    <pkg_name>wearable/tct-app-manager-native-utc-2.3.2.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-image-util-native-ctc" category=" CompatibilityTestCases ">\r
+    <auto_tcn>2</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>2</total_tcn>\r
+    <pkg_name>wearable/tct-image-util-native-ctc-2.3.2.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-privilege-info-native-itc" category=" IntegrationTestCases ">\r
+    <auto_tcn>4</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>4</total_tcn>\r
+    <pkg_name>wearable/tct-privilege-info-native-itc-2.3.2.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-image-util-native-itc" category=" IntegrationTestCases ">\r
+    <auto_tcn>12</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>12</total_tcn>\r
+    <pkg_name>wearable/tct-image-util-native-itc-2.3.2.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-connection-native-itc" category=" IntegrationTestCases ">\r
+    <auto_tcn>57</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>57</total_tcn>\r
+    <pkg_name>wearable/tct-connection-native-itc-2.3.2.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-nfc-native-itc" category=" IntegrationTestCases ">\r
+    <auto_tcn>39</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>39</total_tcn>\r
+    <pkg_name>wearable/tct-nfc-native-itc-2.3.2.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-media-key-native-utc" category=" UnitTestCases ">\r
+    <auto_tcn>3</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>3</total_tcn>\r
+    <pkg_name>wearable/tct-media-key-native-utc-2.3.2.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-widget-service-native-utc" category=" UnitTestCases ">\r
+    <auto_tcn>46</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>46</total_tcn>\r
+    <pkg_name>wearable/tct-widget-service-native-utc-2.3.2.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-wav-player-native-utc" category=" UnitTestCases ">\r
+    <auto_tcn>9</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>9</total_tcn>\r
+    <pkg_name>wearable/tct-wav-player-native-utc-2.3.2.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-bluetooth-native-itc" category=" IntegrationTestCases ">\r
+    <auto_tcn>43</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>43</total_tcn>\r
+    <pkg_name>wearable/tct-bluetooth-native-itc-2.3.2.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-system-info-native-itc" category=" IntegrationTestCases ">\r
+    <auto_tcn>4</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>4</total_tcn>\r
+    <pkg_name>wearable/tct-system-info-native-itc-2.3.2.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-sensor-native-itc" category=" IntegrationTestCases ">\r
+    <auto_tcn>25</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>25</total_tcn>\r
+    <pkg_name>wearable/tct-sensor-native-itc-2.3.2.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-data-control-native-itc" category=" IntegrationTestCases ">\r
+    <auto_tcn>33</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>33</total_tcn>\r
+    <pkg_name>wearable/tct-data-control-native-itc-2.3.2.zip</pkg_name>\r
+  </suite>\r
+</ns3:testplan>\r
+\r
diff --git a/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/shell/plan/Native_Full_wearable_3.0.xml b/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/shell/plan/Native_Full_wearable_3.0.xml
new file mode 100755 (executable)
index 0000000..c1e9f25
--- /dev/null
@@ -0,0 +1,1133 @@
+<?xml version="1.0" encoding="UTF-8"?>\r
+<ns3:testplan xmlns:ns3="http://www.example.org/plan/" xmlns="" name="Native_Full_wearable_3.0" profile="wearable">\r
+  <execute_type>Auto</execute_type>\r
+  <suite name="tct-connection-native-utc" category=" UnitTestCases ">\r
+    <auto_tcn>172</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>172</total_tcn>\r
+    <pkg_name>wearable/tct-connection-native-utc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-webkit2-native-utc" category=" UnitTestCases ">\r
+    <auto_tcn>183</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>183</total_tcn>\r
+    <pkg_name>wearable/tct-webkit2-native-utc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-vpn-service-native-itc" category=" IntegrationTestCases ">\r
+    <auto_tcn>11</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>11</total_tcn>\r
+    <pkg_name>wearable/tct-vpn-service-native-itc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-privilege-info-native-utc" category=" UnitTestCases ">\r
+    <auto_tcn>14</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>14</total_tcn>\r
+    <pkg_name>wearable/tct-privilege-info-native-utc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-dali-adaptor-native-utc" category=" UnitTestCases ">\r
+    <auto_tcn>96</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>96</total_tcn>\r
+    <pkg_name>wearable/tct-dali-adaptor-native-utc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-mtp-native-itc" category=" IntegrationTestCases ">\r
+    <auto_tcn>1</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>1</total_tcn>\r
+    <pkg_name>wearable/tct-mtp-native-itc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-wav-player-native-itc" category=" IntegrationTestCases ">\r
+    <auto_tcn>2</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>2</total_tcn>\r
+    <pkg_name>wearable/tct-wav-player-native-itc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-native-common-native-itc" category=" IntegrationTestCases ">\r
+    <auto_tcn>2</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>2</total_tcn>\r
+    <pkg_name>wearable/tct-native-common-native-itc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-widget_viewer_evas-native-utc" category=" UnitTestCases ">\r
+    <auto_tcn>49</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>49</total_tcn>\r
+    <pkg_name>wearable/tct-widget_viewer_evas-native-utc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-capi-ui-inputmethod-manager-native-utc" category=" UnitTestCases ">\r
+    <auto_tcn>8</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>8</total_tcn>\r
+    <pkg_name>wearable/tct-capi-ui-inputmethod-manager-native-utc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-filesystem-permission-native-ctc" category=" CompatibilityTestCases ">\r
+    <auto_tcn>32</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>32</total_tcn>\r
+    <pkg_name>wearable/tct-filesystem-permission-native-ctc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-messages-native-itc" category=" IntegrationTestCases ">\r
+    <auto_tcn>18</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>18</total_tcn>\r
+    <pkg_name>wearable/tct-messages-native-itc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-badge-native-utc" category=" UnitTestCases ">\r
+    <auto_tcn>25</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>25</total_tcn>\r
+    <pkg_name>wearable/tct-badge-native-utc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-widget_viewer_evas-native-itc" category=" IntegrationTestCases ">\r
+    <auto_tcn>23</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>23</total_tcn>\r
+    <pkg_name>wearable/tct-widget_viewer_evas-native-itc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-mediademuxer-native-utc" category=" UnitTestCases ">\r
+    <auto_tcn>36</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>36</total_tcn>\r
+    <pkg_name>wearable/tct-mediademuxer-native-utc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-capi-message-port-native-itc" category=" IntegrationTestCases ">\r
+    <auto_tcn>6</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>6</total_tcn>\r
+    <pkg_name>wearable/tct-capi-message-port-native-itc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-system-settings-native-itc" category=" IntegrationTestCases ">\r
+    <auto_tcn>4</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>4</total_tcn>\r
+    <pkg_name>wearable/tct-system-settings-native-itc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-messages-native-utc" category=" UnitTestCases ">\r
+    <auto_tcn>85</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>85</total_tcn>\r
+    <pkg_name>wearable/tct-messages-native-utc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-push-native-itc" category=" IntegrationTestCases ">\r
+    <auto_tcn>12</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>12</total_tcn>\r
+    <pkg_name>wearable/tct-push-native-itc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-sensor-native-ctc" category=" CompatibilityTestCases ">\r
+    <auto_tcn>9</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>9</total_tcn>\r
+    <pkg_name>wearable/tct-sensor-native-ctc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-appcore-agent-native-itc" category=" IntegrationTestCases ">\r
+    <auto_tcn>2</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>2</total_tcn>\r
+    <pkg_name>wearable/tct-appcore-agent-native-itc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-appcore-watch-native-utc" category=" UnitTestCases ">\r
+    <auto_tcn>37</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>37</total_tcn>\r
+    <pkg_name>wearable/tct-appcore-watch-native-utc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-radio-native-utc" category=" UnitTestCases ">\r
+    <auto_tcn>40</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>40</total_tcn>\r
+    <pkg_name>wearable/tct-radio-native-utc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-location-manager-native-utc" category=" UnitTestCases ">\r
+    <auto_tcn>143</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>143</total_tcn>\r
+    <pkg_name>wearable/tct-location-manager-native-utc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-camera-native-utc" category=" UnitTestCases ">\r
+    <auto_tcn>362</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>362</total_tcn>\r
+    <pkg_name>wearable/tct-camera-native-utc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-thumbnail-util-native-itc" category=" IntegrationTestCases ">\r
+    <auto_tcn>6</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>6</total_tcn>\r
+    <pkg_name>wearable/tct-thumbnail-util-native-itc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-cairo-native-utc" category=" UnitTestCases ">\r
+    <auto_tcn>18</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>18</total_tcn>\r
+    <pkg_name>wearable/tct-cairo-native-utc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-tbm-native-utc" category=" UnitTestCases ">\r
+    <auto_tcn>17</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>17</total_tcn>\r
+    <pkg_name>wearable/tct-tbm-native-utc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-streamrecorder-native-utc" category=" UnitTestCases ">\r
+    <auto_tcn>125</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>125</total_tcn>\r
+    <pkg_name>wearable/tct-streamrecorder-native-utc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-libstorage-native-ctc" category=" CompatibilityTestCases ">\r
+    <auto_tcn>2</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>2</total_tcn>\r
+    <pkg_name>wearable/tct-libstorage-native-ctc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-accounts-svc-native-itc" category=" IntegrationTestCases ">\r
+    <auto_tcn>48</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>48</total_tcn>\r
+    <pkg_name>wearable/tct-accounts-svc-native-itc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-telephony-native-utc" category=" UnitTestCases ">\r
+    <auto_tcn>208</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>208</total_tcn>\r
+    <pkg_name>wearable/tct-telephony-native-utc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-phonenumber-utils-native-utc" category=" UnitTestCases ">\r
+    <auto_tcn>13</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>13</total_tcn>\r
+    <pkg_name>wearable/tct-phonenumber-utils-native-utc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-native-common-native-utc" category=" UnitTestCases ">\r
+    <auto_tcn>5</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>5</total_tcn>\r
+    <pkg_name>wearable/tct-native-common-native-utc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-capi-media-vision-native-utc" category=" UnitTestCases ">\r
+    <auto_tcn>155</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>155</total_tcn>\r
+    <pkg_name>wearable/tct-capi-media-vision-native-utc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-fido-client-native-utc" category=" UnitTestCases ">\r
+    <auto_tcn>24</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>24</total_tcn>\r
+    <pkg_name>wearable/tct-fido-client-native-utc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-base-utils-native-itc" category=" IntegrationTestCases ">\r
+    <auto_tcn>287</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>287</total_tcn>\r
+    <pkg_name>wearable/tct-base-utils-native-itc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-appcore-widget-native-itc" category=" IntegrationTestCases ">\r
+    <auto_tcn>5</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>5</total_tcn>\r
+    <pkg_name>wearable/tct-appcore-widget-native-itc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-metadata-editor-native-utc" category=" UnitTestCases ">\r
+    <auto_tcn>18</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>18</total_tcn>\r
+    <pkg_name>wearable/tct-metadata-editor-native-utc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-mediacodec-native-utc" category=" UnitTestCases ">\r
+    <auto_tcn>49</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>49</total_tcn>\r
+    <pkg_name>wearable/tct-mediacodec-native-utc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-capi-maps-service-native-utc" category=" UnitTestCases ">\r
+    <auto_tcn>337</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>337</total_tcn>\r
+    <pkg_name>wearable/tct-capi-maps-service-native-utc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-nsd-native-utc" category=" UnitTestCases ">\r
+    <auto_tcn>71</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>71</total_tcn>\r
+    <pkg_name>wearable/tct-nsd-native-utc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-capi-media-streamer-native-utc" category=" UnitTestCases ">\r
+    <auto_tcn>102</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>102</total_tcn>\r
+    <pkg_name>wearable/tct-capi-media-streamer-native-utc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-mediacodec-native-itc" category=" IntegrationTestCases ">\r
+    <auto_tcn>17</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>17</total_tcn>\r
+    <pkg_name>wearable/tct-mediacodec-native-itc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-key-manager-native-utc" category=" UnitTestCases ">\r
+    <auto_tcn>127</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>127</total_tcn>\r
+    <pkg_name>wearable/tct-key-manager-native-utc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-media-content-native-utc" category=" UnitTestCases ">\r
+    <auto_tcn>504</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>504</total_tcn>\r
+    <pkg_name>wearable/tct-media-content-native-utc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-opengl-native-ctc" category=" CompatibilityTestCases ">\r
+    <auto_tcn>3</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>3</total_tcn>\r
+    <pkg_name>wearable/tct-opengl-native-ctc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-sound-manager-native-itc" category=" IntegrationTestCases ">\r
+    <auto_tcn>28</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>28</total_tcn>\r
+    <pkg_name>wearable/tct-sound-manager-native-itc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-tone-player-native-utc" category=" UnitTestCases ">\r
+    <auto_tcn>9</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>9</total_tcn>\r
+    <pkg_name>wearable/tct-tone-player-native-utc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-media-controller-native-utc" category=" UnitTestCases ">\r
+    <auto_tcn>85</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>85</total_tcn>\r
+    <pkg_name>wearable/tct-media-controller-native-utc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-appcore-widget-native-utc" category=" UnitTestCases ">\r
+    <auto_tcn>20</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>20</total_tcn>\r
+    <pkg_name>wearable/tct-appcore-widget-native-utc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-efl-ext-native-itc" category=" IntegrationTestCases ">\r
+    <auto_tcn>59</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>59</total_tcn>\r
+    <pkg_name>wearable/tct-efl-ext-native-itc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-voice-control-elm-native-itc" category=" IntegrationTestCases ">\r
+    <auto_tcn>13</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>13</total_tcn>\r
+    <pkg_name>wearable/tct-voice-control-elm-native-itc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-metadata-extractor-native-utc" category=" UnitTestCases ">\r
+    <auto_tcn>23</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>23</total_tcn>\r
+    <pkg_name>wearable/tct-metadata-extractor-native-utc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-camera-native-itc" category=" IntegrationTestCases ">\r
+    <auto_tcn>82</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>82</total_tcn>\r
+    <pkg_name>wearable/tct-camera-native-itc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-motion-native-itc" category=" IntegrationTestCases ">\r
+    <auto_tcn>8</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>8</total_tcn>\r
+    <pkg_name>wearable/tct-motion-native-itc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-push-native-utc" category=" UnitTestCases ">\r
+    <auto_tcn>28</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>28</total_tcn>\r
+    <pkg_name>wearable/tct-push-native-utc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-dlog-native-utc" category=" UnitTestCases ">\r
+    <auto_tcn>4</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>4</total_tcn>\r
+    <pkg_name>wearable/tct-dlog-native-utc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-app-manager-native-itc" category=" IntegrationTestCases ">\r
+    <auto_tcn>42</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>42</total_tcn>\r
+    <pkg_name>wearable/tct-app-manager-native-itc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-audio-io-native-utc" category=" UnitTestCases ">\r
+    <auto_tcn>94</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>94</total_tcn>\r
+    <pkg_name>wearable/tct-audio-io-native-utc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-package-manager-native-utc" category=" UnitTestCases ">\r
+    <auto_tcn>92</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>92</total_tcn>\r
+    <pkg_name>wearable/tct-package-manager-native-utc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-capi-maps-service-native-itc" category=" IntegrationTestCases ">\r
+    <auto_tcn>72</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>72</total_tcn>\r
+    <pkg_name>wearable/tct-capi-maps-service-native-itc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-player-native-ctc" category=" CompatibilityTestCases ">\r
+    <auto_tcn>4</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>4</total_tcn>\r
+    <pkg_name>wearable/tct-player-native-ctc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-mediatool-native-utc" category=" UnitTestCases ">\r
+    <auto_tcn>133</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>133</total_tcn>\r
+    <pkg_name>wearable/tct-mediatool-native-utc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-dali-core-native-itc" category=" IntegrationTestCases ">\r
+    <auto_tcn>801</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>801</total_tcn>\r
+    <pkg_name>wearable/tct-dali-core-native-itc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-sync-manager-native-utc" category=" UnitTestCases ">\r
+    <auto_tcn>28</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>28</total_tcn>\r
+    <pkg_name>wearable/tct-sync-manager-native-utc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-efl-util-native-itc" category=" IntegrationTestCases ">\r
+    <auto_tcn>5</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>5</total_tcn>\r
+    <pkg_name>wearable/tct-efl-util-native-itc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-efl-ext-native-utc" category=" UnitTestCases ">\r
+    <auto_tcn>151</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>151</total_tcn>\r
+    <pkg_name>wearable/tct-efl-ext-native-utc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-wifi-native-utc" category=" UnitTestCases ">\r
+    <auto_tcn>208</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>208</total_tcn>\r
+    <pkg_name>wearable/tct-wifi-native-utc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-sensor-native-utc" category=" UnitTestCases ">\r
+    <auto_tcn>66</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>66</total_tcn>\r
+    <pkg_name>wearable/tct-sensor-native-utc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-capi-mediamuxer-native-itc" category=" IntegrationTestCases ">\r
+    <auto_tcn>9</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>9</total_tcn>\r
+    <pkg_name>wearable/tct-capi-mediamuxer-native-itc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-bundle-native-utc" category=" UnitTestCases ">\r
+    <auto_tcn>53</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>53</total_tcn>\r
+    <pkg_name>wearable/tct-bundle-native-utc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-bundle-native-itc" category=" IntegrationTestCases ">\r
+    <auto_tcn>9</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>9</total_tcn>\r
+    <pkg_name>wearable/tct-bundle-native-itc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-libstorage-native-utc" category=" UnitTestCases ">\r
+    <auto_tcn>31</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>31</total_tcn>\r
+    <pkg_name>wearable/tct-libstorage-native-utc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-widget_service-native-utc" category=" UnitTestCases ">\r
+    <auto_tcn>46</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>46</total_tcn>\r
+    <pkg_name>wearable/tct-widget_service-native-utc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-mime-type-native-utc" category=" UnitTestCases ">\r
+    <auto_tcn>15</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>15</total_tcn>\r
+    <pkg_name>wearable/tct-mime-type-native-utc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-url-download-native-itc" category=" IntegrationTestCases ">\r
+    <auto_tcn>27</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>27</total_tcn>\r
+    <pkg_name>wearable/tct-url-download-native-itc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-capi-ui-inputmethod-native-utc" category=" UnitTestCases ">\r
+    <auto_tcn>99</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>99</total_tcn>\r
+    <pkg_name>wearable/tct-capi-ui-inputmethod-native-utc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-eom-native-itc" category=" IntegrationTestCases ">\r
+    <auto_tcn>13</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>13</total_tcn>\r
+    <pkg_name>wearable/tct-eom-native-itc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-contacts-service2-native-utc" category=" UnitTestCases ">\r
+    <auto_tcn>206</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>206</total_tcn>\r
+    <pkg_name>wearable/tct-contacts-service2-native-utc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-application-native-itc" category=" IntegrationTestCases ">\r
+    <auto_tcn>55</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>55</total_tcn>\r
+    <pkg_name>wearable/tct-application-native-itc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-camera-native-ctc" category=" CompatibilityTestCases ">\r
+    <auto_tcn>1</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>1</total_tcn>\r
+    <pkg_name>wearable/tct-camera-native-ctc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-player-native-utc" category=" UnitTestCases ">\r
+    <auto_tcn>191</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>191</total_tcn>\r
+    <pkg_name>wearable/tct-player-native-utc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-voice-control-elm-native-utc" category=" UnitTestCases ">\r
+    <auto_tcn>71</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>71</total_tcn>\r
+    <pkg_name>wearable/tct-voice-control-elm-native-utc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-appcore-agent-native-utc" category=" UnitTestCases ">\r
+    <auto_tcn>11</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>11</total_tcn>\r
+    <pkg_name>wearable/tct-appcore-agent-native-utc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-system-info-native-utc" category=" UnitTestCases ">\r
+    <auto_tcn>12</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>12</total_tcn>\r
+    <pkg_name>wearable/tct-system-info-native-utc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-device-native-ctc" category=" CompatibilityTestCases ">\r
+    <auto_tcn>1</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>1</total_tcn>\r
+    <pkg_name>wearable/tct-device-native-ctc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-application-native-utc" category=" UnitTestCases ">\r
+    <auto_tcn>268</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>268</total_tcn>\r
+    <pkg_name>wearable/tct-application-native-utc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-radio-native-itc" category=" IntegrationTestCases ">\r
+    <auto_tcn>12</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>12</total_tcn>\r
+    <pkg_name>wearable/tct-radio-native-itc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-data-control-native-utc" category=" UnitTestCases ">\r
+    <auto_tcn>89</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>89</total_tcn>\r
+    <pkg_name>wearable/tct-data-control-native-utc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-nsd-native-itc" category=" IntegrationTestCases ">\r
+    <auto_tcn>18</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>18</total_tcn>\r
+    <pkg_name>wearable/tct-nsd-native-itc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-tts-native-utc" category=" UnitTestCases ">\r
+    <auto_tcn>104</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>104</total_tcn>\r
+    <pkg_name>wearable/tct-tts-native-utc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-system-settings-native-utc" category=" UnitTestCases ">\r
+    <auto_tcn>78</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>78</total_tcn>\r
+    <pkg_name>wearable/tct-system-settings-native-utc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-metadata-extractor-native-itc" category=" IntegrationTestCases ">\r
+    <auto_tcn>8</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>8</total_tcn>\r
+    <pkg_name>wearable/tct-metadata-extractor-native-itc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-device-native-utc" category=" UnitTestCases ">\r
+    <auto_tcn>64</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>64</total_tcn>\r
+    <pkg_name>wearable/tct-device-native-utc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-capi-message-port-native-utc" category=" UnitTestCases ">\r
+    <auto_tcn>53</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>53</total_tcn>\r
+    <pkg_name>wearable/tct-capi-message-port-native-utc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-sound-manager-native-ctc" category=" CompatibilityTestCases ">\r
+    <auto_tcn>1</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>1</total_tcn>\r
+    <pkg_name>wearable/tct-sound-manager-native-ctc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-cairo-native-itc" category=" IntegrationTestCases ">\r
+    <auto_tcn>9</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>9</total_tcn>\r
+    <pkg_name>wearable/tct-cairo-native-itc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-image-util-native-utc" category=" UnitTestCases ">\r
+    <auto_tcn>214</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>214</total_tcn>\r
+    <pkg_name>wearable/tct-image-util-native-utc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-capi-ui-inputmethod-manager-native-itc" category=" IntegrationTestCases ">\r
+    <auto_tcn>2</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>2</total_tcn>\r
+    <pkg_name>wearable/tct-capi-ui-inputmethod-manager-native-itc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-media-key-native-itc" category=" IntegrationTestCases ">\r
+    <auto_tcn>1</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>1</total_tcn>\r
+    <pkg_name>wearable/tct-media-key-native-itc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-trace-native-utc" category=" UnitTestCases ">\r
+    <auto_tcn>5</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>5</total_tcn>\r
+    <pkg_name>wearable/tct-trace-native-utc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-nfc-native-utc" category=" UnitTestCases ">\r
+    <auto_tcn>160</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>160</total_tcn>\r
+    <pkg_name>wearable/tct-nfc-native-utc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-dlog-native-itc" category=" IntegrationTestCases ">\r
+    <auto_tcn>2</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>2</total_tcn>\r
+    <pkg_name>wearable/tct-dlog-native-itc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-platform-permission-native-ctc" category=" CompatibilityTestCases ">\r
+    <auto_tcn>46</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>46</total_tcn>\r
+    <pkg_name>wearable/tct-platform-permission-native-ctc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-metadata-editor-native-itc" category=" IntegrationTestCases ">\r
+    <auto_tcn>7</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>7</total_tcn>\r
+    <pkg_name>wearable/tct-metadata-editor-native-itc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-runtime-info-native-itc" category=" IntegrationTestCases ">\r
+    <auto_tcn>11</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>11</total_tcn>\r
+    <pkg_name>wearable/tct-runtime-info-native-itc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-libstorage64-native-utc" category=" UnitTestCases ">\r
+    <auto_tcn>31</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>31</total_tcn>\r
+    <pkg_name>wearable/tct-libstorage64-native-utc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-efl-util-native-utc" category=" UnitTestCases ">\r
+    <auto_tcn>45</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>45</total_tcn>\r
+    <pkg_name>wearable/tct-efl-util-native-utc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-dali-toolkit-native-itc" category=" IntegrationTestCases ">\r
+    <auto_tcn>234</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>234</total_tcn>\r
+    <pkg_name>wearable/tct-dali-toolkit-native-itc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-audio-io-native-ctc" category=" CompatibilityTestCases ">\r
+    <auto_tcn>1</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>1</total_tcn>\r
+    <pkg_name>wearable/tct-audio-io-native-ctc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-device-native-itc" category=" IntegrationTestCases ">\r
+    <auto_tcn>16</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>16</total_tcn>\r
+    <pkg_name>wearable/tct-device-native-itc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-base-utils-native-utc" category=" UnitTestCases ">\r
+    <auto_tcn>877</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>877</total_tcn>\r
+    <pkg_name>wearable/tct-base-utils-native-utc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-oauth2-native-itc" category=" IntegrationTestCases ">\r
+    <auto_tcn>18</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>18</total_tcn>\r
+    <pkg_name>wearable/tct-oauth2-native-itc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-dali-toolkit-native-utc" category=" UnitTestCases ">\r
+    <auto_tcn>435</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>435</total_tcn>\r
+    <pkg_name>wearable/tct-dali-toolkit-native-utc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-recorder-native-itc" category=" IntegrationTestCases ">\r
+    <auto_tcn>33</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>33</total_tcn>\r
+    <pkg_name>wearable/tct-recorder-native-itc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-mediacodec-native-ctc" category=" CompatibilityTestCases ">\r
+    <auto_tcn>1</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>1</total_tcn>\r
+    <pkg_name>wearable/tct-mediacodec-native-ctc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-player-native-itc" category=" IntegrationTestCases ">\r
+    <auto_tcn>55</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>55</total_tcn>\r
+    <pkg_name>wearable/tct-player-native-itc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-media-controller-native-itc" category=" IntegrationTestCases ">\r
+    <auto_tcn>28</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>28</total_tcn>\r
+    <pkg_name>wearable/tct-media-controller-native-itc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-mime-type-native-itc" category=" IntegrationTestCases ">\r
+    <auto_tcn>2</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>2</total_tcn>\r
+    <pkg_name>wearable/tct-mime-type-native-itc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-system-info-native-ctc" category=" CompatibilityTestCases ">\r
+    <auto_tcn>4</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>4</total_tcn>\r
+    <pkg_name>wearable/tct-system-info-native-ctc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-thumbnail-util-native-utc" category=" UnitTestCases ">\r
+    <auto_tcn>14</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>14</total_tcn>\r
+    <pkg_name>wearable/tct-thumbnail-util-native-utc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-key-manager-native-itc" category=" IntegrationTestCases ">\r
+    <auto_tcn>40</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>40</total_tcn>\r
+    <pkg_name>wearable/tct-key-manager-native-itc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-connection-native-ctc" category=" CompatibilityTestCases ">\r
+    <auto_tcn>1</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>1</total_tcn>\r
+    <pkg_name>wearable/tct-connection-native-ctc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-runtime-info-native-ctc" category=" CompatibilityTestCases ">\r
+    <auto_tcn>15</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>15</total_tcn>\r
+    <pkg_name>wearable/tct-runtime-info-native-ctc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-smartcard-native-utc" category=" UnitTestCases ">\r
+    <auto_tcn>33</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>33</total_tcn>\r
+    <pkg_name>wearable/tct-smartcard-native-utc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-tts-native-itc" category=" IntegrationTestCases ">\r
+    <auto_tcn>14</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>14</total_tcn>\r
+    <pkg_name>wearable/tct-tts-native-itc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-badge-native-itc" category=" IntegrationTestCases ">\r
+    <auto_tcn>6</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>6</total_tcn>\r
+    <pkg_name>wearable/tct-badge-native-itc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-mtp-native-utc" category=" UnitTestCases ">\r
+    <auto_tcn>37</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>37</total_tcn>\r
+    <pkg_name>wearable/tct-mtp-native-utc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-appcore-watch-native-itc" category=" IntegrationTestCases ">\r
+    <auto_tcn>14</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>14</total_tcn>\r
+    <pkg_name>wearable/tct-appcore-watch-native-itc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-smartcard-native-itc" category=" IntegrationTestCases ">\r
+    <auto_tcn>8</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>8</total_tcn>\r
+    <pkg_name>wearable/tct-smartcard-native-itc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-iotcon-native-utc" category=" UnitTestCases ">\r
+    <auto_tcn>346</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>346</total_tcn>\r
+    <pkg_name>wearable/tct-iotcon-native-utc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-wifi-native-itc" category=" IntegrationTestCases ">\r
+    <auto_tcn>60</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>60</total_tcn>\r
+    <pkg_name>wearable/tct-wifi-native-itc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-fido-client-native-itc" category=" IntegrationTestCases ">\r
+    <auto_tcn>19</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>19</total_tcn>\r
+    <pkg_name>wearable/tct-fido-client-native-itc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-oauth2-native-utc" category=" UnitTestCases ">\r
+    <auto_tcn>89</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>89</total_tcn>\r
+    <pkg_name>wearable/tct-oauth2-native-utc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-sync-manager-native-itc" category=" IntegrationTestCases ">\r
+    <auto_tcn>5</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>5</total_tcn>\r
+    <pkg_name>wearable/tct-sync-manager-native-itc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-accounts-svc-native-utc" category=" UnitTestCases ">\r
+    <auto_tcn>144</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>144</total_tcn>\r
+    <pkg_name>wearable/tct-accounts-svc-native-utc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-libstorage-native-itc" category=" IntegrationTestCases ">\r
+    <auto_tcn>10</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>10</total_tcn>\r
+    <pkg_name>wearable/tct-libstorage-native-itc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-url-download-native-utc" category=" UnitTestCases ">\r
+    <auto_tcn>121</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>121</total_tcn>\r
+    <pkg_name>wearable/tct-url-download-native-utc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-stt-native-utc" category=" UnitTestCases ">\r
+    <auto_tcn>88</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>88</total_tcn>\r
+    <pkg_name>wearable/tct-stt-native-utc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-stt-native-itc" category=" IntegrationTestCases ">\r
+    <auto_tcn>20</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>20</total_tcn>\r
+    <pkg_name>wearable/tct-stt-native-itc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-recorder-native-utc" category=" UnitTestCases ">\r
+    <auto_tcn>143</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>143</total_tcn>\r
+    <pkg_name>wearable/tct-recorder-native-utc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-voice-control-native-itc" category=" IntegrationTestCases ">\r
+    <auto_tcn>22</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>22</total_tcn>\r
+    <pkg_name>wearable/tct-voice-control-native-itc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-mediastreamrecorder-native-itc" category=" IntegrationTestCases ">\r
+    <auto_tcn>29</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>29</total_tcn>\r
+    <pkg_name>wearable/tct-mediastreamrecorder-native-itc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-runtime-info-native-utc" category=" UnitTestCases ">\r
+    <auto_tcn>134</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>134</total_tcn>\r
+    <pkg_name>wearable/tct-runtime-info-native-utc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-bluetooth-native-utc" category=" UnitTestCases ">\r
+    <auto_tcn>302</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>302</total_tcn>\r
+    <pkg_name>wearable/tct-bluetooth-native-utc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-capi-mediademuxer-native-itc" category=" IntegrationTestCases ">\r
+    <auto_tcn>12</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>12</total_tcn>\r
+    <pkg_name>wearable/tct-capi-mediademuxer-native-itc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-dali-core-native-utc" category=" UnitTestCases ">\r
+    <auto_tcn>1645</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>1645</total_tcn>\r
+    <pkg_name>wearable/tct-dali-core-native-utc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-capi-media-tool-native-itc" category=" IntegrationTestCases ">\r
+    <auto_tcn>51</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>51</total_tcn>\r
+    <pkg_name>wearable/tct-capi-media-tool-native-itc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-location-manager-native-ctc" category=" CompatibilityTestCases ">\r
+    <auto_tcn>1</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>1</total_tcn>\r
+    <pkg_name>wearable/tct-location-manager-native-ctc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-package-manager-native-itc" category=" IntegrationTestCases ">\r
+    <auto_tcn>38</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>38</total_tcn>\r
+    <pkg_name>wearable/tct-package-manager-native-itc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-telephony-native-ctc" category=" CompatibilityTestCases ">\r
+    <auto_tcn>1</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>1</total_tcn>\r
+    <pkg_name>wearable/tct-telephony-native-ctc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-dali-adaptor-native-itc" category=" IntegrationTestCases ">\r
+    <auto_tcn>16</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>16</total_tcn>\r
+    <pkg_name>wearable/tct-dali-adaptor-native-itc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-media-content-native-itc" category=" IntegrationTestCases ">\r
+    <auto_tcn>189</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>189</total_tcn>\r
+    <pkg_name>wearable/tct-media-content-native-itc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-tbm-native-itc" category=" IntegrationTestCases ">\r
+    <auto_tcn>7</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>7</total_tcn>\r
+    <pkg_name>wearable/tct-tbm-native-itc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-libfeedback-native-utc" category=" UnitTestCases ">\r
+    <auto_tcn>13</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>13</total_tcn>\r
+    <pkg_name>wearable/tct-libfeedback-native-utc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-webkit2-native-itc" category=" IntegrationTestCases ">\r
+    <auto_tcn>75</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>75</total_tcn>\r
+    <pkg_name>wearable/tct-webkit2-native-itc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-capi-media-streamer-native-itc" category=" IntegrationTestCases ">\r
+    <auto_tcn>14</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>14</total_tcn>\r
+    <pkg_name>wearable/tct-capi-media-streamer-native-itc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-notification-native-utc" category=" UnitTestCases ">\r
+    <auto_tcn>229</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>229</total_tcn>\r
+    <pkg_name>wearable/tct-notification-native-utc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-sound-manager-native-utc" category=" UnitTestCases ">\r
+    <auto_tcn>101</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>101</total_tcn>\r
+    <pkg_name>wearable/tct-sound-manager-native-utc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-notification-native-itc" category=" IntegrationTestCases ">\r
+    <auto_tcn>30</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>30</total_tcn>\r
+    <pkg_name>wearable/tct-notification-native-itc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-voice-control-native-utc" category=" UnitTestCases ">\r
+    <auto_tcn>97</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>97</total_tcn>\r
+    <pkg_name>wearable/tct-voice-control-native-utc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-eom-native-utc" category=" UnitTestCases ">\r
+    <auto_tcn>42</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>42</total_tcn>\r
+    <pkg_name>wearable/tct-eom-native-utc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-widget_service-native-itc" category=" IntegrationTestCases ">\r
+    <auto_tcn>18</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>18</total_tcn>\r
+    <pkg_name>wearable/tct-widget_service-native-itc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-contacts-service2-native-itc" category=" IntegrationTestCases ">\r
+    <auto_tcn>82</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>82</total_tcn>\r
+    <pkg_name>wearable/tct-contacts-service2-native-itc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-telephony-native-itc" category=" IntegrationTestCases ">\r
+    <auto_tcn>49</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>49</total_tcn>\r
+    <pkg_name>wearable/tct-telephony-native-itc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-audio-io-native-itc" category=" IntegrationTestCases ">\r
+    <auto_tcn>32</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>32</total_tcn>\r
+    <pkg_name>wearable/tct-audio-io-native-itc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-location-manager-native-itc" category=" IntegrationTestCases ">\r
+    <auto_tcn>43</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>43</total_tcn>\r
+    <pkg_name>wearable/tct-location-manager-native-itc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-tone-player-native-itc" category=" IntegrationTestCases ">\r
+    <auto_tcn>2</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>2</total_tcn>\r
+    <pkg_name>wearable/tct-tone-player-native-itc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-app-manager-native-utc" category=" UnitTestCases ">\r
+    <auto_tcn>130</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>130</total_tcn>\r
+    <pkg_name>wearable/tct-app-manager-native-utc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-image-util-native-ctc" category=" CompatibilityTestCases ">\r
+    <auto_tcn>2</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>2</total_tcn>\r
+    <pkg_name>wearable/tct-image-util-native-ctc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-media-vision-native-itc" category=" IntegrationTestCases ">\r
+    <auto_tcn>37</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>37</total_tcn>\r
+    <pkg_name>wearable/tct-media-vision-native-itc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-privilege-info-native-itc" category=" IntegrationTestCases ">\r
+    <auto_tcn>4</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>4</total_tcn>\r
+    <pkg_name>wearable/tct-privilege-info-native-itc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-vpn-native-utc" category=" UnitTestCases ">\r
+    <auto_tcn>26</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>26</total_tcn>\r
+    <pkg_name>wearable/tct-vpn-native-utc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-image-util-native-itc" category=" IntegrationTestCases ">\r
+    <auto_tcn>32</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>32</total_tcn>\r
+    <pkg_name>wearable/tct-image-util-native-itc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-connection-native-itc" category=" IntegrationTestCases ">\r
+    <auto_tcn>61</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>61</total_tcn>\r
+    <pkg_name>wearable/tct-connection-native-itc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-nfc-native-itc" category=" IntegrationTestCases ">\r
+    <auto_tcn>40</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>40</total_tcn>\r
+    <pkg_name>wearable/tct-nfc-native-itc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-ttrace-native-itc" category=" IntegrationTestCases ">\r
+    <auto_tcn>3</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>3</total_tcn>\r
+    <pkg_name>wearable/tct-ttrace-native-itc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-mediamuxer-native-utc" category=" UnitTestCases ">\r
+    <auto_tcn>30</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>30</total_tcn>\r
+    <pkg_name>wearable/tct-mediamuxer-native-utc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-media-key-native-utc" category=" UnitTestCases ">\r
+    <auto_tcn>3</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>3</total_tcn>\r
+    <pkg_name>wearable/tct-media-key-native-utc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-wav-player-native-utc" category=" UnitTestCases ">\r
+    <auto_tcn>14</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>14</total_tcn>\r
+    <pkg_name>wearable/tct-wav-player-native-utc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-libfeedback-native-itc" category=" IntegrationTestCases ">\r
+    <auto_tcn>4</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>4</total_tcn>\r
+    <pkg_name>wearable/tct-libfeedback-native-itc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-phonenumber-utils-native-itc" category=" IntegrationTestCases ">\r
+    <auto_tcn>4</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>4</total_tcn>\r
+    <pkg_name>wearable/tct-phonenumber-utils-native-itc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-motion-native-utc" category=" UnitTestCases ">\r
+    <auto_tcn>23</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>23</total_tcn>\r
+    <pkg_name>wearable/tct-motion-native-utc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-bluetooth-native-itc" category=" IntegrationTestCases ">\r
+    <auto_tcn>45</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>45</total_tcn>\r
+    <pkg_name>wearable/tct-bluetooth-native-itc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-system-info-native-itc" category=" IntegrationTestCases ">\r
+    <auto_tcn>4</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>4</total_tcn>\r
+    <pkg_name>wearable/tct-system-info-native-itc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-sensor-native-itc" category=" IntegrationTestCases ">\r
+    <auto_tcn>26</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>26</total_tcn>\r
+    <pkg_name>wearable/tct-sensor-native-itc-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-data-control-native-itc" category=" IntegrationTestCases ">\r
+    <auto_tcn>33</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>33</total_tcn>\r
+    <pkg_name>wearable/tct-data-control-native-itc-3.0.zip</pkg_name>\r
+  </suite>\r
+</ns3:testplan>\r
+\r
diff --git a/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/shell/plan/Web_Full_mobile_2.4.xml b/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/shell/plan/Web_Full_mobile_2.4.xml
new file mode 100755 (executable)
index 0000000..f226113
--- /dev/null
@@ -0,0 +1,715 @@
+<?xml version="1.0" encoding="UTF-8"?>\r
+<ns3:testplan xmlns:ns3="http://www.example.org/plan/" xmlns="" name="Web_Full_mobile_2.4" profile="mobile">\r
+  <execute_type>Auto</execute_type>\r
+  <suite name="tct-webdatabase-w3c-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
+    <auto_tcn>247</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>247</total_tcn>\r
+    <pkg_name>mobile/tct-webdatabase-w3c-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-jsenhance-html5-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
+    <auto_tcn>49</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>49</total_tcn>\r
+    <pkg_name>common/tct-jsenhance-html5-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-messaging-mms-tizen-tests" launcher="WRTLauncher" category="Tizen Web Device APIs">\r
+    <auto_tcn>123</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>123</total_tcn>\r
+    <pkg_name>mobile/tct-messaging-mms-tizen-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-multicolumn-css3-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
+    <auto_tcn>141</auto_tcn>\r
+    <manual_tcn>18</manual_tcn>\r
+    <total_tcn>159</total_tcn>\r
+    <pkg_name>mobile/tct-multicolumn-css3-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-workers-w3c-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
+    <auto_tcn>85</auto_tcn>\r
+    <manual_tcn>1</manual_tcn>\r
+    <total_tcn>86</total_tcn>\r
+    <pkg_name>mobile/tct-workers-w3c-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-namespace-tizen-tests" launcher="WRTLauncher" category="Tizen Web Device APIs">\r
+    <auto_tcn>23</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>23</total_tcn>\r
+    <pkg_name>common/tct-namespace-tizen-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-transitions-css3-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
+    <auto_tcn>26</auto_tcn>\r
+    <manual_tcn>5</manual_tcn>\r
+    <total_tcn>31</total_tcn>\r
+    <pkg_name>common/tct-transitions-css3-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-messaging-email-tizen-tests" launcher="WRTLauncher" category="Tizen Web Device APIs">\r
+    <auto_tcn>308</auto_tcn>\r
+    <manual_tcn>1</manual_tcn>\r
+    <total_tcn>309</total_tcn>\r
+    <pkg_name>mobile/tct-messaging-email-tizen-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-2dtransforms-css3-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
+    <auto_tcn>34</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>34</total_tcn>\r
+    <pkg_name>common/tct-2dtransforms-css3-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-time-tizen-tests" launcher="WRTLauncher" category="Tizen Web Device APIs">\r
+    <auto_tcn>470</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>470</total_tcn>\r
+    <pkg_name>mobile/tct-time-tizen-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-forms-html5-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
+    <auto_tcn>151</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>151</total_tcn>\r
+    <pkg_name>mobile/tct-forms-html5-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-capability-tests" launcher="WRTLauncher" category="Compliance">\r
+    <auto_tcn>15</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>15</total_tcn>\r
+    <pkg_name>common/tct-capability-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-fileapi-w3c-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
+    <auto_tcn>98</auto_tcn>\r
+    <manual_tcn>3</manual_tcn>\r
+    <total_tcn>101</total_tcn>\r
+    <pkg_name>mobile/tct-fileapi-w3c-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-ext01-wrt-tests" launcher="WRTLauncher -iu" category="Web Runtime">\r
+    <auto_tcn>3</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>3</total_tcn>\r
+    <pkg_name>mobile/tct-ext01-wrt-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-mediacapture-w3c-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
+    <auto_tcn>7</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>7</total_tcn>\r
+    <pkg_name>common/tct-mediacapture-w3c-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-exif-tizen-tests" launcher="WRTLauncher" category="Tizen Web Device APIs">\r
+    <auto_tcn>64</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>64</total_tcn>\r
+    <pkg_name>common/tct-exif-tizen-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-csp-w3c-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
+    <auto_tcn>133</auto_tcn>\r
+    <manual_tcn>78</manual_tcn>\r
+    <total_tcn>211</total_tcn>\r
+    <pkg_name>mobile/tct-csp-w3c-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-privilege-wrt-tests" category="Web Runtime">\r
+    <auto_tcn>155</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>155</total_tcn>\r
+    <pkg_name>mobile/tct-privilege-wrt-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-mediakey-tizen-tests" launcher="WRTLauncher" category="Tizen Web Device APIs">\r
+    <auto_tcn>11</auto_tcn>\r
+    <manual_tcn>4</manual_tcn>\r
+    <total_tcn>15</total_tcn>\r
+    <pkg_name>mobile/tct-mediakey-tizen-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-deviceorientation-w3c-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
+    <auto_tcn>37</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>37</total_tcn>\r
+    <pkg_name>mobile/tct-deviceorientation-w3c-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-webmessaging-w3c-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
+    <auto_tcn>176</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>176</total_tcn>\r
+    <pkg_name>mobile/tct-webmessaging-w3c-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-package-tizen-tests" launcher="WRTLauncher" category="Tizen Web Device APIs">\r
+    <auto_tcn>54</auto_tcn>\r
+    <manual_tcn>12</manual_tcn>\r
+    <total_tcn>66</total_tcn>\r
+    <pkg_name>common/tct-package-tizen-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-notification-tizen-tests" launcher="WRTLauncher" category="Tizen Web Device APIs">\r
+    <auto_tcn>93</auto_tcn>\r
+    <manual_tcn>1</manual_tcn>\r
+    <total_tcn>94</total_tcn>\r
+    <pkg_name>mobile/tct-notification-tizen-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-fmradio-tizen-tests" launcher="WRTLauncher" category="Tizen Web Device APIs">\r
+    <auto_tcn>67</auto_tcn>\r
+    <manual_tcn>7</manual_tcn>\r
+    <total_tcn>74</total_tcn>\r
+    <pkg_name>mobile/tct-fmradio-tizen-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-rt01-wrt-tests" launcher="WRTLauncher -iu" category="Web Runtime">\r
+    <auto_tcn>12</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>12</total_tcn>\r
+    <pkg_name>common/tct-rt01-wrt-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-appcache-html5-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
+    <auto_tcn>36</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>36</total_tcn>\r
+    <pkg_name>mobile/tct-appcache-html5-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-filesystemapi-w3c-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
+    <auto_tcn>208</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>208</total_tcn>\r
+    <pkg_name>mobile/tct-filesystemapi-w3c-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-svg-html5-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
+    <auto_tcn>3</auto_tcn>\r
+    <manual_tcn>9</manual_tcn>\r
+    <total_tcn>12</total_tcn>\r
+    <pkg_name>common/tct-svg-html5-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-websocket-w3c-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
+    <auto_tcn>270</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>270</total_tcn>\r
+    <pkg_name>mobile/tct-websocket-w3c-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-flexiblebox-css3-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
+    <auto_tcn>25</auto_tcn>\r
+    <manual_tcn>28</manual_tcn>\r
+    <total_tcn>53</total_tcn>\r
+    <pkg_name>common/tct-flexiblebox-css3-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-dnd-html5-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
+    <auto_tcn>6</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>6</total_tcn>\r
+    <pkg_name>mobile/tct-dnd-html5-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-extra-html5-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
+    <auto_tcn>548</auto_tcn>\r
+    <manual_tcn>25</manual_tcn>\r
+    <total_tcn>573</total_tcn>\r
+    <pkg_name>mobile/tct-extra-html5-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-fullscreen-nonw3c-tests" launcher="WRTLauncher" category="Supplementary APIs">\r
+    <auto_tcn>16</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>16</total_tcn>\r
+    <pkg_name>mobile/tct-fullscreen-nonw3c-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-colors-css3-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
+    <auto_tcn>46</auto_tcn>\r
+    <manual_tcn>29</manual_tcn>\r
+    <total_tcn>75</total_tcn>\r
+    <pkg_name>common/tct-colors-css3-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-indexeddb-w3c-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
+    <auto_tcn>400</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>400</total_tcn>\r
+    <pkg_name>mobile/tct-indexeddb-w3c-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-sandbox-html5-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
+    <auto_tcn>72</auto_tcn>\r
+    <manual_tcn>1</manual_tcn>\r
+    <total_tcn>73</total_tcn>\r
+    <pkg_name>common/tct-sandbox-html5-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-networkbearerselection-tizen-tests" launcher="WRTLauncher" category="Tizen Web Device APIs">\r
+    <auto_tcn>24</auto_tcn>\r
+    <manual_tcn>1</manual_tcn>\r
+    <total_tcn>25</total_tcn>\r
+    <pkg_name>mobile/tct-networkbearerselection-tizen-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-push-tizen-tests" launcher="WRTLauncher" category="Tizen Web Device APIs">\r
+    <auto_tcn>41</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>41</total_tcn>\r
+    <pkg_name>common/tct-push-tizen-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-messageport-tizen-tests" launcher="WRTLauncher" category="Tizen Web Device APIs">\r
+    <auto_tcn>48</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>48</total_tcn>\r
+    <pkg_name>common/tct-messageport-tizen-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-browserstate-html5-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
+    <auto_tcn>3</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>3</total_tcn>\r
+    <pkg_name>mobile/tct-browserstate-html5-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-cors-w3c-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
+    <auto_tcn>10</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>10</total_tcn>\r
+    <pkg_name>common/tct-cors-w3c-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-xmlhttprequest-w3c-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
+    <auto_tcn>262</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>262</total_tcn>\r
+    <pkg_name>mobile/tct-xmlhttprequest-w3c-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-navigationtiming-w3c-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
+    <auto_tcn>45</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>45</total_tcn>\r
+    <pkg_name>mobile/tct-navigationtiming-w3c-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-typedarrays-nonw3c-tests" launcher="WRTLauncher" category="Supplementary APIs">\r
+    <auto_tcn>80</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>80</total_tcn>\r
+    <pkg_name>common/tct-typedarrays-nonw3c-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-animations-css3-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
+    <auto_tcn>24</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>24</total_tcn>\r
+    <pkg_name>common/tct-animations-css3-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-badge-tizen-tests" launcher="WRTLauncher" category="Tizen Web Device APIs">\r
+    <auto_tcn>26</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>26</total_tcn>\r
+    <pkg_name>mobile/tct-badge-tizen-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-nfc-tizen-tests" launcher="WRTLauncher" category="Tizen Web Device APIs">\r
+    <auto_tcn>195</auto_tcn>\r
+    <manual_tcn>35</manual_tcn>\r
+    <total_tcn>230</total_tcn>\r
+    <pkg_name>mobile/tct-nfc-tizen-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-pagevisibility-w3c-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
+    <auto_tcn>18</auto_tcn>\r
+    <manual_tcn>2</manual_tcn>\r
+    <total_tcn>20</total_tcn>\r
+    <pkg_name>mobile/tct-pagevisibility-w3c-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-contact-tizen-tests" launcher="WRTLauncher" category="Tizen Web Device APIs">\r
+    <auto_tcn>441</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>441</total_tcn>\r
+    <pkg_name>mobile/tct-contact-tizen-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-content-tizen-tests" launcher="WRTLauncher" category="Tizen Web Device APIs">\r
+    <auto_tcn>245</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>245</total_tcn>\r
+    <pkg_name>common/tct-content-tizen-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-gumallow-w3c-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
+    <auto_tcn>6</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>6</total_tcn>\r
+    <pkg_name>common/tct-gumallow-w3c-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-notification-w3c-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
+    <auto_tcn>14</auto_tcn>\r
+    <manual_tcn>3</manual_tcn>\r
+    <total_tcn>17</total_tcn>\r
+    <pkg_name>mobile/tct-notification-w3c-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-sp01-wrt-tests" launcher="WRTLauncher -iu" category="Web Runtime">\r
+    <auto_tcn>4</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>4</total_tcn>\r
+    <pkg_name>common/tct-sp01-wrt-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-widget02-w3c-tests" category="W3C/HTML5 APIs">\r
+    <auto_tcn>68</auto_tcn>\r
+    <manual_tcn>82</manual_tcn>\r
+    <total_tcn>150</total_tcn>\r
+    <pkg_name>mobile/tct-widget02-w3c-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-websetting-tizen-tests" launcher="WRTLauncher" category="Tizen Web Device APIs">\r
+    <auto_tcn>22</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>22</total_tcn>\r
+    <pkg_name>mobile/tct-websetting-tizen-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-audio-html5-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
+    <auto_tcn>333</auto_tcn>\r
+    <manual_tcn>1</manual_tcn>\r
+    <total_tcn>334</total_tcn>\r
+    <pkg_name>mobile/tct-audio-html5-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-screenorientation-w3c-tests" launcher="xwalk" category="W3C/HTML5 APIs">\r
+    <auto_tcn>17</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>17</total_tcn>\r
+    <pkg_name>mobile/tct-screenorientation-w3c-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-sp02-wrt-tests" category="Web Runtime">\r
+    <auto_tcn>1</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>1</total_tcn>\r
+    <pkg_name>common/tct-sp02-wrt-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-rt02-wrt-tests" category="Web Runtime">\r
+    <auto_tcn>3</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>3</total_tcn>\r
+    <pkg_name>common/tct-rt02-wrt-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-sound-tizen-tests" launcher="WRTLauncher" category="Tizen Web Device APIs">\r
+    <auto_tcn>52</auto_tcn>\r
+    <manual_tcn>8</manual_tcn>\r
+    <total_tcn>60</total_tcn>\r
+    <pkg_name>mobile/tct-sound-tizen-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-ext02-wrt-tests" category="Web Runtime">\r
+    <auto_tcn>8</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>8</total_tcn>\r
+    <pkg_name>common/tct-ext02-wrt-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-application-tizen-tests" launcher="WRTLauncher" category="Tizen Web Device APIs">\r
+    <auto_tcn>184</auto_tcn>\r
+    <manual_tcn>8</manual_tcn>\r
+    <total_tcn>192</total_tcn>\r
+    <pkg_name>mobile/tct-application-tizen-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-bluetooth-tizen-tests" launcher="WRTLauncher" category="Tizen Web Device APIs">\r
+    <auto_tcn>257</auto_tcn>\r
+    <manual_tcn>142</manual_tcn>\r
+    <total_tcn>399</total_tcn>\r
+    <pkg_name>mobile/tct-bluetooth-tizen-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-humanactivitymonitor-tizen-tests" launcher="WRTLauncher" category="Tizen Web Device APIs">\r
+    <auto_tcn>61</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>61</total_tcn>\r
+    <pkg_name>mobile/tct-humanactivitymonitor-tizen-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-fonts-css3-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
+    <auto_tcn>11</auto_tcn>\r
+    <manual_tcn>131</manual_tcn>\r
+    <total_tcn>142</total_tcn>\r
+    <pkg_name>common/tct-fonts-css3-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-security-tcs-tests" launcher="WRTLauncher" category="Compliance">\r
+    <auto_tcn>3</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>3</total_tcn>\r
+    <pkg_name>common/tct-security-tcs-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-speech-w3c-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
+    <auto_tcn>40</auto_tcn>\r
+    <manual_tcn>1</manual_tcn>\r
+    <total_tcn>41</total_tcn>\r
+    <pkg_name>common/tct-speech-w3c-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-ui01-wrt-tests" launcher="WRTLauncher -iu" category="Web Runtime">\r
+    <auto_tcn>30</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>30</total_tcn>\r
+    <pkg_name>mobile/tct-ui01-wrt-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-animationtiming-w3c-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
+    <auto_tcn>11</auto_tcn>\r
+    <manual_tcn>7</manual_tcn>\r
+    <total_tcn>18</total_tcn>\r
+    <pkg_name>common/tct-animationtiming-w3c-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-selectorslevel2-w3c-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
+    <auto_tcn>30</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>30</total_tcn>\r
+    <pkg_name>common/tct-selectorslevel2-w3c-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-wgtapi01-w3c-tests" launcher="WRTLauncher -iu" category="W3C/HTML5 APIs">\r
+    <auto_tcn>107</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>107</total_tcn>\r
+    <pkg_name>common/tct-wgtapi01-w3c-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-inputdevice-tizen-tests" launcher="WRTLauncher" category="Tizen Web Device APIs">\r
+    <auto_tcn>30</auto_tcn>\r
+    <manual_tcn>3</manual_tcn>\r
+    <total_tcn>33</total_tcn>\r
+    <pkg_name>mobile/tct-inputdevice-tizen-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-webaudio-w3c-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
+    <auto_tcn>422</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>422</total_tcn>\r
+    <pkg_name>mobile/tct-webaudio-w3c-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-filewriterapi-w3c-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
+    <auto_tcn>106</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>106</total_tcn>\r
+    <pkg_name>mobile/tct-filewriterapi-w3c-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-sensor-tizen-tests" launcher="WRTLauncher" category="Tizen Web Device APIs">\r
+    <auto_tcn>119</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>119</total_tcn>\r
+    <pkg_name>mobile/tct-sensor-tizen-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-secureelement-tizen-tests" launcher="WRTLauncher" category="Tizen Web Device APIs">\r
+    <auto_tcn>71</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>71</total_tcn>\r
+    <pkg_name>mobile/tct-secureelement-tizen-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-power-tizen-tests" launcher="WRTLauncher" category="Tizen Web Device APIs">\r
+    <auto_tcn>50</auto_tcn>\r
+    <manual_tcn>6</manual_tcn>\r
+    <total_tcn>56</total_tcn>\r
+    <pkg_name>mobile/tct-power-tizen-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-appwgt-wrt-tests" category="Web Runtime">\r
+    <auto_tcn>7</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>7</total_tcn>\r
+    <pkg_name>common/tct-appwgt-wrt-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-privilege-tizen-tests" launcher="WRTLauncher" category="Tizen Web Device APIs">\r
+    <auto_tcn>65</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>65</total_tcn>\r
+    <pkg_name>common/tct-privilege-tizen-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-alarm-tizen-tests" launcher="WRTLauncher" category="Tizen Web Device APIs">\r
+    <auto_tcn>60</auto_tcn>\r
+    <manual_tcn>1</manual_tcn>\r
+    <total_tcn>61</total_tcn>\r
+    <pkg_name>common/tct-alarm-tizen-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-touchevent-w3c-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
+    <auto_tcn>16</auto_tcn>\r
+    <manual_tcn>7</manual_tcn>\r
+    <total_tcn>23</total_tcn>\r
+    <pkg_name>mobile/tct-touchevent-w3c-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <!--\r
+  <suite name="tct-wgtapi02-w3c-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
+    <auto_tcn>0</auto_tcn>\r
+    <manual_tcn>34</manual_tcn>\r
+    <total_tcn>34</total_tcn>\r
+    <pkg_name>common/tct-wgtapi02-w3c-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  -->\r
+  <suite name="tct-archive-tizen-tests" launcher="WRTLauncher" category="Tizen Web Device APIs">\r
+    <auto_tcn>106</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>106</total_tcn>\r
+    <pkg_name>common/tct-archive-tizen-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-account-tizen-tests" launcher="WRTLauncher" category="Tizen Web Device APIs">\r
+    <auto_tcn>89</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>89</total_tcn>\r
+    <pkg_name>mobile/tct-account-tizen-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-tizen-tizen-tests" launcher="WRTLauncher" category="Tizen Web Device APIs">\r
+    <auto_tcn>81</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>81</total_tcn>\r
+    <pkg_name>common/tct-tizen-tizen-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-widget01-w3c-tests" launcher="WRTLauncher -iu" category="W3C/HTML5 APIs">\r
+    <auto_tcn>155</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>155</total_tcn>\r
+    <pkg_name>mobile/tct-widget01-w3c-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-bookmark-tizen-tests" launcher="WRTLauncher" category="Tizen Web Device APIs">\r
+    <auto_tcn>36</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>36</total_tcn>\r
+    <pkg_name>mobile/tct-bookmark-tizen-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-3dtransforms-css3-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
+    <auto_tcn>32</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>32</total_tcn>\r
+    <pkg_name>common/tct-3dtransforms-css3-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-calendar-tizen-tests" launcher="WRTLauncher" category="Tizen Web Device APIs">\r
+    <auto_tcn>354</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>354</total_tcn>\r
+    <pkg_name>mobile/tct-calendar-tizen-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <!--\r
+  <suite name="tct-geoallow-w3c-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
+    <auto_tcn>208</auto_tcn>\r
+    <manual_tcn>3</manual_tcn>\r
+    <total_tcn>211</total_tcn>\r
+    <pkg_name>mobile/tct-geoallow-w3c-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  -->\r
+  <suite name="tct-sessionhistory-html5-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
+    <auto_tcn>148</auto_tcn>\r
+    <manual_tcn>1</manual_tcn>\r
+    <total_tcn>149</total_tcn>\r
+    <pkg_name>common/tct-sessionhistory-html5-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-datacontrol-tizen-tests" launcher="WRTLauncher" category="Tizen Web Device APIs">\r
+    <auto_tcn>113</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>113</total_tcn>\r
+    <pkg_name>mobile/tct-datacontrol-tizen-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-appcontrol-tizen-tests" launcher="WRTLauncher" category="Tizen Web Device APIs">\r
+    <auto_tcn>5</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>5</total_tcn>\r
+    <pkg_name>mobile/tct-appcontrol-tizen-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-callhistory-tizen-tests" launcher="WRTLauncher" category="Tizen Web Device APIs">\r
+    <auto_tcn>80</auto_tcn>\r
+    <manual_tcn>27</manual_tcn>\r
+    <total_tcn>107</total_tcn>\r
+    <pkg_name>mobile/tct-callhistory-tizen-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <!--\r
+  <suite name="tct-geodeny-w3c-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
+    <auto_tcn>0</auto_tcn>\r
+    <manual_tcn>3</manual_tcn>\r
+    <total_tcn>3</total_tcn>\r
+    <pkg_name>mobile/tct-geodeny-w3c-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  -->\r
+  <suite name="tct-canvas-html5-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
+    <auto_tcn>845</auto_tcn>\r
+    <manual_tcn>19</manual_tcn>\r
+    <total_tcn>864</total_tcn>\r
+    <pkg_name>common/tct-canvas-html5-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-ui-css3-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
+    <auto_tcn>43</auto_tcn>\r
+    <manual_tcn>1</manual_tcn>\r
+    <total_tcn>44</total_tcn>\r
+    <pkg_name>common/tct-ui-css3-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-selectorslevel1-w3c-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
+    <auto_tcn>78</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>78</total_tcn>\r
+    <pkg_name>common/tct-selectorslevel1-w3c-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-sse-w3c-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
+    <auto_tcn>68</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>68</total_tcn>\r
+    <pkg_name>mobile/tct-sse-w3c-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <!--\r
+  <suite name="tct-widgetpolicy-w3c-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
+    <auto_tcn>0</auto_tcn>\r
+    <manual_tcn>33</manual_tcn>\r
+    <total_tcn>33</total_tcn>\r
+    <pkg_name>common/tct-widgetpolicy-w3c-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  -->\r
+  <suite name="tct-batterystatus-w3c-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
+    <auto_tcn>23</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>23</total_tcn>\r
+    <pkg_name>mobile/tct-batterystatus-w3c-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-mediacontroller-tizen-tests" launcher="WRTLauncher" category="Tizen Web Device APIs">\r
+    <auto_tcn>162</auto_tcn>\r
+    <manual_tcn>3</manual_tcn>\r
+    <total_tcn>165</total_tcn>\r
+    <pkg_name>mobile/tct-mediacontroller-tizen-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+ <suite name="tct-maxLength-wrt-tests" launcher="WRTLauncher -iu" category="Web Runtime">\r
+    <auto_tcn>14</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>14</total_tcn>\r
+    <pkg_name>common/tct-maxLength-wrt-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-systeminfo-tizen-tests" launcher="WRTLauncher" category="Tizen Web Device APIs">\r
+    <auto_tcn>304</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>304</total_tcn>\r
+    <pkg_name>mobile/tct-systeminfo-tizen-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-filesystem-tizen-tests" launcher="WRTLauncher" category="Tizen Web Device APIs">\r
+    <auto_tcn>289</auto_tcn>\r
+    <manual_tcn>3</manual_tcn>\r
+    <total_tcn>292</total_tcn>\r
+    <pkg_name>mobile/tct-filesystem-tizen-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-messaging-sms-tizen-tests" launcher="WRTLauncher" category="Tizen Web Device APIs">\r
+    <auto_tcn>184</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>184</total_tcn>\r
+    <pkg_name>mobile/tct-messaging-sms-tizen-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-vibration-w3c-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
+    <auto_tcn>2</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>2</total_tcn>\r
+    <pkg_name>mobile/tct-vibration-w3c-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-stab-wrt-tests" category="Web Runtime">\r
+    <auto_tcn>1</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>1</total_tcn>\r
+    <pkg_name>common/tct-stab-wrt-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-text-css3-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
+    <auto_tcn>27</auto_tcn>\r
+    <manual_tcn>15</manual_tcn>\r
+    <total_tcn>42</total_tcn>\r
+    <pkg_name>common/tct-text-css3-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-webstorage-w3c-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
+    <auto_tcn>177</auto_tcn>\r
+    <manual_tcn>4</manual_tcn>\r
+    <total_tcn>181</total_tcn>\r
+    <pkg_name>common/tct-webstorage-w3c-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-download-tizen-tests" launcher="WRTLauncher" category="Tizen Web Device APIs">\r
+    <auto_tcn>62</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>62</total_tcn>\r
+    <pkg_name>common/tct-download-tizen-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-mediaqueries-css3-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
+    <auto_tcn>49</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>49</total_tcn>\r
+    <pkg_name>mobile/tct-mediaqueries-css3-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-systemsetting-tizen-tests" launcher="WRTLauncher" category="Tizen Web Device APIs">\r
+    <auto_tcn>33</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>33</total_tcn>\r
+    <pkg_name>mobile/tct-systemsetting-tizen-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-backgrounds-css3-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
+    <auto_tcn>541</auto_tcn>\r
+    <manual_tcn>74</manual_tcn>\r
+    <total_tcn>615</total_tcn>\r
+    <pkg_name>mobile/tct-backgrounds-css3-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-video-html5-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
+    <auto_tcn>361</auto_tcn>\r
+    <manual_tcn>4</manual_tcn>\r
+    <total_tcn>365</total_tcn>\r
+    <pkg_name>mobile/tct-video-html5-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-pm-wrt-tests" category="Web Runtime">\r
+    <auto_tcn>24</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>24</total_tcn>\r
+    <pkg_name>common/tct-pm-wrt-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-webgl-nonw3c-tests" launcher="WRTLauncher" category="Supplementary APIs">\r
+    <auto_tcn>889</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>889</total_tcn>\r
+    <pkg_name>common/tct-webgl-nonw3c-tests-2.4.zip</pkg_name>\r
+  </suite>\r
+</ns3:testplan>\r
+\r
diff --git a/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/shell/plan/Web_Full_mobile_3.0.xml b/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/shell/plan/Web_Full_mobile_3.0.xml
new file mode 100755 (executable)
index 0000000..e63876c
--- /dev/null
@@ -0,0 +1,797 @@
+<?xml version="1.0" encoding="UTF-8"?>\r
+<ns3:testplan xmlns:ns3="http://www.example.org/plan/" xmlns="" name="Web_Full_mobile_3.0" profile="mobile">\r
+  <execute_type>Auto</execute_type>\r
+  <suite name="tct-jsenhance-html5-tests" category="W3C/HTML5 APIs">\r
+    <auto_tcn>7</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>7</total_tcn>\r
+    <pkg_name>common/tct-jsenhance-html5-tests-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-multicolumn-css3-tests" category="W3C/HTML5 APIs">\r
+    <auto_tcn>136</auto_tcn>\r
+    <manual_tcn>18</manual_tcn>\r
+    <total_tcn>154</total_tcn>\r
+    <pkg_name>common/tct-multicolumn-css3-tests-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-messaging-mms-tizen-tests" category="Tizen Web Device APIs">\r
+    <auto_tcn>123</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>123</total_tcn>\r
+    <pkg_name>mobile/tct-messaging-mms-tizen-tests-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-devicemotion-cordova-tests" category="Cordova Plugin APIs">\r
+    <auto_tcn>18</auto_tcn>\r
+    <manual_tcn>1</manual_tcn>\r
+    <total_tcn>19</total_tcn>\r
+    <pkg_name>common/tct-devicemotion-cordova-tests-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-workers-w3c-tests" category="W3C/HTML5 APIs">\r
+    <auto_tcn>77</auto_tcn>\r
+    <manual_tcn>1</manual_tcn>\r
+    <total_tcn>78</total_tcn>\r
+    <pkg_name>common/tct-workers-w3c-tests-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-transitions-css3-tests" category="W3C/HTML5 APIs">\r
+    <auto_tcn>9</auto_tcn>\r
+    <manual_tcn>6</manual_tcn>\r
+    <total_tcn>15</total_tcn>\r
+    <pkg_name>common/tct-transitions-css3-tests-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-namespace-tizen-tests" category="Tizen Web Device APIs">\r
+    <auto_tcn>33</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>33</total_tcn>\r
+    <pkg_name>mobile/tct-namespace-tizen-tests-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-messaging-email-tizen-tests" category="Tizen Web Device APIs">\r
+    <auto_tcn>307</auto_tcn>\r
+    <manual_tcn>1</manual_tcn>\r
+    <total_tcn>308</total_tcn>\r
+    <pkg_name>mobile/tct-messaging-email-tizen-tests-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-network-information-cordova-tests" category="Cordova Plugin APIs">\r
+    <auto_tcn>10</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>10</total_tcn>\r
+    <pkg_name>common/tct-network-information-cordova-tests-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-crypto-w3c-tests" category="W3C/HTML5 APIs">\r
+    <auto_tcn>78</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>78</total_tcn>\r
+    <pkg_name>common/tct-crypto-w3c-tests-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-2dtransforms-css3-tests" category="W3C/HTML5 APIs">\r
+    <auto_tcn>36</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>36</total_tcn>\r
+    <pkg_name>common/tct-2dtransforms-css3-tests-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-dialogs-cordova-tests" category="Cordova Plugin APIs">\r
+    <auto_tcn>13</auto_tcn>\r
+    <manual_tcn>9</manual_tcn>\r
+    <total_tcn>22</total_tcn>\r
+    <pkg_name>common/tct-dialogs-cordova-tests-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-time-tizen-tests" category="Tizen Web Device APIs">\r
+    <auto_tcn>470</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>470</total_tcn>\r
+    <pkg_name>mobile/tct-time-tizen-tests-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-forms-html5-tests" category="W3C/HTML5 APIs">\r
+    <auto_tcn>49</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>49</total_tcn>\r
+    <pkg_name>common/tct-forms-html5-tests-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-capability-tests" category="Compliance">\r
+    <auto_tcn>15</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>15</total_tcn>\r
+    <pkg_name>common/tct-capability-tests-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-fileapi-w3c-tests" category="W3C/HTML5 APIs">\r
+    <auto_tcn>33</auto_tcn>\r
+    <manual_tcn>5</manual_tcn>\r
+    <total_tcn>38</total_tcn>\r
+    <pkg_name>common/tct-fileapi-w3c-tests-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-mediacapture-w3c-tests" category="W3C/HTML5 APIs">\r
+    <auto_tcn>6</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>6</total_tcn>\r
+    <pkg_name>common/tct-mediacapture-w3c-tests-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-ext01-wrt-tests" category="Tizen WRT Core Spec">\r
+    <auto_tcn>3</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>3</total_tcn>\r
+    <pkg_name>mobile/tct-ext01-wrt-tests-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-exif-tizen-tests" category="Tizen Web Device APIs">\r
+    <auto_tcn>64</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>64</total_tcn>\r
+    <pkg_name>common/tct-exif-tizen-tests-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-csp-w3c-tests" category="W3C/HTML5 APIs">\r
+    <auto_tcn>137</auto_tcn>\r
+    <manual_tcn>83</manual_tcn>\r
+    <total_tcn>220</total_tcn>\r
+    <pkg_name>common/tct-csp-w3c-tests-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-privilege-wrt-tests" category="Tizen WRT Core Spec">\r
+    <auto_tcn>209</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>209</total_tcn>\r
+    <pkg_name>mobile/tct-privilege-wrt-tests-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-mediakey-tizen-tests" category="Tizen Web Device APIs">\r
+    <auto_tcn>11</auto_tcn>\r
+    <manual_tcn>4</manual_tcn>\r
+    <total_tcn>15</total_tcn>\r
+    <pkg_name>mobile/tct-mediakey-tizen-tests-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-media-cordova-tests" category="Cordova Plugin APIs">\r
+    <auto_tcn>52</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>52</total_tcn>\r
+    <pkg_name>common/tct-media-cordova-tests-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-deviceorientation-w3c-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
+    <auto_tcn>37</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>37</total_tcn>\r
+    <pkg_name>mobile/tct-deviceorientation-w3c-tests-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-webmessaging-w3c-tests" category="W3C/HTML5 APIs">\r
+    <auto_tcn>175</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>175</total_tcn>\r
+    <pkg_name>common/tct-webmessaging-w3c-tests-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-file-cordova-tests" category="Cordova Plugin APIs">\r
+    <auto_tcn>172</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>172</total_tcn>\r
+    <pkg_name>common/tct-file-cordova-tests-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-package-tizen-tests" category="Tizen Web Device APIs">\r
+    <auto_tcn>54</auto_tcn>\r
+    <manual_tcn>12</manual_tcn>\r
+    <total_tcn>66</total_tcn>\r
+    <pkg_name>common/tct-package-tizen-tests-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-template-w3c-tests" category="W3C/HTML5 APIs">\r
+    <auto_tcn>1</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>1</total_tcn>\r
+    <pkg_name>common/tct-template-w3c-tests-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-notification-tizen-tests" category="Tizen Web Device APIs">\r
+    <auto_tcn>96</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>96</total_tcn>\r
+    <pkg_name>common/tct-notification-tizen-tests-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-fmradio-tizen-tests" category="Tizen Web Device APIs">\r
+    <auto_tcn>68</auto_tcn>\r
+    <manual_tcn>7</manual_tcn>\r
+    <total_tcn>75</total_tcn>\r
+    <pkg_name>mobile/tct-fmradio-tizen-tests-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-rt01-wrt-tests" category="Tizen WRT Core Spec">\r
+    <auto_tcn>12</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>12</total_tcn>\r
+    <pkg_name>common/tct-rt01-wrt-tests-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-appcache-html5-tests" category="W3C/HTML5 APIs">\r
+    <auto_tcn>26</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>26</total_tcn>\r
+    <pkg_name>common/tct-appcache-html5-tests-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-svg-html5-tests" category="W3C/HTML5 APIs">\r
+    <auto_tcn>43</auto_tcn>\r
+    <manual_tcn>14</manual_tcn>\r
+    <total_tcn>57</total_tcn>\r
+    <pkg_name>common/tct-svg-html5-tests-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-websocket-w3c-tests" category="W3C/HTML5 APIs">\r
+    <auto_tcn>266</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>266</total_tcn>\r
+    <pkg_name>common/tct-websocket-w3c-tests-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-flexiblebox-css3-tests" category="W3C/HTML5 APIs">\r
+    <auto_tcn>14</auto_tcn>\r
+    <manual_tcn>14</manual_tcn>\r
+    <total_tcn>28</total_tcn>\r
+    <pkg_name>common/tct-flexiblebox-css3-tests-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-dnd-html5-tests" category="W3C/HTML5 APIs">\r
+    <auto_tcn>6</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>6</total_tcn>\r
+    <pkg_name>common/tct-dnd-html5-tests-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-extra-html5-tests" category="W3C/HTML5 APIs">\r
+    <auto_tcn>548</auto_tcn>\r
+    <manual_tcn>25</manual_tcn>\r
+    <total_tcn>573</total_tcn>\r
+    <pkg_name>common/tct-extra-html5-tests-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-fullscreen-nonw3c-tests" category="Supplementary APIs">\r
+    <auto_tcn>20</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>20</total_tcn>\r
+    <pkg_name>common/tct-fullscreen-nonw3c-tests-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-colors-css3-tests" category="W3C/HTML5 APIs">\r
+    <auto_tcn>46</auto_tcn>\r
+    <manual_tcn>29</manual_tcn>\r
+    <total_tcn>75</total_tcn>\r
+    <pkg_name>common/tct-colors-css3-tests-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-indexeddb-w3c-tests" category="W3C/HTML5 APIs">\r
+    <auto_tcn>343</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>343</total_tcn>\r
+    <pkg_name>common/tct-indexeddb-w3c-tests-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-sandbox-html5-tests" category="W3C/HTML5 APIs">\r
+    <auto_tcn>45</auto_tcn>\r
+    <manual_tcn>1</manual_tcn>\r
+    <total_tcn>46</total_tcn>\r
+    <pkg_name>common/tct-sandbox-html5-tests-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-networkbearerselection-tizen-tests" category="Tizen Web Device APIs">\r
+    <auto_tcn>24</auto_tcn>\r
+    <manual_tcn>1</manual_tcn>\r
+    <total_tcn>25</total_tcn>\r
+    <pkg_name>mobile/tct-networkbearerselection-tizen-tests-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-messageport-tizen-tests" category="Tizen Web Device APIs">\r
+    <auto_tcn>51</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>51</total_tcn>\r
+    <pkg_name>common/tct-messageport-tizen-tests-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-push-tizen-tests" category="Tizen Web Device APIs">\r
+    <auto_tcn>45</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>45</total_tcn>\r
+    <pkg_name>mobile/tct-push-tizen-tests-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-browserstate-html5-tests" category="W3C/HTML5 APIs">\r
+    <auto_tcn>3</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>3</total_tcn>\r
+    <pkg_name>common/tct-browserstate-html5-tests-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-cors-w3c-tests" category="W3C/HTML5 APIs">\r
+    <auto_tcn>10</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>10</total_tcn>\r
+    <pkg_name>common/tct-cors-w3c-tests-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-xmlhttprequest-w3c-tests" category="W3C/HTML5 APIs">\r
+    <auto_tcn>212</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>212</total_tcn>\r
+    <pkg_name>common/tct-xmlhttprequest-w3c-tests-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-navigationtiming-w3c-tests" category="W3C/HTML5 APIs">\r
+    <auto_tcn>82</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>82</total_tcn>\r
+    <pkg_name>common/tct-navigationtiming-w3c-tests-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-typedarrays-nonw3c-tests" category="Supplementary APIs">\r
+    <auto_tcn>446</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>446</total_tcn>\r
+    <pkg_name>common/tct-typedarrays-nonw3c-tests-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-animations-css3-tests" category="W3C/HTML5 APIs">\r
+    <auto_tcn>25</auto_tcn>\r
+    <manual_tcn>1</manual_tcn>\r
+    <total_tcn>26</total_tcn>\r
+    <pkg_name>common/tct-animations-css3-tests-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-badge-tizen-tests" category="Tizen Web Device APIs">\r
+    <auto_tcn>26</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>26</total_tcn>\r
+    <pkg_name>mobile/tct-badge-tizen-tests-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-nfc-tizen-tests" category="Tizen Web Device APIs">\r
+    <auto_tcn>218</auto_tcn>\r
+    <manual_tcn>37</manual_tcn>\r
+    <total_tcn>255</total_tcn>\r
+    <pkg_name>mobile/tct-nfc-tizen-tests-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-pagevisibility-w3c-tests" category="W3C/HTML5 APIs">\r
+    <auto_tcn>18</auto_tcn>\r
+    <manual_tcn>2</manual_tcn>\r
+    <total_tcn>20</total_tcn>\r
+    <pkg_name>common/tct-pagevisibility-w3c-tests-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-ResponsiveImage-w3c-tests" category="Tizen W3C APIs">\r
+    <auto_tcn>32</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>32</total_tcn>\r
+    <pkg_name>common/tct-ResponsiveImage-w3c-tests-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-content-tizen-tests" category="Tizen Web Device APIs">\r
+    <auto_tcn>245</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>245</total_tcn>\r
+    <pkg_name>common/tct-content-tizen-tests-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-contact-tizen-tests" category="Tizen Web Device APIs">\r
+    <auto_tcn>479</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>479</total_tcn>\r
+    <pkg_name>mobile/tct-contact-tizen-tests-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-gumallow-w3c-tests" category="W3C/HTML5 APIs">\r
+    <auto_tcn>6</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>6</total_tcn>\r
+    <pkg_name>common/tct-gumallow-w3c-tests-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-notification-w3c-tests" category="W3C/HTML5 APIs">\r
+    <auto_tcn>39</auto_tcn>\r
+    <manual_tcn>3</manual_tcn>\r
+    <total_tcn>42</total_tcn>\r
+    <pkg_name>mobile/tct-notification-w3c-tests-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-serviceworkers-w3c-tests" category="W3C/HTML5 APIs">\r
+    <auto_tcn>107</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>107</total_tcn>\r
+    <pkg_name>common/tct-serviceworkers-w3c-tests-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-preference-tizen-tests" category="Tizen Web Device APIs">\r
+    <auto_tcn>45</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>45</total_tcn>\r
+    <pkg_name>mobile/tct-preference-tizen-tests-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-globalization-cordova-tests" category="Cordova Plugin APIs">\r
+    <auto_tcn>106</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>106</total_tcn>\r
+    <pkg_name>common/tct-globalization-cordova-tests-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-sp01-wrt-tests" category="Tizen WRT Core Spec">\r
+    <auto_tcn>4</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>4</total_tcn>\r
+    <pkg_name>common/tct-sp01-wrt-tests-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-widget02-w3c-tests" category="W3C/HTML5 APIs">\r
+    <auto_tcn>68</auto_tcn>\r
+    <manual_tcn>75</manual_tcn>\r
+    <total_tcn>143</total_tcn>\r
+    <pkg_name>mobile/tct-widget02-w3c-tests-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-websetting-tizen-tests" category="Tizen Web Device APIs">\r
+    <auto_tcn>22</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>22</total_tcn>\r
+    <pkg_name>mobile/tct-websetting-tizen-tests-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-audio-html5-tests" category="W3C/HTML5 APIs">\r
+    <auto_tcn>152</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>152</total_tcn>\r
+    <pkg_name>common/tct-audio-html5-tests-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-import-w3c-tests" category="W3C/HTML5 APIs">\r
+    <auto_tcn>1</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>1</total_tcn>\r
+    <pkg_name>common/tct-import-w3c-tests-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-screenorientation-w3c-tests" category="W3C/HTML5 APIs">\r
+    <auto_tcn>14</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>14</total_tcn>\r
+    <pkg_name>common/tct-screenorientation-w3c-tests-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-rt02-wrt-tests" category="Tizen WRT Core Spec">\r
+    <auto_tcn>3</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>3</total_tcn>\r
+    <pkg_name>common/tct-rt02-wrt-tests-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-sp02-wrt-tests" category="Tizen WRT Core Spec">\r
+    <auto_tcn>1</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>1</total_tcn>\r
+    <pkg_name>common/tct-sp02-wrt-tests-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-sound-tizen-tests" category="Tizen Web Device APIs">\r
+    <auto_tcn>52</auto_tcn>\r
+    <manual_tcn>8</manual_tcn>\r
+    <total_tcn>60</total_tcn>\r
+    <pkg_name>mobile/tct-sound-tizen-tests-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-ext02-wrt-tests" category="Tizen WRT Core Spec">\r
+    <auto_tcn>8</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>8</total_tcn>\r
+    <pkg_name>common/tct-ext02-wrt-tests-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-application-tizen-tests" category="Tizen Web Device APIs">\r
+    <auto_tcn>193</auto_tcn>\r
+    <manual_tcn>6</manual_tcn>\r
+    <total_tcn>199</total_tcn>\r
+    <pkg_name>mobile/tct-application-tizen-tests-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-humanactivitymonitor-tizen-tests" category="Tizen Web Device APIs">\r
+    <auto_tcn>87</auto_tcn>\r
+    <manual_tcn>15</manual_tcn>\r
+    <total_tcn>102</total_tcn>\r
+    <pkg_name>common/tct-humanactivitymonitor-tizen-tests-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-bluetooth-tizen-tests" category="Tizen Web Device APIs">\r
+    <auto_tcn>255</auto_tcn>\r
+    <manual_tcn>147</manual_tcn>\r
+    <total_tcn>402</total_tcn>\r
+    <pkg_name>mobile/tct-bluetooth-tizen-tests-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-fonts-css3-tests" category="W3C/HTML5 APIs">\r
+    <auto_tcn>12</auto_tcn>\r
+    <manual_tcn>131</manual_tcn>\r
+    <total_tcn>143</total_tcn>\r
+    <pkg_name>common/tct-fonts-css3-tests-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-speech-w3c-tests" category="W3C/HTML5 APIs">\r
+    <auto_tcn>87</auto_tcn>\r
+    <manual_tcn>4</manual_tcn>\r
+    <total_tcn>91</total_tcn>\r
+    <pkg_name>common/tct-speech-w3c-tests-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-security-tcs-tests" launcher="WRTLauncher" category="Compliance">\r
+    <auto_tcn>3</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>3</total_tcn>\r
+    <pkg_name>common/tct-security-tcs-tests-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-ui01-wrt-tests" category="Tizen WRT Core Spec">\r
+    <auto_tcn>30</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>30</total_tcn>\r
+    <pkg_name>mobile/tct-ui01-wrt-tests-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-animationtiming-w3c-tests" category="W3C/HTML5 APIs">\r
+    <auto_tcn>11</auto_tcn>\r
+    <manual_tcn>7</manual_tcn>\r
+    <total_tcn>18</total_tcn>\r
+    <pkg_name>common/tct-animationtiming-w3c-tests-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-selectorslevel2-w3c-tests" category="W3C/HTML5 APIs">\r
+    <auto_tcn>22</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>22</total_tcn>\r
+    <pkg_name>common/tct-selectorslevel2-w3c-tests-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-wgtapi01-w3c-tests" category="W3C/HTML5 APIs">\r
+    <auto_tcn>107</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>107</total_tcn>\r
+    <pkg_name>common/tct-wgtapi01-w3c-tests-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-webaudio-w3c-tests" category="W3C/HTML5 APIs">\r
+    <auto_tcn>257</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>257</total_tcn>\r
+    <pkg_name>common/tct-webaudio-w3c-tests-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-inputdevice-tizen-tests" category="Tizen Web Device APIs">\r
+    <auto_tcn>39</auto_tcn>\r
+    <manual_tcn>3</manual_tcn>\r
+    <total_tcn>42</total_tcn>\r
+    <pkg_name>mobile/tct-inputdevice-tizen-tests-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-secureelement-tizen-tests" category="Tizen Web Device APIs">\r
+    <auto_tcn>102</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>102</total_tcn>\r
+    <pkg_name>mobile/tct-secureelement-tizen-tests-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-sensor-tizen-tests" category="Tizen Web Device APIs">\r
+    <auto_tcn>166</auto_tcn>\r
+    <manual_tcn>21</manual_tcn>\r
+    <total_tcn>187</total_tcn>\r
+    <pkg_name>mobile/tct-sensor-tizen-tests-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-power-tizen-tests" category="Tizen Web Device APIs">\r
+    <auto_tcn>50</auto_tcn>\r
+    <manual_tcn>6</manual_tcn>\r
+    <total_tcn>56</total_tcn>\r
+    <pkg_name>mobile/tct-power-tizen-tests-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-privilege-tizen-tests" category="Tizen Web Device APIs">\r
+    <auto_tcn>71</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>71</total_tcn>\r
+    <pkg_name>common/tct-privilege-tizen-tests-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-alarm-tizen-tests" category="Tizen Web Device APIs">\r
+    <auto_tcn>60</auto_tcn>\r
+    <manual_tcn>1</manual_tcn>\r
+    <total_tcn>61</total_tcn>\r
+    <pkg_name>common/tct-alarm-tizen-tests-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-touchevent-w3c-tests" category="W3C/HTML5 APIs">\r
+    <auto_tcn>12</auto_tcn>\r
+    <manual_tcn>7</manual_tcn>\r
+    <total_tcn>19</total_tcn>\r
+    <pkg_name>common/tct-touchevent-w3c-tests-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-woff-w3c-tests" category="W3C/HTML5 APIs">\r
+    <auto_tcn>0</auto_tcn>\r
+    <manual_tcn>22</manual_tcn>\r
+    <total_tcn>22</total_tcn>\r
+    <pkg_name>common/tct-woff-w3c-tests-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-wgtapi02-w3c-tests" category="W3C/HTML5 APIs">\r
+    <auto_tcn>0</auto_tcn>\r
+    <manual_tcn>34</manual_tcn>\r
+    <total_tcn>34</total_tcn>\r
+    <pkg_name>common/tct-wgtapi02-w3c-tests-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-archive-tizen-tests" category="Tizen Web Device APIs">\r
+    <auto_tcn>106</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>106</total_tcn>\r
+    <pkg_name>common/tct-archive-tizen-tests-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-account-tizen-tests" category="Tizen Web Device APIs">\r
+    <auto_tcn>90</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>90</total_tcn>\r
+    <pkg_name>mobile/tct-account-tizen-tests-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-tizen-tizen-tests" category="Tizen Web Device APIs">\r
+    <auto_tcn>81</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>81</total_tcn>\r
+    <pkg_name>common/tct-tizen-tizen-tests-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-widget01-w3c-tests" category="W3C/HTML5 APIs">\r
+    <auto_tcn>155</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>155</total_tcn>\r
+    <pkg_name>common/tct-widget01-w3c-tests-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-bookmark-tizen-tests" category="Tizen Web Device APIs">\r
+    <auto_tcn>36</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>36</total_tcn>\r
+    <pkg_name>mobile/tct-bookmark-tizen-tests-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-3dtransforms-css3-tests" category="W3C/HTML5 APIs">\r
+    <auto_tcn>32</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>32</total_tcn>\r
+    <pkg_name>common/tct-3dtransforms-css3-tests-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-calendar-tizen-tests" launcher="WRTLauncher" category="Tizen Web Device APIs">\r
+    <auto_tcn>355</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>355</total_tcn>\r
+    <pkg_name>mobile/tct-calendar-tizen-tests-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-geoallow-w3c-tests" category="W3C/HTML5 APIs">\r
+    <auto_tcn>209</auto_tcn>\r
+    <manual_tcn>3</manual_tcn>\r
+    <total_tcn>212</total_tcn>\r
+    <pkg_name>common/tct-geoallow-w3c-tests-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-sessionhistory-html5-tests" category="W3C/HTML5 APIs">\r
+    <auto_tcn>117</auto_tcn>\r
+    <manual_tcn>2</manual_tcn>\r
+    <total_tcn>119</total_tcn>\r
+    <pkg_name>common/tct-sessionhistory-html5-tests-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-datacontrol-tizen-tests" category="Tizen Web Device APIs">\r
+    <auto_tcn>115</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>115</total_tcn>\r
+    <pkg_name>common/tct-datacontrol-tizen-tests-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-callhistory-tizen-tests" category="Tizen Web Device APIs">\r
+    <auto_tcn>80</auto_tcn>\r
+    <manual_tcn>27</manual_tcn>\r
+    <total_tcn>107</total_tcn>\r
+    <pkg_name>mobile/tct-callhistory-tizen-tests-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-appcontrol-tizen-tests" category="Tizen Web Device APIs">\r
+    <auto_tcn>5</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>5</total_tcn>\r
+    <pkg_name>mobile/tct-appcontrol-tizen-tests-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-events-cordova-tests" category="Cordova Plugin APIs">\r
+    <auto_tcn>1</auto_tcn>\r
+    <manual_tcn>6</manual_tcn>\r
+    <total_tcn>7</total_tcn>\r
+    <pkg_name>common/tct-events-cordova-tests-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-geodeny-w3c-tests" category="W3C/HTML5 APIs">\r
+    <auto_tcn>0</auto_tcn>\r
+    <manual_tcn>3</manual_tcn>\r
+    <total_tcn>3</total_tcn>\r
+    <pkg_name>common/tct-geodeny-w3c-tests-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-ui-css3-tests" category="W3C/HTML5 APIs">\r
+    <auto_tcn>40</auto_tcn>\r
+    <manual_tcn>1</manual_tcn>\r
+    <total_tcn>41</total_tcn>\r
+    <pkg_name>common/tct-ui-css3-tests-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-canvas-html5-tests" category="W3C/HTML5 APIs">\r
+    <auto_tcn>848</auto_tcn>\r
+    <manual_tcn>20</manual_tcn>\r
+    <total_tcn>868</total_tcn>\r
+    <pkg_name>common/tct-canvas-html5-tests-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-keymanager-tizen-tests" category="Tizen Web Device APIs">\r
+    <auto_tcn>39</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>39</total_tcn>\r
+    <pkg_name>common/tct-keymanager-tizen-tests-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-selectorslevel1-w3c-tests" category="W3C/HTML5 APIs">\r
+    <auto_tcn>24</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>24</total_tcn>\r
+    <pkg_name>common/tct-selectorslevel1-w3c-tests-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-sse-w3c-tests" category="W3C/HTML5 APIs">\r
+    <auto_tcn>66</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>66</total_tcn>\r
+    <pkg_name>common/tct-sse-w3c-tests-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-widgetpolicy-w3c-tests" category="W3C/HTML5 APIs">\r
+    <auto_tcn>0</auto_tcn>\r
+    <manual_tcn>22</manual_tcn>\r
+    <total_tcn>22</total_tcn>\r
+    <pkg_name>common/tct-widgetpolicy-w3c-tests-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-batterystatus-w3c-tests" category="W3C/HTML5 APIs">\r
+    <auto_tcn>25</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>25</total_tcn>\r
+    <pkg_name>common/tct-batterystatus-w3c-tests-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-mediacontroller-tizen-tests" category="Tizen Web Device APIs">\r
+    <auto_tcn>162</auto_tcn>\r
+    <manual_tcn>3</manual_tcn>\r
+    <total_tcn>165</total_tcn>\r
+    <pkg_name>common/tct-mediacontroller-tizen-tests-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-filesystem-tizen-tests" category="Tizen Web Device APIs">\r
+    <auto_tcn>289</auto_tcn>\r
+    <manual_tcn>3</manual_tcn>\r
+    <total_tcn>292</total_tcn>\r
+    <pkg_name>mobile/tct-filesystem-tizen-tests-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-systeminfo-tizen-tests" category="Tizen Web Device APIs">\r
+    <auto_tcn>382</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>382</total_tcn>\r
+    <pkg_name>mobile/tct-systeminfo-tizen-tests-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-feedback-tizen-tests" category="Tizen Web Device APIs">\r
+    <auto_tcn>15</auto_tcn>\r
+    <manual_tcn>3</manual_tcn>\r
+    <total_tcn>18</total_tcn>\r
+    <pkg_name>mobile/tct-feedback-tizen-tests-3.0.zip</pkg_name>\r
+  </suite>  \r
+  <suite name="tct-file-transfer-cordova-tests" category="Cordova Plugin APIs">\r
+    <auto_tcn>23</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>23</total_tcn>\r
+    <pkg_name>common/tct-file-transfer-cordova-tests-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-customelement-w3c-tests" category="W3C/HTML5 APIs">\r
+    <auto_tcn>10</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>10</total_tcn>\r
+    <pkg_name>common/tct-customelement-w3c-tests-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-device-cordova-tests" category="Cordova Plugin APIs">\r
+    <auto_tcn>7</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>7</total_tcn>\r
+    <pkg_name>common/tct-device-cordova-tests-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-beacon-w3c-tests" category="W3C/HTML5 APIs">\r
+    <auto_tcn>4</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>4</total_tcn>\r
+    <pkg_name>common/tct-beacon-w3c-tests-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-vibration-w3c-tests" category="W3C/HTML5 APIs">\r
+    <auto_tcn>1</auto_tcn>\r
+    <manual_tcn>1</manual_tcn>\r
+    <total_tcn>2</total_tcn>\r
+    <pkg_name>common/tct-vibration-w3c-tests-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-messaging-sms-tizen-tests" category="Tizen Web Device APIs">\r
+    <auto_tcn>184</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>184</total_tcn>\r
+    <pkg_name>mobile/tct-messaging-sms-tizen-tests-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-text-css3-tests" category="W3C/HTML5 APIs">\r
+    <auto_tcn>34</auto_tcn>\r
+    <manual_tcn>3</manual_tcn>\r
+    <total_tcn>37</total_tcn>\r
+    <pkg_name>common/tct-text-css3-tests-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-stab-wrt-tests" category="Tizen WRT Core Spec">\r
+    <auto_tcn>1</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>1</total_tcn>\r
+    <pkg_name>common/tct-stab-wrt-tests-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-webstorage-w3c-tests" category="W3C/HTML5 APIs">\r
+    <auto_tcn>195</auto_tcn>\r
+    <manual_tcn>5</manual_tcn>\r
+    <total_tcn>200</total_tcn>\r
+    <pkg_name>common/tct-webstorage-w3c-tests-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-download-tizen-tests" category="Tizen Web Device APIs">\r
+    <auto_tcn>62</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>62</total_tcn>\r
+    <pkg_name>common/tct-download-tizen-tests-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-mediaqueries-css3-tests" category="W3C/HTML5 APIs">\r
+    <auto_tcn>63</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>63</total_tcn>\r
+    <pkg_name>common/tct-mediaqueries-css3-tests-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-systemsetting-tizen-tests" category="Tizen Web Device APIs">\r
+    <auto_tcn>33</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>33</total_tcn>\r
+    <pkg_name>mobile/tct-systemsetting-tizen-tests-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-video-html5-tests" category="W3C/HTML5 APIs">\r
+    <auto_tcn>197</auto_tcn>\r
+    <manual_tcn>3</manual_tcn>\r
+    <total_tcn>200</total_tcn>\r
+    <pkg_name>common/tct-video-html5-tests-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-backgrounds-css3-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
+    <auto_tcn>541</auto_tcn>\r
+    <manual_tcn>74</manual_tcn>\r
+    <total_tcn>615</total_tcn>\r
+    <pkg_name>common/tct-backgrounds-css3-tests-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-pm-wrt-tests" category="Tizen WRT Core Spec">\r
+    <auto_tcn>24</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>24</total_tcn>\r
+    <pkg_name>common/tct-pm-wrt-tests-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-webgl-nonw3c-tests" category="Supplementary APIs">\r
+    <auto_tcn>910</auto_tcn>\r
+    <manual_tcn>1</manual_tcn>\r
+    <total_tcn>911</total_tcn>\r
+    <pkg_name>common/tct-webgl-nonw3c-tests-3.0.zip</pkg_name>\r
+  </suite>\r
+</ns3:testplan>\r
+\r
diff --git a/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/shell/plan/Web_Full_tv_2.4.xml b/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/shell/plan/Web_Full_tv_2.4.xml
new file mode 100755 (executable)
index 0000000..9714fcf
--- /dev/null
@@ -0,0 +1,501 @@
+<ns3:testplan name="Web_Full_tv_2.4" profile="tv" xmlns="" xmlns:ns3="http://www.example.org/plan/">
+  <execute_type>Auto</execute_type>
+  <suite launcher="WRTLauncher" name="tct-animationtiming-w3c-tests">
+    <auto_tcn>11</auto_tcn>
+    <manual_tcn>7</manual_tcn>
+    <total_tcn>18</total_tcn>
+    <pkg_name>common/tct-animationtiming-w3c-tests-2.4.zip</pkg_name>
+  </suite>
+  <suite launcher="WRTLauncher" name="tct-indexeddb-w3c-tests">
+    <auto_tcn>391</auto_tcn>
+    <manual_tcn>0</manual_tcn>
+    <total_tcn>391</total_tcn>
+    <pkg_name>tv/tct-indexeddb-w3c-tests-2.4.zip</pkg_name>
+  </suite>
+  <suite launcher="WRTLauncher" name="tct-ext02-wrt-tests">
+    <auto_tcn>8</auto_tcn>
+    <manual_tcn>0</manual_tcn>
+    <total_tcn>8</total_tcn>
+    <pkg_name>common/tct-ext02-wrt-tests-2.4.zip</pkg_name>
+  </suite>
+  <suite launcher="WRTLauncher" name="tct-pagevisibility-w3c-tests">
+    <auto_tcn>18</auto_tcn>
+    <manual_tcn>2</manual_tcn>
+    <total_tcn>20</total_tcn>
+    <pkg_name>tv/tct-pagevisibility-w3c-tests-2.4.zip</pkg_name>
+  </suite>
+  <suite launcher="WRTLauncher" name="tct-ext01-wrt-tests">
+    <auto_tcn>2</auto_tcn>
+    <manual_tcn>0</manual_tcn>
+    <total_tcn>2</total_tcn>
+    <pkg_name>tv/tct-ext01-wrt-tests-2.4.zip</pkg_name>
+  </suite>
+  <suite launcher="WRTLauncher" name="tct-websocket-w3c-tests">
+    <auto_tcn>268</auto_tcn>
+    <manual_tcn>0</manual_tcn>
+    <total_tcn>268</total_tcn>
+    <pkg_name>tv/tct-websocket-w3c-tests-2.4.zip</pkg_name>
+  </suite>
+  <suite launcher="WRTLauncher" name="tct-content-tizen-tests">
+    <auto_tcn>245</auto_tcn>
+    <manual_tcn>0</manual_tcn>
+    <total_tcn>245</total_tcn>
+    <pkg_name>common/tct-content-tizen-tests-2.4.zip</pkg_name>
+  </suite>
+  <suite launcher="WRTLauncher" name="tct-flexiblebox-css3-tests">
+    <auto_tcn>25</auto_tcn>
+    <manual_tcn>28</manual_tcn>
+    <total_tcn>53</total_tcn>
+    <pkg_name>common/tct-flexiblebox-css3-tests-2.4.zip</pkg_name>
+  </suite>
+  <suite launcher="WRTLauncher" name="tct-tv-channel-tizen-tests">
+    <auto_tcn>166</auto_tcn>
+    <manual_tcn>3</manual_tcn>
+    <total_tcn>169</total_tcn>
+    <pkg_name>tv/tct-tv-channel-tizen-tests-2.4.zip</pkg_name>
+  </suite>
+  <suite launcher="WRTLauncher" name="tct-rt01-wrt-tests">
+    <auto_tcn>12</auto_tcn>
+    <manual_tcn>0</manual_tcn>
+    <total_tcn>12</total_tcn>
+    <pkg_name>common/tct-rt01-wrt-tests-2.4.zip</pkg_name>
+  </suite>
+  <suite launcher="WRTLauncher" name="tct-multicolumn-css3-tests">
+    <auto_tcn>141</auto_tcn>
+    <manual_tcn>18</manual_tcn>
+    <total_tcn>159</total_tcn>
+    <pkg_name>tv/tct-multicolumn-css3-tests-2.4.zip</pkg_name>
+  </suite>
+  <suite launcher="WRTLauncher" name="tct-appwgt-wrt-tests">
+    <auto_tcn>7</auto_tcn>
+    <manual_tcn>0</manual_tcn>
+    <total_tcn>7</total_tcn>
+    <pkg_name>common/tct-appwgt-wrt-tests-2.4.zip</pkg_name>
+  </suite>
+  <suite launcher="WRTLauncher" name="tct-archive-tizen-tests">
+    <auto_tcn>106</auto_tcn>
+    <manual_tcn>0</manual_tcn>
+    <total_tcn>106</total_tcn>
+    <pkg_name>common/tct-archive-tizen-tests-2.4.zip</pkg_name>
+  </suite>
+  <suite launcher="WRTLauncher" name="tct-gumallow-w3c-tests">
+    <auto_tcn>6</auto_tcn>
+    <manual_tcn>0</manual_tcn>
+    <total_tcn>6</total_tcn>
+    <pkg_name>common/tct-gumallow-w3c-tests-2.4.zip</pkg_name>
+  </suite>
+  <suite launcher="WRTLauncher" name="tct-fullscreen-nonw3c-tests">
+    <auto_tcn>16</auto_tcn>
+    <manual_tcn>0</manual_tcn>
+    <total_tcn>16</total_tcn>
+    <pkg_name>tv/tct-fullscreen-nonw3c-tests-2.4.zip</pkg_name>
+  </suite>
+  <suite launcher="WRTLauncher" name="tct-mediacapture-w3c-tests">
+    <auto_tcn>7</auto_tcn>
+    <manual_tcn>0</manual_tcn>
+    <total_tcn>7</total_tcn>
+    <pkg_name>common/tct-mediacapture-w3c-tests-2.4.zip</pkg_name>
+  </suite>
+  <suite launcher="WRTLauncher" name="tct-jsenhance-html5-tests">
+    <auto_tcn>49</auto_tcn>
+    <manual_tcn>0</manual_tcn>
+    <total_tcn>49</total_tcn>
+    <pkg_name>common/tct-jsenhance-html5-tests-2.4.zip</pkg_name>
+  </suite>
+  <suite launcher="WRTLauncher" name="tct-pm-wrt-tests">
+    <auto_tcn>24</auto_tcn>
+    <manual_tcn>0</manual_tcn>
+    <total_tcn>24</total_tcn>
+    <pkg_name>common/tct-pm-wrt-tests-2.4.zip</pkg_name>
+  </suite>
+  <suite launcher="WRTLauncher" name="tct-wgtapi02-w3c-tests">
+    <auto_tcn>0</auto_tcn>
+    <manual_tcn>34</manual_tcn>
+    <total_tcn>34</total_tcn>
+    <pkg_name>common/tct-wgtapi02-w3c-tests-2.4.zip</pkg_name>
+  </suite>
+  <suite launcher="WRTLauncher" name="tct-widgetpolicy-w3c-tests">
+    <auto_tcn>0</auto_tcn>
+    <manual_tcn>33</manual_tcn>
+    <total_tcn>33</total_tcn>
+    <pkg_name>common/tct-widgetpolicy-w3c-tests-2.4.zip</pkg_name>
+  </suite>
+  <suite launcher="WRTLauncher" name="tct-mediaqueries-css3-tests">
+    <auto_tcn>52</auto_tcn>
+    <manual_tcn>0</manual_tcn>
+    <total_tcn>52</total_tcn>
+    <pkg_name>tv/tct-mediaqueries-css3-tests-2.4.zip</pkg_name>
+  </suite>
+  <suite launcher="WRTLauncher" name="tct-typedarrays-nonw3c-tests">
+    <auto_tcn>80</auto_tcn>
+    <manual_tcn>0</manual_tcn>
+    <total_tcn>80</total_tcn>
+    <pkg_name>common/tct-typedarrays-nonw3c-tests-2.4.zip</pkg_name>
+  </suite>
+  <suite launcher="WRTLauncher" name="tct-webaudio-w3c-tests">
+    <auto_tcn>422</auto_tcn>
+    <manual_tcn>0</manual_tcn>
+    <total_tcn>422</total_tcn>
+    <pkg_name>tv/tct-webaudio-w3c-tests-2.4.zip</pkg_name>
+  </suite>
+  <suite launcher="WRTLauncher" name="tct-widget02-w3c-tests">
+    <auto_tcn>68</auto_tcn>
+    <manual_tcn>49</manual_tcn>
+    <total_tcn>117</total_tcn>
+    <pkg_name>tv/tct-widget02-w3c-tests-2.4.zip</pkg_name>
+  </suite>
+  <suite launcher="WRTLauncher" name="tct-filesystem-tizen-tests">
+    <auto_tcn>291</auto_tcn>
+    <manual_tcn>3</manual_tcn>
+    <total_tcn>294</total_tcn>
+    <pkg_name>tv/tct-filesystem-tizen-tests-2.4.zip</pkg_name>
+  </suite>
+  <suite launcher="WRTLauncher" name="tct-keymanager-tizen-tests">
+    <auto_tcn>39</auto_tcn>
+    <manual_tcn>0</manual_tcn>
+    <total_tcn>39</total_tcn>
+    <pkg_name>tv/tct-keymanager-tizen-tests-2.4.zip</pkg_name>
+  </suite>
+  <suite launcher="WRTLauncher" name="tct-webgl-nonw3c-tests">
+    <auto_tcn>889</auto_tcn>
+    <manual_tcn>0</manual_tcn>
+    <total_tcn>889</total_tcn>
+    <pkg_name>common/tct-webgl-nonw3c-tests-2.4.zip</pkg_name>
+  </suite>
+  <suite launcher="WRTLauncher" name="tct-download-tizen-tests">
+    <auto_tcn>62</auto_tcn>
+    <manual_tcn>0</manual_tcn>
+    <total_tcn>62</total_tcn>
+    <pkg_name>common/tct-download-tizen-tests-2.4.zip</pkg_name>
+  </suite>
+  <suite launcher="WRTLauncher" name="tct-selectorslevel2-w3c-tests">
+    <auto_tcn>30</auto_tcn>
+    <manual_tcn>0</manual_tcn>
+    <total_tcn>30</total_tcn>
+    <pkg_name>common/tct-selectorslevel2-w3c-tests-2.4.zip</pkg_name>
+  </suite>
+  <suite launcher="WRTLauncher" name="tct-tv-displaycontrol-tizen-tests">
+    <auto_tcn>20</auto_tcn>
+    <manual_tcn>0</manual_tcn>
+    <total_tcn>20</total_tcn>
+    <pkg_name>tv/tct-tv-displaycontrol-tizen-tests-2.4.zip</pkg_name>
+  </suite>
+  <suite launcher="WRTLauncher" name="tct-alarm-tizen-tests">
+    <auto_tcn>60</auto_tcn>
+    <manual_tcn>1</manual_tcn>
+    <total_tcn>61</total_tcn>
+    <pkg_name>common/tct-alarm-tizen-tests-2.4.zip</pkg_name>
+  </suite>
+  <suite launcher="WRTLauncher" name="tct-inputdevice-tizen-tests">
+    <auto_tcn>30</auto_tcn>
+    <manual_tcn>3</manual_tcn>
+    <total_tcn>33</total_tcn>
+    <pkg_name>tv/tct-inputdevice-tizen-tests-2.4.zip</pkg_name>
+  </suite>
+  <suite launcher="WRTLauncher" name="tct-websetting-tizen-tests">
+    <auto_tcn>22</auto_tcn>
+    <manual_tcn>0</manual_tcn>
+    <total_tcn>22</total_tcn>
+    <pkg_name>tv/tct-websetting-tizen-tests-2.4.zip</pkg_name>
+  </suite>
+  <suite launcher="WRTLauncher" name="tct-messageport-tizen-tests">
+    <auto_tcn>48</auto_tcn>
+    <manual_tcn>0</manual_tcn>
+    <total_tcn>48</total_tcn>
+    <pkg_name>common/tct-messageport-tizen-tests-2.4.zip</pkg_name>
+  </suite>
+  <suite launcher="WRTLauncher" name="tct-privilege-tizen-tests">
+    <auto_tcn>65</auto_tcn>
+    <manual_tcn>0</manual_tcn>
+    <total_tcn>65</total_tcn>
+    <pkg_name>common/tct-privilege-tizen-tests-2.4.zip</pkg_name>
+  </suite>
+  <suite launcher="WRTLauncher" name="tct-sse-w3c-tests">
+    <auto_tcn>68</auto_tcn>
+    <manual_tcn>0</manual_tcn>
+    <total_tcn>68</total_tcn>
+    <pkg_name>tv/tct-sse-w3c-tests-2.4.zip</pkg_name>
+  </suite>
+  <suite launcher="WRTLauncher" name="tct-namespace-tizen-tests">
+    <auto_tcn>23</auto_tcn>
+    <manual_tcn>0</manual_tcn>
+    <total_tcn>23</total_tcn>
+    <pkg_name>common/tct-namespace-tizen-tests-2.4.zip</pkg_name>
+  </suite>
+  <suite launcher="WRTLauncher" name="tct-tv-window-tizen-tests">
+    <auto_tcn>81</auto_tcn>
+    <manual_tcn>4</manual_tcn>
+    <total_tcn>85</total_tcn>
+    <pkg_name>tv/tct-tv-window-tizen-tests-2.4.zip</pkg_name>
+  </suite>
+  <suite launcher="WRTLauncher" name="tct-maxLength-wrt-tests">
+    <auto_tcn>14</auto_tcn>
+    <manual_tcn>0</manual_tcn>
+    <total_tcn>14</total_tcn>
+    <pkg_name>common/tct-maxLength-wrt-tests-2.4.zip</pkg_name>
+  </suite>
+  <suite launcher="WRTLauncher" name="tct-tv-audiocontrol-tizen-tests">
+    <auto_tcn>61</auto_tcn>
+    <manual_tcn>0</manual_tcn>
+    <total_tcn>61</total_tcn>
+    <pkg_name>tv/tct-tv-audiocontrol-tizen-tests-2.4.zip</pkg_name>
+  </suite>
+  <suite launcher="WRTLauncher" name="tct-xmlhttprequest-w3c-tests">
+    <auto_tcn>202</auto_tcn>
+    <manual_tcn>0</manual_tcn>
+    <total_tcn>202</total_tcn>
+    <pkg_name>tv/tct-xmlhttprequest-w3c-tests-2.4.zip</pkg_name>
+  </suite>
+  <suite launcher="WRTLauncher" name="tct-security-tcs-tests">
+    <auto_tcn>3</auto_tcn>
+    <manual_tcn>0</manual_tcn>
+    <total_tcn>3</total_tcn>
+    <pkg_name>common/tct-security-tcs-tests-2.4.zip</pkg_name>
+  </suite>
+  <suite launcher="WRTLauncher" name="tct-backgrounds-css3-tests">
+    <auto_tcn>541</auto_tcn>
+    <manual_tcn>74</manual_tcn>
+    <total_tcn>615</total_tcn>
+    <pkg_name>tv/tct-backgrounds-css3-tests-2.4.zip</pkg_name>
+  </suite>
+  <suite launcher="WRTLauncher" name="tct-webstorage-w3c-tests">
+    <auto_tcn>177</auto_tcn>
+    <manual_tcn>4</manual_tcn>
+    <total_tcn>181</total_tcn>
+    <pkg_name>common/tct-webstorage-w3c-tests-2.4.zip</pkg_name>
+  </suite>
+  <suite launcher="WRTLauncher" name="tct-package-tizen-tests">
+    <auto_tcn>54</auto_tcn>
+    <manual_tcn>12</manual_tcn>
+    <total_tcn>66</total_tcn>
+    <pkg_name>common/tct-package-tizen-tests-2.4.zip</pkg_name>
+  </suite>
+  <suite launcher="WRTLauncher" name="tct-text-css3-tests">
+    <auto_tcn>27</auto_tcn>
+    <manual_tcn>15</manual_tcn>
+    <total_tcn>42</total_tcn>
+    <pkg_name>common/tct-text-css3-tests-2.4.zip</pkg_name>
+  </suite>
+  <suite launcher="WRTLauncher" name="tct-systeminfo-tizen-tests">
+    <auto_tcn>296</auto_tcn>
+    <manual_tcn>0</manual_tcn>
+    <total_tcn>296</total_tcn>
+    <pkg_name>tv/tct-systeminfo-tizen-tests-2.4.zip</pkg_name>
+  </suite>
+  <suite launcher="WRTLauncher" name="tct-sandbox-html5-tests">
+    <auto_tcn>72</auto_tcn>
+    <manual_tcn>1</manual_tcn>
+    <total_tcn>73</total_tcn>
+    <pkg_name>common/tct-sandbox-html5-tests-2.4.zip</pkg_name>
+  </suite>
+  <suite launcher="WRTLauncher" name="tct-sp02-wrt-tests">
+    <auto_tcn>1</auto_tcn>
+    <manual_tcn>0</manual_tcn>
+    <total_tcn>1</total_tcn>
+    <pkg_name>common/tct-sp02-wrt-tests-2.4.zip</pkg_name>
+  </suite>
+  <suite launcher="WRTLauncher" name="tct-selectorslevel1-w3c-tests">
+    <auto_tcn>78</auto_tcn>
+    <manual_tcn>0</manual_tcn>
+    <total_tcn>78</total_tcn>
+    <pkg_name>common/tct-selectorslevel1-w3c-tests-2.4.zip</pkg_name>
+  </suite>
+  <suite launcher="WRTLauncher" name="tct-csp-w3c-tests">
+    <auto_tcn>133</auto_tcn>
+    <manual_tcn>78</manual_tcn>
+    <total_tcn>211</total_tcn>
+    <pkg_name>tv/tct-csp-w3c-tests-2.4.zip</pkg_name>
+  </suite>
+  <suite launcher="WRTLauncher" name="tct-colors-css3-tests">
+    <auto_tcn>46</auto_tcn>
+    <manual_tcn>29</manual_tcn>
+    <total_tcn>75</total_tcn>
+    <pkg_name>common/tct-colors-css3-tests-2.4.zip</pkg_name>
+  </suite>
+  <suite launcher="WRTLauncher" name="tct-tv-info-tizen-tests">
+    <auto_tcn>23</auto_tcn>
+    <manual_tcn>3</manual_tcn>
+    <total_tcn>26</total_tcn>
+    <pkg_name>tv/tct-tv-info-tizen-tests-2.4.zip</pkg_name>
+  </suite>
+  <suite launcher="WRTLauncher" name="tct-2dtransforms-css3-tests">
+    <auto_tcn>34</auto_tcn>
+    <manual_tcn>0</manual_tcn>
+    <total_tcn>34</total_tcn>
+    <pkg_name>common/tct-2dtransforms-css3-tests-2.4.zip</pkg_name>
+  </suite>
+  <suite launcher="WRTLauncher" name="tct-application-tizen-tests">
+    <auto_tcn>183</auto_tcn>
+    <manual_tcn>6</manual_tcn>
+    <total_tcn>189</total_tcn>
+    <pkg_name>tv/tct-application-tizen-tests-2.4.zip</pkg_name>
+  </suite>
+  <suite launcher="WRTLauncher" name="tct-forms-html5-tests">
+    <auto_tcn>146</auto_tcn>
+    <manual_tcn>0</manual_tcn>
+    <total_tcn>146</total_tcn>
+    <pkg_name>tv/tct-forms-html5-tests-2.4.zip</pkg_name>
+  </suite>
+  <suite launcher="WRTLauncher" name="tct-tizen-tizen-tests">
+    <auto_tcn>81</auto_tcn>
+    <manual_tcn>0</manual_tcn>
+    <total_tcn>81</total_tcn>
+    <pkg_name>common/tct-tizen-tizen-tests-2.4.zip</pkg_name>
+  </suite>
+  <suite launcher="WRTLauncher" name="tct-cors-w3c-tests">
+    <auto_tcn>10</auto_tcn>
+    <manual_tcn>0</manual_tcn>
+    <total_tcn>10</total_tcn>
+    <pkg_name>common/tct-cors-w3c-tests-2.4.zip</pkg_name>
+  </suite>
+  <suite launcher="WRTLauncher" name="tct-exif-tizen-tests">
+    <auto_tcn>64</auto_tcn>
+    <manual_tcn>0</manual_tcn>
+    <total_tcn>64</total_tcn>
+    <pkg_name>common/tct-exif-tizen-tests-2.4.zip</pkg_name>
+  </suite>
+  <suite launcher="WRTLauncher" name="tct-capability-tests">
+    <auto_tcn>15</auto_tcn>
+    <manual_tcn>0</manual_tcn>
+    <total_tcn>15</total_tcn>
+    <pkg_name>common/tct-capability-tests-2.4.zip</pkg_name>
+  </suite>
+  <suite launcher="WRTLauncher" name="tct-fileapi-w3c-tests">
+    <auto_tcn>97</auto_tcn>
+    <manual_tcn>0</manual_tcn>
+    <total_tcn>97</total_tcn>
+    <pkg_name>tv/tct-fileapi-w3c-tests-2.4.zip</pkg_name>
+  </suite>
+  <suite launcher="WRTLauncher" name="tct-browserstate-html5-tests">
+    <auto_tcn>3</auto_tcn>
+    <manual_tcn>0</manual_tcn>
+    <total_tcn>3</total_tcn>
+    <pkg_name>tv/tct-browserstate-html5-tests-2.4.zip</pkg_name>
+  </suite>
+  <suite launcher="WRTLauncher" name="tct-canvas-html5-tests">
+    <auto_tcn>846</auto_tcn>
+    <manual_tcn>18</manual_tcn>
+    <total_tcn>864</total_tcn>
+    <pkg_name>common/tct-canvas-html5-tests-2.4.zip</pkg_name>
+  </suite>
+  <suite launcher="WRTLauncher" name="tct-widget01-w3c-tests">
+    <auto_tcn>73</auto_tcn>
+    <manual_tcn>0</manual_tcn>
+    <total_tcn>73</total_tcn>
+    <pkg_name>tv/tct-widget01-w3c-tests-2.4.zip</pkg_name>
+  </suite>
+  <suite launcher="WRTLauncher" name="tct-time-tizen-tests">
+    <auto_tcn>459</auto_tcn>
+    <manual_tcn>0</manual_tcn>
+    <total_tcn>459</total_tcn>
+    <pkg_name>tv/tct-time-tizen-tests-2.4.zip</pkg_name>
+  </suite>
+  <suite launcher="WRTLauncher" name="tct-ui01-wrt-tests">
+    <auto_tcn>11</auto_tcn>
+    <manual_tcn>0</manual_tcn>
+    <total_tcn>11</total_tcn>
+    <pkg_name>tv/tct-ui01-wrt-tests-2.4.zip</pkg_name>
+  </suite>
+  <suite launcher="WRTLauncher" name="tct-appcache-html5-tests">
+    <auto_tcn>36</auto_tcn>
+    <manual_tcn>0</manual_tcn>
+    <total_tcn>36</total_tcn>
+    <pkg_name>tv/tct-appcache-html5-tests-2.4.zip</pkg_name>
+  </suite>
+  <suite launcher="WRTLauncher" name="tct-screenorientation-w3c-tests">
+    <auto_tcn>17</auto_tcn>
+    <manual_tcn>0</manual_tcn>
+    <total_tcn>17</total_tcn>
+    <pkg_name>tv/tct-screenorientation-w3c-tests-2.4.zip</pkg_name>
+  </suite>
+  <suite launcher="WRTLauncher" name="tct-rt02-wrt-tests">
+    <auto_tcn>3</auto_tcn>
+    <manual_tcn>0</manual_tcn>
+    <total_tcn>3</total_tcn>
+    <pkg_name>common/tct-rt02-wrt-tests-2.4.zip</pkg_name>
+  </suite>
+  <suite launcher="WRTLauncher" name="tct-sp01-wrt-tests">
+    <auto_tcn>4</auto_tcn>
+    <manual_tcn>0</manual_tcn>
+    <total_tcn>4</total_tcn>
+    <pkg_name>common/tct-sp01-wrt-tests-2.4.zip</pkg_name>
+  </suite>
+  <suite launcher="WRTLauncher" name="tct-svg-html5-tests">
+    <auto_tcn>3</auto_tcn>
+    <manual_tcn>9</manual_tcn>
+    <total_tcn>12</total_tcn>
+    <pkg_name>common/tct-svg-html5-tests-2.4.zip</pkg_name>
+  </suite>
+  <suite launcher="WRTLauncher" name="tct-sessionhistory-html5-tests">
+    <auto_tcn>148</auto_tcn>
+    <manual_tcn>1</manual_tcn>
+    <total_tcn>149</total_tcn>
+    <pkg_name>common/tct-sessionhistory-html5-tests-2.4.zip</pkg_name>
+  </suite>
+  <suite launcher="WRTLauncher" name="tct-workers-w3c-tests">
+    <auto_tcn>84</auto_tcn>
+    <manual_tcn>1</manual_tcn>
+    <total_tcn>85</total_tcn>
+    <pkg_name>tv/tct-workers-w3c-tests-2.4.zip</pkg_name>
+  </suite>
+  <suite launcher="WRTLauncher" name="tct-wgtapi01-w3c-tests">
+    <auto_tcn>107</auto_tcn>
+    <manual_tcn>0</manual_tcn>
+    <total_tcn>107</total_tcn>
+    <pkg_name>common/tct-wgtapi01-w3c-tests-2.4.zip</pkg_name>
+  </suite>
+  <suite launcher="WRTLauncher" name="tct-3dtransforms-css3-tests">
+    <auto_tcn>32</auto_tcn>
+    <manual_tcn>0</manual_tcn>
+    <total_tcn>32</total_tcn>
+    <pkg_name>common/tct-3dtransforms-css3-tests-2.4.zip</pkg_name>
+  </suite>
+  <suite launcher="WRTLauncher" name="tct-transitions-css3-tests">
+    <auto_tcn>26</auto_tcn>
+    <manual_tcn>5</manual_tcn>
+    <total_tcn>31</total_tcn>
+    <pkg_name>common/tct-transitions-css3-tests-2.4.zip</pkg_name>
+  </suite>
+  <suite launcher="WRTLauncher" name="tct-stab-wrt-tests">
+    <auto_tcn>1</auto_tcn>
+    <manual_tcn>0</manual_tcn>
+    <total_tcn>1</total_tcn>
+    <pkg_name>common/tct-stab-wrt-tests-2.4.zip</pkg_name>
+  </suite>
+  <suite launcher="WRTLauncher" name="tct-animations-css3-tests">
+    <auto_tcn>24</auto_tcn>
+    <manual_tcn>0</manual_tcn>
+    <total_tcn>24</total_tcn>
+    <pkg_name>common/tct-animations-css3-tests-2.4.zip</pkg_name>
+  </suite>
+  <suite launcher="WRTLauncher" name="tct-fonts-css3-tests">
+    <auto_tcn>11</auto_tcn>
+    <manual_tcn>131</manual_tcn>
+    <total_tcn>142</total_tcn>
+    <pkg_name>common/tct-fonts-css3-tests-2.4.zip</pkg_name>
+  </suite>
+  <suite launcher="WRTLauncher" name="tct-navigationtiming-w3c-tests">
+    <auto_tcn>45</auto_tcn>
+    <manual_tcn>0</manual_tcn>
+    <total_tcn>45</total_tcn>
+    <pkg_name>tv/tct-navigationtiming-w3c-tests-2.4.zip</pkg_name>
+  </suite>
+  <suite launcher="WRTLauncher" name="tct-ui-css3-tests">
+    <auto_tcn>43</auto_tcn>
+    <manual_tcn>1</manual_tcn>
+    <total_tcn>44</total_tcn>
+    <pkg_name>common/tct-ui-css3-tests-2.4.zip</pkg_name>
+  </suite>
+  <suite launcher="WRTLauncher" name="tct-extra-html5-tests">
+    <auto_tcn>544</auto_tcn>
+    <manual_tcn>25</manual_tcn>
+    <total_tcn>569</total_tcn>
+    <pkg_name>tv/tct-extra-html5-tests-2.4.zip</pkg_name>
+  </suite>
+  <suite launcher="WRTLauncher" name="tct-webmessaging-w3c-tests">
+    <auto_tcn>175</auto_tcn>
+    <manual_tcn>0</manual_tcn>
+    <total_tcn>175</total_tcn>
+    <pkg_name>tv/tct-webmessaging-w3c-tests-2.4.zip</pkg_name>
+  </suite>
+</ns3:testplan>
diff --git a/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/shell/plan/Web_Full_tv_3.0.xml b/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/shell/plan/Web_Full_tv_3.0.xml
new file mode 100755 (executable)
index 0000000..de3d204
--- /dev/null
@@ -0,0 +1,647 @@
+<?xml version="1.0" encoding="UTF-8"?>\r
+<ns3:testplan xmlns:ns3="http://www.example.org/plan/" xmlns="" name="Web_Full_tv_3.0" profile="tv">\r
+  <execute_type>Auto</execute_type>\r
+  <suite name="tct-jsenhance-html5-tests" category="W3C/HTML5 APIs">\r
+    <auto_tcn>7</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>7</total_tcn>\r
+    <pkg_name>common/tct-jsenhance-html5-tests-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-multicolumn-css3-tests" category="W3C/HTML5 APIs">\r
+    <auto_tcn>136</auto_tcn>\r
+    <manual_tcn>18</manual_tcn>\r
+    <total_tcn>154</total_tcn>\r
+    <pkg_name>common/tct-multicolumn-css3-tests-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-devicemotion-cordova-tests" category="Cordova Plugin APIs">\r
+    <auto_tcn>18</auto_tcn>\r
+    <manual_tcn>1</manual_tcn>\r
+    <total_tcn>19</total_tcn>\r
+    <pkg_name>common/tct-devicemotion-cordova-tests-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-workers-w3c-tests" category="W3C/HTML5 APIs">\r
+    <auto_tcn>77</auto_tcn>\r
+    <manual_tcn>1</manual_tcn>\r
+    <total_tcn>78</total_tcn>\r
+    <pkg_name>common/tct-workers-w3c-tests-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-namespace-tizen-tests" category="Tizen Web Device APIs">\r
+    <auto_tcn>30</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>30</total_tcn>\r
+    <pkg_name>tv/tct-namespace-tizen-tests-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-transitions-css3-tests" category="W3C/HTML5 APIs">\r
+    <auto_tcn>9</auto_tcn>\r
+    <manual_tcn>6</manual_tcn>\r
+    <total_tcn>15</total_tcn>\r
+    <pkg_name>common/tct-transitions-css3-tests-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-network-information-cordova-tests" category="Cordova Plugin APIs">\r
+    <auto_tcn>10</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>10</total_tcn>\r
+    <pkg_name>common/tct-network-information-cordova-tests-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-crypto-w3c-tests" category="W3C/HTML5 APIs">\r
+    <auto_tcn>78</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>78</total_tcn>\r
+    <pkg_name>common/tct-crypto-w3c-tests-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-2dtransforms-css3-tests" category="W3C/HTML5 APIs">\r
+    <auto_tcn>36</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>36</total_tcn>\r
+    <pkg_name>common/tct-2dtransforms-css3-tests-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-dialogs-cordova-tests" category="Cordova Plugin APIs">\r
+    <auto_tcn>13</auto_tcn>\r
+    <manual_tcn>9</manual_tcn>\r
+    <total_tcn>22</total_tcn>\r
+    <pkg_name>common/tct-dialogs-cordova-tests-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-time-tizen-tests" category="Tizen Web Device APIs">\r
+    <auto_tcn>454</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>454</total_tcn>\r
+    <pkg_name>tv/tct-time-tizen-tests-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-forms-html5-tests" category="W3C/HTML5 APIs">\r
+    <auto_tcn>49</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>49</total_tcn>\r
+    <pkg_name>common/tct-forms-html5-tests-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-capability-tests" category="Compliance">\r
+    <auto_tcn>35</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>35</total_tcn>\r
+    <pkg_name>common/tct-capability-tests-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-fileapi-w3c-tests" category="W3C/HTML5 APIs">\r
+    <auto_tcn>33</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>33</total_tcn>\r
+    <pkg_name>common/tct-fileapi-w3c-tests-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-ext01-wrt-tests" category="Tizen WRT Core Spec">\r
+    <auto_tcn>2</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>2</total_tcn>\r
+    <pkg_name>tv/tct-ext01-wrt-tests-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-mediacapture-w3c-tests" category="W3C/HTML5 APIs">\r
+    <auto_tcn>6</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>6</total_tcn>\r
+    <pkg_name>common/tct-mediacapture-w3c-tests-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-exif-tizen-tests" category="Tizen Web Device APIs">\r
+    <auto_tcn>64</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>64</total_tcn>\r
+    <pkg_name>common/tct-exif-tizen-tests-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-csp-w3c-tests" category="W3C/HTML5 APIs">\r
+    <auto_tcn>137</auto_tcn>\r
+    <manual_tcn>83</manual_tcn>\r
+    <total_tcn>220</total_tcn>\r
+    <pkg_name>common/tct-csp-w3c-tests-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-privilege-wrt-tests" category="Tizen WRT Core Spec">\r
+    <auto_tcn>95</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>95</total_tcn>\r
+    <pkg_name>tv/tct-privilege-wrt-tests-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-mse-w3c-tests" category="W3C/HTML5 APIs">\r
+    <auto_tcn>95</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>95</total_tcn>\r
+    <pkg_name>tv/tct-mse-w3c-tests-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-media-cordova-tests" category="Cordova Plugin APIs">\r
+    <auto_tcn>57</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>57</total_tcn>\r
+    <pkg_name>common/tct-media-cordova-tests-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-webmessaging-w3c-tests" category="W3C/HTML5 APIs">\r
+    <auto_tcn>175</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>175</total_tcn>\r
+    <pkg_name>common/tct-webmessaging-w3c-tests-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-package-tizen-tests" category="Tizen Web Device APIs">\r
+    <auto_tcn>54</auto_tcn>\r
+    <manual_tcn>12</manual_tcn>\r
+    <total_tcn>66</total_tcn>\r
+    <pkg_name>common/tct-package-tizen-tests-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-file-cordova-tests" category="Cordova Plugin APIs">\r
+    <auto_tcn>172</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>172</total_tcn>\r
+    <pkg_name>common/tct-file-cordova-tests-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-notification-tizen-tests" category="Tizen Web Device APIs">\r
+    <auto_tcn>96</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>96</total_tcn>\r
+    <pkg_name>common/tct-notification-tizen-tests-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-template-w3c-tests" category="W3C/HTML5 APIs">\r
+    <auto_tcn>1</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>1</total_tcn>\r
+    <pkg_name>common/tct-template-w3c-tests-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-rt01-wrt-tests" category="Tizen WRT Core Spec">\r
+    <auto_tcn>12</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>12</total_tcn>\r
+    <pkg_name>common/tct-rt01-wrt-tests-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-appcache-html5-tests" category="W3C/HTML5 APIs">\r
+    <auto_tcn>26</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>26</total_tcn>\r
+    <pkg_name>common/tct-appcache-html5-tests-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-svg-html5-tests" category="W3C/HTML5 APIs">\r
+    <auto_tcn>43</auto_tcn>\r
+    <manual_tcn>14</manual_tcn>\r
+    <total_tcn>57</total_tcn>\r
+    <pkg_name>common/tct-svg-html5-tests-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-websocket-w3c-tests" category="W3C/HTML5 APIs">\r
+    <auto_tcn>266</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>266</total_tcn>\r
+    <pkg_name>common/tct-websocket-w3c-tests-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-flexiblebox-css3-tests" category="W3C/HTML5 APIs">\r
+    <auto_tcn>14</auto_tcn>\r
+    <manual_tcn>14</manual_tcn>\r
+    <total_tcn>28</total_tcn>\r
+    <pkg_name>common/tct-flexiblebox-css3-tests-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-dnd-html5-tests" category="W3C/HTML5 APIs">\r
+    <auto_tcn>6</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>6</total_tcn>\r
+    <pkg_name>common/tct-dnd-html5-tests-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-extra-html5-tests" category="W3C/HTML5 APIs">\r
+    <auto_tcn>548</auto_tcn>\r
+    <manual_tcn>25</manual_tcn>\r
+    <total_tcn>573</total_tcn>\r
+    <pkg_name>common/tct-extra-html5-tests-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-fullscreen-nonw3c-tests" category="Supplementary APIs">\r
+    <auto_tcn>20</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>20</total_tcn>\r
+    <pkg_name>common/tct-fullscreen-nonw3c-tests-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-colors-css3-tests" category="W3C/HTML5 APIs">\r
+    <auto_tcn>46</auto_tcn>\r
+    <manual_tcn>29</manual_tcn>\r
+    <total_tcn>75</total_tcn>\r
+    <pkg_name>common/tct-colors-css3-tests-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-indexeddb-w3c-tests" category="W3C/HTML5 APIs">\r
+    <auto_tcn>343</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>343</total_tcn>\r
+    <pkg_name>common/tct-indexeddb-w3c-tests-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-sandbox-html5-tests" category="W3C/HTML5 APIs">\r
+    <auto_tcn>45</auto_tcn>\r
+    <manual_tcn>1</manual_tcn>\r
+    <total_tcn>46</total_tcn>\r
+    <pkg_name>common/tct-sandbox-html5-tests-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-messageport-tizen-tests" category="Tizen Web Device APIs">\r
+    <auto_tcn>51</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>51</total_tcn>\r
+    <pkg_name>common/tct-messageport-tizen-tests-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-browserstate-html5-tests" category="W3C/HTML5 APIs">\r
+    <auto_tcn>3</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>3</total_tcn>\r
+    <pkg_name>common/tct-browserstate-html5-tests-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-cors-w3c-tests" category="W3C/HTML5 APIs">\r
+    <auto_tcn>10</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>10</total_tcn>\r
+    <pkg_name>common/tct-cors-w3c-tests-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-xmlhttprequest-w3c-tests" category="W3C/HTML5 APIs">\r
+    <auto_tcn>212</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>212</total_tcn>\r
+    <pkg_name>common/tct-xmlhttprequest-w3c-tests-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-navigationtiming-w3c-tests" category="W3C/HTML5 APIs">\r
+    <auto_tcn>82</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>82</total_tcn>\r
+    <pkg_name>common/tct-navigationtiming-w3c-tests-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-typedarrays-nonw3c-tests" category="Supplementary APIs">\r
+    <auto_tcn>446</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>446</total_tcn>\r
+    <pkg_name>common/tct-typedarrays-nonw3c-tests-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-animations-css3-tests" category="W3C/HTML5 APIs">\r
+    <auto_tcn>25</auto_tcn>\r
+    <manual_tcn>1</manual_tcn>\r
+    <total_tcn>26</total_tcn>\r
+    <pkg_name>common/tct-animations-css3-tests-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-pagevisibility-w3c-tests" category="W3C/HTML5 APIs">\r
+    <auto_tcn>18</auto_tcn>\r
+    <manual_tcn>2</manual_tcn>\r
+    <total_tcn>20</total_tcn>\r
+    <pkg_name>common/tct-pagevisibility-w3c-tests-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-ResponsiveImage-w3c-tests" category="Tizen W3C APIs">\r
+    <auto_tcn>32</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>32</total_tcn>\r
+    <pkg_name>common/tct-ResponsiveImage-w3c-tests-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-content-tizen-tests" category="Tizen Web Device APIs">\r
+    <auto_tcn>245</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>245</total_tcn>\r
+    <pkg_name>common/tct-content-tizen-tests-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-gumallow-w3c-tests" category="W3C/HTML5 APIs">\r
+    <auto_tcn>6</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>6</total_tcn>\r
+    <pkg_name>common/tct-gumallow-w3c-tests-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-serviceworkers-w3c-tests" category="W3C/HTML5 APIs">\r
+    <auto_tcn>107</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>107</total_tcn>\r
+    <pkg_name>common/tct-serviceworkers-w3c-tests-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-globalization-cordova-tests" category="Cordova Plugin APIs">\r
+    <auto_tcn>116</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>116</total_tcn>\r
+    <pkg_name>common/tct-globalization-cordova-tests-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-sp01-wrt-tests" category="Tizen WRT Core Spec">\r
+    <auto_tcn>4</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>4</total_tcn>\r
+    <pkg_name>common/tct-sp01-wrt-tests-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-widget02-w3c-tests" category="W3C/HTML5 APIs">\r
+    <auto_tcn>68</auto_tcn>\r
+    <manual_tcn>45</manual_tcn>\r
+    <total_tcn>113</total_tcn>\r
+    <pkg_name>tv/tct-widget02-w3c-tests-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-websetting-tizen-tests" category="Tizen Web Device APIs">\r
+    <auto_tcn>22</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>22</total_tcn>\r
+    <pkg_name>tv/tct-websetting-tizen-tests-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-audio-html5-tests" category="W3C/HTML5 APIs">\r
+    <auto_tcn>152</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>152</total_tcn>\r
+    <pkg_name>common/tct-audio-html5-tests-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-import-w3c-tests" category="W3C/HTML5 APIs">\r
+    <auto_tcn>1</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>1</total_tcn>\r
+    <pkg_name>common/tct-import-w3c-tests-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-screenorientation-w3c-tests" category="W3C/HTML5 APIs">\r
+    <auto_tcn>14</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>14</total_tcn>\r
+    <pkg_name>common/tct-screenorientation-w3c-tests-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-rt02-wrt-tests" category="Tizen WRT Core Spec">\r
+    <auto_tcn>3</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>3</total_tcn>\r
+    <pkg_name>common/tct-rt02-wrt-tests-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-sp02-wrt-tests" category="Tizen WRT Core Spec">\r
+    <auto_tcn>1</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>1</total_tcn>\r
+    <pkg_name>common/tct-sp02-wrt-tests-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-ext02-wrt-tests" category="Tizen WRT Core Spec">\r
+    <auto_tcn>8</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>8</total_tcn>\r
+    <pkg_name>common/tct-ext02-wrt-tests-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-application-tizen-tests" category="Tizen Web Device APIs">\r
+    <auto_tcn>159</auto_tcn>\r
+    <manual_tcn>6</manual_tcn>\r
+    <total_tcn>165</total_tcn>\r
+    <pkg_name>tv/tct-application-tizen-tests-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-humanactivitymonitor-tizen-tests" category="Tizen Web Device APIs">\r
+    <auto_tcn>87</auto_tcn>\r
+    <manual_tcn>15</manual_tcn>\r
+    <total_tcn>102</total_tcn>\r
+    <pkg_name>common/tct-humanactivitymonitor-tizen-tests-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-fonts-css3-tests" category="W3C/HTML5 APIs">\r
+    <auto_tcn>12</auto_tcn>\r
+    <manual_tcn>131</manual_tcn>\r
+    <total_tcn>143</total_tcn>\r
+    <pkg_name>common/tct-fonts-css3-tests-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-security-tcs-tests" launcher="WRTLauncher" category="Compliance">\r
+    <auto_tcn>3</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>3</total_tcn>\r
+    <pkg_name>common/tct-security-tcs-tests-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-speech-w3c-tests" category="W3C/HTML5 APIs">\r
+    <auto_tcn>86</auto_tcn>\r
+    <manual_tcn>5</manual_tcn>\r
+    <total_tcn>91</total_tcn>\r
+    <pkg_name>common/tct-speech-w3c-tests-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-ui01-wrt-tests" category="Tizen WRT Core Spec">\r
+    <auto_tcn>20</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>20</total_tcn>\r
+    <pkg_name>tv/tct-ui01-wrt-tests-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-animationtiming-w3c-tests" category="W3C/HTML5 APIs">\r
+    <auto_tcn>11</auto_tcn>\r
+    <manual_tcn>7</manual_tcn>\r
+    <total_tcn>18</total_tcn>\r
+    <pkg_name>common/tct-animationtiming-w3c-tests-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-selectorslevel2-w3c-tests" category="W3C/HTML5 APIs">\r
+    <auto_tcn>22</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>22</total_tcn>\r
+    <pkg_name>common/tct-selectorslevel2-w3c-tests-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-wgtapi01-w3c-tests" category="W3C/HTML5 APIs">\r
+    <auto_tcn>107</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>107</total_tcn>\r
+    <pkg_name>common/tct-wgtapi01-w3c-tests-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-webaudio-w3c-tests" category="W3C/HTML5 APIs">\r
+    <auto_tcn>257</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>257</total_tcn>\r
+    <pkg_name>common/tct-webaudio-w3c-tests-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-tv-inputdevice-tizen-tests" category="Tizen Web Device APIs">\r
+    <auto_tcn>23</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>23</total_tcn>\r
+    <pkg_name>tv/tct-tv-inputdevice-tizen-tests-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-privilege-tizen-tests" category="Tizen Web Device APIs">\r
+    <auto_tcn>71</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>71</total_tcn>\r
+    <pkg_name>common/tct-privilege-tizen-tests-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-alarm-tizen-tests" category="Tizen Web Device APIs">\r
+    <auto_tcn>60</auto_tcn>\r
+    <manual_tcn>1</manual_tcn>\r
+    <total_tcn>61</total_tcn>\r
+    <pkg_name>common/tct-alarm-tizen-tests-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-touchevent-w3c-tests" category="W3C/HTML5 APIs">\r
+    <auto_tcn>12</auto_tcn>\r
+    <manual_tcn>7</manual_tcn>\r
+    <total_tcn>19</total_tcn>\r
+    <pkg_name>common/tct-touchevent-w3c-tests-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-woff-w3c-tests" category="W3C/HTML5 APIs">\r
+    <auto_tcn>0</auto_tcn>\r
+    <manual_tcn>22</manual_tcn>\r
+    <total_tcn>22</total_tcn>\r
+    <pkg_name>common/tct-woff-w3c-tests-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-wgtapi02-w3c-tests" category="W3C/HTML5 APIs">\r
+    <auto_tcn>0</auto_tcn>\r
+    <manual_tcn>34</manual_tcn>\r
+    <total_tcn>34</total_tcn>\r
+    <pkg_name>common/tct-wgtapi02-w3c-tests-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-archive-tizen-tests" category="Tizen Web Device APIs">\r
+    <auto_tcn>106</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>106</total_tcn>\r
+    <pkg_name>common/tct-archive-tizen-tests-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-tizen-tizen-tests" category="Tizen Web Device APIs">\r
+    <auto_tcn>81</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>81</total_tcn>\r
+    <pkg_name>common/tct-tizen-tizen-tests-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-widget01-w3c-tests" category="W3C/HTML5 APIs">\r
+    <auto_tcn>155</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>155</total_tcn>\r
+    <pkg_name>common/tct-widget01-w3c-tests-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-3dtransforms-css3-tests" category="W3C/HTML5 APIs">\r
+    <auto_tcn>32</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>32</total_tcn>\r
+    <pkg_name>common/tct-3dtransforms-css3-tests-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-geoallow-w3c-tests" category="W3C/HTML5 APIs">\r
+    <auto_tcn>209</auto_tcn>\r
+    <manual_tcn>3</manual_tcn>\r
+    <total_tcn>212</total_tcn>\r
+    <pkg_name>common/tct-geoallow-w3c-tests-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-sessionhistory-html5-tests" category="W3C/HTML5 APIs">\r
+    <auto_tcn>117</auto_tcn>\r
+    <manual_tcn>2</manual_tcn>\r
+    <total_tcn>119</total_tcn>\r
+    <pkg_name>common/tct-sessionhistory-html5-tests-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-datacontrol-tizen-tests" category="Tizen Web Device APIs">\r
+    <auto_tcn>115</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>115</total_tcn>\r
+    <pkg_name>common/tct-datacontrol-tizen-tests-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-events-cordova-tests" category="Cordova Plugin APIs">\r
+    <auto_tcn>8</auto_tcn>\r
+    <manual_tcn>6</manual_tcn>\r
+    <total_tcn>14</total_tcn>\r
+    <pkg_name>common/tct-events-cordova-tests-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-geodeny-w3c-tests" category="W3C/HTML5 APIs">\r
+    <auto_tcn>0</auto_tcn>\r
+    <manual_tcn>3</manual_tcn>\r
+    <total_tcn>3</total_tcn>\r
+    <pkg_name>common/tct-geodeny-w3c-tests-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-canvas-html5-tests" category="W3C/HTML5 APIs">\r
+    <auto_tcn>848</auto_tcn>\r
+    <manual_tcn>20</manual_tcn>\r
+    <total_tcn>868</total_tcn>\r
+    <pkg_name>common/tct-canvas-html5-tests-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-ui-css3-tests" category="W3C/HTML5 APIs">\r
+    <auto_tcn>40</auto_tcn>\r
+    <manual_tcn>1</manual_tcn>\r
+    <total_tcn>41</total_tcn>\r
+    <pkg_name>common/tct-ui-css3-tests-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-keymanager-tizen-tests" category="Tizen Web Device APIs">\r
+    <auto_tcn>39</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>39</total_tcn>\r
+    <pkg_name>common/tct-keymanager-tizen-tests-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-selectorslevel1-w3c-tests" category="W3C/HTML5 APIs">\r
+    <auto_tcn>24</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>24</total_tcn>\r
+    <pkg_name>common/tct-selectorslevel1-w3c-tests-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-sse-w3c-tests" category="W3C/HTML5 APIs">\r
+    <auto_tcn>66</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>66</total_tcn>\r
+    <pkg_name>common/tct-sse-w3c-tests-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-widgetpolicy-w3c-tests" category="W3C/HTML5 APIs">\r
+    <auto_tcn>0</auto_tcn>\r
+    <manual_tcn>22</manual_tcn>\r
+    <total_tcn>22</total_tcn>\r
+    <pkg_name>common/tct-widgetpolicy-w3c-tests-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-batterystatus-w3c-tests" category="W3C/HTML5 APIs">\r
+    <auto_tcn>25</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>25</total_tcn>\r
+    <pkg_name>common/tct-batterystatus-w3c-tests-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-systeminfo-tizen-tests" category="Tizen Web Device APIs">\r
+    <auto_tcn>279</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>279</total_tcn>\r
+    <pkg_name>tv/tct-systeminfo-tizen-tests-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-filesystem-tizen-tests" category="Tizen Web Device APIs">\r
+    <auto_tcn>287</auto_tcn>\r
+    <manual_tcn>3</manual_tcn>\r
+    <total_tcn>290</total_tcn>\r
+    <pkg_name>tv/tct-filesystem-tizen-tests-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-file-transfer-cordova-tests" category="Cordova Plugin APIs">\r
+    <auto_tcn>23</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>23</total_tcn>\r
+    <pkg_name>common/tct-file-transfer-cordova-tests-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-customelement-w3c-tests" category="W3C/HTML5 APIs">\r
+    <auto_tcn>10</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>10</total_tcn>\r
+    <pkg_name>common/tct-customelement-w3c-tests-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-device-cordova-tests" category="Cordova Plugin APIs">\r
+    <auto_tcn>7</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>7</total_tcn>\r
+    <pkg_name>common/tct-device-cordova-tests-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-beacon-w3c-tests" category="W3C/HTML5 APIs">\r
+    <auto_tcn>4</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>4</total_tcn>\r
+    <pkg_name>common/tct-beacon-w3c-tests-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-vibration-w3c-tests" category="W3C/HTML5 APIs">\r
+    <auto_tcn>1</auto_tcn>\r
+    <manual_tcn>1</manual_tcn>\r
+    <total_tcn>2</total_tcn>\r
+    <pkg_name>common/tct-vibration-w3c-tests-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-stab-wrt-tests" category="Tizen WRT Core Spec">\r
+    <auto_tcn>1</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>1</total_tcn>\r
+    <pkg_name>common/tct-stab-wrt-tests-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-text-css3-tests" category="W3C/HTML5 APIs">\r
+    <auto_tcn>34</auto_tcn>\r
+    <manual_tcn>3</manual_tcn>\r
+    <total_tcn>37</total_tcn>\r
+    <pkg_name>common/tct-text-css3-tests-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-webstorage-w3c-tests" category="W3C/HTML5 APIs">\r
+    <auto_tcn>195</auto_tcn>\r
+    <manual_tcn>5</manual_tcn>\r
+    <total_tcn>200</total_tcn>\r
+    <pkg_name>common/tct-webstorage-w3c-tests-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-download-tizen-tests" category="Tizen Web Device APIs">\r
+    <auto_tcn>62</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>62</total_tcn>\r
+    <pkg_name>common/tct-download-tizen-tests-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-mediaqueries-css3-tests" category="W3C/HTML5 APIs">\r
+    <auto_tcn>63</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>63</total_tcn>\r
+    <pkg_name>common/tct-mediaqueries-css3-tests-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-backgrounds-css3-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
+    <auto_tcn>541</auto_tcn>\r
+    <manual_tcn>74</manual_tcn>\r
+    <total_tcn>615</total_tcn>\r
+    <pkg_name>common/tct-backgrounds-css3-tests-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-video-html5-tests" category="W3C/HTML5 APIs">\r
+    <auto_tcn>197</auto_tcn>\r
+    <manual_tcn>3</manual_tcn>\r
+    <total_tcn>200</total_tcn>\r
+    <pkg_name>common/tct-video-html5-tests-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-pm-wrt-tests" category="Tizen WRT Core Spec">\r
+    <auto_tcn>24</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>24</total_tcn>\r
+    <pkg_name>common/tct-pm-wrt-tests-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-webgl-nonw3c-tests" category="Supplementary APIs">\r
+    <auto_tcn>910</auto_tcn>\r
+    <manual_tcn>1</manual_tcn>\r
+    <total_tcn>911</total_tcn>\r
+    <pkg_name>common/tct-webgl-nonw3c-tests-3.0.zip</pkg_name>\r
+  </suite>\r
+</ns3:testplan>\r
+\r
diff --git a/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/shell/plan/Web_Full_wearable_2.3.2.xml b/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/shell/plan/Web_Full_wearable_2.3.2.xml
new file mode 100755 (executable)
index 0000000..a27c519
--- /dev/null
@@ -0,0 +1,569 @@
+<?xml version="1.0" encoding="UTF-8"?>\r
+<ns3:testplan xmlns:ns3="http://www.example.org/plan/" xmlns="" name="Web_Full_wearable_2.3.2" profile="wearable">\r
+  <execute_type>Auto</execute_type>\r
+  <suite name="tct-preference-tizen-tests" launcher="WRTLauncher" category="Tizen Web Device APIs">\r
+    <auto_tcn>43</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>43</total_tcn>\r
+    <pkg_name>wearable/tct-preference-tizen-tests-2.3.1.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-sp01-wrt-tests" launcher="WRTLauncher -iu" category="Web Runtime">\r
+    <auto_tcn>4</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>4</total_tcn>\r
+    <pkg_name>common/tct-sp01-wrt-tests-2.3.1.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-widget02-w3c-tests" category="W3C/HTML5 APIs">\r
+    <auto_tcn>68</auto_tcn>\r
+    <manual_tcn>63</manual_tcn>\r
+    <total_tcn>131</total_tcn>\r
+    <pkg_name>wearable/tct-widget02-w3c-tests-2.3.1.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-jsenhance-html5-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
+    <auto_tcn>49</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>49</total_tcn>\r
+    <pkg_name>common/tct-jsenhance-html5-tests-2.3.1.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-audio-html5-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
+    <auto_tcn>333</auto_tcn>\r
+    <manual_tcn>1</manual_tcn>\r
+    <total_tcn>334</total_tcn>\r
+    <pkg_name>common/tct-audio-html5-tests-2.3.1.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-sp02-wrt-tests" category="Web Runtime">\r
+    <auto_tcn>1</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>1</total_tcn>\r
+    <pkg_name>common/tct-sp02-wrt-tests-2.3.1.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-rt02-wrt-tests" category="Web Runtime">\r
+    <auto_tcn>3</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>3</total_tcn>\r
+    <pkg_name>common/tct-rt02-wrt-tests-2.3.1.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-sound-tizen-tests" launcher="WRTLauncher" category="Tizen Web Device APIs">\r
+    <auto_tcn>52</auto_tcn>\r
+    <manual_tcn>8</manual_tcn>\r
+    <total_tcn>60</total_tcn>\r
+    <pkg_name>common/tct-sound-tizen-tests-2.3.1.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-workers-w3c-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
+    <auto_tcn>85</auto_tcn>\r
+    <manual_tcn>1</manual_tcn>\r
+    <total_tcn>86</total_tcn>\r
+    <pkg_name>wearable/tct-workers-w3c-tests-2.3.1.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-ext02-wrt-tests" category="Web Runtime">\r
+    <auto_tcn>8</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>8</total_tcn>\r
+    <pkg_name>common/tct-ext02-wrt-tests-2.3.1.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-transitions-css3-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
+    <auto_tcn>26</auto_tcn>\r
+    <manual_tcn>5</manual_tcn>\r
+    <total_tcn>31</total_tcn>\r
+    <pkg_name>common/tct-transitions-css3-tests-2.3.1.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-namespace-tizen-tests" launcher="WRTLauncher" category="Tizen Web Device APIs">\r
+    <auto_tcn>22</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>22</total_tcn>\r
+    <pkg_name>wearable/tct-namespace-tizen-tests-2.3.1.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-application-tizen-tests" launcher="WRTLauncher" category="Tizen Web Device APIs">\r
+    <auto_tcn>162</auto_tcn>\r
+    <manual_tcn>6</manual_tcn>\r
+    <total_tcn>168</total_tcn>\r
+    <pkg_name>common/tct-application-tizen-tests-2.3.1.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-humanactivitymonitor-tizen-tests" launcher="WRTLauncher" category="Tizen Web Device APIs">\r
+    <auto_tcn>87</auto_tcn>\r
+    <manual_tcn>15</manual_tcn>\r
+    <total_tcn>102</total_tcn>\r
+    <pkg_name>common/tct-humanactivitymonitor-tizen-tests-2.3.1.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-bluetooth-tizen-tests" launcher="WRTLauncher" category="Tizen Web Device APIs">\r
+    <auto_tcn>257</auto_tcn>\r
+    <manual_tcn>142</manual_tcn>\r
+    <total_tcn>399</total_tcn>\r
+    <pkg_name>common/tct-bluetooth-tizen-tests-2.3.1.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-fonts-css3-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
+    <auto_tcn>11</auto_tcn>\r
+    <manual_tcn>131</manual_tcn>\r
+    <total_tcn>142</total_tcn>\r
+    <pkg_name>common/tct-fonts-css3-tests-2.3.1.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-speech-w3c-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
+    <auto_tcn>40</auto_tcn>\r
+    <manual_tcn>1</manual_tcn>\r
+    <total_tcn>41</total_tcn>\r
+    <pkg_name>common/tct-speech-w3c-tests-2.3.1.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-security-tcs-tests" launcher="WRTLauncher" category="Compliance">\r
+    <auto_tcn>3</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>3</total_tcn>\r
+    <pkg_name>common/tct-security-tcs-tests-2.3.1.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-ui01-wrt-tests" launcher="WRTLauncher -iu" category="Web Runtime">\r
+    <auto_tcn>11</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>11</total_tcn>\r
+    <pkg_name>wearable/tct-ui01-wrt-tests-2.3.1.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-animationtiming-w3c-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
+    <auto_tcn>11</auto_tcn>\r
+    <manual_tcn>7</manual_tcn>\r
+    <total_tcn>18</total_tcn>\r
+    <pkg_name>common/tct-animationtiming-w3c-tests-2.3.1.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-selectorslevel2-w3c-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
+    <auto_tcn>30</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>30</total_tcn>\r
+    <pkg_name>common/tct-selectorslevel2-w3c-tests-2.3.1.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-2dtransforms-css3-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
+    <auto_tcn>34</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>34</total_tcn>\r
+    <pkg_name>common/tct-2dtransforms-css3-tests-2.3.1.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-forms-html5-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
+    <auto_tcn>146</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>146</total_tcn>\r
+    <pkg_name>wearable/tct-forms-html5-tests-2.3.1.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-time-tizen-tests" launcher="WRTLauncher" category="Tizen Web Device APIs">\r
+    <auto_tcn>470</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>470</total_tcn>\r
+    <pkg_name>common/tct-time-tizen-tests-2.3.1.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-wgtapi01-w3c-tests" launcher="WRTLauncher -iu" category="W3C/HTML5 APIs">\r
+    <auto_tcn>107</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>107</total_tcn>\r
+    <pkg_name>common/tct-wgtapi01-w3c-tests-2.3.1.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-capability-tests" launcher="WRTLauncher" category="Compliance">\r
+    <auto_tcn>40</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>40</total_tcn>\r
+    <pkg_name>common/tct-capability-tests-2.3.1.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-fileapi-w3c-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
+    <auto_tcn>97</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>97</total_tcn>\r
+    <pkg_name>wearable/tct-fileapi-w3c-tests-2.3.1.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-ext01-wrt-tests" launcher="WRTLauncher -iu" category="Web Runtime">\r
+    <auto_tcn>2</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>2</total_tcn>\r
+    <pkg_name>wearable/tct-ext01-wrt-tests-2.3.1.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-mediacapture-w3c-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
+    <auto_tcn>7</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>7</total_tcn>\r
+    <pkg_name>common/tct-mediacapture-w3c-tests-2.3.1.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-exif-tizen-tests" launcher="WRTLauncher" category="Tizen Web Device APIs">\r
+    <auto_tcn>64</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>64</total_tcn>\r
+    <pkg_name>common/tct-exif-tizen-tests-2.3.1.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-csp-w3c-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
+    <auto_tcn>133</auto_tcn>\r
+    <manual_tcn>78</manual_tcn>\r
+    <total_tcn>211</total_tcn>\r
+    <pkg_name>common/tct-csp-w3c-tests-2.3.1.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-secureelement-tizen-tests" launcher="WRTLauncher" category="Tizen Web Device APIs">\r
+    <auto_tcn>71</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>71</total_tcn>\r
+    <pkg_name>common/tct-secureelement-tizen-tests-2.3.1.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-sensor-tizen-tests" launcher="WRTLauncher" category="Tizen Web Device APIs">\r
+    <auto_tcn>146</auto_tcn>\r
+    <manual_tcn>21</manual_tcn>\r
+    <total_tcn>167</total_tcn>\r
+    <pkg_name>common/tct-sensor-tizen-tests-2.3.1.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-privilege-wrt-tests" category="Web Runtime">\r
+    <auto_tcn>190</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>190</total_tcn>\r
+    <pkg_name>wearable/tct-privilege-wrt-tests-2.3.1.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-power-tizen-tests" launcher="WRTLauncher" category="Tizen Web Device APIs">\r
+    <auto_tcn>50</auto_tcn>\r
+    <manual_tcn>6</manual_tcn>\r
+    <total_tcn>56</total_tcn>\r
+    <pkg_name>common/tct-power-tizen-tests-2.3.1.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-appwgt-wrt-tests" category="Web Runtime">\r
+    <auto_tcn>7</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>7</total_tcn>\r
+    <pkg_name>common/tct-appwgt-wrt-tests-2.3.1.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-privilege-tizen-tests" launcher="WRTLauncher" category="Tizen Web Device APIs">\r
+    <auto_tcn>51</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>51</total_tcn>\r
+    <pkg_name>wearable/tct-privilege-tizen-tests-2.3.1.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-mediakey-tizen-tests" launcher="WRTLauncher" category="Tizen Web Device APIs">\r
+    <auto_tcn>11</auto_tcn>\r
+    <manual_tcn>4</manual_tcn>\r
+    <total_tcn>15</total_tcn>\r
+    <pkg_name>common/tct-mediakey-tizen-tests-2.3.1.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-alarm-tizen-tests" launcher="WRTLauncher" category="Tizen Web Device APIs">\r
+    <auto_tcn>61</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>61</total_tcn>\r
+    <pkg_name>common/tct-alarm-tizen-tests-2.3.1.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-touchevent-w3c-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
+    <auto_tcn>16</auto_tcn>\r
+    <manual_tcn>7</manual_tcn>\r
+    <total_tcn>23</total_tcn>\r
+    <pkg_name>common/tct-touchevent-w3c-tests-2.3.1.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-wgtapi02-w3c-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
+    <auto_tcn>0</auto_tcn>\r
+    <manual_tcn>34</manual_tcn>\r
+    <total_tcn>34</total_tcn>\r
+    <pkg_name>common/tct-wgtapi02-w3c-tests-2.3.1.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-deviceorientation-w3c-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
+    <auto_tcn>37</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>37</total_tcn>\r
+    <pkg_name>common/tct-deviceorientation-w3c-tests-2.3.1.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-archive-tizen-tests" launcher="WRTLauncher" category="Tizen Web Device APIs">\r
+    <auto_tcn>106</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>106</total_tcn>\r
+    <pkg_name>common/tct-archive-tizen-tests-2.3.1.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-webmessaging-w3c-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
+    <auto_tcn>175</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>175</total_tcn>\r
+    <pkg_name>wearable/tct-webmessaging-w3c-tests-2.3.1.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-package-tizen-tests" launcher="WRTLauncher" category="Tizen Web Device APIs">\r
+    <auto_tcn>54</auto_tcn>\r
+    <manual_tcn>12</manual_tcn>\r
+    <total_tcn>66</total_tcn>\r
+    <pkg_name>common/tct-package-tizen-tests-2.3.1.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-notification-tizen-tests" launcher="WRTLauncher" category="Tizen Web Device APIs">\r
+    <auto_tcn>85</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>85</total_tcn>\r
+    <pkg_name>common/tct-notification-tizen-tests-2.3.1.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-tizen-tizen-tests" launcher="WRTLauncher" category="Tizen Web Device APIs">\r
+    <auto_tcn>81</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>81</total_tcn>\r
+    <pkg_name>common/tct-tizen-tizen-tests-2.3.1.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-rt01-wrt-tests" launcher="WRTLauncher -iu" category="Web Runtime">\r
+    <auto_tcn>12</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>12</total_tcn>\r
+    <pkg_name>common/tct-rt01-wrt-tests-2.3.1.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-widget01-w3c-tests" launcher="WRTLauncher -iu" category="W3C/HTML5 APIs">\r
+    <auto_tcn>155</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>155</total_tcn>\r
+    <pkg_name>wearable/tct-widget01-w3c-tests-2.3.1.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-svg-html5-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
+    <auto_tcn>3</auto_tcn>\r
+    <manual_tcn>9</manual_tcn>\r
+    <total_tcn>12</total_tcn>\r
+    <pkg_name>common/tct-svg-html5-tests-2.3.1.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-3dtransforms-css3-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
+    <auto_tcn>32</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>32</total_tcn>\r
+    <pkg_name>common/tct-3dtransforms-css3-tests-2.3.1.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-geoallow-w3c-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
+    <auto_tcn>208</auto_tcn>\r
+    <manual_tcn>3</manual_tcn>\r
+    <total_tcn>211</total_tcn>\r
+    <pkg_name>common/tct-geoallow-w3c-tests-2.3.1.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-sessionhistory-html5-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
+    <auto_tcn>148</auto_tcn>\r
+    <manual_tcn>1</manual_tcn>\r
+    <total_tcn>149</total_tcn>\r
+    <pkg_name>common/tct-sessionhistory-html5-tests-2.3.1.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-websocket-w3c-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
+    <auto_tcn>268</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>268</total_tcn>\r
+    <pkg_name>wearable/tct-websocket-w3c-tests-2.3.1.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-flexiblebox-css3-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
+    <auto_tcn>25</auto_tcn>\r
+    <manual_tcn>28</manual_tcn>\r
+    <total_tcn>53</total_tcn>\r
+    <pkg_name>common/tct-flexiblebox-css3-tests-2.3.1.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-datacontrol-tizen-tests" launcher="WRTLauncher" category="Tizen Web Device APIs">\r
+    <auto_tcn>113</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>113</total_tcn>\r
+    <pkg_name>common/tct-datacontrol-tizen-tests-2.3.1.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-dnd-html5-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
+    <auto_tcn>6</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>6</total_tcn>\r
+    <pkg_name>common/tct-dnd-html5-tests-2.3.1.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-extra-html5-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
+    <auto_tcn>544</auto_tcn>\r
+    <manual_tcn>25</manual_tcn>\r
+    <total_tcn>569</total_tcn>\r
+    <pkg_name>wearable/tct-extra-html5-tests-2.3.1.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-geodeny-w3c-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
+    <auto_tcn>0</auto_tcn>\r
+    <manual_tcn>3</manual_tcn>\r
+    <total_tcn>3</total_tcn>\r
+    <pkg_name>common/tct-geodeny-w3c-tests-2.3.1.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-colors-css3-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
+    <auto_tcn>46</auto_tcn>\r
+    <manual_tcn>29</manual_tcn>\r
+    <total_tcn>75</total_tcn>\r
+    <pkg_name>common/tct-colors-css3-tests-2.3.1.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-indexeddb-w3c-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
+    <auto_tcn>391</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>391</total_tcn>\r
+    <pkg_name>wearable/tct-indexeddb-w3c-tests-2.3.1.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-sandbox-html5-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
+    <auto_tcn>72</auto_tcn>\r
+    <manual_tcn>1</manual_tcn>\r
+    <total_tcn>73</total_tcn>\r
+    <pkg_name>common/tct-sandbox-html5-tests-2.3.1.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-camera-nonw3c-tests" launcher="WRTLauncher" category="Supplementary APIs">\r
+    <auto_tcn>83</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>83</total_tcn>\r
+    <pkg_name>wearable/tct-camera-nonw3c-tests-2.3.1.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-ui-css3-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
+    <auto_tcn>43</auto_tcn>\r
+    <manual_tcn>1</manual_tcn>\r
+    <total_tcn>44</total_tcn>\r
+    <pkg_name>common/tct-ui-css3-tests-2.3.1.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-canvas-html5-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
+    <auto_tcn>846</auto_tcn>\r
+    <manual_tcn>19</manual_tcn>\r
+    <total_tcn>865</total_tcn>\r
+    <pkg_name>common/tct-canvas-html5-tests-2.3.1.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-messageport-tizen-tests" launcher="WRTLauncher" category="Tizen Web Device APIs">\r
+    <auto_tcn>48</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>48</total_tcn>\r
+    <pkg_name>common/tct-messageport-tizen-tests-2.3.1.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-push-tizen-tests" launcher="WRTLauncher" category="Tizen Web Device APIs">\r
+    <auto_tcn>41</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>41</total_tcn>\r
+    <pkg_name>common/tct-push-tizen-tests-2.3.1.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-selectorslevel1-w3c-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
+    <auto_tcn>78</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>78</total_tcn>\r
+    <pkg_name>common/tct-selectorslevel1-w3c-tests-2.3.1.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-widgetpolicy-w3c-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
+    <auto_tcn>0</auto_tcn>\r
+    <manual_tcn>34</manual_tcn>\r
+    <total_tcn>34</total_tcn>\r
+    <pkg_name>common/tct-widgetpolicy-w3c-tests-2.3.1.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-batterystatus-w3c-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
+    <auto_tcn>23</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>23</total_tcn>\r
+    <pkg_name>common/tct-batterystatus-w3c-tests-2.3.1.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-cors-w3c-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
+    <auto_tcn>10</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>10</total_tcn>\r
+    <pkg_name>common/tct-cors-w3c-tests-2.3.1.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-xmlhttprequest-w3c-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
+    <auto_tcn>202</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>202</total_tcn>\r
+    <pkg_name>wearable/tct-xmlhttprequest-w3c-tests-2.3.1.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-maxLength-wrt-tests" launcher="WRTLauncher -iu" category="Web Runtime">\r
+    <auto_tcn>14</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>14</total_tcn>\r
+    <pkg_name>common/tct-maxLength-wrt-tests-2.3.1.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-filesystem-tizen-tests" launcher="WRTLauncher" category="Tizen Web Device APIs">\r
+    <auto_tcn>301</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>301</total_tcn>\r
+    <pkg_name>wearable/tct-filesystem-tizen-tests-2.3.1.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-systeminfo-tizen-tests" launcher="WRTLauncher" category="Tizen Web Device APIs">\r
+    <auto_tcn>289</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>289</total_tcn>\r
+    <pkg_name>wearable/tct-systeminfo-tizen-tests-2.3.1.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-typedarrays-nonw3c-tests" launcher="WRTLauncher" category="Supplementary APIs">\r
+    <auto_tcn>80</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>80</total_tcn>\r
+    <pkg_name>common/tct-typedarrays-nonw3c-tests-2.3.1.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-animations-css3-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
+    <auto_tcn>24</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>24</total_tcn>\r
+    <pkg_name>common/tct-animations-css3-tests-2.3.1.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-badge-tizen-tests" launcher="WRTLauncher" category="Tizen Web Device APIs">\r
+    <auto_tcn>26</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>26</total_tcn>\r
+    <pkg_name>common/tct-badge-tizen-tests-2.3.1.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-nfc-tizen-tests" launcher="WRTLauncher" category="Tizen Web Device APIs">\r
+    <auto_tcn>194</auto_tcn>\r
+    <manual_tcn>36</manual_tcn>\r
+    <total_tcn>230</total_tcn>\r
+    <pkg_name>common/tct-nfc-tizen-tests-2.3.1.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-vibration-w3c-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
+    <auto_tcn>2</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>2</total_tcn>\r
+    <pkg_name>common/tct-vibration-w3c-tests-2.3.1.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-pagevisibility-w3c-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
+    <auto_tcn>18</auto_tcn>\r
+    <manual_tcn>2</manual_tcn>\r
+    <total_tcn>20</total_tcn>\r
+    <pkg_name>wearable/tct-pagevisibility-w3c-tests-2.3.1.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-stab-wrt-tests" category="Web Runtime">\r
+    <auto_tcn>1</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>1</total_tcn>\r
+    <pkg_name>common/tct-stab-wrt-tests-2.3.1.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-text-css3-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
+    <auto_tcn>27</auto_tcn>\r
+    <manual_tcn>15</manual_tcn>\r
+    <total_tcn>42</total_tcn>\r
+    <pkg_name>common/tct-text-css3-tests-2.3.1.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-webstorage-w3c-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
+    <auto_tcn>177</auto_tcn>\r
+    <manual_tcn>4</manual_tcn>\r
+    <total_tcn>181</total_tcn>\r
+    <pkg_name>common/tct-webstorage-w3c-tests-2.3.1.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-webuifw-tests" category="Web UI Framework">\r
+    <auto_tcn>524</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>524</total_tcn>\r
+    <pkg_name>wearable/tct-webuifw-tests-2.3.1.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-download-tizen-tests" launcher="WRTLauncher" category="Tizen Web Device APIs">\r
+    <auto_tcn>62</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>62</total_tcn>\r
+    <pkg_name>common/tct-download-tizen-tests-2.3.1.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-mediaqueries-css3-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
+    <auto_tcn>52</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>52</total_tcn>\r
+    <pkg_name>wearable/tct-mediaqueries-css3-tests-2.3.1.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-content-tizen-tests" launcher="WRTLauncher" category="Tizen Web Device APIs">\r
+    <auto_tcn>230</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>230</total_tcn>\r
+    <pkg_name>common/tct-content-tizen-tests-2.3.1.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-gumallow-w3c-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
+    <auto_tcn>6</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>6</total_tcn>\r
+    <pkg_name>common/tct-gumallow-w3c-tests-2.3.1.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-systemsetting-tizen-tests" launcher="WRTLauncher" category="Tizen Web Device APIs">\r
+    <auto_tcn>33</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>33</total_tcn>\r
+    <pkg_name>common/tct-systemsetting-tizen-tests-2.3.1.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-video-html5-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
+    <auto_tcn>361</auto_tcn>\r
+    <manual_tcn>4</manual_tcn>\r
+    <total_tcn>365</total_tcn>\r
+    <pkg_name>wearable/tct-video-html5-tests-2.3.1.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-backgrounds-css3-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
+    <auto_tcn>541</auto_tcn>\r
+    <manual_tcn>74</manual_tcn>\r
+    <total_tcn>615</total_tcn>\r
+    <pkg_name>wearable/tct-backgrounds-css3-tests-2.3.1.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-pm-wrt-tests" category="Web Runtime">\r
+    <auto_tcn>24</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>24</total_tcn>\r
+    <pkg_name>common/tct-pm-wrt-tests-2.3.1.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-webgl-nonw3c-tests" launcher="WRTLauncher" category="Supplementary APIs">\r
+    <auto_tcn>889</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>889</total_tcn>\r
+    <pkg_name>common/tct-webgl-nonw3c-tests-2.3.1.zip</pkg_name>\r
+  </suite>\r
+</ns3:testplan>\r
+\r
diff --git a/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/shell/plan/Web_Full_wearable_3.0.xml b/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/shell/plan/Web_Full_wearable_3.0.xml
new file mode 100755 (executable)
index 0000000..47d2985
--- /dev/null
@@ -0,0 +1,724 @@
+<?xml version="1.0" encoding="UTF-8"?>\r
+<ns3:testplan xmlns:ns3="http://www.example.org/plan/" xmlns="" name="Web_Full_wearable_3.0" profile="wearable">\r
+  <execute_type>Auto</execute_type>\r
+  <suite name="tct-jsenhance-html5-tests" category="W3C/HTML5 APIs">\r
+    <auto_tcn>7</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>7</total_tcn>\r
+    <pkg_name>common/tct-jsenhance-html5-tests-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-multicolumn-css3-tests" category="W3C/HTML5 APIs">\r
+    <auto_tcn>136</auto_tcn>\r
+    <manual_tcn>18</manual_tcn>\r
+    <total_tcn>154</total_tcn>\r
+    <pkg_name>common/tct-multicolumn-css3-tests-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-devicemotion-cordova-tests" category="Cordova Plugin APIs">\r
+    <auto_tcn>18</auto_tcn>\r
+    <manual_tcn>1</manual_tcn>\r
+    <total_tcn>19</total_tcn>\r
+    <pkg_name>common/tct-devicemotion-cordova-tests-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-workers-w3c-tests" category="W3C/HTML5 APIs">\r
+    <auto_tcn>77</auto_tcn>\r
+    <manual_tcn>1</manual_tcn>\r
+    <total_tcn>78</total_tcn>\r
+    <pkg_name>common/tct-workers-w3c-tests-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-transitions-css3-tests" category="W3C/HTML5 APIs">\r
+    <auto_tcn>9</auto_tcn>\r
+    <manual_tcn>6</manual_tcn>\r
+    <total_tcn>15</total_tcn>\r
+    <pkg_name>common/tct-transitions-css3-tests-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-namespace-tizen-tests" category="Tizen Web Device APIs">\r
+    <auto_tcn>33</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>33</total_tcn>\r
+    <pkg_name>wearable/tct-namespace-tizen-tests-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-network-information-cordova-tests" category="Cordova Plugin APIs">\r
+    <auto_tcn>10</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>10</total_tcn>\r
+    <pkg_name>common/tct-network-information-cordova-tests-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-crypto-w3c-tests" category="W3C/HTML5 APIs">\r
+    <auto_tcn>78</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>78</total_tcn>\r
+    <pkg_name>common/tct-crypto-w3c-tests-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-2dtransforms-css3-tests" category="W3C/HTML5 APIs">\r
+    <auto_tcn>36</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>36</total_tcn>\r
+    <pkg_name>common/tct-2dtransforms-css3-tests-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-dialogs-cordova-tests" category="Cordova Plugin APIs">\r
+    <auto_tcn>13</auto_tcn>\r
+    <manual_tcn>9</manual_tcn>\r
+    <total_tcn>22</total_tcn>\r
+    <pkg_name>common/tct-dialogs-cordova-tests-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-time-tizen-tests" category="Tizen Web Device APIs">\r
+    <auto_tcn>470</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>470</total_tcn>\r
+    <pkg_name>wearable/tct-time-tizen-tests-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-forms-html5-tests" category="W3C/HTML5 APIs">\r
+    <auto_tcn>49</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>49</total_tcn>\r
+    <pkg_name>common/tct-forms-html5-tests-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-capability-tests" category="Compliance">\r
+    <auto_tcn>15</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>15</total_tcn>\r
+    <pkg_name>common/tct-capability-tests-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-fileapi-w3c-tests" category="W3C/HTML5 APIs">\r
+    <auto_tcn>33</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>33</total_tcn>\r
+    <pkg_name>common/tct-fileapi-w3c-tests-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-ext01-wrt-tests" category="Tizen WRT Core Spec">\r
+    <auto_tcn>3</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>3</total_tcn>\r
+    <pkg_name>wearable/tct-ext01-wrt-tests-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-mediacapture-w3c-tests" category="W3C/HTML5 APIs">\r
+    <auto_tcn>6</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>6</total_tcn>\r
+    <pkg_name>common/tct-mediacapture-w3c-tests-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-exif-tizen-tests" category="Tizen Web Device APIs">\r
+    <auto_tcn>64</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>64</total_tcn>\r
+    <pkg_name>common/tct-exif-tizen-tests-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-csp-w3c-tests" category="W3C/HTML5 APIs">\r
+    <auto_tcn>137</auto_tcn>\r
+    <manual_tcn>83</manual_tcn>\r
+    <total_tcn>220</total_tcn>\r
+    <pkg_name>common/tct-csp-w3c-tests-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-privilege-wrt-tests" category="Tizen WRT Core Spec">\r
+    <auto_tcn>188</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>188</total_tcn>\r
+    <pkg_name>wearable/tct-privilege-wrt-tests-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-mediakey-tizen-tests" category="Tizen Web Device APIs">\r
+    <auto_tcn>11</auto_tcn>\r
+    <manual_tcn>4</manual_tcn>\r
+    <total_tcn>15</total_tcn>\r
+    <pkg_name>wearable/tct-mediakey-tizen-tests-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-media-cordova-tests" category="Cordova Plugin APIs">\r
+    <auto_tcn>52</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>52</total_tcn>\r
+    <pkg_name>common/tct-media-cordova-tests-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-deviceorientation-w3c-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
+    <auto_tcn>37</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>37</total_tcn>\r
+    <pkg_name>wearable/tct-deviceorientation-w3c-tests-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-webmessaging-w3c-tests" category="W3C/HTML5 APIs">\r
+    <auto_tcn>175</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>175</total_tcn>\r
+    <pkg_name>common/tct-webmessaging-w3c-tests-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-package-tizen-tests" category="Tizen Web Device APIs">\r
+    <auto_tcn>54</auto_tcn>\r
+    <manual_tcn>12</manual_tcn>\r
+    <total_tcn>66</total_tcn>\r
+    <pkg_name>common/tct-package-tizen-tests-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-file-cordova-tests" category="Cordova Plugin APIs">\r
+    <auto_tcn>172</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>172</total_tcn>\r
+    <pkg_name>common/tct-file-cordova-tests-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-template-w3c-tests" category="W3C/HTML5 APIs">\r
+    <auto_tcn>1</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>1</total_tcn>\r
+    <pkg_name>common/tct-template-w3c-tests-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-notification-tizen-tests" category="Tizen Web Device APIs">\r
+    <auto_tcn>96</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>96</total_tcn>\r
+    <pkg_name>common/tct-notification-tizen-tests-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-rt01-wrt-tests" category="Tizen WRT Core Spec">\r
+    <auto_tcn>12</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>12</total_tcn>\r
+    <pkg_name>common/tct-rt01-wrt-tests-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-appcache-html5-tests" category="W3C/HTML5 APIs">\r
+    <auto_tcn>26</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>26</total_tcn>\r
+    <pkg_name>common/tct-appcache-html5-tests-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-svg-html5-tests" category="W3C/HTML5 APIs">\r
+    <auto_tcn>43</auto_tcn>\r
+    <manual_tcn>14</manual_tcn>\r
+    <total_tcn>57</total_tcn>\r
+    <pkg_name>common/tct-svg-html5-tests-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-websocket-w3c-tests" category="W3C/HTML5 APIs">\r
+    <auto_tcn>266</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>266</total_tcn>\r
+    <pkg_name>common/tct-websocket-w3c-tests-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-flexiblebox-css3-tests" category="W3C/HTML5 APIs">\r
+    <auto_tcn>14</auto_tcn>\r
+    <manual_tcn>14</manual_tcn>\r
+    <total_tcn>28</total_tcn>\r
+    <pkg_name>common/tct-flexiblebox-css3-tests-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-dnd-html5-tests" category="W3C/HTML5 APIs">\r
+    <auto_tcn>6</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>6</total_tcn>\r
+    <pkg_name>common/tct-dnd-html5-tests-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-extra-html5-tests" category="W3C/HTML5 APIs">\r
+    <auto_tcn>548</auto_tcn>\r
+    <manual_tcn>25</manual_tcn>\r
+    <total_tcn>573</total_tcn>\r
+    <pkg_name>common/tct-extra-html5-tests-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-fullscreen-nonw3c-tests" category="Supplementary APIs">\r
+    <auto_tcn>20</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>20</total_tcn>\r
+    <pkg_name>common/tct-fullscreen-nonw3c-tests-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-colors-css3-tests" category="W3C/HTML5 APIs">\r
+    <auto_tcn>46</auto_tcn>\r
+    <manual_tcn>29</manual_tcn>\r
+    <total_tcn>75</total_tcn>\r
+    <pkg_name>common/tct-colors-css3-tests-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-indexeddb-w3c-tests" category="W3C/HTML5 APIs">\r
+    <auto_tcn>343</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>343</total_tcn>\r
+    <pkg_name>common/tct-indexeddb-w3c-tests-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-sandbox-html5-tests" category="W3C/HTML5 APIs">\r
+    <auto_tcn>45</auto_tcn>\r
+    <manual_tcn>1</manual_tcn>\r
+    <total_tcn>46</total_tcn>\r
+    <pkg_name>common/tct-sandbox-html5-tests-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-messageport-tizen-tests" category="Tizen Web Device APIs">\r
+    <auto_tcn>51</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>51</total_tcn>\r
+    <pkg_name>common/tct-messageport-tizen-tests-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-push-tizen-tests" category="Tizen Web Device APIs">\r
+    <auto_tcn>45</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>45</total_tcn>\r
+    <pkg_name>wearable/tct-push-tizen-tests-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-browserstate-html5-tests" category="W3C/HTML5 APIs">\r
+    <auto_tcn>3</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>3</total_tcn>\r
+    <pkg_name>common/tct-browserstate-html5-tests-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-cors-w3c-tests" category="W3C/HTML5 APIs">\r
+    <auto_tcn>10</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>10</total_tcn>\r
+    <pkg_name>common/tct-cors-w3c-tests-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-xmlhttprequest-w3c-tests" category="W3C/HTML5 APIs">\r
+    <auto_tcn>212</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>212</total_tcn>\r
+    <pkg_name>common/tct-xmlhttprequest-w3c-tests-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-navigationtiming-w3c-tests" category="W3C/HTML5 APIs">\r
+    <auto_tcn>82</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>82</total_tcn>\r
+    <pkg_name>common/tct-navigationtiming-w3c-tests-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-typedarrays-nonw3c-tests" category="Supplementary APIs">\r
+    <auto_tcn>446</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>446</total_tcn>\r
+    <pkg_name>common/tct-typedarrays-nonw3c-tests-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-animations-css3-tests" category="W3C/HTML5 APIs">\r
+    <auto_tcn>25</auto_tcn>\r
+    <manual_tcn>1</manual_tcn>\r
+    <total_tcn>26</total_tcn>\r
+    <pkg_name>common/tct-animations-css3-tests-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-badge-tizen-tests" category="Tizen Web Device APIs">\r
+    <auto_tcn>26</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>26</total_tcn>\r
+    <pkg_name>wearable/tct-badge-tizen-tests-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-nfc-tizen-tests" launcher="WRTLauncher" category="Tizen Web Device APIs">\r
+    <auto_tcn>195</auto_tcn>\r
+    <manual_tcn>35</manual_tcn>\r
+    <total_tcn>230</total_tcn>\r
+    <pkg_name>wearable/tct-nfc-tizen-tests-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-pagevisibility-w3c-tests" category="W3C/HTML5 APIs">\r
+    <auto_tcn>18</auto_tcn>\r
+    <manual_tcn>2</manual_tcn>\r
+    <total_tcn>20</total_tcn>\r
+    <pkg_name>common/tct-pagevisibility-w3c-tests-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-ResponsiveImage-w3c-tests" category="Tizen W3C APIs">\r
+    <auto_tcn>32</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>32</total_tcn>\r
+    <pkg_name>common/tct-ResponsiveImage-w3c-tests-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-content-tizen-tests" category="Tizen Web Device APIs">\r
+    <auto_tcn>245</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>245</total_tcn>\r
+    <pkg_name>common/tct-content-tizen-tests-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-gumallow-w3c-tests" category="W3C/HTML5 APIs">\r
+    <auto_tcn>6</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>6</total_tcn>\r
+    <pkg_name>common/tct-gumallow-w3c-tests-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-notification-w3c-tests" category="W3C/HTML5 APIs">\r
+    <auto_tcn>39</auto_tcn>\r
+    <manual_tcn>3</manual_tcn>\r
+    <total_tcn>42</total_tcn>\r
+    <pkg_name>wearable/tct-notification-w3c-tests-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-serviceworkers-w3c-tests" category="W3C/HTML5 APIs">\r
+    <auto_tcn>107</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>107</total_tcn>\r
+    <pkg_name>common/tct-serviceworkers-w3c-tests-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-preference-tizen-tests" category="Tizen Web Device APIs">\r
+    <auto_tcn>45</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>45</total_tcn>\r
+    <pkg_name>wearable/tct-preference-tizen-tests-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-globalization-cordova-tests" category="Cordova Plugin APIs">\r
+    <auto_tcn>106</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>106</total_tcn>\r
+    <pkg_name>common/tct-globalization-cordova-tests-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-sp01-wrt-tests" category="Tizen WRT Core Spec">\r
+    <auto_tcn>4</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>4</total_tcn>\r
+    <pkg_name>common/tct-sp01-wrt-tests-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-widget02-w3c-tests" category="W3C/HTML5 APIs">\r
+    <auto_tcn>68</auto_tcn>\r
+    <manual_tcn>75</manual_tcn>\r
+    <total_tcn>143</total_tcn>\r
+    <pkg_name>wearable/tct-widget02-w3c-tests-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-audio-html5-tests" category="W3C/HTML5 APIs">\r
+    <auto_tcn>152</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>152</total_tcn>\r
+    <pkg_name>common/tct-audio-html5-tests-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-import-w3c-tests" category="W3C/HTML5 APIs">\r
+    <auto_tcn>1</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>1</total_tcn>\r
+    <pkg_name>common/tct-import-w3c-tests-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-screenorientation-w3c-tests" category="W3C/HTML5 APIs">\r
+    <auto_tcn>14</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>14</total_tcn>\r
+    <pkg_name>common/tct-screenorientation-w3c-tests-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-rt02-wrt-tests" category="Tizen WRT Core Spec">\r
+    <auto_tcn>3</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>3</total_tcn>\r
+    <pkg_name>common/tct-rt02-wrt-tests-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-sp02-wrt-tests" category="Tizen WRT Core Spec">\r
+    <auto_tcn>1</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>1</total_tcn>\r
+    <pkg_name>common/tct-sp02-wrt-tests-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-sound-tizen-tests" category="Tizen Web Device APIs">\r
+    <auto_tcn>52</auto_tcn>\r
+    <manual_tcn>8</manual_tcn>\r
+    <total_tcn>60</total_tcn>\r
+    <pkg_name>wearable/tct-sound-tizen-tests-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-ext02-wrt-tests" category="Tizen WRT Core Spec">\r
+    <auto_tcn>8</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>8</total_tcn>\r
+    <pkg_name>common/tct-ext02-wrt-tests-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-application-tizen-tests" category="Tizen Web Device APIs">\r
+    <auto_tcn>159</auto_tcn>\r
+    <manual_tcn>6</manual_tcn>\r
+    <total_tcn>165</total_tcn>\r
+    <pkg_name>wearable/tct-application-tizen-tests-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-humanactivitymonitor-tizen-tests" category="Tizen Web Device APIs">\r
+    <auto_tcn>87</auto_tcn>\r
+    <manual_tcn>15</manual_tcn>\r
+    <total_tcn>102</total_tcn>\r
+    <pkg_name>common/tct-humanactivitymonitor-tizen-tests-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-bluetooth-tizen-tests" category="Tizen Web Device APIs">\r
+    <auto_tcn>255</auto_tcn>\r
+    <manual_tcn>145</manual_tcn>\r
+    <total_tcn>400</total_tcn>\r
+    <pkg_name>wearable/tct-bluetooth-tizen-tests-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-fonts-css3-tests" category="W3C/HTML5 APIs">\r
+    <auto_tcn>12</auto_tcn>\r
+    <manual_tcn>131</manual_tcn>\r
+    <total_tcn>143</total_tcn>\r
+    <pkg_name>common/tct-fonts-css3-tests-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-speech-w3c-tests" category="W3C/HTML5 APIs">\r
+    <auto_tcn>87</auto_tcn>\r
+    <manual_tcn>4</manual_tcn>\r
+    <total_tcn>91</total_tcn>\r
+    <pkg_name>common/tct-speech-w3c-tests-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-security-tcs-tests" launcher="WRTLauncher" category="Compliance">\r
+    <auto_tcn>3</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>3</total_tcn>\r
+    <pkg_name>common/tct-security-tcs-tests-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-ui01-wrt-tests" category="Tizen WRT Core Spec">\r
+    <auto_tcn>11</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>11</total_tcn>\r
+    <pkg_name>wearable/tct-ui01-wrt-tests-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-animationtiming-w3c-tests" category="W3C/HTML5 APIs">\r
+    <auto_tcn>11</auto_tcn>\r
+    <manual_tcn>7</manual_tcn>\r
+    <total_tcn>18</total_tcn>\r
+    <pkg_name>common/tct-animationtiming-w3c-tests-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-selectorslevel2-w3c-tests" category="W3C/HTML5 APIs">\r
+    <auto_tcn>22</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>22</total_tcn>\r
+    <pkg_name>common/tct-selectorslevel2-w3c-tests-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-wgtapi01-w3c-tests" category="W3C/HTML5 APIs">\r
+    <auto_tcn>107</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>107</total_tcn>\r
+    <pkg_name>common/tct-wgtapi01-w3c-tests-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-webaudio-w3c-tests" category="W3C/HTML5 APIs">\r
+    <auto_tcn>257</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>257</total_tcn>\r
+    <pkg_name>common/tct-webaudio-w3c-tests-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-inputdevice-tizen-tests" category="Tizen Web Device APIs">\r
+    <auto_tcn>30</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>30</total_tcn>\r
+    <pkg_name>wearable/tct-inputdevice-tizen-tests-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-secureelement-tizen-tests" category="Tizen Web Device APIs">\r
+    <auto_tcn>101</auto_tcn>\r
+    <manual_tcn>1</manual_tcn>\r
+    <total_tcn>102</total_tcn>\r
+    <pkg_name>wearable/tct-secureelement-tizen-tests-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-sensor-tizen-tests" category="Tizen Web Device APIs">\r
+    <auto_tcn>166</auto_tcn>\r
+    <manual_tcn>21</manual_tcn>\r
+    <total_tcn>187</total_tcn>\r
+    <pkg_name>wearable/tct-sensor-tizen-tests-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-power-tizen-tests" category="Tizen Web Device APIs">\r
+    <auto_tcn>50</auto_tcn>\r
+    <manual_tcn>6</manual_tcn>\r
+    <total_tcn>56</total_tcn>\r
+    <pkg_name>wearable/tct-power-tizen-tests-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-privilege-tizen-tests" category="Tizen Web Device APIs">\r
+    <auto_tcn>71</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>71</total_tcn>\r
+    <pkg_name>common/tct-privilege-tizen-tests-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-alarm-tizen-tests" category="Tizen Web Device APIs">\r
+    <auto_tcn>60</auto_tcn>\r
+    <manual_tcn>1</manual_tcn>\r
+    <total_tcn>61</total_tcn>\r
+    <pkg_name>common/tct-alarm-tizen-tests-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-touchevent-w3c-tests" category="W3C/HTML5 APIs">\r
+    <auto_tcn>12</auto_tcn>\r
+    <manual_tcn>7</manual_tcn>\r
+    <total_tcn>19</total_tcn>\r
+    <pkg_name>common/tct-touchevent-w3c-tests-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-woff-w3c-tests" category="W3C/HTML5 APIs">\r
+    <auto_tcn>0</auto_tcn>\r
+    <manual_tcn>22</manual_tcn>\r
+    <total_tcn>22</total_tcn>\r
+    <pkg_name>common/tct-woff-w3c-tests-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-wgtapi02-w3c-tests" category="W3C/HTML5 APIs">\r
+    <auto_tcn>0</auto_tcn>\r
+    <manual_tcn>34</manual_tcn>\r
+    <total_tcn>34</total_tcn>\r
+    <pkg_name>common/tct-wgtapi02-w3c-tests-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-archive-tizen-tests" category="Tizen Web Device APIs">\r
+    <auto_tcn>106</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>106</total_tcn>\r
+    <pkg_name>common/tct-archive-tizen-tests-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-tizen-tizen-tests" category="Tizen Web Device APIs">\r
+    <auto_tcn>81</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>81</total_tcn>\r
+    <pkg_name>common/tct-tizen-tizen-tests-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-widget01-w3c-tests" category="W3C/HTML5 APIs">\r
+    <auto_tcn>155</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>155</total_tcn>\r
+    <pkg_name>common/tct-widget01-w3c-tests-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-3dtransforms-css3-tests" category="W3C/HTML5 APIs">\r
+    <auto_tcn>32</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>32</total_tcn>\r
+    <pkg_name>common/tct-3dtransforms-css3-tests-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-geoallow-w3c-tests" category="W3C/HTML5 APIs">\r
+    <auto_tcn>209</auto_tcn>\r
+    <manual_tcn>3</manual_tcn>\r
+    <total_tcn>212</total_tcn>\r
+    <pkg_name>common/tct-geoallow-w3c-tests-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-sessionhistory-html5-tests" category="W3C/HTML5 APIs">\r
+    <auto_tcn>117</auto_tcn>\r
+    <manual_tcn>2</manual_tcn>\r
+    <total_tcn>119</total_tcn>\r
+    <pkg_name>common/tct-sessionhistory-html5-tests-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-datacontrol-tizen-tests" category="Tizen Web Device APIs">\r
+    <auto_tcn>115</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>115</total_tcn>\r
+    <pkg_name>common/tct-datacontrol-tizen-tests-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-events-cordova-tests" category="Cordova Plugin APIs">\r
+    <auto_tcn>1</auto_tcn>\r
+    <manual_tcn>6</manual_tcn>\r
+    <total_tcn>7</total_tcn>\r
+    <pkg_name>common/tct-events-cordova-tests-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-geodeny-w3c-tests" category="W3C/HTML5 APIs">\r
+    <auto_tcn>0</auto_tcn>\r
+    <manual_tcn>3</manual_tcn>\r
+    <total_tcn>3</total_tcn>\r
+    <pkg_name>common/tct-geodeny-w3c-tests-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-ui-css3-tests" category="W3C/HTML5 APIs">\r
+    <auto_tcn>40</auto_tcn>\r
+    <manual_tcn>1</manual_tcn>\r
+    <total_tcn>41</total_tcn>\r
+    <pkg_name>common/tct-ui-css3-tests-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-canvas-html5-tests" category="W3C/HTML5 APIs">\r
+    <auto_tcn>848</auto_tcn>\r
+    <manual_tcn>20</manual_tcn>\r
+    <total_tcn>868</total_tcn>\r
+    <pkg_name>common/tct-canvas-html5-tests-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-keymanager-tizen-tests" category="Tizen Web Device APIs">\r
+    <auto_tcn>39</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>39</total_tcn>\r
+    <pkg_name>common/tct-keymanager-tizen-tests-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-selectorslevel1-w3c-tests" category="W3C/HTML5 APIs">\r
+    <auto_tcn>24</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>24</total_tcn>\r
+    <pkg_name>common/tct-selectorslevel1-w3c-tests-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-sse-w3c-tests" category="W3C/HTML5 APIs">\r
+    <auto_tcn>66</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>66</total_tcn>\r
+    <pkg_name>common/tct-sse-w3c-tests-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-widgetpolicy-w3c-tests" category="W3C/HTML5 APIs">\r
+    <auto_tcn>0</auto_tcn>\r
+    <manual_tcn>22</manual_tcn>\r
+    <total_tcn>22</total_tcn>\r
+    <pkg_name>common/tct-widgetpolicy-w3c-tests-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-batterystatus-w3c-tests" category="W3C/HTML5 APIs">\r
+    <auto_tcn>25</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>25</total_tcn>\r
+    <pkg_name>common/tct-batterystatus-w3c-tests-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-mediacontroller-tizen-tests" category="Tizen Web Device APIs">\r
+    <auto_tcn>162</auto_tcn>\r
+    <manual_tcn>3</manual_tcn>\r
+    <total_tcn>165</total_tcn>\r
+    <pkg_name>wearable/tct-mediacontroller-tizen-tests-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-filesystem-tizen-tests" category="Tizen Web Device APIs">\r
+    <auto_tcn>289</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>289</total_tcn>\r
+    <pkg_name>wearable/tct-filesystem-tizen-tests-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-systeminfo-tizen-tests" category="Tizen Web Device APIs">\r
+    <auto_tcn>293</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>293</total_tcn>\r
+    <pkg_name>wearable/tct-systeminfo-tizen-tests-3.0.zip</pkg_name>\r
+  </suite>\r
+ <suite name="tct-feedback-tizen-tests" category="Tizen Web Device APIs">\r
+    <auto_tcn>15</auto_tcn>\r
+    <manual_tcn>3</manual_tcn>\r
+    <total_tcn>18</total_tcn>\r
+    <pkg_name>wearable/tct-feedback-tizen-tests-3.0.zip</pkg_name>\r
+  </suite>  <suite name="tct-file-transfer-cordova-tests" category="Cordova Plugin APIs">\r
+    <auto_tcn>23</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>23</total_tcn>\r
+    <pkg_name>common/tct-file-transfer-cordova-tests-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-customelement-w3c-tests" category="W3C/HTML5 APIs">\r
+    <auto_tcn>10</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>10</total_tcn>\r
+    <pkg_name>common/tct-customelement-w3c-tests-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-device-cordova-tests" category="Cordova Plugin APIs">\r
+    <auto_tcn>7</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>7</total_tcn>\r
+    <pkg_name>common/tct-device-cordova-tests-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-beacon-w3c-tests" category="W3C/HTML5 APIs">\r
+    <auto_tcn>4</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>4</total_tcn>\r
+    <pkg_name>common/tct-beacon-w3c-tests-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-vibration-w3c-tests" category="W3C/HTML5 APIs">\r
+    <auto_tcn>1</auto_tcn>\r
+    <manual_tcn>1</manual_tcn>\r
+    <total_tcn>2</total_tcn>\r
+    <pkg_name>common/tct-vibration-w3c-tests-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-text-css3-tests" category="W3C/HTML5 APIs">\r
+    <auto_tcn>34</auto_tcn>\r
+    <manual_tcn>3</manual_tcn>\r
+    <total_tcn>37</total_tcn>\r
+    <pkg_name>common/tct-text-css3-tests-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-stab-wrt-tests" category="Tizen WRT Core Spec">\r
+    <auto_tcn>1</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>1</total_tcn>\r
+    <pkg_name>common/tct-stab-wrt-tests-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-webstorage-w3c-tests" category="W3C/HTML5 APIs">\r
+    <auto_tcn>195</auto_tcn>\r
+    <manual_tcn>5</manual_tcn>\r
+    <total_tcn>200</total_tcn>\r
+    <pkg_name>common/tct-webstorage-w3c-tests-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-download-tizen-tests" category="Tizen Web Device APIs">\r
+    <auto_tcn>62</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>62</total_tcn>\r
+    <pkg_name>common/tct-download-tizen-tests-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-mediaqueries-css3-tests" category="W3C/HTML5 APIs">\r
+    <auto_tcn>63</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>63</total_tcn>\r
+    <pkg_name>common/tct-mediaqueries-css3-tests-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-systemsetting-tizen-tests" category="Tizen Web Device APIs">\r
+    <auto_tcn>33</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>33</total_tcn>\r
+    <pkg_name>wearable/tct-systemsetting-tizen-tests-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-video-html5-tests" category="W3C/HTML5 APIs">\r
+    <auto_tcn>197</auto_tcn>\r
+    <manual_tcn>3</manual_tcn>\r
+    <total_tcn>200</total_tcn>\r
+    <pkg_name>common/tct-video-html5-tests-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-backgrounds-css3-tests" launcher="WRTLauncher" category="W3C/HTML5 APIs">\r
+    <auto_tcn>541</auto_tcn>\r
+    <manual_tcn>74</manual_tcn>\r
+    <total_tcn>615</total_tcn>\r
+    <pkg_name>common/tct-backgrounds-css3-tests-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-pm-wrt-tests" category="Tizen WRT Core Spec">\r
+    <auto_tcn>24</auto_tcn>\r
+    <manual_tcn>0</manual_tcn>\r
+    <total_tcn>24</total_tcn>\r
+    <pkg_name>common/tct-pm-wrt-tests-3.0.zip</pkg_name>\r
+  </suite>\r
+  <suite name="tct-webgl-nonw3c-tests" category="Supplementary APIs">\r
+    <auto_tcn>910</auto_tcn>\r
+    <manual_tcn>1</manual_tcn>\r
+    <total_tcn>911</total_tcn>\r
+    <pkg_name>common/tct-webgl-nonw3c-tests-3.0.zip</pkg_name>\r
+  </suite>\r
+</ns3:testplan>\r
+\r
diff --git a/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/shell/setup.py b/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/shell/setup.py
new file mode 100755 (executable)
index 0000000..46752a8
--- /dev/null
@@ -0,0 +1,19 @@
+#!/usr/bin/python
+
+from glob import glob
+
+from setuptools import setup, find_packages
+
+setup(
+    name = "tct-shell",
+    description = "Console tool for Tizen Compliance Test",
+    author = "Cathy Shen",
+    author_email = "daniel.tao@intel.com",
+    version = "1.0.16",
+    include_package_data = True,
+    data_files = [('/opt/tools/shell/plan', glob('plan/*')),
+                  ('/opt/tools/shell/', ['CONFIG', 'LICENSE', 'VERSION']),
+                  ('/opt/tools/shell/style', glob('style/*')),
+                  ('/opt/tools/', ['tct-shell', 'tct-plan-generator'])],
+    packages = find_packages(),
+)
diff --git a/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/shell/sltLeader21.properties b/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/shell/sltLeader21.properties
new file mode 100755 (executable)
index 0000000..43251a0
--- /dev/null
@@ -0,0 +1,116 @@
+globals = com.arne.GlobalLogics$ServerLifeCycle\r
+\r
+server.host = 182.254.132.122\r
+server.port = 8080\r
+\r
+platform.imgUrlPattern = http://182.254.132.122/imgStorage/%s\r
+platform.servlet.imgStorage = {"class":"com.arne.basedevss.base.sfs.local.LocalSFS", "args":{"dir":"/home/leader21/sltLeader21/leader21/imgStorage"}}\r
+platform.bookUrlPattern = http://182.254.132.122/bookStorage/%s\r
+platform.servlet.bookStorage = {"class":"com.arne.basedevss.base.sfs.local.LocalSFS", "args":{"dir":"/home/leader21/sltLeader21/leader21/bookStorage"}}\r
+platform.bookImgUrlPattern = http://182.254.132.122/bookImgStorage/%s\r
+platform.servlet.bookImgStorage = {"class":"com.arne.basedevss.base.sfs.local.LocalSFS", "args":{"dir":"/home/leader21/sltLeader21/leader21/bookImgStorage"}}\r
+platform.appUrlPattern = http://182.254.132.122/appStorage/%s\r
+platform.servlet.appStorage = {"class":"com.arne.basedevss.base.sfs.local.LocalSFS", "args":{"dir":"/home/leader21/sltLeader21/leader21/appStorage"}}\r
+platform.appTestUrlPattern = http://182.254.132.122/appTestStorage/%s\r
+platform.servlet.appTestStorage = {"class":"com.arne.basedevss.base.sfs.local.LocalSFS", "args":{"dir":"/home/leader21/sltLeader21/leader21/appTestStorage"}}\r
+platform.docUrlPattern = http://182.254.132.122/docStorage/%s\r
+platform.servlet.docStorage = {"class":"com.arne.basedevss.base.sfs.local.LocalSFS", "args":{"dir":"/home/leader21/sltLeader21/leader21/docStorage"}}\r
+\r
+platform.ysbookImgUrlPattern = http://182.254.132.122/bookImgStorage/%s\r
+platform.servlet.ysbookImgStorage = {"class":"com.arne.basedevss.base.sfs.local.LocalSFS", "args":{"dir":"/home/leader21/sltLeader21/leader21/bookImgStorage"}}\r
+\r
+platform.servlet.xmlStorage = {"class":"com.arne.basedevss.base.sfs.local.LocalSFS", "args":{"dir":"/home/leader21/sltLeader21/leader21/xml/"}}\r
+platform.attachmentPattern = http://182.254.132.122/Attachments/%s\r
+\r
+platform.ysbookImgUrlPattern.small.flag = 0\r
+platform.ysbookImgUrlPattern.small.width=110\r
+platform.ysbookImgUrlPattern.small = http://182.254.132.122/bookImgStorage/small/%s\r
+platform.servlet.ysbookImgStorage.small = {"class":"com.arne.basedevss.base.sfs.local.LocalSFS", "args":{"dir":"/home/leader21/sltLeader21/leader21/bookImgStorage/small"}}\r
+\r
+platform.servlet.qrCodeStorage = {"class":"com.arne.basedevss.base.sfs.local.LocalSFS", "args":{"dir":"/home/leader21/sltLeader21/leader21/qrCode/"}}\r
+platform.servlet.qrCodeStr = /home/leader21/sltLeader21/leader21/qrCode/\r
+platform.qrCodePattern = http://182.254.132.122/qrCode/%s\r
+platform.servlet.qrCode.width = 300\r
+platform.servlet.qrCode.height = 300\r
+\r
+platform.xmlStr = /home/leader21/sltLeader21/leader21/xml/\r
+platform.appStr = /home/leader21/sltLeader21/leader21/appStorage/\r
+\r
+platform.test.device.ids = /home/leader21/sltLeader21/leader21/device/ids.txt\r
+\r
+platform.join_act_count = 10\r
+platform.act_fillgolden.join_begin = 2014-02-10 00:00:00\r
+platform.act_fillgolden.join_end = 2014-02-28 23:59:59\r
+\r
+YL.merchantName = LEADER21\r
+YL.merchantId = 802310048992658\r
+YL.password = 61dear86420\r
+YL.private.p12 = /home/leader21/sltLeader21/leader21/PAY.YL/up_61dear_p12.p12\r
+YL.head.cer = /home/leader21/sltLeader21/leader21/PAY.YL/yl8001.cer\r
+YL.merchant_public_cer = /home/leader21/sltLeader21/leader21/PAY.YL/up_61dear_cer.cer\r
+YL.sendUrl = http://mobilepay.unionpaysecure.com/qzjy/MerOrderAction/deal.action\r
+YL.backEndUrl = http://182.254.132.122:8080/order/yl_back\r
+\r
+\r
+ZFB.partner = 2088701185025742\r
+ZFB.private_key = MIICdwIBADANBgkqhkiG9w0BAQEFAASCAmEwggJdAgEAAoGBAMym9J2yZ1K1/Lq+9V4UqDylZ7JygEk24d9vtFmPbNCGywU5JiQddfif8/lN8XcdpgvoNl1ujiXzpT6w5n2GYEKycg3B8zHcdoU8tWzWVL6GGbeZ/4dLY2U2XMPWtBJ+256ZP9qxN0iyBP8/qex57Ua43goWBRML5TPa/wQaCE2HAgMBAAECgYEAkiYAtsV7CBQy4eIRNBiodHbi8QrYFnD9KSWKtBK68MfyIE7JsCzh3KXOA5HoCNrBg+tXN64GEZBHx9dpIuddwbzZwoKv4DBWKRaIZDgfCyhWfopAYpxcGODngREIsdaBL7MSpElxfl2opMTESTIGSfXi4ZJFNb1kys7NlxjKEfECQQDo1kN+ka1s/Tk/oZHFysaM653oqdi6hTjpqSZJqlK7VAShQoKlR6aDy2phB3HWI2Qc5NJbNbEwqZ0+ISyhldATAkEA4QLmeWj2ZKcMwNitwq9i6Y9h4TZ0jG70B/+JgaayPFplwIjOiLn5rlLF+GRUsDJya/GQGCeAYsMIHUkbJDSDPQJBAOHCh1Uc+VQ5P54kEgz/bX9MIiNrNFq+PA3L1fUNcgRzFb4qmDScAae+v5nvNwCT9klR0Wlg6Tqu62lHj1fpxAMCQHY79OlVGyuWj+ABu4RybnI18oPJ/oIQh1BwmUu0UTHfeloqSQSVXLqaKga0ib+wMmnAHCxlDVRYETp6QLXMli0CQAOaSMnMfTrWwgdSSZVz9YKMqtCa1hzkUekTBQWFryNCLl+z54BMMhBSrj8XcGXkyD9ROzR+8HtS2ofuMn69XC8=\r
+ZFB.seller_id = 2088701185025742\r
+ZFB.log_path = /home/leader21/sltLeader21/leader21/\r
+ZFB.it_b_pay = 30 m\r
+ZFB.show_url = http://182.254.132.122/\r
+ZFB.backEndUrl = http://182.254.132.122:8080/order/zfb_back\r
+ZFB.ali_public_key = MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCnxj/9qwVfgoUh/y2W89L6BkRAFljhNhgPdyPuBV64bfQNN1PjbCzkIM6qRdKBoLPXmKKMiFYnkd6rAoprih3/PrQEB/VsW8OoM8fxn67UDYuyBTqA23MML9q1+ilIZwBC2AQ2UBVOrFXfFl75p6/B5KsiNG9zpgmLCUYuLkxpLQIDAQAB\r
+\r
+YB.pay_urlprefix=https://ok.yeepay.com/payapi\r
+YB.paytest_merchantaccount = YB01000000675\r
+YB.paytest_merchant_publickey = MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCPGXEFfLsmUVlBzb/4LjH+512G4fjVX9exKfM6ZET+JYNpGoNGTx6Qa1Q9vT4wMKR+fWTyGtjzP2T8AjTbAX4MuhzjxEfoWGzSz4On24F6cdYbcl9ZW92Ejic3w6B9QNkQ6QccOBviBjWlfm59jlfnDzxvibhMjuG/K+MJzfnLZwIDAQAB\r
+YB.paytest_merchant_privatekey = MIICdgIBADANBgkqhkiG9w0BAQEFAASCAmAwggJcAgEAAoGBAI8ZcQV8uyZRWUHNv/guMf7nXYbh+NVf17Ep8zpkRP4lg2kag0ZPHpBrVD29PjAwpH59ZPIa2PM/ZPwCNNsBfgy6HOPER+hYbNLPg6fbgXpx1htyX1lb3YSOJzfDoH1A2RDpBxw4G+IGNaV+bn2OV+cPPG+JuEyO4b8r4wnN+ctnAgMBAAECgYA8fB92l0svnhDhLIto5nXBbZ/tpFQeNH2h575kPv+egNKzuT4lmMmtd4BK/FNt4RGWWYAyiUCMSI5xqqkWrOHO8yrECuG3HOJOJuDFIZ6IA+4deVujzKGGuShV93Stm0Kkgz4L6Gy3FTiDzSV2Sb4WdSlObbtol8jvYHvdK1if6QJBAMza32yMWd2UzJ8kZLnBZTqO27zxpW523NRC7kP/osJqHqjaa3eTlPSUwHIE79kUtajLnnjSB4ZNNqQBp1OfUtUCQQCy04OOSaeTCMqdw9Z+b9eImkols/b//fH5wm8miK1SYGux4vghIObneOgHA0hZL3z3SRwK1E0Uw9IgZo77t+tLAkAVJvhw7eENlyK1v/1CjOyV6lBYJx9s04sjw7F0hf3ZUznNN5hnJW74/i8M1uOpJ5FGV5gKY61xOaHNt3n+kXHtAkEAqL8ljlh8tCgAot1Rg+BgP/xwaaGoPCrTcz8CChfBjlGEbsliIkjc+6LBORTk6ZwBTYyE1Mc/sY+TspV06Z3FfwJAKQA7ilH5VL7i7hwBF2q83pT5dco/vND1/RanOFgHMmuMrgWckvmWNs0wJh7nqomQVFkoxNRqWngH9/+qGHoD1w==\r
+YB.paytest_yibao_publickey = MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDD/yQOpBS2bulX2a+sHLXJPkAfMhF5dgmpc9+wGxOWqzvuxCgjy1Kyb9SwXVqHJtl1S+PA6ZSXdOosRgjVBhKonYU+7CLj0gvDk50mfhzFEM5bSEeM7Vu9G2gwy4yVJKV7lKg6KvGDzwdJpodvT8DS04OaBwcp6zvf6heqYNDyTQIDAQAB\r
+YB.user_id_card = 355533056614185\r
+YB.server_mac_addr = 14-DA-E9-F0-7C-47\r
+YB.server_ip_addr = 210.73.207.184\r
+YB.userua = bkb\r
+YB.callbackurl = http://182.254.132.122:8080/order/yb_back\r
+YB.fcallbackurl = http://182.254.132.122/close.html\r
+\r
+Exam.question.count = 7\r
+platform.servlet.questionStorage = {"class":"com.arne.basedevss.base.sfs.local.LocalSFS", "args":{"dir":"/home/leader21/sltLeader21/leader21/"}}\r
+platform.questionPattern = http://182.254.132.122/%s\r
+platform.questionPatternStr = http://182.254.132.122/\r
+\r
+platform.activity.db = mysql/127.0.0.1/leader21/root/ledi!@#qwe\r
+platform.admin.db = mysql/127.0.0.1/leader21/root/ledi!@#qwe\r
+platform.apps.db = mysql/127.0.0.1/leader21/root/ledi!@#qwe\r
+platform.books.db = mysql/127.0.0.1/leader21/root/ledi!@#qwe\r
+platform.examinations.db = mysql/127.0.0.1/leader21/root/ledi!@#qwe\r
+platform.history.db = mysql/127.0.0.1/leader21/root/ledi!@#qwe\r
+platform.user.db = mysql/127.0.0.1/leader21/root/ledi!@#qwe\r
+platform.user_books.db = mysql/127.0.0.1/leader21/root/ledi!@#qwe\r
+platform.user_increase.db = mysql/127.0.0.1/leader21/root/ledi!@#qwe\r
+platform.user_wealth.db = mysql/127.0.0.1/leader21/root/ledi!@#qwe\r
+platform.api.db = mysql/127.0.0.1/leader21/root/ledi!@#qwe\r
+\r
+servlet.activity.class =com.arne.platform.activity.ActivityServlet\r
+servlet.activity.path = /activity/*\r
+servlet.admin.class =com.arne.platform.admin.AdminServlet\r
+servlet.admin.path = /admin/*\r
+servlet.apps.class =com.arne.platform.apps.AppsServlet\r
+servlet.apps.path = /apps/*,/a/*\r
+servlet.books.class =com.arne.platform.books.BooksServlet\r
+servlet.books.path = /books/*\r
+servlet.history.class =com.arne.platform.history.HistoryServlet\r
+servlet.history.path = /history/*\r
+servlet.user.class =com.arne.platform.user.UserServlet\r
+servlet.user.path = /user/*\r
+servlet.userbooks.class =com.arne.platform.user_books.User_booksServlet\r
+servlet.userbooks.path = /userbooks/*\r
+servlet.user_increase.class =com.arne.platform.user_increase.User_increaseServlet\r
+servlet.user_increase.path = /user_increase/*\r
+servlet.userwealth.class =com.arne.platform.user_wealth.User_wealthServlet\r
+servlet.userwealth.path = /userwealth/*\r
+servlet.solutionapi.class =com.arne.platform.solutionapi.SolutionApiServlet\r
+servlet.solutionapi.path = /solutionapi/*\r
+servlet.exam.class =com.arne.platform.exam.ExamServlet\r
+servlet.exam.path = /exam/*\r
+servlet.order.class =com.arne.platform.order.OrderServlet\r
+servlet.order.path = /order/*\r
diff --git a/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/shell/style/application.js b/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/shell/style/application.js
new file mode 100755 (executable)
index 0000000..147094f
--- /dev/null
@@ -0,0 +1,194 @@
+function getScrollTop() {
+       return f_scrollTop();
+}
+
+function f_scrollTop() {
+       return f_filterResults($(window) ? $(window).scrollTop() : 0,
+                       document.documentElement ? document.documentElement.scrollTop : 0,
+                       document.body ? document.body.scrollTop : 0);
+}
+function f_filterResults(n_win, n_docel, n_body) {
+       var n_result = n_win ? n_win : 0;
+       if (n_docel && (!n_result || (n_result > n_docel)))
+               n_result = n_docel;
+       return n_body && (!n_result || (n_result > n_body)) ? n_body : n_result;
+}
+
+function setScrollTop() {
+       $(window) ? $(window).scrollTop(0) : 0;
+       document.documentElement ? document.documentElement.scrollTop = 0 : 0;
+       document.body ? document.body.scrollTop = 0 : 0;
+}
+
+function goTopEx() {
+       $node = $('#goTopBtn');
+       if (getScrollTop() > 0) {
+               $node.show();
+       } else {
+               $node.hide();
+       }
+
+       $(window).scroll(function() {
+               if (getScrollTop() > 0) {
+                       $node.show();
+               } else {
+                       $node.hide();
+               }
+       });
+
+       $node.click(function() {
+               setScrollTop();
+       });
+}
+
+function drawRatio() {
+       $('.suite_item').each(function(i, node) {
+               drawSuiteRatio(node)
+       });
+}
+
+$(".see_all").click(function(){
+       $("#see_all").show();
+    $("#see_fail").hide();
+    $("#see_block").hide();
+    $("#see_na").hide();
+    updateToggles();
+    return false;
+});
+
+$(".see_failed").click(function(){
+       $("#see_all").hide();
+    $("#see_fail").show();
+    $("#see_block").hide();
+    $("#see_na").hide();
+    updateToggles();
+    return false;
+});
+
+$(".see_blocked").click(function(){
+       $("#see_all").hide();
+    $("#see_fail").hide();
+    $("#see_block").show();
+    $("#see_na").hide();
+    updateToggles();
+    return false;
+});
+
+$(".see_na").click(function(){
+       $("#see_all").hide();
+    $("#see_fail").hide();
+    $("#see_block").hide();
+    $("#see_na").show();
+    updateToggles();
+    return false;
+});
+
+$("a.test_case_popup").click(function(){
+       var $this = $(this);
+       Popup.show($this.attr('id'));
+    return false;
+});
+
+$(".see_capabilities").click(function(){
+       if ($('#capability_table').css('display') == 'none') {
+               $("#capability_table").show();
+       }else{
+               $("#capability_table").hide();
+       }
+    return false;
+});
+
+function drawSuiteRatio(node) {
+       arrTitle = new Array("Passed", "Failed", "Blocked", "Not Executed");
+       var $node = $(node);
+       var $total = $node.find('.total');
+       var $pass = $node.find('.pass');
+       var $fail = $node.find('.fail');
+       var $block = $node.find('.block');
+       var $na = $node.find('.na');
+       var $div = $node.find('.RatioGraphic');
+
+       var total_int = parseInt($total.text());
+       var pass_int = parseInt($pass.text());
+       var fail_int = parseInt($fail.text());
+       var block_int = parseInt($block.text());
+       var na_int = parseInt($na.text());
+
+       var pass_rate = pass_int * 100 / total_int;
+       var fail_rate = fail_int * 100 / total_int;
+       var block_rate = block_int * 100 / total_int;
+       var na_rate = na_int * 100 / total_int;
+
+       var areaWidth = 380;
+
+       var pass_width = areaWidth * pass_rate / 100;
+       var fail_width = areaWidth * fail_rate / 100;
+       var block_width = areaWidth * block_rate / 100;
+       var na_width = areaWidth * na_rate / 100;
+       
+       pass_rate = pass_rate.toFixed(2);
+       fail_rate = fail_rate.toFixed(2);
+       block_rate = block_rate.toFixed(2);
+       na_rate = na_rate.toFixed(2);
+
+       var pass_style = "padding:3px 0px 0px 0px;font-size:9pt;height:17px;text-align:center;color:white;font-weight:bold;background:url(&quot;./style/blue.jpg&quot;);"
+       var fail_style = "padding:3px 0px 0px 0px;font-size:9pt;height:17px;text-align:center;color:white;font-weight:bold;background:url(&quot;./style/red.jpg&quot;);"
+       var block_style = "padding:3px 0px 0px 0px;font-size:9pt;height:17px;text-align:center;color:white;font-weight:bold;background:url(&quot;./style/orange.jpg&quot;);"
+       var na_style = "padding:3px 0px 0px 0px;font-size:9pt;height:17px;text-align:center;color:white;font-weight:bold;background:url(&quot;./style/gray.jpg&quot;);"
+
+       var html = "<table width=\"380.68\" align=\"center\"><tbody><tr>";
+       if (pass_width > 0){
+           html += "<td width=\""
+                       + pass_width
+                       + "\" style=\""
+                       + pass_style
+                       + "\" title=\"Passed :"
+                       + pass_rate
+                       + "%\">";
+           if (pass_width > 20){
+               html += pass_rate + "%"
+           }
+           html +=  "</td>";
+       }
+       if (fail_width > 0){
+               html += "<td width=\""
+                       + fail_width
+                       + "\" style=\""
+                       + fail_style
+                       + "\" title=\"Failed :"
+                       + fail_rate
+                       + "%\">";
+           if (fail_width > 20){
+               html += fail_rate + "%"
+           }
+           html +=  "</td>";
+       }
+       if (block_width > 0){
+               html += "<td width=\""
+                       + block_width
+                       + "\" style=\""
+                       + block_style
+                       + "\" title=\"Blocked :"
+                       + block_rate
+                       + "%\">";
+           if (block_width > 20){
+               html += block_rate + "%"
+           }
+           html +=  "</td>";
+       }
+       if (na_width > 0){
+               html += "<td width=\""
+                       + na_width
+                       + "\" style=\""
+                       + na_style
+                       + "\" title=\"Blocked :"
+                       + na_rate
+                       + "%\">";
+           if (na_width > 20){
+               html += na_rate + "%"
+           }
+           html +=  "</td>";
+       }
+       html += "</tr></tbody></table>";
+       $div.html(html);
+}
diff --git a/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/shell/style/back_top.png b/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/shell/style/back_top.png
new file mode 100755 (executable)
index 0000000..19cbd76
Binary files /dev/null and b/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/shell/style/back_top.png differ
diff --git a/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/shell/style/blue.jpg b/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/shell/style/blue.jpg
new file mode 100755 (executable)
index 0000000..d1db8f7
Binary files /dev/null and b/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/shell/style/blue.jpg differ
diff --git a/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/shell/style/gray.jpg b/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/shell/style/gray.jpg
new file mode 100755 (executable)
index 0000000..f1acfdb
Binary files /dev/null and b/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/shell/style/gray.jpg differ
diff --git a/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/shell/style/jquery.min.js b/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/shell/style/jquery.min.js
new file mode 100755 (executable)
index 0000000..198b3ff
--- /dev/null
@@ -0,0 +1,4 @@
+/*! jQuery v1.7.1 jquery.com | jquery.org/license */
+(function(a,b){function cy(a){return f.isWindow(a)?a:a.nodeType===9?a.defaultView||a.parentWindow:!1}function cv(a){if(!ck[a]){var b=c.body,d=f("<"+a+">").appendTo(b),e=d.css("display");d.remove();if(e==="none"||e===""){cl||(cl=c.createElement("iframe"),cl.frameBorder=cl.width=cl.height=0),b.appendChild(cl);if(!cm||!cl.createElement)cm=(cl.contentWindow||cl.contentDocument).document,cm.write((c.compatMode==="CSS1Compat"?"<!doctype html>":"")+"<html><body>"),cm.close();d=cm.createElement(a),cm.body.appendChild(d),e=f.css(d,"display"),b.removeChild(cl)}ck[a]=e}return ck[a]}function cu(a,b){var c={};f.each(cq.concat.apply([],cq.slice(0,b)),function(){c[this]=a});return c}function ct(){cr=b}function cs(){setTimeout(ct,0);return cr=f.now()}function cj(){try{return new a.ActiveXObject("Microsoft.XMLHTTP")}catch(b){}}function ci(){try{return new a.XMLHttpRequest}catch(b){}}function cc(a,c){a.dataFilter&&(c=a.dataFilter(c,a.dataType));var d=a.dataTypes,e={},g,h,i=d.length,j,k=d[0],l,m,n,o,p;for(g=1;g<i;g++){if(g===1)for(h in a.converters)typeof h=="string"&&(e[h.toLowerCase()]=a.converters[h]);l=k,k=d[g];if(k==="*")k=l;else if(l!=="*"&&l!==k){m=l+" "+k,n=e[m]||e["* "+k];if(!n){p=b;for(o in e){j=o.split(" ");if(j[0]===l||j[0]==="*"){p=e[j[1]+" "+k];if(p){o=e[o],o===!0?n=p:p===!0&&(n=o);break}}}}!n&&!p&&f.error("No conversion from "+m.replace(" "," to ")),n!==!0&&(c=n?n(c):p(o(c)))}}return c}function cb(a,c,d){var e=a.contents,f=a.dataTypes,g=a.responseFields,h,i,j,k;for(i in g)i in d&&(c[g[i]]=d[i]);while(f[0]==="*")f.shift(),h===b&&(h=a.mimeType||c.getResponseHeader("content-type"));if(h)for(i in e)if(e[i]&&e[i].test(h)){f.unshift(i);break}if(f[0]in d)j=f[0];else{for(i in d){if(!f[0]||a.converters[i+" "+f[0]]){j=i;break}k||(k=i)}j=j||k}if(j){j!==f[0]&&f.unshift(j);return d[j]}}function ca(a,b,c,d){if(f.isArray(b))f.each(b,function(b,e){c||bE.test(a)?d(a,e):ca(a+"["+(typeof e=="object"||f.isArray(e)?b:"")+"]",e,c,d)});else if(!c&&b!=null&&typeof b=="object")for(var e in b)ca(a+"["+e+"]",b[e],c,d);else d(a,b)}function b_(a,c){var d,e,g=f.ajaxSettings.flatOptions||{};for(d in c)c[d]!==b&&((g[d]?a:e||(e={}))[d]=c[d]);e&&f.extend(!0,a,e)}function b$(a,c,d,e,f,g){f=f||c.dataTypes[0],g=g||{},g[f]=!0;var h=a[f],i=0,j=h?h.length:0,k=a===bT,l;for(;i<j&&(k||!l);i++)l=h[i](c,d,e),typeof l=="string"&&(!k||g[l]?l=b:(c.dataTypes.unshift(l),l=b$(a,c,d,e,l,g)));(k||!l)&&!g["*"]&&(l=b$(a,c,d,e,"*",g));return l}function bZ(a){return function(b,c){typeof b!="string"&&(c=b,b="*");if(f.isFunction(c)){var d=b.toLowerCase().split(bP),e=0,g=d.length,h,i,j;for(;e<g;e++)h=d[e],j=/^\+/.test(h),j&&(h=h.substr(1)||"*"),i=a[h]=a[h]||[],i[j?"unshift":"push"](c)}}}function bC(a,b,c){var d=b==="width"?a.offsetWidth:a.offsetHeight,e=b==="width"?bx:by,g=0,h=e.length;if(d>0){if(c!=="border")for(;g<h;g++)c||(d-=parseFloat(f.css(a,"padding"+e[g]))||0),c==="margin"?d+=parseFloat(f.css(a,c+e[g]))||0:d-=parseFloat(f.css(a,"border"+e[g]+"Width"))||0;return d+"px"}d=bz(a,b,b);if(d<0||d==null)d=a.style[b]||0;d=parseFloat(d)||0;if(c)for(;g<h;g++)d+=parseFloat(f.css(a,"padding"+e[g]))||0,c!=="padding"&&(d+=parseFloat(f.css(a,"border"+e[g]+"Width"))||0),c==="margin"&&(d+=parseFloat(f.css(a,c+e[g]))||0);return d+"px"}function bp(a,b){b.src?f.ajax({url:b.src,async:!1,dataType:"script"}):f.globalEval((b.text||b.textContent||b.innerHTML||"").replace(bf,"/*$0*/")),b.parentNode&&b.parentNode.removeChild(b)}function bo(a){var b=c.createElement("div");bh.appendChild(b),b.innerHTML=a.outerHTML;return b.firstChild}function bn(a){var b=(a.nodeName||"").toLowerCase();b==="input"?bm(a):b!=="script"&&typeof a.getElementsByTagName!="undefined"&&f.grep(a.getElementsByTagName("input"),bm)}function bm(a){if(a.type==="checkbox"||a.type==="radio")a.defaultChecked=a.checked}function bl(a){return typeof a.getElementsByTagName!="undefined"?a.getElementsByTagName("*"):typeof a.querySelectorAll!="undefined"?a.querySelectorAll("*"):[]}function bk(a,b){var c;if(b.nodeType===1){b.clearAttributes&&b.clearAttributes(),b.mergeAttributes&&b.mergeAttributes(a),c=b.nodeName.toLowerCase();if(c==="object")b.outerHTML=a.outerHTML;else if(c!=="input"||a.type!=="checkbox"&&a.type!=="radio"){if(c==="option")b.selected=a.defaultSelected;else if(c==="input"||c==="textarea")b.defaultValue=a.defaultValue}else a.checked&&(b.defaultChecked=b.checked=a.checked),b.value!==a.value&&(b.value=a.value);b.removeAttribute(f.expando)}}function bj(a,b){if(b.nodeType===1&&!!f.hasData(a)){var c,d,e,g=f._data(a),h=f._data(b,g),i=g.events;if(i){delete h.handle,h.events={};for(c in i)for(d=0,e=i[c].length;d<e;d++)f.event.add(b,c+(i[c][d].namespace?".":"")+i[c][d].namespace,i[c][d],i[c][d].data)}h.data&&(h.data=f.extend({},h.data))}}function bi(a,b){return f.nodeName(a,"table")?a.getElementsByTagName("tbody")[0]||a.appendChild(a.ownerDocument.createElement("tbody")):a}function U(a){var b=V.split("|"),c=a.createDocumentFragment();if(c.createElement)while(b.length)c.createElement(b.pop());return c}function T(a,b,c){b=b||0;if(f.isFunction(b))return f.grep(a,function(a,d){var e=!!b.call(a,d,a);return e===c});if(b.nodeType)return f.grep(a,function(a,d){return a===b===c});if(typeof b=="string"){var d=f.grep(a,function(a){return a.nodeType===1});if(O.test(b))return f.filter(b,d,!c);b=f.filter(b,d)}return f.grep(a,function(a,d){return f.inArray(a,b)>=0===c})}function S(a){return!a||!a.parentNode||a.parentNode.nodeType===11}function K(){return!0}function J(){return!1}function n(a,b,c){var d=b+"defer",e=b+"queue",g=b+"mark",h=f._data(a,d);h&&(c==="queue"||!f._data(a,e))&&(c==="mark"||!f._data(a,g))&&setTimeout(function(){!f._data(a,e)&&!f._data(a,g)&&(f.removeData(a,d,!0),h.fire())},0)}function m(a){for(var b in a){if(b==="data"&&f.isEmptyObject(a[b]))continue;if(b!=="toJSON")return!1}return!0}function l(a,c,d){if(d===b&&a.nodeType===1){var e="data-"+c.replace(k,"-$1").toLowerCase();d=a.getAttribute(e);if(typeof d=="string"){try{d=d==="true"?!0:d==="false"?!1:d==="null"?null:f.isNumeric(d)?parseFloat(d):j.test(d)?f.parseJSON(d):d}catch(g){}f.data(a,c,d)}else d=b}return d}function h(a){var b=g[a]={},c,d;a=a.split(/\s+/);for(c=0,d=a.length;c<d;c++)b[a[c]]=!0;return b}var c=a.document,d=a.navigator,e=a.location,f=function(){function J(){if(!e.isReady){try{c.documentElement.doScroll("left")}catch(a){setTimeout(J,1);return}e.ready()}}var e=function(a,b){return new e.fn.init(a,b,h)},f=a.jQuery,g=a.$,h,i=/^(?:[^#<]*(<[\w\W]+>)[^>]*$|#([\w\-]*)$)/,j=/\S/,k=/^\s+/,l=/\s+$/,m=/^<(\w+)\s*\/?>(?:<\/\1>)?$/,n=/^[\],:{}\s]*$/,o=/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,p=/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,q=/(?:^|:|,)(?:\s*\[)+/g,r=/(webkit)[ \/]([\w.]+)/,s=/(opera)(?:.*version)?[ \/]([\w.]+)/,t=/(msie) ([\w.]+)/,u=/(mozilla)(?:.*? rv:([\w.]+))?/,v=/-([a-z]|[0-9])/ig,w=/^-ms-/,x=function(a,b){return(b+"").toUpperCase()},y=d.userAgent,z,A,B,C=Object.prototype.toString,D=Object.prototype.hasOwnProperty,E=Array.prototype.push,F=Array.prototype.slice,G=String.prototype.trim,H=Array.prototype.indexOf,I={};e.fn=e.prototype={constructor:e,init:function(a,d,f){var g,h,j,k;if(!a)return this;if(a.nodeType){this.context=this[0]=a,this.length=1;return this}if(a==="body"&&!d&&c.body){this.context=c,this[0]=c.body,this.selector=a,this.length=1;return this}if(typeof a=="string"){a.charAt(0)!=="<"||a.charAt(a.length-1)!==">"||a.length<3?g=i.exec(a):g=[null,a,null];if(g&&(g[1]||!d)){if(g[1]){d=d instanceof e?d[0]:d,k=d?d.ownerDocument||d:c,j=m.exec(a),j?e.isPlainObject(d)?(a=[c.createElement(j[1])],e.fn.attr.call(a,d,!0)):a=[k.createElement(j[1])]:(j=e.buildFragment([g[1]],[k]),a=(j.cacheable?e.clone(j.fragment):j.fragment).childNodes);return e.merge(this,a)}h=c.getElementById(g[2]);if(h&&h.parentNode){if(h.id!==g[2])return f.find(a);this.length=1,this[0]=h}this.context=c,this.selector=a;return this}return!d||d.jquery?(d||f).find(a):this.constructor(d).find(a)}if(e.isFunction(a))return f.ready(a);a.selector!==b&&(this.selector=a.selector,this.context=a.context);return e.makeArray(a,this)},selector:"",jquery:"1.7.1",length:0,size:function(){return this.length},toArray:function(){return F.call(this,0)},get:function(a){return a==null?this.toArray():a<0?this[this.length+a]:this[a]},pushStack:function(a,b,c){var d=this.constructor();e.isArray(a)?E.apply(d,a):e.merge(d,a),d.prevObject=this,d.context=this.context,b==="find"?d.selector=this.selector+(this.selector?" ":"")+c:b&&(d.selector=this.selector+"."+b+"("+c+")");return d},each:function(a,b){return e.each(this,a,b)},ready:function(a){e.bindReady(),A.add(a);return this},eq:function(a){a=+a;return a===-1?this.slice(a):this.slice(a,a+1)},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},slice:function(){return this.pushStack(F.apply(this,arguments),"slice",F.call(arguments).join(","))},map:function(a){return this.pushStack(e.map(this,function(b,c){return a.call(b,c,b)}))},end:function(){return this.prevObject||this.constructor(null)},push:E,sort:[].sort,splice:[].splice},e.fn.init.prototype=e.fn,e.extend=e.fn.extend=function(){var a,c,d,f,g,h,i=arguments[0]||{},j=1,k=arguments.length,l=!1;typeof i=="boolean"&&(l=i,i=arguments[1]||{},j=2),typeof i!="object"&&!e.isFunction(i)&&(i={}),k===j&&(i=this,--j);for(;j<k;j++)if((a=arguments[j])!=null)for(c in a){d=i[c],f=a[c];if(i===f)continue;l&&f&&(e.isPlainObject(f)||(g=e.isArray(f)))?(g?(g=!1,h=d&&e.isArray(d)?d:[]):h=d&&e.isPlainObject(d)?d:{},i[c]=e.extend(l,h,f)):f!==b&&(i[c]=f)}return i},e.extend({noConflict:function(b){a.$===e&&(a.$=g),b&&a.jQuery===e&&(a.jQuery=f);return e},isReady:!1,readyWait:1,holdReady:function(a){a?e.readyWait++:e.ready(!0)},ready:function(a){if(a===!0&&!--e.readyWait||a!==!0&&!e.isReady){if(!c.body)return setTimeout(e.ready,1);e.isReady=!0;if(a!==!0&&--e.readyWait>0)return;A.fireWith(c,[e]),e.fn.trigger&&e(c).trigger("ready").off("ready")}},bindReady:function(){if(!A){A=e.Callbacks("once memory");if(c.readyState==="complete")return setTimeout(e.ready,1);if(c.addEventListener)c.addEventListener("DOMContentLoaded",B,!1),a.addEventListener("load",e.ready,!1);else if(c.attachEvent){c.attachEvent("onreadystatechange",B),a.attachEvent("onload",e.ready);var b=!1;try{b=a.frameElement==null}catch(d){}c.documentElement.doScroll&&b&&J()}}},isFunction:function(a){return e.type(a)==="function"},isArray:Array.isArray||function(a){return e.type(a)==="array"},isWindow:function(a){return a&&typeof a=="object"&&"setInterval"in a},isNumeric:function(a){return!isNaN(parseFloat(a))&&isFinite(a)},type:function(a){return a==null?String(a):I[C.call(a)]||"object"},isPlainObject:function(a){if(!a||e.type(a)!=="object"||a.nodeType||e.isWindow(a))return!1;try{if(a.constructor&&!D.call(a,"constructor")&&!D.call(a.constructor.prototype,"isPrototypeOf"))return!1}catch(c){return!1}var d;for(d in a);return d===b||D.call(a,d)},isEmptyObject:function(a){for(var b in a)return!1;return!0},error:function(a){throw new Error(a)},parseJSON:function(b){if(typeof b!="string"||!b)return null;b=e.trim(b);if(a.JSON&&a.JSON.parse)return a.JSON.parse(b);if(n.test(b.replace(o,"@").replace(p,"]").replace(q,"")))return(new Function("return "+b))();e.error("Invalid JSON: "+b)},parseXML:function(c){var d,f;try{a.DOMParser?(f=new DOMParser,d=f.parseFromString(c,"text/xml")):(d=new ActiveXObject("Microsoft.XMLDOM"),d.async="false",d.loadXML(c))}catch(g){d=b}(!d||!d.documentElement||d.getElementsByTagName("parsererror").length)&&e.error("Invalid XML: "+c);return d},noop:function(){},globalEval:function(b){b&&j.test(b)&&(a.execScript||function(b){a.eval.call(a,b)})(b)},camelCase:function(a){return a.replace(w,"ms-").replace(v,x)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toUpperCase()===b.toUpperCase()},each:function(a,c,d){var f,g=0,h=a.length,i=h===b||e.isFunction(a);if(d){if(i){for(f in a)if(c.apply(a[f],d)===!1)break}else for(;g<h;)if(c.apply(a[g++],d)===!1)break}else if(i){for(f in a)if(c.call(a[f],f,a[f])===!1)break}else for(;g<h;)if(c.call(a[g],g,a[g++])===!1)break;return a},trim:G?function(a){return a==null?"":G.call(a)}:function(a){return a==null?"":(a+"").replace(k,"").replace(l,"")},makeArray:function(a,b){var c=b||[];if(a!=null){var d=e.type(a);a.length==null||d==="string"||d==="function"||d==="regexp"||e.isWindow(a)?E.call(c,a):e.merge(c,a)}return c},inArray:function(a,b,c){var d;if(b){if(H)return H.call(b,a,c);d=b.length,c=c?c<0?Math.max(0,d+c):c:0;for(;c<d;c++)if(c in b&&b[c]===a)return c}return-1},merge:function(a,c){var d=a.length,e=0;if(typeof c.length=="number")for(var f=c.length;e<f;e++)a[d++]=c[e];else while(c[e]!==b)a[d++]=c[e++];a.length=d;return a},grep:function(a,b,c){var d=[],e;c=!!c;for(var f=0,g=a.length;f<g;f++)e=!!b(a[f],f),c!==e&&d.push(a[f]);return d},map:function(a,c,d){var f,g,h=[],i=0,j=a.length,k=a instanceof e||j!==b&&typeof j=="number"&&(j>0&&a[0]&&a[j-1]||j===0||e.isArray(a));if(k)for(;i<j;i++)f=c(a[i],i,d),f!=null&&(h[h.length]=f);else for(g in a)f=c(a[g],g,d),f!=null&&(h[h.length]=f);return h.concat.apply([],h)},guid:1,proxy:function(a,c){if(typeof c=="string"){var d=a[c];c=a,a=d}if(!e.isFunction(a))return b;var f=F.call(arguments,2),g=function(){return a.apply(c,f.concat(F.call(arguments)))};g.guid=a.guid=a.guid||g.guid||e.guid++;return g},access:function(a,c,d,f,g,h){var i=a.length;if(typeof c=="object"){for(var j in c)e.access(a,j,c[j],f,g,d);return a}if(d!==b){f=!h&&f&&e.isFunction(d);for(var k=0;k<i;k++)g(a[k],c,f?d.call(a[k],k,g(a[k],c)):d,h);return a}return i?g(a[0],c):b},now:function(){return(new Date).getTime()},uaMatch:function(a){a=a.toLowerCase();var b=r.exec(a)||s.exec(a)||t.exec(a)||a.indexOf("compatible")<0&&u.exec(a)||[];return{browser:b[1]||"",version:b[2]||"0"}},sub:function(){function a(b,c){return new a.fn.init(b,c)}e.extend(!0,a,this),a.superclass=this,a.fn=a.prototype=this(),a.fn.constructor=a,a.sub=this.sub,a.fn.init=function(d,f){f&&f instanceof e&&!(f instanceof a)&&(f=a(f));return e.fn.init.call(this,d,f,b)},a.fn.init.prototype=a.fn;var b=a(c);return a},browser:{}}),e.each("Boolean Number String Function Array Date RegExp Object".split(" "),function(a,b){I["[object "+b+"]"]=b.toLowerCase()}),z=e.uaMatch(y),z.browser&&(e.browser[z.browser]=!0,e.browser.version=z.version),e.browser.webkit&&(e.browser.safari=!0),j.test(" ")&&(k=/^[\s\xA0]+/,l=/[\s\xA0]+$/),h=e(c),c.addEventListener?B=function(){c.removeEventListener("DOMContentLoaded",B,!1),e.ready()}:c.attachEvent&&(B=function(){c.readyState==="complete"&&(c.detachEvent("onreadystatechange",B),e.ready())});return e}(),g={};f.Callbacks=function(a){a=a?g[a]||h(a):{};var c=[],d=[],e,i,j,k,l,m=function(b){var d,e,g,h,i;for(d=0,e=b.length;d<e;d++)g=b[d],h=f.type(g),h==="array"?m(g):h==="function"&&(!a.unique||!o.has(g))&&c.push(g)},n=function(b,f){f=f||[],e=!a.memory||[b,f],i=!0,l=j||0,j=0,k=c.length;for(;c&&l<k;l++)if(c[l].apply(b,f)===!1&&a.stopOnFalse){e=!0;break}i=!1,c&&(a.once?e===!0?o.disable():c=[]:d&&d.length&&(e=d.shift(),o.fireWith(e[0],e[1])))},o={add:function(){if(c){var a=c.length;m(arguments),i?k=c.length:e&&e!==!0&&(j=a,n(e[0],e[1]))}return this},remove:function(){if(c){var b=arguments,d=0,e=b.length;for(;d<e;d++)for(var f=0;f<c.length;f++)if(b[d]===c[f]){i&&f<=k&&(k--,f<=l&&l--),c.splice(f--,1);if(a.unique)break}}return this},has:function(a){if(c){var b=0,d=c.length;for(;b<d;b++)if(a===c[b])return!0}return!1},empty:function(){c=[];return this},disable:function(){c=d=e=b;return this},disabled:function(){return!c},lock:function(){d=b,(!e||e===!0)&&o.disable();return this},locked:function(){return!d},fireWith:function(b,c){d&&(i?a.once||d.push([b,c]):(!a.once||!e)&&n(b,c));return this},fire:function(){o.fireWith(this,arguments);return this},fired:function(){return!!e}};return o};var i=[].slice;f.extend({Deferred:function(a){var b=f.Callbacks("once memory"),c=f.Callbacks("once memory"),d=f.Callbacks("memory"),e="pending",g={resolve:b,reject:c,notify:d},h={done:b.add,fail:c.add,progress:d.add,state:function(){return e},isResolved:b.fired,isRejected:c.fired,then:function(a,b,c){i.done(a).fail(b).progress(c);return this},always:function(){i.done.apply(i,arguments).fail.apply(i,arguments);return this},pipe:function(a,b,c){return f.Deferred(function(d){f.each({done:[a,"resolve"],fail:[b,"reject"],progress:[c,"notify"]},function(a,b){var c=b[0],e=b[1],g;f.isFunction(c)?i[a](function(){g=c.apply(this,arguments),g&&f.isFunction(g.promise)?g.promise().then(d.resolve,d.reject,d.notify):d[e+"With"](this===i?d:this,[g])}):i[a](d[e])})}).promise()},promise:function(a){if(a==null)a=h;else for(var b in h)a[b]=h[b];return a}},i=h.promise({}),j;for(j in g)i[j]=g[j].fire,i[j+"With"]=g[j].fireWith;i.done(function(){e="resolved"},c.disable,d.lock).fail(function(){e="rejected"},b.disable,d.lock),a&&a.call(i,i);return i},when:function(a){function m(a){return function(b){e[a]=arguments.length>1?i.call(arguments,0):b,j.notifyWith(k,e)}}function l(a){return function(c){b[a]=arguments.length>1?i.call(arguments,0):c,--g||j.resolveWith(j,b)}}var b=i.call(arguments,0),c=0,d=b.length,e=Array(d),g=d,h=d,j=d<=1&&a&&f.isFunction(a.promise)?a:f.Deferred(),k=j.promise();if(d>1){for(;c<d;c++)b[c]&&b[c].promise&&f.isFunction(b[c].promise)?b[c].promise().then(l(c),j.reject,m(c)):--g;g||j.resolveWith(j,b)}else j!==a&&j.resolveWith(j,d?[a]:[]);return k}}),f.support=function(){var b,d,e,g,h,i,j,k,l,m,n,o,p,q=c.createElement("div"),r=c.documentElement;q.setAttribute("className","t"),q.innerHTML="   <link/><table></table><a href='/a' style='top:1px;float:left;opacity:.55;'>a</a><input type='checkbox'/>",d=q.getElementsByTagName("*"),e=q.getElementsByTagName("a")[0];if(!d||!d.length||!e)return{};g=c.createElement("select"),h=g.appendChild(c.createElement("option")),i=q.getElementsByTagName("input")[0],b={leadingWhitespace:q.firstChild.nodeType===3,tbody:!q.getElementsByTagName("tbody").length,htmlSerialize:!!q.getElementsByTagName("link").length,style:/top/.test(e.getAttribute("style")),hrefNormalized:e.getAttribute("href")==="/a",opacity:/^0.55/.test(e.style.opacity),cssFloat:!!e.style.cssFloat,checkOn:i.value==="on",optSelected:h.selected,getSetAttribute:q.className!=="t",enctype:!!c.createElement("form").enctype,html5Clone:c.createElement("nav").cloneNode(!0).outerHTML!=="<:nav></:nav>",submitBubbles:!0,changeBubbles:!0,focusinBubbles:!1,deleteExpando:!0,noCloneEvent:!0,inlineBlockNeedsLayout:!1,shrinkWrapBlocks:!1,reliableMarginRight:!0},i.checked=!0,b.noCloneChecked=i.cloneNode(!0).checked,g.disabled=!0,b.optDisabled=!h.disabled;try{delete q.test}catch(s){b.deleteExpando=!1}!q.addEventListener&&q.attachEvent&&q.fireEvent&&(q.attachEvent("onclick",function(){b.noCloneEvent=!1}),q.cloneNode(!0).fireEvent("onclick")),i=c.createElement("input"),i.value="t",i.setAttribute("type","radio"),b.radioValue=i.value==="t",i.setAttribute("checked","checked"),q.appendChild(i),k=c.createDocumentFragment(),k.appendChild(q.lastChild),b.checkClone=k.cloneNode(!0).cloneNode(!0).lastChild.checked,b.appendChecked=i.checked,k.removeChild(i),k.appendChild(q),q.innerHTML="",a.getComputedStyle&&(j=c.createElement("div"),j.style.width="0",j.style.marginRight="0",q.style.width="2px",q.appendChild(j),b.reliableMarginRight=(parseInt((a.getComputedStyle(j,null)||{marginRight:0}).marginRight,10)||0)===0);if(q.attachEvent)for(o in{submit:1,change:1,focusin:1})n="on"+o,p=n in q,p||(q.setAttribute(n,"return;"),p=typeof q[n]=="function"),b[o+"Bubbles"]=p;k.removeChild(q),k=g=h=j=q=i=null,f(function(){var a,d,e,g,h,i,j,k,m,n,o,r=c.getElementsByTagName("body")[0];!r||(j=1,k="position:absolute;top:0;left:0;width:1px;height:1px;margin:0;",m="visibility:hidden;border:0;",n="style='"+k+"border:5px solid #000;padding:0;'",o="<div "+n+"><div></div></div>"+"<table "+n+" cellpadding='0' cellspacing='0'>"+"<tr><td></td></tr></table>",a=c.createElement("div"),a.style.cssText=m+"width:0;height:0;position:static;top:0;margin-top:"+j+"px",r.insertBefore(a,r.firstChild),q=c.createElement("div"),a.appendChild(q),q.innerHTML="<table><tr><td style='padding:0;border:0;display:none'></td><td>t</td></tr></table>",l=q.getElementsByTagName("td"),p=l[0].offsetHeight===0,l[0].style.display="",l[1].style.display="none",b.reliableHiddenOffsets=p&&l[0].offsetHeight===0,q.innerHTML="",q.style.width=q.style.paddingLeft="1px",f.boxModel=b.boxModel=q.offsetWidth===2,typeof q.style.zoom!="undefined"&&(q.style.display="inline",q.style.zoom=1,b.inlineBlockNeedsLayout=q.offsetWidth===2,q.style.display="",q.innerHTML="<div style='width:4px;'></div>",b.shrinkWrapBlocks=q.offsetWidth!==2),q.style.cssText=k+m,q.innerHTML=o,d=q.firstChild,e=d.firstChild,h=d.nextSibling.firstChild.firstChild,i={doesNotAddBorder:e.offsetTop!==5,doesAddBorderForTableAndCells:h.offsetTop===5},e.style.position="fixed",e.style.top="20px",i.fixedPosition=e.offsetTop===20||e.offsetTop===15,e.style.position=e.style.top="",d.style.overflow="hidden",d.style.position="relative",i.subtractsBorderForOverflowNotVisible=e.offsetTop===-5,i.doesNotIncludeMarginInBodyOffset=r.offsetTop!==j,r.removeChild(a),q=a=null,f.extend(b,i))});return b}();var j=/^(?:\{.*\}|\[.*\])$/,k=/([A-Z])/g;f.extend({cache:{},uuid:0,expando:"jQuery"+(f.fn.jquery+Math.random()).replace(/\D/g,""),noData:{embed:!0,object:"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000",applet:!0},hasData:function(a){a=a.nodeType?f.cache[a[f.expando]]:a[f.expando];return!!a&&!m(a)},data:function(a,c,d,e){if(!!f.acceptData(a)){var g,h,i,j=f.expando,k=typeof c=="string",l=a.nodeType,m=l?f.cache:a,n=l?a[j]:a[j]&&j,o=c==="events";if((!n||!m[n]||!o&&!e&&!m[n].data)&&k&&d===b)return;n||(l?a[j]=n=++f.uuid:n=j),m[n]||(m[n]={},l||(m[n].toJSON=f.noop));if(typeof c=="object"||typeof c=="function")e?m[n]=f.extend(m[n],c):m[n].data=f.extend(m[n].data,c);g=h=m[n],e||(h.data||(h.data={}),h=h.data),d!==b&&(h[f.camelCase(c)]=d);if(o&&!h[c])return g.events;k?(i=h[c],i==null&&(i=h[f.camelCase(c)])):i=h;return i}},removeData:function(a,b,c){if(!!f.acceptData(a)){var d,e,g,h=f.expando,i=a.nodeType,j=i?f.cache:a,k=i?a[h]:h;if(!j[k])return;if(b){d=c?j[k]:j[k].data;if(d){f.isArray(b)||(b in d?b=[b]:(b=f.camelCase(b),b in d?b=[b]:b=b.split(" ")));for(e=0,g=b.length;e<g;e++)delete d[b[e]];if(!(c?m:f.isEmptyObject)(d))return}}if(!c){delete j[k].data;if(!m(j[k]))return}f.support.deleteExpando||!j.setInterval?delete j[k]:j[k]=null,i&&(f.support.deleteExpando?delete a[h]:a.removeAttribute?a.removeAttribute(h):a[h]=null)}},_data:function(a,b,c){return f.data(a,b,c,!0)},acceptData:function(a){if(a.nodeName){var b=f.noData[a.nodeName.toLowerCase()];if(b)return b!==!0&&a.getAttribute("classid")===b}return!0}}),f.fn.extend({data:function(a,c){var d,e,g,h=null;if(typeof a=="undefined"){if(this.length){h=f.data(this[0]);if(this[0].nodeType===1&&!f._data(this[0],"parsedAttrs")){e=this[0].attributes;for(var i=0,j=e.length;i<j;i++)g=e[i].name,g.indexOf("data-")===0&&(g=f.camelCase(g.substring(5)),l(this[0],g,h[g]));f._data(this[0],"parsedAttrs",!0)}}return h}if(typeof a=="object")return this.each(function(){f.data(this,a)});d=a.split("."),d[1]=d[1]?"."+d[1]:"";if(c===b){h=this.triggerHandler("getData"+d[1]+"!",[d[0]]),h===b&&this.length&&(h=f.data(this[0],a),h=l(this[0],a,h));return h===b&&d[1]?this.data(d[0]):h}return this.each(function(){var b=f(this),e=[d[0],c];b.triggerHandler("setData"+d[1]+"!",e),f.data(this,a,c),b.triggerHandler("changeData"+d[1]+"!",e)})},removeData:function(a){return this.each(function(){f.removeData(this,a)})}}),f.extend({_mark:function(a,b){a&&(b=(b||"fx")+"mark",f._data(a,b,(f._data(a,b)||0)+1))},_unmark:function(a,b,c){a!==!0&&(c=b,b=a,a=!1);if(b){c=c||"fx";var d=c+"mark",e=a?0:(f._data(b,d)||1)-1;e?f._data(b,d,e):(f.removeData(b,d,!0),n(b,c,"mark"))}},queue:function(a,b,c){var d;if(a){b=(b||"fx")+"queue",d=f._data(a,b),c&&(!d||f.isArray(c)?d=f._data(a,b,f.makeArray(c)):d.push(c));return d||[]}},dequeue:function(a,b){b=b||"fx";var c=f.queue(a,b),d=c.shift(),e={};d==="inprogress"&&(d=c.shift()),d&&(b==="fx"&&c.unshift("inprogress"),f._data(a,b+".run",e),d.call(a,function(){f.dequeue(a,b)},e)),c.length||(f.removeData(a,b+"queue "+b+".run",!0),n(a,b,"queue"))}}),f.fn.extend({queue:function(a,c){typeof a!="string"&&(c=a,a="fx");if(c===b)return f.queue(this[0],a);return this.each(function(){var b=f.queue(this,a,c);a==="fx"&&b[0]!=="inprogress"&&f.dequeue(this,a)})},dequeue:function(a){return this.each(function(){f.dequeue(this,a)})},delay:function(a,b){a=f.fx?f.fx.speeds[a]||a:a,b=b||"fx";return this.queue(b,function(b,c){var d=setTimeout(b,a);c.stop=function(){clearTimeout(d)}})},clearQueue:function(a){return this.queue(a||"fx",[])},promise:function(a,c){function m(){--h||d.resolveWith(e,[e])}typeof a!="string"&&(c=a,a=b),a=a||"fx";var d=f.Deferred(),e=this,g=e.length,h=1,i=a+"defer",j=a+"queue",k=a+"mark",l;while(g--)if(l=f.data(e[g],i,b,!0)||(f.data(e[g],j,b,!0)||f.data(e[g],k,b,!0))&&f.data(e[g],i,f.Callbacks("once memory"),!0))h++,l.add(m);m();return d.promise()}});var o=/[\n\t\r]/g,p=/\s+/,q=/\r/g,r=/^(?:button|input)$/i,s=/^(?:button|input|object|select|textarea)$/i,t=/^a(?:rea)?$/i,u=/^(?:autofocus|autoplay|async|checked|controls|defer|disabled|hidden|loop|multiple|open|readonly|required|scoped|selected)$/i,v=f.support.getSetAttribute,w,x,y;f.fn.extend({attr:function(a,b){return f.access(this,a,b,!0,f.attr)},removeAttr:function(a){return this.each(function(){f.removeAttr(this,a)})},prop:function(a,b){return f.access(this,a,b,!0,f.prop)},removeProp:function(a){a=f.propFix[a]||a;return this.each(function(){try{this[a]=b,delete this[a]}catch(c){}})},addClass:function(a){var b,c,d,e,g,h,i;if(f.isFunction(a))return this.each(function(b){f(this).addClass(a.call(this,b,this.className))});if(a&&typeof a=="string"){b=a.split(p);for(c=0,d=this.length;c<d;c++){e=this[c];if(e.nodeType===1)if(!e.className&&b.length===1)e.className=a;else{g=" "+e.className+" ";for(h=0,i=b.length;h<i;h++)~g.indexOf(" "+b[h]+" ")||(g+=b[h]+" ");e.className=f.trim(g)}}}return this},removeClass:function(a){var c,d,e,g,h,i,j;if(f.isFunction(a))return this.each(function(b){f(this).removeClass(a.call(this,b,this.className))});if(a&&typeof a=="string"||a===b){c=(a||"").split(p);for(d=0,e=this.length;d<e;d++){g=this[d];if(g.nodeType===1&&g.className)if(a){h=(" "+g.className+" ").replace(o," ");for(i=0,j=c.length;i<j;i++)h=h.replace(" "+c[i]+" "," ");g.className=f.trim(h)}else g.className=""}}return this},toggleClass:function(a,b){var c=typeof a,d=typeof b=="boolean";if(f.isFunction(a))return this.each(function(c){f(this).toggleClass(a.call(this,c,this.className,b),b)});return this.each(function(){if(c==="string"){var e,g=0,h=f(this),i=b,j=a.split(p);while(e=j[g++])i=d?i:!h.hasClass(e),h[i?"addClass":"removeClass"](e)}else if(c==="undefined"||c==="boolean")this.className&&f._data(this,"__className__",this.className),this.className=this.className||a===!1?"":f._data(this,"__className__")||""})},hasClass:function(a){var b=" "+a+" ",c=0,d=this.length;for(;c<d;c++)if(this[c].nodeType===1&&(" "+this[c].className+" ").replace(o," ").indexOf(b)>-1)return!0;return!1},val:function(a){var c,d,e,g=this[0];{if(!!arguments.length){e=f.isFunction(a);return this.each(function(d){var g=f(this),h;if(this.nodeType===1){e?h=a.call(this,d,g.val()):h=a,h==null?h="":typeof h=="number"?h+="":f.isArray(h)&&(h=f.map(h,function(a){return a==null?"":a+""})),c=f.valHooks[this.nodeName.toLowerCase()]||f.valHooks[this.type];if(!c||!("set"in c)||c.set(this,h,"value")===b)this.value=h}})}if(g){c=f.valHooks[g.nodeName.toLowerCase()]||f.valHooks[g.type];if(c&&"get"in c&&(d=c.get(g,"value"))!==b)return d;d=g.value;return typeof d=="string"?d.replace(q,""):d==null?"":d}}}}),f.extend({valHooks:{option:{get:function(a){var b=a.attributes.value;return!b||b.specified?a.value:a.text}},select:{get:function(a){var b,c,d,e,g=a.selectedIndex,h=[],i=a.options,j=a.type==="select-one";if(g<0)return null;c=j?g:0,d=j?g+1:i.length;for(;c<d;c++){e=i[c];if(e.selected&&(f.support.optDisabled?!e.disabled:e.getAttribute("disabled")===null)&&(!e.parentNode.disabled||!f.nodeName(e.parentNode,"optgroup"))){b=f(e).val();if(j)return b;h.push(b)}}if(j&&!h.length&&i.length)return f(i[g]).val();return h},set:function(a,b){var c=f.makeArray(b);f(a).find("option").each(function(){this.selected=f.inArray(f(this).val(),c)>=0}),c.length||(a.selectedIndex=-1);return c}}},attrFn:{val:!0,css:!0,html:!0,text:!0,data:!0,width:!0,height:!0,offset:!0},attr:function(a,c,d,e){var g,h,i,j=a.nodeType;if(!!a&&j!==3&&j!==8&&j!==2){if(e&&c in f.attrFn)return f(a)[c](d);if(typeof a.getAttribute=="undefined")return f.prop(a,c,d);i=j!==1||!f.isXMLDoc(a),i&&(c=c.toLowerCase(),h=f.attrHooks[c]||(u.test(c)?x:w));if(d!==b){if(d===null){f.removeAttr(a,c);return}if(h&&"set"in h&&i&&(g=h.set(a,d,c))!==b)return g;a.setAttribute(c,""+d);return d}if(h&&"get"in h&&i&&(g=h.get(a,c))!==null)return g;g=a.getAttribute(c);return g===null?b:g}},removeAttr:function(a,b){var c,d,e,g,h=0;if(b&&a.nodeType===1){d=b.toLowerCase().split(p),g=d.length;for(;h<g;h++)e=d[h],e&&(c=f.propFix[e]||e,f.attr(a,e,""),a.removeAttribute(v?e:c),u.test(e)&&c in a&&(a[c]=!1))}},attrHooks:{type:{set:function(a,b){if(r.test(a.nodeName)&&a.parentNode)f.error("type property can't be changed");else if(!f.support.radioValue&&b==="radio"&&f.nodeName(a,"input")){var c=a.value;a.setAttribute("type",b),c&&(a.value=c);return b}}},value:{get:function(a,b){if(w&&f.nodeName(a,"button"))return w.get(a,b);return b in a?a.value:null},set:function(a,b,c){if(w&&f.nodeName(a,"button"))return w.set(a,b,c);a.value=b}}},propFix:{tabindex:"tabIndex",readonly:"readOnly","for":"htmlFor","class":"className",maxlength:"maxLength",cellspacing:"cellSpacing",cellpadding:"cellPadding",rowspan:"rowSpan",colspan:"colSpan",usemap:"useMap",frameborder:"frameBorder",contenteditable:"contentEditable"},prop:function(a,c,d){var e,g,h,i=a.nodeType;if(!!a&&i!==3&&i!==8&&i!==2){h=i!==1||!f.isXMLDoc(a),h&&(c=f.propFix[c]||c,g=f.propHooks[c]);return d!==b?g&&"set"in g&&(e=g.set(a,d,c))!==b?e:a[c]=d:g&&"get"in g&&(e=g.get(a,c))!==null?e:a[c]}},propHooks:{tabIndex:{get:function(a){var c=a.getAttributeNode("tabindex");return c&&c.specified?parseInt(c.value,10):s.test(a.nodeName)||t.test(a.nodeName)&&a.href?0:b}}}}),f.attrHooks.tabindex=f.propHooks.tabIndex,x={get:function(a,c){var d,e=f.prop(a,c);return e===!0||typeof e!="boolean"&&(d=a.getAttributeNode(c))&&d.nodeValue!==!1?c.toLowerCase():b},set:function(a,b,c){var d;b===!1?f.removeAttr(a,c):(d=f.propFix[c]||c,d in a&&(a[d]=!0),a.setAttribute(c,c.toLowerCase()));return c}},v||(y={name:!0,id:!0},w=f.valHooks.button={get:function(a,c){var d;d=a.getAttributeNode(c);return d&&(y[c]?d.nodeValue!=="":d.specified)?d.nodeValue:b},set:function(a,b,d){var e=a.getAttributeNode(d);e||(e=c.createAttribute(d),a.setAttributeNode(e));return e.nodeValue=b+""}},f.attrHooks.tabindex.set=w.set,f.each(["width","height"],function(a,b){f.attrHooks[b]=f.extend(f.attrHooks[b],{set:function(a,c){if(c===""){a.setAttribute(b,"auto");return c}}})}),f.attrHooks.contenteditable={get:w.get,set:function(a,b,c){b===""&&(b="false"),w.set(a,b,c)}}),f.support.hrefNormalized||f.each(["href","src","width","height"],function(a,c){f.attrHooks[c]=f.extend(f.attrHooks[c],{get:function(a){var d=a.getAttribute(c,2);return d===null?b:d}})}),f.support.style||(f.attrHooks.style={get:function(a){return a.style.cssText.toLowerCase()||b},set:function(a,b){return a.style.cssText=""+b}}),f.support.optSelected||(f.propHooks.selected=f.extend(f.propHooks.selected,{get:function(a){var b=a.parentNode;b&&(b.selectedIndex,b.parentNode&&b.parentNode.selectedIndex);return null}})),f.support.enctype||(f.propFix.enctype="encoding"),f.support.checkOn||f.each(["radio","checkbox"],function(){f.valHooks[this]={get:function(a){return a.getAttribute("value")===null?"on":a.value}}}),f.each(["radio","checkbox"],function(){f.valHooks[this]=f.extend(f.valHooks[this],{set:function(a,b){if(f.isArray(b))return a.checked=f.inArray(f(a).val(),b)>=0}})});var z=/^(?:textarea|input|select)$/i,A=/^([^\.]*)?(?:\.(.+))?$/,B=/\bhover(\.\S+)?\b/,C=/^key/,D=/^(?:mouse|contextmenu)|click/,E=/^(?:focusinfocus|focusoutblur)$/,F=/^(\w*)(?:#([\w\-]+))?(?:\.([\w\-]+))?$/,G=function(a){var b=F.exec(a);b&&(b[1]=(b[1]||"").toLowerCase(),b[3]=b[3]&&new RegExp("(?:^|\\s)"+b[3]+"(?:\\s|$)"));return b},H=function(a,b){var c=a.attributes||{};return(!b[1]||a.nodeName.toLowerCase()===b[1])&&(!b[2]||(c.id||{}).value===b[2])&&(!b[3]||b[3].test((c["class"]||{}).value))},I=function(a){return f.event.special.hover?a:a.replace(B,"mouseenter$1 mouseleave$1")};
+f.event={add:function(a,c,d,e,g){var h,i,j,k,l,m,n,o,p,q,r,s;if(!(a.nodeType===3||a.nodeType===8||!c||!d||!(h=f._data(a)))){d.handler&&(p=d,d=p.handler),d.guid||(d.guid=f.guid++),j=h.events,j||(h.events=j={}),i=h.handle,i||(h.handle=i=function(a){return typeof f!="undefined"&&(!a||f.event.triggered!==a.type)?f.event.dispatch.apply(i.elem,arguments):b},i.elem=a),c=f.trim(I(c)).split(" ");for(k=0;k<c.length;k++){l=A.exec(c[k])||[],m=l[1],n=(l[2]||"").split(".").sort(),s=f.event.special[m]||{},m=(g?s.delegateType:s.bindType)||m,s=f.event.special[m]||{},o=f.extend({type:m,origType:l[1],data:e,handler:d,guid:d.guid,selector:g,quick:G(g),namespace:n.join(".")},p),r=j[m];if(!r){r=j[m]=[],r.delegateCount=0;if(!s.setup||s.setup.call(a,e,n,i)===!1)a.addEventListener?a.addEventListener(m,i,!1):a.attachEvent&&a.attachEvent("on"+m,i)}s.add&&(s.add.call(a,o),o.handler.guid||(o.handler.guid=d.guid)),g?r.splice(r.delegateCount++,0,o):r.push(o),f.event.global[m]=!0}a=null}},global:{},remove:function(a,b,c,d,e){var g=f.hasData(a)&&f._data(a),h,i,j,k,l,m,n,o,p,q,r,s;if(!!g&&!!(o=g.events)){b=f.trim(I(b||"")).split(" ");for(h=0;h<b.length;h++){i=A.exec(b[h])||[],j=k=i[1],l=i[2];if(!j){for(j in o)f.event.remove(a,j+b[h],c,d,!0);continue}p=f.event.special[j]||{},j=(d?p.delegateType:p.bindType)||j,r=o[j]||[],m=r.length,l=l?new RegExp("(^|\\.)"+l.split(".").sort().join("\\.(?:.*\\.)?")+"(\\.|$)"):null;for(n=0;n<r.length;n++)s=r[n],(e||k===s.origType)&&(!c||c.guid===s.guid)&&(!l||l.test(s.namespace))&&(!d||d===s.selector||d==="**"&&s.selector)&&(r.splice(n--,1),s.selector&&r.delegateCount--,p.remove&&p.remove.call(a,s));r.length===0&&m!==r.length&&((!p.teardown||p.teardown.call(a,l)===!1)&&f.removeEvent(a,j,g.handle),delete o[j])}f.isEmptyObject(o)&&(q=g.handle,q&&(q.elem=null),f.removeData(a,["events","handle"],!0))}},customEvent:{getData:!0,setData:!0,changeData:!0},trigger:function(c,d,e,g){if(!e||e.nodeType!==3&&e.nodeType!==8){var h=c.type||c,i=[],j,k,l,m,n,o,p,q,r,s;if(E.test(h+f.event.triggered))return;h.indexOf("!")>=0&&(h=h.slice(0,-1),k=!0),h.indexOf(".")>=0&&(i=h.split("."),h=i.shift(),i.sort());if((!e||f.event.customEvent[h])&&!f.event.global[h])return;c=typeof c=="object"?c[f.expando]?c:new f.Event(h,c):new f.Event(h),c.type=h,c.isTrigger=!0,c.exclusive=k,c.namespace=i.join("."),c.namespace_re=c.namespace?new RegExp("(^|\\.)"+i.join("\\.(?:.*\\.)?")+"(\\.|$)"):null,o=h.indexOf(":")<0?"on"+h:"";if(!e){j=f.cache;for(l in j)j[l].events&&j[l].events[h]&&f.event.trigger(c,d,j[l].handle.elem,!0);return}c.result=b,c.target||(c.target=e),d=d!=null?f.makeArray(d):[],d.unshift(c),p=f.event.special[h]||{};if(p.trigger&&p.trigger.apply(e,d)===!1)return;r=[[e,p.bindType||h]];if(!g&&!p.noBubble&&!f.isWindow(e)){s=p.delegateType||h,m=E.test(s+h)?e:e.parentNode,n=null;for(;m;m=m.parentNode)r.push([m,s]),n=m;n&&n===e.ownerDocument&&r.push([n.defaultView||n.parentWindow||a,s])}for(l=0;l<r.length&&!c.isPropagationStopped();l++)m=r[l][0],c.type=r[l][1],q=(f._data(m,"events")||{})[c.type]&&f._data(m,"handle"),q&&q.apply(m,d),q=o&&m[o],q&&f.acceptData(m)&&q.apply(m,d)===!1&&c.preventDefault();c.type=h,!g&&!c.isDefaultPrevented()&&(!p._default||p._default.apply(e.ownerDocument,d)===!1)&&(h!=="click"||!f.nodeName(e,"a"))&&f.acceptData(e)&&o&&e[h]&&(h!=="focus"&&h!=="blur"||c.target.offsetWidth!==0)&&!f.isWindow(e)&&(n=e[o],n&&(e[o]=null),f.event.triggered=h,e[h](),f.event.triggered=b,n&&(e[o]=n));return c.result}},dispatch:function(c){c=f.event.fix(c||a.event);var d=(f._data(this,"events")||{})[c.type]||[],e=d.delegateCount,g=[].slice.call(arguments,0),h=!c.exclusive&&!c.namespace,i=[],j,k,l,m,n,o,p,q,r,s,t;g[0]=c,c.delegateTarget=this;if(e&&!c.target.disabled&&(!c.button||c.type!=="click")){m=f(this),m.context=this.ownerDocument||this;for(l=c.target;l!=this;l=l.parentNode||this){o={},q=[],m[0]=l;for(j=0;j<e;j++)r=d[j],s=r.selector,o[s]===b&&(o[s]=r.quick?H(l,r.quick):m.is(s)),o[s]&&q.push(r);q.length&&i.push({elem:l,matches:q})}}d.length>e&&i.push({elem:this,matches:d.slice(e)});for(j=0;j<i.length&&!c.isPropagationStopped();j++){p=i[j],c.currentTarget=p.elem;for(k=0;k<p.matches.length&&!c.isImmediatePropagationStopped();k++){r=p.matches[k];if(h||!c.namespace&&!r.namespace||c.namespace_re&&c.namespace_re.test(r.namespace))c.data=r.data,c.handleObj=r,n=((f.event.special[r.origType]||{}).handle||r.handler).apply(p.elem,g),n!==b&&(c.result=n,n===!1&&(c.preventDefault(),c.stopPropagation()))}}return c.result},props:"attrChange attrName relatedNode srcElement altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "),fixHooks:{},keyHooks:{props:"char charCode key keyCode".split(" "),filter:function(a,b){a.which==null&&(a.which=b.charCode!=null?b.charCode:b.keyCode);return a}},mouseHooks:{props:"button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement".split(" "),filter:function(a,d){var e,f,g,h=d.button,i=d.fromElement;a.pageX==null&&d.clientX!=null&&(e=a.target.ownerDocument||c,f=e.documentElement,g=e.body,a.pageX=d.clientX+(f&&f.scrollLeft||g&&g.scrollLeft||0)-(f&&f.clientLeft||g&&g.clientLeft||0),a.pageY=d.clientY+(f&&f.scrollTop||g&&g.scrollTop||0)-(f&&f.clientTop||g&&g.clientTop||0)),!a.relatedTarget&&i&&(a.relatedTarget=i===a.target?d.toElement:i),!a.which&&h!==b&&(a.which=h&1?1:h&2?3:h&4?2:0);return a}},fix:function(a){if(a[f.expando])return a;var d,e,g=a,h=f.event.fixHooks[a.type]||{},i=h.props?this.props.concat(h.props):this.props;a=f.Event(g);for(d=i.length;d;)e=i[--d],a[e]=g[e];a.target||(a.target=g.srcElement||c),a.target.nodeType===3&&(a.target=a.target.parentNode),a.metaKey===b&&(a.metaKey=a.ctrlKey);return h.filter?h.filter(a,g):a},special:{ready:{setup:f.bindReady},load:{noBubble:!0},focus:{delegateType:"focusin"},blur:{delegateType:"focusout"},beforeunload:{setup:function(a,b,c){f.isWindow(this)&&(this.onbeforeunload=c)},teardown:function(a,b){this.onbeforeunload===b&&(this.onbeforeunload=null)}}},simulate:function(a,b,c,d){var e=f.extend(new f.Event,c,{type:a,isSimulated:!0,originalEvent:{}});d?f.event.trigger(e,null,b):f.event.dispatch.call(b,e),e.isDefaultPrevented()&&c.preventDefault()}},f.event.handle=f.event.dispatch,f.removeEvent=c.removeEventListener?function(a,b,c){a.removeEventListener&&a.removeEventListener(b,c,!1)}:function(a,b,c){a.detachEvent&&a.detachEvent("on"+b,c)},f.Event=function(a,b){if(!(this instanceof f.Event))return new f.Event(a,b);a&&a.type?(this.originalEvent=a,this.type=a.type,this.isDefaultPrevented=a.defaultPrevented||a.returnValue===!1||a.getPreventDefault&&a.getPreventDefault()?K:J):this.type=a,b&&f.extend(this,b),this.timeStamp=a&&a.timeStamp||f.now(),this[f.expando]=!0},f.Event.prototype={preventDefault:function(){this.isDefaultPrevented=K;var a=this.originalEvent;!a||(a.preventDefault?a.preventDefault():a.returnValue=!1)},stopPropagation:function(){this.isPropagationStopped=K;var a=this.originalEvent;!a||(a.stopPropagation&&a.stopPropagation(),a.cancelBubble=!0)},stopImmediatePropagation:function(){this.isImmediatePropagationStopped=K,this.stopPropagation()},isDefaultPrevented:J,isPropagationStopped:J,isImmediatePropagationStopped:J},f.each({mouseenter:"mouseover",mouseleave:"mouseout"},function(a,b){f.event.special[a]={delegateType:b,bindType:b,handle:function(a){var c=this,d=a.relatedTarget,e=a.handleObj,g=e.selector,h;if(!d||d!==c&&!f.contains(c,d))a.type=e.origType,h=e.handler.apply(this,arguments),a.type=b;return h}}}),f.support.submitBubbles||(f.event.special.submit={setup:function(){if(f.nodeName(this,"form"))return!1;f.event.add(this,"click._submit keypress._submit",function(a){var c=a.target,d=f.nodeName(c,"input")||f.nodeName(c,"button")?c.form:b;d&&!d._submit_attached&&(f.event.add(d,"submit._submit",function(a){this.parentNode&&!a.isTrigger&&f.event.simulate("submit",this.parentNode,a,!0)}),d._submit_attached=!0)})},teardown:function(){if(f.nodeName(this,"form"))return!1;f.event.remove(this,"._submit")}}),f.support.changeBubbles||(f.event.special.change={setup:function(){if(z.test(this.nodeName)){if(this.type==="checkbox"||this.type==="radio")f.event.add(this,"propertychange._change",function(a){a.originalEvent.propertyName==="checked"&&(this._just_changed=!0)}),f.event.add(this,"click._change",function(a){this._just_changed&&!a.isTrigger&&(this._just_changed=!1,f.event.simulate("change",this,a,!0))});return!1}f.event.add(this,"beforeactivate._change",function(a){var b=a.target;z.test(b.nodeName)&&!b._change_attached&&(f.event.add(b,"change._change",function(a){this.parentNode&&!a.isSimulated&&!a.isTrigger&&f.event.simulate("change",this.parentNode,a,!0)}),b._change_attached=!0)})},handle:function(a){var b=a.target;if(this!==b||a.isSimulated||a.isTrigger||b.type!=="radio"&&b.type!=="checkbox")return a.handleObj.handler.apply(this,arguments)},teardown:function(){f.event.remove(this,"._change");return z.test(this.nodeName)}}),f.support.focusinBubbles||f.each({focus:"focusin",blur:"focusout"},function(a,b){var d=0,e=function(a){f.event.simulate(b,a.target,f.event.fix(a),!0)};f.event.special[b]={setup:function(){d++===0&&c.addEventListener(a,e,!0)},teardown:function(){--d===0&&c.removeEventListener(a,e,!0)}}}),f.fn.extend({on:function(a,c,d,e,g){var h,i;if(typeof a=="object"){typeof c!="string"&&(d=c,c=b);for(i in a)this.on(i,c,d,a[i],g);return this}d==null&&e==null?(e=c,d=c=b):e==null&&(typeof c=="string"?(e=d,d=b):(e=d,d=c,c=b));if(e===!1)e=J;else if(!e)return this;g===1&&(h=e,e=function(a){f().off(a);return h.apply(this,arguments)},e.guid=h.guid||(h.guid=f.guid++));return this.each(function(){f.event.add(this,a,e,d,c)})},one:function(a,b,c,d){return this.on.call(this,a,b,c,d,1)},off:function(a,c,d){if(a&&a.preventDefault&&a.handleObj){var e=a.handleObj;f(a.delegateTarget).off(e.namespace?e.type+"."+e.namespace:e.type,e.selector,e.handler);return this}if(typeof a=="object"){for(var g in a)this.off(g,c,a[g]);return this}if(c===!1||typeof c=="function")d=c,c=b;d===!1&&(d=J);return this.each(function(){f.event.remove(this,a,d,c)})},bind:function(a,b,c){return this.on(a,null,b,c)},unbind:function(a,b){return this.off(a,null,b)},live:function(a,b,c){f(this.context).on(a,this.selector,b,c);return this},die:function(a,b){f(this.context).off(a,this.selector||"**",b);return this},delegate:function(a,b,c,d){return this.on(b,a,c,d)},undelegate:function(a,b,c){return arguments.length==1?this.off(a,"**"):this.off(b,a,c)},trigger:function(a,b){return this.each(function(){f.event.trigger(a,b,this)})},triggerHandler:function(a,b){if(this[0])return f.event.trigger(a,b,this[0],!0)},toggle:function(a){var b=arguments,c=a.guid||f.guid++,d=0,e=function(c){var e=(f._data(this,"lastToggle"+a.guid)||0)%d;f._data(this,"lastToggle"+a.guid,e+1),c.preventDefault();return b[e].apply(this,arguments)||!1};e.guid=c;while(d<b.length)b[d++].guid=c;return this.click(e)},hover:function(a,b){return this.mouseenter(a).mouseleave(b||a)}}),f.each("blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error contextmenu".split(" "),function(a,b){f.fn[b]=function(a,c){c==null&&(c=a,a=null);return arguments.length>0?this.on(b,null,a,c):this.trigger(b)},f.attrFn&&(f.attrFn[b]=!0),C.test(b)&&(f.event.fixHooks[b]=f.event.keyHooks),D.test(b)&&(f.event.fixHooks[b]=f.event.mouseHooks)}),function(){function x(a,b,c,e,f,g){for(var h=0,i=e.length;h<i;h++){var j=e[h];if(j){var k=!1;j=j[a];while(j){if(j[d]===c){k=e[j.sizset];break}if(j.nodeType===1){g||(j[d]=c,j.sizset=h);if(typeof b!="string"){if(j===b){k=!0;break}}else if(m.filter(b,[j]).length>0){k=j;break}}j=j[a]}e[h]=k}}}function w(a,b,c,e,f,g){for(var h=0,i=e.length;h<i;h++){var j=e[h];if(j){var k=!1;j=j[a];while(j){if(j[d]===c){k=e[j.sizset];break}j.nodeType===1&&!g&&(j[d]=c,j.sizset=h);if(j.nodeName.toLowerCase()===b){k=j;break}j=j[a]}e[h]=k}}}var a=/((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^\[\]]*\]|['"][^'"]*['"]|[^\[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,d="sizcache"+(Math.random()+"").replace(".",""),e=0,g=Object.prototype.toString,h=!1,i=!0,j=/\\/g,k=/\r\n/g,l=/\W/;[0,0].sort(function(){i=!1;return 0});var m=function(b,d,e,f){e=e||[],d=d||c;var h=d;if(d.nodeType!==1&&d.nodeType!==9)return[];if(!b||typeof b!="string")return e;var i,j,k,l,n,q,r,t,u=!0,v=m.isXML(d),w=[],x=b;do{a.exec(""),i=a.exec(x);if(i){x=i[3],w.push(i[1]);if(i[2]){l=i[3];break}}}while(i);if(w.length>1&&p.exec(b))if(w.length===2&&o.relative[w[0]])j=y(w[0]+w[1],d,f);else{j=o.relative[w[0]]?[d]:m(w.shift(),d);while(w.length)b=w.shift(),o.relative[b]&&(b+=w.shift()),j=y(b,j,f)}else{!f&&w.length>1&&d.nodeType===9&&!v&&o.match.ID.test(w[0])&&!o.match.ID.test(w[w.length-1])&&(n=m.find(w.shift(),d,v),d=n.expr?m.filter(n.expr,n.set)[0]:n.set[0]);if(d){n=f?{expr:w.pop(),set:s(f)}:m.find(w.pop(),w.length===1&&(w[0]==="~"||w[0]==="+")&&d.parentNode?d.parentNode:d,v),j=n.expr?m.filter(n.expr,n.set):n.set,w.length>0?k=s(j):u=!1;while(w.length)q=w.pop(),r=q,o.relative[q]?r=w.pop():q="",r==null&&(r=d),o.relative[q](k,r,v)}else k=w=[]}k||(k=j),k||m.error(q||b);if(g.call(k)==="[object Array]")if(!u)e.push.apply(e,k);else if(d&&d.nodeType===1)for(t=0;k[t]!=null;t++)k[t]&&(k[t]===!0||k[t].nodeType===1&&m.contains(d,k[t]))&&e.push(j[t]);else for(t=0;k[t]!=null;t++)k[t]&&k[t].nodeType===1&&e.push(j[t]);else s(k,e);l&&(m(l,h,e,f),m.uniqueSort(e));return e};m.uniqueSort=function(a){if(u){h=i,a.sort(u);if(h)for(var b=1;b<a.length;b++)a[b]===a[b-1]&&a.splice(b--,1)}return a},m.matches=function(a,b){return m(a,null,null,b)},m.matchesSelector=function(a,b){return m(b,null,null,[a]).length>0},m.find=function(a,b,c){var d,e,f,g,h,i;if(!a)return[];for(e=0,f=o.order.length;e<f;e++){h=o.order[e];if(g=o.leftMatch[h].exec(a)){i=g[1],g.splice(1,1);if(i.substr(i.length-1)!=="\\"){g[1]=(g[1]||"").replace(j,""),d=o.find[h](g,b,c);if(d!=null){a=a.replace(o.match[h],"");break}}}}d||(d=typeof b.getElementsByTagName!="undefined"?b.getElementsByTagName("*"):[]);return{set:d,expr:a}},m.filter=function(a,c,d,e){var f,g,h,i,j,k,l,n,p,q=a,r=[],s=c,t=c&&c[0]&&m.isXML(c[0]);while(a&&c.length){for(h in o.filter)if((f=o.leftMatch[h].exec(a))!=null&&f[2]){k=o.filter[h],l=f[1],g=!1,f.splice(1,1);if(l.substr(l.length-1)==="\\")continue;s===r&&(r=[]);if(o.preFilter[h]){f=o.preFilter[h](f,s,d,r,e,t);if(!f)g=i=!0;else if(f===!0)continue}if(f)for(n=0;(j=s[n])!=null;n++)j&&(i=k(j,f,n,s),p=e^i,d&&i!=null?p?g=!0:s[n]=!1:p&&(r.push(j),g=!0));if(i!==b){d||(s=r),a=a.replace(o.match[h],"");if(!g)return[];break}}if(a===q)if(g==null)m.error(a);else break;q=a}return s},m.error=function(a){throw new Error("Syntax error, unrecognized expression: "+a)};var n=m.getText=function(a){var b,c,d=a.nodeType,e="";if(d){if(d===1||d===9){if(typeof a.textContent=="string")return a.textContent;if(typeof a.innerText=="string")return a.innerText.replace(k,"");for(a=a.firstChild;a;a=a.nextSibling)e+=n(a)}else if(d===3||d===4)return a.nodeValue}else for(b=0;c=a[b];b++)c.nodeType!==8&&(e+=n(c));return e},o=m.selectors={order:["ID","NAME","TAG"],match:{ID:/#((?:[\w\u00c0-\uFFFF\-]|\\.)+)/,CLASS:/\.((?:[\w\u00c0-\uFFFF\-]|\\.)+)/,NAME:/\[name=['"]*((?:[\w\u00c0-\uFFFF\-]|\\.)+)['"]*\]/,ATTR:/\[\s*((?:[\w\u00c0-\uFFFF\-]|\\.)+)\s*(?:(\S?=)\s*(?:(['"])(.*?)\3|(#?(?:[\w\u00c0-\uFFFF\-]|\\.)*)|)|)\s*\]/,TAG:/^((?:[\w\u00c0-\uFFFF\*\-]|\\.)+)/,CHILD:/:(only|nth|last|first)-child(?:\(\s*(even|odd|(?:[+\-]?\d+|(?:[+\-]?\d*)?n\s*(?:[+\-]\s*\d+)?))\s*\))?/,POS:/:(nth|eq|gt|lt|first|last|even|odd)(?:\((\d*)\))?(?=[^\-]|$)/,PSEUDO:/:((?:[\w\u00c0-\uFFFF\-]|\\.)+)(?:\((['"]?)((?:\([^\)]+\)|[^\(\)]*)+)\2\))?/},leftMatch:{},attrMap:{"class":"className","for":"htmlFor"},attrHandle:{href:function(a){return a.getAttribute("href")},type:function(a){return a.getAttribute("type")}},relative:{"+":function(a,b){var c=typeof b=="string",d=c&&!l.test(b),e=c&&!d;d&&(b=b.toLowerCase());for(var f=0,g=a.length,h;f<g;f++)if(h=a[f]){while((h=h.previousSibling)&&h.nodeType!==1);a[f]=e||h&&h.nodeName.toLowerCase()===b?h||!1:h===b}e&&m.filter(b,a,!0)},">":function(a,b){var c,d=typeof b=="string",e=0,f=a.length;if(d&&!l.test(b)){b=b.toLowerCase();for(;e<f;e++){c=a[e];if(c){var g=c.parentNode;a[e]=g.nodeName.toLowerCase()===b?g:!1}}}else{for(;e<f;e++)c=a[e],c&&(a[e]=d?c.parentNode:c.parentNode===b);d&&m.filter(b,a,!0)}},"":function(a,b,c){var d,f=e++,g=x;typeof b=="string"&&!l.test(b)&&(b=b.toLowerCase(),d=b,g=w),g("parentNode",b,f,a,d,c)},"~":function(a,b,c){var d,f=e++,g=x;typeof b=="string"&&!l.test(b)&&(b=b.toLowerCase(),d=b,g=w),g("previousSibling",b,f,a,d,c)}},find:{ID:function(a,b,c){if(typeof b.getElementById!="undefined"&&!c){var d=b.getElementById(a[1]);return d&&d.parentNode?[d]:[]}},NAME:function(a,b){if(typeof b.getElementsByName!="undefined"){var c=[],d=b.getElementsByName(a[1]);for(var e=0,f=d.length;e<f;e++)d[e].getAttribute("name")===a[1]&&c.push(d[e]);return c.length===0?null:c}},TAG:function(a,b){if(typeof b.getElementsByTagName!="undefined")return b.getElementsByTagName(a[1])}},preFilter:{CLASS:function(a,b,c,d,e,f){a=" "+a[1].replace(j,"")+" ";if(f)return a;for(var g=0,h;(h=b[g])!=null;g++)h&&(e^(h.className&&(" "+h.className+" ").replace(/[\t\n\r]/g," ").indexOf(a)>=0)?c||d.push(h):c&&(b[g]=!1));return!1},ID:function(a){return a[1].replace(j,"")},TAG:function(a,b){return a[1].replace(j,"").toLowerCase()},CHILD:function(a){if(a[1]==="nth"){a[2]||m.error(a[0]),a[2]=a[2].replace(/^\+|\s*/g,"");var b=/(-?)(\d*)(?:n([+\-]?\d*))?/.exec(a[2]==="even"&&"2n"||a[2]==="odd"&&"2n+1"||!/\D/.test(a[2])&&"0n+"+a[2]||a[2]);a[2]=b[1]+(b[2]||1)-0,a[3]=b[3]-0}else a[2]&&m.error(a[0]);a[0]=e++;return a},ATTR:function(a,b,c,d,e,f){var g=a[1]=a[1].replace(j,"");!f&&o.attrMap[g]&&(a[1]=o.attrMap[g]),a[4]=(a[4]||a[5]||"").replace(j,""),a[2]==="~="&&(a[4]=" "+a[4]+" ");return a},PSEUDO:function(b,c,d,e,f){if(b[1]==="not")if((a.exec(b[3])||"").length>1||/^\w/.test(b[3]))b[3]=m(b[3],null,null,c);else{var g=m.filter(b[3],c,d,!0^f);d||e.push.apply(e,g);return!1}else if(o.match.POS.test(b[0])||o.match.CHILD.test(b[0]))return!0;return b},POS:function(a){a.unshift(!0);return a}},filters:{enabled:function(a){return a.disabled===!1&&a.type!=="hidden"},disabled:function(a){return a.disabled===!0},checked:function(a){return a.checked===!0},selected:function(a){a.parentNode&&a.parentNode.selectedIndex;return a.selected===!0},parent:function(a){return!!a.firstChild},empty:function(a){return!a.firstChild},has:function(a,b,c){return!!m(c[3],a).length},header:function(a){return/h\d/i.test(a.nodeName)},text:function(a){var b=a.getAttribute("type"),c=a.type;return a.nodeName.toLowerCase()==="input"&&"text"===c&&(b===c||b===null)},radio:function(a){return a.nodeName.toLowerCase()==="input"&&"radio"===a.type},checkbox:function(a){return a.nodeName.toLowerCase()==="input"&&"checkbox"===a.type},file:function(a){return a.nodeName.toLowerCase()==="input"&&"file"===a.type},password:function(a){return a.nodeName.toLowerCase()==="input"&&"password"===a.type},submit:function(a){var b=a.nodeName.toLowerCase();return(b==="input"||b==="button")&&"submit"===a.type},image:function(a){return a.nodeName.toLowerCase()==="input"&&"image"===a.type},reset:function(a){var b=a.nodeName.toLowerCase();return(b==="input"||b==="button")&&"reset"===a.type},button:function(a){var b=a.nodeName.toLowerCase();return b==="input"&&"button"===a.type||b==="button"},input:function(a){return/input|select|textarea|button/i.test(a.nodeName)},focus:function(a){return a===a.ownerDocument.activeElement}},setFilters:{first:function(a,b){return b===0},last:function(a,b,c,d){return b===d.length-1},even:function(a,b){return b%2===0},odd:function(a,b){return b%2===1},lt:function(a,b,c){return b<c[3]-0},gt:function(a,b,c){return b>c[3]-0},nth:function(a,b,c){return c[3]-0===b},eq:function(a,b,c){return c[3]-0===b}},filter:{PSEUDO:function(a,b,c,d){var e=b[1],f=o.filters[e];if(f)return f(a,c,b,d);if(e==="contains")return(a.textContent||a.innerText||n([a])||"").indexOf(b[3])>=0;if(e==="not"){var g=b[3];for(var h=0,i=g.length;h<i;h++)if(g[h]===a)return!1;return!0}m.error(e)},CHILD:function(a,b){var c,e,f,g,h,i,j,k=b[1],l=a;switch(k){case"only":case"first":while(l=l.previousSibling)if(l.nodeType===1)return!1;if(k==="first")return!0;l=a;case"last":while(l=l.nextSibling)if(l.nodeType===1)return!1;return!0;case"nth":c=b[2],e=b[3];if(c===1&&e===0)return!0;f=b[0],g=a.parentNode;if(g&&(g[d]!==f||!a.nodeIndex)){i=0;for(l=g.firstChild;l;l=l.nextSibling)l.nodeType===1&&(l.nodeIndex=++i);g[d]=f}j=a.nodeIndex-e;return c===0?j===0:j%c===0&&j/c>=0}},ID:function(a,b){return a.nodeType===1&&a.getAttribute("id")===b},TAG:function(a,b){return b==="*"&&a.nodeType===1||!!a.nodeName&&a.nodeName.toLowerCase()===b},CLASS:function(a,b){return(" "+(a.className||a.getAttribute("class"))+" ").indexOf(b)>-1},ATTR:function(a,b){var c=b[1],d=m.attr?m.attr(a,c):o.attrHandle[c]?o.attrHandle[c](a):a[c]!=null?a[c]:a.getAttribute(c),e=d+"",f=b[2],g=b[4];return d==null?f==="!=":!f&&m.attr?d!=null:f==="="?e===g:f==="*="?e.indexOf(g)>=0:f==="~="?(" "+e+" ").indexOf(g)>=0:g?f==="!="?e!==g:f==="^="?e.indexOf(g)===0:f==="$="?e.substr(e.length-g.length)===g:f==="|="?e===g||e.substr(0,g.length+1)===g+"-":!1:e&&d!==!1},POS:function(a,b,c,d){var e=b[2],f=o.setFilters[e];if(f)return f(a,c,b,d)}}},p=o.match.POS,q=function(a,b){return"\\"+(b-0+1)};for(var r in o.match)o.match[r]=new RegExp(o.match[r].source+/(?![^\[]*\])(?![^\(]*\))/.source),o.leftMatch[r]=new RegExp(/(^(?:.|\r|\n)*?)/.source+o.match[r].source.replace(/\\(\d+)/g,q));var s=function(a,b){a=Array.prototype.slice.call(a,0);if(b){b.push.apply(b,a);return b}return a};try{Array.prototype.slice.call(c.documentElement.childNodes,0)[0].nodeType}catch(t){s=function(a,b){var c=0,d=b||[];if(g.call(a)==="[object Array]")Array.prototype.push.apply(d,a);else if(typeof a.length=="number")for(var e=a.length;c<e;c++)d.push(a[c]);else for(;a[c];c++)d.push(a[c]);return d}}var u,v;c.documentElement.compareDocumentPosition?u=function(a,b){if(a===b){h=!0;return 0}if(!a.compareDocumentPosition||!b.compareDocumentPosition)return a.compareDocumentPosition?-1:1;return a.compareDocumentPosition(b)&4?-1:1}:(u=function(a,b){if(a===b){h=!0;return 0}if(a.sourceIndex&&b.sourceIndex)return a.sourceIndex-b.sourceIndex;var c,d,e=[],f=[],g=a.parentNode,i=b.parentNode,j=g;if(g===i)return v(a,b);if(!g)return-1;if(!i)return 1;while(j)e.unshift(j),j=j.parentNode;j=i;while(j)f.unshift(j),j=j.parentNode;c=e.length,d=f.length;for(var k=0;k<c&&k<d;k++)if(e[k]!==f[k])return v(e[k],f[k]);return k===c?v(a,f[k],-1):v(e[k],b,1)},v=function(a,b,c){if(a===b)return c;var d=a.nextSibling;while(d){if(d===b)return-1;d=d.nextSibling}return 1}),function(){var a=c.createElement("div"),d="script"+(new Date).getTime(),e=c.documentElement;a.innerHTML="<a name='"+d+"'/>",e.insertBefore(a,e.firstChild),c.getElementById(d)&&(o.find.ID=function(a,c,d){if(typeof c.getElementById!="undefined"&&!d){var e=c.getElementById(a[1]);return e?e.id===a[1]||typeof e.getAttributeNode!="undefined"&&e.getAttributeNode("id").nodeValue===a[1]?[e]:b:[]}},o.filter.ID=function(a,b){var c=typeof a.getAttributeNode!="undefined"&&a.getAttributeNode("id");return a.nodeType===1&&c&&c.nodeValue===b}),e.removeChild(a),e=a=null}(),function(){var a=c.createElement("div");a.appendChild(c.createComment("")),a.getElementsByTagName("*").length>0&&(o.find.TAG=function(a,b){var c=b.getElementsByTagName(a[1]);if(a[1]==="*"){var d=[];for(var e=0;c[e];e++)c[e].nodeType===1&&d.push(c[e]);c=d}return c}),a.innerHTML="<a href='#'></a>",a.firstChild&&typeof a.firstChild.getAttribute!="undefined"&&a.firstChild.getAttribute("href")!=="#"&&(o.attrHandle.href=function(a){return a.getAttribute("href",2)}),a=null}(),c.querySelectorAll&&function(){var a=m,b=c.createElement("div"),d="__sizzle__";b.innerHTML="<p class='TEST'></p>";if(!b.querySelectorAll||b.querySelectorAll(".TEST").length!==0){m=function(b,e,f,g){e=e||c;if(!g&&!m.isXML(e)){var h=/^(\w+$)|^\.([\w\-]+$)|^#([\w\-]+$)/.exec(b);if(h&&(e.nodeType===1||e.nodeType===9)){if(h[1])return s(e.getElementsByTagName(b),f);if(h[2]&&o.find.CLASS&&e.getElementsByClassName)return s(e.getElementsByClassName(h[2]),f)}if(e.nodeType===9){if(b==="body"&&e.body)return s([e.body],f);if(h&&h[3]){var i=e.getElementById(h[3]);if(!i||!i.parentNode)return s([],f);if(i.id===h[3])return s([i],f)}try{return s(e.querySelectorAll(b),f)}catch(j){}}else if(e.nodeType===1&&e.nodeName.toLowerCase()!=="object"){var k=e,l=e.getAttribute("id"),n=l||d,p=e.parentNode,q=/^\s*[+~]/.test(b);l?n=n.replace(/'/g,"\\$&"):e.setAttribute("id",n),q&&p&&(e=e.parentNode);try{if(!q||p)return s(e.querySelectorAll("[id='"+n+"'] "+b),f)}catch(r){}finally{l||k.removeAttribute("id")}}}return a(b,e,f,g)};for(var e in a)m[e]=a[e];b=null}}(),function(){var a=c.documentElement,b=a.matchesSelector||a.mozMatchesSelector||a.webkitMatchesSelector||a.msMatchesSelector;if(b){var d=!b.call(c.createElement("div"),"div"),e=!1;try{b.call(c.documentElement,"[test!='']:sizzle")}catch(f){e=!0}m.matchesSelector=function(a,c){c=c.replace(/\=\s*([^'"\]]*)\s*\]/g,"='$1']");if(!m.isXML(a))try{if(e||!o.match.PSEUDO.test(c)&&!/!=/.test(c)){var f=b.call(a,c);if(f||!d||a.document&&a.document.nodeType!==11)return f}}catch(g){}return m(c,null,null,[a]).length>0}}}(),function(){var a=c.createElement("div");a.innerHTML="<div class='test e'></div><div class='test'></div>";if(!!a.getElementsByClassName&&a.getElementsByClassName("e").length!==0){a.lastChild.className="e";if(a.getElementsByClassName("e").length===1)return;o.order.splice(1,0,"CLASS"),o.find.CLASS=function(a,b,c){if(typeof b.getElementsByClassName!="undefined"&&!c)return b.getElementsByClassName(a[1])},a=null}}(),c.documentElement.contains?m.contains=function(a,b){return a!==b&&(a.contains?a.contains(b):!0)}:c.documentElement.compareDocumentPosition?m.contains=function(a,b){return!!(a.compareDocumentPosition(b)&16)}:m.contains=function(){return!1},m.isXML=function(a){var b=(a?a.ownerDocument||a:0).documentElement;return b?b.nodeName!=="HTML":!1};var y=function(a,b,c){var d,e=[],f="",g=b.nodeType?[b]:b;while(d=o.match.PSEUDO.exec(a))f+=d[0],a=a.replace(o.match.PSEUDO,"");a=o.relative[a]?a+"*":a;for(var h=0,i=g.length;h<i;h++)m(a,g[h],e,c);return m.filter(f,e)};m.attr=f.attr,m.selectors.attrMap={},f.find=m,f.expr=m.selectors,f.expr[":"]=f.expr.filters,f.unique=m.uniqueSort,f.text=m.getText,f.isXMLDoc=m.isXML,f.contains=m.contains}();var L=/Until$/,M=/^(?:parents|prevUntil|prevAll)/,N=/,/,O=/^.[^:#\[\.,]*$/,P=Array.prototype.slice,Q=f.expr.match.POS,R={children:!0,contents:!0,next:!0,prev:!0};f.fn.extend({find:function(a){var b=this,c,d;if(typeof a!="string")return f(a).filter(function(){for(c=0,d=b.length;c<d;c++)if(f.contains(b[c],this))return!0});var e=this.pushStack("","find",a),g,h,i;for(c=0,d=this.length;c<d;c++){g=e.length,f.find(a,this[c],e);if(c>0)for(h=g;h<e.length;h++)for(i=0;i<g;i++)if(e[i]===e[h]){e.splice(h--,1);break}}return e},has:function(a){var b=f(a);return this.filter(function(){for(var a=0,c=b.length;a<c;a++)if(f.contains(this,b[a]))return!0})},not:function(a){return this.pushStack(T(this,a,!1),"not",a)},filter:function(a){return this.pushStack(T(this,a,!0),"filter",a)},is:function(a){return!!a&&(typeof a=="string"?Q.test(a)?f(a,this.context).index(this[0])>=0:f.filter(a,this).length>0:this.filter(a).length>0)},closest:function(a,b){var c=[],d,e,g=this[0];if(f.isArray(a)){var h=1;while(g&&g.ownerDocument&&g!==b){for(d=0;d<a.length;d++)f(g).is(a[d])&&c.push({selector:a[d],elem:g,level:h});g=g.parentNode,h++}return c}var i=Q.test(a)||typeof a!="string"?f(a,b||this.context):0;for(d=0,e=this.length;d<e;d++){g=this[d];while(g){if(i?i.index(g)>-1:f.find.matchesSelector(g,a)){c.push(g);break}g=g.parentNode;if(!g||!g.ownerDocument||g===b||g.nodeType===11)break}}c=c.length>1?f.unique(c):c;return this.pushStack(c,"closest",a)},index:function(a){if(!a)return this[0]&&this[0].parentNode?this.prevAll().length:-1;if(typeof a=="string")return f.inArray(this[0],f(a));return f.inArray(a.jquery?a[0]:a,this)},add:function(a,b){var c=typeof a=="string"?f(a,b):f.makeArray(a&&a.nodeType?[a]:a),d=f.merge(this.get(),c);return this.pushStack(S(c[0])||S(d[0])?d:f.unique(d))},andSelf:function(){return this.add(this.prevObject)}}),f.each({parent:function(a){var b=a.parentNode;return b&&b.nodeType!==11?b:null},parents:function(a){return f.dir(a,"parentNode")},parentsUntil:function(a,b,c){return f.dir(a,"parentNode",c)},next:function(a){return f.nth(a,2,"nextSibling")},prev:function(a){return f.nth(a,2,"previousSibling")},nextAll:function(a){return f.dir(a,"nextSibling")},prevAll:function(a){return f.dir(a,"previousSibling")},nextUntil:function(a,b,c){return f.dir(a,"nextSibling",c)},prevUntil:function(a,b,c){return f.dir(a,"previousSibling",c)},siblings:function(a){return f.sibling(a.parentNode.firstChild,a)},children:function(a){return f.sibling(a.firstChild)},contents:function(a){return f.nodeName(a,"iframe")?a.contentDocument||a.contentWindow.document:f.makeArray(a.childNodes)}},function(a,b){f.fn[a]=function(c,d){var e=f.map(this,b,c);L.test(a)||(d=c),d&&typeof d=="string"&&(e=f.filter(d,e)),e=this.length>1&&!R[a]?f.unique(e):e,(this.length>1||N.test(d))&&M.test(a)&&(e=e.reverse());return this.pushStack(e,a,P.call(arguments).join(","))}}),f.extend({filter:function(a,b,c){c&&(a=":not("+a+")");return b.length===1?f.find.matchesSelector(b[0],a)?[b[0]]:[]:f.find.matches(a,b)},dir:function(a,c,d){var e=[],g=a[c];while(g&&g.nodeType!==9&&(d===b||g.nodeType!==1||!f(g).is(d)))g.nodeType===1&&e.push(g),g=g[c];return e},nth:function(a,b,c,d){b=b||1;var e=0;for(;a;a=a[c])if(a.nodeType===1&&++e===b)break;return a},sibling:function(a,b){var c=[];for(;a;a=a.nextSibling)a.nodeType===1&&a!==b&&c.push(a);return c}});var V="abbr|article|aside|audio|canvas|datalist|details|figcaption|figure|footer|header|hgroup|mark|meter|nav|output|progress|section|summary|time|video",W=/ jQuery\d+="(?:\d+|null)"/g,X=/^\s+/,Y=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/ig,Z=/<([\w:]+)/,$=/<tbody/i,_=/<|&#?\w+;/,ba=/<(?:script|style)/i,bb=/<(?:script|object|embed|option|style)/i,bc=new RegExp("<(?:"+V+")","i"),bd=/checked\s*(?:[^=]|=\s*.checked.)/i,be=/\/(java|ecma)script/i,bf=/^\s*<!(?:\[CDATA\[|\-\-)/,bg={option:[1,"<select multiple='multiple'>","</select>"],legend:[1,"<fieldset>","</fieldset>"],thead:[1,"<table>","</table>"],tr:[2,"<table><tbody>","</tbody></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],col:[2,"<table><tbody></tbody><colgroup>","</colgroup></table>"],area:[1,"<map>","</map>"],_default:[0,"",""]},bh=U(c);bg.optgroup=bg.option,bg.tbody=bg.tfoot=bg.colgroup=bg.caption=bg.thead,bg.th=bg.td,f.support.htmlSerialize||(bg._default=[1,"div<div>","</div>"]),f.fn.extend({text:function(a){if(f.isFunction(a))return this.each(function(b){var c=f(this);c.text(a.call(this,b,c.text()))});if(typeof a!="object"&&a!==b)return this.empty().append((this[0]&&this[0].ownerDocument||c).createTextNode(a));return f.text(this)},wrapAll:function(a){if(f.isFunction(a))return this.each(function(b){f(this).wrapAll(a.call(this,b))});if(this[0]){var b=f(a,this[0].ownerDocument).eq(0).clone(!0);this[0].parentNode&&b.insertBefore(this[0]),b.map(function(){var a=this;while(a.firstChild&&a.firstChild.nodeType===1)a=a.firstChild;return a}).append(this)}return this},wrapInner:function(a){if(f.isFunction(a))return this.each(function(b){f(this).wrapInner(a.call(this,b))});return this.each(function(){var b=f(this),c=b.contents();c.length?c.wrapAll(a):b.append(a)})},wrap:function(a){var b=f.isFunction(a);return this.each(function(c){f(this).wrapAll(b?a.call(this,c):a)})},unwrap:function(){return this.parent().each(function(){f.nodeName(this,"body")||f(this).replaceWith(this.childNodes)}).end()},append:function(){return this.domManip(arguments,!0,function(a){this.nodeType===1&&this.appendChild(a)})},prepend:function(){return this.domManip(arguments,!0,function(a){this.nodeType===1&&this.insertBefore(a,this.firstChild)})},before:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this)});if(arguments.length){var a=f.clean(arguments);a.push.apply(a,this.toArray());return this.pushStack(a,"before",arguments)}},after:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this.nextSibling)});if(arguments.length){var a=this.pushStack(this,"after",arguments);a.push.apply(a,f.clean(arguments));return a}},remove:function(a,b){for(var c=0,d;(d=this[c])!=null;c++)if(!a||f.filter(a,[d]).length)!b&&d.nodeType===1&&(f.cleanData(d.getElementsByTagName("*")),f.cleanData([d])),d.parentNode&&d.parentNode.removeChild(d);return this},empty:function()
+{for(var a=0,b;(b=this[a])!=null;a++){b.nodeType===1&&f.cleanData(b.getElementsByTagName("*"));while(b.firstChild)b.removeChild(b.firstChild)}return this},clone:function(a,b){a=a==null?!1:a,b=b==null?a:b;return this.map(function(){return f.clone(this,a,b)})},html:function(a){if(a===b)return this[0]&&this[0].nodeType===1?this[0].innerHTML.replace(W,""):null;if(typeof a=="string"&&!ba.test(a)&&(f.support.leadingWhitespace||!X.test(a))&&!bg[(Z.exec(a)||["",""])[1].toLowerCase()]){a=a.replace(Y,"<$1></$2>");try{for(var c=0,d=this.length;c<d;c++)this[c].nodeType===1&&(f.cleanData(this[c].getElementsByTagName("*")),this[c].innerHTML=a)}catch(e){this.empty().append(a)}}else f.isFunction(a)?this.each(function(b){var c=f(this);c.html(a.call(this,b,c.html()))}):this.empty().append(a);return this},replaceWith:function(a){if(this[0]&&this[0].parentNode){if(f.isFunction(a))return this.each(function(b){var c=f(this),d=c.html();c.replaceWith(a.call(this,b,d))});typeof a!="string"&&(a=f(a).detach());return this.each(function(){var b=this.nextSibling,c=this.parentNode;f(this).remove(),b?f(b).before(a):f(c).append(a)})}return this.length?this.pushStack(f(f.isFunction(a)?a():a),"replaceWith",a):this},detach:function(a){return this.remove(a,!0)},domManip:function(a,c,d){var e,g,h,i,j=a[0],k=[];if(!f.support.checkClone&&arguments.length===3&&typeof j=="string"&&bd.test(j))return this.each(function(){f(this).domManip(a,c,d,!0)});if(f.isFunction(j))return this.each(function(e){var g=f(this);a[0]=j.call(this,e,c?g.html():b),g.domManip(a,c,d)});if(this[0]){i=j&&j.parentNode,f.support.parentNode&&i&&i.nodeType===11&&i.childNodes.length===this.length?e={fragment:i}:e=f.buildFragment(a,this,k),h=e.fragment,h.childNodes.length===1?g=h=h.firstChild:g=h.firstChild;if(g){c=c&&f.nodeName(g,"tr");for(var l=0,m=this.length,n=m-1;l<m;l++)d.call(c?bi(this[l],g):this[l],e.cacheable||m>1&&l<n?f.clone(h,!0,!0):h)}k.length&&f.each(k,bp)}return this}}),f.buildFragment=function(a,b,d){var e,g,h,i,j=a[0];b&&b[0]&&(i=b[0].ownerDocument||b[0]),i.createDocumentFragment||(i=c),a.length===1&&typeof j=="string"&&j.length<512&&i===c&&j.charAt(0)==="<"&&!bb.test(j)&&(f.support.checkClone||!bd.test(j))&&(f.support.html5Clone||!bc.test(j))&&(g=!0,h=f.fragments[j],h&&h!==1&&(e=h)),e||(e=i.createDocumentFragment(),f.clean(a,i,e,d)),g&&(f.fragments[j]=h?e:1);return{fragment:e,cacheable:g}},f.fragments={},f.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){f.fn[a]=function(c){var d=[],e=f(c),g=this.length===1&&this[0].parentNode;if(g&&g.nodeType===11&&g.childNodes.length===1&&e.length===1){e[b](this[0]);return this}for(var h=0,i=e.length;h<i;h++){var j=(h>0?this.clone(!0):this).get();f(e[h])[b](j),d=d.concat(j)}return this.pushStack(d,a,e.selector)}}),f.extend({clone:function(a,b,c){var d,e,g,h=f.support.html5Clone||!bc.test("<"+a.nodeName)?a.cloneNode(!0):bo(a);if((!f.support.noCloneEvent||!f.support.noCloneChecked)&&(a.nodeType===1||a.nodeType===11)&&!f.isXMLDoc(a)){bk(a,h),d=bl(a),e=bl(h);for(g=0;d[g];++g)e[g]&&bk(d[g],e[g])}if(b){bj(a,h);if(c){d=bl(a),e=bl(h);for(g=0;d[g];++g)bj(d[g],e[g])}}d=e=null;return h},clean:function(a,b,d,e){var g;b=b||c,typeof b.createElement=="undefined"&&(b=b.ownerDocument||b[0]&&b[0].ownerDocument||c);var h=[],i;for(var j=0,k;(k=a[j])!=null;j++){typeof k=="number"&&(k+="");if(!k)continue;if(typeof k=="string")if(!_.test(k))k=b.createTextNode(k);else{k=k.replace(Y,"<$1></$2>");var l=(Z.exec(k)||["",""])[1].toLowerCase(),m=bg[l]||bg._default,n=m[0],o=b.createElement("div");b===c?bh.appendChild(o):U(b).appendChild(o),o.innerHTML=m[1]+k+m[2];while(n--)o=o.lastChild;if(!f.support.tbody){var p=$.test(k),q=l==="table"&&!p?o.firstChild&&o.firstChild.childNodes:m[1]==="<table>"&&!p?o.childNodes:[];for(i=q.length-1;i>=0;--i)f.nodeName(q[i],"tbody")&&!q[i].childNodes.length&&q[i].parentNode.removeChild(q[i])}!f.support.leadingWhitespace&&X.test(k)&&o.insertBefore(b.createTextNode(X.exec(k)[0]),o.firstChild),k=o.childNodes}var r;if(!f.support.appendChecked)if(k[0]&&typeof (r=k.length)=="number")for(i=0;i<r;i++)bn(k[i]);else bn(k);k.nodeType?h.push(k):h=f.merge(h,k)}if(d){g=function(a){return!a.type||be.test(a.type)};for(j=0;h[j];j++)if(e&&f.nodeName(h[j],"script")&&(!h[j].type||h[j].type.toLowerCase()==="text/javascript"))e.push(h[j].parentNode?h[j].parentNode.removeChild(h[j]):h[j]);else{if(h[j].nodeType===1){var s=f.grep(h[j].getElementsByTagName("script"),g);h.splice.apply(h,[j+1,0].concat(s))}d.appendChild(h[j])}}return h},cleanData:function(a){var b,c,d=f.cache,e=f.event.special,g=f.support.deleteExpando;for(var h=0,i;(i=a[h])!=null;h++){if(i.nodeName&&f.noData[i.nodeName.toLowerCase()])continue;c=i[f.expando];if(c){b=d[c];if(b&&b.events){for(var j in b.events)e[j]?f.event.remove(i,j):f.removeEvent(i,j,b.handle);b.handle&&(b.handle.elem=null)}g?delete i[f.expando]:i.removeAttribute&&i.removeAttribute(f.expando),delete d[c]}}}});var bq=/alpha\([^)]*\)/i,br=/opacity=([^)]*)/,bs=/([A-Z]|^ms)/g,bt=/^-?\d+(?:px)?$/i,bu=/^-?\d/,bv=/^([\-+])=([\-+.\de]+)/,bw={position:"absolute",visibility:"hidden",display:"block"},bx=["Left","Right"],by=["Top","Bottom"],bz,bA,bB;f.fn.css=function(a,c){if(arguments.length===2&&c===b)return this;return f.access(this,a,c,!0,function(a,c,d){return d!==b?f.style(a,c,d):f.css(a,c)})},f.extend({cssHooks:{opacity:{get:function(a,b){if(b){var c=bz(a,"opacity","opacity");return c===""?"1":c}return a.style.opacity}}},cssNumber:{fillOpacity:!0,fontWeight:!0,lineHeight:!0,opacity:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{"float":f.support.cssFloat?"cssFloat":"styleFloat"},style:function(a,c,d,e){if(!!a&&a.nodeType!==3&&a.nodeType!==8&&!!a.style){var g,h,i=f.camelCase(c),j=a.style,k=f.cssHooks[i];c=f.cssProps[i]||i;if(d===b){if(k&&"get"in k&&(g=k.get(a,!1,e))!==b)return g;return j[c]}h=typeof d,h==="string"&&(g=bv.exec(d))&&(d=+(g[1]+1)*+g[2]+parseFloat(f.css(a,c)),h="number");if(d==null||h==="number"&&isNaN(d))return;h==="number"&&!f.cssNumber[i]&&(d+="px");if(!k||!("set"in k)||(d=k.set(a,d))!==b)try{j[c]=d}catch(l){}}},css:function(a,c,d){var e,g;c=f.camelCase(c),g=f.cssHooks[c],c=f.cssProps[c]||c,c==="cssFloat"&&(c="float");if(g&&"get"in g&&(e=g.get(a,!0,d))!==b)return e;if(bz)return bz(a,c)},swap:function(a,b,c){var d={};for(var e in b)d[e]=a.style[e],a.style[e]=b[e];c.call(a);for(e in b)a.style[e]=d[e]}}),f.curCSS=f.css,f.each(["height","width"],function(a,b){f.cssHooks[b]={get:function(a,c,d){var e;if(c){if(a.offsetWidth!==0)return bC(a,b,d);f.swap(a,bw,function(){e=bC(a,b,d)});return e}},set:function(a,b){if(!bt.test(b))return b;b=parseFloat(b);if(b>=0)return b+"px"}}}),f.support.opacity||(f.cssHooks.opacity={get:function(a,b){return br.test((b&&a.currentStyle?a.currentStyle.filter:a.style.filter)||"")?parseFloat(RegExp.$1)/100+"":b?"1":""},set:function(a,b){var c=a.style,d=a.currentStyle,e=f.isNumeric(b)?"alpha(opacity="+b*100+")":"",g=d&&d.filter||c.filter||"";c.zoom=1;if(b>=1&&f.trim(g.replace(bq,""))===""){c.removeAttribute("filter");if(d&&!d.filter)return}c.filter=bq.test(g)?g.replace(bq,e):g+" "+e}}),f(function(){f.support.reliableMarginRight||(f.cssHooks.marginRight={get:function(a,b){var c;f.swap(a,{display:"inline-block"},function(){b?c=bz(a,"margin-right","marginRight"):c=a.style.marginRight});return c}})}),c.defaultView&&c.defaultView.getComputedStyle&&(bA=function(a,b){var c,d,e;b=b.replace(bs,"-$1").toLowerCase(),(d=a.ownerDocument.defaultView)&&(e=d.getComputedStyle(a,null))&&(c=e.getPropertyValue(b),c===""&&!f.contains(a.ownerDocument.documentElement,a)&&(c=f.style(a,b)));return c}),c.documentElement.currentStyle&&(bB=function(a,b){var c,d,e,f=a.currentStyle&&a.currentStyle[b],g=a.style;f===null&&g&&(e=g[b])&&(f=e),!bt.test(f)&&bu.test(f)&&(c=g.left,d=a.runtimeStyle&&a.runtimeStyle.left,d&&(a.runtimeStyle.left=a.currentStyle.left),g.left=b==="fontSize"?"1em":f||0,f=g.pixelLeft+"px",g.left=c,d&&(a.runtimeStyle.left=d));return f===""?"auto":f}),bz=bA||bB,f.expr&&f.expr.filters&&(f.expr.filters.hidden=function(a){var b=a.offsetWidth,c=a.offsetHeight;return b===0&&c===0||!f.support.reliableHiddenOffsets&&(a.style&&a.style.display||f.css(a,"display"))==="none"},f.expr.filters.visible=function(a){return!f.expr.filters.hidden(a)});var bD=/%20/g,bE=/\[\]$/,bF=/\r?\n/g,bG=/#.*$/,bH=/^(.*?):[ \t]*([^\r\n]*)\r?$/mg,bI=/^(?:color|date|datetime|datetime-local|email|hidden|month|number|password|range|search|tel|text|time|url|week)$/i,bJ=/^(?:about|app|app\-storage|.+\-extension|file|res|widget):$/,bK=/^(?:GET|HEAD)$/,bL=/^\/\//,bM=/\?/,bN=/<script\b[^<]*(?:(?!<\/script>)<[^<]*)*<\/script>/gi,bO=/^(?:select|textarea)/i,bP=/\s+/,bQ=/([?&])_=[^&]*/,bR=/^([\w\+\.\-]+:)(?:\/\/([^\/?#:]*)(?::(\d+))?)?/,bS=f.fn.load,bT={},bU={},bV,bW,bX=["*/"]+["*"];try{bV=e.href}catch(bY){bV=c.createElement("a"),bV.href="",bV=bV.href}bW=bR.exec(bV.toLowerCase())||[],f.fn.extend({load:function(a,c,d){if(typeof a!="string"&&bS)return bS.apply(this,arguments);if(!this.length)return this;var e=a.indexOf(" ");if(e>=0){var g=a.slice(e,a.length);a=a.slice(0,e)}var h="GET";c&&(f.isFunction(c)?(d=c,c=b):typeof c=="object"&&(c=f.param(c,f.ajaxSettings.traditional),h="POST"));var i=this;f.ajax({url:a,type:h,dataType:"html",data:c,complete:function(a,b,c){c=a.responseText,a.isResolved()&&(a.done(function(a){c=a}),i.html(g?f("<div>").append(c.replace(bN,"")).find(g):c)),d&&i.each(d,[c,b,a])}});return this},serialize:function(){return f.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?f.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||bO.test(this.nodeName)||bI.test(this.type))}).map(function(a,b){var c=f(this).val();return c==null?null:f.isArray(c)?f.map(c,function(a,c){return{name:b.name,value:a.replace(bF,"\r\n")}}):{name:b.name,value:c.replace(bF,"\r\n")}}).get()}}),f.each("ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "),function(a,b){f.fn[b]=function(a){return this.on(b,a)}}),f.each(["get","post"],function(a,c){f[c]=function(a,d,e,g){f.isFunction(d)&&(g=g||e,e=d,d=b);return f.ajax({type:c,url:a,data:d,success:e,dataType:g})}}),f.extend({getScript:function(a,c){return f.get(a,b,c,"script")},getJSON:function(a,b,c){return f.get(a,b,c,"json")},ajaxSetup:function(a,b){b?b_(a,f.ajaxSettings):(b=a,a=f.ajaxSettings),b_(a,b);return a},ajaxSettings:{url:bV,isLocal:bJ.test(bW[1]),global:!0,type:"GET",contentType:"application/x-www-form-urlencoded",processData:!0,async:!0,accepts:{xml:"application/xml, text/xml",html:"text/html",text:"text/plain",json:"application/json, text/javascript","*":bX},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText"},converters:{"* text":a.String,"text html":!0,"text json":f.parseJSON,"text xml":f.parseXML},flatOptions:{context:!0,url:!0}},ajaxPrefilter:bZ(bT),ajaxTransport:bZ(bU),ajax:function(a,c){function w(a,c,l,m){if(s!==2){s=2,q&&clearTimeout(q),p=b,n=m||"",v.readyState=a>0?4:0;var o,r,u,w=c,x=l?cb(d,v,l):b,y,z;if(a>=200&&a<300||a===304){if(d.ifModified){if(y=v.getResponseHeader("Last-Modified"))f.lastModified[k]=y;if(z=v.getResponseHeader("Etag"))f.etag[k]=z}if(a===304)w="notmodified",o=!0;else try{r=cc(d,x),w="success",o=!0}catch(A){w="parsererror",u=A}}else{u=w;if(!w||a)w="error",a<0&&(a=0)}v.status=a,v.statusText=""+(c||w),o?h.resolveWith(e,[r,w,v]):h.rejectWith(e,[v,w,u]),v.statusCode(j),j=b,t&&g.trigger("ajax"+(o?"Success":"Error"),[v,d,o?r:u]),i.fireWith(e,[v,w]),t&&(g.trigger("ajaxComplete",[v,d]),--f.active||f.event.trigger("ajaxStop"))}}typeof a=="object"&&(c=a,a=b),c=c||{};var d=f.ajaxSetup({},c),e=d.context||d,g=e!==d&&(e.nodeType||e instanceof f)?f(e):f.event,h=f.Deferred(),i=f.Callbacks("once memory"),j=d.statusCode||{},k,l={},m={},n,o,p,q,r,s=0,t,u,v={readyState:0,setRequestHeader:function(a,b){if(!s){var c=a.toLowerCase();a=m[c]=m[c]||a,l[a]=b}return this},getAllResponseHeaders:function(){return s===2?n:null},getResponseHeader:function(a){var c;if(s===2){if(!o){o={};while(c=bH.exec(n))o[c[1].toLowerCase()]=c[2]}c=o[a.toLowerCase()]}return c===b?null:c},overrideMimeType:function(a){s||(d.mimeType=a);return this},abort:function(a){a=a||"abort",p&&p.abort(a),w(0,a);return this}};h.promise(v),v.success=v.done,v.error=v.fail,v.complete=i.add,v.statusCode=function(a){if(a){var b;if(s<2)for(b in a)j[b]=[j[b],a[b]];else b=a[v.status],v.then(b,b)}return this},d.url=((a||d.url)+"").replace(bG,"").replace(bL,bW[1]+"//"),d.dataTypes=f.trim(d.dataType||"*").toLowerCase().split(bP),d.crossDomain==null&&(r=bR.exec(d.url.toLowerCase()),d.crossDomain=!(!r||r[1]==bW[1]&&r[2]==bW[2]&&(r[3]||(r[1]==="http:"?80:443))==(bW[3]||(bW[1]==="http:"?80:443)))),d.data&&d.processData&&typeof d.data!="string"&&(d.data=f.param(d.data,d.traditional)),b$(bT,d,c,v);if(s===2)return!1;t=d.global,d.type=d.type.toUpperCase(),d.hasContent=!bK.test(d.type),t&&f.active++===0&&f.event.trigger("ajaxStart");if(!d.hasContent){d.data&&(d.url+=(bM.test(d.url)?"&":"?")+d.data,delete d.data),k=d.url;if(d.cache===!1){var x=f.now(),y=d.url.replace(bQ,"$1_="+x);d.url=y+(y===d.url?(bM.test(d.url)?"&":"?")+"_="+x:"")}}(d.data&&d.hasContent&&d.contentType!==!1||c.contentType)&&v.setRequestHeader("Content-Type",d.contentType),d.ifModified&&(k=k||d.url,f.lastModified[k]&&v.setRequestHeader("If-Modified-Since",f.lastModified[k]),f.etag[k]&&v.setRequestHeader("If-None-Match",f.etag[k])),v.setRequestHeader("Accept",d.dataTypes[0]&&d.accepts[d.dataTypes[0]]?d.accepts[d.dataTypes[0]]+(d.dataTypes[0]!=="*"?", "+bX+"; q=0.01":""):d.accepts["*"]);for(u in d.headers)v.setRequestHeader(u,d.headers[u]);if(d.beforeSend&&(d.beforeSend.call(e,v,d)===!1||s===2)){v.abort();return!1}for(u in{success:1,error:1,complete:1})v[u](d[u]);p=b$(bU,d,c,v);if(!p)w(-1,"No Transport");else{v.readyState=1,t&&g.trigger("ajaxSend",[v,d]),d.async&&d.timeout>0&&(q=setTimeout(function(){v.abort("timeout")},d.timeout));try{s=1,p.send(l,w)}catch(z){if(s<2)w(-1,z);else throw z}}return v},param:function(a,c){var d=[],e=function(a,b){b=f.isFunction(b)?b():b,d[d.length]=encodeURIComponent(a)+"="+encodeURIComponent(b)};c===b&&(c=f.ajaxSettings.traditional);if(f.isArray(a)||a.jquery&&!f.isPlainObject(a))f.each(a,function(){e(this.name,this.value)});else for(var g in a)ca(g,a[g],c,e);return d.join("&").replace(bD,"+")}}),f.extend({active:0,lastModified:{},etag:{}});var cd=f.now(),ce=/(\=)\?(&|$)|\?\?/i;f.ajaxSetup({jsonp:"callback",jsonpCallback:function(){return f.expando+"_"+cd++}}),f.ajaxPrefilter("json jsonp",function(b,c,d){var e=b.contentType==="application/x-www-form-urlencoded"&&typeof b.data=="string";if(b.dataTypes[0]==="jsonp"||b.jsonp!==!1&&(ce.test(b.url)||e&&ce.test(b.data))){var g,h=b.jsonpCallback=f.isFunction(b.jsonpCallback)?b.jsonpCallback():b.jsonpCallback,i=a[h],j=b.url,k=b.data,l="$1"+h+"$2";b.jsonp!==!1&&(j=j.replace(ce,l),b.url===j&&(e&&(k=k.replace(ce,l)),b.data===k&&(j+=(/\?/.test(j)?"&":"?")+b.jsonp+"="+h))),b.url=j,b.data=k,a[h]=function(a){g=[a]},d.always(function(){a[h]=i,g&&f.isFunction(i)&&a[h](g[0])}),b.converters["script json"]=function(){g||f.error(h+" was not called");return g[0]},b.dataTypes[0]="json";return"script"}}),f.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/javascript|ecmascript/},converters:{"text script":function(a){f.globalEval(a);return a}}}),f.ajaxPrefilter("script",function(a){a.cache===b&&(a.cache=!1),a.crossDomain&&(a.type="GET",a.global=!1)}),f.ajaxTransport("script",function(a){if(a.crossDomain){var d,e=c.head||c.getElementsByTagName("head")[0]||c.documentElement;return{send:function(f,g){d=c.createElement("script"),d.async="async",a.scriptCharset&&(d.charset=a.scriptCharset),d.src=a.url,d.onload=d.onreadystatechange=function(a,c){if(c||!d.readyState||/loaded|complete/.test(d.readyState))d.onload=d.onreadystatechange=null,e&&d.parentNode&&e.removeChild(d),d=b,c||g(200,"success")},e.insertBefore(d,e.firstChild)},abort:function(){d&&d.onload(0,1)}}}});var cf=a.ActiveXObject?function(){for(var a in ch)ch[a](0,1)}:!1,cg=0,ch;f.ajaxSettings.xhr=a.ActiveXObject?function(){return!this.isLocal&&ci()||cj()}:ci,function(a){f.extend(f.support,{ajax:!!a,cors:!!a&&"withCredentials"in a})}(f.ajaxSettings.xhr()),f.support.ajax&&f.ajaxTransport(function(c){if(!c.crossDomain||f.support.cors){var d;return{send:function(e,g){var h=c.xhr(),i,j;c.username?h.open(c.type,c.url,c.async,c.username,c.password):h.open(c.type,c.url,c.async);if(c.xhrFields)for(j in c.xhrFields)h[j]=c.xhrFields[j];c.mimeType&&h.overrideMimeType&&h.overrideMimeType(c.mimeType),!c.crossDomain&&!e["X-Requested-With"]&&(e["X-Requested-With"]="XMLHttpRequest");try{for(j in e)h.setRequestHeader(j,e[j])}catch(k){}h.send(c.hasContent&&c.data||null),d=function(a,e){var j,k,l,m,n;try{if(d&&(e||h.readyState===4)){d=b,i&&(h.onreadystatechange=f.noop,cf&&delete ch[i]);if(e)h.readyState!==4&&h.abort();else{j=h.status,l=h.getAllResponseHeaders(),m={},n=h.responseXML,n&&n.documentElement&&(m.xml=n),m.text=h.responseText;try{k=h.statusText}catch(o){k=""}!j&&c.isLocal&&!c.crossDomain?j=m.text?200:404:j===1223&&(j=204)}}}catch(p){e||g(-1,p)}m&&g(j,k,m,l)},!c.async||h.readyState===4?d():(i=++cg,cf&&(ch||(ch={},f(a).unload(cf)),ch[i]=d),h.onreadystatechange=d)},abort:function(){d&&d(0,1)}}}});var ck={},cl,cm,cn=/^(?:toggle|show|hide)$/,co=/^([+\-]=)?([\d+.\-]+)([a-z%]*)$/i,cp,cq=[["height","marginTop","marginBottom","paddingTop","paddingBottom"],["width","marginLeft","marginRight","paddingLeft","paddingRight"],["opacity"]],cr;f.fn.extend({show:function(a,b,c){var d,e;if(a||a===0)return this.animate(cu("show",3),a,b,c);for(var g=0,h=this.length;g<h;g++)d=this[g],d.style&&(e=d.style.display,!f._data(d,"olddisplay")&&e==="none"&&(e=d.style.display=""),e===""&&f.css(d,"display")==="none"&&f._data(d,"olddisplay",cv(d.nodeName)));for(g=0;g<h;g++){d=this[g];if(d.style){e=d.style.display;if(e===""||e==="none")d.style.display=f._data(d,"olddisplay")||""}}return this},hide:function(a,b,c){if(a||a===0)return this.animate(cu("hide",3),a,b,c);var d,e,g=0,h=this.length;for(;g<h;g++)d=this[g],d.style&&(e=f.css(d,"display"),e!=="none"&&!f._data(d,"olddisplay")&&f._data(d,"olddisplay",e));for(g=0;g<h;g++)this[g].style&&(this[g].style.display="none");return this},_toggle:f.fn.toggle,toggle:function(a,b,c){var d=typeof a=="boolean";f.isFunction(a)&&f.isFunction(b)?this._toggle.apply(this,arguments):a==null||d?this.each(function(){var b=d?a:f(this).is(":hidden");f(this)[b?"show":"hide"]()}):this.animate(cu("toggle",3),a,b,c);return this},fadeTo:function(a,b,c,d){return this.filter(":hidden").css("opacity",0).show().end().animate({opacity:b},a,c,d)},animate:function(a,b,c,d){function g(){e.queue===!1&&f._mark(this);var b=f.extend({},e),c=this.nodeType===1,d=c&&f(this).is(":hidden"),g,h,i,j,k,l,m,n,o;b.animatedProperties={};for(i in a){g=f.camelCase(i),i!==g&&(a[g]=a[i],delete a[i]),h=a[g],f.isArray(h)?(b.animatedProperties[g]=h[1],h=a[g]=h[0]):b.animatedProperties[g]=b.specialEasing&&b.specialEasing[g]||b.easing||"swing";if(h==="hide"&&d||h==="show"&&!d)return b.complete.call(this);c&&(g==="height"||g==="width")&&(b.overflow=[this.style.overflow,this.style.overflowX,this.style.overflowY],f.css(this,"display")==="inline"&&f.css(this,"float")==="none"&&(!f.support.inlineBlockNeedsLayout||cv(this.nodeName)==="inline"?this.style.display="inline-block":this.style.zoom=1))}b.overflow!=null&&(this.style.overflow="hidden");for(i in a)j=new f.fx(this,b,i),h=a[i],cn.test(h)?(o=f._data(this,"toggle"+i)||(h==="toggle"?d?"show":"hide":0),o?(f._data(this,"toggle"+i,o==="show"?"hide":"show"),j[o]()):j[h]()):(k=co.exec(h),l=j.cur(),k?(m=parseFloat(k[2]),n=k[3]||(f.cssNumber[i]?"":"px"),n!=="px"&&(f.style(this,i,(m||1)+n),l=(m||1)/j.cur()*l,f.style(this,i,l+n)),k[1]&&(m=(k[1]==="-="?-1:1)*m+l),j.custom(l,m,n)):j.custom(l,h,""));return!0}var e=f.speed(b,c,d);if(f.isEmptyObject(a))return this.each(e.complete,[!1]);a=f.extend({},a);return e.queue===!1?this.each(g):this.queue(e.queue,g)},stop:function(a,c,d){typeof a!="string"&&(d=c,c=a,a=b),c&&a!==!1&&this.queue(a||"fx",[]);return this.each(function(){function h(a,b,c){var e=b[c];f.removeData(a,c,!0),e.stop(d)}var b,c=!1,e=f.timers,g=f._data(this);d||f._unmark(!0,this);if(a==null)for(b in g)g[b]&&g[b].stop&&b.indexOf(".run")===b.length-4&&h(this,g,b);else g[b=a+".run"]&&g[b].stop&&h(this,g,b);for(b=e.length;b--;)e[b].elem===this&&(a==null||e[b].queue===a)&&(d?e[b](!0):e[b].saveState(),c=!0,e.splice(b,1));(!d||!c)&&f.dequeue(this,a)})}}),f.each({slideDown:cu("show",1),slideUp:cu("hide",1),slideToggle:cu("toggle",1),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(a,b){f.fn[a]=function(a,c,d){return this.animate(b,a,c,d)}}),f.extend({speed:function(a,b,c){var d=a&&typeof a=="object"?f.extend({},a):{complete:c||!c&&b||f.isFunction(a)&&a,duration:a,easing:c&&b||b&&!f.isFunction(b)&&b};d.duration=f.fx.off?0:typeof d.duration=="number"?d.duration:d.duration in f.fx.speeds?f.fx.speeds[d.duration]:f.fx.speeds._default;if(d.queue==null||d.queue===!0)d.queue="fx";d.old=d.complete,d.complete=function(a){f.isFunction(d.old)&&d.old.call(this),d.queue?f.dequeue(this,d.queue):a!==!1&&f._unmark(this)};return d},easing:{linear:function(a,b,c,d){return c+d*a},swing:function(a,b,c,d){return(-Math.cos(a*Math.PI)/2+.5)*d+c}},timers:[],fx:function(a,b,c){this.options=b,this.elem=a,this.prop=c,b.orig=b.orig||{}}}),f.fx.prototype={update:function(){this.options.step&&this.options.step.call(this.elem,this.now,this),(f.fx.step[this.prop]||f.fx.step._default)(this)},cur:function(){if(this.elem[this.prop]!=null&&(!this.elem.style||this.elem.style[this.prop]==null))return this.elem[this.prop];var a,b=f.css(this.elem,this.prop);return isNaN(a=parseFloat(b))?!b||b==="auto"?0:b:a},custom:function(a,c,d){function h(a){return e.step(a)}var e=this,g=f.fx;this.startTime=cr||cs(),this.end=c,this.now=this.start=a,this.pos=this.state=0,this.unit=d||this.unit||(f.cssNumber[this.prop]?"":"px"),h.queue=this.options.queue,h.elem=this.elem,h.saveState=function(){e.options.hide&&f._data(e.elem,"fxshow"+e.prop)===b&&f._data(e.elem,"fxshow"+e.prop,e.start)},h()&&f.timers.push(h)&&!cp&&(cp=setInterval(g.tick,g.interval))},show:function(){var a=f._data(this.elem,"fxshow"+this.prop);this.options.orig[this.prop]=a||f.style(this.elem,this.prop),this.options.show=!0,a!==b?this.custom(this.cur(),a):this.custom(this.prop==="width"||this.prop==="height"?1:0,this.cur()),f(this.elem).show()},hide:function(){this.options.orig[this.prop]=f._data(this.elem,"fxshow"+this.prop)||f.style(this.elem,this.prop),this.options.hide=!0,this.custom(this.cur(),0)},step:function(a){var b,c,d,e=cr||cs(),g=!0,h=this.elem,i=this.options;if(a||e>=i.duration+this.startTime){this.now=this.end,this.pos=this.state=1,this.update(),i.animatedProperties[this.prop]=!0;for(b in i.animatedProperties)i.animatedProperties[b]!==!0&&(g=!1);if(g){i.overflow!=null&&!f.support.shrinkWrapBlocks&&f.each(["","X","Y"],function(a,b){h.style["overflow"+b]=i.overflow[a]}),i.hide&&f(h).hide();if(i.hide||i.show)for(b in i.animatedProperties)f.style(h,b,i.orig[b]),f.removeData(h,"fxshow"+b,!0),f.removeData(h,"toggle"+b,!0);d=i.complete,d&&(i.complete=!1,d.call(h))}return!1}i.duration==Infinity?this.now=e:(c=e-this.startTime,this.state=c/i.duration,this.pos=f.easing[i.animatedProperties[this.prop]](this.state,c,0,1,i.duration),this.now=this.start+(this.end-this.start)*this.pos),this.update();return!0}},f.extend(f.fx,{tick:function(){var a,b=f.timers,c=0;for(;c<b.length;c++)a=b[c],!a()&&b[c]===a&&b.splice(c--,1);b.length||f.fx.stop()},interval:13,stop:function(){clearInterval(cp),cp=null},speeds:{slow:600,fast:200,_default:400},step:{opacity:function(a){f.style(a.elem,"opacity",a.now)},_default:function(a){a.elem.style&&a.elem.style[a.prop]!=null?a.elem.style[a.prop]=a.now+a.unit:a.elem[a.prop]=a.now}}}),f.each(["width","height"],function(a,b){f.fx.step[b]=function(a){f.style(a.elem,b,Math.max(0,a.now)+a.unit)}}),f.expr&&f.expr.filters&&(f.expr.filters.animated=function(a){return f.grep(f.timers,function(b){return a===b.elem}).length});var cw=/^t(?:able|d|h)$/i,cx=/^(?:body|html)$/i;"getBoundingClientRect"in c.documentElement?f.fn.offset=function(a){var b=this[0],c;if(a)return this.each(function(b){f.offset.setOffset(this,a,b)});if(!b||!b.ownerDocument)return null;if(b===b.ownerDocument.body)return f.offset.bodyOffset(b);try{c=b.getBoundingClientRect()}catch(d){}var e=b.ownerDocument,g=e.documentElement;if(!c||!f.contains(g,b))return c?{top:c.top,left:c.left}:{top:0,left:0};var h=e.body,i=cy(e),j=g.clientTop||h.clientTop||0,k=g.clientLeft||h.clientLeft||0,l=i.pageYOffset||f.support.boxModel&&g.scrollTop||h.scrollTop,m=i.pageXOffset||f.support.boxModel&&g.scrollLeft||h.scrollLeft,n=c.top+l-j,o=c.left+m-k;return{top:n,left:o}}:f.fn.offset=function(a){var b=this[0];if(a)return this.each(function(b){f.offset.setOffset(this,a,b)});if(!b||!b.ownerDocument)return null;if(b===b.ownerDocument.body)return f.offset.bodyOffset(b);var c,d=b.offsetParent,e=b,g=b.ownerDocument,h=g.documentElement,i=g.body,j=g.defaultView,k=j?j.getComputedStyle(b,null):b.currentStyle,l=b.offsetTop,m=b.offsetLeft;while((b=b.parentNode)&&b!==i&&b!==h){if(f.support.fixedPosition&&k.position==="fixed")break;c=j?j.getComputedStyle(b,null):b.currentStyle,l-=b.scrollTop,m-=b.scrollLeft,b===d&&(l+=b.offsetTop,m+=b.offsetLeft,f.support.doesNotAddBorder&&(!f.support.doesAddBorderForTableAndCells||!cw.test(b.nodeName))&&(l+=parseFloat(c.borderTopWidth)||0,m+=parseFloat(c.borderLeftWidth)||0),e=d,d=b.offsetParent),f.support.subtractsBorderForOverflowNotVisible&&c.overflow!=="visible"&&(l+=parseFloat(c.borderTopWidth)||0,m+=parseFloat(c.borderLeftWidth)||0),k=c}if(k.position==="relative"||k.position==="static")l+=i.offsetTop,m+=i.offsetLeft;f.support.fixedPosition&&k.position==="fixed"&&(l+=Math.max(h.scrollTop,i.scrollTop),m+=Math.max(h.scrollLeft,i.scrollLeft));return{top:l,left:m}},f.offset={bodyOffset:function(a){var b=a.offsetTop,c=a.offsetLeft;f.support.doesNotIncludeMarginInBodyOffset&&(b+=parseFloat(f.css(a,"marginTop"))||0,c+=parseFloat(f.css(a,"marginLeft"))||0);return{top:b,left:c}},setOffset:function(a,b,c){var d=f.css(a,"position");d==="static"&&(a.style.position="relative");var e=f(a),g=e.offset(),h=f.css(a,"top"),i=f.css(a,"left"),j=(d==="absolute"||d==="fixed")&&f.inArray("auto",[h,i])>-1,k={},l={},m,n;j?(l=e.position(),m=l.top,n=l.left):(m=parseFloat(h)||0,n=parseFloat(i)||0),f.isFunction(b)&&(b=b.call(a,c,g)),b.top!=null&&(k.top=b.top-g.top+m),b.left!=null&&(k.left=b.left-g.left+n),"using"in b?b.using.call(a,k):e.css(k)}},f.fn.extend({position:function(){if(!this[0])return null;var a=this[0],b=this.offsetParent(),c=this.offset(),d=cx.test(b[0].nodeName)?{top:0,left:0}:b.offset();c.top-=parseFloat(f.css(a,"marginTop"))||0,c.left-=parseFloat(f.css(a,"marginLeft"))||0,d.top+=parseFloat(f.css(b[0],"borderTopWidth"))||0,d.left+=parseFloat(f.css(b[0],"borderLeftWidth"))||0;return{top:c.top-d.top,left:c.left-d.left}},offsetParent:function(){return this.map(function(){var a=this.offsetParent||c.body;while(a&&!cx.test(a.nodeName)&&f.css(a,"position")==="static")a=a.offsetParent;return a})}}),f.each(["Left","Top"],function(a,c){var d="scroll"+c;f.fn[d]=function(c){var e,g;if(c===b){e=this[0];if(!e)return null;g=cy(e);return g?"pageXOffset"in g?g[a?"pageYOffset":"pageXOffset"]:f.support.boxModel&&g.document.documentElement[d]||g.document.body[d]:e[d]}return this.each(function(){g=cy(this),g?g.scrollTo(a?f(g).scrollLeft():c,a?c:f(g).scrollTop()):this[d]=c})}}),f.each(["Height","Width"],function(a,c){var d=c.toLowerCase();f.fn["inner"+c]=function(){var a=this[0];return a?a.style?parseFloat(f.css(a,d,"padding")):this[d]():null},f.fn["outer"+c]=function(a){var b=this[0];return b?b.style?parseFloat(f.css(b,d,a?"margin":"border")):this[d]():null},f.fn[d]=function(a){var e=this[0];if(!e)return a==null?null:this;if(f.isFunction(a))return this.each(function(b){var c=f(this);c[d](a.call(this,b,c[d]()))});if(f.isWindow(e)){var g=e.document.documentElement["client"+c],h=e.document.body;return e.document.compatMode==="CSS1Compat"&&g||h&&h["client"+c]||g}if(e.nodeType===9)return Math.max(e.documentElement["client"+c],e.body["scroll"+c],e.documentElement["scroll"+c],e.body["offset"+c],e.documentElement["offset"+c]);if(a===b){var i=f.css(e,d),j=parseFloat(i);return f.isNumeric(j)?j:i}return this.css(d,typeof a=="string"?a:a+"px")}}),a.jQuery=a.$=f,typeof define=="function"&&define.amd&&define.amd.jQuery&&define("jquery",[],function(){return f})})(window);
\ No newline at end of file
diff --git a/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/shell/style/orange.jpg b/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/shell/style/orange.jpg
new file mode 100755 (executable)
index 0000000..ac4c749
Binary files /dev/null and b/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/shell/style/orange.jpg differ
diff --git a/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/shell/style/popup.js b/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/shell/style/popup.js
new file mode 100755 (executable)
index 0000000..5f994f4
--- /dev/null
@@ -0,0 +1,1215 @@
+/**
+ * Copyright (c)2005-2009 Matt Kruse (javascripttoolbox.com)
+ * 
+ * Dual licensed under the MIT and GPL licenses. 
+ * This basically means you can use this code however you want for
+ * free, but don't claim to have written it yourself!
+ * Donations always accepted: http://www.JavascriptToolbox.com/donate/
+ * 
+ * Please do not link to the .js files on javascripttoolbox.com from
+ * your site. Copy the files locally to your server instead.
+ * 
+ */
+/* ******************************************************************* */
+/*   UTIL FUNCTIONS                                                    */
+/* ******************************************************************* */
+var Util = {'$VERSION':1.06};
+
+// Util functions - these are GLOBAL so they
+// look like built-in functions.
+
+// Determine if an object is an array
+function isArray(o) {
+       return (o!=null && typeof(o)=="object" && typeof(o.length)=="number" && (o.length==0 || defined(o[0])));
+};
+
+// Determine if an object is an Object
+function isObject(o) {
+       return (o!=null && typeof(o)=="object" && defined(o.constructor) && o.constructor==Object && !defined(o.nodeName));
+};
+
+// Determine if a reference is defined
+function defined(o) {
+       return (typeof(o)!="undefined");
+};
+
+// Iterate over an array, object, or list of items and run code against each item
+// Similar functionality to Perl's map() function
+function map(func) {
+       var i,j,o;
+       var results = [];
+       if (typeof(func)=="string") {
+               func = new Function('$_',func);
+       }
+       for (i=1; i<arguments.length; i++) {
+               o = arguments[i];
+               if (isArray(o)) {
+                       for (j=0; j<o.length; j++) {
+                               results[results.length] = func(o[j]);
+                       }
+               }
+               else if (isObject(o)) {
+                       for (j in o) {
+                               results[results.length] = func(o[j]);
+                       }
+               }
+               else {
+                       results[results.length] = func(o);
+               }
+       }
+       return results;
+};
+
+// Set default values in an object if they are undefined
+function setDefaultValues(o,values) {
+       if (!defined(o) || o==null) {
+               o = {};
+       }
+       if (!defined(values) || values==null) {
+               return o;
+       }
+       for (var val in values) {
+               if (!defined(o[val])) {
+                       o[val] = values[val];
+               }
+       }
+       return o;
+};
+
+/* ******************************************************************* */
+/*   DEFAULT OBJECT PROTOTYPE ENHANCEMENTS                             */
+/* ******************************************************************* */
+// These functions add useful functionality to built-in objects
+Array.prototype.contains = function(o) {
+       var i,l;
+       if (!(l = this.length)) { return false; }
+       for (i=0; i<l; i++) {
+               if (o==this[i]) {
+                       return true;
+               }
+       }
+};
+
+/* ******************************************************************* */
+/*   DOM FUNCTIONS                                                     */
+/* ******************************************************************* */
+var DOM = (function() { 
+       var dom = {};
+       
+       // Get a parent tag with a given nodename
+       dom.getParentByTagName = function(o,tagNames) {
+               if(o==null) { return null; }
+               if (isArray(tagNames)) {
+                       tagNames = map("return $_.toUpperCase()",tagNames);
+                       while (o=o.parentNode) {
+                               if (o.nodeName && tagNames.contains(o.nodeName)) {
+                                       return o;
+                               }
+                       }
+               }
+               else {
+                       tagNames = tagNames.toUpperCase();
+                       while (o=o.parentNode) {
+                               if (o.nodeName && tagNames==o.nodeName) {
+                                       return o;
+                               }
+                       }
+               }
+               return null;
+       };
+       
+       // Remove a node from its parent
+       dom.removeNode = function(o) {
+               if (o!=null && o.parentNode && o.parentNode.removeChild) {
+                       // First remove all attributes which are func references, to avoid memory leaks
+                       for (var i in o) {
+                               if (typeof(o[i])=="function") {
+                                       o[i] = null;
+                               }
+                       }
+                       o.parentNode.removeChild(o);
+                       return true;
+               }
+               return false;
+       };
+
+       // Get the outer width in pixels of an object, including borders, padding, and margin
+       dom.getOuterWidth = function(o) {
+               if (defined(o.offsetWidth)) {
+                       return o.offsetWidth;
+               }
+               return null;
+       };
+
+       // Get the outer height in pixels of an object, including borders, padding, and margin
+       dom.getOuterHeight = function(o) {
+               if (defined(o.offsetHeight)) {
+                       return o.offsetHeight;
+               }
+               return null;
+       };
+
+       // Resolve an item, an array of items, or an object of items
+       dom.resolve = function() {
+               var results = new Array();
+               var i,j,o;
+               for (var i=0; i<arguments.length; i++) {
+                       var o = arguments[i];
+                       if (o==null) {
+                               if (arguments.length==1) {
+                                       return null;
+                               }
+                               results[results.length] = null;
+                       }
+                       else if (typeof(o)=='string') {
+                               if (document.getElementById) {
+                                       o = document.getElementById(o);
+                               }
+                               else if (document.all) {
+                                       o = document.all[o];
+                               }
+                               if (arguments.length==1) {
+                                       return o;
+                               }
+                               results[results.length] = o;
+                       }
+                       else if (isArray(o)) {
+                               for (j=0; j<o.length; j++) {
+                                       results[results.length] = o[j];
+                               }
+                       }
+                       else if (isObject(o)) {
+                               for (j in o) {
+                                       results[results.length] = o[j];
+                               }
+                       }
+                       else if (arguments.length==1) {
+                               return o;
+                       }
+                       else {
+                               results[results.length] = o;
+                       }
+         }
+         return results;
+       };
+       dom.$ = dom.resolve;
+       
+       return dom;
+})();
+
+/* ******************************************************************* */
+/*   CSS FUNCTIONS                                                     */
+/* ******************************************************************* */
+var CSS = (function(){
+       var css = {};
+
+       // Convert an RGB string in the form "rgb (255, 255, 255)" to "#ffffff"
+       css.rgb2hex = function(rgbString) {
+               if (typeof(rgbString)!="string" || !defined(rgbString.match)) { return null; }
+               var result = rgbString.match(/^\s*rgb\s*\(\s*(\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*/);
+               if (result==null) { return rgbString; }
+               var rgb = +result[1] << 16 | +result[2] << 8 | +result[3];
+               var hex = "";
+               var digits = "0123456789abcdef";
+               while(rgb!=0) { 
+                       hex = digits.charAt(rgb&0xf)+hex; 
+                       rgb>>>=4; 
+               } 
+               while(hex.length<6) { hex='0'+hex; }
+               return "#" + hex;
+       };
+
+       // Convert hyphen style names like border-width to camel case like borderWidth
+       css.hyphen2camel = function(property) {
+               if (!defined(property) || property==null) { return null; }
+               if (property.indexOf("-")<0) { return property; }
+               var str = "";
+               var c = null;
+               var l = property.length;
+               for (var i=0; i<l; i++) {
+                       c = property.charAt(i);
+                       str += (c!="-")?c:property.charAt(++i).toUpperCase();
+               }
+               return str;
+       };
+       
+       // Determine if an object or class string contains a given class.
+       css.hasClass = function(obj,className) {
+               if (!defined(obj) || obj==null || !RegExp) { return false; }
+               var re = new RegExp("(^|\\s)" + className + "(\\s|$)");
+               if (typeof(obj)=="string") {
+                       return re.test(obj);
+               }
+               else if (typeof(obj)=="object" && obj.className) {
+                       return re.test(obj.className);
+               }
+               return false;
+       };
+       
+       // Add a class to an object
+       css.addClass = function(obj,className) {
+               if (typeof(obj)!="object" || obj==null || !defined(obj.className)) { return false; }
+               if (obj.className==null || obj.className=='') { 
+                       obj.className = className; 
+                       return true; 
+               }
+               if (css.hasClass(obj,className)) { return true; }
+               obj.className = obj.className + " " + className;
+               return true;
+       };
+       
+       // Remove a class from an object
+       css.removeClass = function(obj,className) {
+               if (typeof(obj)!="object" || obj==null || !defined(obj.className) || obj.className==null) { return false; }
+               if (!css.hasClass(obj,className)) { return false; }
+               var re = new RegExp("(^|\\s+)" + className + "(\\s+|$)");
+               obj.className = obj.className.replace(re,' ');
+               return true;
+       };
+       
+       // Fully replace a class with a new one
+       css.replaceClass = function(obj,className,newClassName) {
+               if (typeof(obj)!="object" || obj==null || !defined(obj.className) || obj.className==null) { return false; }
+               css.removeClass(obj,className);
+               css.addClass(obj,newClassName);
+               return true;
+       };
+       
+       // Get the currently-applied style of an object
+       css.getStyle = function(o, property) {
+               if (o==null) { return null; }
+               var val = null;
+               var camelProperty = css.hyphen2camel(property);
+               // Handle "float" property as a special case
+               if (property=="float") {
+                       val = css.getStyle(o,"cssFloat");
+                       if (val==null) { 
+                               val = css.getStyle(o,"styleFloat"); 
+                       }
+               }
+               else if (o.currentStyle && defined(o.currentStyle[camelProperty])) {
+                       val = o.currentStyle[camelProperty];
+               }
+               else if (window.getComputedStyle) {
+                       val = window.getComputedStyle(o,null).getPropertyValue(property);
+               }
+               else if (o.style && defined(o.style[camelProperty])) {
+                       val = o.style[camelProperty];
+               }
+               // For color values, make the value consistent across browsers
+               // Convert rgb() colors back to hex for consistency
+               if (/^\s*rgb\s*\(/.test(val)) {
+                       val = css.rgb2hex(val);
+               }
+               // Lowercase all #hex values
+               if (/^#/.test(val)) {
+                       val = val.toLowerCase();
+               }
+               return val;
+       };
+       css.get = css.getStyle;
+
+       // Set a style on an object
+       css.setStyle = function(o, property, value) {
+               if (o==null || !defined(o.style) || !defined(property) || property==null || !defined(value)) { return false; }
+               if (property=="float") {
+                       o.style["cssFloat"] = value;
+                       o.style["styleFloat"] = value;
+               }
+               else if (property=="opacity") {
+                       o.style['-moz-opacity'] = value;
+                       o.style['-khtml-opacity'] = value;
+                       o.style.opacity = value;
+                       if (defined(o.style.filter)) {
+                               o.style.filter = "alpha(opacity=" + value*100 + ")";
+                       }
+               }
+               else {
+                       o.style[css.hyphen2camel(property)] = value;
+               }
+               return true;
+       };
+       css.set = css.setStyle;
+       
+       // Get a unique ID which doesn't already exist on the page
+       css.uniqueIdNumber=1000;
+       css.createId = function(o) {
+               if (defined(o) && o!=null && defined(o.id) && o.id!=null && o.id!="") { 
+                       return o.id;
+               }
+               var id = null;
+               while (id==null || document.getElementById(id)!=null) {
+                       id = "ID_"+(css.uniqueIdNumber++);
+               }
+               if (defined(o) && o!=null && (!defined(o.id)||o.id=="")) {
+                       o.id = id;
+               }
+               return id;
+       };
+       
+       return css;
+})();
+
+/* ******************************************************************* */
+/*   EVENT FUNCTIONS                                                   */
+/* ******************************************************************* */
+
+var Event = (function(){
+       var ev = {};
+       
+       // Resolve an event using IE's window.event if necessary
+       // --------------------------------------------------------------------
+       ev.resolve = function(e) {
+               if (!defined(e) && defined(window.event)) {
+                       e = window.event;
+               }
+               return e;
+       };
+       
+       // Add an event handler to a function
+       // Note: Don't use 'this' within functions added using this method, since
+       // the attachEvent and addEventListener models differ.
+       // --------------------------------------------------------------------
+       ev.add = function( obj, type, fn, capture ) {
+               if (obj.addEventListener) {
+                       obj.addEventListener( type, fn, capture );
+                       return true;
+               }
+               else if (obj.attachEvent) {
+                       obj.attachEvent( "on"+type, fn );
+                       return true;
+               }
+               return false;
+       };
+
+       // Get the mouse position of an event
+       // --------------------------------------------------------------------
+       // PageX/Y, where they exist, are more reliable than ClientX/Y because 
+       // of some browser bugs in Opera/Safari
+       ev.getMouseX = function(e) {
+               e = ev.resolve(e);
+               if (defined(e.pageX)) {
+                       return e.pageX;
+               }
+               if (defined(e.clientX)) {
+                       return e.clientX+Screen.getScrollLeft();
+               }
+               return null;
+       };
+       ev.getMouseY = function(e) {
+               e = ev.resolve(e);
+               if (defined(e.pageY)) {
+                       return e.pageY;
+               }
+               if (defined(e.clientY)) {
+                       return e.clientY+Screen.getScrollTop();
+               }
+               return null;
+       };
+
+       // Stop the event from bubbling up to parent elements.
+       // Two method names map to the same function
+       // --------------------------------------------------------------------
+       ev.cancelBubble = function(e) {
+               e = ev.resolve(e);
+               if (typeof(e.stopPropagation)=="function") { e.stopPropagation(); } 
+               if (defined(e.cancelBubble)) { e.cancelBubble = true; }
+       };
+       ev.stopPropagation = ev.cancelBubble;
+
+       // Prevent the default handling of the event to occur
+       // --------------------------------------------------------------------
+       ev.preventDefault = function(e) {
+               e = ev.resolve(e);
+               if (typeof(e.preventDefault)=="function") { e.preventDefault(); } 
+               if (defined(e.returnValue)) { e.returnValue = false; }
+       };
+       
+       return ev;
+})();
+
+/* ******************************************************************* */
+/*   SCREEN FUNCTIONS                                                  */
+/* ******************************************************************* */
+var Screen = (function() {
+       var screen = {};
+
+       // Get a reference to the body
+       // --------------------------------------------------------------------
+       screen.getBody = function() {
+               if (document.body) {
+                       return document.body;
+               }
+               if (document.getElementsByTagName) {
+                       var bodies = document.getElementsByTagName("BODY");
+                       if (bodies!=null && bodies.length>0) {
+                               return bodies[0];
+                       }
+               }
+               return null;
+       };
+
+       // Get the amount that the main document has scrolled from top
+       // --------------------------------------------------------------------
+       screen.getScrollTop = function() {
+               if (document.documentElement && defined(document.documentElement.scrollTop) && document.documentElement.scrollTop>0) {
+                       return document.documentElement.scrollTop;
+               }
+               if (document.body && defined(document.body.scrollTop)) {
+                       return document.body.scrollTop;
+               }
+               return null;
+       };
+       
+       // Get the amount that the main document has scrolled from left
+       // --------------------------------------------------------------------
+       screen.getScrollLeft = function() {
+               if (document.documentElement && defined(document.documentElement.scrollLeft) && document.documentElement.scrollLeft>0) {
+                       return document.documentElement.scrollLeft;
+               }
+               if (document.body && defined(document.body.scrollLeft)) {
+                       return document.body.scrollLeft;
+               }
+               return null;
+       };
+       
+       // Util function to default a bad number to 0
+       // --------------------------------------------------------------------
+       screen.zero = function(n) {
+               return (!defined(n) || isNaN(n))?0:n;
+       };
+
+       // Get the width of the entire document
+       // --------------------------------------------------------------------
+       screen.getDocumentWidth = function() {
+               var width = 0;
+               var body = screen.getBody();
+               if (document.documentElement && (!document.compatMode || document.compatMode=="CSS1Compat")) {
+                   var rightMargin = parseInt(CSS.get(body,'marginRight'),10) || 0;
+                   var leftMargin = parseInt(CSS.get(body,'marginLeft'), 10) || 0;
+                       width = Math.max(body.offsetWidth + leftMargin + rightMargin, document.documentElement.clientWidth);
+               }
+               else {
+                       width =  Math.max(body.clientWidth, body.scrollWidth);
+               }
+               if (isNaN(width) || width==0) {
+                       width = screen.zero(self.innerWidth);
+               }
+               return width;
+       };
+       
+       // Get the height of the entire document
+       // --------------------------------------------------------------------
+       screen.getDocumentHeight = function() {
+               var body = screen.getBody();
+               var innerHeight = (defined(self.innerHeight)&&!isNaN(self.innerHeight))?self.innerHeight:0;
+               if (document.documentElement && (!document.compatMode || document.compatMode=="CSS1Compat")) {
+                   var topMargin = parseInt(CSS.get(body,'marginTop'),10) || 0;
+                   var bottomMargin = parseInt(CSS.get(body,'marginBottom'), 10) || 0;
+                       return Math.max(body.offsetHeight + topMargin + bottomMargin, document.documentElement.clientHeight, document.documentElement.scrollHeight, screen.zero(self.innerHeight));
+               }
+               return Math.max(body.scrollHeight, body.clientHeight, screen.zero(self.innerHeight));
+       };
+       
+       // Get the width of the viewport (viewable area) in the browser window
+       // --------------------------------------------------------------------
+       screen.getViewportWidth = function() {
+               if (document.documentElement && (!document.compatMode || document.compatMode=="CSS1Compat")) {
+                       return document.documentElement.clientWidth;
+               }
+               else if (document.compatMode && document.body) {
+                       return document.body.clientWidth;
+               }
+               return screen.zero(self.innerWidth);
+       };
+       
+       // Get the height of the viewport (viewable area) in the browser window
+       // --------------------------------------------------------------------
+       screen.getViewportHeight = function() {
+               if (!window.opera && document.documentElement && (!document.compatMode || document.compatMode=="CSS1Compat")) {
+                       return document.documentElement.clientHeight;
+               }
+               else if (document.compatMode && !window.opera && document.body) {
+                       return document.body.clientHeight;
+               }
+               return screen.zero(self.innerHeight);
+       };
+
+       return screen;
+})();var Sort = (function(){
+       var sort = {};
+       sort.AlphaNumeric = function(a,b) {
+               if (a==b) { return 0; }
+               if (a<b) { return -1; }
+               return 1;
+       };
+
+       sort.Default = sort.AlphaNumeric;
+       
+       sort.NumericConversion = function(val) {
+               if (typeof(val)!="number") {
+                       if (typeof(val)=="string") {
+                               val = parseFloat(val.replace(/,/g,''));
+                               if (isNaN(val) || val==null) { val=0; }
+                       }
+                       else {
+                               val = 0;
+                       }
+               }
+               return val;
+       };
+       
+       sort.Numeric = function(a,b) {
+               return sort.NumericConversion(a)-sort.NumericConversion(b);
+       };
+
+       sort.IgnoreCaseConversion = function(val) {
+               if (val==null) { val=""; }
+               return (""+val).toLowerCase();
+       };
+
+       sort.IgnoreCase = function(a,b) {
+               return sort.AlphaNumeric(sort.IgnoreCaseConversion(a),sort.IgnoreCaseConversion(b));
+       };
+
+       sort.CurrencyConversion = function(val) {
+               if (typeof(val)=="string") {
+                       val = val.replace(/^[^\d\.]/,'');
+               }
+               return sort.NumericConversion(val);
+       };
+       
+       sort.Currency = function(a,b) {
+               return sort.Numeric(sort.CurrencyConversion(a),sort.CurrencyConversion(b));
+       };
+       
+       sort.DateConversion = function(val) {
+               // inner util function to parse date formats
+               function getdate(str) {
+                       // inner util function to convert 2-digit years to 4
+                       function fixYear(yr) {
+                               yr = +yr;
+                               if (yr<50) { yr += 2000; }
+                               else if (yr<100) { yr += 1900; }
+                               return yr;
+                       };
+                       var ret;
+                       // YYYY-MM-DD
+                       if (ret=str.match(/(\d{2,4})-(\d{1,2})-(\d{1,2})/)) {
+                               return (fixYear(ret[1])*10000) + (ret[2]*100) + (+ret[3]);
+                       }
+                       // MM/DD/YY[YY] or MM-DD-YY[YY]
+                       if (ret=str.match(/(\d{1,2})[\/-](\d{1,2})[\/-](\d{2,4})/)) {
+                               return (fixYear(ret[3])*10000) + (ret[1]*100) + (+ret[2]);
+                       }
+                       return 99999999; // So non-parsed dates will be last, not first
+               };
+               return getdate(val);
+       };
+
+       sort.Date = function(a,b) {
+               return sort.Numeric(sort.DateConversion(a),sort.DateConversion(b));
+       };
+
+       return sort;
+})();
+
+var Position = (function() {
+       // Resolve a string identifier to an object
+       // ========================================
+       function resolveObject(s) {
+               if (document.getElementById && document.getElementById(s)!=null) {
+                       return document.getElementById(s);
+               }
+               else if (document.all && document.all[s]!=null) {
+                       return document.all[s];
+               }
+               else if (document.anchors && document.anchors.length && document.anchors.length>0 && document.anchors[0].x) {
+                       for (var i=0; i<document.anchors.length; i++) {
+                               if (document.anchors[i].name==s) { 
+                                       return document.anchors[i]
+                               }
+                       }
+               }
+       }
+       
+       var pos = {};
+       pos.$VERSION = 1.0;
+       
+       // Set the position of an object
+       // =============================
+       pos.set = function(o,left,top) {
+               if (typeof(o)=="string") {
+                       o = resolveObject(o);
+               }
+               if (o==null || !o.style) {
+                       return false;
+               }
+               
+               // If the second parameter is an object, it is assumed to be the result of getPosition()
+               if (typeof(left)=="object") {
+                       var pos = left;
+                       left = pos.left;
+                       top = pos.top;
+               }
+               
+               o.style.left = left + "px";
+               o.style.top = top + "px";
+               return true;
+       };
+       
+       // Retrieve the position and size of an object
+       // ===========================================
+       pos.get = function(o) {
+               var fixBrowserQuirks = true;
+                       // If a string is passed in instead of an object ref, resolve it
+               if (typeof(o)=="string") {
+                       o = resolveObject(o);
+               }
+               
+               if (o==null) {
+                       return null;
+               }
+               
+               var left = 0;
+               var top = 0;
+               var width = 0;
+               var height = 0;
+               var parentNode = null;
+               var offsetParent = null;
+       
+               
+               offsetParent = o.offsetParent;
+               var originalObject = o;
+               var el = o; // "el" will be nodes as we walk up, "o" will be saved for offsetParent references
+               while (el.parentNode!=null) {
+                       el = el.parentNode;
+                       if (el.offsetParent==null) {
+                       }
+                       else {
+                               var considerScroll = true;
+                               /*
+                               In Opera, if parentNode of the first object is scrollable, then offsetLeft/offsetTop already 
+                               take its scroll position into account. If elements further up the chain are scrollable, their 
+                               scroll offsets still need to be added in. And for some reason, TR nodes have a scrolltop value
+                               which must be ignored.
+                               */
+                               if (fixBrowserQuirks && window.opera) {
+                                       if (el==originalObject.parentNode || el.nodeName=="TR") {
+                                               considerScroll = false;
+                                       }
+                               }
+                               if (considerScroll) {
+                                       if (el.scrollTop && el.scrollTop>0) {
+                                               top -= el.scrollTop;
+                                       }
+                                       if (el.scrollLeft && el.scrollLeft>0) {
+                                               left -= el.scrollLeft;
+                                       }
+                               }
+                       }
+                       // If this node is also the offsetParent, add on the offsets and reset to the new offsetParent
+                       if (el == offsetParent) {
+                               left += o.offsetLeft;
+                               if (el.clientLeft && el.nodeName!="TABLE") { 
+                                       left += el.clientLeft;
+                               }
+                               top += o.offsetTop;
+                               if (el.clientTop && el.nodeName!="TABLE") {
+                                       top += el.clientTop;
+                               }
+                               o = el;
+                               if (o.offsetParent==null) {
+                                       if (o.offsetLeft) {
+                                               left += o.offsetLeft;
+                                       }
+                                       if (o.offsetTop) {
+                                               top += o.offsetTop;
+                                       }
+                               }
+                               offsetParent = o.offsetParent;
+                       }
+               }
+               
+       
+               if (originalObject.offsetWidth) {
+                       width = originalObject.offsetWidth;
+               }
+               if (originalObject.offsetHeight) {
+                       height = originalObject.offsetHeight;
+               }
+               
+               return {'left':left, 'top':top, 'width':width, 'height':height
+                               };
+       };
+       
+       // Retrieve the position of an object's center point
+       // =================================================
+       pos.getCenter = function(o) {
+               var c = this.get(o);
+               if (c==null) { return null; }
+               c.left = c.left + (c.width/2);
+               c.top = c.top + (c.height/2);
+               return c;
+       };
+       
+       return pos;
+})();// CLASS CONSTRUCTOR
+// --------------------------------------------------------------------
+var Popup = function(div, options) {
+       this.div = defined(div)?div:null;
+       this.index = Popup.maxIndex++;
+       this.ref = "Popup.objects["+this.index+"]";
+       Popup.objects[this.index] = this;
+       // Store a reference to the DIV by id, also
+       if (typeof(this.div)=="string") {
+               Popup.objectsById[this.div] = this;
+       }
+       if (defined(this.div) && this.div!=null && defined(this.div.id)) {
+               Popup.objectsById[this.div.id] = this.div.id;
+       }
+       // Apply passed-in options
+       if (defined(options) && options!=null && typeof(options)=="object") {
+               for (var i in options) {
+                       this[i] = options[i];
+               }
+       }
+       return this;
+};
+
+// CLASS PROPERTIES
+// --------------------------------------------------------------------
+// Index of popup objects, to maintain a global reference if necessary
+Popup.maxIndex = 0;
+Popup.objects = {};
+Popup.objectsById = {};
+
+// The z-index value that popups will start at
+Popup.minZIndex = 101;
+
+// Class names to assign to other objects
+Popup.screenClass = "PopupScreen";
+Popup.iframeClass = "PopupIframe";
+Popup.screenIframeClass = "PopupScreenIframe";
+
+// CLASS METHODS
+// --------------------------------------------------------------------
+
+// Hide all currently-visible non-modal dialogs
+Popup.hideAll = function() {
+       for (var i in Popup.objects) {
+               var p = Popup.objects[i];
+               if (!p.modal && p.autoHide) {
+                       p.hide();
+               }
+       }
+};
+// Catch global events as a trigger to hide auto-hide popups
+Event.add(document, "mouseup", Popup.hideAll, false);
+
+// A simple class method to show a popup without creating an instance
+Popup.show = function(divObject, referenceObject, position, options, modal) {
+       var popup;
+       if (defined(divObject)) { 
+               popup = new Popup(divObject);
+       }
+       else {
+               popup = new Popup();
+               popup.destroyDivOnHide = true;
+       }
+       if (defined(referenceObject)) { popup.reference = DOM.resolve(referenceObject); }
+       if (defined(position)) { popup.position = position; }
+       if (defined(options) && options!=null && typeof(options)=="object") {
+               for (var i in options) {
+                       popup[i] = options[i];
+               }
+       }
+       if (typeof(modal)=="boolean") {
+               popup.modal = modal;
+       }
+       popup.destroyObjectsOnHide = true;
+       popup.show();
+       return popup;
+};
+
+// A simple class method to show a modal popup
+Popup.showModal = function(divObject, referenceObject, position, options) {
+       Popup.show(divObject, referenceObject, position, options, true);
+};
+
+// A method to retrieve a popup object based on a div ID
+Popup.get = function(divId) {
+       if (defined(Popup.objectsById[divId])) {
+               return Popup.objectsById[divId];
+       }
+       return null;
+};
+
+// A method to hide a popup based on a div id
+Popup.hide = function(divId) {
+       var popup = Popup.get(divId);
+       if (popup!=null) {
+               popup.hide();
+       }
+};
+
+// PROTOTYPE PROPERTIES
+// --------------------------------------------------------------------
+Popup.prototype.content = null;
+Popup.prototype.className = "PopupDiv";
+Popup.prototype.style = null; // Styles to be applied to the DIV
+Popup.prototype.width = null;
+Popup.prototype.height = null;
+Popup.prototype.top = null;
+Popup.prototype.left = null;
+Popup.prototype.offsetLeft = 0;
+Popup.prototype.offsetTop = 0;
+Popup.prototype.constrainToScreen = true;
+Popup.prototype.autoHide = true;
+Popup.prototype.useIframeShim = false; /*@cc_on @*/ /*@if (@_win32) {Popup.prototype.useIframeShim = true;} @end @*/ 
+Popup.prototype.iframe = null;
+Popup.prototype.position = null; // vertical: "above top center bottom below", horizontal: "adjacent-left,left,center,right,adjacent-right"
+Popup.prototype.reference = null;
+Popup.prototype.modal = false;
+Popup.prototype.destroyDivOnHide = false;
+Popup.prototype.destroyObjectsOnHide = false;
+Popup.prototype.screen = null;
+Popup.prototype.screenIframeShim = null;
+Popup.prototype.screenOpacity=.4;
+Popup.prototype.screenColor="#cccccc";
+
+// INSTANCE METHODS
+// --------------------------------------------------------------------
+
+// Show the popup
+// --------------------------------------------------------------------
+Popup.prototype.show = function(options, modal) {
+       this.modal = this.modal || (typeof(modal)=="boolean" && modal);
+       if (defined(options) && options!=null && typeof(options)=="object") {
+               for (var i in options) {
+                       this[i] = options[i];
+               }
+       }
+       this.div = DOM.resolve(this.div);
+       CSS.setStyle(this.div,'position','absolute');
+       
+       // If there is no div pre-defined to use, create one
+       if (this.div==null) {
+               this.div = this.createDiv();
+       }
+       if (this.content!=null) {
+               this.div.innerHTML = this.content;
+               this.content = null;
+       }
+       if (this.className!=null) {
+               this.div.className = this.className;
+       }
+       if (this.style!=null) {
+               this.applyStyle();
+       }
+       if (this.width!=null) {
+               this.div.style.width = this.width+"px";
+               this.div.style.overflowX="auto";
+       }
+       if (this.height!=null) {
+               this.div.style.height = this.height+"px";
+               this.div.style.overflowY="auto";
+       }
+
+       // Do the actual display - this is a separate method so display transitions can be implemented
+       this.transition();
+       
+       // Make sure clicks on the DIV don't bubble up to the document
+       this.div.onclick = function(e) { 
+               Event.cancelBubble(Event.resolve(e));
+       };
+       this.div.onmouseup = this.div.onclick;
+       
+       // Focus to the DIV if possible 
+       if (this.modal && this.div.focus) {
+               this.div.focus();
+       }
+};
+
+// Show the popup but make it modal
+// --------------------------------------------------------------------
+Popup.prototype.transition = function() {
+       if (this.modal) {
+               this.addScreen();
+       }
+       
+       // Make the DIV displayed but hidden so its size can be measured
+       CSS.setStyle(this.div,'visibility','hidden');
+       CSS.setStyle(this.div,'display','block');
+
+       // Position the popup
+       this.setPosition();
+
+       // Add the shim if necessary    
+       if (this.useIframeShim) {
+               this.addIframeShim();
+       }
+
+       // Make sure the DIV is higher than the shim
+       this.div.style.zIndex = Popup.minZIndex++;
+
+       CSS.setStyle(this.div,'display','block');
+       CSS.setStyle(this.div,'visibility','visible');
+};
+
+// Show the popup but make it modal
+// --------------------------------------------------------------------
+Popup.prototype.showModal = function(options) {
+       this.show(options,true);
+};
+
+// Apply user styles to the DIV
+// --------------------------------------------------------------------
+Popup.prototype.applyStyle = function() {
+       if (this.div!=null && this.style!=null && typeof(this.style)=="object") {
+               for (var i in this.style) {
+                       this.div.style[i] = this.style[i];
+               }
+       }
+};
+
+// Hide the popup
+// --------------------------------------------------------------------
+Popup.prototype.hide = function() {
+       // If this was a temp object creating on-the-fly, then remove objects from the DOM so
+       // The document doesn't get littered with extra objects
+       if (this.destroyDivOnHide) {
+               DOM.removeNode(this.div);
+               this.div = null;
+               delete Popup.objects[this.id];
+       }
+       else if (this.div!=null) {
+               CSS.setStyle(this.div,'display','none');
+       }
+
+       if (this.destroyObjectsOnHide) {
+               DOM.removeNode(this.iframe);
+               DOM.removeNode(this.screen);
+               DOM.removeNode(this.screenIframeShim);
+       }
+       else {
+               if (this.iframe!=null) {
+                       this.iframe.style.display = "none";
+               }
+               if (this.screen!=null) {
+                       this.screen.style.display = "none";
+               }
+               if (this.screenIframeShim!=null) {
+                       this.screenIframeShim.style.display = "none";
+               }
+       }
+};
+
+// Util funcs for position
+// --------------------------------------------------------------------
+Popup.prototype.setTop = function(top) {
+       this.div.style.top = top+"px";
+};
+Popup.prototype.setLeft = function(left) {
+       this.div.style.left = left+"px";
+};
+Popup.prototype.getTop = function() {
+       return parseInt(CSS.getStyle(this.div,"top"),10);
+};
+Popup.prototype.getLeft = function() {
+       return parseInt(CSS.getStyle(this.div,"left"),10);
+};
+
+// All the logic to position the popup based on various criteria
+// --------------------------------------------------------------------
+Popup.prototype.setPosition = function() {
+       if (this.position!=null) {
+               var m = this.position.match(/^(\S+)\s+(\S+)/); 
+               if (m!=null && m.length==3) {
+                       var v = m[1];
+                       var h = m[2];
+
+                       var ref = this.reference;
+                       if (ref==null) { ref = Screen.getBody(); }
+                       var p = Position.get(ref);
+                       var refTop = p.top;
+                       var refLeft = p.left;
+                       var refWidth = DOM.getOuterWidth(ref);
+                       var refHeight = DOM.getOuterHeight(ref);
+                       
+                       var width = DOM.getOuterWidth(this.div);
+                       var height = DOM.getOuterHeight(this.div);
+                       
+                       var scrollLeft = Screen.getScrollLeft();
+                       var scrollTop = Screen.getScrollTop();
+
+                       // Set vertical position relative to reference object
+                       if (v=="above") { this.setTop(refTop-height+this.offsetTop); }
+                       else if (v=="top") { this.setTop(refTop+this.offsetTop); }
+                       else if (v=="center") { this.setTop(refTop+(refHeight/2)-(height/2)+this.offsetTop); }
+                       else if (v=="bottom") { this.setTop(refTop+refHeight-height+this.offsetTop); }
+                       else if (v=="below") { this.setTop(refTop+refHeight+this.offsetTop); }
+
+                       // Set horizontal position relative to reference object
+                       if (h=="adjacent-left") { this.setLeft(refLeft-width+this.offsetLeft); }
+                       else if (h=="left") { this.setLeft(refLeft+this.offsetLeft); }
+                       else if (h=="center") { this.setLeft(refLeft+(refWidth/2)-(width/2)+this.offsetLeft); }
+                       else if (h=="right") { this.setLeft(refLeft+refWidth-width+this.offsetLeft); }
+                       else if (h=="adjacent-right") { this.setLeft(refLeft+refWidth+this.offsetLeft); }
+               }
+       }
+       else if (this.top==null && this.left==null) {
+               this.center();
+       }
+       else {
+               if (this.top==null) { this.top=0; }
+               if (this.left==null) { this.left=0; }
+               this.div.style.top = this.top+this.offsetTop+"px";
+               this.div.style.left = this.left+this.offsetLeft+"px";
+       }
+
+       // Re-position to make sure it stays on the screen
+       if (this.constrainToScreen) {
+               this.fitToScreen();
+       }
+};
+
+// Append an object to the body
+// --------------------------------------------------------------------
+Popup.prototype.appendToBody = function(o) {
+       var body = Screen.getBody();
+       if (body && body.appendChild) {
+               body.appendChild(o);
+       }
+};
+
+// Create a new DIV object to be used for a popup
+// --------------------------------------------------------------------
+Popup.prototype.createDiv = function() {
+       if (document.createElement) {
+               var d = document.createElement("DIV");
+               d.style.position="absolute";
+               d.style.display="block";
+               d.style.visibility="hidden";
+               this.appendToBody(d);
+               return d;
+       }
+       alert("ERROR: Couldn't create DIV element in Popup.prototype.createDiv()");
+       return null;
+};
+
+// Create a new IFRAME object to be used behind the popup
+// --------------------------------------------------------------------
+Popup.prototype.createIframe = function() {
+       if (document.createElement) {
+               var i= document.createElement("IFRAME");
+               i.style.position="absolute";
+               i.style.display="block";
+               i.style.visibility="hidden";
+               i.style.background="none";
+               this.appendToBody(i);
+               return i;
+       }
+       else {
+               alert("ERROR: Couldn't create IFRAME object in Popup.prototype.createIframe()");
+       }
+};
+
+// Add an IFRAME shim for the DIV
+// --------------------------------------------------------------------
+Popup.prototype.addIframeShim = function() {
+       if (this.iframe==null) {
+               this.iframe = this.createIframe();
+       }
+       this.iframe.className = Popup.iframeClass;
+       CSS.setStyle(this.iframe,'top',this.getTop()+"px");
+       CSS.setStyle(this.iframe,'left',this.getLeft()+"px");
+       CSS.setStyle(this.iframe,'width',DOM.getOuterWidth(this.div) + "px");
+       CSS.setStyle(this.iframe,'height',DOM.getOuterHeight(this.div) + "px");
+       CSS.setStyle(this.iframe,'zIndex',Popup.minZIndex++);
+       CSS.setStyle(this.iframe,'opacity',0);
+       CSS.setStyle(this.iframe,'visibility','visible');
+       CSS.setStyle(this.iframe,'display','block');
+};
+
+// Create a "screen" to make a popup modal
+// --------------------------------------------------------------------
+Popup.prototype.addScreen = function() {
+       if (this.screen==null) {
+               this.screen = this.createDiv();
+               this.screen.style.top="0px";
+               this.screen.style.left="0px";
+               this.screen.style.backgroundColor = this.screenColor;
+               this.screen.className=Popup.screenClass;;
+               CSS.setStyle(this.screen,"opacity",this.screenOpacity);
+               this.screen.onclick = function(e) { Event.cancelBubble(Event.resolve(e)); }
+       }
+       if (this.screenIframeShim==null) {
+               this.screenIframeShim = this.createIframe();
+               this.screenIframeShim.style.top="0px";
+               this.screenIframeShim.style.left="0px";
+               this.screenIframeShim.className=Popup.screenIframeClass;
+               CSS.setStyle(this.screenIframeShim,"opacity",0);
+       }
+       this.screen.style.width = Screen.getDocumentWidth()+"px";
+       this.screen.style.height = Screen.getDocumentHeight()+"px";
+       this.screenIframeShim.style.width = Screen.getDocumentWidth()+"px";
+       this.screenIframeShim.style.height = Screen.getDocumentHeight()+"px";
+       this.screenIframeShim.style.zIndex = Popup.minZIndex++;
+       this.screenIframeShim.style.visibility="visible";
+       this.screenIframeShim.style.display="block";
+       this.screen.style.zIndex = Popup.minZIndex++;
+       this.screen.style.visibility="visible";
+       this.screen.style.display="block";
+};
+
+// Re-position the DIV so it stays on the screen
+// --------------------------------------------------------------------
+Popup.prototype.fitToScreen = function() {
+       var width = DOM.getOuterWidth(this.div);
+       var height = DOM.getOuterHeight(this.div);
+       var top = this.getTop();
+       var left = this.getLeft();
+       
+       var clientWidth = Screen.getViewportWidth();
+       var clientHeight = Screen.getViewportHeight();
+       
+       var scrollLeft = Screen.getScrollLeft();
+       var scrollTop = Screen.getScrollTop();
+
+       if (top-scrollTop+height>clientHeight) {
+               top = top - ((top+height) - (scrollTop+clientHeight));
+               this.div.style.top = top + "px";
+       }
+       if (left-scrollLeft+width>clientWidth) {
+               left = left - ((left+width) - (scrollLeft+clientWidth));
+               this.div.style.left = left + "px";
+       }
+       if (top<scrollTop) {
+               this.div.style.top=scrollTop+"px";
+       }
+       if (left<scrollLeft) {
+               this.div.style.left=scrollLeft+"px";
+       }
+};
+
+// Center the DIV object
+// --------------------------------------------------------------------
+Popup.prototype.center = function() {
+       var left = DOM.getOuterWidth(this.div);
+       var top = DOM.getOuterHeight(this.div);
+       if (isNaN(left)) { left=0; }
+       if (isNaN(top)) { top=0; }      
+       var clientW = Screen.getViewportWidth();
+       var clientH = Screen.getViewportHeight();
+       if (clientW!=null && clientH!=null) {
+               top = (clientH-top)/2;
+               left = (clientW-left)/2;
+       }
+       top += Screen.getScrollTop();
+       left += Screen.getScrollLeft();
+       
+       this.div.style.top = top+this.offsetTop+"px";
+       this.div.style.left = left+this.offsetLeft+"px";
+};
+
diff --git a/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/shell/style/red.jpg b/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/shell/style/red.jpg
new file mode 100755 (executable)
index 0000000..ab67c5a
Binary files /dev/null and b/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/shell/style/red.jpg differ
diff --git a/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/shell/style/summary.xsl b/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/shell/style/summary.xsl
new file mode 100755 (executable)
index 0000000..2f7f0df
--- /dev/null
@@ -0,0 +1,523 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<xsl:stylesheet version="1.0"
+       xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
+       <xsl:output method="html" version="1.0" encoding="UTF-8"
+               indent="yes" />
+       <xsl:template match="/">
+               <html>
+                       <STYLE type="text/css">
+                               @import "./style/tests.css";
+                       </STYLE>
+                       <head>
+                               <script type="text/javascript" src="./style/jquery.min.js" />
+                       </head>
+                       <body>
+                               <div id="testcasepage">
+                                       <div id="title">
+                                               <table>
+                                                       <tr>
+                                                               <td>
+                                                                       <h1>TCT Report</h1>
+                                                               </td>
+                                                       </tr>
+                                               </table>
+                                       </div>
+                                       <div id="overview">
+                                       <table>
+                                               <tr>
+                                                       <td>
+                                       <div id="summary">
+                                               <table>
+                                                       <tr>
+                                                               <th colspan="2">Test Summary</th>
+                                                       </tr>
+                                                       <tr>
+                                                               <td>TCT Version</td>
+                                                               <td>
+                                                                       <xsl:value-of select="result_summary/environment/@tct_version" />
+                                                               </td>
+                                                       </tr>
+                                                       <tr>
+                                                               <td>Test Plan Name</td>
+                                                               <td>
+                                                                       <xsl:value-of select="result_summary/@plan_name" />
+                                                               </td>
+                                                       </tr>
+                                                       <tr>
+                                                               <td>Test Profile</td>
+                                                               <td>
+                                                                       <xsl:value-of select="result_summary/environment/@tct_profile" />
+                                                               </td>
+                                                       </tr>
+                                                       <tr>
+                                                               <td>Build ID</td>
+                                                               <td>
+                                                                       <xsl:choose>
+                                                                               <xsl:when test="result_summary/environment/@build_id">
+                                                                                       <xsl:if test="result_summary/environment/@build_id = ''">
+                                                                                               N/A
+                                                                                       </xsl:if>
+                                                                                       <xsl:value-of select="result_summary/environment/@build_id" />
+                                                                               </xsl:when>
+                                                                               <xsl:otherwise>
+                                                                                       N/A
+                                                                               </xsl:otherwise>
+                                                                       </xsl:choose>
+                                                               </td>
+                                                       </tr>
+                                                       <tr>
+                                                               <td>Test Total</td>
+                                                               <td>
+                                                                       <xsl:value-of select="sum(result_summary//suite/total_case)" />
+                                                               </td>
+                                                       </tr>
+                                                       <tr>
+                                                               <td>Test Passed</td>
+                                                               <td>
+                                                                       <xsl:value-of select="sum(result_summary//suite/pass_case)" />
+                                                               </td>
+                                                       </tr>
+                                                       <tr>
+                                                               <td>Test Failed</td>
+                                                               <td>
+                                                                       <xsl:value-of select="sum(result_summary//suite/fail_case)" />
+                                                               </td>
+                                                       </tr>
+                                                       <tr>
+                                                               <td>Test Blocked</td>
+                                                               <td>
+                                                                       <xsl:value-of select="sum(result_summary//suite/block_case)" />
+                                                               </td>
+                                                       </tr>
+                                                       <tr>
+                                                               <td>Test Not Executed</td>
+                                                               <td>
+                                                                       <xsl:value-of select="sum(result_summary//suite/na_case)" />
+                                                               </td>
+                                                       </tr>
+                                                       <tr>
+                                                               <td>Time</td>
+                                                               <td>
+                                                                       <xsl:value-of select="result_summary/summary/start_at" />
+                                                                       ~
+                                                                       <xsl:value-of select="result_summary/summary/end_at" />
+                                                               </td>
+                                                       </tr>
+                                               </table>
+                                       </div>
+                                       </td>
+                                       <td>
+                                       <div id="device">
+                                               <table>
+                                                       <tr>
+                                                               <th colspan="2">Device Information</th>
+                                                       </tr>
+                                                       <tr>
+                                                               <td>Host Device</td>
+                                                               <td>
+                                                                       <xsl:choose>
+                                                                               <xsl:when test="result_summary/environment/@host">
+                                                                                       <xsl:if test="result_summary/environment/@host = ''">
+                                                                                               N/A
+                                                                                       </xsl:if>
+                                                                                       <xsl:value-of select="result_summary/environment/@host" />
+                                                                               </xsl:when>
+                                                                               <xsl:otherwise>
+                                                                                       N/A
+                                                                               </xsl:otherwise>
+                                                                       </xsl:choose>
+                                                               </td>
+                                                       </tr>
+                                                       <tr>
+                                                               <td>Manufacturer</td>
+                                                               <td>
+                                                                       <xsl:choose>
+                                                                               <xsl:when test="result_summary/environment/@manufacturer">
+                                                                                       <xsl:if test="result_summary/environment/@manufacturer = ''">
+                                                                                               N/A
+                                                                                       </xsl:if>
+                                                                                       <xsl:value-of select="result_summary/environment/@manufacturer" />
+                                                                               </xsl:when>
+                                                                               <xsl:otherwise>
+                                                                                       N/A
+                                                                               </xsl:otherwise>
+                                                                       </xsl:choose>
+                                                               </td>
+                                                       </tr>
+                                                       <tr>
+                                                               <td>Device Model</td>
+                                                               <td>
+                                                                       <xsl:choose>
+                                                                               <xsl:when test="result_summary/environment/@device_model">
+                                                                                       <xsl:if test="result_summary/environment/@device_model = ''">
+                                                                                               N/A
+                                                                                       </xsl:if>
+                                                                                       <xsl:value-of select="result_summary/environment/@device_model" />
+                                                                               </xsl:when>
+                                                                               <xsl:otherwise>
+                                                                                       N/A
+                                                                               </xsl:otherwise>
+                                                                       </xsl:choose>
+                                                               </td>
+                                                       </tr>
+                                                       <tr>
+                                                               <td>Device ID</td>
+                                                               <td>
+                                                                       <xsl:choose>
+                                                                               <xsl:when test="result_summary/environment/@device_id">
+                                                                                       <xsl:if test="result_summary/environment/@device_id = ''">
+                                                                                               N/A
+                                                                                       </xsl:if>
+                                                                                       <xsl:value-of select="result_summary/environment/@device_id" />
+                                                                               </xsl:when>
+                                                                               <xsl:otherwise>
+                                                                                       N/A
+                                                                               </xsl:otherwise>
+                                                                       </xsl:choose>
+                                                               </td>
+                                                       </tr>
+                                                       <tr>
+                                                               <td>Screen Size</td>
+                                                               <td>
+                                                                       <xsl:choose>
+                                                                               <xsl:when test="result_summary/environment/@screen_size">
+                                                                                       <xsl:if test="result_summary/environment/@screen_size = ''">
+                                                                                               N/A
+                                                                                       </xsl:if>
+                                                                                       <xsl:value-of select="result_summary/environment/@screen_size" />
+                                                                               </xsl:when>
+                                                                               <xsl:otherwise>
+                                                                                       N/A
+                                                                               </xsl:otherwise>
+                                                                       </xsl:choose>
+                                                               </td>
+                                                       </tr>
+                                                       <tr>
+                                                               <td>Resolution</td>
+                                                               <td>
+                                                                       <xsl:choose>
+                                                                               <xsl:when test="result_summary/environment/@resolution">
+                                                                                       <xsl:if test="result_summary/environment/@resolution = ''">
+                                                                                               N/A
+                                                                                       </xsl:if>
+                                                                                       <xsl:value-of select="result_summary/environment/@resolution" />
+                                                                               </xsl:when>
+                                                                               <xsl:otherwise>
+                                                                                       N/A
+                                                                               </xsl:otherwise>
+                                                                       </xsl:choose>
+                                                               </td>
+                                                       </tr>
+                                               </table>
+                                       </div>
+                                       </td>
+                                       </tr>
+                                       </table>
+                                       </div>
+                                       <div id="capability">
+                                               <div id="title">
+                                                       <a name="contents"></a>
+                                                       <table>
+                                                               <tr>
+                                                                       <td class="title">
+                                                                               <h1><a href="#" class="see_capabilities">Device Capability</a></h1>
+                                                                       </td>
+                                                               </tr>
+                                                       </table>
+                                               </div>
+                                               <xsl:choose>
+                                                       <xsl:when test="result_summary/capabilities">
+                                                               <div id="capability_table" style="display:none;">
+                                                               <table>
+                                                                       <tr>
+                                                                               <th>Capability Name</th>
+                                                                               <th>Type</th>
+                                                                               <th>Value</th>
+                                                                       </tr>
+                                                                       <xsl:for-each select="result_summary/capabilities/capability">
+                                                                               <xsl:sort select="@name" />
+                                                                               <tr>
+                                                                                       <td>
+                                                                                               <xsl:value-of select="@name" />
+                                                                                       </td>
+                                                                                       <td>
+                                                                                               <xsl:value-of select="@type" />
+                                                                                       </td>
+                                                                                       <td>
+                                                                                               <xsl:choose>
+                                                                                                       <xsl:when test="value">
+                                                                                                               <xsl:value-of select="value" />
+                                                                                                       </xsl:when>
+                                                                                                       <xsl:otherwise>
+                                                                                                               <xsl:value-of select="@support" />
+                                                                                                       </xsl:otherwise>
+                                                                                               </xsl:choose>
+                                                                                       </td>
+                                                                               </tr>
+                                                                       </xsl:for-each>
+                                                               </table>
+                                                               </div>
+                                                       </xsl:when>
+                                                       <xsl:otherwise>
+                                                               The information of device capability is not available.
+                                                       </xsl:otherwise>
+                                               </xsl:choose>
+                                       </div>
+                                       <div id="btc">
+                                               <table>
+                                                       <tr>
+                                                               <td>
+                                                                       <a href="#" class="see_all">Show all</a>
+                                                               </td>
+                                                               <td>
+                                                                       <a href="#" class="see_failed">Show only failed</a>
+                                                               </td>
+                                                               <td>
+                                                                       <a href="#" class="see_blocked">Show only blocked</a>
+                                                               </td>
+                                                               <td>
+                                                                       <a href="#" class="see_na">Show only not executed</a>
+                                                               </td>
+                                                       </tr>
+                                               </table>
+                                       </div>
+                                       <div id="title">
+                                               <h1></h1>
+                                       </div>
+                                       <div id="suite_summary">
+                                               <div id="title">
+                                                       <a name="contents"></a>
+                                                       <table>
+                                                               <tr>
+                                                                       <td class="title">
+                                                                               <h1>Test Summary by Suite</h1>
+                                                                       </td>
+                                                               </tr>
+                                                       </table>
+                                               </div>
+                                               <div id="see_all">
+                                                       <table>
+                                                               <tr>
+                                                                       <th>Suite</th>
+                                                                       <th>Total</th>
+                                                                       <th>Passed</th>
+                                                                       <th>Failed</th>
+                                                                       <th>Blocked</th>
+                                                                       <th>Not Executed</th>
+                                                                       <th class="Ratio">Ratio</th>
+                                                               </tr>
+                                                               <xsl:for-each select="result_summary/suite">
+                                                                       <xsl:if test="total_case &gt; 0">
+                                                                               <tr class="suite_item">
+                                                                                       <xsl:attribute name="id">
+                                                               <xsl:value-of
+                                                                                               select="@name" />
+                                                   </xsl:attribute>
+                                                                                       <td>
+                                                                                               <a>
+                                                                                                       <xsl:attribute name="href"><xsl:value-of
+                                                                                                               select="@name" />.xml</xsl:attribute>
+                                                                                                       <xsl:value-of select="@name" />
+                                                                                               </a>
+                                                                                       </td>
+                                                                                       <td class="total">
+                                                                                               <xsl:value-of select="total_case" />
+                                                                                       </td>
+                                                                                       <td class="pass">
+                                                                                               <xsl:value-of select="pass_case" />
+                                                                                       </td>
+                                                                                       <td class="fail">
+                                                                                               <xsl:value-of select="fail_case" />
+                                                                                       </td>
+                                                                                       <td class="block">
+                                                                                               <xsl:value-of select="block_case" />
+                                                                                       </td>
+                                                                                       <td class="na">
+                                                                                               <xsl:value-of select="na_case" />
+                                                                                       </td>
+                                                                                       <td class="Ratio">
+                                                                                               <div class="RatioGraphic" />
+                                                                                       </td>
+                                                                               </tr>
+                                                                       </xsl:if>
+                                                               </xsl:for-each>
+                                                       </table>
+                                               </div>
+                                               <div id="see_fail" style="display:none;">
+                                                       <table>
+                                                               <tr>
+                                                                       <th>Suite</th>
+                                                                       <th>Total</th>
+                                                                       <th>Passed</th>
+                                                                       <th>Failed</th>
+                                                                       <th>Blocked</th>
+                                                                       <th>Not Executed</th>
+                                                                       <th class="Ratio">Ratio</th>
+                                                               </tr>
+                                                               <xsl:for-each select="result_summary/suite">
+                                                                       <xsl:if test="fail_case &gt; 0">
+                                                                               <tr class="suite_item">
+                                                                                       <xsl:attribute name="id">
+                                                               <xsl:value-of
+                                                                                               select="@name" />
+                                                   </xsl:attribute>
+                                                                                       <td>
+                                                                                               <a>
+                                                                                                       <xsl:attribute name="href"><xsl:value-of
+                                                                                                               select="@name" />.xml</xsl:attribute>
+                                                                                                       <xsl:value-of select="@name" />
+                                                                                               </a>
+                                                                                       </td>
+                                                                                       <td class="total">
+                                                                                               <xsl:value-of select="total_case" />
+                                                                                       </td>
+                                                                                       <td class="pass">
+                                                                                               <xsl:value-of select="pass_case" />
+                                                                                       </td>
+                                                                                       <td class="fail">
+                                                                                               <xsl:value-of select="fail_case" />
+                                                                                       </td>
+                                                                                       <td class="block">
+                                                                                               <xsl:value-of select="block_case" />
+                                                                                       </td>
+                                                                                       <td class="na">
+                                                                                               <xsl:value-of select="na_case" />
+                                                                                       </td>
+                                                                                       <td class="Ratio">
+                                                                                               <div class="RatioGraphic" />
+                                                                                       </td>
+                                                                               </tr>
+                                                                       </xsl:if>
+                                                               </xsl:for-each>
+                                                       </table>
+                                               </div>
+                                               <div id="see_block" style="display:none;">
+                                                       <table>
+                                                               <tr>
+                                                                       <th>Suite</th>
+                                                                       <th>Total</th>
+                                                                       <th>Passed</th>
+                                                                       <th>Failed</th>
+                                                                       <th>Blocked</th>
+                                                                       <th>Not Executed</th>
+                                                                       <th class="Ratio">Ratio</th>
+                                                               </tr>
+                                                               <xsl:for-each select="result_summary/suite">
+                                                                       <xsl:if test="block_case &gt; 0">
+                                                                               <tr class="suite_item">
+                                                                                       <xsl:attribute name="id">
+                                                               <xsl:value-of
+                                                                                               select="@name" />
+                                                   </xsl:attribute>
+                                                                                       <td>
+                                                                                               <a>
+                                                                                                       <xsl:attribute name="href"><xsl:value-of
+                                                                                                               select="@name" />.xml</xsl:attribute>
+                                                                                                       <xsl:value-of select="@name" />
+                                                                                               </a>
+                                                                                       </td>
+                                                                                       <td class="total">
+                                                                                               <xsl:value-of select="total_case" />
+                                                                                       </td>
+                                                                                       <td class="pass">
+                                                                                               <xsl:value-of select="pass_case" />
+                                                                                       </td>
+                                                                                       <td class="fail">
+                                                                                               <xsl:value-of select="fail_case" />
+                                                                                       </td>
+                                                                                       <td class="block">
+                                                                                               <xsl:value-of select="block_case" />
+                                                                                       </td>
+                                                                                       <td class="na">
+                                                                                               <xsl:value-of select="na_case" />
+                                                                                       </td>
+                                                                                       <td class="Ratio">
+                                                                                               <div class="RatioGraphic" />
+                                                                                       </td>
+                                                                               </tr>
+                                                                       </xsl:if>
+                                                               </xsl:for-each>
+                                                       </table>
+                                               </div>
+                                               <div id="see_na" style="display:none;">
+                                                       <table>
+                                                               <tr>
+                                                                       <th>Suite</th>
+                                                                       <th>Total</th>
+                                                                       <th>Passed</th>
+                                                                       <th>Failed</th>
+                                                                       <th>Blocked</th>
+                                                                       <th>Not Executed</th>
+                                                                       <th class="Ratio">Ratio</th>
+                                                               </tr>
+                                                               <xsl:for-each select="result_summary/suite">
+                                                                       <xsl:if test="na_case &gt; 0">
+                                                                               <tr class="suite_item">
+                                                                                       <xsl:attribute name="id">
+                                                               <xsl:value-of
+                                                                                               select="@name" />
+                                                   </xsl:attribute>
+                                                                                       <td>
+                                                                                               <a>
+                                                                                                       <xsl:attribute name="href"><xsl:value-of
+                                                                                                               select="@name" />.xml</xsl:attribute>
+                                                                                                       <xsl:value-of select="@name" />
+                                                                                               </a>
+                                                                                       </td>
+                                                                                       <td class="total">
+                                                                                               <xsl:value-of select="total_case" />
+                                                                                       </td>
+                                                                                       <td class="pass">
+                                                                                               <xsl:value-of select="pass_case" />
+                                                                                       </td>
+                                                                                       <td class="fail">
+                                                                                               <xsl:value-of select="fail_case" />
+                                                                                       </td>
+                                                                                       <td class="block">
+                                                                                               <xsl:value-of select="block_case" />
+                                                                                       </td>
+                                                                                       <td class="na">
+                                                                                               <xsl:value-of select="na_case" />
+                                                                                       </td>
+                                                                                       <td class="Ratio">
+                                                                                               <div class="RatioGraphic" />
+                                                                                       </td>
+                                                                               </tr>
+                                                                       </xsl:if>
+                                                               </xsl:for-each>
+                                                       </table>
+                                               </div>
+                                       </div>
+                               </div>
+                               <div id="goTopBtn">
+                                       <img border="0" src="./style/back_top.png" />
+                               </div>
+                               <script type="text/javascript" src="./style/application.js" />
+                               <script language="javascript" type="text/javascript">
+                                       $(document).ready(function(){
+                                       goTopEx();
+                                       drawRatio();
+                                       });
+                               </script>
+                       </body>
+               </html>
+       </xsl:template>
+       <xsl:template name="br-replace">
+               <xsl:param name="word" />
+               <xsl:variable name="cr">
+                       <xsl:text>\n</xsl:text>
+               </xsl:variable>
+               <xsl:choose>
+                       <xsl:when test="contains($word,$cr)">
+                               <xsl:value-of select="substring-before($word,$cr)" />
+                               <br />
+                               <xsl:call-template name="br-replace">
+                                       <xsl:with-param name="word" select="substring-after($word,$cr)" />
+                               </xsl:call-template>
+                       </xsl:when>
+                       <xsl:otherwise>
+                               <xsl:value-of select="$word" />
+                       </xsl:otherwise>
+               </xsl:choose>
+       </xsl:template>
+</xsl:stylesheet>
diff --git a/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/shell/style/testresult.xsl b/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/shell/style/testresult.xsl
new file mode 100755 (executable)
index 0000000..244c187
--- /dev/null
@@ -0,0 +1,559 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<xsl:stylesheet version="1.0"
+       xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
+       <xsl:output method="html" version="1.0" encoding="UTF-8"
+               indent="yes" />
+       <xsl:template match="/">
+               <html>
+                       <STYLE type="text/css">
+                               @import "./style/tests.css";
+                       </STYLE>
+                       <head>
+                               <script type="text/javascript" src="./style/jquery.min.js" />
+                               <script type="text/javascript" src="./style/popup.js" />
+                       </head>
+                       <body>
+                               <div id="title">
+                                       <table>
+                                               <tr>
+                                                       <td class="title">
+                                                               <h1 align="center">Suite Test Results</h1>
+                                                       </td>
+                                               </tr>
+                                       </table>
+                               </div>
+                               <div id="btc">
+                                       <table>
+                                               <tr>
+                                                       <td>
+                                                               <a href="#" class="see_all">Show all</a>
+                                                       </td>
+                                                       <td>
+                                                               <a href="#" class="see_failed">Show only failed</a>
+                                                       </td>
+                                                       <td>
+                                                               <a href="#" class="see_blocked">Show only blocked</a>
+                                                       </td>
+                                                       <td>
+                                                               <a href="#" class="see_na">Show only not executed</a>
+                                                       </td>
+                                                       <td>
+                                                               <a href="summary.xml">Summary</a>
+                                                       </td>
+                                               </tr>
+                                       </table>
+                               </div>
+                               <div id="testcasepage">
+                                       <div id="cases">
+                                               <div id="see_all">
+                                                       <xsl:for-each select="test_definition/suite">
+                                                               <div id="suite_title">
+                                                                       <h2>
+                                                                               Test Suite:
+                                                                               <xsl:value-of select="@name" />
+                                                                               (All)
+                                                                       </h2>
+                                                                       <a>
+                                                                               <xsl:attribute name="name">
+                                                                     <xsl:value-of
+                                                                                       select="@name" />
+                                                                  </xsl:attribute>
+                                                                       </a>
+                                                               </div>
+                                                               <table>
+                                                                       <tr>
+                                                                               <th>Case_ID</th>
+                                                                               <th>Purpose</th>
+                                                                               <th>Result</th>
+                                                                               <th>Stdout</th>
+                                                                       </tr>
+                                                                       <xsl:for-each select=".//set">
+                                                                               <tr>
+                                                                                       <xsl:choose>
+                                                                                               <xsl:when test="@name">
+                                                                                                       <td colspan="3">
+                                                                                                               <h3>
+                                                                                                                       Test Set:
+                                                                                                                       <xsl:value-of select="@name" />
+                                                                                                               </h3>
+                                                                                                       </td>
+                                                                                                       <td colspan="1">
+                                                                                                               <h4>
+                                                                                                                       <a>
+                                                                                                                               <xsl:attribute name="href"><xsl:value-of
+                                                                                                                                       select="@set_debug_msg" /></xsl:attribute>
+                                                                                                                               dlog
+                                                                                                                       </a>
+                                                                                                               </h4>
+                                                                                                       </td>
+                                                                                               </xsl:when>
+                                                                                               <xsl:otherwise>
+                                                                                                       <td colspan="4">
+                                                                                                               <h3>
+                                                                                                                       Test Set:
+                                                                                                                       <xsl:value-of select="@name" />
+                                                                                                               </h3>
+                                                                                                       </td>
+                                                                                               </xsl:otherwise>
+                                                                                       </xsl:choose>
+                                                                               </tr>
+                                                                               <xsl:for-each select=".//testcase">
+                                                                                       <tr>
+                                                                                               <td>
+                                                                                                       <div
+                                                                                                               style="background-color:#F5DEB3;border:1px solid black;display:none;">
+                                                                                                               <xsl:attribute name="id"><xsl:value-of
+                                                                                                                       select="@id" /></xsl:attribute>
+                                                                                                               <p>
+                                                                                                                       <xsl:for-each select="./description/steps//step">
+                                                                                                                               <xsl:sort select="@order" />
+                                                                                                                               <B>
+                                                                                                                                       Step
+                                                                                                                                       <xsl:value-of select="@order" />
+                                                                                                                                       :
+                                                                                                                               </B>
+                                                                                                                               <br />
+                                                                                                                               <xsl:value-of select=".//step_desc" />
+                                                                                                                               <br />
+                                                                                                                               <B>Expected:</B>
+                                                                                                                               <xsl:value-of select=".//expected" />
+                                                                                                                               <br />
+                                                                                                                       </xsl:for-each>
+                                                                                                               </p>
+                                                                                                               <p>
+                                                                                                                       <br />
+                                                                                                                       <B>
+                                                                                                                               Entry:
+                                                                                                                               <br />
+                                                                                                                       </B>
+                                                                                                                       <xsl:value-of select="./description//test_script_entry" />
+                                                                                                                       <br />
+                                                                                                               </p>
+                                                                                                       </div>
+                                                                                                       <a href="#" class="test_case_popup">
+                                                                                                               <xsl:attribute name="id"><xsl:value-of
+                                                                                                                       select="@id" /></xsl:attribute>
+                                                                                                               <xsl:value-of select="@id" />
+                                                                                                       </a>
+                                                                                               </td>
+                                                                                               <td>
+                                                                                                       <xsl:value-of select="@purpose" />
+                                                                                               </td>
+
+                                                                                               <xsl:choose>
+                                                                                                       <xsl:when test="@result">
+                                                                                                               <xsl:if test="@result = 'FAIL'">
+                                                                                                                       <td class="red_rate">
+                                                                                                                               <xsl:value-of select="@result" />
+                                                                                                                       </td>
+                                                                                                               </xsl:if>
+                                                                                                               <xsl:if test="@result = 'PASS'">
+                                                                                                                       <td class="green_rate">
+                                                                                                                               <xsl:value-of select="@result" />
+                                                                                                                       </td>
+                                                                                                               </xsl:if>
+                                                                                                               <xsl:if test="@result = 'BLOCK' ">
+                                                                                                                       <td class="orange_rate">
+                                                                                                                               BLOCK
+                                                                                                                       </td>
+                                                                                                               </xsl:if>
+                                                                                                               <xsl:if
+                                                                                                                       test="@result != 'BLOCK' and @result != 'FAIL' and @result != 'PASS' ">
+                                                                                                                       <td class="gray_rate">
+                                                                                                                               Not Run
+                                                                                                                       </td>
+                                                                                                               </xsl:if>
+                                                                                                       </xsl:when>
+                                                                                                       <xsl:otherwise>
+                                                                                                               <td>
+
+                                                                                                               </td>
+                                                                                                       </xsl:otherwise>
+                                                                                               </xsl:choose>
+                                                                                               <td>
+                                                                                                       <xsl:call-template name="br-replace">
+                                                                                                               <xsl:with-param name="word"
+                                                                                                                       select=".//result_info/stdout" />
+                                                                                                       </xsl:call-template>
+                                                                                                       <xsl:if test=".//result_info/stdout = ''">
+                                                                                                               N/A
+                                                                                                       </xsl:if>
+                                                                                               </td>
+                                                                                       </tr>
+                                                                               </xsl:for-each>
+                                                                       </xsl:for-each>
+                                                               </table>
+                                                       </xsl:for-each>
+                                               </div>
+                                               <div id="see_fail" style="display:none;">
+                                                       <xsl:for-each select="test_definition/suite">
+                                                               <div id="suite_title">
+                                                                       <h2>
+                                                                               Test Suite:
+                                                                               <xsl:value-of select="@name" />
+                                                                               (Failed only)
+                                                                       </h2>
+                                                                       <a>
+                                                                               <xsl:attribute name="name">
+                                                                     <xsl:value-of
+                                                                                       select="@name" />
+                                                                  </xsl:attribute>
+                                                                       </a>
+                                                               </div>
+                                                               <table>
+                                                                       <tr>
+                                                                               <th>Case_ID</th>
+                                                                               <th>Purpose</th>
+                                                                               <th>Result</th>
+                                                                               <th>Stdout</th>
+                                                                       </tr>
+                                                                       <xsl:for-each select=".//set">
+                                                                               <tr>
+                                                                                       <xsl:choose>
+                                                                                               <xsl:when test="@name">
+                                                                                                       <td colspan="3">
+                                                                                                               <h3>
+                                                                                                                       Test Set:
+                                                                                                                       <xsl:value-of select="@name" />
+                                                                                                               </h3>
+                                                                                                       </td>
+                                                                                                       <td colspan="1">
+                                                                                                               <h4>
+                                                                                                                       <a>
+                                                                                                                               <xsl:attribute name="href"><xsl:value-of
+                                                                                                                                       select="@set_debug_msg" /></xsl:attribute>
+                                                                                                                               dlog
+                                                                                                                       </a>
+                                                                                                               </h4>
+                                                                                                       </td>
+                                                                                               </xsl:when>
+                                                                                               <xsl:otherwise>
+                                                                                                       <td colspan="4">
+                                                                                                               <h3>
+                                                                                                                       Test Set:
+                                                                                                                       <xsl:value-of select="@name" />
+                                                                                                               </h3>
+                                                                                                       </td>
+                                                                                               </xsl:otherwise>
+                                                                                       </xsl:choose>
+                                                                               </tr>
+                                                                               <xsl:for-each select=".//testcase[@result='FAIL']">
+                                                                                       <tr>
+                                                                                               <td>
+                                                                                                       <div
+                                                                                                               style="background-color:#F5DEB3;border:1px solid black;display:none;">
+                                                                                                               <xsl:attribute name="id">fail_<xsl:value-of
+                                                                                                                       select="@id" /></xsl:attribute>
+                                                                                                               <p>
+                                                                                                                       <xsl:for-each select="./description/steps//step">
+                                                                                                                               <xsl:sort select="@order" />
+                                                                                                                               <B>
+                                                                                                                                       Step
+                                                                                                                                       <xsl:value-of select="@order" />
+                                                                                                                                       :
+                                                                                                                               </B>
+                                                                                                                               <br />
+                                                                                                                               <xsl:value-of select=".//step_desc" />
+                                                                                                                               <br />
+                                                                                                                               <B>Expected:</B>
+                                                                                                                               <xsl:value-of select=".//expected" />
+                                                                                                                               <br />
+                                                                                                                       </xsl:for-each>
+                                                                                                               </p>
+                                                                                                               <p>
+                                                                                                                       <br />
+                                                                                                                       <B>
+                                                                                                                               Entry:
+                                                                                                                               <br />
+                                                                                                                       </B>
+                                                                                                                       <xsl:value-of select="./description//test_script_entry" />
+                                                                                                                       <br />
+                                                                                                               </p>
+                                                                                                       </div>
+                                                                                                       <a href="#" class="test_case_popup">
+                                                                                                               <xsl:attribute name="id">fail_<xsl:value-of
+                                                                                                                       select="@id" /></xsl:attribute>
+                                                                                                               <xsl:value-of select="@id" />
+                                                                                                       </a>
+                                                                                               </td>
+                                                                                               <td>
+                                                                                                       <xsl:value-of select="@purpose" />
+                                                                                               </td>
+
+                                                                                               <td class="red_rate">
+                                                                                                       <xsl:value-of select="@result" />
+                                                                                               </td>
+                                                                                               <td>
+                                                                                                       <xsl:call-template name="br-replace">
+                                                                                                               <xsl:with-param name="word"
+                                                                                                                       select=".//result_info/stdout" />
+                                                                                                       </xsl:call-template>
+                                                                                                       <xsl:if test=".//result_info/stdout = ''">
+                                                                                                               N/A
+                                                                                                       </xsl:if>
+                                                                                               </td>
+                                                                                       </tr>
+                                                                               </xsl:for-each>
+                                                                       </xsl:for-each>
+                                                               </table>
+                                                       </xsl:for-each>
+                                               </div>
+                                               <div id="see_block" style="display:none;">
+                                                       <xsl:for-each select="test_definition/suite">
+                                                               <div id="suite_title">
+                                                                       <h2>
+                                                                               Test Suite:
+                                                                               <xsl:value-of select="@name" />
+                                                                               (Blocked Only)
+                                                                       </h2>
+                                                                       <a>
+                                                                               <xsl:attribute name="name">
+                                                                     <xsl:value-of
+                                                                                       select="@name" />
+                                                                  </xsl:attribute>
+                                                                       </a>
+                                                               </div>
+                                                               <table>
+                                                                       <tr>
+                                                                               <th>Case_ID</th>
+                                                                               <th>Purpose</th>
+                                                                               <th>Result</th>
+                                                                               <th>Stdout</th>
+                                                                       </tr>
+                                                                       <xsl:for-each select=".//set">
+                                                                               <tr>
+                                                                                       <xsl:choose>
+                                                                                               <xsl:when test="@name">
+                                                                                                       <td colspan="3">
+                                                                                                               <h3>
+                                                                                                                       Test Set:
+                                                                                                                       <xsl:value-of select="@name" />
+                                                                                                               </h3>
+                                                                                                       </td>
+                                                                                                       <td colspan="1">
+                                                                                                               <h4>
+                                                                                                                       <a>
+                                                                                                                               <xsl:attribute name="href"><xsl:value-of
+                                                                                                                                       select="@set_debug_msg" /></xsl:attribute>
+                                                                                                                               dlog
+                                                                                                                       </a>
+                                                                                                               </h4>
+                                                                                                       </td>
+                                                                                               </xsl:when>
+                                                                                               <xsl:otherwise>
+                                                                                                       <td colspan="4">
+                                                                                                               <h3>
+                                                                                                                       Test Set:
+                                                                                                                       <xsl:value-of select="@name" />
+                                                                                                               </h3>
+                                                                                                       </td>
+                                                                                               </xsl:otherwise>
+                                                                                       </xsl:choose>
+                                                                               </tr>
+                                                                               <xsl:for-each select=".//testcase[@result='BLOCK']">
+                                                                                       <tr>
+                                                                                               <td>
+                                                                                                       <div
+                                                                                                               style="background-color:#F5DEB3;border:1px solid black;display:none;">
+                                                                                                               <xsl:attribute name="id">block_<xsl:value-of
+                                                                                                                       select="@id" /></xsl:attribute>
+                                                                                                               <p>
+                                                                                                                       <xsl:for-each select="./description/steps//step">
+                                                                                                                               <xsl:sort select="@order" />
+                                                                                                                               <B>
+                                                                                                                                       Step
+                                                                                                                                       <xsl:value-of select="@order" />
+                                                                                                                                       :
+                                                                                                                               </B>
+                                                                                                                               <br />
+                                                                                                                               <xsl:value-of select=".//step_desc" />
+                                                                                                                               <br />
+                                                                                                                               <B>Expected:</B>
+                                                                                                                               <xsl:value-of select=".//expected" />
+                                                                                                                               <br />
+                                                                                                                       </xsl:for-each>
+                                                                                                               </p>
+                                                                                                               <p>
+                                                                                                                       <br />
+                                                                                                                       <B>
+                                                                                                                               Entry:
+                                                                                                                               <br />
+                                                                                                                       </B>
+                                                                                                                       <xsl:value-of select="./description//test_script_entry" />
+                                                                                                                       <br />
+                                                                                                               </p>
+                                                                                                       </div>
+                                                                                                       <a href="#" class="test_case_popup">
+                                                                                                               <xsl:attribute name="id">block_<xsl:value-of
+                                                                                                                       select="@id" /></xsl:attribute>
+                                                                                                               <xsl:value-of select="@id" />
+                                                                                                       </a>
+                                                                                               </td>
+                                                                                               <td>
+                                                                                                       <xsl:value-of select="@purpose" />
+                                                                                               </td>
+
+                                                                                               <td class="orange_rate">
+                                                                                                       <xsl:value-of select="@result" />
+                                                                                               </td>
+                                                                                               <td>
+                                                                                                       <xsl:call-template name="br-replace">
+                                                                                                               <xsl:with-param name="word"
+                                                                                                                       select=".//result_info/stdout" />
+                                                                                                       </xsl:call-template>
+                                                                                                       <xsl:if test=".//result_info/stdout = ''">
+                                                                                                               N/A
+                                                                                                       </xsl:if>
+                                                                                               </td>
+                                                                                       </tr>
+                                                                               </xsl:for-each>
+                                                                       </xsl:for-each>
+                                                               </table>
+                                                       </xsl:for-each>
+                                               </div>
+                                               <div id="see_na" style="display:none;">
+                                                       <xsl:for-each select="test_definition/suite">
+                                                               <div id="suite_title">
+                                                                       <h2>
+                                                                               Test Suite:
+                                                                               <xsl:value-of select="@name" />
+                                                                               (Not executed Only)
+                                                                       </h2>
+                                                                       <a>
+                                                                               <xsl:attribute name="name">
+                                                                     <xsl:value-of
+                                                                                       select="@name" />
+                                                                  </xsl:attribute>
+                                                                       </a>
+                                                               </div>
+                                                               <table>
+                                                                       <tr>
+                                                                               <th>Case_ID</th>
+                                                                               <th>Purpose</th>
+                                                                               <th>Result</th>
+                                                                               <th>Stdout</th>
+                                                                       </tr>
+                                                                       <xsl:for-each select=".//set">
+                                                                               <tr>
+                                                                                       <xsl:choose>
+                                                                                               <xsl:when test="@name">
+                                                                                                       <td colspan="3">
+                                                                                                               <h3>
+                                                                                                                       Test Set:
+                                                                                                                       <xsl:value-of select="@name" />
+                                                                                                               </h3>
+                                                                                                       </td>
+                                                                                                       <td colspan="1">
+                                                                                                               <h4>
+                                                                                                                       <a>
+                                                                                                                               <xsl:attribute name="href"><xsl:value-of
+                                                                                                                                       select="@set_debug_msg" /></xsl:attribute>
+                                                                                                                               dlog
+                                                                                                                       </a>
+                                                                                                               </h4>
+                                                                                                       </td>
+                                                                                               </xsl:when>
+                                                                                               <xsl:otherwise>
+                                                                                                       <td colspan="4">
+                                                                                                               <h3>
+                                                                                                                       Test Set:
+                                                                                                                       <xsl:value-of select="@name" />
+                                                                                                               </h3>
+                                                                                                       </td>
+                                                                                               </xsl:otherwise>
+                                                                                       </xsl:choose>
+                                                                               </tr>
+                                                                               <xsl:for-each select=".//testcase[@result='N/A']">
+                                                                                       <tr>
+                                                                                               <td>
+                                                                                                       <div
+                                                                                                               style="background-color:#F5DEB3;border:1px solid black;display:none;">
+                                                                                                               <xsl:attribute name="id">na_<xsl:value-of
+                                                                                                                       select="@id" /></xsl:attribute>
+                                                                                                               <p>
+                                                                                                                       <xsl:for-each select="./description/steps//step">
+                                                                                                                               <xsl:sort select="@order" />
+                                                                                                                               <B>
+                                                                                                                                       Step
+                                                                                                                                       <xsl:value-of select="@order" />
+                                                                                                                                       :
+                                                                                                                               </B>
+                                                                                                                               <br />
+                                                                                                                               <xsl:value-of select=".//step_desc" />
+                                                                                                                               <br />
+                                                                                                                               <B>Expected:</B>
+                                                                                                                               <xsl:value-of select=".//expected" />
+                                                                                                                               <br />
+                                                                                                                       </xsl:for-each>
+                                                                                                               </p>
+                                                                                                               <p>
+                                                                                                                       <br />
+                                                                                                                       <B>
+                                                                                                                               Entry:
+                                                                                                                               <br />
+                                                                                                                       </B>
+                                                                                                                       <xsl:value-of select="./description//test_script_entry" />
+                                                                                                                       <br />
+                                                                                                               </p>
+                                                                                                       </div>
+                                                                                                       <a href="#" class="test_case_popup">
+                                                                                                               <xsl:attribute name="id">na_<xsl:value-of
+                                                                                                                       select="@id" /></xsl:attribute>
+                                                                                                               <xsl:value-of select="@id" />
+                                                                                                       </a>
+                                                                                               </td>
+                                                                                               <td>
+                                                                                                       <xsl:value-of select="@purpose" />
+                                                                                               </td>
+
+                                                                                               <td class="gray_rate">
+                                                                                                       <xsl:value-of select="@result" />
+                                                                                               </td>
+                                                                                               <td>
+                                                                                                       <xsl:call-template name="br-replace">
+                                                                                                               <xsl:with-param name="word"
+                                                                                                                       select=".//result_info/stdout" />
+                                                                                                       </xsl:call-template>
+                                                                                                       <xsl:if test=".//result_info/stdout = ''">
+                                                                                                               N/A
+                                                                                                       </xsl:if>
+                                                                                               </td>
+                                                                                       </tr>
+                                                                               </xsl:for-each>
+                                                                       </xsl:for-each>
+                                                               </table>
+                                                       </xsl:for-each>
+                                               </div>
+                                       </div>
+                               </div>
+                               <div id="goTopBtn">
+                                       <img border="0" src="./style/back_top.png" />
+                               </div>
+                               <script type="text/javascript" src="./style/application.js" />
+                               <script language="javascript" type="text/javascript">
+                                       $(document).ready(function(){
+                                       goTopEx();
+                                       });
+                               </script>
+                       </body>
+               </html>
+       </xsl:template>
+       <xsl:template name="br-replace">
+               <xsl:param name="word" />
+               <xsl:variable name="cr">
+                       <xsl:text>\n</xsl:text>
+               </xsl:variable>
+               <xsl:choose>
+                       <xsl:when test="contains($word,$cr)">
+                               <xsl:value-of select="substring-before($word,$cr)" />
+                               <br />
+                               <xsl:call-template name="br-replace">
+                                       <xsl:with-param name="word" select="substring-after($word,$cr)" />
+                               </xsl:call-template>
+                       </xsl:when>
+                       <xsl:otherwise>
+                               <xsl:value-of select="$word" />
+                       </xsl:otherwise>
+               </xsl:choose>
+       </xsl:template>
+</xsl:stylesheet>
diff --git a/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/shell/style/tests.css b/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/shell/style/tests.css
new file mode 100755 (executable)
index 0000000..487bca0
--- /dev/null
@@ -0,0 +1,195 @@
+@charset "UTF-8";\r
+/* CSS Document */\r
+#testcasepage div,#testcasepage h1,#testcasepage p,#testcasepage table,#testcasepage tr,#testcasepage th,#testcasepage td\r
+       {\r
+       margin: 0;\r
+       padding: 0;\r
+       border: 0;\r
+       font-weight: inherit;\r
+       font-style: inherit;\r
+       font-size: 0.96em;\r
+       font-family: arial;\r
+       vertical-align: baseline;\r
+}\r
+\r
+#title td, #btc td{\r
+       margin: 0;\r
+       padding: 0;\r
+       border: 0;\r
+       font-weight: inherit;\r
+       font-style: inherit;\r
+       font-size: 0.96em;\r
+       font-family: arial;\r
+       vertical-align: baseline;\r
+}\r
+\r
+td.Ratio {\r
+       text-align: left;\r
+       font-weight: normal;\r
+       padding: 4px 10px 4px 5px;\r
+       vertical-align: middle;\r
+}\r
+\r
+th.Ratio {\r
+       width: 400px;\r
+}\r
+\r
+#testcasepage p {\r
+       text-align: left;\r
+}\r
+\r
+#suite_title {\r
+       text-align: left;\r
+}\r
+\r
+#btc {\r
+       text-align: right;\r
+}\r
+\r
+#btc table {\r
+       position: absolute;\r
+       right: 0px;\r
+       width: 600px;\r
+}\r
+\r
+#testcasepage table {\r
+       border-collapse: separate;\r
+       border-spacing: 0;\r
+       margin-bottom: 1.4em;\r
+       vertical-align: middle;\r
+}\r
+\r
+#testcasepage th,#testcasepage td {\r
+       text-align: left;\r
+       font-weight: normal;\r
+       padding: 4px 10px 4px 5px;\r
+       vertical-align: middle;\r
+}\r
+\r
+#cases table {\r
+       width: 101%;\r
+}\r
+\r
+#cases td {\r
+       border-left: 0px;\r
+       font-weight: normal;\r
+       border-bottom: 0px;\r
+}\r
+\r
+#suite_summary table {\r
+       width: 100%;\r
+}\r
+\r
+\r
+#overview table {\r
+       width: 101%;\r
+}\r
+\r
+#overview table, #overview td, #overview tr {\r
+       border-left: none;\r
+       border-bottom: none;\r
+       border-right: none;\r
+       vertical-align: top;\r
+}\r
+\r
+#overview td{\r
+       width: 50%;\r
+}\r
+\r
+#capability table {\r
+       width: 50%;\r
+}\r
+\r
+#fail_cases table {\r
+       width: 101%;\r
+}\r
+\r
+#title table {\r
+       width: 101%;\r
+}\r
+\r
+#device table {\r
+       width: 100%;\r
+}\r
+\r
+#summary table {\r
+       width: 100%;\r
+}\r
+\r
+#testcasepage th {\r
+       border-bottom: 1px solid #000;\r
+       background-color: #AAAAAA;\r
+       border-left: 1px solid #000;\r
+       border-top: 1px solid #000;\r
+       color: #000;\r
+       font-weight: bold;\r
+       vertical-align: bottom;\r
+}\r
+\r
+#summary th:last-child,#summary td:last-child, #device th:last-child,#device td:last-child, #suite_summary th:last-child,#suite_summary td:last-child,#cases th:last-child,#cases td:last-child,#capability th:last-child,#capability td:last-child {\r
+       border-right: 1px solid #000;\r
+}\r
+\r
+#testcasepage td {\r
+       font-weight: normal;\r
+}\r
+\r
+#summary td, #device td, #capability td, #suite_summary td, #cases td{\r
+       border-left: 1px solid;\r
+       font-weight: normal;\r
+       border-bottom: 1px solid;\r
+}\r
+\r
+#testcasepage td.yellow_rate {\r
+       background-color: #ffcc00;\r
+}\r
+\r
+#testcasepage td.green_rate {\r
+       background-color: #1E90FF;\r
+}\r
+\r
+#testcasepage td.dgreen_rate {\r
+       background-color: #339933;\r
+}\r
+\r
+#testcasepage td.red_rate {\r
+       background-color: #FF3333;\r
+}\r
+\r
+#testcasepage td.orange_rate {\r
+       background-color: #FFA500;\r
+}\r
+\r
+#testcasepage td.gray_rate {\r
+       background-color: #AAAAAA;\r
+}\r
+\r
+#title table,#title tr,#title td {\r
+       border-left: none;\r
+       border-bottom: none;\r
+       text-align: center;\r
+}\r
+\r
+#title td:last-child {\r
+       border-right: none;\r
+}\r
+\r
+#testcasepage h1 {\r
+       font-size: 2em;\r
+       font-family: Arial, sans-serif;\r
+       font-weight: bold;\r
+       line-height: 1;\r
+       color: #000;\r
+       margin-bottom: 0.75em;\r
+       padding-top: 0.25em;\r
+       font-weight: bold;\r
+}\r
+\r
+#goTopBtn {\r
+       right: 0px;\r
+       bottom: 0px;\r
+       position: fixed; +\r
+       position: absolute;\r
+       top: expression(parseInt(document.body.scrollTop)+document.body.clientHeight-40\r
+               );\r
+}\r
diff --git a/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/shell/tct-plan-generator b/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/shell/tct-plan-generator
new file mode 100755 (executable)
index 0000000..855eb22
--- /dev/null
@@ -0,0 +1,42 @@
+#!/usr/bin/python
+#
+# Copyright (C) 2012 Intel Corporation
+# 
+# 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
+# of the License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
+#
+# Authors:
+#              Tang, Shaofeng <shaofeng.tang@intel.com>
+
+
+import sys
+from tctshell.plan_options import PlanGeneratorOptions
+from tctshell.plan_runner import PlanRunner
+
+
+def main():
+    wrapper = PlanGeneratorOptions()
+    wrapper.parse_options(sys.argv)
+    output = wrapper.get_output()
+
+    runner = PlanRunner()
+    runner.load_local_repo(wrapper.get_repository_folder(), \
+            wrapper.get_tizenV(), wrapper.get_match_regex(), \
+            wrapper.get_unmatch_regex(), wrapper.get_plan_name(),\
+            wrapper.get_profile_name(), wrapper.get_execute_type())
+
+    runner.to_xml(output)
+
+if __name__ == "__main__":
+    main()
diff --git a/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/shell/tct-scen-generator b/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/shell/tct-scen-generator
new file mode 100755 (executable)
index 0000000..442adfb
--- /dev/null
@@ -0,0 +1,20 @@
+#!/usr/bin/python
+
+import sys
+from tctshell.scenario_options import ScenarioGeneratorOptions
+from tctshell.scenario_runner import ScenarioRunner
+
+
+def main():
+    wrapper = ScenarioGeneratorOptions()
+    wrapper.parse_options(sys.argv)
+    output = wrapper.get_output()
+    runner = ScenarioRunner()
+    runner.load_local_repo(wrapper.get_planlist_args(), \
+            wrapper.get_plansrc_folder(), wrapper.get_scen_name(), \
+            wrapper.getPlanList(), wrapper.getDeviceList())
+
+    runner.to_xml(output)
+
+if __name__ == "__main__":
+    main()
diff --git a/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/shell/tct-shell b/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/shell/tct-shell
new file mode 100755 (executable)
index 0000000..3600866
--- /dev/null
@@ -0,0 +1,156 @@
+#!/usr/bin/python
+#
+# Copyright (C) 2012 Intel Corporation
+# 
+# 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
+# of the License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
+#
+# Authors:
+#              Tang, Shaofeng <shaofeng.tang@intel.com>
+
+import os
+import sys
+import traceback
+import timeit
+import logging
+import threading
+
+from tctshell.shellwrapper import ShellWrapper
+from tctshell.intention_generator import IntentionGenerator
+from tctshell.shellplanner import MultiRunnPlan
+from tctshell.shellworker import PlanExecutor
+from tctshell.distribute_plan import AutoPlanExecutor
+from tctshell.result_manager import ResultManager
+from tctshell.logmanager import LOGGER
+from tctshell.constants import Constants
+from tctshell.environment_manager import EnvironmentManager
+from tctshell.devicemanager import DevBaseManager
+from tctshell.sdbmanager import SdbManager
+
+
+def main():
+    #time check
+    env_manager = None
+    plans = None
+    devmgr = None
+    try:
+        start_time = timeit.default_timer()
+
+        devbaseMgr = DevBaseManager()
+        devbaseMgr.start()
+
+        devmgr = devbaseMgr.DeviceManager()
+        wrapper = ShellWrapper(devmgr)
+        wrapper.parse_options(sys.argv)
+
+        isPreconSet = wrapper.is_enable_preconf_func()
+
+        devmgr.setDbuteDevIds(wrapper.getDbuteDevIds())
+
+        resultIns = ResultManager()
+        plans = IntentionGenerator.genIntentionData(wrapper, devmgr)
+
+        if plans is None:
+            LOGGER.error("Not found test suites")
+            raise
+
+        env_manager = EnvironmentManager(plans, isPreconSet, \
+                wrapper.get_tracking_dump(), devmgr)
+        env_manager.setup()
+
+        MRP_i = MultiRunnPlan.getInstance()
+        pExecutor = []
+        if plans:
+            for plan in plans:
+                if len(plan.getSuites()) > 0:
+                    MRP_i.addPlan(plan.getPlanName(), plan)
+
+            resultManager = threading.Thread(\
+                    target=resultIns.waitForFinishedPlans, name="ResultManager")
+            resultManager.start()
+
+            for counter, plan in enumerate(MRP_i.getPlanDict().values()):
+                th = None
+                if Constants.isDistMode():
+                    th = AutoPlanExecutor(plan, counter + 1, isPreconSet, \
+                            env_manager, wrapper.get_run_timeout(), devmgr)
+                else:
+                    th = PlanExecutor(plan, counter + 1, isPreconSet, devmgr)
+
+                pExecutor.append(th)
+
+            if Constants.isDistMode():
+                for plan_thread in pExecutor:
+                    env_manager.recovery_setup(plan_thread.autop_executors)
+
+            for thread in pExecutor:
+                thread.start()
+
+            env_manager.start_monitor()
+
+            pExecutor.append(resultManager)
+            for thread in pExecutor:
+                thread.join()
+
+        env_manager.kill_monitors()
+        LOGGER.info("[ Succeed to complete TCT-shell execution, good-bye ]")
+
+        #time_check
+        end_time = timeit.default_timer()
+        timetaken = end_time - start_time
+        LOGGER.debug("Time taken: %d min %d sec" % (timetaken / 60, \
+            timetaken % 60))
+
+        logging.shutdown()
+        wrapper.fetch_logs(pExecutor)
+        sys.exit(0)
+    except SystemExit:
+        raise
+
+    except KeyboardInterrupt:
+        Constants.clean_unzip_file()
+        logging.shutdown()
+        print ('\nKeyboardInterrupt')
+        print ("Logs saved to ['/opt/tools/shell/tmp/logs']")
+        if threading.activeCount() > 1:
+            os._exit(1)
+        else:
+            sys.exit(1)
+    except:
+        if env_manager:
+            env_manager.kill_monitors()
+
+        if Constants.isDistMode():
+            if plans:
+                for plan in plans:
+                    for dev in devmgr.getSdbDeviceList():
+                        SdbManager.exportDumpFiles(dev.getDeviceId(), \
+                                plan.getResultFolderPath() + "/dump")
+
+        Constants.clean_unzip_file()
+        LOGGER.info("[ Failed to complete TCT-shell execution, good-bye ]")
+        logging.shutdown()
+        print ('-' * 60)
+        traceback.print_exc(file=sys.stdout)
+        print ('-' * 60)
+        print ("Please check logs in [/opt/tools/shell/tmp/logs/]")
+        if threading.activeCount() > 1:
+            os._exit(1)
+        else:
+            sys.exit(1)
+
+
+if __name__ == "__main__":
+    main()
+
diff --git a/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/shell/tctshell/__init__.py b/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/shell/tctshell/__init__.py
new file mode 100755 (executable)
index 0000000..8b13789
--- /dev/null
@@ -0,0 +1 @@
+
diff --git a/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/shell/tctshell/commodule/__init__.py b/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/shell/tctshell/commodule/__init__.py
new file mode 100755 (executable)
index 0000000..8b13789
--- /dev/null
@@ -0,0 +1 @@
+
diff --git a/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/shell/tctshell/commodule/__init__.pyc b/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/shell/tctshell/commodule/__init__.pyc
new file mode 100755 (executable)
index 0000000..d68fe56
Binary files /dev/null and b/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/shell/tctshell/commodule/__init__.pyc differ
diff --git a/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/shell/tctshell/commodule/killall.py b/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/shell/tctshell/commodule/killall.py
new file mode 100755 (executable)
index 0000000..664337d
--- /dev/null
@@ -0,0 +1,74 @@
+#!/usr/bin/python
+#
+# Copyright (C) 2012 Intel Corporation
+#
+# 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
+# of the License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor,
+# Boston, MA  02110 - 1301, USA.
+#
+# Authors:
+#              Zhang, Huihui <huihuix.zhang@intel.com>
+#              Wendong,Sui  <weidongx.sun@intel.com>
+""" The process kill for os"""
+
+import os
+import platform
+import signal
+import re
+import ctypes
+
+
+def killall(ppid):
+    """Kill all children process by parent process ID"""
+    os_ver = platform.system()
+    try:
+        if os_ver == "Linux" or os_ver == "Darwin":
+            ppid = str(ppid)
+            pidgrp = []
+
+            def getchildpids(ppid):
+                """Return a list of children process"""
+                command = "ps -ef | awk '{if ($3 == %s) print $2;}'" % str(
+                    ppid)
+                pids = os.popen(command).read()
+                pids = pids.split()
+                return pids
+
+            pidgrp.extend(getchildpids(ppid))
+            for pid in pidgrp:
+                pidgrp.extend(getchildpids(pid))
+            # Insert self process ID to PID group list
+            pidgrp.insert(0, ppid)
+            while len(pidgrp) > 0:
+                pid = pidgrp.pop()
+                try:
+                    os.kill(int(pid), signal.SIGKILL)
+                except OSError as error:
+                    pattern = re.compile('No such process')
+                    match = pattern.search(str(error))
+                    if not match:
+                        print ("[ Error: fail to kill pid: %s," \
+                            " error: %s ]\n" % (int(pid), error))
+        # kill for windows platform
+        else:
+            kernel32 = ctypes.windll.kernel32
+            handle = kernel32.OpenProcess(1, 0, int(ppid))
+            kernel32.TerminateProcess(handle, 0)
+    except OSError as error:
+        pattern = re.compile('No such process')
+        match = pattern.search(str(error))
+        if not match:
+            print ("[ Error: fail to kill pid: %s, error: %s ]\n" \
+                % (int(ppid), error))
+    return None
diff --git a/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/shell/tctshell/commodule/killall.pyc b/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/shell/tctshell/commodule/killall.pyc
new file mode 100755 (executable)
index 0000000..0e9c3d3
Binary files /dev/null and b/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/shell/tctshell/commodule/killall.pyc differ
diff --git a/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/shell/tctshell/constants.py b/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/shell/tctshell/constants.py
new file mode 100755 (executable)
index 0000000..41141a3
--- /dev/null
@@ -0,0 +1,436 @@
+#!/usr/bin/python
+#
+# Copyright (C) 2012 Intel Corporation
+#
+# 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
+# of the License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor,
+# Boston, MA  02110-1301, USA.
+#
+# Authors:
+#              Tang, Shaofeng <shaofeng.tang@intel.com>
+
+import re
+import os
+import os.path
+import zipfile
+import shutil
+import configparser
+from .logmanager import LOGGER
+
+TCT_CONFIG_FILE = "/opt/tools/TCT_CONFIG"
+tct_parser = configparser.ConfigParser()
+tct_parser.read(TCT_CONFIG_FILE)
+
+CONFIG_FILE = "/opt/tools/shell/CONFIG"
+parser = configparser.ConfigParser()
+parser.read(CONFIG_FILE)
+
+
+class Constants:
+
+    TCT_VERSION = "TCT-SHELL-3.0"
+
+    TCT_HOME = "/opt/tct/"
+
+    SUITE_TEST_EXPECTED_TIME = 7
+
+    TCT_PLAN_FOLDER = "/opt/tools/shell/plan/"
+
+    TCT_SCEN_FOLDER = "/opt/tools/shell/scen/"
+
+    STYLE_FOLDER = "/opt/tools/shell/style/"
+
+    DEVICE_HEALTH_CMD = "/opt/tct/%s/scripts/tct-config-device.py"
+
+    HEALTH_CHECK_FILE_PATH = "/opt/tct/%s/scripts/healthcheck.ini"
+
+    RESULT_FOLDER = "/opt/tct/%s/shell/result/%s/"
+
+    RESULT_REPO = "/opt/tct/%s/shell/result/%s/"
+
+    AUTO_RESULT_SUFFIX = ".auto.xml"
+
+    MANUAL_RESULT_SUFFIX = ".manual.xml"
+
+    RERUN_AUTO_RESULT_SUFFIX = ".auto.rerun.xml"
+
+    RERUN_MANUAL_RESULT_SUFFIX = ".manual.rerun.xml"
+
+    RERUN_SUFFIX = ".rerun.xml"
+
+    TCT_LOG_FOLDER = "/opt/tools/shell/tmp/logs"
+
+    DEFAULT_TIZENV = ""
+
+    #SDB Command
+    SDB_PUSH = "sdb -s %s push"
+    SDB_SHELL = "sdb -s %s shell"
+    SDB_ROOT_ON = "sdb -s %s root on"
+    SDB_DEVICES = "sdb devices"
+    SDB_START_SERVER = "sdb start-server"
+    SDB_KILL_SERVER = "sdb kill-server"
+    SDB_CONNECT = "sdb connect %s"
+    SDB_PULL = "sdb -s %s pull"
+    SDB_CAT_CONFIG = " cat %s"
+    SDB_LS = "sdb -s %s shell ls -al"
+    SDB_DISPLAY_STOP = "sdb -s %s shell devicectl display stop"
+    FILE_FOUND_SCRIPT = "[ -f %s ] && echo \"Found\" || echo \"Not Found\""
+
+    UNZIP = "unzip -uo"
+
+    LOCAL_CAPABILITY_PATH = "/opt/tools/shell/tmp/%s/device_capability.xml"
+    LOCAL_BUILD_INFO_PATH = "/opt/tools/shell/tmp/%s/buildinfo.xml"
+    LOCAL_SHELL_TEMP_PATH = "/opt/tools/shell/tmp/%s/"
+
+    #Testkit-Lite
+    LITE_CMD1 = "testkit-lite1.0"
+    LITE_CMD2 = "testkit-lite2.0"
+    PRIORITY_VALUE = False
+    PRIORITY = "--priority P0 P1"
+    LOCAL_PRE = "-f "
+    DEVICE_PRE = "-f device:"
+    LITE_E_PARAM = "-e ""WRTLauncher"""
+    LITE_NON_ACTIVE_PARAM = "--non-active"
+    LITE_DEVICE_PARAM = "--deviceid"
+    LITE_CAPABILITY_PARAM = "--capability"
+    TESTCASE_ID = "--id"
+    EXECUTE_PREFF = " -e "
+    ONLY_AUTO_CASES = "-A"
+    ONLY_MANUAL_CASES = "-M"
+
+    DEVICE_SUITE_DEF = "tests.xml"
+    LITE_OUTPUT_PARAM = "-o "
+    EXT_TYPE_PARAM = "-e xwalk"
+    ENV_TYPE_PARAM = "--testenv \"Launcher=app_launcher \""
+    COMM_TYPE_PARAM = "--comm tizenmobile"
+    WRT_LAUNCHER_CMD = "WRTLauncher"
+
+    #HOST/OPT
+    SUITES_REPOSITORY = "/opt/tct/%s/packages/"
+
+    INSTALL_ZIP_24 = "inst.sh"
+    INSTALL_ZIP_W3 = "inst.py"
+
+    UNINSTALL_ZIP_24 = "inst.sh -u"
+    UNINSTALL_ZIP_W3 = "inst.py -u"
+
+    #Scenario Generator
+    DEFAULT_SCEN_NAME = "Scen_Full_test"
+
+    #Plan Generator
+    ALL_PROFILES = ['mobile', 'wearable', 'tv']
+    DEFAULT_MATCH_REGEX = "*.zip"
+    DEFAULT_UNMATCH_REGEX = None
+    DEFAULT_PLAN_NAME = "Full_test"
+    DEFAULT_PROFILE_NAME = "mobile"
+    DEFAULT_EXECUTE_TYPE = "All"
+    DEFAULT_PLAN_FILE = "tct_plan"
+
+    REGEX_FOR_SPLIT_PKG_NAME = "-\d\.\d*"
+
+    #Log Level
+    DEFAULT_LOG_LEVEL = "INFO"
+    LOG_LEVEL = None
+    LOG_LEVELS = {"CRITICAL": 50,
+                   "ERROR": 40,
+                   "WARNING": 30,
+                   "INFO": 20,
+                   "DEBUG": 10,
+                   "NOTSET": 0
+                   }
+
+    #Running Mode
+    RUNNING_MODE_PLAN = "plan"
+    RUNNING_MODE_SCEN = "scenario"
+    RUNNING_MODE_RERUN = "rerun"
+    RUNNING_MODE_SUITES = "suites"
+    RUNNING_MODE_PROFILE = "profile"
+    RERUNING_MODE = False
+    SCENARIO_MODE = False
+    DISTRIBUTE_MODE = False
+
+    #PRECONFIGURE
+    PRE_CONF_HOST_INI = "/opt/tools/shell/tmp/%s/tct-testconfig.ini"
+    PRE_CONF_HOST_JSON = "/opt/tools/shell/tmp/%s/preconfigure.json"
+    PRE_CONF_HOST_XML = "/opt/tools/shell/tmp/%s/tests.xml"
+    PORT_CONF_HOST_JSON = "/opt/tools/shell/tmp/%s/portconfigure.json"
+    NAT_CONF_HOST_TXT = "/opt/tools/shell/tmp/%s/TC_Config.txt"
+    NAT_CONF_DEVICE_TXT = "/opt/usr/home/owner/share/"
+
+    #Waiting Time
+    #DEBUG PURPOSE. Original value: 300
+    NO_WORKERS_TIMEOUT = 300
+    #Temporary constant value. Should be dynamic.
+    RECOVERY_TIME = 100
+
+    DEVICE_SUITE_TARGET_24 = tct_parser.get('DEVICE', 'DEVICE_SUITE_TARGET_24')
+    DEVICE_SUITE_TARGET_30 = tct_parser.get('DEVICE', 'DEVICE_SUITE_TARGET_30')
+
+    @staticmethod
+    def setRecoveryTime(timeout):
+        Constants.RECOVERY_TIMEOUT = timeout
+
+    @staticmethod
+    def getDEVICE_TESTS_FILE(_tizenV):
+        if _tizenV and float(_tizenV.split('_')[-1]) >= 3.0:
+            return os.path.join(Constants.DEVICE_SUITE_TARGET_30, "tct/opt/%s/tests.xml")
+        else:
+            return os.path.join(Constants.DEVICE_SUITE_TARGET_24, "tct/opt/%s/tests.xml")
+
+    @staticmethod
+    def getDEVICE_SUITE_TARGET(_tizenV):
+        if _tizenV and float(_tizenV.split('_')[-1]) >= 3.0:
+            return os.path.join(Constants.DEVICE_SUITE_TARGET_30, "tct/")
+        else:
+            return os.path.join(Constants.DEVICE_SUITE_TARGET_24, "tct/")
+
+    @staticmethod
+    def getDEVICE_SUITE_FOLDER(_tizenV):
+        if _tizenV and float(_tizenV.split('_')[-1]) >= 3.0:
+            return os.path.join(Constants.DEVICE_SUITE_TARGET_30, "tct/opt/")
+        else:
+            return os.path.join(Constants.DEVICE_SUITE_TARGET_24, "tct/opt/")
+
+    @staticmethod
+    def getDEVICE_BUILD_INFO_PATH(_tizenV):
+        if _tizenV and float(_tizenV.split('_')[-1]) >= 3.0:
+            return os.path.join(Constants.DEVICE_SUITE_TARGET_30, "Documents/tct/buildinfo.xml")
+        else:
+            return os.path.join(Constants.DEVICE_SUITE_TARGET_24, "Documents/tct/buildinfo.xml")
+
+    @staticmethod
+    def getDEVICE_CAPABILITY_PATH(_tizenV):
+        if _tizenV and float(_tizenV.split('_')[-1]) >= 3.0:
+            return os.path.join(Constants.DEVICE_SUITE_TARGET_30, "Documents/tct/capability.xml")
+        else:
+            return os.path.join(Constants.DEVICE_SUITE_TARGET_24, "Documents/tct/capability.xml")
+
+    @staticmethod
+    def getPRE_CONF_DEVICE_INI(_tizenV):
+        if _tizenV and float(_tizenV.split('_')[-1]) >= 3.0:
+            return os.path.join(Constants.DEVICE_SUITE_TARGET_30, "tct/opt/tct-testconfig/tct-testconfig.ini")
+        else:
+            return os.path.join(Constants.DEVICE_SUITE_TARGET_24, "tct/opt/tct-testconfig/tct-testconfig.ini")
+
+    @staticmethod
+    def getPRE_CONF_DEVICE_JSON(_tizenV):
+        if _tizenV and float(_tizenV.split('_')[-1]) >= 3.0:
+            return os.path.join(Constants.DEVICE_SUITE_TARGET_30, "tct/opt/tct-testconfig/preconfigure.json")
+        else:
+            return os.path.join(Constants.DEVICE_SUITE_TARGET_24, "tct/opt/tct-testconfig/preconfigure.json")
+
+    @staticmethod
+    def getPRE_CONF_DEVICE_XML(_tizenV):
+        if _tizenV and float(_tizenV.split('_')[-1]) >= 3.0:
+            return os.path.join(Constants.DEVICE_SUITE_TARGET_30, "tct/opt/tct-testconfig/tests.xml")
+        else:
+            return os.path.join(Constants.DEVICE_SUITE_TARGET_24, "tct/opt/tct-testconfig/tests.xml")
+
+    @staticmethod
+    def getPORT_CONF_DEVICE_JSON(_tizenV):
+        if _tizenV and float(_tizenV.split('_')[-1]) >= 3.0:
+            return os.path.join(Constants.DEVICE_SUITE_TARGET_30, "tct/opt/tct-testconfig/portconfigure.json")
+        else:
+            return os.path.join(Constants.DEVICE_SUITE_TARGET_24, "tct/opt/tct-testconfig/portconfigure.json")
+
+    @staticmethod
+    def getTCT_PORT_CONF_DEVICE_JSON(_tizenV):
+        if _tizenV and float(_tizenV.split('_')[-1]) >= 3.0:
+            return os.path.join(Constants.DEVICE_SUITE_TARGET_30, "tct/portconfigure.json")
+        else:
+            return os.path.join(Constants.DEVICE_SUITE_TARGET_24, "tct/portconfigure.json")
+
+    @staticmethod
+    def getTCT_PRE_CONF_DEVICE_JSON(_tizenV):
+        if _tizenV and float(_tizenV.split('_')[-1]) >= 3.0:
+            return os.path.join(Constants.DEVICE_SUITE_TARGET_30, "tct/preconfigure.json")
+        else:
+            return os.path.join(Constants.DEVICE_SUITE_TARGET_24, "tct/preconfigure.json")
+
+    @staticmethod
+    def getNAT_CONF_DEVICE_TXT(_tizenV):
+        if _tizenV and float(_tizenV.split('_')[-1]) >= 3.0:
+            return os.path.join(Constants.DEVICE_SUITE_TARGET_30, "tct/opt/tct-testconfig/TC_Config.txt")
+        else:
+            return os.path.join(Constants.DEVICE_SUITE_TARGET_24, "tct/opt/tct-testconfig/TC_Config.txt")
+
+    @staticmethod
+    def setLogLevel(lvl):
+        Constants.LOG_LEVEL = lvl
+
+    @staticmethod
+    def setRerunMode(isRerun):
+        Constants.RERUNING_MODE = isRerun
+
+    @staticmethod
+    def setScenMode(isScen):
+        Constants.SCENARIO_MODE = isScen
+
+    @staticmethod
+    def setDistMode(isDist):
+        Constants.DISTRIBUTE_MODE = isDist
+
+    @staticmethod
+    def isDistMode():
+        return Constants.DISTRIBUTE_MODE
+
+    @staticmethod
+    def isScenMode():
+        return Constants.SCENARIO_MODE
+
+    @staticmethod
+    def checkBuildIds(devs):
+        check = True
+        if len(devs) == 0:
+            check = False
+
+        first_buildId = None
+        for count, dev in enumerate(devs):
+            dev_buildId = dev.getDeviceBuildId()
+            if count == 0:
+                first_buildId = dev_buildId
+            if not dev_buildId:
+                check = False
+            if not first_buildId in dev_buildId:
+                check = False
+
+        return check
+
+    @staticmethod
+    def getSuiteNameFromFile(suiteFile):
+        suffixes = [Constants.AUTO_RESULT_SUFFIX, \
+                 Constants.MANUAL_RESULT_SUFFIX, \
+                 Constants.RERUN_AUTO_RESULT_SUFFIX, \
+                 Constants.RERUN_MANUAL_RESULT_SUFFIX]
+        for suffix in suffixes:
+            if suiteFile.endswith(suffix):
+                suiteFile = suiteFile[:-len(suffix)]
+                return suiteFile
+
+    @staticmethod
+    def checkFileExists(aPath):
+        if os.path.exists(aPath):
+            return True
+        else:
+            return False
+
+    @staticmethod
+    def getTempPath(filepath):
+        xmlFolder = Constants.LOCAL_SHELL_TEMP_PATH % "temp_xml"
+        if not os.path.isdir(xmlFolder):
+            os.makedirs(xmlFolder, mode=0o777)
+
+        xml_name = os.path.basename(filepath)
+        temp_path = os.path.join(xmlFolder, xml_name)
+        return temp_path
+
+    @staticmethod
+    def unzip_package(filepath):
+        path = os.path.expanduser("~")
+        os.chdir(path)
+        if os.path.exists(Constants.DEFAULT_PLAN_FILE):
+            shutil.rmtree(Constants.DEFAULT_PLAN_FILE)
+
+        os.makedirs(Constants.DEFAULT_PLAN_FILE, mode=0o777)
+        f = zipfile.ZipFile(filepath, 'r')
+        for file in f.namelist():
+            f.extract(file, path + "/" + Constants.DEFAULT_PLAN_FILE)
+
+    @staticmethod
+    def clean_unzip_file():
+        os.chdir(os.path.expanduser("~"))
+        if os.path.exists(Constants.DEFAULT_PLAN_FILE):
+            shutil.rmtree(Constants.DEFAULT_PLAN_FILE)
+
+    @staticmethod
+    def move_log_file(src_file, dest_folder):
+        log_folder = os.path.join(dest_folder, 'logs')
+        if not os.path.isfile(src_file):
+            LOGGER.warning('%s does not exist' % src_file)
+            return False
+        if not os.path.isdir(log_folder):
+            os.mkdir(log_folder, mode=0o777)
+
+        count = 1
+        src_basename = os.path.basename(src_file)
+        src_dir = os.path.dirname(src_file)
+        title, ext = os.path.splitext(src_basename)
+        while True:
+            if os.path.exists(os.path.join(log_folder, src_basename)):
+                src_basename = title + "_%s%s" % (count, ext)
+                count += 1
+            else:
+                break
+
+        rename_src = os.path.join(src_dir, src_basename)
+        os.rename(src_file, rename_src)
+        shutil.copy(rename_src, log_folder)
+        return True
+
+    @staticmethod
+    def indent(elem, level=0):
+        i = "\n" + level * "  "
+        if len(elem):
+            if not elem.text or not elem.text.strip():
+                elem.text = i + "  "
+            if not elem.tail or not elem.tail.strip():
+                elem.tail = i
+            for elem in elem:
+                Constants.indent(elem, level + 1)
+            if not elem.tail or not elem.tail.strip():
+                elem.tail = i
+        else:
+            if level and (not elem.tail or not elem.tail.strip()):
+                elem.tail = i
+
+    @staticmethod
+    def isSdbNetwork(deviceId):
+        patt = re.compile('\d{1,3}\.\d{1,3}\.\d{1,3}.\d{1,3}:')
+        ma = patt.match(deviceId)
+        if ma:
+            return True
+        else:
+            return False
+
+    '''
+    @staticmethod
+    def getDeviceExceptions():
+        devices = []
+        try:
+            devs = parser.get('DISTRIBUTE_MODE', 'DEVICE_EXCEPTIONS')
+            devs = devs.splitlines()
+            for dev in devs:
+                if dev != '':
+                    devices.append(dev)
+                    LOGGER.info("Ignoring device: %s" % dev)
+        except Exception as e:
+            LOGGER.error("CONFIG file Parsing Error: %s" % e)
+        finally:
+            return devices
+    '''
+
+    @staticmethod
+    def set_default_tizenV(_tizenV):
+        Constants.DEFAULT_TIZENV = _tizenV
+
+    @staticmethod
+    def get_tct_binaryV():
+        tct_binV = ""
+        ver_path = '/opt/tct/%s/VERSION' % Constants.DEFAULT_TIZENV
+        if os.path.exists(ver_path):
+            ver_file = open('/opt/tct/%s/VERSION' % \
+                    Constants.DEFAULT_TIZENV, 'r')
+            tct_binV = ver_file.readline().strip()
+        return tct_binV
+
diff --git a/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/shell/tctshell/constants.pyc b/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/shell/tctshell/constants.pyc
new file mode 100755 (executable)
index 0000000..fa2f2c7
Binary files /dev/null and b/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/shell/tctshell/constants.pyc differ
diff --git a/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/shell/tctshell/devicemanager.py b/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/shell/tctshell/devicemanager.py
new file mode 100755 (executable)
index 0000000..33469dc
--- /dev/null
@@ -0,0 +1,184 @@
+#!/usr/bin/python
+
+import queue
+from multiprocessing.managers import BaseManager
+
+from .sdbmanager import SdbManager
+from .constants import Constants
+from .logmanager import LOGGER
+from xml.etree import ElementTree
+from .exception import DevNotFoundErr
+
+
+class DeviceManager(object):
+    devices = []
+    dbutedevIds = []
+    dumpMonitor_q = queue.Queue()
+
+    def __init__(self):
+        if len(self.devices) == 0:
+            self.loadDeviceList()
+
+    def _updateConnDevice(self, connDevices):
+        self._resetDevices()
+
+        for dev in connDevices:
+            self.devices.append(dev)
+
+    def _resetDevices(self):
+        listSize = len(self.devices)
+        del self.devices[0:listSize]
+
+    def deleteFaultDevice(self, _devid):
+        if len(self.devices) < 1:
+            return False
+        else:
+            devs = self.getSdbDeviceList()
+            for idx, dev in enumerate(devs):
+                devId = dev.getDeviceId()
+                if devId == _devid:
+                    del self.devices[idx]
+                    return True
+        return False
+
+    def isDeviceAvailable(self, deviceId):
+        if len(self.devices) == 0:
+            return False
+        else:
+            devs = self.getSdbDeviceList()
+            for dev in devs:
+                devId = dev.getDeviceId()
+                if devId == deviceId:
+                    return True
+        return False
+
+    def getDeviceSize(self):
+        return len(self.devices)
+
+    def getSdbDeviceList(self):
+        if self.dbutedevIds:
+            remake_devices = []
+            for devid in self.dbutedevIds:
+                dev = self.getDevice(devid)
+                if dev:
+                    remake_devices.append(dev)
+
+            return remake_devices
+        else:
+            return self.devices
+
+    def getDevice(self, deviceId):
+        for dev in self.devices:
+            if dev.getDeviceId() == deviceId:
+                return dev
+
+        LOGGER.error("The '%s' device Id exists error" % deviceId)
+        return None
+
+    def loadDeviceList(self):
+        connDevices = []
+        sdbOutLog = SdbManager.sdbDevices()
+        if not sdbOutLog:
+            return False
+        devicesInfo = sdbOutLog.replace("List of devices attached", "")
+        devList = devicesInfo.split('\n')
+
+        for dev in devList:
+            if len(dev) > 1:
+                devInfoItem = dev.split('\t')
+                if len(devInfoItem) < 2:
+                    continue
+                devId = devInfoItem[0].rstrip()
+                devType = devInfoItem[1].rstrip()
+                devName = devInfoItem[2].rstrip()
+                if not (devType == "unknown" or devType == "offline" \
+                        or devId == "unknown" or devId == "offline"):
+                    connDevices.append(SdbDevice(devId, devName, devType))
+                else:
+                    raise DevNotFoundErr(devId)
+
+        if len(connDevices) > 0:
+            self._updateConnDevice(connDevices)
+            LOGGER.debug("Connected Devices = %s" \
+                    % str([dev.devId for dev in self.devices]))
+            return True
+        else:
+            self._resetDevices()
+            LOGGER.debug("Reset Devices List")
+            return False
+
+    def setDbuteDevIds(self, _devIds):
+        self.dbutedevIds = _devIds
+
+    def add_dump_monitor_dev(self, _devid):
+        LOGGER.debug("add dump monitor dev : %s" % _devid)
+        self.dumpMonitor_q.put(_devid)
+
+    '''
+    def check_dump_monitor_que(self, _devid):
+        LOGGER.debug("check dump monitor queue : %s" % _devid)
+        temp_devs = []
+        while not self.dumpMonitor_q.empty():
+            devid = self.dumpMonitor_q.get()
+            if devid == _devid:
+                return True
+            else:
+                temp_devs.append(devid)
+
+        for dev in temp_devs:
+            self.dumpMonitor_q.put(dev)
+
+        return False
+    '''
+
+
+class SdbDevice:
+    def __init__(self, devId, devName, devType):
+        self.devId = devId
+        self.devName = devName
+        self.devType = devType
+        self.devBuildId = ""
+
+    def _printDevInfo(self):
+        LOGGER.info("===== Device Infomation =====")
+        LOGGER.info(" Name : " + self.devName)
+        LOGGER.info(" Id   : " + self.devId)
+        LOGGER.info(" Type : " + self.devType)
+        LOGGER.info("=============================")
+
+    def getDeviceId(self):
+        return self.devId
+
+    def getDeviceName(self):
+        return self.devName
+
+    def getDeviceType(self):
+        return self.devType
+
+    def getDeviceBuildId(self):
+        if self.devBuildId == "":
+            infoFilePath = Constants.LOCAL_BUILD_INFO_PATH % self.devId
+            if Constants.checkFileExists(infoFilePath) is False:
+                LOGGER.error("Not Found BuildInfo.xml file in %s" % self.devId)
+                LOGGER.error('Path : %s' % infoFilePath)
+                return None
+            try:
+                xml_tree = ElementTree.parse(infoFilePath)
+                xml_root = xml_tree.getroot()
+
+                for buildinfo in xml_root.findall('buildinfo'):
+                    if buildinfo.get("name") == "buildVersion":
+                        self.devBuildId = buildinfo.find("value").text
+                        return self.devBuildId
+
+            except Exception as e:
+                LOGGER.warning("[ reading buildInfo XML fail, error : %s ] " % e)
+                return None
+        else:
+            return self.devBuildId
+
+class DevBaseManager(BaseManager):
+    pass
+
+DevBaseManager.register('DeviceManager', DeviceManager)
+
diff --git a/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/shell/tctshell/distribute_plan.py b/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/shell/tctshell/distribute_plan.py
new file mode 100755 (executable)
index 0000000..367e219
--- /dev/null
@@ -0,0 +1,496 @@
+import os
+import time
+import threading
+from multiprocessing import Process, Queue, Manager
+
+from .shellplanner import *
+from .sdbmanager import SdbManager
+from .result_summary import ResultSummary
+from .logmanager import LOGGER
+
+
+def wait_time(_time):
+    for loop in range(_time):
+        LOGGER.debug("Wait {} seconds......".format(_time-loop))
+        time.sleep(1)
+
+
+class AutoPlanExecutor(threading.Thread):
+
+    def __init__(self, plan, threadCounter, isPreconSet, envManager, \
+            run_timeout, devmgr):
+        #Process.__init__(self)
+        threading.Thread.__init__(self)
+        self.suites = {}
+        self.autop_executors = []
+        self.all_dev_threads = []
+        self.suite_q = Queue(maxsize=1)
+        self.plan = plan
+        self.devmgr = devmgr
+        self.name = plan.getPlanName()
+        self.tcCounter = threadCounter
+        self.isPreconSet = isPreconSet
+        self.notrun_count = 0
+        self._orgSuites()
+        self._prepareAutoPlan(self.isPreconSet)
+        self.envManager = envManager
+        self.finish_time = float(time.time()) + \
+                ((int(run_timeout)) *  60)
+
+    def run(self):
+        self._startAutoPlan()
+        LOGGER.debug("finished AutoPlanExecutor")
+
+    def _orgSuites(self):
+        if self.plan.getDeviceId() in self.suites:
+            self.suites[self.plan.getDeviceId()] += self.plan.getSuites()[:]
+        else:
+            self.suites[self.plan.getDeviceId()] = self.plan.getSuites()[:]
+
+    def _orgNotRunSuites(self, notRunSuites):
+        suites = []
+        LOGGER.debug("Finding Not Run suites")
+        LOGGER.debug("Suites to find: %s" % str(notRunSuites))
+        for suite in self.plan.getSuites():
+            if suite.suiteName in notRunSuites:
+                suites.append(suite)
+        if None in self.suites:
+            self.suites[None] += suites
+        else:
+            self.suites[None] = suites
+
+    def _prepareAutoPlan(self, isPreconSet, notrun=None):
+        runningDevs = self.devmgr.getSdbDeviceList()
+        self.autop_executors = []
+        for counter, dev in enumerate(runningDevs):
+            self.plan.setDeviceId(dev.getDeviceId())
+            self.suites[None].append('Finished')
+            process_name = dev.getDeviceId()
+            if notrun is not None:
+                process_name = "%s_notRun%d" % (dev.getDeviceId(), notrun)
+            autopExecutor = AutoPlanDevExecutor(self.plan, process_name, \
+                    dev.getDeviceId(), counter + 1, self.suite_q, \
+                    isPreconSet, self.devmgr)
+            self.autop_executors.append(autopExecutor)
+        self.all_dev_threads += self.autop_executors
+
+    def _is_run_timeout(self):
+        curr_time = float(time.time())
+
+        if self.finish_time > curr_time:
+            return False
+        else:
+            return True
+
+    def _startAutoPlan(self):
+        for worker in self.autop_executors:
+            worker.start()
+
+        while len(self.suites[None]) > 0:
+            done_inhost = False
+            wakeup_others = False
+            suite = self.suites[None][0]
+            if self._is_run_timeout():
+                 LOGGER.error('tct-shell run/rerun timeout...')
+                 while not self.suite_q.empty():
+                     self.suites[None].insert(0, (self.suite_q.get(True)))
+                 self._auto_test_inhost(self.suites[None])
+                 self.suites[None] = []
+                 break
+
+            timeout = 0
+            while self._no_worker_available():
+                '''
+                if self._exists_finished_worker():
+                    wakeup_others = True
+                    self._kill_all_workers()
+                    LOGGER.debug("No need to reboot. Waking up other devices")
+                    break
+                '''
+                LOGGER.info("Wait for the connected devices to be reconnected [%s:%s]" % \
+                        (str(timeout), str(Constants.NO_WORKERS_TIMEOUT)))
+                time.sleep(10)
+                timeout += 10
+                if timeout >= Constants.NO_WORKERS_TIMEOUT:
+                    LOGGER.error("The reboot times for all the devices have been exceeded")
+                    while not self.suite_q.empty():
+                        self.suites[None].insert(0, (self.suite_q.get(True)))
+                    self._auto_test_inhost(self.suites[None])
+                    self.suites[None] = []
+                    done_inhost = True
+                    break
+
+            if done_inhost or wakeup_others:
+                break
+            try:
+                self.suite_q.put(suite, True, 20)
+            except:
+                continue
+            self.suites[None].pop(0)
+
+        '''
+        for autopExecutor in self.autop_executors:
+            SdbManager.exportDumpFiles(autopExecutor.deviceId, \
+                    self.plan.getResultFolderPath())
+            if autopExecutor.isRebooting():
+                self.envManager.kill_usbMonitor(autopExecutor.deviceId)
+                autopExecutor.killThread()
+            autopExecutor.join()
+        '''
+        for autopExecutor in self.autop_executors:
+            autopExecutor.join()
+        '''
+        for dev in self.devmgr.getSdbDeviceList():
+            SdbManager.exportDumpFiles(dev.getDeviceId(), \
+                    self.plan.getResultFolderPath())
+        '''
+
+        summary = ResultSummary([self.plan])
+        '''
+        notRunSuites = summary.checkResults()
+
+        if len(notRunSuites) > 0:
+            while not self.suite_q.empty():
+                LOGGER.debug("Suite left in the queue. Clearing...")
+                self.suite_q.get(True)
+            LOGGER.debug("Starting Not Run suites")
+            self._orgNotRunSuites(notRunSuites)
+            LOGGER.debug("Not Run suites = %s" % str(self.suites[None]))
+            self.notrun_count += 1
+            self._prepareAutoPlan(self.isPreconSet, notrun=self.notrun_count)
+            self._startAutoPlan()
+        else:
+        '''
+        summary.genResults()
+        summary.genSummary()
+        self.plan.setFinished()
+
+    def _auto_test_inhost(self, suites):
+        self._kill_all_workers()
+        self._kill_liteprocess()
+        exeType = self.plan.getExecuteType()
+        for suite in suites:
+            if suite == 'Finished':
+                continue
+            if exeType.getCurrType() == ExecuteType.e_auto:
+                self.autoworker = AutoPlan_AutoSuiteWorker(suite, None, \
+                        self.plan)
+                self.autoworker.auto_test_inhost()
+            elif exeType.getCurrType() == ExecuteType.e_manual:
+                continue
+            else:
+                self.autoworker = AutoPlan_AutoSuiteWorker(suite, None, \
+                        self.plan)
+                self.autoworker.auto_test_inhost()
+
+    def _kill_liteprocess(self):
+        cmd = "ps aux | grep 'python /opt/testkit/lite[0-9].[0-9]/testkit-lite'"
+        result = SdbManager.hostCommandwithResult(cmd)
+        if isinstance(result, (bytes, bytearray)):
+            result = result.decode('utf-8')
+
+        LOGGER.debug(result)
+        grep_lines = result.split('\n')
+
+        kill_packages = []
+        for line in grep_lines:
+            if line and len(line) > 1:
+                proc_id = line.split()[1]
+                SdbManager.hostCommand('kill -9 %s' % proc_id)
+
+                res_url = line.split()[-1]
+                if res_url and res_url.find('shell/result') > -1:
+                    spt_pack = res_url.split('/')[-1].split('.')[0]
+                    kill_packages.append(spt_pack)
+
+        exeType = self.plan.getExecuteType()
+        suites = self.plan.getSuites()
+
+        for num in range(len(kill_packages)):
+            pack_name = str(kill_packages.pop())
+
+            for suite in suites:
+                if suite.getSuiteName().find(pack_name):
+                    if exeType.getCurrType() == ExecuteType.e_auto:
+                        self.autowoker = AutoPlan_AutoSuiteWorker(suite, None, \
+                                self.plan)
+                        self.autowoker.auto_test_inhost()
+                    elif exeType.getCurrType() == ExecuteType.e_manual:
+                        continue
+                    else:
+                        self.autowoker = AutoPlan_AutoSuiteWorker(suite, None, \
+                                self.plan)
+                        self.autowoker.auto_test_inhost()
+                    break
+
+    def _no_worker_available(self):
+        executor_size = len(self.autop_executors)
+        curr_killed_executor = 0
+        for autopExecutor in self.autop_executors:
+            if autopExecutor.isKilled():
+                curr_killed_executor += 1
+
+        if executor_size == curr_killed_executor:
+            return True
+
+        return False
+
+    def _exists_finished_worker(self):
+        for autopExecutor in self.autop_executors:
+            if autopExecutor.isKilled():
+                return True
+        return False
+
+    def _kill_all_workers(self):
+        for autopExecutor in self.autop_executors:
+            autopExecutor.killThread()
+
+    def _require_kill_worker(self):
+        for autopExecutor in self.autop_executors:
+            if not autopExecutor.isKilled():
+                autopExecutor.killThread()
+
+    def getSuites(self):
+        return self.suites
+
+
+class AutoPlanDevExecutor(Process):
+
+    def __init__(self, plan, name, deviceId, threadCounter, suite_queue, \
+            isPreconSet, devmgr):
+        LOGGER.debug("Creating AutoPlanExecutor, with [device]: " + deviceId)
+        Process.__init__(self)
+        self.name = name
+        self.deviceId = deviceId
+        self.tcCounter = threadCounter
+        self.threadLock = threading.Lock()
+        self.suite_q = suite_queue
+        self.plan = plan
+        self.rebooting = Queue(1)
+        self.finished = Queue(1)
+        self.rebootLock = Queue()
+        self.devmgr = devmgr
+
+    def get_suite(self):
+        try:
+            suite = self.suite_q.get(True)
+        except Queue.Empty:
+            LOGGER.warning("AutoPlanDevExecutor.suite_queue empty exception")
+            pass
+
+        if suite == 'Finished':
+            LOGGER.debug('suite obtained: Finished')
+
+        return suite
+
+    def killThread(self):
+        if self.finished.empty():
+            LOGGER.debug("Killing [%s]" % self.name)
+            self.finished.put(1, block=False)
+        else:
+            LOGGER.debug("[%s] finished" % self.name)
+
+    def isKilled(self):
+        return not self.finished.empty()
+
+    def isRebooting(self):
+        return not self.rebooting.empty()
+
+    def setRebooting(self, reboot):
+        if reboot:
+            self.rebooting.put(1, block=False)
+        elif not self.rebooting.empty():
+            self.rebooting.get()
+
+    def run(self):
+        LOGGER.debug("Starting AutoPlanDevExecutor|DevID:{},PID:{}".\
+            format(self.deviceId, str(os.getpid())))
+        suite = None
+        is_reboot_timeout = False
+        while True:
+            if self.isKilled():
+                LOGGER.debug("finished AutoPlanDevExecutor|DevID:{},PID:{}".\
+                    format(self.deviceId, str(os.getpid())))
+                break
+
+            if not self.devmgr.isDeviceAvailable(self.deviceId) and \
+                    not is_reboot_timeout:
+                #reboot
+                LOGGER.error("Please reboot device : %s" % self.deviceId)
+                #scheduling purpose: waiting for UsbMonitor to release lock.
+                try:
+                    self.rebootLock.get(block=True, timeout=60)
+                    self.setRebooting(True)
+                except:
+                    is_reboot_timeout = True
+
+                continue
+
+            elif is_reboot_timeout:
+                self.killThread()
+                LOGGER.error("%s is reboot timeout" % self.deviceId)
+                break
+            else:
+                if self.isRebooting():
+                    LOGGER.info("Rebooting complete device : %s" % \
+                            self.deviceId)
+                    SdbManager.recoveryDevice(self.plan.getTizenVersion(), \
+                            self.deviceId)
+                self.setRebooting(False)
+                self.is_reboot_timeout = False
+
+            '''
+            if self.devIns.check_dump_monitor_que(self.deviceId):
+                LOGGER.debug("Tracking dump device : %s" % self.deviceId)
+                self.killThread()
+                break
+            '''
+
+            suite = self.get_suite()
+            if suite == 'Finished':
+                self.killThread()
+                break
+            exeType = self.plan.getExecuteType()
+            if exeType.getCurrType() == ExecuteType.e_auto:
+                self.autoworker = AutoPlan_AutoSuiteWorker(suite, \
+                        self.deviceId, self.plan)
+                self.autoworker.auto_test()
+            elif exeType.getCurrType() == ExecuteType.e_manual:
+                self.manualworker = AutoPlan_ManualSuiteWorker(suite, \
+                        self.deviceId, self.plan)
+                self.manualworker.auto_test()
+            else:
+                self.autoworker = AutoPlan_AutoSuiteWorker(suite, \
+                        self.deviceId, self.plan)
+                self.autoworker.auto_test()
+                self.manualworker = AutoPlan_ManualSuiteWorker(suite, \
+                        self.deviceId, self.plan)
+                self.manualworker.auto_test()
+            try:
+                dump_files = SdbManager.exportDumpFiles(self.deviceId, \
+                    self.plan.getResultFolderPath() + "/dump/" + suite.getSuiteName())
+                if dump_files:
+                    SdbManager.deleteDumpFiles(self.deviceId, dump_files)
+            except Exception as ex:
+                LOGGER.error(str(ex))
+
+        LOGGER.debug("finished AutoPlanDevExecutor")
+
+
+class AutoPlan_AutoSuiteWorker:
+    def __init__(self, suite, deviceId, plan):
+        self.suite = suite
+        self.deviceId = deviceId
+        self.plan = plan
+        self.remTmpDir = plan.getDevTctTmpPath()
+        self.resultFolder = plan.getResultFolderPath()
+        self.tizenVer = plan.getTizenVersion()
+        self.isRerun = plan.isReRunning()
+        self.stubPort = plan.getStubPort()
+
+    def auto_test(self):
+        suite = self.suite
+        if suite.getAutoNum() is None or int(suite.getAutoNum()) == 0:
+            suite.setNoAuto()
+            LOGGER.warning('Suite : %s , AutoNum : 0' % (suite.getSuiteName()))
+            return
+
+        suiteName = suite.getSuiteName()
+        suite.runPreTestScript(self.deviceId)
+
+        LOGGER.info("Start to execute|suite:{},devid:{},pid:{}".\
+            format(suiteName, self.deviceId, os.getpid()))
+        LOGGER.debug("current suite Auto count : %s " % suite.getAutoNum())
+
+        LOGGER.info('Checking if the suite ' + suiteName \
+                + ' is installed already.')
+        if suite.sdbCheckSuite(self.deviceId, suiteName):
+            LOGGER.info('The suite ' + suiteName + ' is existed. uninstalling')
+            LOGGER.info('Uninstalling the existed suite ' + suiteName)
+            suite.unInstallSuite(self.deviceId, self.remTmpDir)
+
+        LOGGER.info('Uploading the suite ' + suiteName)
+        LOGGER.info('Installing the suite ' + suiteName)
+
+        suite.installSuite(self.deviceId, self.remTmpDir)
+        LOGGER.info('Executing the suite ' + suiteName + ' in testkit-lite.')
+        suite.executePlanAuto(self.deviceId, self.resultFolder, \
+                suite.getTestCase(), self.isRerun, self.stubPort)
+
+        suite.runPostTestScript(self.deviceId)
+
+        LOGGER.info('removing the suite pkg file of the suite ' + suiteName)
+        LOGGER.info('Uninstalling the suite ' + suiteName)
+        suite.unInstallSuite(self.deviceId, self.remTmpDir)
+
+        LOGGER.info("Finished to execute|suite:{},devid:{},pid:{}".\
+            format(suiteName, self.deviceId, os.getpid()))
+        wait_time(10)
+
+    def auto_test_inhost(self):
+        suite = self.suite
+        if suite.getAutoNum() is None or int(suite.getAutoNum()) == 0:
+            suite.setNoAuto()
+            LOGGER.warning('Suite : %s , AutoNum : 0' % (suite.getSuiteName()))
+            return
+
+        suiteName = suite.getSuiteName()
+        LOGGER.info("Start to execute auto suite:%s" % suiteName)
+
+        LOGGER.info('Uploading the suite ' + suiteName)
+        LOGGER.info('Installing the suite ' + suiteName)
+        suite.installSuite(self.deviceId, self.remTmpDir)
+        LOGGER.info('Executing the suite ' + suiteName + ' in testkit-lite.')
+        suite.executePlanAuto(self.deviceId, self.resultFolder, \
+                suite.getTestCase(), self.isRerun, self.stubPort)
+
+        LOGGER.info('removing the suite pkg file of the suite ' + suiteName)
+        LOGGER.info('Uninstalling the suite ' + suiteName)
+        suite.unInstallSuite(self.deviceId, self.remTmpDir)
+
+        LOGGER.debug("current suite Auto count : %s " % suite.getAutoNum())
+        LOGGER.info("Finished to execute auto suite:%s" % suiteName)
+
+
+class AutoPlan_ManualSuiteWorker:
+    def __init__(self, suite, deviceId, plan):
+        self.suite = suite
+        self.deviceId = deviceId
+        self.plan = plan
+
+    def auto_test(self):
+        deviceId = self.deviceId
+        remTmpDir = self.plan.getDevTctTmpPath()
+        resultFolder = self.plan.getResultFolderPath()
+        isRerun = self.plan.isReRunning()
+        stubPort = self.plan.getStubPor()
+        suite = self.suite
+
+        if suite.getManualNum() is None or int(suite.getManualNum()) == 0:
+            suite.setNoManual()
+            LOGGER.warning('Suite : %s , ManualNum : 0' % \
+                    (suite.getSuiteName()))
+            return
+
+        suiteName = suite.getSuiteName()
+        LOGGER.debug("current suite Auto count : %s " % suite.getAutoNum())
+
+        LOGGER.info('Checking if the suite ' + suiteName \
+                + 'is installed already.')
+        if suite.sdbCheckSuite(deviceId, suiteName):
+            LOGGER.info('The suite ' + suiteName + ' is existed. uninstalling')
+            LOGGER.info('Uninstalling the existed suite ' + suiteName)
+            suite.unInstallSuite(deviceId, remTmpDir)
+
+        LOGGER.info('Uploading the suite ' + suiteName)
+        LOGGER.info('Installing the suite ' + suiteName)
+        suite.installSuite(deviceId, remTmpDir)
+        LOGGER.info('Executing the suite ' + suiteName + ' in testkit-lite.')
+        suite.executePlanManual(deviceId, resultFolder, suite.getTestCase(), \
+                isRerun, stubPort)
+
+        LOGGER.info('removing the suite pkg file of the suite ' + suiteName)
+        LOGGER.info('Uninstalling the suite ' + suiteName)
+        suite.unInstallSuite(deviceId, remTmpDir)
+
+        LOGGER.info("Finished to execute manual suite: [%s]" % suiteName)
diff --git a/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/shell/tctshell/dumpmonitor.py b/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/shell/tctshell/dumpmonitor.py
new file mode 100755 (executable)
index 0000000..ba595f0
--- /dev/null
@@ -0,0 +1,46 @@
+#!/usr/bin/python
+
+import time
+from multiprocessing import Process
+
+from .logmanager import LOGGER
+from .sdbmanager import SdbManager
+
+class DumpMonitor(Process):
+
+    def __init__(self, _devid, _dump_name):
+        Process.__init__(self)
+        self.daemon = True
+        self.name = "DumpMonitor"
+        self.devid = _devid
+        self.dumpName = _dump_name
+        self.isFinish = False
+
+    def run(self):
+        LOGGER.debug("Starting DumpMonitor : %s" % self.devid)
+        cmd = self._make_ls_command()
+        if not cmd:
+            return
+
+        while True:
+            if self.isFinish:
+                break
+            time.sleep(10)
+            result = SdbManager.sdbShell(self.devid, cmd)
+            if result and self.dumpName:
+                for dName in self.dumpName.split(','):
+                    if dName and str(result).find(dName) > -1:
+                        self.devIns.add_dump_monitor_dev(self.devid)
+                        return
+
+    def _make_ls_command(self):
+        dump_dir_path = SdbManager.findDumpPath(self.devid)
+        if dump_dir_path:
+            dump_ls_cmd = "ls -al %s" % dump_dir_path
+            return dump_ls_cmd
+        else:
+            return None
+
+    def kill_dumpmonitor(self):
+        self.isFinish = True
+
diff --git a/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/shell/tctshell/environment_manager.py b/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/shell/tctshell/environment_manager.py
new file mode 100755 (executable)
index 0000000..48c3961
--- /dev/null
@@ -0,0 +1,175 @@
+#!/usr/bin/python
+
+from multiprocessing import Queue
+from .shellguider import Guider
+from .testenvironment import TestEnvironment
+from .usbmonitor import UsbMonitor
+from .netstatmonitor import NetstatMonitor
+from .dumpmonitor import DumpMonitor
+
+from .logmanager import LOGGER
+from .constants import Constants
+
+
+class EnvironmentManager:
+    def __init__(self, plans, isPreconSet, dump_name, devmgr):
+        self.plans = plans
+        self.dev_plans = {}
+        self.env_threads = []
+        self.connDevices = []
+        self.isPreconSet = isPreconSet
+        self.usb_monitor = None
+        self.netstat_monitors = []
+        self.dump_monitors = []
+        self.dev_recovery_locks = {}
+        self.dump_name = dump_name
+        self.devmgr = devmgr
+        self.orgPlans()
+        self.load_devices()
+        self.init_monitors()
+
+    def init_monitors(self):
+        if Constants.isDistMode():
+            for dev in self.connDevices:
+                dev_id = dev.getDeviceId()
+                if dev_id is None:
+                    continue
+                if Constants.isSdbNetwork(dev_id):
+                    pass
+                    #netstat_m = NetstatMonitor(dev_id, self.devmgr)
+                    #self.netstat_monitors.append(netstat_m)
+                else:
+                    if not self.usb_monitor:
+                        pass
+                        #self.usb_monitor = UsbMonitor(self.devmgr)
+                '''
+                if self.dump_name:
+                    dump_m = DumpMonitor(dev_id, self.dump_name)
+                    self.dump_monitors.append(dump_m)
+                '''
+        else:
+            pass
+            '''
+            for devId in self.dev_plans.keys():
+                if Constants.isSdbNetwork(devId):
+                    netstat_m = NetstatMonitor(devId, self.devmgr)
+                    self.netstat_monitors.append(netstat_m)
+                else:
+                    if not self.usb_monitor:
+                        self.usb_monitor = UsbMonitor(self.devmgr)
+            '''
+
+    def kill_monitors(self):
+        if self.usb_monitor:
+            self.usb_monitor.kill_usbmonitor()
+
+        self.kill_netstatMonitor()
+
+        for dumpM in self.dump_monitors:
+            dumpM.kill_dumpmonitor()
+
+    def kill_netstatMonitor(self):
+        for nsMonitor in self.netstat_monitors:
+            nsMonitor.kill_netMonitor()
+
+    def kill_usbMonitor(self, devid):
+        if self.usb_monitor:
+            self.usb_monitor.device_recovered(devid)
+
+    def start_usbMonitor(self):
+        if self.usb_monitor:
+            self.usb_monitor.start()
+
+    def start_netstatMonitor(self):
+        for nsMonitor in self.netstat_monitors:
+            nsMonitor.start()
+
+    def start_dumpMonitor(self):
+        for dumpMonitor in self.dump_monitors:
+            dumpMonitor.start()
+
+    def load_devices(self):
+        self.devmgr.loadDeviceList()
+        self.connDevices = self.devmgr.getSdbDeviceList()
+
+    def orgPlans(self):
+        if self.plans:
+            for plan in self.plans:
+                if len(plan.getSuites()) < 1:
+                    continue
+                deviceId = plan.getDeviceId()
+                tizenVer = plan.getTizenVersion()
+
+                if not deviceId in self.dev_plans:
+                    self.dev_plans[deviceId] = {}
+
+                if not tizenVer in self.dev_plans[deviceId]:
+                    self.dev_plans[deviceId][tizenVer] = []
+
+                self.dev_plans[deviceId][tizenVer].append(plan)
+
+    def env_setup(self):
+        err_msg_queue = Queue()
+        for devId, devId_val in self.dev_plans.items():
+            for tizenVer, plans in devId_val.items():
+                if Constants.isDistMode():
+                    for dev in self.connDevices:
+                        tEn = TestEnvironment(tizenVer, dev.getDeviceId(), \
+                                self.isPreconSet, err_msg_queue, self.devmgr)
+                        tEn.start()
+                        self.env_threads.append(tEn)
+                else:
+                    tEn = TestEnvironment(tizenVer, devId, self.isPreconSet, \
+                            err_msg_queue, self.devmgr)
+                    tEn.start()
+                    self.env_threads.append(tEn)
+
+        for thread in self.env_threads:
+            thread.join()
+
+        if not err_msg_queue.empty():
+            raise
+
+    def guider_setup(self):
+        for devId, devId_val in self.dev_plans.items():
+            for tizenVer, plans in devId_val.items():
+                for plan in plans:
+                    if Constants.isDistMode():
+                        guider = Guider(plan, [dev.getDeviceId() \
+                                for dev in self.connDevices])
+                    else:
+                        guider = Guider(plan)
+
+                    guider.init_items()
+                    if self.isPreconSet:
+                        guider.setup_manual_env()
+                    guider.setup_default_env()
+
+    def check_build_ids(self):
+        if Constants.isDistMode() and \
+                not Constants.checkBuildIds(self.connDevices):
+            LOGGER.error("All connected devices should have the same build ids for distribute/auto-plan mode.")
+            LOGGER.error("Devices with different build ids connected")
+            raise
+        return True
+
+    def setup(self):
+        self.env_setup()
+        self.check_build_ids()
+        self.guider_setup()
+
+    def start_monitor(self):
+        self.start_usbMonitor()
+        self.start_netstatMonitor()
+        self.start_dumpMonitor()
+
+    def recovery_setup(self, workers):
+        for worker in workers:
+            if Constants.isSdbNetwork(worker.deviceId):
+                for nsMonitor in self.netstat_monitors:
+                    if nsMonitor.deviceId == worker.deviceId:
+                        nsMonitor.setup_recovery(worker.rebootLock)
+            else:
+                if self.usb_monitor:
+                    self.usb_monitor.setup_recovery(\
+                            worker.deviceId, worker.rebootLock)
diff --git a/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/shell/tctshell/exception.py b/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/shell/tctshell/exception.py
new file mode 100755 (executable)
index 0000000..b2c96c8
--- /dev/null
@@ -0,0 +1,6 @@
+
+class DevNotFoundErr(Exception):
+    def __init__(self, _devid):
+        self.devid = _devid
+    def __str__(self):
+        return repr(self.devid)
diff --git a/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/shell/tctshell/exception.pyc b/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/shell/tctshell/exception.pyc
new file mode 100755 (executable)
index 0000000..059eee2
Binary files /dev/null and b/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/shell/tctshell/exception.pyc differ
diff --git a/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/shell/tctshell/gui/__init__.py b/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/shell/tctshell/gui/__init__.py
new file mode 100755 (executable)
index 0000000..8b13789
--- /dev/null
@@ -0,0 +1 @@
+
diff --git a/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/shell/tctshell/gui/action_frame.py b/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/shell/tctshell/gui/action_frame.py
new file mode 100755 (executable)
index 0000000..58bd16e
--- /dev/null
@@ -0,0 +1,95 @@
+#!/usr/bin/python
+
+from Tkinter import *
+
+class ActionFrame(Frame):
+    def __init__(self, parent):
+       Frame.__init__(self, parent)
+       self.parent = parent
+        self.planMenus = []
+        self.devMenus = []
+        self.tVerMenus = []
+       self.plans = []
+       self.devices = []
+       self.tVersions = []
+       self.scenario = []
+       self.checkReady = []
+
+    def initUI(self):
+        for plan in self.plans:
+            self.addPlan()
+       self.infoLabel = Label(self.parent, text = "Prepare plans: choose plan, device id and tizen version.\n--Plans that aren't ready will be ignored", width = 75, height =4)
+       self.infoLabel.grid(column = 1, row = 0, columnspan=4)
+        self.addButton = Button(self.parent, text='Add Plan', command=self.addPlan, width = 37, height = 2)
+        self.addButton.grid(column=1, row=1, columnspan=2, sticky='w')
+        self.doneButton = Button(self.parent, text='Done', command=self.done, width = 37, height=2)
+        self.doneButton.grid(column=2, row=1, columnspan=2, sticky='E')
+
+
+    def importData(self, plans, devices, tVersions):
+        self.plans = plans
+        self.devices = devices
+        self.tVersions = tVersions
+        self.planOptions = plans[:]
+        self.devOptions = devices[:]
+        self.tVerOptions = tVersions[:]
+        self.set_default()
+
+    def set_default(self):
+        self.planOptions.insert(0, "Select plan")
+        self.devOptions.insert(0, "Select device")
+        self.tVerOptions.insert(0, "Select version")
+    
+    def check(self, internal_v, index, op_mode):
+       for i in range(len(self.planMenus)):
+            selectedPlan = self.planMenus[i].get()
+            selectedDevice = self.devMenus[i].get()
+            selectedVersion = self.tVerMenus[i].get()
+            if not ("Select " in selectedPlan + selectedDevice + selectedVersion):
+               self.checkReady[i].config(text="Plan #%d : Ready" %(i+1), fg="green")
+           else:
+               self.checkReady[i].config(text="Plan #%d"%(i+1), fg='red')
+
+    def addPlan(self):
+        tail = len(self.planMenus)
+        self.planMenus.append(StringVar(self.parent))
+        self.planMenus[tail].set(self.planOptions[0])
+       self.planMenus[tail].trace_variable('w', callback=self.check)
+        self.devMenus.append(StringVar(self.parent))
+        self.devMenus[tail].set(self.devOptions[0])
+       self.devMenus[tail].trace_variable('w', callback=self.check)
+        self.tVerMenus.append(StringVar(self.parent))
+        self.tVerMenus[tail].set(self.tVerOptions[0])
+       self.tVerMenus[tail].trace_variable('w', callback=self.check)
+       self.checkReady.append(Label(self.parent, text="Plan #%d" %(tail+1), fg='red'))
+       self.checkReady[tail].config(width = 15)
+       self.checkReady[tail].grid(column = 0, row = tail+2)
+        w = apply(OptionMenu, (self.parent, self.planMenus[tail]) + tuple(self.planOptions))
+        w.config(width = 15)
+        w.grid(column = 1, row = tail+2)
+        w = apply(OptionMenu, (self.parent, self.devMenus[tail]) + tuple(self.devOptions))
+        w.config(width = 40)
+        w.grid(column = 2, row = tail+2)
+        w = apply(OptionMenu, (self.parent, self.tVerMenus[tail]) + tuple(self.tVerOptions))
+        w.config(width = 10)
+        w.grid(column = 3, row = tail+2)
+       self.check("", "", "")
+    def run(self):
+        #Button(root, text='Start', command=self.onStart, width=10).pack(side=LEFT)
+        #Button(root, text='Exit', command=self.onExit, width=10).pack(side=LEFT)
+        self.parent.mainloop()
+
+    def done(self):
+       for i in range(len(self.planMenus)):
+           selectedPlan = self.planMenus[i].get()
+           selectedDevice = self.devMenus[i].get()
+           selectedVersion = self.tVerMenus[i].get()
+           if not ("Select " in selectedPlan + selectedDevice + selectedVersion):
+               strDevlist = [str(dev) for dev in self.devices]
+               print strDevlist
+               print self.devices
+               self.scenario.append([selectedPlan, self.devices[strDevlist.index(selectedDevice)], selectedVersion])
+           self.parent.quit()
+
+    def getScenData(self):
+       return self.scenario
diff --git a/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/shell/tctshell/gui/main_window.py b/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/shell/tctshell/gui/main_window.py
new file mode 100755 (executable)
index 0000000..b84b452
--- /dev/null
@@ -0,0 +1,28 @@
+#!/usr/bin/python
+from action_frame import ActionFrame
+from Tkinter import *
+
+class MainWindow:
+    def __init__(self, title='Empty Title'):
+       self.root = Tk()
+       self.root.title(title)
+       self.root.geometry("900x500+300+300")
+
+    def getActionFrame(self):
+       self.actionFrame = ActionFrame(self.root)
+
+    def importData(self, plans, devices, tVersions):
+       self.actionFrame.importData(plans, devices, tVersions)
+       self.actionFrame.initUI()
+    def run(self):
+       #Button(root, text='Start', command=self.onStart, width=10).pack(side=LEFT)
+       #Button(root, text='Exit', command=self.onExit, width=10).pack(side=LEFT)
+       self.root.mainloop()
+    def getScenData(self):
+       return self.actionFrame.getScenData()
+
+    def onExit(self):
+       self.root.quit()
+
+    def onStart(self):
+       print "START"
diff --git a/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/shell/tctshell/intention_generator.py b/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/shell/tctshell/intention_generator.py
new file mode 100755 (executable)
index 0000000..a329b7c
--- /dev/null
@@ -0,0 +1,630 @@
+#!/usr/bin/python
+import os
+import re
+from .constants import Constants
+from .shellwrapper import IntentionType
+from xml.etree import ElementTree
+import xml.etree.ElementTree as etree
+from .result_summary import ResultSummary
+from .logmanager import LOGGER
+from .shellplanner import *
+
+
+def _verifyPlan(planfile, tizenVersion):
+    xml_tree = ElementTree.parse(planfile)
+    xml_root = xml_tree.getroot()
+    executeType = xml_root.find('execute_type')
+    suites = xml_root.findall('suite')
+    if executeType is None:
+        LOGGER.warning("[WARNING] Plan xml:" + \
+                " No execute type specified in plan xml")
+    elif not executeType.text in ['All', 'Auto', 'Manual']:
+        LOGGER.warning("[WARNING] Plan xml: Execute type in plan xml: %s. \
+                Execute type should be either All,  Auto or Manual" \
+                % executeType.text)
+    if len(suites) < 1:
+        LOGGER.warning("No suites specified in plan xml")
+    return True
+
+
+def _verifySuite(suite, tizenVersion):
+    try:
+        suite_name = suite.get('name')
+        launcher = suite.get('launcher')
+        auto_tcn = suite.find('auto_tcn')
+        manual_tcn = suite.find('manual_tcn')
+        total_tcn = suite.find('total_tcn')
+        if suite_name is None:
+            LOGGER.warning("[ERROR] Plan xml: Suite name is not specified")
+            return False
+
+        if suite.find('pkg_name') is None:
+            LOGGER.warning("[ERROR] Plan xml:" + \
+                    " Package name is not specified for suite: %s" % suite_name)
+            return False
+
+        suite_pkg_name = suite.find('pkg_name').text
+        suite_zipname = os.path.basename(suite_pkg_name)
+        suite_path = os.path.join(Constants.SUITES_REPOSITORY % tizenVersion, \
+            suite_pkg_name)
+        if not os.path.isfile(suite_path):
+            LOGGER.warning("suite_path does not exist. [%s]" % suite_path)
+            return False
+        auto_num, manual_num, suite_launcher, suite_category, tc_exist, s_name\
+         = _get_suiteInfo(suite_zipname, suite_path, None)
+
+        if suite_name != s_name:
+            LOGGER.warning("[ERROR] Plan xml: Suite name [%s] does not match with \
+                    suite package name" % suite_name)
+            return False
+
+        if launcher != suite_launcher:
+            LOGGER.warning("[WARNING] Plan xml: \
+                Suite [%s] running on a different launcher" % suite_name)
+
+        if auto_tcn is None:
+            LOGGER.warning("[ERROR] Plan xml: \
+                Suite [%s] Auto testcase count not specified" % suite_name)
+            return False
+        elif auto_tcn.text != str(auto_num):
+            LOGGER.warning("[WARNING] Plan xml: \
+                Suite [%s] Wrong auto testcase count" % suite_name)
+
+        if manual_tcn is None:
+            LOGGER.warning("[ERROR] Plan xml: \
+                Suite [%s] Manual testcase count not specified" % suite_name)
+            return False
+        elif manual_tcn.text != str(manual_num):
+            LOGGER.warning("[WARNING] Plan xml: \
+                Suite [%s] Wrong manual testcase count" % suite_name)
+
+        if total_tcn is None:
+            LOGGER.warning("[ERROR] Plan xml: \
+                Suite [%s] Total testcase count not specified" % suite_name)
+            return False
+        elif total_tcn.text != str(manual_num + auto_num):
+            LOGGER.warning("[WARNING] Plan xml: \
+                Suite [%s] Wrong total testcase count" % suite_name)
+
+        Constants.clean_unzip_file()
+    except Exception as ex:
+        LOGGER.warning(str(ex))
+    return True
+
+
+def _get_suiteInfo(filesname, filepath, tc_name):
+    Constants.unzip_package(filepath)
+    m = re.split(Constants.REGEX_FOR_SPLIT_PKG_NAME, filesname)
+    name = m[0]
+    test_file = os.path.expanduser("~") + "/" + Constants.DEFAULT_PLAN_FILE + \
+            "/opt/" + name + "/tests.xml"
+    LOGGER.debug("Getting information from suite package: %s" % test_file)
+    if not os.path.exists(test_file):
+        LOGGER.warning("Can't find the test file...")
+        return 0, 0, Constants.WRT_LAUNCHER_CMD, None
+    return _read_xml_suiteInfo(test_file, tc_name)
+
+
+def _read_xml_suiteInfo(test_file, tc_name):
+    try:
+        autocnt = manualcnt = 0
+        test_xml_temp = etree.parse(test_file)
+        tc_exist = False
+        for test_xml_temp_suite in test_xml_temp.getiterator('suite'):
+            suite_name = test_xml_temp_suite.get('name')
+            suite_launcher = test_xml_temp_suite.get('launcher')
+            suite_category = test_xml_temp_suite.get('category')
+            autocnt = manualcnt = 0
+            for tset in test_xml_temp_suite.getiterator('set'):
+                set_autocnt, set_manualcnt, tcCheck = \
+                        _read_xml_tcInfo(tset, tc_name)
+                autocnt += set_autocnt
+                manualcnt += set_manualcnt
+                if tcCheck:
+                    tc_exist = True
+
+        return autocnt, manualcnt, suite_launcher, suite_category, tc_exist, \
+            suite_name
+
+    except Exception as msg:
+        LOGGER.warning("error read xml %s package : %s" % \
+                (str(test_file), str(msg)))
+        return 0, 0, None, None, None, None
+
+
+def _read_xml_tcInfo(tset, tc_name):
+    set_autocnt = set_manualcnt = 0
+    tcCheck = False
+    for tcase in tset.getiterator('testcase'):
+        tcId = tcase.get('id')
+        exetype = tcase.get('execution_type')
+        if exetype == "auto":
+            set_autocnt += 1
+        elif exetype == "manual":
+            set_manualcnt += 1
+        if tc_name == tcId:
+            tcCheck = True
+
+    return set_autocnt, set_manualcnt, tcCheck
+
+
+def _parsTestScenario(scen_name, file_path, stubPort, skip_package, \
+        skip_count, skip_tc):
+    LOGGER.debug("parsing Test Scenario : " + file_path)
+    plans = []
+    xml_tree = ElementTree.parse(file_path)
+    xml_root = xml_tree.getroot()
+    for xml_plan in xml_root.findall('plan'):
+        plan_file_path = xml_plan.find("path").text
+        plan_name = xml_plan.get("name")
+        plan_deviceId = xml_plan.find("device").get("id")
+        plan_tizenVersion = xml_plan.find("version").text
+        plans.append(_parsTestPlan(plan_file_path, plan_name, plan_deviceId, \
+                None, plan_tizenVersion, None, stubPort, skip_package, \
+                skip_count, skip_tc, scen_name)[0])
+    return plans
+
+
+# return : TctShellSuite []
+def _parsTestPlan(file_path, plan_name, deviceId, executeType, tizenVersion, \
+        resultFolder, stubPort, skip_package, skip_count, skip_tc, devmgr, \
+        scen_name=None, make_ne_package=None, pre_test=None, post_test=None):
+    suites = []
+    profile = ""
+    if not _verifyPlan(file_path, tizenVersion):
+        LOGGER.warning("Please check the plan xml file: %s" % file_path)
+        return None
+
+    LOGGER.debug("parsing Test Plan : " + plan_name)
+    xml_tree = ElementTree.parse(file_path)
+    xml_root = xml_tree.getroot()
+    if xml_root.get('profile') is not None:
+        profile = xml_root.get('profile')
+
+    if not executeType:
+        executeType = ExecuteType.createExecuteType(\
+                xml_root.find('execute_type').text)
+
+    for xml_suite in xml_root.findall('suite'):
+        if not _verifySuite(xml_suite, tizenVersion):
+            continue
+
+        packName = xml_suite.get("name")
+        if skip_package and str(skip_package).find(packName) > -1:
+            LOGGER.info("[skip package : %s]" % packName)
+        else:
+            is_make_ne = 0
+            if make_ne_package and str(make_ne_package).find(suite_name) > -1:
+                issue_num = _pars_issue_num(make_ne_package[0], suite_name)
+                is_make_ne = int(issue_num)
+
+            suite = TctShellSuite(packName, None, \
+                xml_suite.find("auto_tcn").text, \
+                xml_suite.find("manual_tcn").text, \
+                xml_suite.find("pkg_name").text, \
+                xml_suite.get("launcher"), xml_suite.get("category"), \
+                tizenVersion, skip_count, skip_tc, devmgr, \
+                pre_test=pre_test, \
+                post_test=post_test, \
+                is_make_ne=is_make_ne)
+            suites.append(suite)
+
+    plan = TctShellPlan(plan_name, devmgr, deviceId, profile, executeType, \
+            suites, tizenVersion, resultFolder, stubPort, scen_name)
+
+    if Constants.isDistMode():
+        if not plan.setup_distribute():
+            raise
+
+    return [plan]
+
+
+def _parsTestProfile(path_suites, deviceId, executeType, tizenV, profile, \
+        resultFolder, stubPort, skip_package, skip_count, skip_tc, devmgr, \
+        distribute_count, make_ne_package=None, pre_test=None, post_test=None):
+    suites = []
+    LOGGER.debug("Preparing Test Suite ")
+    suite_profile = os.path.basename(os.path.dirname(path_suites[0]))
+    for counter, suite_path in enumerate(path_suites):
+        counter = counter + 1
+        suite_profile = os.path.basename(os.path.dirname(suite_path))
+        suite_zipname = os.path.basename(suite_path)
+        suite_name = _geneSuiteName(suite_zipname, tizenV)
+        auto_num, manual_num, suite_launcher, suite_category, tc_exist, s_name\
+                = _get_suiteInfo(suite_zipname, suite_path, None)
+
+        suite_tizenVer = tizenV
+        suite_pkg_name = os.path.join(suite_profile, \
+                os.path.basename(suite_path))
+
+        dist_res = None
+        if distribute_count:
+            dist_res = _check_dist_number(counter, distribute_count)
+
+        if skip_package and str(skip_package).find(suite_name) > -1:
+            LOGGER.info("[skip package : %s]" % suite_name)
+        elif auto_num == 0 and manual_num == 0:
+            pass
+        else:
+            is_make_ne = 0
+            if make_ne_package and str(make_ne_package).find(suite_name) > -1:
+                issue_num = _pars_issue_num(make_ne_package[0], suite_name)
+                is_make_ne = int(issue_num)
+
+            suite = TctShellSuite(suite_name, None, auto_num, manual_num, \
+                suite_pkg_name, suite_launcher, suite_category, \
+                suite_tizenVer, skip_count, skip_tc, devmgr, \
+                pre_test=pre_test, \
+                post_test=post_test, \
+                is_make_ne=is_make_ne)
+
+            if not distribute_count:
+                suites.append(suite)
+            elif dist_res:
+                suites.append(suite)
+
+        Constants.clean_unzip_file()
+
+    temp_plan_name = profile
+    plan = TctShellPlan(temp_plan_name, devmgr, deviceId, profile, executeType, \
+            suites, tizenV, resultFolder, stubPort)
+
+    if Constants.isDistMode():
+        if not plan.setup_distribute():
+            raise
+
+    return [plan]
+
+
+def _parsTestSuite(path_suites, deviceId, executeType, tizenVersion, tc_name, \
+        resultFolder, stubPort, devmgr, skip_count=None, skip_tc=None, \
+        pre_test=None, post_test=None, make_ne_package=None):
+    #type(suites) -> list
+    suites = []
+    LOGGER.debug("Preparing Test Suite ")
+    suite_profile = os.path.basename(os.path.dirname(path_suites[0]))
+    for suite_path in path_suites:
+        suite_zipname = os.path.basename(suite_path)
+        suite_name = _geneSuiteName(suite_zipname, tizenVersion)
+        auto_num, manual_num, suite_launcher, suite_category, tc_exist, s_name\
+                = _get_suiteInfo(suite_zipname, suite_path, tc_name)
+        if tc_name is not None and not tc_exist:
+            LOGGER.warning("Testcase Id : [%s] does not exist in suite : [%s]" \
+                    % (tc_name, suite_name))
+            return None
+
+        suite_tizenVer = tizenVersion
+        suite_pkg_name = os.path.join(suite_profile, \
+                os.path.basename(suite_path))
+
+        is_make_ne = 0
+        if make_ne_package and str(make_ne_package).find(suite_name) > -1:
+            issue_num = _pars_issue_num(make_ne_package[0], suite_name)
+            is_make_ne = int(issue_num)
+
+        suite = TctShellSuite(suite_name, tc_name, auto_num, manual_num, \
+                suite_pkg_name, suite_launcher, suite_category, \
+                suite_tizenVer, skip_count, skip_tc, devmgr, \
+                pre_test=pre_test, \
+                post_test=post_test, \
+                is_make_ne=is_make_ne)
+
+        suites.append(suite)
+        Constants.clean_unzip_file()
+
+    temp_plan_name = "temp_plan_name"
+    plan = TctShellPlan(temp_plan_name, devmgr, deviceId, suite_profile, executeType, \
+            suites, tizenVersion, resultFolder, stubPort)
+
+    if Constants.isDistMode():
+        if not plan.setup_distribute():
+            raise
+
+    return [plan]
+
+
+def _parsTestCase(path_suites, deviceId, executeType, tizenVersion, \
+        testcase_id, resultFolder, stubPort, devmgr):
+    LOGGER.debug("parsing Test Case : " + str(testcase_id))
+
+    return _parsTestSuite(path_suites, deviceId, executeType, tizenVersion, \
+            testcase_id, resultFolder, stubPort, devmgr)
+
+
+def _parsAutoPlan(planFile, plan_name, executeType, tizenVer, \
+        resultFolderPath, stubPort, skip_package, skip_count, skip_tc, \
+        devmgr, pre_test=None, post_test=None, make_ne_package=None):
+    if not _verifyPlan(planFile, tizenVer):
+        LOGGER.warning("Please check the plan xml file: %s" % planFile)
+        return None
+
+    LOGGER.debug("parsing Test Plan : " + planFile)
+    suites = []
+    profile = ""
+    planList = []
+    deviceLen = devmgr.getDeviceSize()
+    if deviceLen < 1:
+        LOGGER.error("No connected device")
+        return None
+
+    LOGGER.info("Plan [%s] will be distributed to %d devices" \
+            % (plan_name, deviceLen))
+    devices = devmgr.getSdbDeviceList()
+    xml_tree = ElementTree.parse(planFile)
+    xml_root = xml_tree.getroot()
+    if xml_root.get('profile') is not None:
+        profile = xml_root.get('profile')
+
+    if not executeType:
+        executeType = ExecuteType.createExecuteType(\
+                xml_root.find('execute_type').text)
+
+    for dev in range(deviceLen):
+        planTempName = plan_name + str(dev)
+        devId = devices[dev].getDeviceId()
+        planList.append(TctShellPlan(planTempName, devId, profile, \
+                executeType, [], tizenVer, resultFolderPath, stubPort, \
+                plan_name))
+
+    for xml_suite in xml_root.findall('suite'):
+        if not _verifySuite(xml_suite, tizenVer):
+            continue
+        autoCount = int(xml_suite.find("auto_tcn").text)
+        category = xml_suite.get("category")
+        if category and category.find('Runtime') > -1:
+            etime = autoCount * (Constants.SUITE_TEST_EXPECTED_TIME + 2)
+        else:
+            etime = (autoCount * 2) + Constants.SUITE_TEST_EXPECTED_TIME
+
+        suite_name = xml_suite.get("name")
+        if skip_package and str(skip_package).find(suite_name) > -1:
+            LOGGER.error("[skip package : %s]" % suite_name)
+        else:
+            is_make_ne = 0
+            if make_ne_package and str(make_ne_package).find(suite_name) > -1:
+                issue_num = _pars_issue_num(make_ne_package[0], suite_name)
+                is_make_ne = int(issue_num)
+
+            suite = TctShellSuite(suite_name, None, \
+                xml_suite.find("auto_tcn").text, xml_suite.find("manual_tcn").text,\
+                xml_suite.find("pkg_name").text, xml_suite.get("launcher"), \
+                xml_suite.get("category"), tizenVer, skip_count, skip_tc, \
+                devmgr, pre_test=pre_test, post_test=post_test, is_make_ne=is_make_ne)
+
+            suite.setExpectedTime(etime)
+            if suite.suite_pkg_name is None:
+                LOGGER.warning("suite: [%s] has missing information" \
+                       % suite.suiteName)
+                return None
+            suites.append(suite)
+    suites.sort(key=lambda x: x.expectedTime, reverse=True)
+    for suite in suites:
+        minPlan = min(planList, key=lambda x: x.expectedTime)
+        minPlan.addExpectedTime(suite.getExpectedTime())
+        minPlan.addSuite(suite)
+
+    for plan in planList:
+        LOGGER.debug("%s has ECT: %d" % (plan.getPlanName(), \
+                plan.expectedTime))
+
+    return planList
+
+
+def _parsResultForRerun(wrapper, skip_package, skip_count, skip_tc, devmgr, \
+        distribute_count, pre_test=None, post_test=None, make_ne_package=None):
+    result = wrapper.get_result_for_rerun()
+    rerun_plan_creator = ResultSummary()
+    rerun_data = rerun_plan_creator.prepareRerun(result)
+    if len(rerun_data) < 1:
+        LOGGER.debug("No unpassed results to rerun")
+        return None
+
+    plans = []
+    for plan_path, rerun_info in rerun_data.items():
+        planFolder = plan_path
+        intention_info = rerun_info[0]
+        suites_path = rerun_info[1]
+        plan_name = intention_info[0]
+        executeType = ExecuteType.createExecuteType(intention_info[1])
+        profile = intention_info[2]
+        tizenVer = intention_info[3]
+        deviceId = intention_info[4]
+        scen_resultFolderPath = intention_info[6]
+
+        if len(suites_path) < 1:
+            LOGGER.debug("No unpassed results to rerun in plan: [%s]" \
+                    % plan_name)
+            continue
+
+        if devmgr.getDevice(deviceId) is None:
+            if len(rerun_data) > 1:
+                LOGGER.error("Required devices not connected. " + \
+                        "Check what devices were used for the scenario.")
+
+            LOGGER.warning("WARNING: \
+                    Device used for the test is not connected: \
+                    device id: %s" % deviceId)
+            LOGGER.warning("WARNING: Rerunning the test in a different device")
+            if Constants.isDistMode():
+                deviceId = None
+            else:
+                deviceId = wrapper.get_deviceId()
+
+        suites = []
+        resultFolderPath = wrapper.get_resultFolderPath()
+        if not resultFolderPath:
+            resultFolderPath = planFolder
+
+        for counter, suite_path in enumerate(suites_path):
+            counter = counter + 1
+            suite_pkg_name = os.path.join(os.path.basename(\
+                    os.path.dirname(suite_path)), os.path.basename(suite_path))
+            suite_zipname = os.path.basename(suite_pkg_name)
+            suite_name = _geneSuiteName(suite_zipname, tizenVer)
+            auto_num, manual_num, suite_launcher, suite_category, \
+                    tc_exist, s_name = _get_suiteInfo(suite_zipname, \
+                    suite_path, None)
+
+            dist_res = None
+            if distribute_count:
+                dist_res = _check_dist_number(counter, distribute_count)
+
+            if skip_package and str(skip_package).find(suite_name) > -1:
+                LOGGER.error("[skip package : %s]" % suite_name)
+            else:
+                is_make_ne = 0
+                if make_ne_package and \
+                    str(make_ne_package).find(suite_name) > -1:
+                    issue_num = _pars_issue_num(make_ne_package[0], \
+                        suite_name)
+                    is_make_ne = int(issue_num)
+
+                suite = TctShellSuite(suite_name, None, auto_num, manual_num, \
+                        suite_pkg_name, suite_launcher, suite_category, \
+                        tizenVer, skip_count, skip_tc, devmgr, \
+                        pre_test=pre_test, \
+                        post_test=post_test, \
+                        is_make_ne=is_make_ne)
+
+                if not distribute_count:
+                    suites.append(suite)
+                elif dist_res:
+                    suites.append(suite)
+
+        plan = TctShellPlan(plan_name, devmgr, deviceId, profile, executeType, suites,\
+                tizenVer, resultFolderPath, wrapper.get_stubPort())
+        plan.setScenResultFolderPath(scen_resultFolderPath)
+        plan.setRerunning(True)
+        plans.append(plan)
+
+    if Constants.isDistMode():
+        for plan in plans:
+            if not plan.setup_distribute():
+                raise
+
+    return plans
+
+
+def _geneSuiteName(suite_zipname, _tizenV):
+    suite_name = ""
+    match_ext = ""
+
+    if _tizenV:
+        match_ext = "-{}.zip".format(_tizenV.split('_')[-1])
+        find_idx = suite_zipname.find(match_ext)
+        if find_idx > -1:
+            suite_name = suite_zipname[0:find_idx]
+        else:
+            LOGGER.warning("Not found suite name")
+
+    return suite_name
+
+
+MATCH_CT = 0
+def _check_dist_number(suite_num, dist_ct):
+    global MATCH_CT
+    total = int(dist_ct.split('-')[0])
+    curr = int(dist_ct.split('-')[1])
+
+    if curr > total:
+        LOGGER.error("distribute command error")
+        raise
+
+    if MATCH_CT == 0:
+        MATCH_CT = MATCH_CT + curr
+    if suite_num == MATCH_CT:
+        MATCH_CT = MATCH_CT + total
+        return True
+    else:
+        return False
+
+
+def _pars_issue_num(_make_ne_package, _suite_name):
+    ne_pack_list = _make_ne_package.split(',')
+    for _pn in ne_pack_list:
+        if _pn.find(_suite_name) > -1:
+            return _pn.split(':')[1]
+    return 0
+
+
+class IntentionGenerator:
+    # return : bool
+    @staticmethod
+    def genIntentionData(wrapper, devmgr):
+        skip_package = wrapper.get_skip_package()
+        skip_count = wrapper.get_skip_count()
+        skip_tc = wrapper.get_skip_tc()
+        make_ne_package = wrapper.get_make_ne()
+        pre_test = wrapper.get_pre_test()
+        post_test = wrapper.get_post_test()
+        distribute_count = wrapper.get_distribute_count()
+
+        if wrapper.get_running_mode() == Constants.RUNNING_MODE_RERUN:
+            return _parsResultForRerun(wrapper, skip_package, skip_count, \
+                    skip_tc, devmgr, distribute_count, \
+                    make_ne_package=make_ne_package)
+
+        intention_type = wrapper.getIntentionType()
+        deviceId = None
+        if not (intention_type == IntentionType.AutoPlan or \
+                Constants.isDistMode()):
+            deviceId = wrapper.get_deviceId()
+        else:
+            deviceId = None
+
+        tcId = wrapper.get_testcase_id()
+        executeType = wrapper.get_execute_type()
+        suites = wrapper.get_suites()
+        tizenVer = wrapper.get_tizenV()
+        resultFolderPath = wrapper.get_resultFolderPath()
+        stubPort = wrapper.get_stubPort()
+
+        if intention_type == -1:
+            return None
+
+        if (intention_type == IntentionType.TestPlan or \
+            intention_type == IntentionType.TestProfile or \
+            intention_type == IntentionType.TestSuite) and \
+            not Constants.isDistMode():
+            if not wrapper.is_make_summary_mode():
+                if not devmgr.isDeviceAvailable(deviceId):
+                    LOGGER.error("Device [%s] is not connected" % deviceId)
+                    LOGGER.error("Required devices not connected properly")
+                    return None
+
+        if intention_type == IntentionType.TestScenario:
+            scenFile = wrapper.get_scenfile()
+            scenName = wrapper.get_scen_name()
+            plans = _parsTestScenario(scenName, scenFile, stubPort, \
+                    skip_package, skip_count, skip_tc)
+        elif intention_type == IntentionType.TestPlan:
+            name = wrapper.get_plan_name()
+            planFile = wrapper.get_planfile()
+            plans = _parsTestPlan(planFile, name, deviceId, executeType, \
+                    tizenVer, resultFolderPath, stubPort, skip_package, \
+                    skip_count, skip_tc, devmgr, make_ne_package=make_ne_package, \
+                    pre_test=pre_test, post_test=post_test)
+        elif intention_type == IntentionType.TestCase:
+            plans = _parsTestCase(suites, deviceId, executeType, tizenVer, \
+                    tcId, resultFolderPath, stubPort, devmgr)
+        elif intention_type == IntentionType.TestSuite:
+            plans = _parsTestSuite(suites, deviceId, executeType, tizenVer, \
+                    None, resultFolderPath, stubPort, devmgr, skip_count, \
+                    skip_tc, make_ne_package=make_ne_package, pre_test=pre_test, post_test=post_test)
+        elif intention_type == IntentionType.AutoPlan:
+            name = wrapper.get_plan_name()
+            autoFile = wrapper.get_autoplanfile()
+            plans = _parsAutoPlan(autoFile, name, executeType, tizenVer, \
+                    resultFolderPath, stubPort, skip_package, skip_count, \
+                    skip_tc, devmgr, make_ne_package=make_ne_package, pre_test=pre_test, post_test=post_test)
+        elif intention_type == IntentionType.TestProfile:
+            profile_suites = wrapper.get_profile_suites()
+            if not profile_suites:
+                return None
+            profile = wrapper.get_profile()
+            plans = _parsTestProfile(profile_suites, deviceId, executeType, \
+                    tizenVer, profile, resultFolderPath, stubPort, \
+                    skip_package, skip_count, skip_tc, devmgr, distribute_count, \
+                    make_ne_package=make_ne_package, pre_test=pre_test, post_test=post_test)
+
+        return plans
diff --git a/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/shell/tctshell/logmanager.py b/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/shell/tctshell/logmanager.py
new file mode 100755 (executable)
index 0000000..ae7a4a8
--- /dev/null
@@ -0,0 +1,168 @@
+import logging
+import os
+import shutil
+
+BLACK, RED, GREEN, YELLOW, BLUE, MAGENTA, CYAN, WHITE = range(8)
+
+RESET_SEQ = "\033[0m "
+COLOR_SEQ = "\033[%dm "
+BOLD_SEQ = "\033[1m "
+
+LEVELS = {"CRITICAL": 50,
+          "ERROR": 40,
+          "WARNING": 30,
+          "INFO": 20,
+          "DEBUG": 10,
+          "NOTSET": 0
+          }
+
+COLORS = {"CRITICAL": YELLOW,
+          "ERROR": RED,
+          "WARNING": YELLOW,
+          "INFO": WHITE,
+          "DEBUG": CYAN,
+          "NOTSET": WHITE
+          }
+
+
+def formatter_message(message, use_color=True):
+    if use_color:
+        message = message.replace("$RESET", RESET_SEQ)\
+                .replace("$BOLD", BOLD_SEQ)
+    else:
+        message = message.replace("$RESET", "").replace("$BOLD", "")
+
+    return message
+
+
+class ColoredFormatter(logging.Formatter):
+
+    def __init__(self, msg, datefmt, use_color=True):
+        logging.Formatter.__init__(self, msg, datefmt)
+        self.use_color = use_color
+
+    def format(self, record):
+        levelname = record.levelname
+        record_msg = record.msg
+        if self.use_color and levelname in COLORS:
+            if levelname == "ERROR":
+                colorsq = "\033[1;%dm "
+            else:
+                colorsq = COLOR_SEQ
+            colored_msg = colorsq % (30 + COLORS[levelname]) \
+                    + record_msg + RESET_SEQ
+            record.msg = colored_msg
+
+        return logging.Formatter.format(self, record)
+
+class MultiHandler(logging.Handler):
+
+    def __init__(self, dirname):
+        super(MultiHandler, self).__init__()
+        self.files = {}
+        self.dirname = dirname
+
+    def flush(self):
+        self.acquire()
+        try:
+            for fp in self.files.values():
+                fp.flush()
+        finally:
+            self.release()
+
+    def _get_or_open(self, key):
+        self.acquire()
+        try:
+            if key in self.files:
+                return self.files[key]
+            else:
+                file_path = os.path.join(self.dirname, "%s.log" % key)
+                if os.path.exists(file_path):
+                    os.remove(file_path)
+                fp = open(file_path, "a")
+                self.files[key] = fp
+                return fp
+        finally:
+            self.release()
+
+    def deformat(self, msg):
+        import re
+        ansi_escape = re.compile(r'\x1b[^m]*m')
+
+        return ansi_escape.sub('', msg)
+
+    def emit(self, record):
+        try:
+            fp = self._get_or_open(record.processName)
+            msg = self.format(record)
+            #fp.write('%s\n' % self.deformat(msg).encode("utf-8"))
+            fp.write("%s\n" % str(msg))
+        except (KeyboardInterrupt, SystemExit):
+            raise
+        except UnicodeDecodeError:
+            pass
+        except:
+            self.handleError(record)
+
+
+class LogManager:
+
+    def __init__(self, logname="mTCT", log_format=\
+            '%(asctime)15s %(processName)18s #%(levelname).3s %(module) 18s:%(lineno)-4d %(message)s', \
+            dirname="/opt/tools/shell/tmp/logs"):
+        self._remove_logdir(dirname)
+        colorformatter1 = ColoredFormatter(formatter_message(log_format), \
+                "%Y-%m-%d_%H:%M:%S", False)
+
+        stderr_handler = logging.StreamHandler()
+        stderr_handler.setFormatter(colorformatter1)
+        logging.getLogger().addHandler(stderr_handler)
+
+        infoHandler = logging.FileHandler(dirname + "/info.log")
+        infoHandler.setLevel(logging.INFO)
+        infoHandler.setFormatter(colorformatter1)
+
+        debugHandler = logging.FileHandler(dirname + "/debug.log")
+        debugHandler.setLevel(logging.DEBUG)
+        debugHandler.setFormatter(colorformatter1)
+
+        errorHandler = logging.FileHandler(dirname + "/error.log")
+        errorHandler.setLevel(logging.ERROR)
+        errorHandler.setFormatter(colorformatter1)
+
+        warnHandler = logging.FileHandler(dirname + "/warning.log")
+        warnHandler.setLevel(logging.WARNING)
+        warnHandler.setFormatter(colorformatter1)
+
+        criticalHandler = logging.FileHandler(dirname + "/critical.log")
+        criticalHandler.setLevel(logging.CRITICAL)
+        criticalHandler.setFormatter(colorformatter1)
+
+        multi_handler = MultiHandler(dirname)
+        multi_handler.setFormatter(colorformatter1)
+        logging.getLogger().addHandler(multi_handler)
+
+        _logger = logging.getLogger(logname)
+        _logger.addHandler(infoHandler)
+        _logger.addHandler(debugHandler)
+        _logger.addHandler(errorHandler)
+        _logger.addHandler(warnHandler)
+        _logger.addHandler(criticalHandler)
+
+        _logger.setLevel('INFO')
+        self.logger = _logger
+
+    def _get_logger(self):
+        return self.logger
+
+    def _remove_logdir(self, dirname):
+        if os.path.exists(dirname):
+            shutil.rmtree(dirname)
+        if not os.path.exists(dirname):
+            os.makedirs(dirname, mode=0o777)
+
+        if not os.access(dirname, os.W_OK):
+            raise Exception("Directory %s not writeable" % dirname)
+
+
+LOGGER = LogManager()._get_logger()
diff --git a/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/shell/tctshell/logmanager.pyc b/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/shell/tctshell/logmanager.pyc
new file mode 100755 (executable)
index 0000000..b07ebe6
Binary files /dev/null and b/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/shell/tctshell/logmanager.pyc differ
diff --git a/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/shell/tctshell/netstatmonitor.py b/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/shell/tctshell/netstatmonitor.py
new file mode 100755 (executable)
index 0000000..74feb07
--- /dev/null
@@ -0,0 +1,89 @@
+#!/usr/bin/python
+
+import time
+
+from .sdbmanager import SdbManager
+from .logmanager import LOGGER
+from multiprocessing import Process
+
+
+class NetstatMonitor(Process):
+
+    netstat_cmd = 'netstat -tan | grep %s'
+    deviceId = ""
+
+    def __init__(self, deviceId, devmgr):
+        Process.__init__(self)
+        self.daemon = True
+        self.name = "Netstat_%s" % deviceId.split('.')[-1].split(':')[0]
+        self.deviceId = deviceId
+        self.__suspend = True
+        self.devmgr = devmgr
+        self.recovery_lock = None
+        self.isFinish = False
+
+    def run(self):
+        LOGGER.debug("Starting NetstatLogger")
+        state_changed = False
+        wasConnected = True
+        while True:
+            if self.isFinish:
+                break
+            time.sleep(10)
+            exit_code, stdout, stderr = SdbManager.sdbCommand(\
+                    self.netstat_cmd % self.deviceId, 3)
+            outLog = stdout.read()
+            netValues = self.parsingLogData(outLog)
+            isConnected = self.checkConnectState(netValues)
+            state_changed = isConnected is not wasConnected
+
+            if state_changed:
+                if isConnected:
+                    LOGGER.info("Device connected")
+                    self.device_recovered()
+                else:
+                    LOGGER.error("Device disconnected")
+                self.reLoadDeviceList()
+            wasConnected = isConnected
+
+    def kill_netMonitor(self):
+        self.isFinish = True
+
+    def getThreadStatus(self):
+        return self.__suspend
+
+    def restartThread(self):
+        time.sleep(10)
+        LOGGER.info("Starting %s device monitor" % self.deviceId)
+        self.__suspend = False
+
+    def reLoadDeviceList(self):
+        LOGGER.debug('Netstat: reLoadDeviceList')
+        if not self.devmgr.loadDeviceList():
+            LOGGER.error('0 device is connected')
+
+    def parsingLogData(self, outLog):
+        outLog = outLog.rstrip()
+        resultLog = outLog.split(' ')
+        parsLog = []
+        for log in resultLog:
+            if len(log) != 0:
+                parsLog.append(log)
+
+        return parsLog
+
+    def setup_recovery(self, lock):
+        self.recovery_lock = lock
+
+    def device_recovered(self):
+        try:
+            self.recovery_lock.release()
+        except:
+            pass
+
+    def checkConnectState(self, netValues):
+        for val in netValues:
+            if val and val.find('ESTABLISHED') != -1:
+                return True
+
+        return False
diff --git a/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/shell/tctshell/plan_options.py b/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/shell/tctshell/plan_options.py
new file mode 100755 (executable)
index 0000000..399a67b
--- /dev/null
@@ -0,0 +1,229 @@
+#!/usr/bin/python
+#
+# Copyright (C) 2012 Intel Corporation
+# 
+# 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
+# of the License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
+#
+# Authors:
+#              Tang, Shaofeng <shaofeng.tang@intel.com>
+
+import sys
+import os
+import re
+import platform
+import glob
+from optparse import *
+from constants import Constants
+from logmanager import LOGGER
+
+
+#show all available suites
+def _show_available_suites(option, opt_str, value, parser):
+    print "Test Suites:...\n"
+    os.chdir("/opt/tct/")
+    for t_version in glob.glob("tizen*"):
+        print "Tizen Version : %s" % t_version
+        package_dir = os.path.join(os.path.abspath(t_version), 'packages')
+        if not os.path.isdir(package_dir):
+            continue
+        os.chdir(package_dir)
+        for profile in glob.glob("*"):
+            if profile == 'pkg_infos':
+                continue
+            print "      profile : %s" % profile
+            os.chdir(os.path.abspath(profile))
+            for files in glob.glob("*.zip"):
+                print "                " + files[:-4]
+            os.chdir('../')
+        os.chdir('../../')
+    sys.exit(1)
+
+
+def _print_planfolder(option, opt_str, value, parser):
+    print "Plan folder: %s" % Constants.TCT_PLAN_FOLDER
+    os.system("tree %s" % Constants.TCT_PLAN_FOLDER)
+    sys.exit(1)
+
+
+def varnarg(option, opt_str, value, parser):
+    """ parser srg"""
+    value = []
+    for arg in parser.rargs:
+        if re.search('^--.+', arg) or re.search('^-[\D]', arg):
+            break
+        value.append(arg)
+
+    del parser.rargs[:len(value)]
+    setattr(parser.values, option.dest, value)
+
+
+class PlanGeneratorOptions:
+
+    def __init__(self):
+        self._j = os.path.join
+        self._e = os.path.exists
+        self._d = os.path.dirname
+        self._b = os.path.basename
+        self._abspath = os.path.abspath
+        self.testkit_dir = "/opt/testkit/lite"
+        self.LOG_DIR = self.testkit_dir
+        self.PID_FILE = self._j(self.LOG_DIR, "pid.log")
+        if not platform.system() == "Linux":
+            self.testkit_dir = self._d(self._abspath(__file__))
+            sys.path += [self._j(self.testkit_dir)]
+            self.testkit_dir = self._j(self.testkit_dir, "results")
+        #self.clean_context()
+        self.options = None
+        self.options = None
+        self.running_mode = None
+        self.USAGE = "tct-plan-generator [options] --output <somewhere/testplan.xml>\n\
+examples: \n\
+          tct-plan-generator  -p mobile -o  <somewhere>/testplan.xml\n\
+          tct-plan-generator  -p mobile -o  <somewhere>/testplan.xml -r <somewhere>/repository_folder\n\
+          tct-plan-generator  -p mobile -o  <somewhere>/testplan.xml -r <somewhere>/repository_folder --match '<regex>'\n\
+\n\
+    generate a test plan to include all suites in the local repository: \n\
+          tct-plan-generator  -p mobile -o  <somewhere>/testplan.xml\n\
+    generate a test plan to include all suites in the special repository: \n\
+          tct-plan-generator  -p mobile -o  <somewhere>/testplan.xml -r <somewhere>/repository_folder\n\
+    generate a test plan to include the suites in the special repository which name is matched with 'webapi*.rpm': \n\
+          tct-plan-generator  -p mobile -o  <somewhere>/testplan.xml -r <somewhere>/repository_folder  --match 'webapi*.rpm'\n\
+    generate a test plan to include the suites in the special repository which name is matched with 'webapi*.rpm', and exclude the file 'webapi-tizen-push-tests-2.1.6-1.1.armv7l.rpm': \n\
+          tct-plan-generator  -p mobile -o  <somewhere>/testplan.xml -r <somewhere>/repository_folder  --match 'webapi*.rpm' --unmatch push\n\
+\n\
+Note: \n\
+          1) run command 'tct-plan-generator', it might not be able to locate related module, run command 'export PYTHONPATH=/usr/lib/python2.7/site-packages' to resolve this issue"
+
+    def print_usage(self):
+        print self.USAGE
+
+    def parse_options(self, argv):
+        option_list = [
+                make_option("-o", "--output", dest="testplan_file", \
+                        action="callback", callback=varnarg, \
+                        help="Specify the generating testplan in a XML file."),
+                make_option("-e", "--execute", dest="execute_type", \
+                        action="callback", callback=varnarg, \
+                        help="Specify the execute_type of testplan in a XML file."),
+                make_option("-r", "--repository", dest="repository_folder", \
+                        action="callback", callback=varnarg, \
+                        help="Specify the path of local repository."),
+                make_option("--tizen-version", dest="tizenversion", \
+                        action="callback", callback=varnarg, \
+                        help="Specify the name of tizen-version you want to run test. The tizen-version is defined in the local repository. and its path is '/opt/tct/'"),
+                make_option("-m", "--match", dest="match_regex", \
+                        action="callback", callback=varnarg, \
+                        help="The regex for matching filename."),
+                make_option("-p", "--profile", dest="test_profile", \
+                        action="callback", callback=varnarg, \
+                        help="The profile of the test plan."),
+                make_option("-u", "--unmatch", dest="unmatch_regex", \
+                        action="callback", callback=varnarg, \
+                        help="The regex for unmatching filename."),
+                make_option("--plan-list", dest="show_plan_folder", \
+                        action="callback", callback=_print_planfolder, \
+                        help="List all existed plan in the Plan folder. The plan folder is defined in the configure '/opt/tct/shell/CONF'"),
+                make_option("-a", "--all-suites", dest="show_suites", \
+                        action="callback", callback=_show_available_suites, \
+                        help="Show all available test-suites"),
+                ]
+        # detect non-params
+        if len(argv) == 1:
+            argv.append("-h")
+        PARSERS = OptionParser(option_list=option_list, usage=self.USAGE)
+        (self.options, args) = PARSERS.parse_args()
+
+        if self.options.tizenversion:
+            self.check_tizen_version()
+        else:
+            LOGGER.error("The default tizen version could not be set.")
+            sys.exit("No tizen version specified")
+
+        if not self.options.match_regex:
+            LOGGER.error("The default match_regex could not be set.")
+            sys.exit("No match regex specified. Use -m or --match option")
+
+    def check_tizen_version(self):
+        tizenversion = self.options.tizenversion[0]
+        VER_PATTERN = "^tizen_web_\d.\d|^tizen_native_\d.\d|^tizen_csharp_\d.\d"
+        pa = re.compile(VER_PATTERN, re.I)
+        ma = pa.match(tizenversion)
+        if ma is None:
+            LOGGER.error("A required \"/opt/tct/" + tizenversion + \
+                    " could not be found.")
+            sys.exit("Invalid Tizen version. Tizen version must be in the form of tizen_(web|native|csharp)_#.#")
+            return False
+        return True
+
+    def get_repository_folder(self):
+        if (self.options.repository_folder is not None) and \
+            (self.options.repository_folder[0] is not None):
+            return self.options.repository_folder[0]
+        else:
+            return Constants.SUITES_REPOSITORY % self.get_tizenV()
+
+    def get_match_regex(self):
+        if (self.options.match_regex is not None) and \
+                (self.options.match_regex[0] is not None):
+            return self.options.match_regex[0]
+        else:
+            return Constants.DEFAULT_MATCH_REGEX
+
+    def get_plan_name(self):
+        if (self.options.testplan_file is not None) and \
+                (self.options.testplan_file[0] is not None):
+            name, ext = os.path.splitext(self.options.testplan_file[0])
+            return name.split("/")[-1]
+        else:
+            return Constants.DEFAULT_PLAN_NAME
+
+    def get_profile_name(self):
+        if (self.options.test_profile is not None) and \
+                 (self.options.test_profile[0] is not None):
+            return self.options.test_profile[0]
+        else:
+            return Constants.DEFAULT_PROFILE_NAME
+
+    def get_execute_type(self):
+        if (self.options.execute_type is not None) and \
+                (self.options.execute_type[0] is not None):
+            return self.options.execute_type[0]
+        else:
+            return Constants.DEFAULT_EXECUTE_TYPE
+
+    def get_tizenV(self):
+        if (self.options.tizenversion is not None) and \
+                (self.options.tizenversion[0] is not None):
+            return self.options.tizenversion[0]
+        else:
+            print "Error: Please specify Tizen version with [--tizen-version] option"
+            sys.exit(1)
+
+    def get_output(self):
+        if (self.options.testplan_file is not None) and \
+                (self.options.testplan_file[0] is not None):
+            d = os.path.abspath(os.path.dirname(self.options.testplan_file[0]))
+            if not os.path.exists(d):
+                os.makedirs(d)
+            return os.path.abspath(self.options.testplan_file[0])
+        else:
+            return Constants.TCT_PLAN_FOLDER + "generated_plan.xml"
+
+    def get_unmatch_regex(self):
+        if (self.options.unmatch_regex is not None) and \
+                (self.options.unmatch_regex[0] is not None):
+            return self.options.unmatch_regex[0]
+        else:
+            return Constants.DEFAULT_UNMATCH_REGEX
diff --git a/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/shell/tctshell/plan_runner.py b/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/shell/tctshell/plan_runner.py
new file mode 100755 (executable)
index 0000000..28553c1
--- /dev/null
@@ -0,0 +1,226 @@
+#!/usr/bin/python
+#
+# Copyright (C) 2012 Intel Corporation
+# 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
+# of the License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+# 02110-1301, USA.
+#
+# Authors:
+#              Tang, Shaofeng <shaofeng.tang@intel.com>
+
+from constants import Constants
+from xml.etree import ElementTree
+from logmanager import LOGGER
+import xml.etree.ElementTree as etree
+import os
+import os.path
+import sys
+import glob
+import re
+
+
+class SuitePackage:
+    def __init__(self, profile, file_name, launcher, category, auto_count, \
+            manual_count):
+        self.file = file_name
+        self.profile = profile
+        m = re.split(Constants.REGEX_FOR_SPLIT_PKG_NAME, file_name)
+        self.name = m[0]
+        self.auto_count = auto_count
+        self.manual_count = manual_count
+        self.total_count = auto_count + manual_count
+        self.launcher = launcher
+        self.category = category
+
+    def to_xml(self):
+        suite = ElementTree.Element('suite')
+        suite.set('name', self.name)
+        if self.launcher:
+            suite.set('launcher', self.launcher)
+
+        if self.category:
+            suite.set('category', self.category)
+
+        auto = ElementTree.Element('auto_tcn')
+        auto.text = str(self.auto_count)
+        suite.append(auto)
+        manual = ElementTree.Element('manual_tcn')
+        manual.text = str(self.manual_count)
+        suite.append(manual)
+        total = ElementTree.Element('total_tcn')
+        total.text = str(self.total_count)
+        suite.append(total)
+        rpm_name = ElementTree.Element('pkg_name')
+        rpm_name.text = self.profile + '/' + self.file
+        suite.append(rpm_name)
+
+        return suite
+
+
+class PlanRunner:
+
+    def __init__(self):
+        self.suites = {}
+        self.suite_paths = []
+        self.plan_name = Constants.DEFAULT_PLAN_NAME
+        self.profile = Constants.DEFAULT_PROFILE_NAME
+        self.execute_type = Constants.DEFAULT_EXECUTE_TYPE
+
+    def load_local_repo(self, path, tizenV, match, unmatch, plan_name, \
+            profile, execute_type):
+        try:
+            self.plan_name = plan_name
+            self.profile = profile
+            self.execute_type = execute_type
+            raw_paths = []
+            repos = ['common', profile]
+            for tp in repos:
+                repo = '/'.join([path, tp])
+                if not os.path.isdir(repo):
+                    continue
+
+                os.chdir(repo)
+                for files in glob.glob("*" + match + "*"):
+                    print "Matched File name: %s" % str(os.path.abspath(files))
+                    if (unmatch is not None) and (re.search(unmatch, \
+                            str(files))):
+                        print "File %s is skipped with unmatch regex %s" \
+                                % (str(files), unmatch)
+                    else:
+                        raw_paths.append(os.path.join(repo, str(files)))
+
+            if len(raw_paths) < 1:
+                sys.exit("Match regex: [%s] No matching suite package found." \
+                        % match)
+
+            self.suite_paths = self._chooseProfile(raw_paths)
+            for files in self.suite_paths:
+                profile = os.path.basename(os.path.dirname(files))
+                auto, manual, launcher, category = \
+                        self.get_count_launcher_category(\
+                        os.path.basename(files), files)
+                suite = SuitePackage(profile, os.path.basename(files), \
+                        launcher, category, auto, manual)
+                self.suites[suite.name] = suite
+                Constants.clean_unzip_file()
+        except Exception, e:
+            print "[ Error happen when reading the local repository," + \
+                    " error: %s ]\n" % e
+
+    def _chooseProfile(self, path_suites):
+        suite_profiles = {}
+        filtered_suites = []
+        suite_repo = os.path.dirname(os.path.dirname(path_suites[0]))
+        for suite_path in path_suites:
+            suite_zipname = os.path.basename(suite_path)
+            sprofile = os.path.basename(os.path.dirname(suite_path))
+            if not suite_zipname in suite_profiles:
+                suite_profiles[suite_zipname] = []
+
+            suite_profiles[suite_zipname].append(sprofile)
+
+        for suiteName, suiteProfile in suite_profiles.items():
+            suite_name = "-".join(suiteName[:-4].split("-")[:-1])
+            if len(suiteProfile) == 1:
+                suite_profiles[suiteName] = suiteProfile[0]
+                continue
+
+            print "\nMultiple profiles for [%s] \
+                    :\n----------------------------------------------" \
+                    % suite_name
+
+            for profile_i in suiteProfile:
+                print " - %s" % profile_i
+
+            suite_profile = None
+            while not suite_profile in suiteProfile:
+                suite_profile = raw_input("\nChoose profile: ")
+
+            suite_profiles[suiteName] = suite_profile
+
+        check_profile = None
+        multiProfiles = False
+        for suiteName, suiteProfile in suite_profiles.items():
+            if suiteProfile != 'common':
+                if check_profile is not None and check_profile != suiteProfile:
+                    multiProfiles = True
+
+                if check_profile is None:
+                    check_profile = suiteProfile
+
+            filtered_suites.append(\
+                    os.path.join(suite_repo, suiteProfile, suiteName))
+
+        if multiProfiles:
+            LOGGER.warning("WARNING: \
+                    Multiple suites run with different profiles")
+
+        return filtered_suites
+
+    def get_count_launcher_category(self, filesname, filepath):
+        Constants.unzip_package(filepath)
+        m = re.split(Constants.REGEX_FOR_SPLIT_PKG_NAME, filesname)
+        name = m[0]
+        test_file = os.path.expanduser("~") + "/" + \
+                Constants.DEFAULT_PLAN_FILE + "/opt/" + name + "/tests.xml"
+        if not os.path.exists(test_file):
+            print("Can't find the test file : [%s]" % test_file)
+            return 0, 0, Constants.WRT_LAUNCHER_CMD, None
+
+        return self.__read_test_xml(test_file)
+
+    def __read_test_xml(self, test_file):
+        autocnt = manualcnt = 0
+        test_xml_temp = etree.parse(test_file)
+
+        for test_xml_temp_suite in test_xml_temp.getiterator('suite'):
+            suite_launcher = test_xml_temp_suite.get('launcher')
+            suite_category = test_xml_temp_suite.get('category')
+            autocnt = manualcnt = 0
+            for tset in test_xml_temp_suite.getiterator('set'):
+                set_autocnt, set_manualcnt = self.__get_set_casecnt(tset)
+                autocnt += set_autocnt
+                manualcnt += set_manualcnt
+
+        return autocnt, manualcnt, suite_launcher, suite_category
+
+    def __get_set_casecnt(self, tset):
+        set_autocnt = set_manualcnt = 0
+        for tcase in tset.getiterator('testcase'):
+            exetype = tcase.get('execution_type')
+            if exetype == "auto":
+                set_autocnt += 1
+            elif exetype == "manual":
+                set_manualcnt += 1
+
+        return set_autocnt, set_manualcnt
+
+    def to_xml(self, xml_name):
+        print "generating plan to %s" % xml_name
+        root = ElementTree.Element('ns3:testplan')
+        root.set('name', self.plan_name)
+        root.set('profile', self.profile)
+        root.set('xmlns', '')
+        root.set('xmlns:ns3', 'http://www.example.org/plan/')
+        element = ElementTree.Element('execute_type')
+        element.text = self.execute_type
+        root.append(element)
+        for suite_name in self.suites:
+            suite = self.suites[suite_name]
+            root.append(suite.to_xml())
+
+        Constants.indent(root)
+        tree = ElementTree.ElementTree()
+        tree._setroot(root)
+        tree.write(xml_name, encoding="utf-8")
diff --git a/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/shell/tctshell/result_manager.py b/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/shell/tctshell/result_manager.py
new file mode 100755 (executable)
index 0000000..40fee25
--- /dev/null
@@ -0,0 +1,204 @@
+#!/usr/bin/python
+
+import os
+import threading
+from xml.etree import ElementTree
+
+from .logmanager import LOGGER
+from .result_summary import ResultSummary
+from .constants import Constants
+from .shellplanner import MultiRunnPlan
+
+
+class ResultManager:
+
+    #MultiRunnPlan instance
+    mrp = None
+
+    def __init__(self):
+        self.mrp = MultiRunnPlan.getInstance()
+        self.mrp.attach(self)
+        self.lock = threading.Lock()
+        self.summary_lock = threading.Lock()
+        self.plans = []
+
+    def importResult(self):
+        plan = None
+        merge_groups = {}
+        #plans = self.mrp.getPlanDict().values()[:]
+        plans = list(self.mrp.getPlanDict().values())[:]
+
+        for plan in plans:
+            tizenVer_buildId = "%s_%s" \
+                    % (plan.getTizenVersion(), plan.getBuildId())
+
+            #if merge_groups.has_key(tizenVer_buildId):
+            if tizenVer_buildId in merge_groups:
+                continue
+
+            merge_group = []
+            for plan in plans:
+                if "%s_%s" % (plan.getTizenVersion(), plan.getBuildId()) \
+                        == tizenVer_buildId:
+                    merge_group.append(plan)
+            merge_groups[tizenVer_buildId] = merge_group
+
+            #folder path grouping
+            #return plans that have finished.
+        return merge_groups
+
+    def waitForFinishedPlans(self):
+        #self.plans = self.mrp.getPlanDict().values()[:]
+        p_list = list(self.mrp.getPlanDict().values())
+        self.plans = p_list[:]
+        while bool(self.mrp.getPlanDict()):
+            LOGGER.debug("waiting for lock")
+            self.lock.acquire()
+            LOGGER.debug("Lock acquired")
+            self.checkFinished()
+        LOGGER.debug("All plans finished")
+        self.print_result_summaries()
+
+    def update(self):
+        LOGGER.debug('waiting for summary lock')
+        self.summary_lock.acquire()
+        LOGGER.debug('summary lock acquired')
+        self.lock.release()
+        LOGGER.debug("lock released")
+
+    def checkFinished(self):
+        LOGGER.debug("Waiting for a plan to finish --> waiting for a lock")
+        self.lock.acquire()
+        LOGGER.debug("Notified: Plan finished. \
+                Check for auto summary merge. --> lock acquired")
+        finished_groups = []
+        merge_groups = self.importResult()
+        for tizenVer_buildId in merge_groups:
+            finished_groups.append(tizenVer_buildId)
+            for plan in merge_groups[tizenVer_buildId]:
+                if not plan.isFinished():
+                    finished_groups.remove(tizenVer_buildId)
+                    break
+        for group in finished_groups:
+            self.genSummary(merge_groups[group])
+            self.mrp.removePlans(merge_groups[group])
+        self.lock.release()
+        LOGGER.debug("lock released")
+        self.summary_lock.release()
+        LOGGER.debug("summary lock released")
+
+    def genSummary(self, plans):
+        summary_file = None
+        #browser = 'firefox'
+        if Constants.RERUNING_MODE and Constants.SCENARIO_MODE:
+            summary = ResultSummary(plans=plans)
+            summary_file = summary.rerun_genSummaryForScen()
+            summary.updateScenStatus()
+        elif len(plans) > 1:
+            LOGGER.debug("generate Summary for Scenario")
+            summary = ResultSummary(plans=plans)
+            summary.makeMergedFolder()
+            summary_file = summary.genSummaryForScen()
+            summary.genScenStatus()
+        elif len(plans) == 1:
+            summary_file = os.path.join(\
+                    plans[0].getResultFolderPath(), 'summary.xml')
+        if summary_file is not None:
+            if not os.path.isfile(summary_file):
+                LOGGER.warning("Summary file [%s] does not exist" % summary_file)
+            '''
+            else:
+                try:
+                    url_path = urlparse.urljoin('file:', \
+                            urllib.pathname2url(summary_file))
+                    webbrowser.get(browser).open(url_path, new=2)
+                except Exception, e:
+                    LOGGER.error("[ Error: opening summary file with \
+                            %s failed, error: %s ]\n" %(browser, e))
+                    pass
+            '''
+
+    def print_result_summaries(self):
+        resultFolderPaths = []
+        tizenV = None
+        if self.plans:
+            scen_resultFolderPath = None
+            for plan in self.plans:
+                if tizenV is None:
+                    tizenV = plan.getTizenVersion()
+
+                if plan.scen_resultFolderPath is None or \
+                        not os.path.isdir(plan.scen_resultFolderPath):
+                    resultFolderPath = plan.getResultFolderPath()
+                    summary_xml = os.path.join(resultFolderPath, 'summary.xml')
+                    self.print_result_summary(summary_xml)
+                    resultFolderPaths.append(\
+                            (plan.getPlanName(), resultFolderPath))
+                elif plan.scen_resultFolderPath != scen_resultFolderPath:
+                    resultFolderPath = plan.getScenResultFolderPath()
+                    scen_resultFolderPath = resultFolderPath
+                    summary_xml = os.path.join(resultFolderPath, 'summary.xml')
+                    self.print_result_summary(summary_xml)
+                    resultFolderPaths.append(\
+                            (plan.getScenName(), resultFolderPath))
+
+        distribute = " --distribute" if Constants.isDistMode() else ""
+        rerun_command = "tct-shell --tizen-version {0} --rerun-fail %s {1}".\
+            format(tizenV, distribute)
+        for result in resultFolderPaths:
+            LOGGER.info("[%s] Rerun command: %s" \
+                    % (result[0], rerun_command % result[1]))
+
+    def print_result_summary(self, result_file):
+        if not os.path.isfile(result_file):
+            LOGGER.warning("Result_file [%s] does not exist" % result_file)
+            return
+        tree = ElementTree.parse(result_file)
+        root = tree.getroot()
+        suites = root.findall('suite')
+        total_cases = 0
+        pass_cases = 0
+        fail_cases = 0
+        block_cases = 0
+        na_cases = 0
+        for total_i in root.findall('suite/total_case'):
+            total_cases += int(total_i.text)
+        for pass_i in root.findall('suite/pass_case'):
+            pass_cases += int(pass_i.text)
+        for fail_i in root.findall('suite/fail_case'):
+            fail_cases += int(fail_i.text)
+        for block_i in root.findall('suite/block_case'):
+            block_cases += int(block_i.text)
+        for na_i in root.findall('suite/na_case'):
+            na_cases += int(na_i.text)
+
+        LOGGER.info("[Result: execute %d suites]" % len(suites))
+        LOGGER.info("[  total case number: %d ]" % total_cases)
+        if total_cases > 0:
+            LOGGER.info("[    Pass Rate: %.2f" \
+                    % (float(pass_cases) * 100 / total_cases) + "% ]")
+        else:
+            LOGGER.info("[    Pass Rate: 0% ]")
+        LOGGER.info("[    PASS case number: %d ]" % pass_cases)
+        LOGGER.info("[    FAIL case number: %d ]" % fail_cases)
+        LOGGER.info("[    BLOCK case number: %d ]" % block_cases)
+        LOGGER.info("[    N/A case number: %d ]" % na_cases)
+        for suite in suites:
+            LOGGER.info(" Suite: %s" % suite.get("name"))
+            suite_total_cases = suite.find('total_case').text
+            suite_pass_cases = suite.find('pass_case').text
+            suite_fail_cases = suite.find('fail_case').text
+            suite_block_cases = suite.find('block_case').text
+            suite_na_cases = suite.find('na_case').text
+            suite_pass_rate = suite.find('pass_rate').text
+            LOGGER.info("      |---total case number: %s " % suite_total_cases)
+            LOGGER.info("      |      |---Pass rate: %s " \
+                    % suite_pass_rate + "%")
+            LOGGER.info("      |      |---PASS case number: %s " \
+                    % suite_pass_cases)
+            LOGGER.info("      |      |---FAIL case number: %s " \
+                    % suite_fail_cases)
+            LOGGER.info("      |      |---BLOCK case number: %s " \
+                    % suite_block_cases)
+            LOGGER.info("      |      |---N/A case number: %s " \
+                    % suite_na_cases)
diff --git a/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/shell/tctshell/result_summary.py b/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/shell/tctshell/result_summary.py
new file mode 100755 (executable)
index 0000000..3b7d0e5
--- /dev/null
@@ -0,0 +1,1180 @@
+#!/usr/bin/python
+
+from xml.etree import ElementTree
+import os
+import glob
+import shutil
+import errno
+import copy
+from .constants import Constants
+from .logmanager import LOGGER
+
+DEBUG = True
+
+
+def ele_set(element, attrib, content):
+    if content:
+        element.set(attrib, content)
+
+
+def ele_find(ele, child):
+    if ele.find(child) is not None:
+        return ele.find(child)
+    else:
+        return ElementTree.Element(child)
+
+
+def copyfiledir(src, dst):
+    try:
+        shutil.copytree(src, dst)
+        return dst
+    except OSError as exc:
+        if exc.errno == errno.ENOTDIR:
+            shutil.copy(src, dst)
+            return dst
+        else:
+            raise
+
+
+class ResultSummary:
+    env = None
+    summary = None
+    capability = None
+    suites = []
+    planid = None
+    unpass = None
+
+    def __init__(self, plans=None, rerun_suiteFiles=None):
+        self.am_suiteFiles = []
+        self.result_suiteFiles = []
+        self.suiteFiles = {}
+        self.rerun_suiteFiles = rerun_suiteFiles
+        self.am_suites = []
+        self.suites = []
+        self.profile = None
+        self.deviceid = None
+        self.planid = None
+        self.plans = plans
+        self.planDict = {}
+        if plans:
+            headplan = plans[0]
+            self.head_profile = headplan.getProfile()
+            self.head_deviceid = headplan.getDeviceId()
+            self.scenid = headplan.getScenName()
+            self.scen_resultFolder = headplan.getScenResultFolderPath()
+            if len(plans) > 1:
+                for plan in plans[1:]:
+                    plan.setScenResultFolderPath(self.scen_resultFolder)
+
+        self.env = self.ResEnvironment()
+        self.summary = self.ResSummary()
+        self.capability = self.ResCapabilities()
+
+    def genSummary(self, _resultFolder=None):
+        if Constants.RERUNING_MODE:
+            self.suiteFiles = self._rerun_findResultSuites_plan()
+        else:
+            self.suiteFiles = self._findResultSuites(_resultFolder)
+
+        for planFolder, plan in self.suiteFiles.items():
+            suiteResults_plan = []
+            for suite_am in plan.keys():
+                suiteResults_plan.append(suite_am + ".xml")
+
+            currPlan = self.planDict[planFolder]
+            self.profile = currPlan.getProfile()
+            self.deviceid = currPlan.getDeviceId()
+            self.suites = []
+            self.env = self.ResEnvironment()
+            self.summary = self.ResSummary()
+            self.capability = self.ResCapabilities()
+            self.planid = currPlan.getPlanName()
+            self.parse(suiteResults_plan)
+            self.summary_to_xml(os.path.join(planFolder, "summary.xml"))
+            if _resultFolder is None:
+                self.genPlanStatus(currPlan)
+        return
+
+    def genPlanStatus(self, plan):
+        root = ElementTree.Element('ns3:plan_status')
+        ele_set(root, 'xmlns:ns3', 'http://www.example.org/plan_status/')
+        ele_set(root, 'name', plan.getPlanName())
+        ele_set(root, 'profile', plan.getProfile())
+        ele_set(root, 'executeType', plan.getExecuteType().getCurrType())
+        ele_set(root, 'tizenVersion', plan.getTizenVersion())
+        device = ElementTree.Element('device')
+        ele_set(device, 'device_id', plan.getDeviceId())
+        ele_set(device, 'build_id', plan.getBuildId())
+        auto_tasks = ElementTree.Element('auto_tasks')
+        manual_tasks = ElementTree.Element('manual_tasks')
+        if plan.getExecuteType().getCurrType() == "Auto":
+            for suite in plan.getSuites():
+                executed = ElementTree.Element('executed')
+                executed.text = suite.getSuiteName()
+                auto_tasks.append(executed)
+        elif plan.getExecuteType().getCurrType() == "Manual":
+            for suite in plan.getSuites():
+                executed = ElementTree.Element('executed')
+                executed.text = suite.getSuiteName()
+                manual_tasks.append(executed)
+        elif plan.getExecuteType().getCurrType() == "All":
+            for suite in plan.getSuites():
+                executed = ElementTree.Element('executed')
+                executed.text = suite.getSuiteName()
+                auto_tasks.append(executed)
+                manual_tasks.append(executed)
+
+        root.append(device)
+        root.append(auto_tasks)
+        root.append(manual_tasks)
+
+        Constants.indent(root)
+        tree = ElementTree.ElementTree()
+        tree._setroot(root)
+        tree.write(os.path.join(plan.getResultFolderPath(), \
+                "plan_status.xml"), encoding="UTF-8")
+
+    def genScenStatus(self):
+        root = ElementTree.Element('scen_status')
+        ele_set(root, 'scenario_name', self.scenid)
+        for plan in self.plans:
+            plan_root = ElementTree.Element('plan')
+            ele_set(plan_root, 'name', plan.getPlanName())
+            ele_set(plan_root, 'result_folder', plan.getResultFolderPath())
+            ele_set(plan_root, 'has_unpass_tc', str(plan.getUnpass()))
+            device = ElementTree.Element('device')
+            ele_set(device, 'device_id', plan.getDeviceId())
+            ele_set(device, 'build_id', plan.getBuildId())
+            plan_root.append(device)
+            root.append(plan_root)
+        Constants.indent(root)
+        tree = ElementTree.ElementTree()
+        tree._setroot(root)
+        tree.write(os.path.join(self.scen_resultFolder, \
+                "scenario_status.xml"), encoding="UTF-8")
+        LOGGER.info("SENARIO_STATUS TO XML: writing into %s" \
+                % os.path.join(self.scen_resultFolder, "scenario_status.xml"))
+
+    def updateScenStatus(self):
+        scenstat = os.path.join(self.scen_resultFolder, 'scenario_status.xml')
+        if not os.path.isfile(scenstat):
+            LOGGER.error("scenario_status.xml should be present in \
+                    [%s]. Not Found" % self.scen_resultFolder)
+            raise
+        xml_tree = ElementTree.parse(scenstat)
+        root = xml_tree.getroot()
+        for plan in root.findall('plan'):
+            for rerun_plan in self.plans:
+                if plan.get('name') == rerun_plan.getPlanName():
+                    ele_set(plan, 'has_unpass_tc', str(rerun_plan.getUnpass()))
+
+        tree = ElementTree.ElementTree()
+        tree._setroot(root)
+        tree.write(scenstat, encoding="UTF-8")
+        LOGGER.info("UPDATING SENARIO_STATUS TO XML: writing into %s" \
+                % scenstat)
+
+    def prepareRerun(self, result):
+        suiteFiles = {}
+        suitePkgs = {}
+        scen_resultFolderPath = None
+        if os.path.isdir(result):
+            if os.path.isfile(os.path.join(result, "plan_status.xml")):
+                suiteFiles = self.prepareRerun_Plan(result)
+            elif os.path.isfile(os.path.join(result, "scenario_status.xml")):
+                suiteFiles = self.prepareRerun_Scen(result)
+                Constants.setScenMode(True)
+                Constants.setDistMode(False)
+                scen_resultFolderPath = result
+        elif os.path.isfile(result):
+            suiteFiles = self.prepareRerun_Suite(result)
+        else:
+            LOGGER.warning("%s result does not exist" % result)
+            raise
+
+        for planFolder, plan in suiteFiles.items():
+            plan_status = os.path.join(planFolder, "plan_status.xml")
+            LOGGER.debug("plan folder path = %s" % planFolder)
+            if not os.path.isfile(plan_status):
+                LOGGER.warning("%s does not exist" % plan_status)
+                raise
+            xml_tree = ElementTree.parse(plan_status)
+            xml_root = xml_tree.getroot()
+            plan_name = xml_root.get('name')
+            executeType = xml_root.get('executeType')
+            profile = xml_root.get('profile')
+            if not profile:
+                LOGGER.warning("Couldn`t retrieve 'profile' attribute of plan_status.xml")
+                raise
+            tizenVersion = xml_root.get('tizenVersion')
+            device = ele_find(xml_root, 'device')
+            device_id = device.get('device_id')
+            build_id = device.get('build_id')
+            suite_pkgs = []
+            for suite in plan:
+                suiteName = os.path.basename(suite)
+                suite_pkg_name = None
+                profiles = [profile, "common"]
+                for prof in profiles:
+                    suite_pkg_repo = os.path.join(Constants.SUITES_REPOSITORY \
+                            % tizenVersion, prof)
+                    if not os.path.isdir(suite_pkg_repo):
+                        continue
+                    os.chdir(suite_pkg_repo)
+                    for suite_pkg in glob.glob("%s*.zip" % suiteName):
+                        suite_pkg_name = os.path.abspath(suite_pkg)
+                    if suite_pkg_name is not None:
+                        suite_pkgs.append(suite_pkg_name)
+                        break
+                if suite_pkg_name is None:
+                    LOGGER.warning("[%s] suite does not exist." % (suiteName))
+                    yesorno = None
+                    while not (yesorno in ['y', 'n']):
+                        yesorno = input(\
+                                "Continue without this suite? [y/n]")
+                    if yesorno == 'n':
+                        LOGGER.warning("please check the default suite \
+                                repository: %s[profile]/" \
+                                % Constants.SUITES_REPOSITORY \
+                                % "[tizen_version]")
+                        raise
+            suitePkgs[planFolder] = [[plan_name, executeType, profile, \
+                    tizenVersion, device_id, build_id, \
+                    scen_resultFolderPath], suite_pkgs]
+        return suitePkgs
+
+    def prepareRerun_Suite(self, result):
+        suiteFiles = {}
+        planFolder = os.path.dirname(result)
+        suiteFiles[planFolder] = {}
+        suiteFiles[planFolder][result[:-4]] = result
+        return self.genRerunFile(suiteFiles)
+
+    def prepareRerun_Plan(self, result):
+        suiteFiles = {}
+        suiteFiles[result] = {}
+        os.chdir(result)
+        for suite in glob.glob("*.xml"):
+            if 'auto' in suite or 'manual' in suite or 'rerun' in suite \
+                    or 'status.xml' in suite or suite == 'summary.xml':
+                        continue
+            suiteFile = os.path.abspath(suite)
+            suiteFiles[result][suiteFile[:-4]] = suiteFile
+        return self.genRerunFile(suiteFiles)
+
+    def prepareRerun_Scen(self, result):
+        suiteFiles = {}
+        planResultFolders = []
+        scen_status = os.path.join(result, "scenario_status.xml")
+        xml_tree = ElementTree.parse(os.path.join(scen_status))
+        xml_root = xml_tree.getroot()
+        for xml_plan in xml_root.findall('plan'):
+            if xml_plan.get('has_unpass_tc') == "True":
+                planResultFolders.append(xml_plan.get('result_folder'))
+
+        for planResult in planResultFolders:
+            suiteFiles.update(self.prepareRerun_Plan(planResult))
+
+        return suiteFiles
+
+    def genRerunFile(self, rerun_suiteFiles):
+        if not bool(rerun_suiteFiles):
+            LOGGER.debug("No suite results exist...")
+            raise
+        filtered_suiteFiles = copy.deepcopy(rerun_suiteFiles)
+        self.env = self.ResEnvironment()
+        self.summary = self.ResSummary()
+        self.capability = self.ResCapabilities()
+        self.env.isNull = False
+        self.summary.isNull = False
+        self.capability.isNull = False
+        for planFolder, plan in rerun_suiteFiles.items():
+            for suite_am in plan.keys():
+                self.suites = []
+                result_file = suite_am + ".xml"
+                if os.path.isfile(result_file):
+                    self.parse([result_file])
+                    if not self.rerun_to_xml(suite_am + ".rerun.xml"):
+                        del filtered_suiteFiles[planFolder][suite_am]
+        return filtered_suiteFiles
+
+    def checkResults(self):
+        self.suiteFiles = self._findResultSuites()
+        NotRunSuites = []
+        for planFolder, plan in self.suiteFiles.items():
+            currPlan = self.planDict[planFolder]
+            self.profile = currPlan.getProfile()
+            self.deviceid = currPlan.getDeviceId()
+            for suite_path, suite_am in plan.items():
+                if len(suite_am) < 1:
+                    NotRunSuites.append(os.path.basename(suite_path))
+                    LOGGER.error("No test results returned from lite: %s", \
+                            os.path.basename(suite_path))
+
+        return NotRunSuites
+
+    def genResults(self):
+        self.suiteFiles = self._findResultSuites()
+        NotRunSuites = []
+        for planFolder, plan in self.suiteFiles.items():
+            currPlan = self.planDict[planFolder]
+            self.profile = currPlan.getProfile()
+            self.deviceid = currPlan.getDeviceId()
+            for suite_path, suite_am in plan.items():
+                if len(suite_am) < 1:
+                    NotRunSuites.append(os.path.basename(suite_path))
+                    LOGGER.critical("No test results returned from lite: %s", \
+                            os.path.basename(suite_path))
+                    continue
+                if '__auto_skip' in suite_am:
+                    suite_am.remove('__auto_skip')
+                if '__manual_skip' in suite_am:
+                    suite_am.remove('__manual_skip')
+                if len(suite_am) < 1:
+                    LOGGER.warning("Test results not returned from lite \
+                            (No manual or auto testcases): %s", \
+                            os.path.basename(suite_path))
+                    continue
+
+                self.env = self.ResEnvironment()
+                self.summary = self.ResSummary()
+                self.capability = self.ResCapabilities()
+                self.suites = []
+                self.parse(suite_am)
+                if Constants.RERUNING_MODE:
+                    dst = suite_path + "_rerun_result_tmp.xml"
+                    tmp_dst = Constants.getTempPath(dst)
+                    self.result_to_xml(tmp_dst)
+                    self.mergeRerunResults(suite_path + ".xml", tmp_dst)
+                    os.remove(tmp_dst)
+                else:
+                    self.result_to_xml(suite_path + ".xml")
+
+                currPlan.setUnpass(self.getUnpass())
+        return
+
+    def getUnpass(self):
+        return self.unpass
+
+    def parse(self, suiteFiles):
+        unpass = False
+        suite_count = 0
+        for suiteFile in suiteFiles:
+            LOGGER.debug("ABOUT TO PARSE %s" % suiteFile)
+            if not Constants.checkFileExists(suiteFile):
+                LOGGER.warning("[%s] not found" % suiteFile)
+                continue
+            if not suiteFile.split("/")[-1].find("tct-") > -1:
+                if not suiteFile.split("/")[-1].find(".Tests") > -1:
+                    continue
+            xml_tree = ElementTree.parse(suiteFile)
+            xml_root = xml_tree.getroot()
+            if self.env.isNull:
+                self.env.parse(ele_find(xml_root, 'environment'))
+                if self.env.tct_profile is None:
+                    self.env.tct_profile = self.profile
+            if self.summary.isNull:
+                self.summary.parse(ele_find(xml_root, 'summary'))
+            else:
+                self.summary.merge_time(ele_find(xml_root, 'summary'))
+
+            suite_summary = ele_find(xml_root, 'summary')
+            suite_start_at = ele_find(suite_summary, 'start_at').text
+            suite_end_at = ele_find(suite_summary,'end_at').text
+
+            suite = self.ResSuite(suite_start_at, suite_end_at)
+            ele_suite = ele_find(xml_root, 'suite')
+            suite.parse(ele_suite)
+            if suite.name is None:
+                suite.name = Constants.getSuiteNameFromFile(\
+                        os.path.basename(suiteFile))
+            self.suites.append(suite)
+            if suite.getUnpass():
+                LOGGER.debug("[%s] has at least one unpassed testcase" \
+                        % str(suite.name))
+                unpass = True
+            suite_count += 1
+        if suite_count < 1:
+            LOGGER.warning("No suite results to summarize")
+            return
+
+        if self.capability.isNull:
+            dev_cap = Constants.LOCAL_CAPABILITY_PATH % self.env.device_id
+            if not os.path.isfile(dev_cap):
+                LOGGER.error("Device capability does not exist for device: \
+                        [%s]" % self.env.device_id)
+            else:
+                xml_captree = ElementTree.parse(\
+                        Constants.LOCAL_CAPABILITY_PATH % self.env.device_id)
+                xml_caproot = xml_captree.getroot()
+                self.capability.parse(xml_caproot)
+        self.unpass = unpass
+        return
+
+    def mergeresult_parse(self, src1, src2, priority="FAIL"):
+        xml_tree1 = ElementTree.parse(src1)
+        xml_tree2 = ElementTree.parse(src2)
+        xml_root1 = xml_tree1.getroot()
+        xml_root2 = xml_tree2.getroot()
+        self.suites = []
+        if self.env.isNull:
+            self.env.parse(ele_find(xml_root1, 'environment'))
+            if self.env.tct_profile is None:
+                self.env.tct_profile = self.profile
+
+        if self.summary.isNull:
+            self.summary.parse(ele_find(xml_root1, 'summary'))
+
+        for suite1 in xml_root1.findall('suite'):
+            suite2 = None
+            for lookformatch in xml_root2.findall('suite'):
+                if lookformatch.get('name') == suite1.get('name'):
+                    suite2 = lookformatch
+                    break
+
+            suite_summary = ele_find(xml_root1, 'summary')
+            suite_start_at = ele_find(suite_summary, 'start_at').text
+            suite_end_at = ele_find(suite_summary, 'end_at').text
+
+            suite_obj = self.ResSuite(suite_start_at, suite_end_at)
+
+            if suite2 is None:
+                self.suites.append(suite_obj.parse(suite1))
+            else:
+                self.suites.append(suite_obj.mergeresult_parse(\
+                        suite1, suite2, priority))
+
+        if self.capability.isNull:
+            dev_cap = Constants.LOCAL_CAPABILITY_PATH % self.env.device_id
+            if not os.path.isfile(dev_cap):
+                LOGGER.warning("Device capability does not exist for device: \
+                        [%s]" % self.env.device_id)
+            else:
+                xml_captree = ElementTree.parse(\
+                        Constants.LOCAL_CAPABILITY_PATH % self.env.device_id)
+                xml_caproot = xml_captree.getroot()
+                self.capability.parse(xml_caproot)
+        return self
+
+    def result_to_xml(self, dest):
+        self.copy_style(dest)
+        decl_root = ElementTree.Element(None)
+        decl1 = ElementTree.PI('xml-stylesheet', \
+                'type="text/xsl" href="./style/testresult.xsl"')
+        decl1.tail = "\n"
+        '''
+        decl2 = ElementTree.PI('xml-stylesheet', \
+                'type="text/xsl" href="testresult.xsl"')
+        decl2.tail = "\n"
+        '''
+        decl_root.append(decl1)
+        #decl_root.append(decl2)
+        root = ElementTree.Element('test_definition')
+        root.append(self.env.to_xml())
+        root.append(self.summary.to_xml())
+        for suite in self.suites:
+            root.append(suite.result_to_xml())
+        Constants.indent(root)
+        decl_root.append(root)
+        tree = ElementTree.ElementTree()
+        tree._setroot(decl_root)
+        LOGGER.debug("ABOUT TO WRITE RESULTS INTO %s\n" % dest)
+        tree.write(dest, encoding="UTF-8")
+        LOGGER.info("RESULTS TO XML: writing into %s\n" % dest)
+
+    def rerun_to_xml(self, dest):
+        root = ElementTree.Element('test_definition')
+        for suite in self.suites:
+            root.append(suite.result_to_xml(fail_only=True))
+        hasUnpass = False
+        for suite in root.findall('suite'):
+            if list(suite) != []:
+                hasUnpass = True
+        if not hasUnpass:
+            return False
+        Constants.indent(root)
+        tree = ElementTree.ElementTree()
+        tree._setroot(root)
+        LOGGER.debug("ABOUT TO WRITE RERUN INTO %s\n" % dest)
+        tree.write(dest, encoding="UTF-8")
+        LOGGER.info("RERUN TO XML: writing into %s\n" % dest)
+        return True
+
+    def summary_to_xml(self, dest):
+        self.copy_style(dest)
+        decl_root = ElementTree.Element(None)
+        decl1 = ElementTree.PI('xml-stylesheet', \
+                'type="text/xsl" href="./style/summary.xsl"')
+        decl1.tail = "\n"
+        decl_root.append(decl1)
+        root = ElementTree.Element('result_summary')
+        ele_set(root, 'plan_name', self.planid)
+        root.append(self.env.to_xml())
+        root.append(self.summary.to_xml())
+        root.append(self.capability.to_xml())
+        for suite in self.suites:
+            root.append(suite.summary_to_xml())
+        Constants.indent(root)
+        decl_root.append(root)
+        tree = ElementTree.ElementTree()
+        tree._setroot(decl_root)
+        LOGGER.debug("ABOUT TO WRITE SUMMARY INTO %s\n" % dest)
+        tree.write(dest, encoding="UTF-8")
+        LOGGER.info("SUMMARY TO XML: writing into %s\n" % dest)
+
+    def _findResultSuites(self, _resultFolder=None):
+        if Constants.RERUNING_MODE:
+            auto_suffix = Constants.RERUN_AUTO_RESULT_SUFFIX
+            manual_suffix = Constants.RERUN_MANUAL_RESULT_SUFFIX
+        else:
+            auto_suffix = Constants.AUTO_RESULT_SUFFIX
+            manual_suffix = Constants.MANUAL_RESULT_SUFFIX
+        suiteFiles = {}
+        self.planDict = {}
+        for plan in self.plans:
+            plan_resultFolder = None
+            if _resultFolder is None:
+                plan_resultFolder = plan.getResultFolderPath()
+            else:
+                plan_resultFolder = _resultFolder
+
+            suiteFiles[plan_resultFolder] = {}
+            self.planDict[plan_resultFolder] = plan
+            for suite in plan.getSuites():
+                mergedsuite = os.path.join(plan_resultFolder, suite.suiteName)
+                suiteFiles[plan_resultFolder][mergedsuite] = []
+                autosuite = mergedsuite + auto_suffix
+                manualsuite = mergedsuite + manual_suffix
+                if suite.getNoAuto():
+                    suiteFiles[plan_resultFolder][mergedsuite]\
+                            .append('__auto_skip')
+                if suite.getNoManual():
+                    suiteFiles[plan_resultFolder][mergedsuite]\
+                            .append('__manual_skip')
+                if os.path.isfile(autosuite):
+                    suiteFiles[plan_resultFolder][mergedsuite]\
+                            .append(autosuite)
+                if os.path.isfile(manualsuite):
+                    suiteFiles[plan_resultFolder][mergedsuite]\
+                            .append(manualsuite)
+        return suiteFiles
+
+    def _rerun_findResultSuites_plan(self):
+        suiteFiles = {}
+        plan_resultFolder = self.plans[0].getResultFolderPath()
+        suiteFiles[plan_resultFolder] = {}
+        os.chdir(plan_resultFolder)
+        for suiteFile in glob.glob("*.xml"):
+            if 'auto.xml' in suiteFile or 'manual.xml' in suiteFile \
+                    or 'rerun.xml' in suiteFile or 'status.xml' \
+                    in suiteFile or suiteFile == 'summary.xml':
+                continue
+            suiteFiles[plan_resultFolder][suiteFile[:-4]] = []
+        return suiteFiles
+
+    def _rerun_findResultSuites_scen(self):
+        suiteFiles = {}
+        scen_resultFolder = self.scen_resultFolder
+        suiteFiles[scen_resultFolder] = {}
+        os.chdir(scen_resultFolder)
+        for suiteFile in glob.glob("*.xml"):
+            if 'auto.xml' in suiteFile or 'manual.xml' in suiteFile \
+                    or 'rerun.xml' in suiteFile or 'status.xml' \
+                    in suiteFile or suiteFile == 'summary.xml':
+                continue
+            suiteFiles[scen_resultFolder][suiteFile[:-4]] = []
+        return suiteFiles
+
+    def _not_in_use_rerun_findResultSuites_scen(self, scen_status):
+        suiteFiles = {}
+        xml_scenstat = ElementTree.parse(scen_status)
+        root = xml_scenstat.getroot()
+        for plan in root.findall('plan'):
+            plan_resultFolder = plan.get('result_folder')
+            suiteFiles[plan_resultFolder] = []
+            os.chdir(plan_resultFolder)
+            for suiteFile in glob.glob("*.xml"):
+                if 'auto.xml' in suiteFile or 'manual.xml' in suiteFile \
+                        or 'rerun.xml' in suiteFile or 'status.xml' \
+                        in suiteFile or suiteFile == 'summary.xml':
+                    continue
+                suiteFiles[plan_resultFolder].append(suiteFile)
+        return suiteFiles
+
+    #return folderPath
+    def makeMergedFolder(self):
+        #create mergeFolder
+        if Constants.RERUNING_MODE and Constants.SCENARIO_MODE:
+            if not os.path.isdir(self.scen_resultFolder):
+                LOGGER.warning("RERUN: cannot find original result folder : \
+                        [%s]" % self.scen_resultFolder)
+        else:
+            os.mkdir(self.scen_resultFolder, mode=0o777)
+        return
+
+    def suiteCopyFiles(self):
+        self.suites = []
+        self.suiteFiles = self._findResultSuites()
+        suiteResults_scen = []
+        for planFolder, plan in self.suiteFiles.items():
+            for suite_am in plan.keys():
+                resultFile = suite_am + ".xml"
+                if not os.path.isfile(resultFile):
+                    continue
+                dest = os.path.join(self.scen_resultFolder, \
+                        os.path.basename(resultFile))
+                if os.path.isfile(dest):
+                    self.mergeSuiteResults(dest, resultFile)
+                    continue
+                copyfiledir(resultFile, dest)
+                suiteResults_scen.append(dest)
+        return suiteResults_scen
+
+    def _rerunReplaceResults(self, suiteFiles):
+        updated_check = []
+        for planFolder, plan in suiteFiles.items():
+            for suite_am in plan.keys():
+                resultFile = suite_am + ".xml"
+                if not os.path.isfile(resultFile):
+                    continue
+                dest = os.path.join(self.scen_resultFolder, \
+                        os.path.basename(resultFile))
+                if os.path.isfile(dest):
+                    if suite_am in updated_check:
+                        self.mergeSuiteResults(dest, resultFile)
+                    else:
+                        self.mergeRerunResults(dest, resultFile)
+                        updated_check.append(suite_am)
+                else:
+                    LOGGER.warning("The original result xml does not exist \
+                            in the scenario file. File: [%s]" % dest)
+
+    def genSummaryForScen(self):
+        self.deviceid = self.head_deviceid
+        self.profile = self.head_profile
+        self.planid = self.scenid
+        suiteFiles = self.suiteCopyFiles()
+        self.suites = []
+        self.parse(suiteFiles)
+        dest = os.path.join(self.scen_resultFolder, 'summary.xml')
+        self.summary_to_xml(dest)
+        return dest
+
+    def rerun_genSummaryForScen(self):
+        self._rerunReplaceResults(self._findResultSuites())
+        suiteFiles = self._rerun_findResultSuites_scen()
+        for scenFolder, scen in suiteFiles.items():
+            suiteResults_scen = []
+            for suite_am in scen.keys():
+                suiteResults_scen.append(suite_am + ".xml")
+            self.suites = []
+            self.parse(suiteResults_scen)
+            dest = os.path.join(self.scen_resultFolder, 'summary.xml')
+            self.summary_to_xml(dest)
+        return dest
+
+    def mergeRerunResults(self, src1, src2):
+        self.mergeSuiteResults(src1, src2, priority="PASS")
+
+    def mergeSuiteResults(self, src1, src2, priority="FAIL"):
+        self.suites = []
+        self.env = self.ResEnvironment()
+        self.summary = self.ResSummary()
+        self.capability = self.ResCapabilities()
+        self.mergeresult_parse(src1, src2, priority)
+        self.result_to_xml(src1)
+        return
+
+    def copy_style(self, dest):
+        styleFolder = os.path.join(os.path.dirname(dest), 'style')
+        if not os.path.isdir(styleFolder):
+            copyfiledir(Constants.STYLE_FOLDER, styleFolder)
+
+    def fetch_logs(self, dest):
+        return
+
+    class ResEnvironment:
+        def __init__(self):
+            self.other = None
+            self.build_id = None
+            self.tct_version = None
+            self.tct_profile = None
+            self.device_id = None
+            self.device_model = None
+            self.device_name = None
+            self.host = None
+            self.manufacturer = None
+            self.resolution = None
+            self.screen_size = None
+            self.isNull = True
+
+        def parse(self, env):
+            self.build_id = env.get('build_id')
+            #should be added to Constants ..............
+            self.tct_profile = env.get('tct_profile')
+            self.tct_version = Constants.get_tct_binaryV()
+            self.device_id = env.get('device_id')
+            self.device_model = env.get('device_model')
+            self.device_name = env.get('device_name')
+            self.host = env.get('host')
+            self.manufacturer = env.get('manufacturer')
+            self.resolution = env.get('resolution')
+            self.screen_size = env.get('screen_size')
+            self.other = ele_find(env, 'other')
+            self.isNull = False
+
+        def to_xml(self):
+            env = ElementTree.Element('environment')
+            ele_set(env, 'build_id', self.build_id)
+            ele_set(env, 'tct_version', self.tct_version)
+            ele_set(env, 'tct_profile', self.tct_profile)
+            ele_set(env, 'device_id', self.device_id)
+            if self.device_model is None:
+                ele_set(env, 'device_model', "None")
+            else:
+                ele_set(env, 'device_model', self.device_model)
+            ele_set(env, 'device_name', self.device_name)
+            ele_set(env, 'host', self.host)
+            ele_set(env, 'manufacturer', self.manufacturer)
+            ele_set(env, 'resolution', self.resolution)
+            ele_set(env, 'screen_size', self.screen_size)
+            other = ElementTree.Element('other')
+            env.append(other)
+            #other needs to be added.....
+            return env
+
+    class ResSummary:
+        def __init__(self):
+            self.isNull = True
+            self.test_plan_name = None
+            self.start_at = None
+            self.end_at = None
+
+        def parse(self, summary):
+            self.test_plan_name = summary.get('test_plan_name')
+            self.start_at = ele_find(summary, 'start_at').text
+            self.end_at = ele_find(summary, 'end_at').text
+            self.isNull = False
+
+        def merge_time(self, summary):
+            start_at2 = ele_find(summary, 'start_at').text
+            end_at2 = ele_find(summary, 'end_at').text
+            if self.start_at and start_at2:
+                self.start_at = min(self.start_at, start_at2)
+            if self.end_at and end_at2:
+                self.end_at = max(self.end_at, end_at2)
+
+        def to_xml(self):
+            summary = ElementTree.Element('summary')
+            ele_set(summary, 'test_plan_name', self.test_plan_name)
+            start_at = ElementTree.Element('start_at')
+            if self.start_at:
+                start_at.text = self.start_at
+            summary.append(start_at)
+            end_at = ElementTree.Element('end_at')
+            if self.end_at:
+                end_at.text = self.end_at
+            summary.append(end_at)
+            return summary
+
+    class ResCapabilities:
+
+        def __init__(self):
+            self.isNull = True
+            self.capList = []
+
+        def parse(self, caps):
+            for xml_cap in caps.findall('capability'):
+                cap = self.ResCapability()
+                cap.parse(xml_cap)
+                self.capList.append(cap)
+            self.isNull = False
+
+        def to_xml(self):
+            caps = ElementTree.Element('capabilities')
+            for cap in self.capList:
+                caps.append(cap.to_xml())
+            return caps
+
+        class ResCapability:
+            def __init__(self):
+                self.name = None
+                self.support = None
+                self.typ = None
+
+            def parse(self, cap):
+                self.name = cap.get('name')
+                self.support = cap.get('support')
+                self.typ = cap.get('type')
+
+            def to_xml(self):
+                cap = ElementTree.Element('capability')
+                ele_set(cap, 'name', self.name)
+                ele_set(cap, 'support', self.support)
+                ele_set(cap, 'type', self.typ)
+                return cap
+
+    class ResSuite:
+
+        def __init__(self, start_at="", end_at=""):
+            self.name = None
+            self.category = None
+            self.launcher = None
+            self.total_case = None
+            self.pass_case = None
+            self.pass_rate = None
+            self.fail_case = None
+            self.fail_rate = None
+            self.block_case = None
+            self.block_rate = None
+            self.na_case = None
+            self.na_rate = None
+            self.suite_set = []
+            self.unpass = None
+            self.start_at = start_at
+            self.end_at = end_at
+
+        def getUnpass(self):
+            return self.unpass
+
+        def mergeresult_parse(self, suite1, suite2, priority="FAIL"):
+            self.name = suite1.get('name')
+            self.category = suite1.get('category')
+            self.launcher = suite1.get('launcher')
+            for suite_set1 in suite1.findall('set'):
+                suite_set2 = None
+                for lookformatch in suite2.findall('set'):
+                    if lookformatch.get('name') == suite_set1.get('name'):
+                        suite_set2 = lookformatch
+                        break
+
+                if suite_set2 is None:
+                    self.suite_set.append(self.Set().parse(suite_set1))
+                else:
+                    self.suite_set.append(self.Set().mergeresult_parse(\
+                            suite_set1, suite_set2, priority))
+
+            return self
+
+        def parse(self, suite):
+            unpass = False
+            self.name = suite.get('name')
+            self.category = suite.get('category')
+            self.launcher = suite.get('launcher')
+            for suite_set in suite.findall('set'):
+                setparser = self.Set()
+                self.suite_set.append(setparser.parse(suite_set))
+                if setparser.getUnpass():
+                    unpass = True
+            self.unpass = unpass
+            total_cnt = 0
+            pass_cnt = 0
+            fail_cnt = 0
+            block_cnt = 0
+            na_cnt = 0
+            for suite_set in suite.findall('set'):
+                for tc in suite_set.findall('testcase'):
+                    result = tc.get('result')
+                    total_cnt += 1
+                    if result == "PASS":
+                        pass_cnt += 1
+                    elif result == "FAIL":
+                        fail_cnt += 1
+                    elif result == "BLOCK":
+                        block_cnt += 1
+                    elif result == "N/A":
+                        na_cnt += 1
+            self.total_case = str(total_cnt)
+            if total_cnt == 0:
+                if self.name is not None:
+                    LOGGER.warning("No testcases in the suite: [%s]" \
+                            % self.name)
+                #prevent division by zero
+                total_cnt = 1
+            self.pass_case = str(pass_cnt)
+            self.pass_rate = "%.2f" % (float(pass_cnt) / \
+                    float(total_cnt) * 100)
+            self.fail_case = str(fail_cnt)
+            self.fail_rate = "%.2f" % (float(fail_cnt) / \
+                    float(total_cnt) * 100)
+            self.block_case = str(block_cnt)
+            self.block_rate = "%.2f" % (float(block_cnt) / float(total_cnt) \
+                    * 100)
+            self.na_case = str(na_cnt)
+            self.na_rate = "%.2f" % (float(na_cnt) / float(total_cnt) * 100)
+
+            return self
+
+        def result_to_xml(self, fail_only=False):
+            suite = ElementTree.Element('suite')
+            ele_set(suite, 'category', self.category)
+            ele_set(suite, 'launcher', self.launcher)
+            ele_set(suite, 'name', self.name)
+            for suite_set in self.suite_set:
+                checkset = suite_set.to_xml(fail_only)
+                if checkset.find('testcase') is not None:
+                    suite.append(suite_set.to_xml(fail_only))
+            return suite
+
+        def summary_to_xml(self):
+            suite = ElementTree.Element('suite')
+            ele_set(suite, 'name', self.name)
+
+            start_at_case = ElementTree.Element('start_at')
+            if self.start_at:
+                start_at_case.text = self.start_at
+
+            end_at_case = ElementTree.Element('end_at')
+            if self.end_at:
+                end_at_case.text = self.end_at
+
+            total_case = ElementTree.Element('total_case')
+            if self.total_case:
+                total_case.text = self.total_case
+
+            pass_case = ElementTree.Element('pass_case')
+            if self.pass_case:
+                pass_case.text = self.pass_case
+            pass_rate = ElementTree.Element('pass_rate')
+            if self.pass_rate:
+                pass_rate.text = self.pass_rate
+            fail_case = ElementTree.Element('fail_case')
+            if self.fail_case:
+                fail_case.text = self.fail_case
+            fail_rate = ElementTree.Element('fail_rate')
+            if self.fail_rate:
+                fail_rate.text = self.fail_rate
+            block_case = ElementTree.Element('block_case')
+            if self.block_case:
+                block_case.text = self.block_case
+            block_rate = ElementTree.Element('block_rate')
+            if self.block_rate:
+                block_rate.text = self.block_rate
+            na_case = ElementTree.Element('na_case')
+            if self.na_case:
+                na_case.text = self.na_case
+            na_rate = ElementTree.Element('na_rate')
+            if self.na_rate:
+                na_rate.text = self.na_rate
+
+            suite.append(start_at_case)
+            suite.append(end_at_case)
+            suite.append(total_case)
+            suite.append(pass_case)
+            suite.append(pass_rate)
+            suite.append(fail_case)
+            suite.append(fail_rate)
+            suite.append(block_case)
+            suite.append(block_rate)
+            suite.append(na_case)
+            suite.append(na_rate)
+            return suite
+
+        class Set:
+            def __init__(self):
+                self.name = None
+                self.set_debug_msg = None
+                self.testcase = []
+                self.capabilities = []
+                self.unpass = None
+
+            def getUnpass(self):
+                return self.unpass
+
+            def parse(self, suite_set):
+                unpass = False
+                self.name = suite_set.get('name')
+                self.set_debug_msg = suite_set.get('set_debug_msg')
+                capabilities = ele_find(suite_set, 'capabilities')
+                for cap in capabilities.findall('capability'):
+                    self.capabilities.append(self.Capability().parse(cap))
+                for testcase in suite_set.findall('testcase'):
+                    tcparser = self.Testcase()
+                    self.testcase.append(tcparser.parse(testcase))
+                    if tcparser.getUnpass():
+                        unpass = True
+                self.unpass = unpass
+                return self
+
+            def mergeresult_parse(self, suite_set1, \
+                    suite_set2, priority="FALSE"):
+                self.name = suite_set1.get('name')
+                self.set_debug_msg = suite_set1.get('set_debug_msg')
+                capabilities = suite_set1.find('capabilities')
+                capabilities = ele_find(suite_set1, 'capabilities')
+                for cap in capabilities.findall('capability'):
+                    self.capabilities.append(self.Capability().parse(cap))
+                for testcase1 in suite_set1.findall('testcase'):
+                    testcase2 = None
+                    for lookformatch in suite_set2.findall('testcase'):
+                        if lookformatch.get('id') == testcase1.get('id'):
+                            testcase2 = lookformatch
+                            break
+                    if testcase2 is None:
+                        self.testcase.append(self.Testcase().parse(testcase1))
+                    else:
+                        self.testcase.append(\
+                                self.Testcase().mergeresult_parse(\
+                                testcase1, testcase2, priority))
+                return self
+
+            def to_xml(self, fail_only):
+                suite_set = ElementTree.Element('set')
+                ele_set(suite_set, 'name', self.name)
+                ele_set(suite_set, 'set_debug_msg', self.set_debug_msg)
+                capabilities = ElementTree.Element('capabilities')
+                for cap in self.capabilities:
+                    capabilities.append(cap.to_xml())
+                if len(self.capabilities) > 0:
+                    suite_set.append(capabilities)
+                for testcase in self.testcase:
+                    tc = testcase.to_xml(fail_only)
+                    if tc is not None:
+                        suite_set.append(tc)
+                return suite_set
+
+            class Capability:
+                def __init__(self):
+                    self.name = None
+
+                def parse(self, cap):
+                    self.name = cap.get('name')
+                    return self
+
+                def to_xml(self):
+                    cap = ElementTree.Element('capability')
+                    ele_set(cap, 'name', self.name)
+                    return cap
+
+            class Testcase:
+                def __init__(self):
+                    self.Id = None
+                    self.component = None
+                    self.execution_type = None
+                    self.priority = None
+                    self.purpose = None
+                    self.result = None
+                    self.test_script_entry = None
+                    self.actual_result = None
+                    self.start = None
+                    self.end = None
+                    self.stdout = None
+                    self.stderr = None
+                    self.unpass = None
+                    self.onload_delay = None
+
+                def getUnpass(self):
+                    return self.unpass
+
+                def parse(self, tc):
+                    self.Id = tc.get('id')
+                    self.component = tc.get('component')
+                    self.execution_type = tc.get('execution_type')
+                    self.priority = tc.get('priority')
+                    self.purpose = tc.get('purpose')
+                    self.result = tc.get('result')
+                    self.onload_delay = tc.get('onload_delay')
+                    self.test_script_entry = ele_find(\
+                            ele_find(tc, 'description'),\
+                            'test_script_entry').text
+                    self.actual_result = ele_find(\
+                            ele_find(tc, 'result_info'), \
+                            'actual_result').text
+                    self.start = ele_find(ele_find(tc, 'result_info'),\
+                            'start').text
+                    self.end = ele_find(\
+                            ele_find(tc, 'result_info'), 'end').text
+                    self.stdout = ele_find(ele_find(tc, 'result_info'),\
+                            'stdout').text
+                    self.stderr = ele_find(ele_find(tc, 'result_info'),\
+                            'stderr').text
+                    if self.result != "PASS":
+                        self.unpass = True
+                    return self
+
+                def mergeresult_parse(self, tc1, tc2, priority="FAIL"):
+                    self.Id = tc1.get('id')
+                    self.component = tc1.get('component')
+                    self.execution_type = tc1.get('execution_type')
+                    self.priority = tc1.get('priority')
+                    self.purpose = tc1.get('purpose')
+                    self.onload_delay = tc1.get('onload_delay')
+                    result1 = tc1.get('result')
+                    result2 = tc2.get('result')
+                    if priority == "FAIL":
+                        if result1 == "FAIL":
+                            tc = tc1
+                        elif result2 == "FAIL":
+                            tc = tc2
+                        elif result1 == "BLOCK":
+                            tc = tc1
+                        elif result2 == "BLOCK":
+                            tc = tc2
+                        elif result1 == "N/A":
+                            tc = tc1
+                        elif result2 == "N/A":
+                            tc = tc2
+                        else:
+                            tc = tc1
+                    if priority == "PASS":
+                        tc = tc2
+                    self.result = tc.get('result')
+                    self.test_script_entry = ele_find(\
+                            ele_find(tc, 'description'),\
+                            'test_script_entry').text
+                    self.actual_result = ele_find(\
+                            ele_find(tc, 'result_info'), \
+                            'actual_result').text
+                    self.start = ele_find(ele_find(tc, 'result_info'), \
+                            'start').text
+                    self.end = ele_find(ele_find(tc, 'result_info'), \
+                            'end').text
+                    self.stdout = ele_find(ele_find(tc, 'result_info'), \
+                            'stdout').text
+                    self.stderr = ele_find(ele_find(tc, 'result_info'), \
+                            'stderr').text
+                    return self
+
+                def to_xml(self, fail_only):
+                    if fail_only and self.result == "PASS":
+                        return
+                    tc = ElementTree.Element('testcase')
+                    ele_set(tc, 'component', self.component)
+                    ele_set(tc, 'execution_type', self.execution_type)
+                    ele_set(tc, 'id', self.Id)
+                    ele_set(tc, 'priority', self.priority)
+                    ele_set(tc, 'purpose', self.purpose)
+                    ele_set(tc, 'onload_delay', self.onload_delay)
+                    if not fail_only:
+                        ele_set(tc, 'result', self.result)
+                    description = ElementTree.Element('description')
+                    tse = ElementTree.Element('test_script_entry')
+                    if self.test_script_entry:
+                        tse.text = self.test_script_entry
+                    description.append(tse)
+                    tc.append(description)
+                    if fail_only:
+                        return tc
+                    result_info = ElementTree.Element('result_info')
+                    actual_result = ElementTree.Element('actual_result')
+                    if self.actual_result:
+                        actual_result.text = self.actual_result
+                    start = ElementTree.Element('start')
+                    if self.start:
+                        start.text = self.start
+                    end = ElementTree.Element('end')
+                    if self.end:
+                        end.text = self.end
+                    stdout = ElementTree.Element('stdout')
+                    if self.stdout:
+                        stdout.text = self.stdout
+                    stderr = ElementTree.Element('stderr')
+                    if self.stderr:
+                        stderr.text = self.stderr
+                    result_info.append(actual_result)
+                    result_info.append(start)
+                    result_info.append(end)
+                    result_info.append(stdout)
+                    result_info.append(stderr)
+                    tc.append(result_info)
+                    return tc
diff --git a/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/shell/tctshell/scenario_options.py b/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/shell/tctshell/scenario_options.py
new file mode 100755 (executable)
index 0000000..9e2dccc
--- /dev/null
@@ -0,0 +1,169 @@
+#!/usr/bin/python
+
+import os
+import re
+import sys, traceback
+import glob
+from constants import Constants
+from xml.etree import ElementTree
+import xml.etree.ElementTree as etree
+from Tkinter import *
+import tkMessageBox
+from optparse import *
+from devicemanager import DeviceManager
+from logmanager import LOGGER
+
+def vanarg(option, opt_str, value, parser):
+    value = []
+    for arg in parser.rargs:
+        if re.search('^--.+', arg) or re.search('^-[\D]', arg):
+            break
+    value.append(arg)
+    del parser.rargs[:len(value)]
+    setattr(parser.values, option.dest, value)
+
+def printPlans_Devices(option, opt_str, value, parser):
+    printPlanList()
+    printDeviceList()
+    sys.exit(1)
+
+def printPlanList():
+    print "\nAvaiable Plans:...\n"
+    folder = Constants.TCT_PLAN_FOLDER
+    os.chdir(folder)
+    for files in glob.glob("*.xml"):
+        print files[:-4]
+
+def printDeviceList():
+    print "\nConnected Devices:...\n"
+    dmi = DeviceManager.getInstance()
+    dmi.loadDeviceList()
+    devices = dmi.getSdbDeviceList()
+    for dev in devices:
+        dev._printDevInfo()
+    if len(devices) < 1:
+        print "No Connected Devices"
+
+class ScenarioGeneratorOptions:
+    def __init__(self):
+        self._j = os.path.join
+        self._e = os.path.exists
+        self._d = os.path.dirname
+        self._b = os.path.basename
+        self._abspath = os.path.abspath
+        self.options = None
+        self.running_mode = None
+        self.USAGE = ""
+
+    def parse_options(self, argv):
+        option_list = [
+                make_option("--folderpath", "-f", dest = "plansrcfolder", \
+                        action="callback", callback=vanarg,  \
+                        help="Specify the plan source directory"),
+                make_option("-o", "--output", dest="testscen_file", \
+                        action="callback", callback=vanarg, \
+                        help="Specify the generating testscen in a XML file."),
+                make_option("-d", "--default",  dest="default", \
+                        action="store_true", help="Default setting"),
+                make_option("-p", "--plan", dest="plan", action="callback", \
+                        callback=vanarg, help="Make list of sets that match a \
+                        plan with a device and tizen version : \
+                        [plan_file],[device],[tizenversion]"),
+                make_option("--list", dest="lst", action="callback", \
+                        callback=printPlans_Devices, help="List all existing \
+                        plans and connected devices")
+               ]
+        if len(argv) == 1:
+            argv.append("-h")
+        PARSERS = OptionParser(option_list=option_list, usage=self.USAGE)
+
+        (self.options, args) = PARSERS.parse_args()
+
+        if self.options.default is not None:
+            if self.options.plansrcfolder is not None or \
+               self.options.testscen_file is not None or \
+               self.options.plan is not None:
+                   sys.exit("options: conflict")
+
+    def get_scen_name(self):
+        if (self.options.testscen_file is not None) and \
+                (self.options.testscen_file[0] is not None):
+            name, ext = os.path.splitext(self.options.testscen_file[0])
+            return name.split("/")[-1]
+        else:
+            return Constants.DEFAULT_SCEN_NAME
+
+    def get_plansrc_folder(self):
+        if (self.options.plansrcfolder is not None) and \
+                (self.options.plansrcfolder[0] is not None):
+            return self.options.plansrcfolder[0]
+        else:
+            return Constants.TCT_PLAN_FOLDER
+
+    def get_output(self):
+        if (self.options.testscen_file is not None) and \
+                (self.options.testscen_file[0] is not None):
+            d = os.path.abspath(os.path.dirname(self.options.testscen_file[0]))
+            if not os.path.exists(d):
+                os.makedirs(d)
+            return os.path.abspath(self.options.testscen_file[0])
+        else:
+            d = os.path.abspath(Constants.TCT_SCEN_FOLDER)
+            if not os.path.exists(d):
+                os.makedirs(d)
+            return Constants.TCT_SCEN_FOLDER + "generated_scen.xml"
+
+    def get_planlist_args(self):
+        if self.options.plan is not None:
+            plans = []
+            dmi = DeviceManager.getInstance()
+            dmi.loadDeviceList()
+            for plan in self.options.plan:
+                if len(plan.split(',')) != 3:
+                    sys.exit("[--plan]: Wrong format. See --help for correct \
+                            format")
+                plan_name = plan.split(',')[0]
+                dev_id = plan.split(',')[1]
+                tizenVer = plan.split(',')[2]
+                dev = dmi.getDevice(dev_id)
+                if dev is None:
+                    sys.exit("Device: [%s] is not connected" % dev_id)
+                if not os.path.isfile(os.path.join(self.get_plansrc_folder(),\
+                        "%s.xml" % plan_name)):
+                    sys.exit("Plan: [%s] does not exist in the plan source \
+                            folder : [%s]" % (plan_name, \
+                            self.get_plansrc_folder()))
+                self.check_tizen_version(tizenVer)
+                plans.append([plan_name, [dev.devName, dev.devId, \
+                        dev.devType], tizenVer])
+            return plans
+
+    def check_tizen_version(self, tizenversion):
+        VER_PATTERN = "^tizen_web_\d.\d|^tizen_native_\d.\d|^tizen_csharp_\d.\d"
+        pa = re.compile(VER_PATTERN, re.I)
+        ma = pa.match(tizenversion)
+        if ma is None:
+            LOGGER.error("A required \"/opt/tct/" + tizenversion + "\" could \
+                    not be found.")
+            sys.exit("Invalid Tizen version. Tizen version must be in the form\
+                    of tizen_(web|native|csharp)_#.#")
+
+    def getPlanList(self):
+        folder = self.get_plansrc_folder()
+        os.chdir(folder)
+        planList = []
+        for files in glob.glob("*.xml"):
+            planList.append(files[:-4])
+        return planList
+
+    def getDeviceList(self):
+        deviceList = []
+        dmi = DeviceManager.getInstance()
+        dmi.loadDeviceList()
+        devices = dmi.getSdbDeviceList()
+        for dev in devices:
+            deviceList.append([dev.devName, dev.devId, dev.devType])
+        if len(deviceList) < 1:
+            print "No Device Attached"
+            sys.exit("Exit: No Connected Devices")
+        return deviceList
diff --git a/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/shell/tctshell/scenario_runner.py b/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/shell/tctshell/scenario_runner.py
new file mode 100755 (executable)
index 0000000..663f9d2
--- /dev/null
@@ -0,0 +1,87 @@
+#!/usr/bin/python
+
+from constants import Constants
+from xml.etree import ElementTree
+from tctshell.gui.main_window import MainWindow
+import os,os.path
+import sys
+from logmanager import LOGGER
+
+class ScenPlan:
+
+    def __init__(self, folder, name, device, version):
+        self.name = name
+        self.device = device
+        self.version = version
+        self.folder = folder
+
+    def to_xml(self):
+        plan = ElementTree.Element('plan')
+        plan.set('name', self.name)
+        device = ElementTree.Element('device')
+        device.set('name', self.device[0])
+        device.set('id', self.device[1])
+        device.set('type', self.device[2])
+        plan.append(device)
+        version = ElementTree.Element('version')
+        version.text = self.version
+        plan.append(version)
+        path = ElementTree.Element('path')
+        name = "#".join(self.name.split("#")[:-1])
+        path.text = os.path.join(self.folder, "%s.xml" %name)
+        plan.append(path)
+        return plan
+
+class ScenarioRunner:
+
+    def __init__(self):
+        self.plans = {}
+        self.scen_name = Constants.DEFAULT_SCEN_NAME
+
+    def load_local_repo(self, planlist_args, path, scen_name, plan_list, dev_list):
+        self.scen_name = scen_name
+        count = 0
+        if planlist_args is None:
+            scenario = self.getPlanInfo(plan_list, dev_list)
+        else:
+            scenario = planlist_args
+        for plans in scenario:
+            count += 1
+            plan = ScenPlan(path, plans[0], plans[1], plans[2])
+            plan.name += "#%d" % count
+            self.plans[plan.name] = plan
+
+    def getPlanInfo(self, planList, deviceList):
+        mw = MainWindow("Scenario Generator")
+        mw.getActionFrame()
+        mw.importData(planList, deviceList, os.listdir("/opt/tct/"))
+        mw.run()
+        scenData = mw.getScenData()
+        if len(scenData) < 1:
+            LOGGER.error("No correct scenario data given.\nExiting...")
+            raise
+        return mw.getScenData()
+
+    def to_xml(self, xml_name):
+        root = ElementTree.Element('ns3:testscenario')
+        root.set('name', self.scen_name)
+        root.set('xmlns', '')
+        root.set('xmlns:ns3', 'http://www.example.org/plan/')
+
+        for plan_name in self.plans:
+            plan = self.plans[plan_name]
+            root.append(plan.to_xml())
+        Constants.indent(root)
+        tree = ElementTree.ElementTree()
+        tree._setroot(root)
+        if os.path.basename(xml_name) == "generated_scen.xml":
+            i = 0
+            while os.path.isfile(xml_name):
+                i += 1
+                if xml_name[-5] == "]":
+                    xml_name = "[".join(xml_name.split("[")[:-1])+"[%d].xml" % i
+                else:
+                    xml_name = xml_name[:-4]+"[%d].xml" % i
+        LOGGER.info("generating scenario to %s" % xml_name)
+        tree.write(xml_name, xml_declaration=True, encoding="utf-8")
+
diff --git a/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/shell/tctshell/sdbmanager.py b/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/shell/tctshell/sdbmanager.py
new file mode 100755 (executable)
index 0000000..0a10c1f
--- /dev/null
@@ -0,0 +1,391 @@
+#!/usr/bin/python
+
+import subprocess
+import time
+import os
+import sys
+from .constants import Constants
+from .logmanager import LOGGER
+from .exception import DevNotFoundErr
+
+
+class SdbManager:
+
+    @staticmethod
+    def hostLiteCommand(command, failct=None):
+        LOGGER.info(command)
+        proc = subprocess.Popen(command, \
+            shell=True, \
+            bufsize=0, \
+            stdin=subprocess.PIPE, \
+            stdout=subprocess.PIPE, \
+            stderr=subprocess.PIPE)
+
+        curr_fail = 0
+        while True:
+            exit_code = proc.poll()
+            if exit_code is not None:
+                break
+
+            output = proc.stdout.readline()
+            if output:
+                output = output.strip().decode('utf-8')
+                LOGGER.info(output)
+                if output.find("all tasks for testkit lite are accomplished, goodbye") > -1:
+                    return True
+                elif output.find("error: protocol fault: no status") > -1:
+                    LOGGER.error(output)
+                    return False
+                elif output.find("error: target offline") > -1:
+                    LOGGER.error(output)
+                    return False
+                elif output.find("error: target not found") > -1:
+                    LOGGER.error(output)
+                    return False
+                elif output.find("error: get too many errors, stop current set") > -1:
+                    LOGGER.error(output)
+                    return False
+                elif output.find("test app no response, hang or not launched") > -1:
+                    LOGGER.error(output)
+                elif output.find("get server status timeout, please check device") > -1:
+                    LOGGER.error(output)
+                    return False
+                elif output.find("failed to install widget") > -1:
+                    LOGGER.error(output)
+
+                if failct and int(failct) > 0:
+                    if output.lower().find('execute case:') > -1 and \
+                            (output.lower().find('fail') > -1 or \
+                            output.lower().find('block') > -1):
+                        curr_fail += 1
+                        if int(failct) == curr_fail:
+                            return False
+        return True
+
+    @staticmethod
+    def hostRecLiteCommand(command):
+        LOGGER.info(command)
+        proc = subprocess.Popen(command, shell=True, \
+                stdout=subprocess.PIPE, stderr=subprocess.PIPE)
+        while True:
+            exit_code = proc.poll()
+            if exit_code is not None:
+                break
+            output = proc.stdout.readline()
+            if output:
+                output = output.strip().decode('utf-8')
+                LOGGER.info(output)
+                if output.find("all tasks for testkit lite are accomplished, goodbye") > -1:
+                    return True
+        return True
+
+    @staticmethod
+    def hostCommand(command, timeout=90):
+        LOGGER.info(command)
+        outs = None
+        errs = None
+        proc = None
+        try:
+            proc = subprocess.Popen(command, shell=True, stdout=subprocess.PIPE, \
+                    stderr=subprocess.PIPE)
+            outs, errs = proc.communicate(timeout=timeout)
+        except subprocess.TimeoutExpired:
+            exc = sys.exc_info()
+            raise exc[1].with_traceback(exc[2])
+        except Exception:
+            exc = sys.exc_info()
+            raise exc[1].with_traceback(exc[2])
+
+        if outs:
+            outs = outs.decode("utf-8")
+        if errs:
+            errs = errs.decode("utf-8")
+
+        if outs:
+            LOGGER.info(outs)
+            if SdbManager.is_target_offline(outs):
+                raise DevNotFoundErr("None")
+
+        if errs:
+            LOGGER.error(errs)
+            if SdbManager.is_target_offline(errs):
+                raise DevNotFoundErr("None")
+
+        return True
+
+    @staticmethod
+    def hostCommandwithResult(command, timeout=90):
+        LOGGER.info(command)
+        try:
+            proc = subprocess.Popen(command, shell=True, stdout=subprocess.PIPE, \
+                    stderr=subprocess.PIPE)
+            outs, errs = proc.communicate(timeout=timeout)
+        except subprocess.TimeoutExpired:
+            exc = sys.exc_info()
+            raise exc[1].with_traceback(exc[2])
+        except Exception:
+            exc = sys.exc_info()
+            raise exc[1].with_traceback(exc[2])
+
+        if outs:
+            outs = outs.decode(encoding="utf-8")
+        if errs:
+            errs = errs.decode("utf-8")
+
+        return outs
+
+    @staticmethod
+    def sdbCommand(command, timeout=90):
+        LOGGER.info(command)
+
+        outs = None
+        errs = None
+        proc = None
+        try:
+            proc = subprocess.Popen(command, \
+                shell=True, \
+                bufsize=0, \
+                stdin=subprocess.PIPE, \
+                stdout=subprocess.PIPE, \
+                stderr=subprocess.PIPE)
+            outs, errs = proc.communicate(timeout=timeout)
+        except subprocess.TimeoutExpired:
+            exc = sys.exc_info()
+            raise exc[1].with_traceback(exc[2])
+        except Exception:
+            exc = sys.exc_info()
+            raise exc[1].with_traceback(exc[2])
+
+        if outs:
+            outs = outs.decode("utf-8")
+        if errs:
+            errs = errs.decode("utf-8")
+
+        return outs, errs
+
+    @staticmethod
+    def _checkDevIdExists(_devid):
+        if len(_devid) < 0:
+            LOGGER.error("The '%s' device Id exists error" % _devid)
+            return False
+        return True
+
+    @staticmethod
+    def sdbPush(_devid, local, remote):
+        FAIL_LOG = "sdb -s %s push failed" % _devid
+        if SdbManager._checkDevIdExists(_devid) is False:
+            raise DevNotFoundErr(_devid)
+        if Constants.checkFileExists(local) is False:
+            LOGGER.warning("File exists error:%s" % local)
+            return False
+
+        push_cmd = Constants.SDB_PUSH % _devid + " " + local + " " + remote
+        outLog, errLog = SdbManager.sdbCommand(push_cmd)
+
+        if errLog:
+            LOGGER.error(FAIL_LOG)
+            LOGGER.error(str(errLog))
+            if SdbManager.is_target_offline(errLog):
+                raise DevNotFoundErr(_devid)
+            return False
+        if outLog:
+            LOGGER.info(str(outLog))
+            return True
+
+    @staticmethod
+    def sdbPull(_devid, remote, local):
+        FAIL_LOG = "sdb -s %s pull failed" % _devid
+        if SdbManager._checkDevIdExists(_devid) is False:
+            raise DevNotFoundErr(_devid)
+
+        rmtFileCheck_cmd = Constants.SDB_SHELL % _devid + " " \
+                + Constants.FILE_FOUND_SCRIPT % remote
+        outLog, errLog = SdbManager.sdbCommand(rmtFileCheck_cmd)
+
+        if errLog:
+            LOGGER.error(FAIL_LOG)
+            LOGGER.error(str(errLog))
+            if SdbManager.is_target_offline(errLog):
+                raise DevNotFoundErr(_devid)
+            return False
+        if outLog:
+            LOGGER.info(str(outLog))
+
+        pull_cmd = Constants.SDB_PULL % _devid + " " + remote + " " + local
+        outLog, errLog = SdbManager.sdbCommand(pull_cmd)
+
+        if errLog:
+            LOGGER.error(FAIL_LOG)
+            LOGGER.error(str(errLog))
+            return False
+        if outLog:
+            LOGGER.info(str(outLog))
+
+        if Constants.checkFileExists(local) is False:
+            return False
+        return True
+
+    @staticmethod
+    def sdbShell(_devid, cmd, timeout=90):
+        FAIL_LOG = "sdb -s %s shell failed" % _devid
+        if SdbManager._checkDevIdExists(_devid) is False:
+            raise DevNotFoundErr(_devid)
+
+        shell_cmd = Constants.SDB_SHELL % _devid + " " + cmd
+        outLog, errLog = SdbManager.sdbCommand(shell_cmd, timeout)
+
+        if errLog:
+            LOGGER.error(FAIL_LOG)
+            LOGGER.error(str(errLog))
+            if SdbManager.is_target_offline(errLog):
+                raise DevNotFoundErr(_devid)
+            return None
+        if outLog:
+            LOGGER.info(str(outLog))
+            return outLog
+
+    @staticmethod
+    def sdbRootOn(_devid):
+        FAIL_LOG = "sdb -s %s root on failed" % _devid
+        if SdbManager._checkDevIdExists(_devid) is False:
+            raise DevNotFoundErr(_devid)
+        root_cmd = Constants.SDB_ROOT_ON % _devid
+        outLog, errLog = SdbManager.sdbCommand(root_cmd, 20)
+
+        if errLog:
+            LOGGER.error(FAIL_LOG)
+            LOGGER.error(str(errLog))
+            if SdbManager.is_target_offline(errLog):
+                raise DevNotFoundErr(_devid)
+            return False
+        if outLog:
+            LOGGER.info(str(outLog))
+
+        checkLog = SdbManager.sdbShell(_devid, 'whoami')
+        if checkLog and checkLog.find('root') != -1:
+            LOGGER.info('root on')
+        else:
+            LOGGER.error(FAIL_LOG)
+
+    @staticmethod
+    def sdbDevices():
+        FAIL_LOG = "sdb devices failed"
+        dev_cmd = Constants.SDB_DEVICES
+        outLog, errLog = SdbManager.sdbCommand(dev_cmd, 5)
+
+        if errLog:
+            LOGGER.error(FAIL_LOG)
+            LOGGER.error(str(errLog))
+            return None
+        if outLog:
+            LOGGER.info(str(outLog))
+            return outLog
+
+    @staticmethod
+    def getCapabilityBack(deviceId, tizenVer):
+        remote = Constants.getDEVICE_CAPABILITY_PATH(tizenVer)
+        local = Constants.LOCAL_CAPABILITY_PATH % deviceId
+        return SdbManager.sdbPull(deviceId, remote, local)
+
+    @staticmethod
+    def recoveryDevice(_tizenV, _deviceid):
+        if _tizenV:
+            tinycmd = "python " + Constants.DEVICE_HEALTH_CMD % _tizenV + \
+                    " --check --proc=tinyweb --deviceid=" + _deviceid
+            stubcmd = "python " + Constants.DEVICE_HEALTH_CMD % _tizenV + \
+                    " --check --proc=testkit-stub --deviceid=" + _deviceid
+            outLog, errLog = SdbManager.sdbCommand(tinycmd)
+            if errLog: LOGGER.error(str(errLog))
+            if outLog: LOGGER.info(str(outLog))
+
+            outLog, errLog = SdbManager.sdbCommand(stubcmd)
+            if errLog: LOGGER.error(str(errLog))
+            if outLog: LOGGER.info(str(outLog))
+
+    @staticmethod
+    def checkDirExist(_devid, _dirname):
+        lscmd = "ls -al " + _dirname
+        outLog = SdbManager.sdbShell(_devid, lscmd)
+        if outLog and outLog.find("No such file or directory") > -1:
+            return False
+        elif outLog is None:
+            return False
+        return True
+
+    @staticmethod
+    def findDumpPath(_devid):
+        find_cmd = "sdb -s %s shell cat /etc/tizen-platform.conf | grep TZ_SYS_CRASH_ROOT" % _devid
+        outLog, errLog = SdbManager.sdbCommand(find_cmd)
+
+        if not outLog:
+            return None
+
+        result = outLog.split('\n')
+        LOGGER.debug(str(result))
+        if len(result) < 2:
+            LOGGER.error("Cannot parsing Crash dump path")
+            return None
+        else:
+            crash_root = result[0].split('=')[1].strip()
+            dump = result[1].split('=')[1].replace('${TZ_SYS_CRASH_ROOT}', '').strip()
+            return crash_root + dump
+
+    @staticmethod
+    def resetDumpFiles(_devid):
+        dumpPath = SdbManager.findDumpPath(_devid)
+        if dumpPath is None:
+            return False
+        if SdbManager.checkDirExist(_devid, dumpPath):
+            rmcmd = "rm -f " + dumpPath + "/*"
+            SdbManager.sdbShell(_devid, rmcmd)
+
+    @staticmethod
+    def deleteDumpFiles(_devid, dump_files):
+        dumpPath = SdbManager.findDumpPath(_devid)
+        if dumpPath is None:
+            return False
+        if SdbManager.checkDirExist(_devid, dumpPath):
+            for file in dump_files:
+                rmcmd = "rm -f " + dumpPath + "/" + file
+                SdbManager.sdbShell(_devid, rmcmd)
+
+    @staticmethod
+    def exportDumpFiles(_devid, _resultDir):
+        dumpPath = SdbManager.findDumpPath(_devid)
+        if dumpPath is None:
+            return False
+        isExist = SdbManager.checkDirExist(_devid, dumpPath)
+        if isExist:
+            if not os.path.exists(_resultDir):
+                os.makedirs(_resultDir)
+            chk_crash_mgr_cmd = "ps -ef | grep -v grep | grep crash-manager"
+            while True:
+                outs = SdbManager.sdbShell(_devid, chk_crash_mgr_cmd)
+                if outs is None:
+                    break
+                else:
+                    wait_time = 10
+                    for loop in range(wait_time):
+                        LOGGER.info("Waiting for crash-manager {0}...".\
+                            format(wait_time - loop))
+                        time.sleep(1)
+
+            remote = dumpPath
+            res = SdbManager.sdbPull(_devid, remote, _resultDir)
+            if res:
+                dump_files = []
+                for file in os.listdir(_resultDir):
+                    dump_files.append(file)
+                return dump_files
+        else:
+            LOGGER.error("Not Found crash dump directory : %s" % dumpPath)
+
+    @staticmethod
+    def is_target_offline(log):
+        if log:
+            if str(log).find('target not found') > -1 or \
+                    str(log).find('target offline') > -1:
+                return True
+            else:
+                return False
+        return False
diff --git a/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/shell/tctshell/sdbmanager.pyc b/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/shell/tctshell/sdbmanager.pyc
new file mode 100755 (executable)
index 0000000..e9465cf
Binary files /dev/null and b/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/shell/tctshell/sdbmanager.pyc differ
diff --git a/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/shell/tctshell/shellguider.py b/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/shell/tctshell/shellguider.py
new file mode 100755 (executable)
index 0000000..7d1f4dc
--- /dev/null
@@ -0,0 +1,267 @@
+#!/usr/bin/python
+
+import os
+import configparser
+import string
+import json
+
+from .logmanager import LOGGER
+from .sdbmanager import SdbManager
+from .constants import Constants
+from xml.etree import ElementTree
+
+class Guider:
+    _conf_prompts = []
+    deviceIds = []
+
+    def __init__(self, plan, deviceIds=None):
+        if deviceIds is None:
+            self.deviceIds = [plan.getDeviceId()]
+        else:
+            self.deviceIds = deviceIds
+        self.deviceId = self.deviceIds[0]
+        self.tizenVer = plan.getTizenVersion()
+        self.stubPort = plan.getStubPort()
+        self.manual_items = {}
+        self.conf_items = {}
+        self.suites = {}
+
+        for suite in plan.getSuites():
+            self.suites[suite.getSuiteName()] = suite
+
+        self.conf_file = Constants.PRE_CONF_HOST_INI % self.deviceId
+
+    def init_items(self):
+        self._fill_items()
+        self._read_conf()
+        self.read(self.conf_file)
+
+    def read(self, filename):
+        LOGGER.debug("reading %s file" % filename)
+        try:
+            fp = open(filename)
+        except IOError:
+            LOGGER.warning("open file fail...")
+
+        self._read(fp, filename)
+        fp.close()
+
+    def _read(self, fp, fpname):
+        lineno = 0
+        comment = None;
+        prompts = []
+        while True:
+            line = fp.readline()
+            if not line:
+                break
+            lineno = lineno + 1
+            # comment or blank line?
+            if line.strip() == '':
+                continue
+            if line.split(None, 1)[0].lower() == 'rem' and line[0] in "rR":
+                # no leading whitespace
+                continue
+            if line[0] in '#;':
+                comment = line;
+                continue
+            if line[0] in '[':
+                comment = None;
+                continue
+            if line.find('='):
+                linelist = line.split('=')
+                prompts.append((linelist[0], comment))
+        self._conf_prompts = prompts
+
+    def _read_conf(self):
+        parser = configparser.ConfigParser()
+        parser.read(self.conf_file)
+        for section in parser.sections():
+            if not section:
+                continue
+            opts = {}
+            for n, v in parser.items(section):
+                if n:
+                    opts[n] = v
+            self.conf_items[section] = opts
+
+    def _fill_items(self):
+        command = "cat " + Constants.PRE_CONF_HOST_XML % self.deviceId
+        result =  SdbManager.hostCommandwithResult(command)
+        if result is None :
+            LOGGER.warning("Obtain tct_testconfig content error...")
+            self._exit(0)
+
+        xml_tree = ElementTree.fromstring(result)
+
+        for set in ElementTree.Element.findall(xml_tree, "suite/set"):
+            module_name = ElementTree.Element.get(set, "name", None)
+            if module_name:
+                descs = []
+                for desc in ElementTree.Element.findall(set, "testcase/description/steps/step/step_desc"):
+                    if desc is not None:
+                        descs.append(desc.text)
+            self.manual_items[module_name] = descs
+
+    def is_update_config(self, pkg_name):
+        #if self.conf_items.has_key(pkg_name):
+        if pkg_name in self.conf_items:
+            return True
+        return False
+
+    def get_confs(self, pkg_name):
+        return self.conf_items.get(pkg_name)
+
+    def _update_portenv(self):
+        #read json
+        for devId in self.deviceIds:
+            if os.path.isfile(Constants.PORT_CONF_HOST_JSON % devId) :
+                fread = open(Constants.PORT_CONF_HOST_JSON % devId, "r")
+                port_data = json.loads(fread.read())
+                fread.close()
+
+                port_data[0]['STUB_PORT'] = self.stubPort
+                fwrite = open(Constants.PORT_CONF_HOST_JSON % devId,"w")
+                json.dump(port_data, fwrite,indent = 4)
+                fwrite.close()
+            else :
+                LOGGER.warning("Not Found %s config file" % Constants.PORT_CONF_HOST_JSON % devId)
+                raise
+
+    def setup_manual_env(self):
+        self._show_manual_setup()
+        self._show_overall_infos()
+        self._update_json()
+        self._push_preconfigure()
+        if self.tizenVer.find("native") > -1:
+            self._update_txt()
+            self._push_tc_config()
+
+    def setup_default_env(self):
+        self._update_portenv()
+        self._push_portconfigure()
+
+    def _push_preconfigure(self):
+        for devId in self.deviceIds:
+            local = Constants.PRE_CONF_HOST_JSON % devId
+            remote = Constants.getTCT_PRE_CONF_DEVICE_JSON(self.tizenVer)
+            SdbManager.sdbPush(devId, local, remote)
+
+    def _push_portconfigure(self):
+        for devId in self.deviceIds:
+            local = Constants.PORT_CONF_HOST_JSON % devId
+            remote = Constants.getTCT_PORT_CONF_DEVICE_JSON(self.tizenVer)
+            SdbManager.sdbPush(devId, local, remote)
+
+    def _push_tc_config(self):
+        for devId in self.deviceIds:
+            local = Constants.NAT_CONF_HOST_TXT % devId
+            remote = Constants.NAT_CONF_DEVICE_TXT
+            SdbManager.sdbPush(devId, local, remote)
+
+    def _filter_suits(self, items):
+        keys = set()
+        if self.suites and items:
+            suit_keys = set(self.suites.keys())
+            item_keys = set(items.keys())
+            keys = keys|(suit_keys & item_keys)
+        return list(keys)
+
+    def _show_manual_setup(self):
+        keys = self._filter_suits(self.manual_items)
+        if not keys:
+            LOGGER.debug("No any pre-configure to be configured.")
+            return
+
+        LOGGER.info("\nHi,guys, before the start, there are some pre-configures must be provided,"
+              "and you just should input (Y)es or simply press Enter if your test environment "
+              "has met the request, otherwise, please input (N)o and the program will exit.")
+
+        LOGGER.info("Device Id : %s " % str(self.deviceIds))
+
+        for module in keys:
+            descs = self.manual_items.get(module)
+            if descs:
+                LOGGER.info("")
+                LOGGER.info("Module: %s" % module)
+                LOGGER.info("")
+                i = 1
+                for desc in descs:
+                    LOGGER.info('(%r) %s' % (descs.index(desc) + 1, desc))
+                    i += i
+        result = True
+        while  result:
+            answer = input("\nHave you set the device as descriped above? [Yes/No]: ")
+            if answer and (answer.lower() == "no" or answer.lower() == "n"):
+                LOGGER.warning("\nYour environment can't meet the test's request. Exit...")
+                self._exit(0)
+            if answer and (answer.lower() == "yes" or answer.lower() == "y"):
+                result = False
+        LOGGER.info("")
+
+    def _show_overall_infos(self):
+        keys = self._filter_suits(self.conf_items)
+        if not keys:
+            LOGGER.debug("No conf params are needed here.")
+            return
+
+        LOGGER.info("Overall needed configure is as below, please confirm:\n")
+        index = 1
+        for k,p in self._conf_prompts:
+            for pkg in keys:
+                v = self._get_value(pkg, k)
+                if v is not None:
+                    LOGGER.info ('{i}. {p}'.format(i = index, p = p))
+                    LOGGER.info('{0: <30}{v}'.format(k + ":", v = v))
+                    index += 1
+        LOGGER.info("\nIf needed, please update %s file. " % (Constants.PRE_CONF_HOST_INI % str(self.deviceIds)))
+        result = True
+        while  result:
+            next_step = input("Continue to run test? [Yes/No]: ")
+            if next_step and (next_step.lower() == "n" or next_step.lower() == "no"):
+                self._exit(0)
+            if next_step and (next_step.lower() == "yes" or next_step.lower() == "y"):
+                result = False
+                LOGGER.info("OK! All is well. Let's go ahead...")
+
+    def _exit(self, code=None):
+        LOGGER.info("Bye-bye ^_^")
+        if code is None:
+            code = 0
+        raise
+
+    def _get_value(self, section, opt):
+        #if self.conf_items.has_key(section):
+        if section in self.conf_items:
+            vs = self.conf_items.get(section)
+            #if vs and vs.has_key(opt.lower()):
+            if vs and opt.lower() in vs:
+                return vs.get(opt.lower())
+        return None
+
+    def _update_json(self):
+        for devId in self.deviceIds:
+            self._read_conf()
+            list = []
+            dic = {}
+            for value in self.conf_items.values():
+                for k,v in value.items():
+                    dic[k.upper()] = v
+            list.append(dic)
+            fp = open(Constants.PRE_CONF_HOST_JSON % devId,"w")
+            json.dump(list, fp,indent = 4)
+
+    def _update_txt(self):
+        for devId in self.deviceIds:
+            self._read_conf()
+            dic = {}
+
+            tc_conf_file = open(Constants.NAT_CONF_HOST_TXT % devId, "w")
+            for value in self.conf_items.values():
+                for k,v in value.items():
+                    dic[str.upper(k)] = v
+
+            for k, v in dic.items():
+                tc_conf_file.write(k+"="+v+"\n")
+
+            tc_conf_file.close()
+
diff --git a/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/shell/tctshell/shellplanner.py b/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/shell/tctshell/shellplanner.py
new file mode 100755 (executable)
index 0000000..ea62381
--- /dev/null
@@ -0,0 +1,713 @@
+#!/usr/bin/python
+
+import shutil
+import os
+import datetime
+
+from multiprocessing import Lock
+
+from .constants import Constants
+from .sdbmanager import SdbManager
+from .logmanager import LOGGER
+from .exception import DevNotFoundErr
+
+
+class MultiRunnPlan(object):
+    INSTANCE = None
+    runningPlans = {}
+    _observers = []
+
+    def __init__(self):
+        self._observers = []
+        if MultiRunnPlan.INSTANCE is not None:
+            raise Exception('A TestSingleton instance already exists')
+
+    @classmethod
+    def getInstance(cls):
+        if cls.INSTANCE is None:
+            cls.INSTANCE = MultiRunnPlan()
+        return cls.INSTANCE
+
+    def attach(self, observer):
+        if not observer in self._observers:
+            self._observers.append(observer)
+        else:
+            LOGGER.debug("The observer already exists")
+
+    def detach(self, observer):
+        if observer in self._observers:
+            self._observers.remove(observer)
+        else:
+            LOGGER.debug("[DEBUG] The observer does not exist")
+
+    def notify(self):
+        LOGGER.debug(" MultiRunnPlan Notify ")
+        for observer in self._observers:
+            observer.update()
+
+    #param string plan id
+    #param TctShellPlan plan
+    def addPlan(self, planid, plan):
+        if planid:
+            self.runningPlans[planid] = plan
+        else:
+            self.runningPlans['test'] = plan
+
+    #return int
+    def getPlansSize(self):
+        return len(self.runningPlans)
+
+    def removePlans(self, plans):
+        for plan in plans:
+            self.runningPlans.pop(plan.name, None)
+
+    def clearPlans(self):
+        self.runningPlans.clear()
+
+    #return dictionary
+    def getPlanDict(self):
+        return self.runningPlans
+
+    #Param TctShellPlan
+    #return bool
+    def isSelectedDevAvailable(self, plan):
+        currDevId = plan.getDeviceId()
+        runnDevs = self.getRunnDevice()
+        for rDev in runnDevs:
+            if rDev == currDevId:
+                LOGGER.debug("%s currently occupied with other plans." \
+                        % currDevId)
+                return False
+
+        LOGGER.debug("%s is now available" % currDevId)
+        return True
+
+    #return String[]
+    def getRunnDevice(self):
+        runDev = []
+        for rplan in self.runningPlans.values():
+            if rplan.isRunning() == True:
+                runDev.append(rplan.getDeviceId())
+        return runDev
+
+    def printRunnPlan(self):
+        for rplan in self.runningPlans.values():
+            LOGGER.debug("Name : %s , isStart : %s" \
+                    % (rplan.getPlanName(), rplan.isRunning()))
+
+    def setCurrPlanRunning(self, plan):
+        currPlanName = plan.getPlanName()
+        for rPlan in self.runningPlans.values():
+            if rPlan.getPlanName() == currPlanName:
+                rPlan.setRunning(True)
+                return True
+        return False
+
+
+class TctShellPlan:
+    resultFolderPath = ""
+    isRun = False
+    isFinish = False
+    isRerun = False
+
+    #PARAM name = Full_web_mobile#1(primary key)
+    #PARAM deviceid = '0000d81b00006200'
+    #PARAM profile = 'mobile' or 'wearable' or 'tv'
+    #PARAM executeType = ExecuteType class
+    #PARAM suites = TctShellSuite []
+    #PARAM tizenVer = 'tizen_web_2.4'
+    #PARAM resultFolderPath = '/opt/tct/tizen_web_2.4/shell/result/'
+    #PARAM stubPort = 8000
+    def __init__(self, name, devmgr, deviceId, profile, executeType, suites, \
+                 tizenVer, resultFolderPath, stubPort=8000, scen_name=None):
+        self.suites = []
+        self.name = name
+        self.devmgr = devmgr
+        self.deviceId = deviceId
+        self.buildId = None
+        self.profile = profile
+        self.executeType = executeType
+        self.unpass = None
+        self.scen_name = scen_name
+        for suite in suites:
+            LOGGER.info("List: suite's name = %s" % str(suite.getSuiteName()))
+            self.suites.append(suite)
+        self.tizenVer = tizenVer
+        self.resultFolderPath = resultFolderPath
+        self.expectedTime = 0
+        self.scen_resultFolderPath = None
+        self.stubPort = stubPort
+        self.planLock = Lock()
+        if self.resultFolderPath is None:
+            folderName = self.name + "_" + \
+                    datetime.datetime.now().strftime('%Y-%m-%d_%H:%M:%S.%f')
+            self.resultFolderPath = Constants.RESULT_FOLDER \
+                    % (self.tizenVer, folderName)
+
+    def acquire(self):
+        self.planLock.acquire(True)
+
+    def release(self):
+        self.planLock.release()
+
+    def addExpectedTime(self, etime):
+        self.expectedTime += etime
+
+    def addSuite(self, suite):
+        self.suites.append(suite)
+
+    def getPlanName(self):
+        return self.name
+
+    def getProfile(self):
+        return self.profile
+
+    def getSuites(self):
+        return self.suites
+
+    def getDeviceId(self):
+        return self.deviceId
+
+    def setDeviceId(self, deviceId):
+        self.acquire()
+        if self.deviceId is None:
+            LOGGER.debug("plan [%s] now has device ID [%s]" \
+                    % (self.getPlanName(), deviceId))
+            self.deviceId = deviceId
+        self.release()
+
+    def getBuildId(self):
+        if not self.buildId:
+            dev = self.devmgr.getDevice(self.deviceId)
+            if dev:
+                self.buildId = dev.getDeviceBuildId()
+
+        return self.buildId
+
+    def isRunning(self):
+        return self.isRun
+
+    def setRunning(self, run):
+        self.isRun = run
+
+    def isFinished(self):
+        return self.isFinish
+
+    def isReRunning(self):
+        return self.isRerun
+
+    def setRerunning(self, rerun):
+        self.isRerun = rerun
+
+    def getExecuteType(self):
+        return self.executeType
+
+    def getStubPort(self):
+        return self.stubPort
+
+    def getTizenVersion(self):
+        return self.tizenVer
+
+    def setFinished(self):
+        self.isFinish = True
+        MRP_i = MultiRunnPlan.getInstance()
+        MRP_i.notify()
+
+    def getUnpass(self):
+        return self.unpass
+
+    def setUnpass(self, unpass):
+        if self.unpass is None or self.unpass == False:
+            self.unpass = unpass
+
+    def getResultFolderPath(self):
+        '''
+        self.acquire()
+        if self.resultFolderPath is None:
+            LOGGER.error("make result dir path============")
+            folderName = self.name + "_" + \
+                    datetime.datetime.now().strftime('%Y-%m-%d_%H:%M:%S.%f')
+            self.resultFolderPath = Constants.RESULT_FOLDER \
+                    % (self.tizenVer, self.getBuildId(), folderName)
+        self.release()
+        '''
+        return self.resultFolderPath
+
+    #info get Tmp Folder path in device
+    #return String
+    def getDevTctTmpPath(self):
+        return Constants.getDEVICE_SUITE_TARGET(self.tizenVer) + "tmp/"
+
+    def getScenName(self):
+        return self.scen_name
+
+    def setScenResultFolderPath(self, path):
+        self.scen_resultFolderPath = path
+
+    def getScenResultFolderPath(self):
+        self.acquire()
+        if not self.scen_resultFolderPath and self.getScenName():
+            folderName = "scenario_" + self.getScenName() + '_' \
+                    + datetime.datetime.now().strftime('%Y-%m-%d_%H:%M:%S.%f')
+            self.scen_resultFolderPath = Constants.RESULT_FOLDER \
+                    % (self.tizenVer, self.getBuildId(), folderName)
+        self.release()
+        return self.scen_resultFolderPath
+
+    def setup_distribute(self):
+        self.devmgr.loadDeviceList()
+        runningDevs = self.devmgr.getSdbDeviceList()
+        if len(runningDevs) < 1:
+            LOGGER.error("No device connected for distribute mode")
+            return False
+        LOGGER.info("Plan [%s] will be distributed to %d devices: %s" \
+                % (self.name, len(runningDevs), \
+                str([dev.devId for dev in runningDevs])))
+        self.deviceId = None
+        self.sortSuites()
+        return True
+
+    def sortSuites(self):
+        sorted_suites = []
+        suites = self.getSuites()
+        connection_suite = None
+        for suite in suites:
+            suite_name = suite.getSuiteName()
+            if suite_name == 'tct-connection-native-utc':
+                connection_suite = suite
+                continue
+
+            autoCount = int(suite.getAutoNum())
+            category = suite.category
+            if category and category.find('Runtime') > -1:
+                etime = autoCount * (Constants.SUITE_TEST_EXPECTED_TIME + 2)
+            else:
+                etime = (autoCount * 2) + Constants.SUITE_TEST_EXPECTED_TIME
+
+            suite.setExpectedTime(etime)
+            sorted_suites.append(suite)
+        sorted_suites.sort(key=lambda x: x.expectedTime, reverse=True)
+        if connection_suite:
+            sorted_suites.append(connection_suite)
+
+        self.suites = sorted_suites
+
+
+class TctShellSuite:
+    #PARAM suiteName = 'tct-capability-tests'
+    #PARAM tcName = 'caps_displayresolution'
+    #PARAM auto_num = 12
+    #PARAM manual_num = 15
+    #PARAM suite_pkg_name = 'common/tct-capability-tests-2.4.zip'
+    #PARAM launcher = 'WRTLauncher'
+    #PARAM category = 'Compliance'
+    #PARAM tizenV = 'tizen_web_2.4'
+    def __init__(self, suiteName, tcName, auto_num, manual_num, \
+            suite_pkg_name, launcher, category, tizenV, skip_count, skip_tc, \
+            devmgr, pre_test, post_test, is_make_ne=0):
+        self.suiteName = suiteName
+        self.tcName = tcName
+        self.auto_num = auto_num
+        self.manual_num = manual_num
+        self.suite_pkg_name = suite_pkg_name
+        self.launcher = launcher
+        #category can be None
+        self.category = category
+        self.tizenV = tizenV
+        self.expectedTime = 0
+        self.runErrorStatus = False
+        self.noAuto = False
+        self.noManual = False
+        self.skip_count = skip_count
+        self.skip_tc = skip_tc
+        self.devmgr = devmgr
+        self.pre_test = pre_test
+        self.post_test = post_test
+        self.is_make_ne = is_make_ne
+
+    def _liteCommand(self, deviceId, resultFolder, extype, \
+            tcName, isRerun, stubPort, isSkip=None, reverse_tests=None):
+        lcmd = ""
+        if self.tizenV and \
+            (self.tizenV.find("web") > -1 or self.tizenV.find("csharp") > -1):
+            lcmd += Constants.LITE_CMD2 + " "
+        else:
+            lcmd += Constants.LITE_CMD1 + " "
+
+        # -- priority
+        if Constants.PRIORITY_VALUE:
+            lcmd += Constants.PRIORITY
+
+        lcmd += Constants.LITE_DEVICE_PARAM + " "
+
+        if isSkip:
+            lcmd += 'None' + " "
+        elif self.is_make_ne != 0:
+            lcmd += 'NE:{}_{}'.format(str(self.is_make_ne), \
+                str(deviceId)) + " "
+        else:
+            lcmd += str(deviceId) + " "
+
+        if isRerun:
+            lcmd += Constants.LOCAL_PRE
+            lcmd += os.path.join(resultFolder, \
+                    self.suiteName + Constants.RERUN_SUFFIX) + " "
+        elif reverse_tests is not None:
+            lcmd += Constants.LOCAL_PRE
+            lcmd += reverse_tests + " "
+        else:
+            if self.tizenV.find('csharp') > -1 or self.tizenV.find('web') > -1 or deviceId is None:
+                lcmd += Constants.LOCAL_PRE
+                lcmd += (Constants.LOCAL_SHELL_TEMP_PATH % deviceId)
+                lcmd += "opt/" + self.suiteName + "/"
+                lcmd += Constants.DEVICE_SUITE_DEF + " "
+            else:
+                lcmd += Constants.DEVICE_PRE
+                lcmd += Constants.getDEVICE_SUITE_FOLDER(self.tizenV)
+                lcmd += self.suiteName + "/"
+                lcmd += Constants.DEVICE_SUITE_DEF + " "
+
+        lcmd += extype.toLiteParam() + " "
+        lcmd += Constants.LITE_NON_ACTIVE_PARAM + " "
+
+        if tcName is not None:
+            lcmd += Constants.TESTCASE_ID + " "
+            lcmd += tcName + " "
+
+        lcmd += "--tizen-version" + " "
+        lcmd += self.tizenV + " "
+
+        lcmd += "--stub-port" + " "
+        lcmd += str(stubPort) + " "
+
+        if self.skip_tc:
+            lcmd += "--skip-tc "
+            for tc in self.skip_tc:
+                lcmd += str(tc)
+                lcmd += " "
+
+        if self.tizenV and (self.tizenV.find("web") > -1 or self.tizenV.find('csharp') > -1):
+            lcmd += Constants.EXT_TYPE_PARAM + " "
+            lcmd += Constants.COMM_TYPE_PARAM + " "
+            lcmd += Constants.ENV_TYPE_PARAM + " "
+        else:
+            lcmd += Constants.LITE_E_PARAM + " "
+
+        if deviceId:
+            lcmd += Constants.LITE_CAPABILITY_PARAM + " "
+            lcmd += Constants.LOCAL_CAPABILITY_PATH % deviceId + " "
+
+        lcmd += Constants.LITE_OUTPUT_PARAM
+        lcmd += os.path.join(resultFolder, self.suiteName)
+
+        if isRerun:
+            if extype.getCurrType() == ExecuteType.e_manual:
+                lcmd += Constants.RERUN_MANUAL_RESULT_SUFFIX + " "
+            else:
+                lcmd += Constants.RERUN_AUTO_RESULT_SUFFIX + " "
+
+            lcmd += " --rerun"
+        else:
+            if extype.getCurrType() == ExecuteType.e_manual:
+                lcmd += Constants.MANUAL_RESULT_SUFFIX + " "
+            else:
+                lcmd += Constants.AUTO_RESULT_SUFFIX + " "
+
+        return lcmd
+
+    def executePlanAuto(self, deviceId, resultFolder, tcName, isRerun, \
+            stubport):
+        self.executePlaninLite(deviceId, resultFolder, ExecuteType('Auto'), \
+                tcName, isRerun, stubport)
+
+    def executePlanManual(self, deviceId, resultFolder, tcName, isRerun, \
+            stubport):
+        self.executePlaninLite(deviceId, resultFolder, ExecuteType('Manual'), \
+                tcName, isRerun, stubport)
+
+    def executePlaninLite(self, deviceId, resultFolder, exeType, tcName, \
+            isRerun, stubport):
+        exCmd = self._liteCommand(deviceId, resultFolder, exeType, tcName, \
+                isRerun, stubport)
+
+        isPass = True
+        if deviceId:
+            isPass = SdbManager.hostLiteCommand(exCmd, self.skip_count)
+        else:
+            SdbManager.hostRecLiteCommand(exCmd)
+            return None
+
+        if isPass is False:
+            cmd = ""
+            if self.tizenV.find("native") > -1 or self.tizenV.find("2.4") > -1:
+                tests = Constants.getDEVICE_TESTS_FILE(self.tizenV) % self.suiteName
+                cmd = "ps aux | grep 'python /opt/testkit/lite[0-9].[0-9]/testkit-lite -f device:%s'" % tests
+            else:
+                tests = Constants.LOCAL_SHELL_TEMP_PATH % deviceId + "opt/" + self.suiteName + "/tests.xml"
+                cmd = "ps aux | grep 'python /opt/testkit/lite[0-9].[0-9]/testkit-lite -f %s'" % tests
+
+            result = str(SdbManager.hostCommandwithResult(cmd))
+            grep_lines = result.split('\n')
+            for line in grep_lines:
+                if line and len(line) > 0 and line.find(self.suiteName) > -1:
+                    proc_id = line.split()[1]
+                    SdbManager.hostCommand('kill -9 %s' % proc_id)
+                    if self.tizenV and (self.tizenV.find("web") > -1 or self.tizenV.find("csharp") > -1):
+                        exCmd = self._liteCommand(deviceId, resultFolder, exeType, tcName, \
+                             isRerun, stubport, True)
+                        SdbManager.hostRecLiteCommand(exCmd)
+                    else:
+                        reverse_tests = self._naitve_installSuiteinHost()
+                        exCmd = self._liteCommand(deviceId, resultFolder, exeType, tcName, \
+                             isRerun, stubport, True, reverse_tests)
+                        SdbManager.hostRecLiteCommand(exCmd)
+                    LOGGER.error("[skip package : %s]" % self.suiteName)
+                    break
+
+    def _native_installSuiteinHost(self):
+        hostTmpFolder = Constants.LOCAL_SHELL_TEMP_PATH % None
+        localSuitePath = Constants.SUITES_REPOSITORY \
+            % self.tizenV + self.suite_pkg_name
+        self._installSuiteinHost(None, localSuitePath, hostTmpFolder)
+        tmp_suite = hostTmpFolder + "opt/" + self.suiteName + "/tests.xml"
+        return tmp_suite
+
+    def getSuitePackageName(self):
+        return self.suite_pkg_name
+
+    def getSuiteName(self):
+        return self.suiteName
+
+    def getSuiteZipName(self):
+        suiteFile = self.suite_pkg_name.split('/')
+        return suiteFile[1]
+
+    def getSuiteFullPath(self):
+        return os.path.join(Constants.SUITES_REPOSITORY \
+                % self.tizenV, self.suite_pkg_name)
+
+    def checkExistSuiteFile(self):
+        return os.path.isfile(self.getSuiteFullPath())
+
+    def _fileCopy(self, src, destDir):
+        if not Constants.checkFileExists(src):
+            LOGGER.warning("The '%s' file exists error" % src)
+
+        if not os.path.exists(destDir):
+            os.makedirs(destDir, mode=0o777)
+
+        shutil.copy(src, destDir)
+
+    def getTestCase(self):
+        return self.tcName
+
+    def getAutoNum(self):
+        return self.auto_num
+
+    def getManualNum(self):
+        return self.manual_num
+
+    def getExpectedTime(self):
+        return self.expectedTime
+
+    def setExpectedTime(self, etime):
+        self.expectedTime = etime
+
+    def setRunErrorStatus(self, status):
+        self.runErrorStatus = status
+
+    def getNoAuto(self):
+        return self.noAuto
+
+    def getNoManual(self):
+        return self.noManual
+
+    def setNoAuto(self):
+        self.noAuto = True
+
+    def setNoManual(self):
+        self.noManual = True
+
+    def _sdb_recov(self, _devid):
+        LOGGER.error(_devid + " sdb disconnect")
+        self.devmgr.deleteFaultDevice(_devid)
+
+    def _installSuiteinHost(self, _devid, localSuitePath, hostTmpFolder):
+        if not os.path.exists(hostTmpFolder + "opt/" + self.suiteName \
+                + "/" + Constants.INSTALL_ZIP_W3):
+            # copy suite zip file
+            self._fileCopy(localSuitePath, hostTmpFolder)
+
+            # unzip suite zip file
+            unzip_cmd = Constants.UNZIP + " " + hostTmpFolder \
+                    + self.getSuiteZipName() + " -d " + hostTmpFolder
+            SdbManager.hostCommand(unzip_cmd, 300)
+
+        if _devid:
+            try:
+                inst_cmd = "python " + hostTmpFolder + "opt/" + self.suiteName \
+                    + "/" + Constants.INSTALL_ZIP_W3 + " -i -s " + _devid
+                SdbManager.hostCommand(inst_cmd, 300)
+            except DevNotFoundErr:
+                self._sdb_recov(_devid)
+                return False
+            except Exception:
+                return False
+
+        return True
+
+    def _installSuiteinTarget(self, _devid, localSuitePath, remoteTmpFolder):
+        try:
+            if not SdbManager.sdbPush(_devid, localSuitePath, remoteTmpFolder):
+                return False
+
+            unzip_cmd = Constants.UNZIP + " " + remoteTmpFolder \
+                + self.getSuiteZipName() + " -d " \
+                + remoteTmpFolder.replace("tmp/", "")
+
+            inst_cmd = remoteTmpFolder.replace("/tmp", "") + "opt/" \
+                + self.suiteName + "/" + Constants.INSTALL_ZIP_24
+
+            SdbManager.sdbShell(_devid, unzip_cmd, 300)
+            SdbManager.sdbShell(_devid, inst_cmd, 300)
+        except DevNotFoundErr:
+            self._sdb_recov(_devid)
+            return False
+        except Exception:
+            return False
+
+        return True
+
+    def installSuite(self, deviceId, remoteTmpFolder):
+        localSuitePath = Constants.SUITES_REPOSITORY \
+                % self.tizenV + self.suite_pkg_name
+        instResult = True
+
+        if self.tizenV.find("csharp") > -1 or \
+            self.tizenV.find("web") > -1 or deviceId is None:
+            hostTmpFolder = Constants.LOCAL_SHELL_TEMP_PATH % deviceId
+            instResult = self._installSuiteinHost(\
+                    deviceId, localSuitePath, hostTmpFolder)
+        else:
+            instResult = self._installSuiteinTarget(\
+                    deviceId, localSuitePath, remoteTmpFolder)
+
+        return instResult
+
+    def _unInstallSuiteInHost(self, _devid, hostTmpFolder):
+        suiteZipPath = hostTmpFolder + self.getSuiteZipName()
+        removeSuitezip = "rm -f " + suiteZipPath
+        SdbManager.hostCommand(removeSuitezip)
+
+        localSuitePath = Constants.SUITES_REPOSITORY % self.tizenV + self.suite_pkg_name
+        self._fileCopy(localSuitePath, hostTmpFolder)
+
+        unzip_cmd = Constants.UNZIP + " " + hostTmpFolder \
+                + self.getSuiteZipName() + " -d " + hostTmpFolder
+        SdbManager.hostCommand(unzip_cmd)
+
+        if _devid:
+            try:
+                unInstSuite = "python " + hostTmpFolder + "opt/" \
+                    + self.suiteName + "/" + Constants.UNINSTALL_ZIP_W3 \
+                    + " -s " + _devid
+                SdbManager.hostCommand(unInstSuite,300)
+            except DevNotFoundErr:
+                self._sdb_recov(_devid)
+                return False
+            except Exception:
+                return False
+
+    def _unInstallSuiteInTarget(self, _devid, remoteFolder):
+        try:
+            removeSuite = "rm -f " + remoteFolder + self.getSuiteZipName()
+            unInstSuite = remoteFolder.replace("/tmp", "") + "opt/" \
+                + self.suiteName + "/" + Constants.UNINSTALL_ZIP_24
+
+            SdbManager.sdbShell(_devid, removeSuite, 300)
+            SdbManager.sdbShell(_devid, unInstSuite, 300)
+        except DevNotFoundErr:
+            self._sdb_recov(_devid)
+            return False
+        except Exception:
+            return False
+
+    def runPreTestScript(self, _devid):
+        if self.pre_test:
+            LOGGER.debug("run pre-test script: {}".format(self.pre_test))
+            SdbManager.hostRecLiteCommand('bash {} {} {}'.format(self.pre_test, _devid, self.suiteName))
+
+
+    def runPostTestScript(self, _devid):
+        if self.post_test:
+            LOGGER.debug("run post-test script: {}".format(self.post_test))
+            SdbManager.hostRecLiteCommand('bash {} {} {}'.format(self.post_test, _devid, self.suiteName))
+
+    def unInstallSuite(self, deviceId, remoteFolder):
+        if self.tizenV.find("csharp") > -1 or self.tizenV.find("web") > -1 or deviceId is None:
+            hostTmpFolder = Constants.LOCAL_SHELL_TEMP_PATH % deviceId
+            self._unInstallSuiteInHost(deviceId, hostTmpFolder)
+        else:
+            self._unInstallSuiteInTarget(deviceId, remoteFolder)
+
+    def sdbCheckSuite(self, _devid, suiteName):
+        LOGGER.info("Entering checkSuiteExisted(String suiteName : %s)" \
+                % suiteName)
+        try:
+            if self.tizenV and float(self.tizenV.split('_')[-1]) >= 3.0:
+                rep_suiteName = suiteName.replace("tct-", "")
+                host_check_cmd = "su - owner -c \"app_launcher -l | grep %s\"" \
+                             % rep_suiteName
+                output = SdbManager.sdbShell(_devid, host_check_cmd)
+                if output and output.find(rep_suiteName) > -1:
+                    return True
+                else:
+                    return False
+            else:
+                check_cmd = "wrt-launcher -l | grep " + suiteName
+                resultMsg = SdbManager.sdbShell(_devid, check_cmd)
+                if resultMsg and len(resultMsg) > 0:
+                    return True
+                else:
+                    return False
+        except DevNotFoundErr:
+            self._sdb_recov(_devid)
+            return False
+        except Exception:
+            return False
+
+
+class ExecuteType:
+    e_all = "All"
+    e_auto = "Auto"
+    e_manual = "Manual"
+
+    currType = ""
+
+    def __init__(self, extype):
+        self.currType = extype
+
+    @classmethod
+    def createExecuteType(self, extype):
+        executeType = None
+        if self.e_all.lower() == extype.lower():
+            executeType = ExecuteType(self.e_all)
+        elif self.e_auto.lower() == extype.lower():
+            executeType = ExecuteType(self.e_auto)
+        elif self.e_manual.lower() == extype.lower():
+            executeType = ExecuteType(self.e_manual)
+
+        return executeType
+
+    #return String
+    def toLiteParam(self):
+        if self.currType == self.e_auto:
+            return " -A"
+        elif self.currType == self.e_manual:
+            return " -M"
+        else:
+            return ""
+
+    #return String
+    def getCurrType(self):
+        return self.currType
diff --git a/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/shell/tctshell/shellworker.py b/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/shell/tctshell/shellworker.py
new file mode 100755 (executable)
index 0000000..5869802
--- /dev/null
@@ -0,0 +1,238 @@
+#!/usr/bin/python
+
+import threading
+import time
+from .shellplanner import *
+from .result_summary import ResultSummary
+from .logmanager import LOGGER
+from .sdbmanager import SdbManager
+
+
+class PlanExecutor(threading.Thread):
+    plan = None
+    autoworker = None
+    maualworker = None
+    thCounter = ""
+
+    #Param TctshellPlan
+    def __init__(self, plan, threadCounter, isPreconSet, devmgr):
+        LOGGER.debug("Creating PlanExecutor, with [plan]: " \
+                + plan.getPlanName())
+        self.plan = plan
+        threading.Thread.__init__(self)
+        self.name = plan.getPlanName()
+        self.tcCounter = threadCounter
+        self.threadLock = threading.Lock()
+        self.isPreconSet = isPreconSet
+        self.devmgr = devmgr
+
+    def run(self):
+        time.sleep(1)
+        LOGGER.debug("Starting PlanExecutor")
+
+        self.threadLock.acquire()
+        self.checkWorkerStatus()
+        LOGGER.debug("setStartTest()")
+        self.setStartTest()
+        self.threadLock.release()
+
+        exeType = self.plan.getExecuteType()
+        if exeType.getCurrType() == ExecuteType.e_auto:
+            self.autoworker = AutoSuiteWorker(self.plan, self.devmgr)
+            self.autoworker.auto_test()
+
+        elif exeType.getCurrType() == ExecuteType.e_manual:
+            self.manualworker = ManualSuiteWorker(self.plan)
+            self.manualworker.manual_test()
+
+        else:
+            self.autoworker = AutoSuiteWorker(self.plan, self.devmgr)
+            self.autoworker.auto_test()
+
+            self.manualworker = ManualSuiteWorker(self.plan)
+            self.manualworker.manual_test()
+
+        SdbManager.exportDumpFiles(self.plan.getDeviceId(), \
+                self.plan.getResultFolderPath() + "/dump/")
+
+        summary = ResultSummary(plans=[self.plan])
+        summary.genResults()
+        summary.genSummary()
+        self.setFinishedTest()
+
+    def checkWorkerStatus(self):
+        multiPlanIns = MultiRunnPlan.getInstance()
+        while True:
+            if multiPlanIns.isSelectedDevAvailable(self.plan):
+                break
+            else:
+                time.sleep(5)
+
+    def setStartTest(self):
+        multiPlanIns = MultiRunnPlan.getInstance()
+        multiPlanIns.setCurrPlanRunning(self.plan)
+
+    def setFinishedTest(self):
+        self.plan.setRunning(False)
+        self.plan.setFinished()
+
+
+class AutoSuiteWorker:
+    plan = None
+
+    def __init__(self, plan, devmgr):
+        self.plan = plan
+        self.deviceId = self.plan.getDeviceId()
+        self.devmgr = devmgr
+
+    def auto_test(self):
+        deviceId = self.deviceId
+        suites = self.plan.getSuites()
+        remTmpDir = self.plan.getDevTctTmpPath()
+        resultFolder = self.plan.getResultFolderPath()
+        isRerun = self.plan.isReRunning()
+        stubPort = self.plan.getStubPort()
+
+        for counter, suite in enumerate(suites):
+            if not self._checkDeviceStatus():
+                self._auto_test_inhost(suites[counter:])
+                break
+
+            if suite.getAutoNum() is None or int(suite.getAutoNum()) == 0:
+                suite.setNoAuto()
+                LOGGER.warning('Suite : %s , AutoNum : 0' \
+                        % (suite.getSuiteName()))
+                continue
+
+            if suite.checkExistSuiteFile() == False:
+                LOGGER.error("The %s file Exist error" \
+                        % suite.getSuiteFullPath())
+                continue
+            suiteName = suite.getSuiteName()
+            LOGGER.debug("current suite Auto count : %s " % suite.getAutoNum())
+
+            LOGGER.info('Checking if the suite ' + suiteName \
+                    + 'is installed already.')
+            if suite.sdbCheckSuite(deviceId, suiteName):
+                LOGGER.info('The suite ' + suiteName \
+                        + ' is existed. uninstalling')
+                LOGGER.info('Uninstalling the existed suite ' + suiteName)
+                suite.unInstallSuite(deviceId, remTmpDir)
+
+            LOGGER.info('Uploading the suite ' + suiteName)
+            LOGGER.info('Installing the suite ' + suiteName)
+            suite.installSuite(deviceId, remTmpDir)
+            LOGGER.info('Executing the suite ' + suiteName \
+                    + ' in testkit-lite.')
+            suite.executePlanAuto(deviceId, resultFolder, \
+                    suite.getTestCase(), isRerun, stubPort)
+
+            LOGGER.info('removing the suite pkg file of the suite ' \
+                    + suiteName)
+            LOGGER.info('Uninstalling the suite ' + suiteName)
+            suite.unInstallSuite(deviceId, remTmpDir)
+
+        LOGGER.info("Finished to execute all auto test-cases")
+
+    def _auto_test_inhost(self, suites):
+        deviceId = None
+        remTmpDir = self.plan.getDevTctTmpPath()
+        resultFolder = self.plan.getResultFolderPath()
+        isRerun = self.plan.isReRunning()
+        stubPort = self.plan.getStubPort()
+
+        for suite in suites:
+            if suite.getAutoNum() is None or int(suite.getAutoNum()) == 0:
+                suite.setNoAuto()
+                LOGGER.warning('Suite : %s , AutoNum : 0' \
+                        % (suite.getSuiteName()))
+                continue
+
+            suiteName = suite.getSuiteName()
+            LOGGER.info('Uploading the suite ' + suiteName)
+            LOGGER.info('Installing the suite ' + suiteName)
+            suite.installSuite(deviceId, remTmpDir)
+            LOGGER.info('Executing the suite ' + suiteName \
+                    + ' in testkit-lite.')
+            suite.executePlanAuto(deviceId, resultFolder, \
+                    suite.getTestCase(), isRerun, stubPort)
+
+            LOGGER.info('removing the suite pkg file of the suite ' \
+                    + suiteName)
+            LOGGER.info('Uninstalling the suite ' + suiteName)
+            suite.unInstallSuite(deviceId, remTmpDir)
+
+            LOGGER.debug("current suite Auto count : %s " % suite.getAutoNum())
+            LOGGER.info("Finished to execute auto suite: [%s]" % suiteName)
+
+    def _checkDeviceStatus(self):
+        time_waited = 0
+        reboot_tried = False
+        while True:
+            if not self.devmgr.isDeviceAvailable(self.deviceId):
+                if time_waited >= Constants.NO_WORKERS_TIMEOUT:
+                    LOGGER.error("Rebooting timeout device : %s" \
+                            % self.deviceId)
+                    return False
+                if reboot_tried:
+                    waiting_time = 10
+                else:
+                    waiting_time = Constants.RECOVERY_TIME
+                LOGGER.error("Please reboot device : %s" % self.deviceId)
+                time.sleep(waiting_time)
+                time_waited += waiting_time
+                reboot_tried = True
+            else:
+                break
+        return True
+
+
+class ManualSuiteWorker:
+    plan = None
+
+    def __init__(self, plan):
+        self.plan = plan
+
+    def manual_test(self):
+        deviceId = self.plan.getDeviceId()
+        suites = self.plan.getSuites()
+        resultFolder = self.plan.getResultFolderPath()
+        remTmpDir = self.plan.getDevTctTmpPath()
+        isRerun = self.plan.isReRunning()
+        stubPort = self.plan.getStubPort()
+        for suite in suites:
+            if suite.getManualNum() is None or int(suite.getManualNum()) == 0:
+                suite.setNoManual()
+                LOGGER.warning('Suite : %s , ManualNum : 0' \
+                        % (suite.getSuiteName()))
+                continue
+            if suite.checkExistSuiteFile() == False:
+                LOGGER.error("The %s file Exist error" % self.getSuiteFullPath)
+                continue
+            suiteName = suite.getSuiteName()
+            LOGGER.debug("current suite Manual count : %s " \
+                    % suite.getManualNum())
+
+            LOGGER.info('Checking if the suite ' + suiteName \
+                    + 'is installed already.')
+            if suite.sdbCheckSuite(deviceId, suiteName):
+                LOGGER.info('The suite ' + suiteName \
+                        + ' is existed. uninstalling')
+                LOGGER.info('Uninstalling the existed suite ' + suiteName)
+                suite.unInstallSuite(deviceId, remTmpDir)
+
+            LOGGER.info('Uploading the suite ' + suiteName)
+            LOGGER.info('Installing the suite ' + suiteName)
+
+            suite.installSuite(deviceId, remTmpDir)
+            LOGGER.info('Executing the suite ' + suiteName \
+                    + ' in testkit-lite.')
+            suite.executePlanManual(deviceId, resultFolder, \
+                    suite.getTestCase(), isRerun, stubPort)
+
+            LOGGER.info('removing the suite pkg file of the suite ' \
+                    + suiteName)
+            LOGGER.info('Uninstalling the suite ' + suiteName)
+            suite.unInstallSuite(deviceId, remTmpDir)
+
+        LOGGER.info("Finished to execute all manual test-cases")
diff --git a/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/shell/tctshell/shellwrapper.py b/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/shell/tctshell/shellwrapper.py
new file mode 100755 (executable)
index 0000000..aac9e0b
--- /dev/null
@@ -0,0 +1,806 @@
+#!/usr/bin/python
+
+import os
+import sys
+import glob
+from optparse import *
+from .constants import Constants
+import xml.etree.ElementTree as etree
+from .shellplanner import ExecuteType
+from .devicemanager import DeviceManager
+from .logmanager import LOGGER
+
+
+#show all available suites
+def show_available_suites(option, opt_str, value, parser):
+    LOGGER.info("Test Suites:...\n")
+    repos = Constants.ALL_PROFILES
+    repos.append('common')
+    repos.append('common-iot')
+    os.chdir(Constants.TCT_HOME)
+    versions = sorted(glob.glob("tizen_*"))
+    for ver in versions:
+        LOGGER.info("version : %s" % ver)
+        for tp in repos:
+            LOGGER.info("        profile : %s" % tp)
+            if not os.path.isdir(Constants.SUITES_REPOSITORY % (ver) + tp):
+                continue
+            os.chdir(Constants.SUITES_REPOSITORY % (ver) + tp)
+            zips = sorted(glob.glob("*.zip"))
+            for files in zips:
+                #without ".zip"
+                LOGGER.info("                %s" % files[:-4])
+    sys.exit(1)
+
+
+def show_result_files():
+    os.chdir(Constants.TCT_HOME)
+    LOGGER.info("\n  *Result Folder Absolute Path*")
+    versions = sorted(glob.glob("tizen_*"))
+    for ver in versions:
+        if not os.path.isdir("/opt/tct/%s/shell/result/" % ver):
+            continue
+        os.chdir("/opt/tct/%s/shell/result/" % ver)
+        buildids = sorted(glob.glob("*"))
+        for buildid in buildids:
+            if buildid == "latest" or buildid == "Untitled Folder":
+                continue
+            os.chdir(Constants.RESULT_REPO % (ver, buildid))
+            results = sorted(glob.glob("*"))
+            for result in results:
+                os.chdir(Constants.RESULT_REPO % (ver, buildid))
+                if not os.path.isdir(os.path.abspath(result)):
+                    continue
+                LOGGER.info("    %s" % os.path.abspath(result))
+
+    LOGGER.info('')
+    sys.exit(1)
+
+
+def print_planfolder(option, opt_str, value, parser):
+    LOGGER.info("Shell plan folder path : \'%s\'" % Constants.TCT_PLAN_FOLDER)
+    ret = os.system("tree %s" % Constants.TCT_PLAN_FOLDER)
+    if ret:
+        LOGGER.error("The program \'tree\' is currently not installed. \
+You can install it by typing : apt-get install tree")
+    sys.exit(1)
+
+
+def print_resultfolder(option, opt_str, value, parser):
+    os.chdir(Constants.TCT_HOME)
+    for tizenV in glob.glob("tizen_*"):
+        resultFolder = (Constants.RESULT_REPO % (tizenV, ""))[:-1]
+        if os.path.isdir(resultFolder):
+            ret = os.system("tree -L 3 %s" % resultFolder)
+            if ret:
+                LOGGER.error("The program \'tree\' is currently not installed. \
+You can install it by typing : apt-get install tree")
+
+    show_result_files()
+    sys.exit(1)
+
+
+def invoke_sdb_devices(option, opt_str, value, parser):
+    os.system(Constants.SDB_DEVICES)
+    sys.exit(1)
+
+
+# version option
+def print_version(option, opt_str, value, parser):
+    LOGGER.info("TCTSHELL Version : %s " % Constants.TCT_VERSION)
+    sys.exit(0)
+
+
+def varnarg(option, opt_str, value, parser):
+    """ parser srg"""
+    value = []
+    import re
+    for arg in parser.rargs:
+        if re.search('^--.+', arg) or re.search('^-[\D]', arg):
+            break
+        value.append(arg)
+
+    del parser.rargs[:len(value)]
+    setattr(parser.values, option.dest, value)
+
+
+class IntentionType:
+    TestScenario = 0
+    TestPlan = 1
+    TestSuite = 2
+    TestCase = 3
+    AutoPlan = 4
+    DistPlan = 5
+    TestProfile = 6
+
+
+class ShellWrapper:
+    def __init__(self, devmgr):
+        self.devmgr = devmgr
+        self.running_mode = None
+        self.options = None
+        self.USAGE = "\n\
+    run examples: \n\
+        tct-shell --scenario <smoewhere>/scenario.xml\n\
+        tct-shell --testplan  <somewhere>/testplan.xml\n\
+        tct-shell --test package1 package2 ... packageN\n\
+        tct-shell --test package1 --id caps_screenSizeNormal\n\
+        tct-shell --rerun-fail '<somewhere>/result_folder/\n\
+    \n\
+    show examples: \n\
+        tct-shell --help\n\
+        tct-shell --plan-list\n\
+        tct-shell --result-list\n\
+        tct-shell --device-lite\n\
+        tct-shell --all-suites\n\
+    \n\
+    Note: \n\
+        1) Proxy settings should be disabled when execute webapi packages\n\
+        2) run command 'tct-shell', it might not be able to locate related module, \n\
+           run command 'export PYTHONPATH=/usr/lib/python2.7/site-packages' to resolve this issue"
+
+    def print_usage(self):
+        print (self.USAGE)
+
+    def parse_options(self, argv):
+        option_list = [
+            make_option("--scenario", "-s", dest="scenario_file", \
+                    action="callback", callback=varnarg, \
+                    help="Specify the scenario.xml as the test plan."),
+            make_option("--testplan", "-p", dest="testplan_file", \
+                    action="callback", callback=varnarg, \
+                    help="Specify the testplan.xml as the test plan."),
+            make_option("--profile", "-f", dest="profile", action="callback", \
+                    callback=varnarg, help="Specify testing profile. [mobile,wearable,tv]"),
+            make_option("--test", "-t", dest="suites", action="callback", \
+                    callback=varnarg, help="Specify testing suites. If more than one suite is provided, list them all and separate them with whitespace"),
+            make_option("--id", dest="testcase_id", action="callback", \
+                    callback=varnarg, help="Specify the ID of a test case to run"),
+            make_option("--rerun-fail", dest="fail_result_xml", \
+                    action="callback", callback=varnarg,
+                        help="Rerun all failed test cases, according to the specified XML."),
+            make_option("--distribute", dest="dist_mode",action="callback", callback=varnarg, \
+                    help="Specify the testplan.xml for distributing a plan to multiple devices"),
+            make_option("--all", "-A", dest="all_tc", action="store_true", \
+                    help="All test cases will be executed."),
+            make_option("--manual", "-M", dest="only_manual", \
+                    action="store_true", help="Only manual test cases will be executed"),
+            make_option("--tizen-version", dest="tizenversion", \
+                    action="callback", callback=varnarg, \
+                    help="Specify the name of tizen-version. The tizen-version is defined in the local repository. and its path is '/opt/tct/'"),
+            make_option("--stub-port", dest="stubport", action="callback", \
+                    callback=varnarg, help="Specify a port number. Network port used by the testkit-stub"),
+            make_option("--deviceid", "-d", dest="deviceid", \
+                    action="callback", callback=varnarg, \
+                    help="Set sdb device serial information."),
+            make_option("--dbutedevid", dest="dbutedevid", action="callback", callback=varnarg, help="Set sdb device serial information for distribute mode"),
+            make_option("--disable", dest="disable_preconfigure", action="store_false", default=True, help="disable the function of pre_configure"),
+            make_option("--output", "-o", dest="resultfile", \
+                    action="callback", callback=varnarg,
+                        help="Specify the output file for result XML. If more than one test xml file provided, results will be merged into this outputfile"),
+            make_option("--timeout", dest="run_timeout", action="callback", \
+                    callback=varnarg, help="Set the end time of test (unit : minute"),
+            make_option("--skip-package", dest="skip_package", action="callback", \
+                    callback=varnarg, help="Specify the package names for exclude from the test"),
+            make_option("--make-ne", dest="make_ne", action="callback", \
+                    callback=varnarg, help="Spectify the package names for make NE of results"),
+            make_option("--skip-count", dest="skip_count", action="callback", \
+                    callback=varnarg, help="Specify the fail/block/na count. The test is terminated when the same skip-count value and fail/block/na count on the result"),
+            make_option("--skip-tc", dest="skip_tc", action="callback", \
+                    callback=varnarg, help="Specify the testcase id for exclude from the test"),
+            make_option("--version", dest="version_info", action="callback", \
+                    callback=print_version, help="Show version information"),
+            make_option("--all-suites", dest="show_suites", \
+                    action="callback", callback=show_available_suites,
+                        help="Show all available test-suites in the local repository \'/opt/tct/\'"),
+            make_option("--plan-list", dest="show_plan_folder", \
+                    action="callback", callback=print_planfolder,
+                    help="List all existed plans in the Plan directory. The plan directory is defined in the configuration file named CONFIG, and its path is :'/opt/tools/shell/CONFIG'"),
+            make_option("--result-list", dest="show_all_result", \
+                    action="callback", callback=print_resultfolder,
+                    help="List all history results in the result directory. and its path is :'/opt/tct/{tizen-version}/shell/result/'"),
+            make_option("--device-list", dest="show_all_device", \
+                    action="callback", callback=invoke_sdb_devices, \
+                    help="List all connected devices. just same with 'sdb devices'"),
+            make_option("--log", "-l", dest="loglevel", action="callback", callback=varnarg,
+                    help="Set Log level. Logs that are less severe than the level will be ignored. Log levels (in descending severity order): [CRITICAL, ERROR, WARNING, NOTSET, INFO, DEBUG]"),
+            make_option("--make-summary", dest="makesummary",\
+                    action="callback", callback=varnarg, help="Specify the result folder. When the test is not abnomally terminated. you can create summary file use to this option"),
+            make_option("--tracking-dump", dest="trackingdump", action="callback", callback=varnarg,
+                    help="Specify the file(dump) names expected (for distribute run mode). After tracking the file(dump) generated by test and exits the tct-shell tool"),
+            make_option("--pre-test", dest="pre_test", action="callback", \
+                    callback=varnarg, help="Before running suite, run a given script before installing testsuite."),
+            make_option("--post-test", dest="post_test", action="callback", \
+                    callback=varnarg, help="After running suite, run a given script before uninstalling testsuite.")
+        ]
+
+        # detect non-params
+        if len(argv) == 1:
+            argv.append("--help")
+
+        PARSERS = OptionParser(option_list=option_list, usage=self.USAGE)
+        (self.options, args) = PARSERS.parse_args()
+
+        #set log level (has to be done first to dislay logs)
+        if self.check_log_level():
+            if self.options.loglevel is None:
+                LOGGER.setLevel(Constants.LOG_LEVELS[Constants.DEFAULT_LOG_LEVEL])
+            else:
+                LOGGER.setLevel(Constants.LOG_LEVELS[self.options.loglevel[0]])
+
+        if self.is_dist_mode():
+            conflicts = ["--distribute"]
+            if self.options.deviceid is not None:
+                conflicts.append("--deviceid")
+            self.conflict_exit(conflicts)
+            Constants.setDistMode(True)
+
+        if self.is_testplan_mode():
+            conflicts = ["--testplan"]
+            if self.options.scenario_file is not None:
+                conflicts.append("--scenario")
+            if self.options.fail_result_xml is not None:
+                conflicts.append("--rerun-fail")
+            if self.options.profile is not None:
+                conflicts.append("--profile")
+            if self.options.suites is not None:
+                conflicts.append("--test")
+            if self.options.testcase_id is not None:
+                conflicts.append("--id")
+            self.conflict_exit(conflicts)
+            self.running_mode = Constants.RUNNING_MODE_PLAN
+
+        elif self.is_scenario_mode():
+            conflicts = ["--scenario"]
+            if self.options.dist_mode is not None:
+                conflicts.append("--distribute")
+            if self.options.fail_result_xml is not None:
+                conflicts.append("--rerun-fail")
+            if self.options.profile is not None:
+                conflicts.append("--profile")
+            if self.options.suites is not None:
+                conflicts.append("--test")
+            if self.options.testcase_id is not None:
+                conflicts.append("--id")
+            if self.options.deviceid is not None:
+                conflicts.append("--deviceid")
+            if self.options.makesummary is not None:
+                conflicts.append("--make-summary")
+            self.conflict_exit(conflicts)
+            self.running_mode = Constants.RUNNING_MODE_SCEN
+            Constants.setScenMode(True)
+
+        elif self.is_fail_rerun_mode():
+            conflicts = ["--rerun-fail"]
+            if self.options.profile is not None:
+                conflicts.append("--profile")
+            if self.options.suites is not None:
+                conflicts.append("--test")
+            if self.options.testcase_id is not None:
+                conflicts.append("--id")
+            if self.options.makesummary is not None:
+                conflicts.append("--make-summary")
+            self.conflict_exit(conflicts)
+            self.running_mode = Constants.RUNNING_MODE_RERUN
+            Constants.setRerunMode(True)
+        elif self.is_profile_mode():
+            conflicts = ["--profile"]
+            if self.options.suites is not None:
+                conflicts.append("--test")
+            if self.options.testcase_id is not None:
+                conflicts.append("--id")
+            self.conflict_exit(conflicts)
+            self.running_mode = Constants.RUNNING_MODE_PROFILE
+        elif self.is_suite_mode():
+            conflicts = ["--test"]
+            if self.options.profile is not None:
+                conflicts.append("--profile")
+            self.running_mode = Constants.RUNNING_MODE_SUITES
+
+        if self.options.all_tc and self.options.only_manual:
+            conflicts = ["--all", "--manual"]
+            self.conflict_exit(conflicts)
+
+        self.check_args_number()
+        self.check_args_exist()
+
+        if not self.options.tizenversion and not self.is_scenario_mode() and not self.is_fail_rerun_mode():
+            LOGGER.error("The default tizen version could not be set.")
+            conflicts = ["--tizen-version"]
+            conflicts.append(None)
+            self.conflict_exit(conflicts)
+
+    def conflict_exit(self, conflicts):
+        if conflicts == None or len(conflicts) <= 1:
+            return
+
+        os.system("tct-shell -h")
+        LOGGER.error("\ntct-shell: Conflicted options: %s" % conflicts)
+        raise
+
+    def check_args_exist(self):
+        opt = ""
+        if self.running_mode == Constants.RUNNING_MODE_PLAN and len(self.options.testplan_file) > 0:
+            if not Constants.checkFileExists(self.options.testplan_file[0]):
+                opt = "--testplan"
+        elif self.running_mode == Constants.RUNNING_MODE_SCEN and len(self.options.scenario_file) > 0:
+            if not Constants.checkFileExists(self.options.scenario_file[0]):
+                opt = "--scenario"
+        elif self.running_mode == Constants.RUNNING_MODE_RERUN and len(self.options.fail_result_xml) > 0:
+            if not Constants.checkFileExists(self.options.fail_result_xml[0]):
+                opt = "--rerun-fail"
+
+        if self.options.tizenversion and len(self.options.tizenversion) > 0:
+            if not self.check_tizen_version():
+                opt = "--tizen-version"
+
+        if self.options.stubport and len(self.options.stubport) > 0:
+            if not self.check_stub_port():
+                opt = "--stub-port"
+
+        if self.options.run_timeout and len(self.options.run_timeout) > 0:
+            if not self.check_run_timeout():
+                opt = "--timeout"
+
+        if self.options.skip_package and len(self.options.skip_package) > 0:
+            if not self.check_skip_package():
+                opt = "--skip-package"
+
+        if self.options.skip_count and len(self.options.skip_count) > 0:
+            if not self.check_skip_count():
+                opt = "--skip-count"
+
+        if self.options.skip_tc and len(self.options.skip_tc) > 0:
+            if not self.check_skip_tc():
+                opt = "--skip-tc"
+
+        if self.options.makesummary and len(self.options.makesummary) > 0:
+            if not self.check_makesummary():
+                opt = "--make-summary"
+
+        if self.options.trackingdump and len(self.options.trackingdump) > 0:
+            if not self.check_tracking_dump():
+                opt = "--tracking-dump"
+        if self.options.make_ne and len(self.options.make_ne) > 0:
+            if not self.check_make_ne():
+                opt = "--make-ne"
+        if self.options.pre_test and len(self.options.pre_test) > 0:
+            if not self.check_pre_test():
+                opt = "--pre-test"
+        if self.options.post_test and len(self.options.post_test) > 0:
+            if not self.check_post_test():
+                opt = "--post-test"
+
+        if len(opt) > 0:
+            os.system("tct-shell -h")
+            LOGGER.error("\ntct-shell: error: \"%s\" option requires a proper argument" % opt)
+            raise
+
+    def check_args_number(self):
+        opt = ""
+        if self.running_mode == Constants.RUNNING_MODE_PLAN and len(self.options.testplan_file) < 1:
+            opt = "--testplan"
+        elif self.running_mode == Constants.RUNNING_MODE_SCEN and len(self.options.scenario_file) < 1:
+            opt = "--scenario"
+        elif self.running_mode == Constants.RUNNING_MODE_RERUN and len(self.options.fail_result_xml) < 1:
+            opt = "--rerun-fail"
+        elif self.running_mode == Constants.RUNNING_MODE_PROFILE and len(self.options.profile) < 1:
+            opt = "--profile"
+        elif self.running_mode == Constants.RUNNING_MODE_SUITES and len(self.options.suites) < 1:
+            opt = "--test"
+        elif self.options.deviceid is not None and len(self.options.deviceid) < 1:
+            opt = "--deviceid"
+        elif self.options.testcase_id is not None and len(self.options.testcase_id) < 1:
+            opt = "--id"
+        elif self.options.tizenversion is not None and len(self.options.tizenversion) < 1:
+            opt = "--tizen-version"
+        elif self.options.stubport is not None and len(self.options.stubport) < 1:
+            opt = "--stub-port"
+        elif self.options.run_timeout is not None and len(self.options.run_timeout) < 1:
+            opt = "--timeout"
+        elif self.options.skip_package is not None and len(self.options.skip_package) < 1:
+            opt = "--skip-package"
+        elif self.options.skip_count is not None and len(self.options.skip_count) < 1:
+            opt = "--skip-count"
+        elif self.options.skip_tc is not None and len(self.options.skip_tc) < 1:
+            opt = "--skip-tc"
+        elif self.options.makesummary is not None and len(self.options.makesummary) < 1:
+            opt = "--make-summary"
+        elif self.options.trackingdump is not None and len(self.options.trackingdump) < 1:
+            opt = "--tracking-dump"
+        elif self.options.make_ne is not None and len(self.options.make_ne) < 1:
+            opt = "--make-ne"
+
+        if len(opt) > 0:
+            os.system("tct-shell -h")
+            LOGGER.error("\ntct-shell: error: \"%s\" option requires an argument" % opt)
+            raise
+
+    def check_log_level(self):
+        if self.options.loglevel is not None:
+            if len(self.options.loglevel) < 1:
+                os.system("tct-shell -h")
+                LOGGER.error("\ntct-shell: error: \"--log\" option requires an argument")
+                raise
+            else:
+                if not self.options.loglevel[0].upper() in ['NOTSET', 'CRITICAL', 'ERROR', 'WARNING', 'INFO', 'DEBUG']:
+                    os.system("tct-shell -h")
+                    LOGGER.error("\ntct-shell: error: \"--log\" option requires a proper argument.")
+                    raise
+
+        return True
+
+    def check_tizen_version(self):
+        tizenversion = self.options.tizenversion[0]
+        if not Constants.checkFileExists(Constants.TCT_HOME + tizenversion):
+            LOGGER.error("A required \'/opt/tct/" + tizenversion + "\' could not be found.")
+            return False
+        else:
+            Constants.set_default_tizenV(tizenversion)
+        return True
+
+    def check_stub_port(self):
+        port = self.options.stubport[0]
+        portLen = len(port)
+        return port.isdigit() and (portLen > 3 and portLen < 6)
+
+    def check_run_timeout(self):
+        timeout = self.options.run_timeout[0]
+        timeoutLen = len(timeout)
+        return timeout.isdigit() and timeoutLen > 0
+
+    def check_skip_package(self):
+        packages = self.options.skip_package[0]
+        packLen = len(packages)
+        return packLen > 0
+
+    def check_skip_count(self):
+        count = self.options.skip_count[0]
+        countLen = len(count)
+        return count.isdigit() and countLen > 0
+
+    def check_skip_tc(self):
+        tc = self.options.skip_tc[0]
+        tcLen = len(tc)
+        return tcLen > 0
+
+    def check_tracking_dump(self):
+        dump_names = self.options.trackingdump[0]
+        dump_names_len = len(dump_names)
+        return dump_names_len > 0
+
+    def check_makesummary(self):
+        return os.path.exists(self.options.makesummary[0])
+
+    def check_make_ne(self):
+        packages = self.options.make_ne[0]
+        packLen = len(packages)
+        return packLen > 0
+
+    def check_pre_test(self):
+        script = self.options.pre_test[0]
+        return os.path.isfile(script)
+
+    def check_post_test(self):
+        script = self.options.post_test[0]
+        return os.path.isfile(script)
+
+    def getIntentionType(self):
+        if self.options.scenario_file is not None:
+            return IntentionType.TestScenario
+        elif self.options.testplan_file is not None:
+            return IntentionType.TestPlan
+        elif self.options.testcase_id is not None:
+            return IntentionType.TestCase
+        elif self.options.suites is not None:
+            return IntentionType.TestSuite
+        elif self.options.profile is not None:
+            return IntentionType.TestProfile
+        return -1
+
+    def get_scenfile(self):
+        return self.options.scenario_file[0]
+
+    def get_planfile(self):
+        if self.is_testplan_mode():
+            return self.options.testplan_file[0]
+
+    def get_profile(self):
+        return self.options.profile[0]
+
+    def get_result_for_rerun(self):
+        return self.options.fail_result_xml[0]
+
+    def get_plan_name(self):
+        plan_name = ""
+        if self.is_testplan_mode():
+            plan_name = os.path.basename(self.get_planfile())[:-4]
+        return plan_name
+
+    def get_scen_name(self):
+        if self.is_scenario_mode():
+            return os.path.basename(self.get_scenfile())[:-4]
+
+    def get_stubPort(self):
+        if self.options.stubport is None:
+            return '8000'
+        else:
+            return self.options.stubport[0]
+
+    def get_run_timeout(self):
+        if self.options.run_timeout is None:
+            return 1440 #24 hour
+        else:
+            return self.options.run_timeout[0]
+
+    def get_makesummarydir(self):
+        return self.options.makesummary[0]
+
+    def get_resultFolderPath(self):
+        if (self.options.resultfile is not None) and (self.options.resultfile[0] is not None):
+            return self.options.resultfile[0]
+
+    def get_deviceId(self):
+        self.devmgr.loadDeviceList()
+        devices = self.devmgr.getSdbDeviceList()
+        if self.options.deviceid:
+            for dev in devices:
+                if dev.devId == self.options.deviceid[0]:
+                    return self.options.deviceid[0]
+            LOGGER.error("Error! [%s] device is not connected" % self.options.deviceid[0])
+            raise
+        elif not self.is_scenario_mode() and not self.is_make_summary_mode():
+            if len(devices) < 1:
+                LOGGER.error("No device is connected")
+                raise Exception('Device connection is required')
+            if len(devices) == 1:
+                LOGGER.info("Executing in device : %s" % devices[0].getDeviceId())
+                return devices[0].getDeviceId()
+            elif len(devices) > 1:
+                LOGGER.info("Connected Devices: ...\n")
+                for dev in devices:
+                    dev._printDevInfo()
+                devId = input("Choose device id : ")
+                while not devId in [dev.getDeviceId() for dev in devices]:
+                    devId = input("Invalid device id!\n\nChoose device id :  \n")
+                LOGGER.info("Executing in device : %s" % devId)
+                return devId
+
+    def get_profile_name(self):
+        plan_file = None
+        profile_name = None
+        if self.is_testplan_mode():
+            plan_file = self.get_planfile()
+        if plan_file:
+            tree = etree.parse(plan_file)
+            root = tree.getroot()
+            if root.get('profile') is not None:
+                profile_name = root.get('profile')
+        return profile_name
+
+    def get_execute_type(self):
+        exe_t = None
+        if self.options.all_tc:
+            exe_t = ExecuteType.createExecuteType("All")
+        elif self.options.only_manual:
+            exe_t = ExecuteType.createExecuteType("Manual")
+        else:
+            exe_t = ExecuteType.createExecuteType("Auto")
+        return exe_t
+
+    def get_tizenV(self):
+        if (self.options.tizenversion is not None) and (self.options.tizenversion[0] is not None):
+            return self.options.tizenversion[0]
+
+    def _chooseProfile(self, path_suites):
+        suite_profiles = {}
+        for suite_path in path_suites:
+            suite_zipname = os.path.basename(suite_path)
+            sprofile = os.path.basename(os.path.dirname(suite_path))
+            if not suite_zipname in suite_profiles:
+                suite_profiles[suite_zipname] = []
+            suite_profiles[suite_zipname].append(sprofile)
+        for suiteName, suiteProfile in suite_profiles.items():
+            suite_name = "-".join(suiteName[:-4].split("-")[:-1])
+            if len(suiteProfile) == 1:
+                suite_profiles[suiteName] = suiteProfile[0]
+                continue
+            LOGGER.info("Multiple profiles for [%s] :" % suite_name)
+            for profile_i in suiteProfile:
+                LOGGER.info(" - %s" % profile_i)
+            suite_profile = None
+            while not suite_profile in suiteProfile:
+                suite_profile = input("\nChoose profile: ")
+            suite_profiles[suiteName] = suite_profile
+        return suite_profiles
+
+    def get_suites(self):
+        suites = []
+        filtered_suites = []
+        suite_repo = Constants.SUITES_REPOSITORY % self.get_tizenV()
+        if self.options.suites:
+            for suite_name in self.options.suites:
+                for profiles in os.listdir(suite_repo):
+                    if profiles == "pkg_infos":
+                        continue
+                    for package in glob.glob(suite_repo + profiles + "/*.zip"):
+                        if package.find(suite_name) > -1:
+                            suites.append(package)
+                if (len(suites) < 1):
+                    LOGGER.error("Error! [%s] suite does not exists" % suite_name)
+
+        suite_profiles = self._chooseProfile(suites)
+        check_profile = None
+        multiProfiles = False
+        for suiteName, suiteProfile in suite_profiles.items():
+            if suiteProfile != 'common':
+                if check_profile is not None and check_profile != suiteProfile:
+                    multiProfiles = True
+                if check_profile is None:
+                    check_profile = suiteProfile
+            filtered_suites.append(os.path.join(suite_repo, suiteProfile, suiteName))
+        if multiProfiles:
+            LOGGER.warning("WARNING: Multiple suites run with different profiles")
+        return filtered_suites
+
+    def get_profile_suites(self):
+        suites = []
+        suite_repo = Constants.SUITES_REPOSITORY % self.get_tizenV()
+        sel_profile = self.get_profile()
+        for profiles in os.listdir(suite_repo):
+            if profiles == "pkg_infos":
+                continue
+            if profiles in sel_profile or profiles == "common":
+                for package in sorted(glob.glob(suite_repo + profiles + "/*.zip")):
+                    suites.append(os.path.join(suite_repo, profiles, package))
+
+        if len(suites) == 0:
+            LOGGER.error('Not found test suites')
+            return None
+
+        return suites
+
+    def get_testcase_id(self):
+        tc_id = ""
+        if self.options.testcase_id is not None:
+            #tc_id = " --id %s" % self.options.testcase_id[0] + " --debug"
+            tc_id = self.options.testcase_id[0]
+        return tc_id
+
+    def get_inst_suites(self):
+        suites = []
+        if self.options.instsuites:
+            for suite_str in self.options.instsuites:
+                suite_str_array = suite_str.split(" ")
+                for suite_name in suite_str_array:
+                    suites.append(suite_name)
+        return suites
+
+    def get_uninst_suites(self):
+        suites = []
+        if self.options.uninstsuites:
+            for suite_str in self.options.uninstsuites:
+                suite_str_array = suite_str.split(" ")
+                for suite_name in suite_str_array:
+                    suites.append(suite_name)
+        return suites
+
+    def get_running_mode(self):
+        return self.running_mode
+
+    def get_skip_package(self):
+        if self.options.skip_package is not None:
+            return self.options.skip_package
+
+    def get_skip_count(self):
+        if (self.options.skip_count is not None) and (self.options.skip_count[0] is not None):
+            return self.options.skip_count[0]
+
+    def get_skip_tc(self):
+        if self.options.skip_tc is not None:
+            return self.options.skip_tc
+
+    def get_tracking_dump(self):
+        if (self.options.trackingdump is not None) and (self.options.trackingdump[0] is not None):
+            return self.options.trackingdump[0]
+
+    def get_make_ne(self):
+        if self.options.make_ne is not None:
+            return self.options.make_ne
+
+    def get_pre_test(self):
+        if self.options.pre_test is not None:
+            return self.options.pre_test[0]
+
+    def get_post_test(self):
+        if self.options.post_test is not None:
+            return self.options.post_test[0]
+
+    def is_testplan_mode(self):
+        return self.options.testplan_file is not None
+
+    def is_scenario_mode(self):
+        return self.options.scenario_file is not None
+
+    def is_profile_mode(self):
+        return self.options.profile
+
+    def is_single_mode(self):
+        return self.options.testcase_id is not None
+
+    def is_enable_preconf_func(self):
+        return self.options.disable_preconfigure
+
+    def is_update_portconf_func(self):
+        return self.options.stubport is not None
+
+    def is_suite_mode(self):
+        return self.options.suites is not None
+
+    def is_fail_rerun_mode(self):
+        return self.options.fail_result_xml is not None
+
+    def is_make_summary_mode(self):
+        return self.options.makesummary is not None
+
+    def is_dist_mode(self):
+        return self.options.dist_mode is not None
+
+    def get_output_param(self):
+        return "-o %s" % self.get_output_file_name()
+
+    def fetch_logs(self, executors):
+        logs = {}
+        for executor in executors:
+            if executor.name == 'ResultManager':
+                continue
+            plan = executor.plan
+            scenFolder = plan.getScenResultFolderPath()
+            planFolder = plan.getResultFolderPath()
+            if not scenFolder in logs:
+                logs[scenFolder] = {}
+            if not planFolder in logs[scenFolder]:
+                logs[scenFolder][planFolder] = []
+            logs[scenFolder][planFolder].append(\
+                    os.path.join(Constants.TCT_LOG_FOLDER, 'MainProcess.log'))
+            logs[scenFolder][planFolder].append(\
+                    os.path.join(Constants.TCT_LOG_FOLDER, 'critical.log'))
+            logs[scenFolder][planFolder].append(\
+                    os.path.join(Constants.TCT_LOG_FOLDER, 'debug.log'))
+            logs[scenFolder][planFolder].append(\
+                    os.path.join(Constants.TCT_LOG_FOLDER, 'error.log'))
+            logs[scenFolder][planFolder].append(\
+                    os.path.join(Constants.TCT_LOG_FOLDER, 'info.log'))
+            logs[scenFolder][planFolder].append(\
+                    os.path.join(Constants.TCT_LOG_FOLDER, 'warning.log'))
+
+            if hasattr(executor, 'all_dev_threads'):
+                for autoPlanExecutor in executor.all_dev_threads:
+                    logs[scenFolder][planFolder].append(\
+                            os.path.join(Constants.TCT_LOG_FOLDER, '%s.log' % \
+                            autoPlanExecutor.name))
+
+                    logs[scenFolder][planFolder].append(\
+                            os.path.join(Constants.TCT_LOG_FOLDER, 'E_%s.log' % \
+                            autoPlanExecutor.name))
+
+        for scenFolder, plan_logs in logs.items():
+            for planFolder, thread_logs in plan_logs.items():
+                for src_logs in thread_logs:
+                    Constants.move_log_file(src_logs, planFolder)
+                    if scenFolder is not None and os.path.isdir(scenFolder):
+                        Constants.move_log_file(src_logs, scenFolder)
+                #Constants.move_log_file(os.path.join(Constants.TCT_LOG_FOLDER, 'ResultManager.log'), planFolder)
+                #Constants.move_log_file(os.path.join(Constants.TCT_LOG_FOLDER, 'MainThread.log'), planFolder)
+            if scenFolder is not None and os.path.isdir(scenFolder):
+                pass
+                #Constants.move_log_file(os.path.join(Constants.TCT_LOG_FOLDER, 'ResultManager.log'), scenFolder)
+                #Constants.move_log_file(os.path.join(Constants.TCT_LOG_FOLDER, 'MainThread.log'), scenFolder)
+
+
+    def getDbuteDevIds(self):
+        return self.options.dbutedevid
+
+    def get_distribute_count(self):
+        if self.options.dist_mode and len(self.options.dist_mode) > 0:
+            return self.options.dist_mode[0]
diff --git a/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/shell/tctshell/testenvironment.py b/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/shell/tctshell/testenvironment.py
new file mode 100755 (executable)
index 0000000..caf521b
--- /dev/null
@@ -0,0 +1,192 @@
+#!/usr/bin/python
+import os
+import configparser
+from multiprocessing import Process
+
+from .devicemanager import DeviceManager
+from .sdbmanager import SdbManager
+from .logmanager import LOGGER
+from .constants import Constants
+
+
+class TestEnvironment(Process):
+
+    tizenVer = None
+    deviceId = None
+
+    def __init__(self, tizenVer, deviceId, isPreconSet, queue, devmgr):
+        Process.__init__(self)
+        self.tizenVer = tizenVer
+        self.deviceId = deviceId
+        self.name = "E_{}".format(deviceId)
+        self.isPreconSet = isPreconSet
+        self.queue = queue
+        self.devmgr = devmgr
+
+    def run(self):
+        if not self.isPreconSet:
+            SdbManager.sdbRootOn(self.deviceId)
+        self._isDeviceReady()
+        if self.isPreconSet:
+            self._reset_health_res_indevice()
+
+        if not self._isHealthCheckPassed():
+            self.queue.put('Fail_Healthcheck')
+            return
+
+        if not self._isPreconfigPassed():
+            self.queue.put('Fail_Preconfig')
+            return
+
+        if not self._extractDeviceCapability():
+            self.queue.put('Fail_ExtractDeviceCapability')
+            return
+
+        #SdbManager.resetDumpFiles(self.deviceId)
+
+    def _isDeviceReady(self):
+        if self.deviceId:
+            return self.devmgr.isDeviceAvailable(self.deviceId)
+        else:
+            if self.devmgr.getDeviceSize() == 1:
+                return True
+            else:
+                LOGGER.error("No device is connected, \
+                        please check or try to reconnect it again")
+                return False
+
+    def _reset_health_res_indevice(self):
+        tctDir = Constants.getDEVICE_SUITE_TARGET(self.tizenVer)
+
+        delsuitedir_cmd = "rm -rf " + tctDir + "opt/*"
+        deltmpdir_cmd = "rm -rf " + tctDir + "tmp/*"
+
+        SdbManager.sdbShell(self.deviceId, delsuitedir_cmd)
+        SdbManager.sdbShell(self.deviceId, deltmpdir_cmd)
+
+    def _read_health_check_ini(self):
+        parser = configparser.ConfigParser()
+        if not os.path.exists(\
+                Constants.HEALTH_CHECK_FILE_PATH % self.tizenVer):
+            LOGGER.warning("Can`t find the healthcheck.ini file...")
+            return
+
+        parser.read(Constants.HEALTH_CHECK_FILE_PATH % self.tizenVer)
+        for section in parser.sections():
+            if not section:
+                continue
+            values = []
+            for n, v in parser.items(section):
+                values.append(v.split(","))
+            return values
+
+    def _isHealthCheckPassed(self):
+        healtlist = self._read_health_check_ini()
+        if not healtlist:
+            return False
+        for l in healtlist:
+            if self.tizenVer.find("native") > -1 and l[1].find("tinyweb") > -1:
+                continue
+
+            getcap = ""
+            if self.tizenVer.find("native") > -1 and l[1].find("getCap") > -1:
+                getcap = "ngetCap"
+            else:
+                getcap = l[1].strip()
+
+            command = "python " + \
+                    (Constants.DEVICE_HEALTH_CMD % self.tizenVer) \
+                    + " " + "--deviceid " + self.deviceId \
+                    + " --check" + " --procid=" + getcap
+            try:
+                outLog, errLog = SdbManager.sdbCommand(command, 180)
+            except Exception as ex:
+                LOGGER.error(str(ex))
+                return False
+            '''
+            if exit_code is None:
+                LOGGER.error("The device configuration \
+                        is not right [Health Check : %s]." % l)
+                return False
+            '''
+            LOGGER.info(str(outLog))
+            if str(outLog).find('#ERROR#') > -1 or \
+                    str(outLog).find('#WARNING#') > -1:
+                LOGGER.error(l[0].strip() + ": fail")
+                return False
+            else:
+                LOGGER.info(l[0].strip() + ": pass")
+        LOGGER.info("Return From isHealthCheckPassed, return value : True")
+        return True
+
+    def _extractDeviceCapability(self):
+        capa_file = Constants.LOCAL_CAPABILITY_PATH % self.deviceId
+        LOGGER.debug('capability path : %s' % capa_file)
+        if os.path.exists(capa_file):
+            os.remove(capa_file)
+
+        if not SdbManager.getCapabilityBack(self.deviceId, self.tizenVer):
+            LOGGER.error('Fail to extract the capability.xml from device : ' \
+                    + Constants.getDEVICE_CAPABILITY_PATH(self.tizenVer))
+            return False
+
+        return True
+
+    def _isPreconfigPassed(self):
+        SdbManager.sdbPull(self.deviceId, \
+                Constants.getPRE_CONF_DEVICE_INI(self.tizenVer), \
+                Constants.PRE_CONF_HOST_INI % self.deviceId)
+        if Constants.checkFileExists(\
+                Constants.PRE_CONF_HOST_INI % self.deviceId) is False:
+            LOGGER.error("The %s file does not exist. [ Preconfig Check]" \
+                    % Constants.PRE_CONF_HOST_INI % self.deviceId)
+            return False
+
+        SdbManager.sdbPull(self.deviceId, \
+                Constants.getPRE_CONF_DEVICE_JSON(self.tizenVer), \
+                Constants.PRE_CONF_HOST_JSON % self.deviceId)
+        if Constants.checkFileExists(\
+                Constants.PRE_CONF_HOST_JSON % self.deviceId) is False:
+            LOGGER.error("The %s file does not exist. [ Preconfig Check]" \
+                    % Constants.PRE_CONF_HOST_JSON % self.deviceId)
+            return False
+
+        SdbManager.sdbPull(self.deviceId, \
+                Constants.getPRE_CONF_DEVICE_XML(self.tizenVer), \
+                Constants.PRE_CONF_HOST_XML % self.deviceId)
+        if Constants.checkFileExists(\
+                Constants.PRE_CONF_HOST_XML % self.deviceId) is False:
+            LOGGER.error("The %s file does not exist. [ Preconfig Check]" \
+                    % Constants.PRE_CONF_HOST_XML % self.deviceId)
+            return False
+
+        SdbManager.sdbPull(self.deviceId, \
+                Constants.getPORT_CONF_DEVICE_JSON(self.tizenVer), \
+                Constants.PORT_CONF_HOST_JSON % self.deviceId)
+        if Constants.checkFileExists(\
+                Constants.PORT_CONF_HOST_JSON % self.deviceId) is False:
+            LOGGER.error("The %s file does not exist. [ Preconfig Check]" \
+                    % Constants.PORT_CONF_HOST_JSON % self.deviceId)
+            return False
+
+        SdbManager.sdbPull(self.deviceId, \
+                Constants.getDEVICE_BUILD_INFO_PATH(self.tizenVer), \
+        Constants.LOCAL_BUILD_INFO_PATH % self.deviceId)
+        if Constants.checkFileExists(Constants.LOCAL_BUILD_INFO_PATH % \
+        self.deviceId) is False:
+            LOGGER.error("The %s file does not exist. [ Preconfig Check]" \
+                    % Constants.LOCAL_BUILD_INFO_PATH % self.deviceId)
+            return False
+
+        if self.tizenVer and self.tizenVer.find("native") > -1:
+            SdbManager.sdbPull(self.deviceId, \
+                    Constants.getNAT_CONF_DEVICE_TXT(self.tizenVer), \
+            Constants.NAT_CONF_HOST_TXT % self.deviceId)
+            if Constants.checkFileExists(Constants.NAT_CONF_HOST_TXT \
+                    % self.deviceId) is False:
+                LOGGER.error("The %s file does not exist. [ Preconfig Check]" \
+                        % Constants.LOCAL_BUILD_INFO_PATH % self.deviceId)
+                return False
+
+        LOGGER.info("Return from isPreconfigPassed, return value : True")
+        return True
diff --git a/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/shell/tctshell/testresource/__init__.py b/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/shell/tctshell/testresource/__init__.py
new file mode 100755 (executable)
index 0000000..e69de29
diff --git a/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/shell/tctshell/testresource/tempFiles/tct-capability-tests-2.4.zip b/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/shell/tctshell/testresource/tempFiles/tct-capability-tests-2.4.zip
new file mode 100755 (executable)
index 0000000..db74342
Binary files /dev/null and b/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/shell/tctshell/testresource/tempFiles/tct-capability-tests-2.4.zip differ
diff --git a/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/shell/tctshell/testresource/tempFiles/tct-capability-tests-2.4.zip-test b/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/shell/tctshell/testresource/tempFiles/tct-capability-tests-2.4.zip-test
new file mode 100755 (executable)
index 0000000..db74342
Binary files /dev/null and b/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/shell/tctshell/testresource/tempFiles/tct-capability-tests-2.4.zip-test differ
diff --git a/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/shell/tctshell/testresource/tempFiles/tct-capability-tests-3.0.zip b/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/shell/tctshell/testresource/tempFiles/tct-capability-tests-3.0.zip
new file mode 100755 (executable)
index 0000000..5724145
Binary files /dev/null and b/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/shell/tctshell/testresource/tempFiles/tct-capability-tests-3.0.zip differ
diff --git a/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/shell/tctshell/testresource/test_compare_distribute.py b/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/shell/tctshell/testresource/test_compare_distribute.py
new file mode 100755 (executable)
index 0000000..fa32dd8
--- /dev/null
@@ -0,0 +1,34 @@
+#!/usr/bin/python
+import os
+import timeit
+from time import sleep
+tctshell_path = os.path.dirname(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
+os.chdir(tctshell_path)
+
+plan_file = '/opt/tools/shell/plan/S_mobile_plan.xml'
+plan_file2 = '/opt/tools/shell/plan/2.4_mobileF.xml'
+
+start_plan = timeit.default_timer()
+os.system("./tct-shell -p %s --tizen-version tizen_web_2.4 -l DEBUG --disable" %plan_file2)
+stop_plan = timeit.default_timer()
+
+start_distribute = timeit.default_timer()
+os.system("./tct-shell --distribute %s --tizen-version tizen_web_2.4 -l DEBUG --disable" %plan_file2)
+stop_distribute = timeit.default_timer()
+
+start_autoplan = timeit.default_timer()
+#os.system('./tct-shell --autoplan %s --tizen-version tizen_web_2.4 -l DEBUG --disable' %plan_file2)
+stop_autoplan = timeit.default_timer()
+
+
+plan_time = stop_plan - start_plan
+autoplan_time = stop_autoplan - start_autoplan
+distribute_time = stop_distribute - start_distribute
+
+print "-"*50
+
+print "\nTest Plan Mode: %d\nAuto Plan Mode: %d\nDistribute Plan Mode: %d\n" %(plan_time, autoplan_time, distribute_time)
+
+print "-"*50
+
+
diff --git a/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/shell/tctshell/testresource/test_constants.py b/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/shell/tctshell/testresource/test_constants.py
new file mode 100755 (executable)
index 0000000..907c6e9
--- /dev/null
@@ -0,0 +1,43 @@
+#!/usr/bin/python
+
+import os, sys
+
+sys.path.append(os.path.abspath(os.path.join(os.path.dirname(__file__), '..')))
+
+from logmanager import LOGGER
+from devicemanager import DeviceManager
+
+class TestConstants:
+
+    DEVICE_IDS = ['0000d81400006200', '0000d81b00006200', '00004e310000324d'] 
+    CONN_DEVICE_ID = None
+    TEST_TEMP_FOLDER = "/tempFiles/"
+    TEST_SUITE_FILE = "tct-capability-tests-2.4.zip"
+
+    @staticmethod
+    def checkConnectedDevice():
+        devIns = DeviceManager._getInstance()
+        devIns._loadDeviceList()
+        
+        for devid in TestConstants.DEVICE_IDS:
+            if devIns._isDeviceAvailable(devid) == True:
+                TestConstants.CONN_DEVICE_ID = devid
+                break
+        if TestConstants.CONN_DEVICE_ID is None:
+            sys.exit("not connect device")
+        else:
+            LOGGER.info("connected " + TestConstants.CONN_DEVICE_ID)
+
+    @staticmethod    
+    def checkTestResourceFile():
+        suiteFilePath = TestConstants.getAbsPath(TestConstants.TEST_TEMP_FOLDER \
+                        + TestConstants.TEST_SUITE_FILE)
+        if os.path.exists(suiteFilePath):
+            LOGGER.info("checked %s file" % suiteFilePath)
+        else:
+            LOGGER.error("The '%s' file exists error" % suiteFilePath)
+
+    @staticmethod
+    def getAbsPath(fileName):
+        return os.path.dirname(os.path.abspath( __file__ )) + fileName
diff --git a/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/shell/tctshell/testresource/test_devicemanager.py b/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/shell/tctshell/testresource/test_devicemanager.py
new file mode 100755 (executable)
index 0000000..8dc695d
--- /dev/null
@@ -0,0 +1,14 @@
+#!/usr/bin/python
+
+import os, sys
+
+sys.path.append(os.path.abspath(os.path.join(os.path.dirname(__file__), '..')))
+
+from devicemanager import *
+
+class TestDeviceManager:
+
+    def __init__(self):
+        
+
+
diff --git a/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/shell/tctshell/testresource/test_logmanager.py b/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/shell/tctshell/testresource/test_logmanager.py
new file mode 100755 (executable)
index 0000000..f367805
--- /dev/null
@@ -0,0 +1,29 @@
+import os, sys
+
+sys.path.append(os.path.abspath(os.path.join(os.path.dirname(__file__), '..')))
+
+import threading
+from logmanager import LOGGER
+
+class TestLogManager:
+    def __init__(self):
+       LOGGER.setLevel('DEBUG')
+       self.thread1 = threading.Thread(target=self.thread_test, name="Sample_Thread_1")
+       self.thread2 = threading.Thread(target=self.thread_test, name="Sample_Thread_1")
+       self.thread3 = threading.Thread(target=self.thread_test, name="Sample_Thread_2")
+
+    def thread_test(self):
+       LOGGER.debug("thread starting")
+       for i in range(10):
+           LOGGER.debug("Counting from 0 to 9: %d" %i)
+
+    def start_test(self):
+       LOGGER.debug("Starting Main Test")
+       self.thread1.start()
+       self.thread1.join()
+       self.thread2.start()
+       self.thread3.start()
+
+if __name__ == "__main__":
+    testLog = TestLogManager()
+    testLog.start_test()
diff --git a/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/shell/tctshell/testresource/test_netstatlogger.py b/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/shell/tctshell/testresource/test_netstatlogger.py
new file mode 100755 (executable)
index 0000000..eb5d40e
--- /dev/null
@@ -0,0 +1,24 @@
+#!/usr/bin/python
+
+import os, sys
+import time
+
+sys.path.append(os.path.abspath(os.path.join(os.path.dirname(__file__), '..')))
+
+from netstatmonitor import *
+class TestNetstatLogger:
+    def __init__(self):
+        print ''
+
+
+if __name__ == "__main__":
+    print "====================== START TestNetstatLogger ========================"
+    netins = NetstatMonitor('10.113.74.133:26101')
+    netins.start()
+    time.sleep(2)
+    netins.waitThread()
+    time.sleep(2)
+    netins.restartThread()
+    print "====================== FINISH TestNetstatLogger ========================"
diff --git a/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/shell/tctshell/testresource/test_progress.py b/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/shell/tctshell/testresource/test_progress.py
new file mode 100755 (executable)
index 0000000..cb34335
--- /dev/null
@@ -0,0 +1,10 @@
+#!/usr/bin/python
+import sys
+import os
+from Tkinter import *
+sys.path.append(os.path.abspath(os.path.join(os.path.dirname(__file__), '..')))
+
+from gui.progress import Demo
+
+prog = Demo(Tk())
+prog.mainloop()
diff --git a/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/shell/tctshell/testresource/test_recovery.py b/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/shell/tctshell/testresource/test_recovery.py
new file mode 100755 (executable)
index 0000000..b7c0719
--- /dev/null
@@ -0,0 +1,28 @@
+#!/usr/bin/python
+
+import os, sys
+
+sys.path.append(os.path.abspath(os.path.join(os.path.dirname(__file__), '..')))
+
+from usbmonitor import UsbMonitor
+from devicemanager import DeviceManager
+
+class Testusbmonitor:
+
+    def __init__(self):
+       self.usbins = None
+       self.devins = DeviceManager.getInstance()
+        print ''
+
+    def testThread(self):
+        self.usbins = UsbMonitor()
+        self.usbins.start()
+
+    def killThread(self):
+       self.usbins.finishThread()
+
+if __name__ == "__main__":
+    ins = Testusbmonitor()
+    ins.testThread()
+    raw_input()
+    ins.killThread()
diff --git a/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/shell/tctshell/testresource/test_rerun.py b/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/shell/tctshell/testresource/test_rerun.py
new file mode 100755 (executable)
index 0000000..87522af
--- /dev/null
@@ -0,0 +1,32 @@
+#!/usr/bin/python
+
+import os
+import glob
+
+plan_name = 'plan_rerun_test'
+scen_name = 'scen_rerun_test'
+tizenVer = 'tizen_web_2.4'
+
+tctshell_path = os.path.dirname(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
+os.chdir(tctshell_path)
+print tctshell_path
+rerun_only = None
+while not rerun_only in ['y', 'n']:
+    rerun_only = raw_input("rerun_only? ")
+
+if rerun_only == 'n':
+    os.system('./tct-plan-generator -m tct-capability-tests --tizen-version %s -o /opt/tools/shell/plan/%s.xml' %(tizenVer, plan_name))
+
+    os.system('./tct-scen-generator -p %s,0000d81400006200,%s %s,0000d81b00006200,%s -o /opt/tools/shell/scen/%s.xml' %(plan_name, tizenVer, plan_name, tizenVer, scen_name))
+
+    os.system('./tct-shell -s /opt/tools/shell/scen/%s.xml -l DEBUG' %scen_name)
+
+    raw_input("Start rerun?")
+
+os.chdir('/opt/tct/%s/shell/result/Tizen-2.4.0_Mobile-TM1_20151015.2026' %tizenVer)
+
+for result in glob.glob("*%s*" %scen_name):
+    _result = os.path.abspath(result)
+    os.chdir(tctshell_path)
+    os.system('./tct-shell --rerun-fail %s -l DEBUG' %_result)
+    break
diff --git a/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/shell/tctshell/testresource/test_results.txt b/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/shell/tctshell/testresource/test_results.txt
new file mode 100755 (executable)
index 0000000..9cde800
--- /dev/null
@@ -0,0 +1,19 @@
+
+F_mobile_plan: /opt/tools/shell/plan/F_mobile_plan.xml
+
+auto_plan: 3113 seconds
+
+distribute_plan: 2850 seconds
+
+distribute_plan: 2648 seconds
+
+-------------------------------------------------------
+
+2.4_mobileF: /opt/tct/tizen_web_2.4/manager/plan/2.4_mobileF.xml
+
+
+Test Plan Mode: 6757
+
+Distribute Plan Mode (3 devices) : 2384
+
+-------------------------------------------------------
diff --git a/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/shell/tctshell/testresource/test_resultsummary.py b/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/shell/tctshell/testresource/test_resultsummary.py
new file mode 100755 (executable)
index 0000000..67cc7d6
--- /dev/null
@@ -0,0 +1,26 @@
+import os, sys
+
+sys.path.append(os.path.abspath(os.path.join(os.path.dirname(__file__), '..')))
+
+from result_summary import ResultSummary
+from shellplanner import TctShellPlan, TctShellSuite, ExecuteType
+from logmanager import LOGGER
+
+LOGGER.setLevel("DEBUG")
+
+
+s1 = TctShellSuite('tct-3dtransforms-css3-tests' , '', '', '', '', '', '' ,'')
+s2 = TctShellSuite('tct-capability-tests' , '', '', '', '', '', '' ,'')
+s3 = TctShellSuite('tct-fonts-css3-tests' , '', '', '', '', '', '' ,'')
+s4 = TctShellSuite('tct-security-tcs-tests' , '', '', '', '', '', '' ,'')
+
+exe_t = ExecuteType.createExecuteType('Auto')
+
+p = TctShellPlan('tmp_name', '0000d85b00006200', 'prof', exe_t, [s1, s2, s3, s4], 'tizen_web_2.4', '/opt/tct/tizen_web_2.4/shell/result/Tizen-2.4.0_Mobile-TM1_20151015.2026/rerun_test_1#1_2016-02-12_21:13:23.364388')
+
+
+rs = ResultSummary([p])
+
+rs.genSummary()
+
+print p.getUnpass()
diff --git a/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/shell/tctshell/testresource/test_sdbmanager.py b/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/shell/tctshell/testresource/test_sdbmanager.py
new file mode 100755 (executable)
index 0000000..609471b
--- /dev/null
@@ -0,0 +1,52 @@
+#!/usr/bin/python
+
+import os, sys
+
+sys.path.append(os.path.abspath(os.path.join(os.path.dirname(__file__), '..')))
+
+from sdbmanager import SdbManager
+from logmanager import LOGGER
+from test_constants import TestConstants
+
+class TestSdbManager:
+    def __init__(self):
+        TestConstants.checkConnectedDevice()
+        TestConstants.checkTestResourceFile()    
+
+        self.deviceId = TestConstants.CONN_DEVICE_ID
+        self.suiteFilePath = TestConstants.getAbsPath(TestConstants.TEST_TEMP_FOLDER + \
+                             TestConstants.TEST_SUITE_FILE)
+        self.suiteFile = TestConstants.TEST_SUITE_FILE
+   
+    def testSdbPush(self):
+        local = self.suiteFilePath
+        remote = '/opt/usr/media/tct/tmp/'
+
+        SdbManager.sdbShell(self.deviceId, "rm -rf " + remote + self.suiteFile)
+        SdbManager.sdbPush(self.deviceId, local, remote)
+   
+    def testSdbPull(self):
+        self.testSdbPush()
+
+        local = self.suiteFilePath + "-test"
+        SdbManager.hostCommand("rm -rf " + local)
+
+        remote = '/opt/usr/media/tct/tmp/' + self.suiteFile
+        SdbManager.sdbPull(self.deviceId, remote, local)
+        
+    def testSdbShell(self):
+        SdbManager.sdbShell(self.deviceId, 'ls -l')
+
+    def testSdbRootOn(self):
+        SdbManager.sdbRootOn(self.deviceId)
+
+if __name__ == "__main__":
+    print "==================== START TestSDManager ====================="
+    ins = TestSdbManager()
+    ins.testSdbPush()
+    ins.testSdbPull()
+    ins.testSdbShell()
+    ins. testSdbRootOn()
+    print "==================== FINISH TestSDManager ====================="
+
diff --git a/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/shell/tctshell/testresource/test_shellplanner.py b/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/shell/tctshell/testresource/test_shellplanner.py
new file mode 100755 (executable)
index 0000000..7396367
--- /dev/null
@@ -0,0 +1,95 @@
+#!/usr/bin/python
+
+import os, sys
+
+sys.path.append(os.path.abspath(os.path.join(os.path.dirname(__file__), '..')))
+
+from shellplanner import *
+from test_constants import *
+
+class TestShellPlanner:
+
+    def __init__(self):
+        self.devId1 = '0000d81b00006200'
+        self.devId2 = '0000d81400006200'
+        self.devId3 = '00004e310000324d'
+        self.devId4 = '0000d8f800006200'
+
+    #return TctShellPlan
+    def testInitShellPlan(self):
+        suite1 = TctShellSuite('tct-capability-tests', None, 15,0, \
+                 'common/tct-capability-tests-2.4.zip', 'WRTLauncher',\
+                 'Compliance', 'tizen_web_2.4', 8000)
+
+        '''
+        suite2 = TctShellSuite('tct-alarm-tizen-tests', None, 60,0, \
+                 'common/tct-alarm-tizen-tests-2.4.zip', 'WRTLauncher', \
+                 'Tizen Web Device APIs', 'tizen_web_2.4', 8000)
+
+        '''
+        suites = [suite1]
+
+        return TctShellPlan('testPlan1', self.devId2, 'mobile', ExecuteType('Auto'),suites, \
+               'tizen_web_2.4', '/opt/tct/tizen_web_2.4/shell/result/testresult/')      
+
+    def testInitShellPlan2(self):
+        suite1 = TctShellSuite('tct-capability-tests', None, 15,0, \
+                 'common/tct-capability-tests-2.4.zip', 'WRTLauncher',\
+                 'Compliance', 'tizen_web_2.4', 8000)
+
+        suite2 = TctShellSuite('tct-alarm-tizen-tests', None, 60,0, \
+                 'common/tct-alarm-tizen-tests-2.4.zip', 'WRTLauncher', \
+                 'Tizen Web Device APIs', 'tizen_web_2.4', 8000)
+
+        suites = [suite1, suite2]
+
+        return TctShellPlan('testPlan2', self.devId3, 'mobile', ExecuteType('Auto'),suites, \
+               'tizen_web_2.4', '/opt/tct/tizen_web_2.4/shell/result/testresult/')    
+
+   
+    def testInitShellPlan3(self):
+        suite1 = TctShellSuite('tct-capability-tests', None, 15,0, \
+                 'common/tct-capability-tests-3.0.zip', 'WRTLauncher',\
+                 'Compliance', 'tizen_web_3.0', 8000)
+
+        suites = [suite1]
+
+        return TctShellPlan('testPlan3', self.devId3, 'mobile', ExecuteType('Auto'),suites, \
+               'tizen_web_3.0', '/opt/tct/tizen_web_3.0/shell/result/testresult/')    
+
+    def testInitShellPlan4(self):
+        suite1 = TctShellSuite('tct-capability-tests', None, 15,0, \
+                 'common/tct-capability-tests-2.4.zip', 'WRTLauncher',\
+                 'Compliance', 'tizen_web_2.4', 8000)
+
+        suites = [suite1]
+
+        return TctShellPlan('testPlan4', self.devId4, 'mobile', ExecuteType('Auto'),suites, \
+               'tizen_web_2.4', '/opt/tct/tizen_web_2.4/shell/result/testresult/')    
+
+
+    def testInstSuiteinHost(self):
+        plan1 = self.testInitShellPlan3()
+        suite = plan1.getSuites(); 
+        #suite[0].installSuite(plan1.getDeviceId(), plan1.getDevTctTmpPath())
+        suite[0].sdbCheckSuite(plan1.getDeviceId(), suite[0].getSuiteName())
+       #suite[0].unInstallSuite(plan1.getDeviceId(), plan1.getDevTctTmpPath())
+
+    def testInstSuiteinTarget(self):
+        plan1 = self.testInitShellPlan4()
+        suite = plan1.getSuites(); 
+        suite[0].installSuite(plan1.getDeviceId(), plan1.getDevTctTmpPath())
+        suite[0].sdbCheckSuite(plan1.getDeviceId(), suite[0].getSuiteName())
+       suite[0].unInstallSuite(plan1.getDeviceId(), plan1.getDevTctTmpPath())
+        
+
+if __name__ == "__main__":
+    ins = TestShellPlanner()
+    ins.testInstSuiteinHost()
+    ins.testInstSuiteinTarget()
+
+
+
+
+
diff --git a/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/shell/tctshell/testresource/test_shellworker.py b/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/shell/tctshell/testresource/test_shellworker.py
new file mode 100755 (executable)
index 0000000..d0f6733
--- /dev/null
@@ -0,0 +1,78 @@
+#!/usr/bin/python
+
+import os, sys
+import time
+
+sys.path.append(os.path.abspath(os.path.join(os.path.dirname(__file__), '..')))
+
+from test_shellplanner import *
+from shellworker import *
+
+class TestShellWorker:
+
+    def __init__(self):
+        print ''
+
+    def testInitPlanExecutor(self, plan, count):   
+        return PlanExecutor(plan, 1)    
+
+    def testRunPlanExecutor(self):
+        planner = TestShellPlanner()
+        plan1 = planner.testInitShellPlan()
+        multiins = MultiRunnPlan._getInstance()
+        multiins.addPlan(plan1.getPlanName(), plan1)
+
+        exe1 = self.testInitPlanExecutor(plan1, 1)
+        exe1.start()
+
+    def testCheckRunningPlan(self):
+        planner = TestShellPlanner()
+        plan1 = planner.testInitShellPlan()
+        plan2 = planner.testInitShellPlan2()
+        multiins = MultiRunnPlan._getInstance()
+        multiins.addPlan(plan1.getPlanName(), plan1)
+        multiins.addPlan(plan2.getPlanName(), plan2)
+
+        multiins.printRunnPlan()
+        multiins.setCurrPlanRunning(plan1)
+     
+        multiins.printRunnPlan()
+      
+    def testGetRunnDevice(self):
+        planner = TestShellPlanner()
+        plan1 = planner.testInitShellPlan()
+        plan2 = planner.testInitShellPlan2()
+        multiins = MultiRunnPlan._getInstance()
+        multiins.addPlan(plan1.getPlanName(), plan1)
+        multiins.addPlan(plan2.getPlanName(), plan2)
+
+        multiins.setCurrPlanRunning(plan1)
+        print multiins.getRunnDevice()
+
+    def testIsSelectedDevAvailable(self):
+        planner = TestShellPlanner()
+        plan1 = planner.testInitShellPlan()
+        plan2 = planner.testInitShellPlan2()
+        multiins = MultiRunnPlan._getInstance()
+        multiins.addPlan(plan1.getPlanName(), plan1)
+        multiins.addPlan(plan2.getPlanName(), plan2)
+
+        multiins.setCurrPlanRunning(plan1)
+        ins2 = MultiRunnPlan._getInstance()
+        print ins2.isSelectedDevAvailable(plan2)
+
+    def testCheckRecoveryDevice(self):
+        planner = TestShellPlanner()
+        ins = AutoSuiteWorker(planner)
+        print ins.checkRecoveryDevice('10.113.74.133:26101')
+        
+        
+if __name__ == "__main__":
+    ins = TestShellWorker()
+#    ins.testRunPlanExecutor()
+#    ins.testCheckRunningPlan()
+#    ins.testGetRunnDevice()
+#    ins.testIsSelectedDevAvailable()
+    ins.testCheckRecoveryDevice()
+
diff --git a/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/shell/tctshell/testresource/test_shellwrapper.py b/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/shell/tctshell/testresource/test_shellwrapper.py
new file mode 100755 (executable)
index 0000000..14fd412
--- /dev/null
@@ -0,0 +1,10 @@
+#!/usr/bin/python
+
+import os, sys
+
+sys.path.append(os.path.abspath(os.path.join(os.path.dirname(__file__), '..')))
+
+from new_shellwrapper import *
+
+wrapper = ShellWrapper()
+wrapper.parse_options(sys.argv)
diff --git a/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/shell/tctshell/testresource/test_usbmonitor.py b/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/shell/tctshell/testresource/test_usbmonitor.py
new file mode 100755 (executable)
index 0000000..5e38835
--- /dev/null
@@ -0,0 +1,26 @@
+#!/usr/bin/python
+
+import os, sys
+
+sys.path.append(os.path.abspath(os.path.join(os.path.dirname(__file__), '..')))
+
+from usbmonitor import UsbMonitor
+
+class Testusbmonitor:
+
+    def __init__(self):
+       self.usbins = None
+        print ''
+
+    def testThread(self):
+        self.usbins = UsbMonitor()
+        self.usbins.start()
+
+    def killThread(self):
+       self.usbins.finishThread()
+
+if __name__ == "__main__":
+    ins = Testusbmonitor()
+    ins.testThread()
+    raw_input()
+    ins.killThread()
diff --git a/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/shell/tctshell/testresource/testcase_resultsummary.py b/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/shell/tctshell/testresource/testcase_resultsummary.py
new file mode 100755 (executable)
index 0000000..4e25472
--- /dev/null
@@ -0,0 +1,12 @@
+#!/usr/bin/python
+from result_summary import ResultSummary
+
+
+summary1 = ResultSummary("/opt/tct/tizen_web_2.4/manager/result/2016-01-12_15-10-43-526/tct-capability-tests.xml")
+summary1.unmarshal()
+'''
+try:
+    summary1.unmarshal()
+except Exception, e:
+    print "[ Error: reading suite result fail, error %s ]\n" % e
+'''
diff --git a/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/shell/tctshell/usbmonitor.py b/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/shell/tctshell/usbmonitor.py
new file mode 100755 (executable)
index 0000000..a75b204
--- /dev/null
@@ -0,0 +1,89 @@
+#!/usr/bin/python
+
+import threading
+import subprocess
+import time
+
+from .logmanager import LOGGER
+from .commodule.killall import killall
+from multiprocessing import Process
+
+
+#class UsbMonitor(threading.Thread):
+class UsbMonitor(Process):
+    usb_cmd = 'tail -f /var/log/syslog | stdbuf -o0 grep usb'
+    isStop = False
+    LOGGER.setLevel('DEBUG')
+
+    def __init__(self, devmgr):
+        #threading.Thread.__init__(self)
+        Process.__init__(self)
+        self.daemon = True
+        self.name = "UsbMonitor"
+        self.devmgr = devmgr
+        self.proc = subprocess.Popen(self.usb_cmd, shell=True, \
+                    stdout=subprocess.PIPE, stderr=subprocess.PIPE)
+
+        self.recovery_locks = {}
+        self.curr_time = None
+
+    def set_currsec(self):
+        lt = time.localtime(time.time())
+        self.curr_time = lt.tm_sec + (lt.tm_min * 60) + (lt.tm_hour * 3600)
+
+    def run(self):
+        LOGGER.debug("Starting UsbMonitor.......")
+        self.set_currsec()
+        while True:
+            outs = self.proc.stdout.readline()
+            if outs:
+                outs = outs.strip().decode("utf-8")
+                for outLog in outs.split('\n'):
+                    log_sp = outLog.split(' ')[2]
+                    time_sp = log_sp.split(':')
+                    tm_hour = int(time_sp[0])
+                    tm_min = int(time_sp[1])
+                    tm_sec = int(time_sp[2])
+                    time_sp = (tm_hour * 3600) + (tm_min * 60) + tm_sec
+
+                    if self.curr_time > time_sp:
+                        continue
+
+                    if self.isDisConnectUsb(outLog) or self.isConnectUsb(outLog):
+                        self.reLoadDeviceList()
+
+    def reLoadDeviceList(self):
+        time.sleep(3)
+        ret = self.devmgr.loadDeviceList()
+        if not ret:
+            LOGGER.error('0 device is connected')
+        else:
+            for devId in self.recovery_locks.keys():
+                if self.devmgr.isDeviceAvailable(devId):
+                    self.device_recovered(devId)
+
+    def isDisConnectUsb(self, sysLog):
+        if sysLog and sysLog.find('USB disconnect') > -1:
+            LOGGER.error(sysLog)
+            return True
+        else:
+            return False
+
+    def isConnectUsb(self, sysLog):
+        if sysLog.find('New USB device found') > -1:
+            LOGGER.debug(sysLog)
+            return True
+        else:
+            return False
+
+    def setup_recovery(self, devId, lock):
+        self.recovery_locks[devId] = lock
+
+    def device_recovered(self, devId):
+        try:
+            self.recovery_locks[devId].put(1, block=False)
+        except Exception as ex:
+            LOGGER.debug(str(ex))
+
+    def kill_usbmonitor(self):
+        killall(self.proc.pid)
diff --git a/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/shell/tmp/temp b/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/shell/tmp/temp
new file mode 100755 (executable)
index 0000000..e69de29
diff --git a/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/tct-config-tools.py b/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/tct-config-tools.py
new file mode 100755 (executable)
index 0000000..71ee3d6
--- /dev/null
@@ -0,0 +1,359 @@
+# -*- coding:utf-8 -*-
+import os
+import platform
+import shutil
+import stat
+import subprocess
+from optparse import OptionParser
+
+SDB_SERNO = "sdb"
+
+
+class CpFile:
+    sep = os.sep
+    TARGET_BASE_PATH = os.path.join(os.sep + "opt", "tools")
+    TARGET_BASE_LITE = os.path.join(os.sep + "opt", "testkit")
+
+    CURRENT_TARGET_BASE_PATH = ""
+    CURRENT_TARGET_LITE_PATH = ""
+    CURRENT_SOURCE_LITE_PATH = ""
+
+    #monkey
+    SOURCE_MONKEY_PATH = sep + "dev_event"
+    TARGET_MONKEY_PATH = sep + "dev_event"
+
+    #shell
+    SOURCE_SHELL_PATH = sep + "shell"
+    TARGET_SHELL_PATH = sep + "shell"
+    #manager
+    SOURCE_MANAGER_PATH = sep + "manager"
+    TARGET_MANAGER_PATH = sep + "manager"
+    #script
+    SOURCE_SCRIPT_PATH = ""
+    TARGET_SCRIPT_PATH = sep + "tools" + sep + "scripts"
+    #testkit1.0
+    SOURCE_TESTKIT_PATH1 = sep + "testkitlite1.0"
+    TARGET_TESTKIT_PATH1 = sep + "lite2.4"
+    #testkit2.0
+    SOURCE_TESTKIT_PATH2 = sep + "testkitlite2.0"
+    TARGET_TESTKIT_PATH2 = sep + "lite3.0"
+    #plugin
+    SOURCE_PLUGIN_PATH = sep + "plugin"
+    TARGET_PLUGIN_PATH = sep + "plugin"
+
+    def getCurrentOSBit(self):
+        return platform.architecture()
+
+    def setCurrentPath(self):
+        self.CURRENT_SOURCE_BASE_PATH = os.getcwd() + self.sep
+        self.CURRENT_TARGET_BASE_PATH = self.TARGET_BASE_PATH
+        self.CURRENT_TARGET_LITE_PATH = self.TARGET_BASE_LITE
+        print("current source base path =" + self.CURRENT_SOURCE_BASE_PATH)
+        print("current target base path =" + self.CURRENT_TARGET_BASE_PATH)
+
+    def cpSdb(self):
+        osInfo = self.getCurrentOSBit()
+        if (platform.system() == "Windows"):
+            if (str(osInfo[0]).find("64") != -1):
+                self.cpFile(
+                    self.CURRENT_SOURCE_BASE_PATH + self.SOURCE_SCRIPT_PATH + \
+                            self.sep + "sdb" + self.sep + "sdb-64.exe",
+                    self.CURRENT_TARGET_BASE_PATH + self.sep + "sdb.exe")
+            if (str(osInfo[0]).find("32") != -1):
+                self.cpFile(self.CURRENT_SOURCE_BASE_PATH + \
+                        self.SOURCE_SCRIPT_PATH + self.sep + "sdb" + self.sep \
+                        + "sdb-32.exe", self.CURRENT_TARGET_BASE_PATH + \
+                        self.sep + "sdb.exe")
+        else:
+            '''
+            # get status and output of the command
+            status, output = commands.getstatusoutput('lsof | \
+                    grep /usr/bin/sdb')
+            # merge continuing spaces to one
+            collapsedOutput = ' '.join(output.split())
+            # split words
+            result = collapsedOutput.split(' ')
+            # get the process id of the sdb
+            if status is not 256 :
+                # find the word sdb
+                for x in range(0, result.__len__()):
+                    if (result[x] == "sdb"):
+                        break
+                # get the process id of the sdb
+                os.system('kill -9 ' + result[x+1])
+            '''
+            try:
+                '''
+                if(self.checkInstalledSdb()):
+                    print("sdb install is not required")
+                    return
+
+                print("sdb install")
+                '''
+                if (str(osInfo[0]).find("64") != -1):
+                    self.cpFile(
+                        self.CURRENT_SOURCE_BASE_PATH + \
+                                self.SOURCE_SCRIPT_PATH + self.sep + "sdb" + \
+                                self.sep + "sdb-64",
+                        self.CURRENT_TARGET_BASE_PATH + self.sep + "sdb")
+                    self.cpFile(
+                        self.CURRENT_SOURCE_BASE_PATH + \
+                                self.SOURCE_SCRIPT_PATH + self.sep + "sdb" + \
+                                self.sep + "sdb-64",
+                        "/usr/bin/" + "sdb")
+                if (str(osInfo[0]).find("32") != -1):
+                    self.cpFile(
+                        self.CURRENT_SOURCE_BASE_PATH + \
+                                self.SOURCE_SCRIPT_PATH + self.sep + "sdb" + \
+                                self.sep + "sdb-32",
+                        self.CURRENT_TARGET_BASE_PATH + self.sep + "sdb")
+                    self.cpFile(
+                        self.CURRENT_SOURCE_BASE_PATH + \
+                                self.SOURCE_SCRIPT_PATH + self.sep + "sdb" + \
+                                self.sep + "sdb-32",
+                        "/usr/bin/" + "sdb")
+                os.system("chmod -R 777 /usr/bin/sdb")
+            except:
+                pass
+
+    def get_cmd_result(self, command):
+        p = subprocess.Popen(command,
+                         stdout=subprocess.PIPE,
+                         stderr=subprocess.STDOUT)
+        return p.stdout.readline()
+
+    def checkInstalledSdb(self):
+        cmd = "sdb"
+        installedVer = ""
+        try:
+            output = str(self.get_cmd_result(cmd).split('\n')[0])
+            if output.find('Smart Development Bridge') > -1:
+                installedVer = output.split(' ')[3]
+            else:
+                raise
+        except:
+            print("sdb is not installed")
+            return False
+
+        osInfo = self.getCurrentOSBit()
+        if (str(osInfo[0]).find("32") != -1):
+            cmd = "sdb/sdb-32"
+        else:
+            cmd = "sdb/sdb-64"
+        toolVer = ""
+        try:
+            output = str(self.get_cmd_result(cmd).split('\n')[0])
+            if output.find('Smart Development Bridge') > -1:
+                toolVer = output.split(' ')[3]
+            else:
+                raise
+        except:
+            print("tool's sdb is not valid")
+            return True
+
+        print("installed sdb version : %s / tool's sdb version : %s" % (installedVer, toolVer))
+        installedSplit = installedVer.split('.')
+        toolSplit = toolVer.split('.')
+        hit = 0
+        for i in range(0, 3):
+            if(int(installedSplit[i]) > int(toolSplit[i])):
+                print("Higher version sdb is already installed : " + installedVer)
+                return True
+            if(int(installedSplit[i]) == int(toolSplit[i])):
+                hit += 1
+                continue
+            if(int(installedSplit[i]) < int(toolSplit[i])):
+                break
+        if(hit==3):
+            print("Same version sdb is already installed : " + installedVer)
+            return True
+
+        return False
+
+    def cpOtherFiles(self):
+        tct_mgr = "tct-mgr"
+        tct_shell = "tct-shell"
+        tct_monkey = "tct-monkey"
+        testkit_lite1 = "testkit-lite1.0"
+        testkit_lite2 = "testkit-lite2.0"
+        tct_config = "TCT_CONFIG"
+
+        if (platform.system() == "Windows"):
+            tct_mgr = "tct-mgr.bat"
+
+        self.cpFile(self.CURRENT_SOURCE_BASE_PATH + self.SOURCE_SCRIPT_PATH + \
+                self.sep + tct_mgr, self.CURRENT_TARGET_BASE_PATH + \
+                self.sep + tct_mgr)
+        self.cpFile(self.CURRENT_SOURCE_BASE_PATH + self.SOURCE_SCRIPT_PATH + \
+                self.sep + tct_shell, self.CURRENT_TARGET_BASE_PATH + \
+                self.sep + tct_shell)
+        self.cpFile(self.CURRENT_SOURCE_BASE_PATH + self.SOURCE_SCRIPT_PATH + \
+                self.sep + tct_monkey, self.CURRENT_TARGET_BASE_PATH + \
+                self.sep + tct_monkey)
+        self.cpFile(self.CURRENT_SOURCE_BASE_PATH + self.SOURCE_SCRIPT_PATH + \
+                self.sep + testkit_lite1, self.CURRENT_TARGET_BASE_PATH + \
+                self.sep + testkit_lite1)
+        self.cpFile(self.CURRENT_SOURCE_BASE_PATH + self.SOURCE_SCRIPT_PATH + \
+                self.sep + testkit_lite2, self.CURRENT_TARGET_BASE_PATH + \
+                self.sep + testkit_lite2)
+        self.cpFile(self.CURRENT_SOURCE_BASE_PATH + self.SOURCE_SCRIPT_PATH + \
+                self.sep + tct_config, self.CURRENT_TARGET_BASE_PATH + \
+                self.sep + tct_config)
+
+    def cpOtherFilesToBinDir(self):
+        tct_mgr = "tct-mgr"
+        tct_shell = "tct-shell"
+        tct_monkey = "tct-monkey"
+        testkit_lite1 = "testkit-lite1.0"
+        testkit_lite2 = "testkit-lite2.0"
+
+        if (platform.system() != "Windows"):
+            self.cpFile(self.CURRENT_SOURCE_BASE_PATH + \
+                    self.SOURCE_SCRIPT_PATH + self.sep + \
+                    tct_mgr, "/usr/bin/" + tct_mgr)
+            self.cpFile(self.CURRENT_SOURCE_BASE_PATH + \
+                    self.SOURCE_SCRIPT_PATH + self.sep + \
+                    tct_shell, "/usr/bin/" + tct_shell)
+            self.cpFile(self.CURRENT_SOURCE_BASE_PATH + \
+                    self.SOURCE_SCRIPT_PATH + self.sep + \
+                    tct_monkey, "/usr/bin/" + tct_monkey)
+            self.cpFile(self.CURRENT_SOURCE_BASE_PATH + \
+                    self.SOURCE_SCRIPT_PATH + self.sep + testkit_lite1,\
+                    "/usr/bin/" + testkit_lite1)
+            self.cpFile(self.CURRENT_SOURCE_BASE_PATH + \
+                    self.SOURCE_SCRIPT_PATH + self.sep + testkit_lite2,\
+                    "/usr/bin/" + testkit_lite2)
+
+            try:
+                os.system("chmod -R 777 /usr/bin/" + tct_mgr)
+                os.system("chmod -R 777 /usr/bin/" + tct_shell)
+                os.system("chmod -R 777 /usr/bin/" + tct_monkey)
+                os.system("chmod -R 777 /usr/bin/" + testkit_lite1)
+                os.system("chmod -R 777 /usr/bin/" + testkit_lite2)
+                os.system("chmod -R 777 /usr/bin/sdb")
+            except:
+                pass
+
+    def cpTestKitLite(self):
+        self.cpDir(self.CURRENT_SOURCE_BASE_PATH + self.SOURCE_TESTKIT_PATH1, \
+                   self.CURRENT_TARGET_LITE_PATH + self.TARGET_TESTKIT_PATH1, \
+                           "lite2.4")
+        for r, d, f in os.walk(self.CURRENT_TARGET_LITE_PATH + \
+                self.TARGET_TESTKIT_PATH1):
+            if (platform.system() != "Windows"):
+                os.chmod(r, stat.S_IRWXU | stat.S_IRWXG | stat.S_IRWXO)
+
+        self.cpDir(self.CURRENT_SOURCE_BASE_PATH + self.SOURCE_TESTKIT_PATH2,
+                   self.CURRENT_TARGET_LITE_PATH + self.TARGET_TESTKIT_PATH2, \
+                           "lite3.0")
+        for r, d, f in os.walk(self.CURRENT_TARGET_LITE_PATH + \
+                self.TARGET_TESTKIT_PATH2):
+            if (platform.system() != "Windows"):
+                os.chmod(r, stat.S_IRWXU | stat.S_IRWXG | stat.S_IRWXO)
+
+    def cpManager(self):
+        self.cpDir(self.CURRENT_SOURCE_BASE_PATH + self.SOURCE_MANAGER_PATH,
+                   self.CURRENT_TARGET_BASE_PATH + self.TARGET_MANAGER_PATH, \
+                           "manager")
+        for r, d, f in os.walk(self.CURRENT_TARGET_BASE_PATH + \
+                self.TARGET_MANAGER_PATH):
+            if (platform.system() != "Windows"):
+                os.chmod(r, stat.S_IRWXU | stat.S_IRWXG | stat.S_IRWXO)
+
+    def cpShell(self):
+        self.cpDir(self.CURRENT_SOURCE_BASE_PATH + self.SOURCE_SHELL_PATH,
+                   self.CURRENT_TARGET_BASE_PATH + self.TARGET_SHELL_PATH, \
+                           "shell")
+        for r, d, f in os.walk(self.CURRENT_TARGET_BASE_PATH + \
+                self.TARGET_SHELL_PATH):
+            if (platform.system() != "Windows"):
+                os.chmod(r, stat.S_IRWXU | stat.S_IRWXG | stat.S_IRWXO)
+
+    def cpMonkey(self):
+        self.cpDir(self.CURRENT_SOURCE_BASE_PATH + self.SOURCE_MONKEY_PATH, \
+                self.CURRENT_TARGET_BASE_PATH + self.TARGET_MONKEY_PATH, \
+                "monkey")
+        for r, d, f in os.walk(self.CURRENT_TARGET_BASE_PATH + \
+                self.TARGET_MONKEY_PATH):
+            if (platform.system() != "Windows"):
+                os.chmod(r, stat.S_IRWXU | stat.S_IRWXG | stat.S_IRWXO)
+
+    def cpPlugin(self):
+        self.cpDir(self.CURRENT_SOURCE_BASE_PATH + self.SOURCE_PLUGIN_PATH,
+                   self.CURRENT_TARGET_BASE_PATH + self.TARGET_PLUGIN_PATH, \
+                           "plugin")
+        for r, d, f in os.walk(self.CURRENT_TARGET_BASE_PATH + \
+                self.TARGET_PLUGIN_PATH):
+            if (platform.system() != "Windows"):
+                os.chmod(r, stat.S_IRWXU | stat.S_IRWXG | stat.S_IRWXO)
+
+    def cpFile(self, src, target):
+        if (not os.path.isfile(src)):
+            print(src + " is not a file")
+            return
+        path = os.path.dirname(target)
+        if (not os.path.isdir(path)):
+            os.makedirs(path)
+        shutil.copyfile(src, target)
+
+    def del_rw(self, action, name, exc):
+        if (platform.system() != "Windows"):
+            os.chmod(name, stat.S_IWRITE)
+        os.remove(name)
+
+    def cpDir(self, src, target, name):
+        if (os.path.isdir(src) and not os.path.exists(target)):
+            print("copy " + name + "  dir start")
+            shutil.copytree(src, target)
+            print("copy " + name + "  dir finish")
+        else:
+            if (not os.path.isdir(src)):
+                print("source " + name + " path is not a dir")
+            if (os.path.exists(target)):
+                print ("target " + name + " path is exists")
+                try:
+                    shutil.rmtree(target, onerror=self.del_rw)
+                except Exception, data:
+                    print Exception, ":", data
+
+                print ("target " + name + " dir destroyed")
+                try:
+                    shutil.copytree(src, target)
+                except Exception, data:
+                    print Exception, ":", data
+                print("copy " + name + "  dir finish")
+
+    def clear(self):
+        self.setCurrentPath()
+        try:
+            shutil.rmtree(self.CURRENT_TARGET_BASE_PATH, onerror=self.del_rw)
+        except Exception, data:
+            print Exception, ":", data
+
+    def cp(self):
+        self.setCurrentPath()
+        self.cpShell()
+        self.cpManager()
+        self.cpMonkey()
+        self.cpOtherFiles()
+        self.cpTestKitLite()
+        self.cpPlugin()
+        self.cpOtherFilesToBinDir()
+        self.cpSdb()
+
+parser = OptionParser()
+parser.add_option("-i", "--install", dest="install", action="store_true", \
+        default=False, help="copy folders and file into os")
+parser.add_option("-p", "--purge", dest="clear", action="store_true", \
+        default=False, help="clear all files")
+
+(options, args) = parser.parse_args()
+if (options.install):
+    test = CpFile()
+    test.cp()
+elif(options.clear):
+    test = CpFile()
+    test.clear()
+else:
+    test = CpFile()
+    test.cp()
diff --git a/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/tct-mgr b/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/tct-mgr
new file mode 100755 (executable)
index 0000000..bb918fd
--- /dev/null
@@ -0,0 +1,10 @@
+#!/bin/bash
+
+THE_CLASSPATH=
+for i in `ls /opt/tools/manager/lib/*.jar`
+do
+  THE_CLASSPATH=${THE_CLASSPATH}:${i}
+done
+
+java -cp ${THE_CLASSPATH} org.tizen.tct.tool.mgr.TctGui "${@}"
+
diff --git a/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/tct-mgr.bat b/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/tct-mgr.bat
new file mode 100755 (executable)
index 0000000..9cf7241
--- /dev/null
@@ -0,0 +1,10 @@
+@echo off
+Setlocal EnableDelayedExpansion
+
+set classpath=
+for %%f in (/opt/tools/manager/lib/*.jar) do set classpath=!classpath!;/opt/tools/manager/lib/%%f
+
+echo ==================================================================================
+echo java_classpath = %classpath%
+java -cp %classpath% org.tizen.tct.tool.mgr.TctGui
+echo ==================================================================================
\ No newline at end of file
diff --git a/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/tct-monkey b/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/tct-monkey
new file mode 100755 (executable)
index 0000000..db12dab
--- /dev/null
@@ -0,0 +1,3 @@
+#!/bin/bash
+
+python /opt/tools/dev_event/tct-monkey "${@}"
diff --git a/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/tct-shell b/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/tct-shell
new file mode 100755 (executable)
index 0000000..78ee3e9
--- /dev/null
@@ -0,0 +1,3 @@
+#!/bin/bash
+
+python3 /opt/tools/shell/tct-shell "${@}"
diff --git a/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkit-lite1.0 b/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkit-lite1.0
new file mode 100755 (executable)
index 0000000..459746a
--- /dev/null
@@ -0,0 +1,3 @@
+#!/bin/bash
+
+python /opt/testkit/lite2.4/testkit-lite "${@}"
diff --git a/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkit-lite2.0 b/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkit-lite2.0
new file mode 100755 (executable)
index 0000000..cd872ce
--- /dev/null
@@ -0,0 +1,3 @@
+#!/bin/bash
+
+python /opt/testkit/lite3.0/testkit-lite "${@}"
diff --git a/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite1.0/LICENSE b/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite1.0/LICENSE
new file mode 100755 (executable)
index 0000000..6d45519
--- /dev/null
@@ -0,0 +1,340 @@
+                   GNU GENERAL PUBLIC LICENSE
+                      Version 2, June 1991
+
+ Copyright (C) 1989, 1991 Free Software Foundation, Inc.
+                       51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+                           Preamble
+
+  The licenses for most software are designed to take away your
+freedom to share and change it.  By contrast, the GNU General Public
+License is intended to guarantee your freedom to share and change free
+software--to make sure the software is free for all its users.  This
+General Public License applies to most of the Free Software
+Foundation's software and to any other program whose authors commit to
+using it.  (Some other Free Software Foundation software is covered by
+the GNU Library General Public License instead.)  You can apply it to
+your programs, too.
+
+  When we speak of free software, we are referring to freedom, not
+price.  Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+this service if you wish), that you receive source code or can get it
+if you want it, that you can change the software or use pieces of it
+in new free programs; and that you know you can do these things.
+
+  To protect your rights, we need to make restrictions that forbid
+anyone to deny you these rights or to ask you to surrender the rights.
+These restrictions translate to certain responsibilities for you if you
+distribute copies of the software, or if you modify it.
+
+  For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must give the recipients all the rights that
+you have.  You must make sure that they, too, receive or can get the
+source code.  And you must show them these terms so they know their
+rights.
+
+  We protect your rights with two steps: (1) copyright the software, and
+(2) offer you this license which gives you legal permission to copy,
+distribute and/or modify the software.
+
+  Also, for each author's protection and ours, we want to make certain
+that everyone understands that there is no warranty for this free
+software.  If the software is modified by someone else and passed on, we
+want its recipients to know that what they have is not the original, so
+that any problems introduced by others will not reflect on the original
+authors' reputations.
+
+  Finally, any free program is threatened constantly by software
+patents.  We wish to avoid the danger that redistributors of a free
+program will individually obtain patent licenses, in effect making the
+program proprietary.  To prevent this, we have made it clear that any
+patent must be licensed for everyone's free use or not licensed at all.
+
+  The precise terms and conditions for copying, distribution and
+modification follow.
+
+                   GNU GENERAL PUBLIC LICENSE
+   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+  0. This License applies to any program or other work which contains
+a notice placed by the copyright holder saying it may be distributed
+under the terms of this General Public License.  The "Program", below,
+refers to any such program or work, and a "work based on the Program"
+means either the Program or any derivative work under copyright law:
+that is to say, a work containing the Program or a portion of it,
+either verbatim or with modifications and/or translated into another
+language.  (Hereinafter, translation is included without limitation in
+the term "modification".)  Each licensee is addressed as "you".
+
+Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope.  The act of
+running the Program is not restricted, and the output from the Program
+is covered only if its contents constitute a work based on the
+Program (independent of having been made by running the Program).
+Whether that is true depends on what the Program does.
+
+  1. You may copy and distribute verbatim copies of the Program's
+source code as you receive it, in any medium, provided that you
+conspicuously and appropriately publish on each copy an appropriate
+copyright notice and disclaimer of warranty; keep intact all the
+notices that refer to this License and to the absence of any warranty;
+and give any other recipients of the Program a copy of this License
+along with the Program.
+
+You may charge a fee for the physical act of transferring a copy, and
+you may at your option offer warranty protection in exchange for a fee.
+
+  2. You may modify your copy or copies of the Program or any portion
+of it, thus forming a work based on the Program, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+    a) You must cause the modified files to carry prominent notices
+    stating that you changed the files and the date of any change.
+
+    b) You must cause any work that you distribute or publish, that in
+    whole or in part contains or is derived from the Program or any
+    part thereof, to be licensed as a whole at no charge to all third
+    parties under the terms of this License.
+
+    c) If the modified program normally reads commands interactively
+    when run, you must cause it, when started running for such
+    interactive use in the most ordinary way, to print or display an
+    announcement including an appropriate copyright notice and a
+    notice that there is no warranty (or else, saying that you provide
+    a warranty) and that users may redistribute the program under
+    these conditions, and telling the user how to view a copy of this
+    License.  (Exception: if the Program itself is interactive but
+    does not normally print such an announcement, your work based on
+    the Program is not required to print an announcement.)
+
+These requirements apply to the modified work as a whole.  If
+identifiable sections of that work are not derived from the Program,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works.  But when you
+distribute the same sections as part of a whole which is a work based
+on the Program, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Program.
+
+In addition, mere aggregation of another work not based on the Program
+with the Program (or with a work based on the Program) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+  3. You may copy and distribute the Program (or a work based on it,
+under Section 2) in object code or executable form under the terms of
+Sections 1 and 2 above provided that you also do one of the following:
+
+    a) Accompany it with the complete corresponding machine-readable
+    source code, which must be distributed under the terms of Sections
+    1 and 2 above on a medium customarily used for software interchange; or,
+
+    b) Accompany it with a written offer, valid for at least three
+    years, to give any third party, for a charge no more than your
+    cost of physically performing source distribution, a complete
+    machine-readable copy of the corresponding source code, to be
+    distributed under the terms of Sections 1 and 2 above on a medium
+    customarily used for software interchange; or,
+
+    c) Accompany it with the information you received as to the offer
+    to distribute corresponding source code.  (This alternative is
+    allowed only for noncommercial distribution and only if you
+    received the program in object code or executable form with such
+    an offer, in accord with Subsection b above.)
+
+The source code for a work means the preferred form of the work for
+making modifications to it.  For an executable work, complete source
+code means all the source code for all modules it contains, plus any
+associated interface definition files, plus the scripts used to
+control compilation and installation of the executable.  However, as a
+special exception, the source code distributed need not include
+anything that is normally distributed (in either source or binary
+form) with the major components (compiler, kernel, and so on) of the
+operating system on which the executable runs, unless that component
+itself accompanies the executable.
+
+If distribution of executable or object code is made by offering
+access to copy from a designated place, then offering equivalent
+access to copy the source code from the same place counts as
+distribution of the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+  4. You may not copy, modify, sublicense, or distribute the Program
+except as expressly provided under this License.  Any attempt
+otherwise to copy, modify, sublicense or distribute the Program is
+void, and will automatically terminate your rights under this License.
+However, parties who have received copies, or rights, from you under
+this License will not have their licenses terminated so long as such
+parties remain in full compliance.
+
+  5. You are not required to accept this License, since you have not
+signed it.  However, nothing else grants you permission to modify or
+distribute the Program or its derivative works.  These actions are
+prohibited by law if you do not accept this License.  Therefore, by
+modifying or distributing the Program (or any work based on the
+Program), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Program or works based on it.
+
+  6. Each time you redistribute the Program (or any work based on the
+Program), the recipient automatically receives a license from the
+original licensor to copy, distribute or modify the Program subject to
+these terms and conditions.  You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties to
+this License.
+
+  7. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License.  If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Program at all.  For example, if a patent
+license would not permit royalty-free redistribution of the Program by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Program.
+
+If any portion of this section is held invalid or unenforceable under
+any particular circumstance, the balance of the section is intended to
+apply and the section as a whole is intended to apply in other
+circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system, which is
+implemented by public license practices.  Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+  8. If the distribution and/or use of the Program is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Program under this License
+may add an explicit geographical distribution limitation excluding
+those countries, so that distribution is permitted only in or among
+countries not thus excluded.  In such case, this License incorporates
+the limitation as if written in the body of this License.
+
+  9. The Free Software Foundation may publish revised and/or new versions
+of the General Public License from time to time.  Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+Each version is given a distinguishing version number.  If the Program
+specifies a version number of this License which applies to it and "any
+later version", you have the option of following the terms and conditions
+either of that version or of any later version published by the Free
+Software Foundation.  If the Program does not specify a version number of
+this License, you may choose any version ever published by the Free Software
+Foundation.
+
+  10. If you wish to incorporate parts of the Program into other free
+programs whose distribution conditions are different, write to the author
+to ask for permission.  For software which is copyrighted by the Free
+Software Foundation, write to the Free Software Foundation; we sometimes
+make exceptions for this.  Our decision will be guided by the two goals
+of preserving the free status of all derivatives of our free software and
+of promoting the sharing and reuse of software generally.
+
+                           NO WARRANTY
+
+  11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
+FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW.  EXCEPT WHEN
+OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
+PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
+OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.  THE ENTIRE RISK AS
+TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.  SHOULD THE
+PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
+REPAIR OR CORRECTION.
+
+  12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
+REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
+INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
+OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
+TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
+YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
+PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGES.
+
+                    END OF TERMS AND CONDITIONS
+
+           How to Apply These Terms to Your New Programs
+
+  If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+  To do so, attach the following notices to the program.  It is safest
+to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+    <one line to give the program's name and a brief idea of what it does.>
+    Copyright (C) <year>  <name of author>
+
+    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 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+
+
+Also add information on how to contact you by electronic and paper mail.
+
+If the program is interactive, make it output a short notice like this
+when it starts in an interactive mode:
+
+    Gnomovision version 69, Copyright (C) year name of author
+    Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+    This is free software, and you are welcome to redistribute it
+    under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License.  Of course, the commands you use may
+be called something other than `show w' and `show c'; they could even be
+mouse-clicks or menu items--whatever suits your program.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the program, if
+necessary.  Here is a sample; alter the names:
+
+  Yoyodyne, Inc., hereby disclaims all copyright interest in the program
+  `Gnomovision' (which makes passes at compilers) written by James Hacker.
+
+  <signature of Ty Coon>, 1 April 1989
+  Ty Coon, President of Vice
+
+This General Public License does not permit incorporating your program into
+proprietary programs.  If your program is a subroutine library, you may
+consider it more useful to permit linking proprietary applications with the
+library.  If this is what you want to do, use the GNU Library General
+Public License instead of this License.
diff --git a/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite1.0/README b/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite1.0/README
new file mode 100755 (executable)
index 0000000..b82cff0
--- /dev/null
@@ -0,0 +1,77 @@
+Dependency:
+=================
+python2.7 python-pip requests
+
+       sudo apt-get install python-pip
+       sudo pip install requests
+
+How to build:
+=================
+    Build from source code: 
+        sudo python setup.py build
+
+How to install:
+=================
+    Install testkit lite  from source code: 
+        sudo python setup.py install
+
+How to use:
+=================
+    At first, install a test package or prepare one tests.xml file aligned with schema files: /opt/testkit/lite/xsd/testdefinition-syntax.xsd.
+
+    And then,
+        1) You can run case on target:
+            For web test cases:
+                testkit-lite -f device:"<somewhere>/<package_name>/tests.xml" -e 'WRTLauncher <package_name>'
+            For native test cases:
+                testkit-lite -f device:"<somewhere>/<package_name>/tests.xml" 
+
+        2) You can run case in single mode :
+            For web test cases:
+                testkit-lite -f "<somewhere>/<package_name>/tests.xml" -e 'WRTLauncher <package_name>' --comm localhost
+            For native test cases:
+                testkit-lite -f "<somewhere>/<package_name>/tests.xml" --comm localhost
+    
+        3) You can select on parser engine to simply conduct one or more tests.xml on target:
+            testkit-lite -f device:"<somewhere>/<package_name1>/tests.xml ... <somewhere>/<package_namen>/tests.xml" -e 'WRTLauncher <package_name1> ... <package_namen>'
+        4) If you want to execute both auto and manual tests:
+            testkit-lite -f device:"<somewhere>/<package_name>/tests.xml"
+            
+        5) If you just want to execute manual tests:
+            testkit-lite -f device:"<somewhere>/<package_name>/tests.xml" -M
+            
+        6) If you just want to execute auto tests:
+            testkit-lite -f device:"<somewhere>/<package_name>/tests.xml" -A
+            
+        7) If you want to save test result to another file, by default it'll be under /opt/testkit/lite/latest:
+            testkit-lite -f device:"<somewhere>/<package_name>/tests.xml" -o <somewhere>/xxx.xml
+            
+        8) If you want to choose some filters:
+            testkit-lite -f device:"<somewhere>/<package_name>/tests.xml" --status level1 --type type1 ...
+
+        9) If you want to run test according capability:
+            testkit-lite -f device:"<somewhere>/<package_name>/tests.xml" --capability capability.xml
+            
+        10) At last, you can freely compose the above parameters together:
+             testkit-lite -f <somewhere1>/tests.xml <somewhere2>/tests.xml -A --priority P1 --type type1 ...
+
+Get Results:
+=================
+
+    Test report will be generated as tests.result.xml   
+       The result will be under /opt/testkit/lite/latest after execution, you can also check the history results in /opt/testkit/lite/yyyy-mm-dd-HH:MM:SS.NNNNNN.
+
+View Results:
+=================
+
+Test report can be viewed in HTML format, so the data in the xml result file looks more human friendly.
+
+Please follow the following steps to view test report:
+    1) copy files: application.js back_top.png jquery.min.js testresult.xsl tests.css under directory /opt/testkit/lite/xsd/
+    2) put the files from step 1) under the same directory as the xml result file
+    3) open xml result file with a web browser(IE, Chrome or Firefox)
+
+Known Issues:
+=================
+N/A
diff --git a/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite1.0/VERSION b/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite1.0/VERSION
new file mode 100755 (executable)
index 0000000..fb8d81b
--- /dev/null
@@ -0,0 +1,4 @@
+[public_version]
+version=TESTKIT1_3.0
+[internal_version]
+version=TESTKIT1_3.0.1-151106
diff --git a/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite1.0/commodule/Makefile.am b/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite1.0/commodule/Makefile.am
new file mode 100755 (executable)
index 0000000..205211e
--- /dev/null
@@ -0,0 +1,24 @@
+# Copyright (C) 2012 Intel Corporation
+# 
+# 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
+# of the License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
+#
+# Authors:
+#              Yuanyuan,Zou  <zouyuanx@intel.com>
+
+
+SUBDIRS = impl
+
+commoduledir = /usr/lib/python2.7/dist-packages/commodule
+dist_commodule_SCRIPTS = *.py
diff --git a/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite1.0/commodule/__init__.py b/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite1.0/commodule/__init__.py
new file mode 100755 (executable)
index 0000000..8b13789
--- /dev/null
@@ -0,0 +1 @@
+
diff --git a/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite1.0/commodule/__init__.pyc b/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite1.0/commodule/__init__.pyc
new file mode 100755 (executable)
index 0000000..4aae30a
Binary files /dev/null and b/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite1.0/commodule/__init__.pyc differ
diff --git a/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite1.0/commodule/autoexec.py b/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite1.0/commodule/autoexec.py
new file mode 100755 (executable)
index 0000000..240b6c3
--- /dev/null
@@ -0,0 +1,100 @@
+#!/usr/bin/python
+#
+# Copyright (C) 2012 Intel Corporation
+#
+# 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
+# of the License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor,
+# Boston, MA  02110-1301, USA.
+#
+# Authors:
+#              Liu,chengtao <chengtaox.liu@intel.com>
+""" The shell command executor module"""
+
+import os
+import sys
+import time
+import subprocess
+from datetime import datetime
+
+from .killall import killall
+from .str2 import str2str
+
+
+def shell_command(cmd, timeout=15):
+    """shell communication for quick return in sync mode"""
+    proc = subprocess.Popen(cmd,
+                            shell=True,
+                            bufsize=0,
+                            stdout=subprocess.PIPE,
+                            stderr=subprocess.PIPE,
+                            stdin=subprocess.PIPE)
+    time_cnt = 0
+    exit_code = None
+    while time_cnt < timeout:
+        exit_code = proc.poll()
+        if not exit_code is None:
+            break
+        time_cnt += 0.2
+        time.sleep(0.2)
+
+    if exit_code is None:
+        killall(proc.pid)
+        exit_code = -1
+        result = []
+    else:
+        result = proc.stdout.readlines() or proc.stderr.readlines()
+    return [exit_code, result]
+
+
+def shell_command_ext(cmd="",
+                      timeout=None,
+                      boutput=False,
+                      stdout_file=None,
+                      stderr_file=None):
+    """shell executor, return [exitcode, stdout/stderr]
+       timeout: None means unlimited timeout
+       boutput: specify whether print output during the command running
+    """
+    cmd_open = subprocess.Popen(args=cmd,
+                                shell=True,
+                                bufsize=0,
+                                stdout=subprocess.PIPE,
+                                stderr=subprocess.PIPE,
+                                stdin=subprocess.PIPE)
+
+    while True:
+        exit_code = cmd_open.poll()
+        if exit_code is not None:
+            break
+        if timeout is not None:
+            timeout -= 0.1
+            if timeout <= 0:
+                try:
+                    exit_code = "timeout"
+                    cmd_open.terminate()
+                    time.sleep(5)
+                except OSError:
+                    killall(cmd_open.pid)
+                break
+        time.sleep(0.1)
+
+    stdout_log = str2str(cmd_open.stdout.read())
+    stderr_log = str2str(cmd_open.stderr.read())
+    if 'returncode=' in stdout_log:
+        index = stdout_log.find('returncode=') + 11
+        exit_code = str(stdout_log[index:]).strip('\r\n')
+    stdout_log = '<![CDATA[' + stdout_log + ']]>'
+    stderr_log = '<![CDATA[' + stderr_log + ']]>'
+
+    return [exit_code, stdout_log, stderr_log]
diff --git a/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite1.0/commodule/autoexec.pyc b/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite1.0/commodule/autoexec.pyc
new file mode 100755 (executable)
index 0000000..799851b
Binary files /dev/null and b/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite1.0/commodule/autoexec.pyc differ
diff --git a/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite1.0/commodule/connector.py b/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite1.0/commodule/connector.py
new file mode 100755 (executable)
index 0000000..a552164
--- /dev/null
@@ -0,0 +1,47 @@
+#!/usr/bin/python
+#
+# Copyright (C) 2013 Intel Corporation
+#
+# 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
+# of the License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor,Boston, MA 02110-1301,USA.
+#
+# Authors:
+#              Liu,chengtao <chengtaox.liu@intel.com>
+"""Test connector for test instance and target instance"""
+
+from .log import LOGGER
+
+
+class Connector:
+
+    """Communication module for test host and test remote"""
+
+    def __init__(self, config):
+        self.conn = None
+        if "testmode" in config:
+            try:
+                exec "from impl.%s import get_target_conn" % config[
+                    "testmode"]
+                device_no = config.get('deviceid', None)
+                if device_no is not None:
+                    self.conn = get_target_conn(device_no)
+                else:
+                    self.conn = get_target_conn()
+            except Exception as error:
+                LOGGER.error("[Error: Failed to initilize com-module,"
+                             " exception: % s]\n" % error)
+
+    def get_connector(self):
+        """list the handler instance"""
+        return self.conn
diff --git a/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite1.0/commodule/connector.pyc b/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite1.0/commodule/connector.pyc
new file mode 100755 (executable)
index 0000000..892603b
Binary files /dev/null and b/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite1.0/commodule/connector.pyc differ
diff --git a/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite1.0/commodule/httprequest.py b/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite1.0/commodule/httprequest.py
new file mode 100755 (executable)
index 0000000..97ad3f3
--- /dev/null
@@ -0,0 +1,55 @@
+#!/usr/bin/python
+#
+# Copyright (C) 2012 Intel Corporation
+#
+# 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
+# of the License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor,
+# Boston, MA  02110-1301, USA.
+#
+# Authors:
+#           Liu,chengtao <chengtaox.liu@intel.com>
+""" The http request process module"""
+
+import requests
+import json
+
+
+def get_url(baseurl, api):
+    """get full url string"""
+    return "%s%s" % (baseurl, api)
+
+
+def http_request(url, rtype="POST", data=None, time_out=10):
+    """
+    http request to the device http server
+    """
+    result = None
+    if rtype == "POST":
+        headers = {'content-type': 'application/json'}
+        try:
+            ret = requests.post(url, data=json.dumps(
+                data), headers=headers, timeout=time_out)
+
+            if ret:
+                result = ret.json()
+        except Exception as error:
+            pass
+    elif rtype == "GET":
+        try:
+            ret = requests.get(url, params=data, timeout=time_out)
+            if ret:
+                result = ret.json()
+        except Exception as error:
+            pass
+    return result
diff --git a/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite1.0/commodule/httprequest.pyc b/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite1.0/commodule/httprequest.pyc
new file mode 100755 (executable)
index 0000000..455a4c9
Binary files /dev/null and b/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite1.0/commodule/httprequest.pyc differ
diff --git a/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite1.0/commodule/impl/Makefile.am b/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite1.0/commodule/impl/Makefile.am
new file mode 100755 (executable)
index 0000000..2d91657
--- /dev/null
@@ -0,0 +1,22 @@
+# Copyright (C) 2012 Intel Corporation
+# 
+# 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
+# of the License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
+#
+# Authors:
+#              Yuanyuan,Zou  <zouyuanx@intel.com>
+
+
+commoduleimpldir = /usr/lib/python2.7/dist-packages/commodule/impl
+dist_commoduleimpl_SCRIPTS = *.py
diff --git a/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite1.0/commodule/impl/__init__.py b/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite1.0/commodule/impl/__init__.py
new file mode 100755 (executable)
index 0000000..8b13789
--- /dev/null
@@ -0,0 +1 @@
+
diff --git a/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite1.0/commodule/impl/localhost.py b/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite1.0/commodule/impl/localhost.py
new file mode 100755 (executable)
index 0000000..94bc888
--- /dev/null
@@ -0,0 +1,146 @@
+#!/usr/bin/python
+#
+# Copyright (C) 2012 Intel Corporation
+#
+# 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
+# of the License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor,
+# Boston, MA  02110-1301, USA.
+#
+# Authors:
+#           Liu,chengtao <chengtaox.liu@intel.com>
+
+""" The implementation of local host communication"""
+
+import os
+import time
+import socket
+import re
+from shutil import copyfile
+
+from commodule.log import LOGGER
+from commodule.autoexec import shell_command, shell_command_ext
+
+
+HOST_NS = "127.0.0.1"
+os.environ['no_proxy'] = HOST_NS
+APP_QUERY_STR = "ps aux | grep %s | grep -v grep"
+
+
+class LocalHost:
+
+    """ Implementation for transfer data
+        between Host and Tizen PC
+    """
+
+    def __init__(self):
+        self.deviceid = "localhost"
+
+    def shell_cmd(self, cmd="", timeout=15):
+        return shell_command(cmd, timeout)
+
+    def check_process(self, process_name):
+        exit_code, ret = shell_command(APP_QUERY_STR % process_name)
+        return len(ret)
+
+    def launch_stub(self, stub_app, stub_port="8000", debug_opt=""):
+        cmdline = "%s --port:%s %s" % (stub_app, stub_port, debug_opt)
+        exit_code, ret = self.shell_cmd(cmdline)
+        time.sleep(2)
+
+    def check_widget_process(self, wgt_name):
+        return True
+
+    def shell_cmd_ext(self,
+                      cmd="",
+                      timeout=None,
+                      boutput=False,
+                      stdout_file=None,
+                      stderr_file=None):
+        return shell_command_ext(cmd, timeout, boutput, stdout_file, stderr_file)
+
+    def get_device_ids(self):
+        """
+            get device list of ids
+        """
+        return ['localhost']
+
+    def get_device_info(self):
+        """
+            get tizen device inforamtion
+        """
+        device_info = {}
+        device_info["device_id"] = self.deviceid
+        device_info["resolution"] = "N/A"
+        device_info["screen_size"] = "N/A"
+        device_info["device_model"] = "N/A"
+        device_info["device_name"] = "N/A"
+        device_info["os_version"] = "N/A"
+        device_info["build_id"] = "N/A"
+        return device_info
+
+    def get_server_url(self, remote_port="8000"):
+        """get server url"""
+        url_forward = "http://%s:%s" % (HOST_NS, remote_port)
+        return url_forward
+
+    def install_package(self, pkgpath):
+        """
+           install a package on tizen device
+        """
+        cmd = "rpm -ivh %s" % pkgpath
+        exit_code, ret = shell_command(cmd)
+        return ret
+
+    def get_installed_package(self):
+        """get list of installed package from device"""
+        cmd = "rpm -qa | grep tct"
+        exit_code, ret = shell_command(cmd)
+        return ret
+
+    def download_file(self, remote_path, local_path):
+        """download file"""
+        # copyfile(remote_path, local_path)
+        # return True
+        return False
+
+    def upload_file(self, remote_path, local_path):
+        """upload file"""
+        # copyfile(local_path, remote_path)
+        return False
+
+    def get_launcher_opt(self, test_launcher, test_suite, test_set, fuzzy_match, auto_iu):
+        """get test option dict """
+        test_opt = {}
+        test_opt["suite_name"] = test_suite
+        test_opt["launcher"] = test_launcher
+        test_opt["test_app_id"] = test_launcher
+        return test_opt
+
+    def launch_app(self, wgt_name):
+        exit_code, ret = shell_command(wgt_name + '&')
+        return True
+
+    def kill_app(self, wgt_name):
+        return True
+
+    def start_debug(self, dlogfile):
+        pass
+
+    def stop_debug(self):
+        pass
+
+
+def get_target_conn():
+    """ Get connection for Test Target"""
+    return LocalHost()
diff --git a/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite1.0/commodule/impl/tizenmobile.py b/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite1.0/commodule/impl/tizenmobile.py
new file mode 100755 (executable)
index 0000000..a72ad59
--- /dev/null
@@ -0,0 +1,467 @@
+#!/usr/bin/python
+#
+# Copyright (C) 2012 Intel Corporation
+#
+# 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
+# of the License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+# MA  02110-1301, USA.
+#
+# Authors:
+#           Chengtao,Liu  <chengtaox.liu@intel.com>
+
+""" The implementation of TIZEN mobile communication"""
+
+import os
+import time
+import socket
+import threading
+import re
+import shutil
+import ConfigParser
+import platform
+import xml.etree.ElementTree as etree
+
+from commodule.log import LOGGER
+from commodule.autoexec import shell_command, shell_command_ext
+from commodule.killall import killall
+
+TCT_CONFIG_FILE = "/opt/tools/TCT_CONFIG"
+tct_parser = ConfigParser.ConfigParser()
+tct_parser.read(TCT_CONFIG_FILE)
+
+DEVICE_SUITE_TARGET_24 = tct_parser.get('DEVICE', 'DEVICE_SUITE_TARGET_24')
+DEVICE_SUITE_TARGET_30 = tct_parser.get('DEVICE', 'DEVICE_SUITE_TARGET_30')
+
+LOCAL_HOST_NS = "127.0.0.1"
+RPM_INSTALL = "sdb -s %s shell rpm -ivh %s"
+RPM_UNINSTALL = "sdb -s %s shell rpm -e %s"
+RPM_LIST = "sdb -s %s shell \"rpm -qa|grep tct\""
+APP_QUERY_STR = "sdb -s %s shell \"ps aux|grep '%s'|grep -v grep\"|awk '{print $2}'"
+APP_KILL_STR = "sdb -s %s shell kill -9 %s"
+WRT_QUERY_STR = "sdb -s %s shell wrt-launcher -l | grep '%s'|awk '{print $2\":\"$NF}'"
+WRT_START_STR = "sdb -s %s shell 'wrt-launcher -s %s; echo returncode=$?'"
+WRT_STOP_STR = "sdb -s %s shell wrt-launcher -k %s"
+WRT_INSTALL_STR = "sdb -s %s shell pkgcmd -i -t wgt -q -p %s"
+WRT_UNINSTL_STR = "sdb -s %s shell pkgcmd -u -t wgt -q -n %s"
+WRT_SMOCK_STR = "sdb -s %s shell 'echo \"%s sdbd rw\" | smackload'"
+WRT_SMOCK_REV_STR = "sdb -s %s shell 'echo \"sdbd %s rw\" | smackload'"
+WRT_LOCATION = os.path.join(DEVICE_SUITE_TARGET_24, "tct/opt/%s/%s.wgt")
+DLOG_CLEAR = "sdb -s %s shell dlogutil -c"
+DLOG_WRT = "sdb -s %s shell dlogutil -v threadtime"
+
+SDB_COMMAND_RTN =  "sdb -s %s shell '%s; echo returncode=$?'"
+
+# redefine constants for windows
+if platform.system() == "Windows":
+    WRT_START_STR = 'sdb -s %s shell "wrt-launcher -s %s; echo returncode=$?"'
+    SDB_COMMAND_RTN =  'sdb -s %s shell "%s; echo returncode=$?"'
+
+def debug_trace(cmdline, logfile):
+    global debug_flag, metux
+    wbuffile = file(logfile, "w")
+    import subprocess
+    exit_code = None
+    proc = subprocess.Popen(args=cmdline,
+                            shell=True,
+                            stdout=wbuffile,
+                            stderr=None)
+    while True:
+        exit_code = proc.poll()
+        if exit_code is not None:
+            break
+        time.sleep(0.5)
+        metux.acquire()
+        proc_flag = debug_flag
+        metux.release()
+        if not proc_flag:
+            break
+    wbuffile.close()
+    if exit_code is None:
+        killall(proc.pid)
+
+
+def _get_device_ids():
+    """get tizen device list of ids"""
+    result = []
+    exit_code, ret = shell_command("sdb devices")
+    for line in ret:
+        if str.find(line, "\tdevice") != -1:
+            result.append(line.split("\t")[0])
+    return result
+
+
+class TizenMobile:
+
+    """
+    Implementation for transfer data
+    between Host and Tizen Mobile Device
+    """
+
+    def __init__(self, device_id=None):
+        self.deviceid = device_id
+        self.is_NE = 0
+        if self.deviceid and self.deviceid.find('NE') > -1:
+            self.is_NE = int(self.deviceid.split(':')[1].split('_')[0])
+            self.deviceid = self.deviceid.split('_')[1]
+        
+        self._wrt = False
+
+    def is_NE_mode(self):
+        return self.is_NE
+
+    def get_devid(self):
+        return self.deviceid
+
+    def shell_cmd(self, cmd="", timeout=15):
+        cmdline = "sdb -s %s shell \"%s\" " % (self.deviceid, cmd)
+        return shell_command(cmdline, timeout)
+
+    def check_process(self, process_name):
+        exit_code, ret = shell_command(
+            APP_QUERY_STR % (self.deviceid, process_name))
+        return len(ret)
+
+    def launch_stub(self, stub_app, stub_port, debug_opt=""):
+        cmdline = "/opt/home/developer/%s --port:%s %s; sleep 2s" \
+                % (stub_app, stub_port, debug_opt)
+        exit_code, ret = self.shell_cmd(cmdline)
+        time.sleep(2)
+
+    def shell_cmd_ext(self,
+                      cmd="",
+                      timeout=None,
+                      boutput=False,
+                      stdout_file=None,
+                      stderr_file=None):
+            
+        cmdline = SDB_COMMAND_RTN % (
+            self.deviceid, cmd)
+        return shell_command_ext(cmdline, timeout, boutput, \
+                stdout_file, stderr_file)
+
+    def get_device_info(self):
+        """get tizen device inforamtion"""
+        device_info = {}
+        resolution_str = ""
+        screen_size_str = ""
+        device_model_str = ""
+        device_name_str = ""
+        build_id_str = ""
+        os_version_str = ""
+
+        # get resolution and screen size
+        exit_code, ret = shell_command(
+            "sdb -s %s shell xrandr" % self.deviceid)
+        pattern = re.compile("connected (\d+)x(\d+).* (\d+mm) x (\d+mm)")
+        for line in ret:
+            match = pattern.search(line)
+            if match:
+                resolution_str = "%s x %s" % (match.group(1), match.group(2))
+                screen_size_str = "%s x %s" % (match.group(3), match.group(4))
+
+        # get architecture
+        exit_code, ret = shell_command(
+            "sdb -s %s shell uname -m" % self.deviceid)
+        if len(ret) > 0:
+            device_model_str = ret[0]
+
+        # get hostname
+        exit_code, ret = shell_command(
+            "sdb -s %s shell uname -n" % self.deviceid)
+        if len(ret) > 0:
+            device_name_str = ret[0]
+
+        # get os version
+        exit_code, ret = shell_command(
+            "sdb -s %s shell cat /etc/issue" % self.deviceid)
+        for line in ret:
+            if len(line) > 1:
+                os_version_str = "%s %s" % (os_version_str, line)
+
+        # get build id
+        exit_code, ret = shell_command(
+            "sdb -s %s shell cat /etc/os-release" % self.deviceid)
+        for line in ret:
+            if line.find("BUILD_ID=") != -1:
+                build_id_str = line.split('=')[1].strip('\"\r\n')
+
+        os_version_str = os_version_str[0:-1]
+
+        device_info["device_id"] = self.deviceid
+        device_info["resolution"] = resolution_str
+        device_info["screen_size"] = screen_size_str
+        device_info["device_model"] = device_model_str
+        device_info["device_name"] = device_name_str
+        device_info["os_version"] = os_version_str
+        device_info["build_id"] = build_id_str
+        return device_info
+
+    def get_buildinfo(self, _tizenV):
+        """ get builf info"""
+        device_file = ""
+        if _tizenV and _tizenV.find("3.0") > -1:
+            device_file = DEVICE_SUITE_TARGET_30 + '/Documents/tct/buildinfo.xml'
+        elif _tizenV and _tizenV.find("4.0") > -1:
+            device_file = DEVICE_SUITE_TARGET_30 + '/Documents/tct/buildinfo.xml'
+        elif _tizenV and _tizenV.find("5.0") > -1:
+            device_file = DEVICE_SUITE_TARGET_30 + '/Documents/tct/buildinfo.xml'
+        elif _tizenV and _tizenV.find("5.5") > -1:
+            device_file = DEVICE_SUITE_TARGET_30 + '/Documents/tct/buildinfo.xml'
+        else:
+            device_file = DEVICE_SUITE_TARGET_24 + '/Documents/tct/buildinfo.xml'
+
+        builfinfo_file = '/opt/testkit/lite2.4/' + self.deviceid + '/buildinfo.xml'
+        build_info = {}
+        build_info['buildid'] = ''
+        build_info['manufacturer'] = ''
+        build_info['model'] = ''
+
+        if self.download_file(device_file, builfinfo_file) \
+            and os.path.exists(builfinfo_file):
+            root = etree.parse(builfinfo_file).getroot()
+            for element in root.findall("buildinfo"):
+                if element is not None:
+                    if element.get("name").lower() == 'buildversion':
+                        child = etree.Element.getchildren(element)
+                        if child and child[0].text:
+                            buildid = child[0].text
+                            build_info['buildid'] = buildid
+                    if element.get("name").lower() == 'manufacturer':
+                        child = etree.Element.getchildren(element)
+                        if child and child[0].text:
+                            manufacturer = child[0].text
+                            build_info['manufacturer'] = manufacturer
+                    if element.get("name").lower() == 'model':
+                        child = etree.Element.getchildren(element)
+                        if child and child[0].text:
+                            model = child[0].text
+                            build_info['model'] = model
+            os.remove(builfinfo_file)
+        return build_info
+
+
+    def get_server_url(self, remote_port="8000"):
+        """forward request a host tcp port to targe tcp port"""
+        if remote_port is None:
+            return None
+
+        os.environ['no_proxy'] = LOCAL_HOST_NS
+        host = LOCAL_HOST_NS
+        inner_port = 9000
+        time_out = 2
+        bflag = False
+        while True:
+            sock_inner = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
+            sock_inner.settimeout(time_out)
+            try:
+                sock_inner.bind((host, inner_port))
+                sock_inner.close()
+                bflag = False
+            except socket.error as error:
+                if error.errno == 98 or error.errno == 13:
+                    bflag = True
+            if bflag:
+                inner_port += 1
+            else:
+                break
+        host_port = str(inner_port)
+        cmd = "sdb -s %s forward tcp:%s tcp:%s" % \
+            (self.deviceid, host_port, remote_port)
+        exit_code, ret = shell_command(cmd)
+        url_forward = "http://%s:%s" % (host, host_port)
+        return url_forward
+
+    def download_file(self, remote_path, local_path):
+        """download file from device"""
+            
+        local_path_dir = os.path.dirname(local_path)
+        if not os.path.exists(local_path_dir):
+            os.makedirs(local_path_dir)
+        filename = os.path.basename(remote_path)
+        cmd = "sdb -s %s pull %s %s" % (
+            self.deviceid, remote_path, local_path_dir)
+        exit_code, ret = shell_command(cmd)
+        if exit_code != 0:
+            error = ret[0].strip('\r\n') if len(ret) else "sdb shell timeout"
+            LOGGER.info("[ Download file \"%s\" failed, error: %s ]"
+                        % (remote_path, error))
+            return False
+        else:
+            src_path = os.path.join(local_path_dir, filename)
+            if src_path != local_path:
+                shutil.move(src_path, local_path)
+            return True
+
+    def upload_file(self, remote_path, local_path):
+        """upload file to device"""
+        cmd = "sdb -s %s push %s %s" % (self.deviceid, local_path, remote_path)
+        exit_code, ret = shell_command(cmd)
+        if exit_code != 0:
+            error = ret[0].strip('\r\n') if len(ret) else "sdb shell timeout"
+            LOGGER.info("[ Upload file \"%s\" failed,"
+                        " get error: %s ]" % (local_path, error))
+            return False
+        else:
+            return True
+
+    def get_launcher_opt(self, test_launcher, test_suite, test_set, \
+            fuzzy_match, auto_iu):
+        """
+        get test option dict
+        """
+        test_opt = {}
+        test_opt["suite_name"] = test_suite
+        test_opt["launcher"] = test_launcher
+        test_opt["test_app_id"] = test_launcher
+        self._wrt = False
+        if test_launcher.find('WRTLauncher') != -1:
+            self._wrt = True
+            cmd = ""
+            test_app_id = None
+            test_opt["launcher"] = "wrt-launcher"
+            # test suite need to be installed by commodule
+            if auto_iu:
+                test_wgt = test_set
+                test_wgt_path = WRT_LOCATION % (test_suite, test_wgt)
+                if not self.install_app(test_wgt_path):
+                    LOGGER.info("[ failed to install widget \"%s\" in target ]"
+                                % test_wgt)
+                    return None
+            else:
+                test_wgt = test_suite
+
+            # query the whether test widget is installed ok
+            cmd = WRT_QUERY_STR % (self.deviceid, test_wgt)
+            exit_code, ret = shell_command(cmd)
+            if exit_code == -1:
+                return None
+            for line in ret:
+                items = line.split(':')
+                if len(items) < 1:
+                    continue
+                if (fuzzy_match and items[0].find(test_wgt) != -1) \
+                        or items[0] == test_wgt:
+                    test_app_id = items[1].strip('\r\n')
+                    break
+
+            if test_app_id is None:
+                LOGGER.info("[ test widget \"%s\" not found in target ]"
+                            % test_wgt)
+                return None
+            else:
+                test_opt["test_app_id"] = test_app_id
+
+            cmd1 = WRT_SMOCK_STR % (self.deviceid, test_app_id.split('.')[0])
+            cmd2 = WRT_SMOCK_REV_STR % \
+                    (self.deviceid, test_app_id.split('.')[0])
+            shell_command(cmd1)
+            shell_command(cmd2)
+
+        return test_opt
+
+    def install_package(self, pkgpath):
+        """install a package on tizen device:
+        push package and install with shell command
+        """
+        cmd = RPM_INSTALL % (self.deviceid, pkgpath)
+        exit_code, ret = shell_command(cmd)
+        return ret
+
+    def uninstall_package(self, pkgname):
+        """install a package on tizen device:
+        push package and install with shell command
+        """
+        cmd = RPM_UNINSTALL % (self.deviceid, pkgname)
+        exit_code, ret = shell_command(cmd)
+        return ret
+
+    def get_installed_package(self):
+        """get list of installed package from device"""
+        cmd = RPM_LIST % self.deviceid
+        exit_code, ret = shell_command(cmd)
+        return ret
+    def start_debug(self, dlogfile):
+        global debug_flag, metux
+        if self.is_NE_mode():
+            return 
+        debug_flag = True
+        metux = threading.Lock()
+        cmdline = DLOG_CLEAR % self.deviceid
+        exit_code, ret = shell_command(cmdline)
+        cmdline = DLOG_WRT % self.deviceid
+        LOGGER.debug("[ DLOGFILE_PATH:%s ]" % str(dlogfile))
+        th = threading.Thread(target=debug_trace, args=(cmdline, dlogfile))
+        th.setDaemon(True)
+        th.start()
+
+    def stop_debug(self):
+        global debug_flag, metux
+        if self.is_NE_mode():
+            return 
+
+        metux.acquire()
+        debug_flag = False
+        metux.release()
+
+    def launch_app(self, wgt_name):
+        if not self._wrt:
+            exit_code, ret = self.shell_cmd(wgt_name)
+            return True
+        timecnt = 0
+        blauched = False
+        cmdline = WRT_STOP_STR % (self.deviceid, wgt_name)
+        exit_code, ret = shell_command(cmdline)
+        cmdline = WRT_START_STR % (self.deviceid, wgt_name)
+        while timecnt < 3:
+            exit_code, ret_out, ret_err = shell_command_ext(cmdline, 30)
+            if exit_code == "0":
+                blauched = True
+                break
+            timecnt += 1
+            time.sleep(3)
+        return blauched
+
+    def kill_app(self, wgt_name):
+        if not self._wrt:
+            return True
+        cmdline = WRT_STOP_STR % (self.deviceid, wgt_name)
+        exit_code, ret = shell_command(cmdline)
+        return True
+
+    def install_app(self, wgt_path="", timeout=90):
+        cmd = WRT_INSTALL_STR % (self.deviceid, wgt_path)
+        exit_code, ret = shell_command(cmd, timeout)
+        if exit_code == -1:
+            cmd = APP_QUERY_STR % (self.deviceid, wgt_path)
+            exit_code, ret = shell_command(cmd)
+            for line in ret:
+                cmd = APP_KILL_STR % (self.deviceid, line.strip('\r\n'))
+                exit_code, ret = shell_command(cmd)
+            return False
+        else:
+            return True
+
+    def uninstall_app(self, wgt_name):
+        cmd = WRT_UNINSTL_STR % (self.deviceid, wgt_name.split('.')[0])
+        exit_code, ret = shell_command(cmd)
+        return True
+
+
+def get_target_conn(device_id=None):
+    """ Get connection for Test Target"""
+    if device_id is None:
+        dev_list = _get_device_ids()
+        device_id = dev_list[0] if len(dev_list) else None
+    return TizenMobile(device_id)
diff --git a/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite1.0/commodule/killall.py b/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite1.0/commodule/killall.py
new file mode 100755 (executable)
index 0000000..28f6070
--- /dev/null
@@ -0,0 +1,74 @@
+#!/usr/bin/python
+#
+# Copyright (C) 2012 Intel Corporation
+#
+# 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
+# of the License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor,
+# Boston, MA  02110 - 1301, USA.
+#
+# Authors:
+#              Zhang, Huihui <huihuix.zhang@intel.com>
+#              Wendong,Sui  <weidongx.sun@intel.com>
+""" The process kill for os"""
+
+import os
+import platform
+import signal
+import re
+import ctypes
+
+
+def killall(ppid):
+    """Kill all children process by parent process ID"""
+    os_ver = platform.system()
+    try:
+        if os_ver == "Linux" or os_ver == "Darwin":
+            ppid = str(ppid)
+            pidgrp = []
+
+            def getchildpids(ppid):
+                """Return a list of children process"""
+                command = "ps -ef | awk '{if ($3 == %s) print $2;}'" % str(
+                    ppid)
+                pids = os.popen(command).read()
+                pids = pids.split()
+                return pids
+
+            pidgrp.extend(getchildpids(ppid))
+            for pid in pidgrp:
+                pidgrp.extend(getchildpids(pid))
+            # Insert self process ID to PID group list
+            pidgrp.insert(0, ppid)
+            while len(pidgrp) > 0:
+                pid = pidgrp.pop()
+                try:
+                    os.kill(int(pid), signal.SIGKILL)
+                except OSError, error:
+                    pattern = re.compile('No such process')
+                    match = pattern.search(str(error))
+                    if not match:
+                        print "[ Error: fail to kill pid: %s," \
+                            " error: %s ]\n" % (int(pid), error)
+        # kill for windows platform
+        else:
+            kernel32 = ctypes.windll.kernel32
+            handle = kernel32.OpenProcess(1, 0, int(ppid))
+            kernel32.TerminateProcess(handle, 0)
+    except OSError, error:
+        pattern = re.compile('No such process')
+        match = pattern.search(str(error))
+        if not match:
+            print "[ Error: fail to kill pid: %s, error: %s ]\n" \
+                % (int(ppid), error)
+    return None
diff --git a/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite1.0/commodule/killall.pyc b/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite1.0/commodule/killall.pyc
new file mode 100755 (executable)
index 0000000..edbc428
Binary files /dev/null and b/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite1.0/commodule/killall.pyc differ
diff --git a/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite1.0/commodule/log.py b/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite1.0/commodule/log.py
new file mode 100755 (executable)
index 0000000..8c4fee6
--- /dev/null
@@ -0,0 +1,101 @@
+#!/usr/bin/python
+#
+# Copyright (C) 2013 Intel Corporation
+#
+# 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
+# of the License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor,
+# Boston, MA  02110-1301, USA.
+#
+# Authors:
+#              Liu,chengtao <liux.chengtao@intel.com>
+"""General Implementation"""
+
+import threading
+import logging
+import logging.handlers
+import sys
+import os
+
+# logger levels
+LEVELS = {"CRITICAL": 50,
+          "ERROR": 40,
+          "WARNING": 30,
+          "INFO": 20,
+          "DEBUG": 10,
+          "NOTSET": 0
+          }
+
+
+class Logger:
+
+    """General Logger Class"""
+    _instance = None
+    _mutex = threading.Lock()
+
+    def __init__(self, level="DEBUG", format_str="%(message)s"):
+        """Generate root logger"""
+        self._logger = logging.getLogger("TCT")
+        self._logger.setLevel(LEVELS[level])
+        self._formatter = logging.Formatter(format_str)
+        self.add_print_logger()
+
+    def add_print_logger(self, level="INFO"):
+        """Generate console writer [StreamHandler]"""
+        writer = logging.StreamHandler(sys.stdout)
+        writer.setLevel(LEVELS[level])
+        writer.setFormatter(self._formatter)
+        self._logger.addHandler(writer)
+
+    @staticmethod
+    def get_logger(level="DEBUG", format_str="%(message)s"):
+        """sinlgeton of Logger"""
+        if Logger._instance is None:
+            Logger._mutex.acquire()
+            if Logger._instance is None:
+                Logger._instance = Logger(level, format_str)
+            else:
+                pass
+            Logger._mutex.release()
+        return Logger._instance
+
+    def debug(self, msg):
+        """debug level message"""
+        if msg is not None:
+            sys.stdout.write(msg + '\r\n')
+            sys.stdout.flush()
+
+    def info(self, msg):
+        """info level message"""
+        if msg is not None:
+            sys.stdout.write(msg + '\r\n')
+            sys.stdout.flush()
+
+    def warning(self, msg):
+        """warning level message"""
+        if msg is not None:
+            self._logger.warning(msg)
+
+    def error(self, msg):
+        """error level message"""
+        if msg is not None:
+            sys.stdout.write(msg + '\r\n')
+            sys.stdout.flush()
+
+    def critical(self, msg):
+        """critical level message"""
+        if msg is not None:
+            self._logger.critical(msg)
+
+
+LOGGER = Logger.get_logger(level=os.environ.get('LOG_LEVEL', 'INFO'))
diff --git a/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite1.0/commodule/log.pyc b/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite1.0/commodule/log.pyc
new file mode 100755 (executable)
index 0000000..772cafe
Binary files /dev/null and b/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite1.0/commodule/log.pyc differ
diff --git a/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite1.0/commodule/str2.py b/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite1.0/commodule/str2.py
new file mode 100755 (executable)
index 0000000..96ecdc7
--- /dev/null
@@ -0,0 +1,71 @@
+#!/usr/bin/python
+#
+# Copyright (C) 2012 Intel Corporation
+#
+# 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
+# of the License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+# MA  02110-1301, USA.
+#
+# Authors:
+#              Zhang, Huihui <huihuix.zhang@intel.com>
+#              Wendong,Sui  <weidongx.sun@intel.com>
+""" string convertor"""
+
+from types import IntType, FloatType, LongType
+import string
+
+
+def str2str(src):
+    """string to printable string"""
+    if isinstance(src, unicode):
+        return src.encode("utf8")
+
+    if isinstance(src, str):
+        accept = string.punctuation + string.letters + string.digits + ' \r\n'
+        return filter(lambda x: x in accept, src)
+
+    return ""
+
+
+def str2val(src):
+    """string to program value"""
+    ret = None
+    try:
+        ret = eval(str2str(src))
+    except:
+        pass
+    return ret
+
+
+def str2bool(src):
+    """string to boolean"""
+    if "TRUE" == str2str(src).upper():
+        return True
+    if "FALSE" == str2str(src).upper():
+        return False
+    return None
+
+
+def str2number(src):
+    """string to boolean"""
+    val = str2val(str2str(src))
+    if type(val) in [IntType, FloatType, LongType]:
+        return val
+    else:
+        return None
+
+
+def str2xmlstr(src):
+    """string to xml string value"""
+    return src.replace('\n', '\\n')
diff --git a/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite1.0/commodule/str2.pyc b/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite1.0/commodule/str2.pyc
new file mode 100755 (executable)
index 0000000..1605ae2
Binary files /dev/null and b/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite1.0/commodule/str2.pyc differ
diff --git a/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite1.0/debian/changelog b/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite1.0/debian/changelog
new file mode 100755 (executable)
index 0000000..a7ad288
--- /dev/null
@@ -0,0 +1,5 @@
+testkit-lite (2.3.22) unstable; urgency=low
+
+  * TCT2.3 Release.
+
+ -- ChengTao Liu <chengtaox.liu@intel.com>  Mon, 4 Nov 2013 11:13:11 +0800
diff --git a/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite1.0/debian/compat b/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite1.0/debian/compat
new file mode 100755 (executable)
index 0000000..45a4fb7
--- /dev/null
@@ -0,0 +1 @@
+8
diff --git a/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite1.0/debian/control b/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite1.0/debian/control
new file mode 100755 (executable)
index 0000000..a30c031
--- /dev/null
@@ -0,0 +1,16 @@
+Source: testkit-lite
+Section: utils
+Priority: standard
+Maintainer: Cathy Shen <cathy.shen@intel.com>
+Build-Depends: debhelper (>= 8.0.0), python-setuptools, python-support (>= 0.8.4)
+Standards-Version: 3.9.3
+Homepage: https://github.com/testkit/testkit-lite
+#Vcs-Git: git://git.debian.org/collab-maint/testkit-manager.git
+#Vcs-Browser: http://git.debian.org/?p=collab-maint/testkit-manager.git;a=summary
+
+Package: testkit-lite
+Architecture: all
+Depends: ${misc:Depends}, ${python:Depends}
+XB-Python-Version: ${python:Versions}
+Description: Test runner for test execution.
+
diff --git a/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite1.0/debian/copyright b/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite1.0/debian/copyright
new file mode 100755 (executable)
index 0000000..71edd1c
--- /dev/null
@@ -0,0 +1,27 @@
+Format: http://dep.debian.net/deps/dep5
+Source: https://github.com/testkit/testkit-lite
+
+Files: *
+Copyright: 2012-2013 Intel Corp. 
+License: GPL-2.0
+
+Files: debian/*
+Copyright: 2012-2013 Intel Corp.
+License: GPL-2.0
+
+License: GPL-2.0
+ 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 of the License
+ .
+ This package is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ GNU General Public License for more details.
+ .
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+ .
+ On Debian systems, the complete text of the GNU General
+ Public License version 3 can be found in "/usr/share/common-licenses/GPL-3".
+
diff --git a/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite1.0/debian/docs b/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite1.0/debian/docs
new file mode 100755 (executable)
index 0000000..e845566
--- /dev/null
@@ -0,0 +1 @@
+README
diff --git a/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite1.0/debian/files b/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite1.0/debian/files
new file mode 100755 (executable)
index 0000000..c282b42
--- /dev/null
@@ -0,0 +1 @@
+testkit-lite_2.3.20_all.deb utils standard
diff --git a/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite1.0/debian/postinst b/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite1.0/debian/postinst
new file mode 100755 (executable)
index 0000000..1712e40
--- /dev/null
@@ -0,0 +1,8 @@
+#!/bin/sh
+
+# Set permissions
+mkdir /opt/testkit/lite2.4/test_packages
+chmod ugo+rwx -R /opt/testkit/lite2.4
+ln -fs /usr/share/pyshared/commodule /usr/lib/python2.7/dist-packages/commodule
+ln -fs /usr/share/pyshared/testkitlite /usr/lib/python2.7/dist-packages/testkitlite
+
diff --git a/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite1.0/debian/rules b/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite1.0/debian/rules
new file mode 100755 (executable)
index 0000000..abde6ef
--- /dev/null
@@ -0,0 +1,5 @@
+#!/usr/bin/make -f
+
+%:
+       dh $@
+
diff --git a/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite1.0/doc/Makefile.am b/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite1.0/doc/Makefile.am
new file mode 100755 (executable)
index 0000000..fd6a597
--- /dev/null
@@ -0,0 +1,22 @@
+# Copyright (C) 2012 Intel Corporation
+# 
+# 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
+# of the License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
+#
+# Authors:
+#              Zhang, Huihui <huihuix.zhang@intel.com>
+#              Wendong,Sui  <weidongx.sun@intel.com>
+
+testkitdocdir = /opt/testkit/lite2.4/doc
+dist_testkitdoc_DATA = testkit-lite_user_guide_for_tct.pdf
diff --git a/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite1.0/doc/testkit-lite_user_guide.pdf b/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite1.0/doc/testkit-lite_user_guide.pdf
new file mode 100755 (executable)
index 0000000..95af88e
Binary files /dev/null and b/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite1.0/doc/testkit-lite_user_guide.pdf differ
diff --git a/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite1.0/doc/testkit-lite_user_guide_for_tct.pdf b/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite1.0/doc/testkit-lite_user_guide_for_tct.pdf
new file mode 100755 (executable)
index 0000000..c0d9323
Binary files /dev/null and b/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite1.0/doc/testkit-lite_user_guide_for_tct.pdf differ
diff --git a/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite1.0/packaging/Makefile b/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite1.0/packaging/Makefile
new file mode 100755 (executable)
index 0000000..24da850
--- /dev/null
@@ -0,0 +1,21 @@
+PKG_NAME := testkit-lite
+SPECFILE = $(addsuffix .spec, $(PKG_NAME))
+PKG_VERSION := $(shell grep '^Version: ' $(SPECFILE)|awk '{print $$2}')
+
+TARBALL := $(PKG_NAME)_$(PKG_VERSION).tar.gz
+
+dsc: $(TARBALL)
+               $(eval MD5=$(shell md5sum $(TARBALL) | sed "s/  / $(shell stat -c '%s' $(TARBALL)) /"))
+                       @sed  -i 's/^Version:.*/Version: $(PKG_VERSION)/' $(PKG_NAME).dsc
+                       @sed  -i 's/ [a-f0-9]\+ [0-9]\+ $(PKG_NAME).*tar.*/ $(MD5)/' $(PKG_NAME).dsc
+
+$(TARBALL):
+               cd "$$(git rev-parse --show-toplevel)" \
+                       && git archive --prefix $(PKG_NAME)-$(PKG_VERSION)/ HEAD \
+                       | gzip > "$(CURDIR)/$(TARBALL)"
+
+clean:
+               rm -f $(PKG_NAME)*.tar.gz
+
+all: clean dsc
+
diff --git a/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite1.0/packaging/testkit-lite.dsc b/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite1.0/packaging/testkit-lite.dsc
new file mode 100755 (executable)
index 0000000..bc65561
--- /dev/null
@@ -0,0 +1,11 @@
+Source: testkit-lite
+Section: utils
+Priority: standard
+Maintainer: Lei Yang <lei.a.yang@intel.com>
+Build-Depends: debhelper (>= 8.0.0), python-setuptools, python-support (>= 0.8.4)
+Standards-Version: 3.9.2
+Homepage: https://github.com/testkit/testkit-manager
+Version: 2.3.4
+Files:
+ 82c2118d146839ec9139559f5049d2bf 6361871 testkit-lite_2.3.4.tar.gz
+
diff --git a/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite1.0/packaging/testkit-lite.spec b/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite1.0/packaging/testkit-lite.spec
new file mode 100755 (executable)
index 0000000..f7750f3
--- /dev/null
@@ -0,0 +1,47 @@
+Summary: TCT-Lite
+Name: testkit-lite
+Version: 2.3.22
+Release: 1
+License: GPLv2
+Group: Applications/System
+Source: %{name}_%{version}.tar.gz
+
+BuildRequires: python-distribute
+
+%{!?python_sitelib: %define python_sitelib %(python -c "from distutils.sysconfig import get_python_lib; print get_python_lib()")}
+
+%description
+testkit-lite is a test runner with command-line interface.It has the following functions 
+1. Accepts .xml test case descriptor files as input. 
+2. drives automatic test execution. 
+3. provide multiple options to meet various test requirements. 
+
+%prep
+%setup -q
+
+%build
+
+%install
+python setup.py install --prefix=%{_prefix} --root=%{buildroot}
+# remove tests
+rm -rf %{buildroot}/%{python_sitelib}/tests
+
+%clean
+rm -rf %{buildroot}
+
+%post
+# Set permissions
+chmod ugo+rwx /opt/testkit/lite2.4
+
+%files
+%{python_sitelib}/testkitlite/*
+%{python_sitelib}/commodule/*
+%{python_sitelib}/testkit_lite-*.egg-info/*
+/opt/testkit/lite2.4/VERSION
+%{_bindir}/testkit-lite
+%defattr(-,root,root)
+
+%doc
+/opt/testkit/lite2.4/testkit-lite_user_guide_for_tct.pdf
+
+%changelog
diff --git a/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite1.0/setup.py b/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite1.0/setup.py
new file mode 100755 (executable)
index 0000000..9f6d7f6
--- /dev/null
@@ -0,0 +1,17 @@
+#!/usr/bin/python
+
+from setuptools import setup, find_packages
+
+setup(
+    name = "testkit-lite",
+    description = "Test runner for test execution",
+    url = "https://github.com/testkit/testkit-lite",
+    author = "Cathy Shen",
+    author_email = "cathy.shen@intel.com",
+    version = "2.3.22",
+    include_package_data = True,
+    data_files = [('/opt/testkit/lite2.4/',
+                 ('VERSION', 'doc/testkit-lite_user_guide_for_tct.pdf'))],
+    scripts = ('testkit-lite',),
+    packages = find_packages(),
+)
diff --git a/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite1.0/temp/temp b/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite1.0/temp/temp
new file mode 100755 (executable)
index 0000000..e69de29
diff --git a/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite1.0/testkit-lite b/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite1.0/testkit-lite
new file mode 100755 (executable)
index 0000000..3d058ae
--- /dev/null
@@ -0,0 +1,567 @@
+#!/usr/bin/python
+#
+# Copyright (C) 2012 Intel Corporation
+#
+# 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
+# of the License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
+# USA.
+#
+# Authors:
+#              Jing,Wang  <jing.j.wang@intel.com>
+#              Yuanyuan,Zou  <zouyuanx@intel.com>
+""" testkit lite tools"""
+
+import os
+import sys
+import traceback
+import platform
+import ConfigParser
+import re
+import xml.etree.ElementTree as etree
+from optparse import OptionParser, make_option
+from datetime import datetime
+
+# import logger
+try:
+    from commodule.log import LOGGER
+except ImportError, err:
+    print "[ Error: loading logging failed, error: %s ]\n" % err
+    print "try to run command " \
+        "'export PYTHONPATH=/usr/lib/python2.7/dist-packages' and " \
+        "'export PYTHONPATH=/usr/share/pyshared/' to resolve this issue"
+    sys.exit(1)
+
+# import  process kill
+try:
+    from testkitlite.common.process_killall import kill_testkit_lite, clean_testxml
+except ImportError, err:
+    LOGGER.error("[ Error: loading module killall failed, error: %s ]\n" % err)
+    LOGGER.info("try to run command \
+'export PYTHONPATH=/usr/lib/python2.7/dist-packages' and \
+'export PYTHONPATH=/usr/share/pyshared/' to resolve this issue")
+    sys.exit(1)
+
+# get platform version info
+os_ver = platform.system()
+JOIN = os.path.join
+EXISTS = os.path.exists
+DIRNAME = os.path.dirname
+BASENAME = os.path.basename
+ABSPATH = os.path.abspath
+SPLIT = os.path.split
+ISLINK = os.path.islink
+
+NOW = datetime.now().strftime("%Y-%m-%d_%H_%M_%S")+ str(os.getpid())
+TESTKIT_DIR = "/opt/testkit/lite2.4"
+if not os_ver == "Linux" and not os_ver == "Darwin":
+    TESTKIT_DIR = DIRNAME(ABSPATH(__file__))
+    sys.path += [JOIN(TESTKIT_DIR)]
+    TESTKIT_DIR = JOIN(TESTKIT_DIR, "results")
+
+LOG_DIR = TESTKIT_DIR
+NOW_DIR = JOIN(LOG_DIR, NOW)
+PID_FILE = JOIN(NOW_DIR, "pid.log")
+TEST_PACKAGES_DIR = JOIN(NOW_DIR, "test_packages")
+
+if not EXISTS(NOW_DIR):
+       os.makedirs(NOW_DIR)
+
+#LOGGER.info("\nNOW:%s\n NOW_DIR:%s\n TESTKIT_DIR:%s\n LOG_DIR:%s\n PID_FILE:%s\n TEST_PACKAGES_DIR:%s\n"% (NOW, NOW_DIR, TESTKIT_DIR, LOG_DIR, PID_FILE, TEST_PACKAGES_DIR))
+COMMON_FILTERS = {
+    "suite": [],
+    "set": [],
+    "priority": [],
+    "id": [],
+    "type": [],
+    "component": []}
+down_status = False
+remote_test = False
+can_merge_result = False
+
+# start testkit-lite in Singleton mode
+#kill_testkit_lite(PID_FILE)
+
+if not os_ver == "Linux" and not os_ver == "Darwin":
+    try:
+        #LOGGER.info("\n[ makedirs LOG_DIR: %s ]\n" % LOG_DIR)
+        if not EXISTS(LOG_DIR):
+            os.makedirs(LOG_DIR)
+    except OSError, err:
+        LOGGER.error("[ Error: create results directory:"
+                     " %s failed, error: %s ]\n" % (LOG_DIR, err))
+
+try:
+    #LOGGER.info("\n[ Opening PID_FILE: %s ]\n" % PID_FILE)
+    with open(PID_FILE, "w") as fd:
+        PID = str(os.getpid())
+        fd.writelines(PID + '\n')
+except OSError, e:
+    LOGGER.error("[ Error: can't create pid log file: %s, error: %s ]\n" %
+                (PID_FILE, err))
+    sys.exit(1)
+
+try:
+    os.chmod(PID_FILE, 0666)
+except OSError:
+    pass
+
+# detect version option
+if "--version" in sys.argv:
+    try:
+        CONFIG = ConfigParser.ConfigParser()
+        if platform.system() == "Linux":
+            CONFIG.read('/opt/testkit/lite2.4/VERSION')
+        else:
+            VERSION_FILE = JOIN(sys.path[0], 'VERSION')
+            CONFIG.read(VERSION_FILE)
+        VERSION = CONFIG.get('public_version', 'version')
+        LOGGER.info("V%s" % VERSION)
+    except ConfigParser.Error, err:
+        LOGGER.error(
+            "[ Error: fail to parse version info, error: %s ]\n" % err)
+    sys.exit(1)
+
+# detect internal version option
+if "--internal-version" in sys.argv:
+    try:
+        CONFIG = ConfigParser.ConfigParser()
+        if platform.system() == "Linux":
+            CONFIG.read('/opt/testkit/lite2.4/VERSION')
+        else:
+            VERSION_FILE = JOIN(sys.path[0], 'VERSION')
+            CONFIG.read(VERSION_FILE)
+        VERSION = CONFIG.get('internal_version', 'version')
+        print VERSION
+    except ConfigParser.Error, err:
+        print "[ Error: fail to parse version info, error: %s ]\n" % err
+    sys.exit(1)
+
+
+# init test engine here
+try:
+    from testkitlite.engines.default.runner import TRunner
+    from commodule.connector import Connector
+except ImportError, err:
+    LOGGER.error("[ Error: loading test engine failed, error: %s ]\n" % err)
+    LOGGER.info("try to run command "
+                "'export PYTHONPATH=/usr/lib/python2.7/dist-packages' and "
+                "'export PYTHONPATH=/usr/share/pyshared/'to resolve this issue")
+    sys.exit(1)
+
+
+def varnarg(option, opt_str, value, parser):
+    """ parser srg"""
+    value = []
+    import re
+    for arg in parser.rargs:
+        if re.search('^--.+', arg) or \
+                re.search('^-[\D]', arg):
+            break
+        value.append(arg)
+
+    del parser.rargs[:len(value)]
+    setattr(parser.values, option.dest, value)
+
+try:
+    OPTION_LIST = [
+        make_option("-f", "--testxml", dest="testxml",
+                    action="callback", callback=varnarg,
+                    help="Specify the path of test definition file (tests.xml)."
+                    " If run more one test package,just list the all the path "
+                    " of \"tests.xml\" and separate with a whitespace"),
+        make_option("-D", "--dryrun", dest="bdryrun",
+                    action="store_true",
+                    help="Dry-run the selected test cases"),
+        make_option("-M", "--manual-only", dest="bmanualonly",
+                    action="store_true",
+                    help="Enable only manual tests"),
+        make_option("-A", "--auto-only", dest="bautoonly",
+                    action="store_true",
+                    help="Enable only auto tests"),
+        make_option("-o", "--output", dest="resultfile",
+                    help="Specify output file for result xml. \
+                    If more than one testxml provided, \
+                    results will be merged together to this output file"),
+        make_option("-e", dest="exttest", action="store",
+                    help="Launch external test with a launcher,\
+                         supports browser or other web-runtime"),
+        make_option("--version", dest="version_info", action="store_true",
+                    help="Show version information"),
+        make_option("--internal-version", dest="internal_version_info",
+                    action="store_true",
+                    help="Show internal version information"),
+        make_option("--deviceid", dest="device_serial", action="store",
+                    help="set device serial information"),
+        make_option("--testprefix", dest="test_prefix", action="store",
+                    help="set prefix for test case entry"),
+        make_option("--comm", dest="commodule", action="store",
+                    help="set commodule by default,"
+                    "set \"localhost\" for local web testing"),
+        make_option("--capability", dest="capability", action="store",
+                    help="set platform for sepecfic device capability"),
+        make_option("--quit", dest="quit", action="store_true",
+                    help="quit testkit-lite"),
+        make_option("--debug", dest="debug", action="store_true",
+                    help="run in debug mode,more log information print out"),
+        make_option("--rerun", dest="rerun", action="store_true",
+                    help="check if rerun test mode"),
+        make_option("--non-active", dest="non_active", action="store_true",
+                    help="Disable the ability to set the result of \
+                    core manual cases from the console"),
+        make_option("--tizen-version", dest="tizenversion", action="callback", callback=varnarg, help="set tizen version infomation"),
+        make_option("--skip-tc", dest="skip_tc", action="callback", callback=varnarg, help="Specify the testcase id for exclude from the test"),
+        make_option("--stub-port", dest="stubport", action="callback", callback=varnarg, help = "set testkit-stub port number")
+
+    ]
+
+    OPTION_LIST.extend([
+        make_option("--%s" % flt,
+                    dest="w%s" % flt, action="callback", callback=varnarg,
+                    help="Select the specified filter-rules : %s" % flt)
+        for flt in COMMON_FILTERS])
+
+    try:
+        # untrusted behaviour of %%prog
+        USAGE = "%%prog [options] -f [prefix:]\"<somewhere/test.xml>\" -e \
+\"<launcher-name>\"\n\
+forms:    %%prog  -f [prefix:]\"<somewhere>/test.xml\"\n\
+          %%prog  -f [prefix:]\"<somewhere>/test.xml\" -D\n\
+          %%prog  -f [prefix:]\"<somewhere>/test.xml\" -A\n\
+          %%prog  -f [prefix:]\"<somewhere>/test.xml\" -M\n\
+         %%prog  -f [prefix:]\"<somewhere>/test.xml\" --type \"smoke\"\n\
+         %%prog  -f [prefix:]\"<somewhere>/test.xml\" --component \"TizenAPI/Communication/Messaging\"\n\
+          %%prog  -f [prefix:]\"<somewhere>/test1.xml <somewhere>/test2.xml \
+<somewhere>/test3.xml\" \n\
+          %%prog  -f [prefix:]\"<somewhere>/test.xml\" -D -A \ --capability <capability file> --comm <commoduletype>\n\
+          %%prog  -f [prefix:]\"<somewhere>/test.xml\" -D -A \
+...\n\
+exmaples: \n\
+    run a web test package from device side with device WRT (it is default): \n\
+          %%prog -f device:\"/opt/usr/media/tct/opt/tct-websocket-w3c-tests/tests.xml\" -e \
+'WRTLauncher' -A \n\
+    run a web test package from local path with chrome browser: \n\
+          %%prog -f \"/usr/share/webapi-webkit-tests/tests.xml\" -e \
+'<somewhere>/chrome-startup' -A --comm localhost \n\
+\n\
+Note: \n\
+          1) Proxy settings should be disabled when execute webapi packages\n\
+          2) TestLog is stored to %s/latest\n\
+          3) %%prog enables both auto and manual tests by default\n\
+          4) Obviously -A and -M are conflict options\n\
+          5) -e option does not support -D mode\n\
+          6) The test cases' order in the result files might be arbitrary,\
+when running same tests.xml with same options. This is caused \
+by python's API 'getiterator' from module 'xml.etree.ElementTree'\n\
+          7) run command 'testkit-lite', \
+            it might not be able to locate module 'testkitlite.engines.\
+default.runner', \
+            run command 'export PYTHONPATH=/usr/share/pyshared/' \
+            run command 'export PYTHONPATH=/usr/lib/python2.7/dist-packages' \
+            to resolve this issue" % (LOG_DIR)
+    except Exception:
+        USAGE = None
+
+    # detect non-params
+    if len(sys.argv) == 1:
+        sys.argv.append("-h")
+
+    PARSERS = OptionParser(option_list=OPTION_LIST, usage=USAGE)
+
+    (OPTIONS, ARGS) = PARSERS.parse_args()
+    # detect quit action
+    if OPTIONS.quit:
+        try:
+            LOGGER.info("[ Quit testkit-lite now ]")
+            kill_testkit_lite(PID_FILE)
+        except Exception, err:
+            LOGGER.error("[ Error: fail to kill existing testkit-lite,"
+                         " error: %s ]\n" % err)
+            sys.exit(1)
+
+    # detect conflict
+    if OPTIONS.bautoonly and OPTIONS.bmanualonly:
+        raise ValueError("-A and -M are conflict")
+    if OPTIONS.commodule:
+        if OPTIONS.commodule == 'localhost' and "device:" in OPTIONS.testxml[0]:
+            raise ValueError("For single mode, pls set local file to test ")
+        COMMODULE_TYPE = OPTIONS.commodule
+    else:
+        COMMODULE_TYPE = "tizenmobile"
+
+    CONNECTOR = Connector({"testmode": COMMODULE_TYPE, "deviceid":OPTIONS.device_serial}).get_connector()
+    if CONNECTOR == None:
+        LOGGER.error("[ Error: init commodule error... ]\n")
+        sys.exit(1)
+
+    # create runner
+    RUNNER = TRunner(CONNECTOR)
+    RUNNER.set_pid_log(PID_FILE)
+
+    # apply all options
+    RUNNER.set_global_parameters(OPTIONS)
+
+    if OPTIONS.tizenversion is None:
+        LOGGER.error("[ Error : input your tizen version ]\n")
+        sys.exit(1)
+    else :
+        tizenver = OPTIONS.tizenversion[0]
+        VER_PATTERN = "^tizen_web_\d.\d|^tizen_native_\d.\d"
+        pa = re.compile(VER_PATTERN, re.I)
+        ma = pa.match(tizenver)
+        if ma is None:
+             LOGGER.error("A required \"/opt/tct/"+tizenver+" could not be found.\n")
+             sys.exit(1)
+
+        RUNNER.set_tizenversion(tizenver)
+
+    if OPTIONS.stubport is not None:
+        port = OPTIONS.stubport[0]
+        RUNNER.set_stubport(port)
+
+    if OPTIONS.skip_tc is not None:
+        RUNNER.set_skip_tc(OPTIONS.skip_tc)
+
+    # set capability
+    if OPTIONS.capability:
+        GET_CAPABILITY_STATUS = RUNNER.get_capability(OPTIONS.capability)
+        if not GET_CAPABILITY_STATUS:
+            sys.exit(1)
+
+    if "device:" in OPTIONS.testxml[0]:
+        remote_test = True
+        try:
+            #LOGGER.info("\n[ makedirs TEST_PACKAGES_DIR: %s ]\n" % TEST_PACKAGES_DIR)
+            if not EXISTS(TEST_PACKAGES_DIR):
+                os.makedirs(TEST_PACKAGES_DIR)
+        except OSError, err:
+            LOGGER.error("[ Error: "
+                "can't create test package directory: %s, error: %s ]\n" %
+                        (TEST_PACKAGES_DIR, err))
+            sys.exit(1)
+        REMOTE_TESTLITS = OPTIONS.testxml[0]
+        REMOTE_TESTLITS = REMOTE_TESTLITS.split(':')[1]
+        TESTLISTARRARY = REMOTE_TESTLITS.split()
+        LOCALARRY = []
+
+        for remote_file in TESTLISTARRARY:
+            tmp_remote_file = SPLIT(remote_file)
+            tmp_remote_folder = BASENAME(tmp_remote_file[0])
+            tmp_remote_test_xml = JOIN(
+                tmp_remote_folder, tmp_remote_file[1])
+            local_test_package = JOIN(
+                TEST_PACKAGES_DIR, tmp_remote_test_xml)
+            down_status = RUNNER.connector.download_file(remote_file, local_test_package)
+            if not down_status:
+                LOGGER.error("can not get test definition file, pls check file on device:%s"
+                             % remote_file)
+                sys.exit(1)
+            LOCALARRY.append(local_test_package)
+        OPTIONS.testxml = LOCALARRY
+    else:
+        if len(OPTIONS.testxml) == 1:
+            i = 0
+            start = 0
+            end = 0
+            LOCAL_TESTLISTS= []
+            temp_xml = OPTIONS.testxml[0]
+            while(i < len(temp_xml)):
+                tmp = temp_xml[i:len(temp_xml)]
+                if ".xml" in tmp :
+                    index = tmp.index(".xml")+4+i
+                    end = index
+                    i=index+1
+                    LOCAL_TESTLISTS.append(temp_xml[start:end])
+                    start = index+1
+                else:
+                    print 'no xml found'
+                    break
+            OPTIONS.testxml = LOCAL_TESTLISTS
+
+    # apply filter
+    WFILTERS = {}
+    for flt in COMMON_FILTERS:
+        if eval('OPTIONS.w%s' % flt):
+            WFILTERS[flt] = eval('OPTIONS.w%s' % flt)
+    RUNNER.add_filter_rules(**WFILTERS)
+
+    if not OPTIONS.testxml:
+        LOGGER.error("[ Error: not specify a test xml... ]\n")
+        sys.exit(1)
+
+    # 1) prepare log dir
+    if os_ver == "Linux" or os_ver == "Darwin":
+        SESSION = datetime.today().isoformat('-')+str(os.getpid())+"_session"
+    else:
+        SESSION = datetime.today().strftime("%Y-%m-%d_%H_%M_%S")+str(os.getpid())+"_session"
+    CURRENT_LOG_DIR = JOIN(LOG_DIR, SESSION)
+    LATEST_DIR = JOIN(LOG_DIR, "latest")
+    try:
+        if EXISTS(LATEST_DIR):
+            os.remove(LATEST_DIR)
+        if ISLINK(LATEST_DIR):
+            os.remove(LATEST_DIR)
+        os.makedirs(CURRENT_LOG_DIR)
+        if os.name == "posix":
+            os.symlink(CURRENT_LOG_DIR, LATEST_DIR)
+    except IOError, err:
+        LOGGER.error("[ Error: create session log directory: "
+                     "%s failed, error: %s ]\n" % (CURRENT_LOG_DIR, err))
+    except OSError, err:
+        LOGGER.error("error : %s" % err)
+
+    finally:
+        if not EXISTS(CURRENT_LOG_DIR):
+            os.makedirs(CURRENT_LOG_DIR)
+
+    # 2) prepare run test
+    # run more than one tests.xml
+    # 1. run all auto cases from the xmls
+    # 2. run all manual cases from the xmls
+    TESTXMLS = set(OPTIONS.testxml)
+    for t in TESTXMLS:
+        if EXISTS(t):
+            filename = t
+            filename = os.path.splitext(filename)[0]
+            if os_ver == "Linux" or os_ver == "Darwin":
+                if not filename.startswith('/'):
+                    LOGGER.error("[ Error:"
+                          " xml file %s should start with '/' ]" % filename)
+                    sys.exit(1)
+                else:
+                    filename = filename.split('/')[-2]
+                    if filename == "":
+                        LOGGER.error("[ Error:"
+                             " unable to find package name from %s ]" % t)
+                        sys.exit(1)
+            else:
+                filename = filename.split('\\')[-2]
+            filename = "%s.total" % BASENAME(filename)
+            resultfile = "%s.xml" % filename
+            resultfile = JOIN(CURRENT_LOG_DIR, resultfile)
+            try:
+                ep = etree.parse(t)
+                suiteparent = ep.getroot()
+            except etree.ParseError:
+                LOGGER.error("[ Error: no case found in testxml, "
+                             "pls check the test package ]\n")
+                sys.exit(1)
+            no_test_definition = 1
+            for tf in ep.getiterator('test_definition'):
+                no_test_definition = 0
+            if no_test_definition:
+                suiteparent = etree.Element('test_definition')
+                suiteparent.tail = "\n"
+                for suite in ep.getiterator('suite'):
+                    suite.tail = "\n"
+                    suiteparent.append(suite)
+            if OPTIONS.bautoonly:
+                WFILTERS['execution_type'] = ["auto"]
+                RUNNER.add_filter_rules(**WFILTERS)
+            if OPTIONS.bmanualonly:
+                WFILTERS['execution_type'] = ["manual"]
+                RUNNER.add_filter_rules(**WFILTERS)
+            RUNNER.apply_filter(suiteparent)
+            # just leave suite and set for merge result
+            for suite in ep.getiterator('suite'):
+                for tset in suite.getiterator('set'):
+                    for testcase in tset.getiterator('testcase'):
+                        tset.remove(testcase)
+            try:
+                #LOGGER.info("\n[ Opening resultfile: %s ]\n" % resultfile)
+                with open(resultfile, 'w') as output:
+                    tree = etree.ElementTree(element=suiteparent)
+                    tree.write(output)
+            except IOError, err:
+                LOGGER.error(
+                    "[ Error: create filtered total result file: %s failed, "
+                    "error: %s ]\n" % (resultfile, err))
+        else:
+            print "[ Have no test xml found ]"
+            sys.exit(1)
+    START_TIME = datetime.today().strftime("%Y-%m-%d_%H_%M_%S")
+    if not OPTIONS.bautoonly:
+        if OPTIONS.bmanualonly:
+            for t in TESTXMLS:
+                try:
+                    WFILTERS['execution_type'] = ["manual"]
+                    RUNNER.add_filter_rules(**WFILTERS)
+                    RUNNER.prepare_run(t, resultdir=CURRENT_LOG_DIR)
+                except IOError, err:
+                    LOGGER.error("[ Error: prepare_run test xml: "
+                      "%s from testkit-lite failed, error: %s ]\n" % (t, err))
+        else:
+            for t in TESTXMLS:
+                try:
+                    WFILTERS['execution_type'] = ["auto"]
+                    RUNNER.add_filter_rules(**WFILTERS)
+                    RUNNER.prepare_run(t, resultdir=CURRENT_LOG_DIR)
+                except IOError, err:
+                    LOGGER.error("[ Error: prepare_run test xml: "
+                      "%s from testkit-lite failed, error: %s ]\n" % (t, err))
+            for t in TESTXMLS:
+                try:
+                    WFILTERS['execution_type'] = ["manual"]
+                    RUNNER.add_filter_rules(**WFILTERS)
+                    RUNNER.prepare_run(t, resultdir=CURRENT_LOG_DIR)
+                except IOError, err:
+                    LOGGER.error("[ Error: prepare_run test xml: "
+                      "%s from testkit-lite failed, error: %s ]\n" % (t, err))
+    else:
+        for t in TESTXMLS:
+            try:
+                WFILTERS['execution_type'] = ["auto"]
+                RUNNER.add_filter_rules(**WFILTERS)
+                RUNNER.prepare_run(t, resultdir=CURRENT_LOG_DIR)
+            except IOError, err:
+                clean_testxml(TESTXMLS, remote_test)
+                LOGGER.error("[ Error: prepare_run test xml: "
+                  "%s from testkit-lite failed, error: %s ]\n" % (t, err))
+
+    try:
+        can_merge_result = True
+        RUNNER.run_case(CURRENT_LOG_DIR)
+    except Exception, err:
+        clean_testxml(TESTXMLS, remote_test)
+        traceback.print_exc()
+        LOGGER.error("[ Error: run_test_case failed ,error: %s ]\n" % err)
+    try:
+        RUNNER.merge_resultfile(START_TIME, CURRENT_LOG_DIR)
+        clean_testxml(TESTXMLS, remote_test)
+        LOGGER.info("[ all tasks for testkit lite are accomplished, goodbye ]")
+    except Exception, err:
+        traceback.print_exc()
+        clean_testxml(TESTXMLS,remote_test)
+        LOGGER.error("[ Error: merge_resultfile "
+                     "failed,error: %s, goodbye ]\n" % err)
+
+except KeyboardInterrupt, err:
+    if RUNNER.session_id:
+        RUNNER.finalize_test(RUNNER.session_id)
+    if can_merge_result:
+        RUNNER.merge_resultfile(START_TIME, CURRENT_LOG_DIR)
+    if down_status:
+        clean_testxml(OPTIONS.testxml, remote_test)
+    LOGGER.info("\n[ exiting testkit-lite on user cancel, goodbye ]\n")
+    sys.exit(1)
+except Exception, err:
+    if RUNNER.session_id:
+        RUNNER.finalize_test(RUNNER.session_id)
+    if can_merge_result:
+        RUNNER.merge_resultfile(START_TIME, CURRENT_LOG_DIR)
+    if down_status:
+        clean_testxml(OPTIONS.testxml, remote_test)
+    LOGGER.error("\n[ Error: exiting testkit-lite "
+                 "by catching a critical error: %s, goodbye ]\n" % err)
+    traceback.print_exc()
+    sys.exit(1)
diff --git a/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite1.0/testkitlite/Makefile.am b/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite1.0/testkitlite/Makefile.am
new file mode 100755 (executable)
index 0000000..e619983
--- /dev/null
@@ -0,0 +1,24 @@
+# Copyright (C) 2012 Intel Corporation
+# 
+# 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
+# of the License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
+#
+# Authors:
+#              Zhang, Huihui <huihuix.zhang@intel.com>
+#              Wendong,Sui  <weidongx.sun@intel.com>
+
+SUBDIRS = common engines
+
+testkitlitedir = /usr/lib/python2.7/dist-packages/testkitlite
+dist_testkitlite_SCRIPTS = __init__.py
diff --git a/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite1.0/testkitlite/__init__.py b/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite1.0/testkitlite/__init__.py
new file mode 100755 (executable)
index 0000000..8b13789
--- /dev/null
@@ -0,0 +1 @@
+
diff --git a/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite1.0/testkitlite/__init__.pyc b/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite1.0/testkitlite/__init__.pyc
new file mode 100755 (executable)
index 0000000..0b97be5
Binary files /dev/null and b/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite1.0/testkitlite/__init__.pyc differ
diff --git a/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite1.0/testkitlite/common/Makefile.am b/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite1.0/testkitlite/common/Makefile.am
new file mode 100755 (executable)
index 0000000..0cafaad
--- /dev/null
@@ -0,0 +1,22 @@
+# Copyright (C) 2012 Intel Corporation
+# 
+# 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
+# of the License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
+#
+# Authors:
+#              Zhang, Huihui <huihuix.zhang@intel.com>
+#              Wendong,Sui  <weidongx.sun@intel.com>
+
+testkitlitecommondir = /usr/lib/python2.7/dist-packages/testkitlite/common
+dist_testkitlitecommon_SCRIPTS = *.py
diff --git a/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite1.0/testkitlite/common/__init__.py b/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite1.0/testkitlite/common/__init__.py
new file mode 100755 (executable)
index 0000000..8b13789
--- /dev/null
@@ -0,0 +1 @@
+
diff --git a/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite1.0/testkitlite/common/__init__.pyc b/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite1.0/testkitlite/common/__init__.pyc
new file mode 100755 (executable)
index 0000000..153a963
Binary files /dev/null and b/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite1.0/testkitlite/common/__init__.pyc differ
diff --git a/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite1.0/testkitlite/common/process_killall.py b/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite1.0/testkitlite/common/process_killall.py
new file mode 100755 (executable)
index 0000000..f15427a
--- /dev/null
@@ -0,0 +1,57 @@
+#!/usr/bin/python
+#
+# Copyright (C) 2012 Intel Corporation
+#
+# 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
+# of the License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+# MA  02110-1301, USA.
+#
+# Authors:
+#              Zhang, Huihui <huihuix.zhang@intel.com>
+#              Wendong,Sui  <weidongx.sun@intel.com>
+""" kill testkit-lite """
+import os
+import platform
+import signal
+import re
+import ctypes
+from commodule.log import LOGGER
+from commodule.killall import killall
+
+
+def kill_testkit_lite(pid_file):
+    """ kill testkit lite"""
+    try:
+        with open(pid_file, "r") as pidfile:
+            pid = pidfile.readline().rstrip("\n")
+            if pid:
+                killall(pid)
+    except IOError, error:
+        pattern = re.compile('No such file or directory|No such process')
+        match = pattern.search(str(error))
+        if not match:
+            LOGGER.info("[ Error: fail to kill existing testkit-lite, "\
+                "error: %s ]\n" % error)
+    return None
+
+def clean_testxml(testxmls,remote_test):
+    """clean all test xmls"""
+    if remote_test:
+        EXISTS = os.path.exists
+        for testxml in testxmls:
+            if EXISTS(testxml):
+                fd_name = os.path.dirname(testxml)
+                os.remove(testxml)
+                os.rmdir(fd_name)
+    return None
\ No newline at end of file
diff --git a/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite1.0/testkitlite/common/process_killall.pyc b/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite1.0/testkitlite/common/process_killall.pyc
new file mode 100755 (executable)
index 0000000..46ed1b0
Binary files /dev/null and b/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite1.0/testkitlite/common/process_killall.pyc differ
diff --git a/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite1.0/testkitlite/engines/Makefile.am b/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite1.0/testkitlite/engines/Makefile.am
new file mode 100755 (executable)
index 0000000..b360a3f
--- /dev/null
@@ -0,0 +1,24 @@
+# Copyright (C) 2012 Intel Corporation
+# 
+# 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
+# of the License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
+#
+# Authors:
+#              Zhang, Huihui <huihuix.zhang@intel.com>
+#              Wendong,Sui  <weidongx.sun@intel.com>
+
+SUBDIRS = default
+
+testkitliteenginesdir = /usr/lib/python2.7/dist-packages/testkitlite/engines
+dist_testkitliteengines_SCRIPTS = __init__.py
diff --git a/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite1.0/testkitlite/engines/__init__.py b/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite1.0/testkitlite/engines/__init__.py
new file mode 100755 (executable)
index 0000000..8b13789
--- /dev/null
@@ -0,0 +1 @@
+
diff --git a/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite1.0/testkitlite/engines/__init__.pyc b/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite1.0/testkitlite/engines/__init__.pyc
new file mode 100755 (executable)
index 0000000..7819696
Binary files /dev/null and b/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite1.0/testkitlite/engines/__init__.pyc differ
diff --git a/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite1.0/testkitlite/engines/default/Makefile.am b/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite1.0/testkitlite/engines/default/Makefile.am
new file mode 100755 (executable)
index 0000000..0591520
--- /dev/null
@@ -0,0 +1,22 @@
+# Copyright (C) 2012 Intel Corporation
+# 
+# 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
+# of the License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
+#
+# Authors:
+#              Zhang, Huihui <huihuix.zhang@intel.com>
+#              Wendong,Sui  <weidongx.sun@intel.com>
+
+testkitliteenginesdefaultdir = /usr/lib/python2.7/dist-packages/testkitlite/engines/default
+dist_testkitliteenginesdefault_SCRIPTS = *.py
diff --git a/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite1.0/testkitlite/engines/default/__init__.py b/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite1.0/testkitlite/engines/default/__init__.py
new file mode 100755 (executable)
index 0000000..8b13789
--- /dev/null
@@ -0,0 +1 @@
+
diff --git a/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite1.0/testkitlite/engines/default/__init__.pyc b/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite1.0/testkitlite/engines/default/__init__.pyc
new file mode 100755 (executable)
index 0000000..a2d6885
Binary files /dev/null and b/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite1.0/testkitlite/engines/default/__init__.pyc differ
diff --git a/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite1.0/testkitlite/engines/default/runner.py b/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite1.0/testkitlite/engines/default/runner.py
new file mode 100755 (executable)
index 0000000..0d9a246
--- /dev/null
@@ -0,0 +1,1208 @@
+#!/usr/bin/python
+#
+# Copyright (C) 2012 Intel Corporation
+#
+# 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
+# of the License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc.,
+# 51 Franklin Street,
+# Fifth Floor,
+# Boston, MA  02110-1301, USA.
+#
+# Authors:
+#              Zhang, Huihui <huihuix.zhang@intel.com>
+#              Wendong,Sui  <weidongx.sun@intel.com>
+#              Yuanyuan,Zou  <zouyuanx@intel.com>
+""" prepare run , split xml ,run case , merge result """
+
+import os
+import platform
+import time
+import sys
+import traceback
+import collections
+import string
+import random
+from datetime import datetime
+from shutil import copyfile
+import xml.etree.ElementTree as etree
+import ConfigParser
+from tempfile import mktemp
+from shutil import move
+from os import remove
+from commodule.log import LOGGER
+from commodule.str2 import str2xmlstr
+
+
+from .worker import TestWorker
+
+TCT_CONFIG_FILE = "/opt/tools/TCT_CONFIG"
+tct_parser = ConfigParser.ConfigParser()
+tct_parser.read(TCT_CONFIG_FILE)
+
+DEVICE_SUITE_TARGET_24 = tct_parser.get('DEVICE', 'DEVICE_SUITE_TARGET_24')
+DEVICE_SUITE_TARGET_30 = tct_parser.get('DEVICE', 'DEVICE_SUITE_TARGET_30')
+DEVICE_EXECUTION_MODE_30 = tct_parser.get('DEVICE', 'DEVICE_EXECUTION_MODE_30')
+DEVICE_SUITE_TARGET_30_STR = "{DEVICE_SUITE_TARGET_30}"
+DEVICE_EXECUTION_MODE_30_STR = "{DEVICE_EXECUTION_MODE_30}"
+
+JOIN = os.path.join
+DIRNAME = os.path.dirname
+BASENAME = os.path.basename
+EXISTS = os.path.exists
+ABSPATH = os.path.abspath
+
+
+class TRunner:
+
+    """
+    Parse the testdefinition.xml files.
+    Apply filter for each run.
+    Conduct tests execution.
+    """
+
+    def __init__(self, connector):
+        """ init all self parameters here """
+        # dryrun
+        self.bdryrun = False
+        # non_active
+        self.non_active = False
+        # result file
+        self.resultfile = None
+        # external test
+        self.external_test = None
+        # filter rules
+        self.filter_rules = None
+        self.debug = False
+        self.resultfiles = set()
+        self.core_auto_files = []
+        self.core_manual_files = []
+        self.skip_all_manual = False
+        self.testsuite_dict = {}
+        self.exe_sequence = []
+        self.testresult_dict = {"pass": 0, "fail": 0,
+                                "block": 0, "not_run": 0}
+        self.current_test_xml = "none"
+        self.first_run = True
+        self.deviceid = None
+        self.session_id = None
+        self.pid_log = None
+        self.set_parameters = {}
+        self.connector = connector
+        self.testworker = TestWorker(connector)
+        self.stub_name = "testkit-stub"
+        self.capabilities = {}
+        self.has_capability = False
+        self.rerun = False
+        self.test_prefix = ""
+        self.tizenV = None
+        self.skip_tc = None
+        self.stub_port = "8000"
+
+    def set_global_parameters(self, options):
+        "get all options "
+        # apply dryrun
+        if options.bdryrun:
+            self.bdryrun = options.bdryrun
+        # Disable set the result of core manual cases from the console
+        if options.non_active:
+            self.non_active = options.non_active
+        # apply user specify test result file
+        if options.resultfile:
+            self.resultfile = options.resultfile
+        # set the external test WRTLauncher
+        if options.exttest:
+            self.external_test = options.exttest
+        if options.debug:
+            self.debug = options.debug
+        if options.rerun:
+            self.rerun = options.rerun
+        if options.test_prefix:
+            self.test_prefix = options.test_prefix
+        if options.device_serial:
+            self.deviceid = options.device_serial
+
+    def set_pid_log(self, pid_log):
+        """ get pid_log file """
+        self.pid_log = pid_log
+
+    def add_filter_rules(self, **kargs):
+        """
+        kargs:  key:values - "":["",]
+        """
+        self.filter_rules = kargs
+
+    def set_session_id(self, session_id):
+        """ set the set test session id which is get form com_module """
+        self.session_id = session_id
+
+    def set_stubport(self, stubport):
+        self.stub_port = stubport
+
+    def set_tizenversion(self, _tizenV):
+        self.tizenV = _tizenV
+        self.testworker.set_TizenVersion(self.tizenV)
+
+    def set_skip_tc(self, skip_tc):
+        self.skip_tc = skip_tc
+
+    def set_capability(self, capabilities):
+        """ set capabilitys  """
+        self.capabilities = capabilities
+        self.has_capability = True
+
+    def prepare_run(self, testxmlfile, resultdir=None):
+        """
+        testxmlfile: target testxml file
+        execdir and resultdir: should be the absolute path since TRunner
+        is the common lib
+        """
+        # resultdir is set to current directory by default
+        if not resultdir:
+            resultdir = os.getcwd()
+        ok_prepare = True
+        if ok_prepare:
+            try:
+                filename = testxmlfile
+                filename = os.path.splitext(filename)[0]
+                if platform.system() == "Linux":
+                    filename = filename.split('/')[-2]
+                else:
+                    filename = filename.split('\\')[-2]
+                if self.filter_rules["execution_type"] == ["manual"]:
+                    resultfile = "%s.manual.xml" % filename
+                else:
+                    resultfile = "%s.auto.xml" % filename
+                resultfile = JOIN(resultdir, resultfile)
+                if not EXISTS(resultdir):
+                    os.mkdir(resultdir)
+                LOGGER.info("[ analysis test xml file: %s ]" % resultfile)
+                self.__prepare_result_file(testxmlfile, resultfile)
+                self.__split_test_xml(resultfile, resultdir)
+            except IOError as error:
+                LOGGER.error(error)
+                ok_prepare &= False
+        return ok_prepare
+
+    def __split_test_xml(self, resultfile, resultdir):
+        """ split_test_xml into auto and manual"""
+        casefind = etree.parse(resultfile).getiterator('testcase')
+        if casefind:
+            test_file_name = "%s" % BASENAME(resultfile)
+            test_file_name = os.path.splitext(test_file_name)[0]
+            self.__splite_external_test(
+                resultfile, test_file_name, resultdir)
+
+    def __splite_core_test(self, resultfile):
+        """select core test"""
+        if self.filter_rules["execution_type"] == ["auto"]:
+            self.core_auto_files.append(resultfile)
+        else:
+            self.core_manual_files.append(resultfile)
+        self.resultfiles.add(resultfile)
+
+    def __splite_external_test(self, resultfile, test_file_name, resultdir):
+        """select external_test"""
+        testsuite_dict_value_list = []
+        testsuite_dict_add_flag = 0
+        filename_diff = 1
+
+        parser = etree.parse(resultfile)
+        for tsuite in parser.getiterator('suite'):
+            root = etree.Element('test_definition')
+            suitefilename = os.path.splitext(resultfile)[0]
+            suitefilename += ".suite_%s.xml" % filename_diff
+            suitefilename = JOIN(resultdir, suitefilename)
+            tsuite.tail = "\n"
+            root.append(tsuite)
+            try:
+                with open(suitefilename, 'w') as output:
+                    tree = etree.ElementTree(element=root)
+                    tree.write(output)
+            except IOError as error:
+                LOGGER.error("[ Error: create filtered result file: %s failed,\
+                 error: %s ]" % (suitefilename, error))
+            case_suite_find = etree.parse(
+                suitefilename).getiterator('testcase')
+            if case_suite_find:
+                if tsuite.get('launcher'):
+                    if tsuite.get('launcher').find('WRTLauncher'):
+                        self.__splite_core_test(suitefilename)
+                    else:
+                        testsuite_dict_value_list.append(suitefilename)
+                        if testsuite_dict_add_flag == 0:
+                            self.exe_sequence.append(test_file_name)
+                        testsuite_dict_add_flag = 1
+                        self.resultfiles.add(suitefilename)
+                else:
+                    if self.filter_rules["execution_type"] == ["auto"]:
+                        self.core_auto_files.append(suitefilename)
+                    else:
+                        self.core_manual_files.append(suitefilename)
+                    self.resultfiles.add(suitefilename)
+            filename_diff += 1
+        if testsuite_dict_add_flag:
+            self.testsuite_dict[test_file_name] = testsuite_dict_value_list
+
+    def __prepare_result_file(self, testxmlfile, resultfile):
+        """ write the test_xml content to resultfile"""
+        try:
+            parse_tree = etree.parse(testxmlfile)
+            suiteparent = parse_tree.getroot()
+            no_test_definition = 1
+            if parse_tree.getiterator('test_definition'):
+                no_test_definition = 0
+            if no_test_definition:
+                suiteparent = etree.Element('test_definition')
+                suiteparent.tail = "\n"
+                for suite in parse_tree.getiterator('suite'):
+                    suite.tail = "\n"
+                    suiteparent.append(suite)
+            self.apply_filter(suiteparent)
+            try:
+                with open(resultfile, 'w') as output:
+                    tree = etree.ElementTree(element=suiteparent)
+                    tree.write(output)
+            except IOError as error:
+                LOGGER.error("[ Error: create filtered result file: %s failed,\
+                    error: %s ]" % (resultfile, error))
+        except IOError as error:
+            LOGGER.error(error)
+            return False
+
+    def run_case(self, latest_dir):
+        """ run case """
+        # run core auto cases
+        self.__run_core_auto()
+
+        # run webAPI cases
+        self.__run_webapi_test(latest_dir)
+
+        # run core manual cases
+        self.__run_core_manual()
+
+    def __run_core_auto(self):
+        """ core auto cases run"""
+        self.core_auto_files.sort()
+        for core_auto_file in self.core_auto_files:
+            temp_test_xml = os.path.splitext(core_auto_file)[0]
+            temp_test_xml = os.path.splitext(temp_test_xml)[0]
+            temp_test_xml = os.path.splitext(temp_test_xml)[0]
+            temp_test_xml += ".auto"
+            # print identical xml file name
+            if self.current_test_xml != temp_test_xml:
+                time.sleep(3)
+                LOGGER.info("\n[ testing xml: %s.xml ]" % temp_test_xml)
+                self.current_test_xml = temp_test_xml
+            self.__run_with_commodule(core_auto_file)
+
+    def __run_core_manual(self):
+        """ core manual cases run """
+        self.core_manual_files.sort()
+        for core_manual_file in self.core_manual_files:
+            temp_test_xml = os.path.splitext(core_manual_file)[0]
+            temp_test_xml = os.path.splitext(temp_test_xml)[0]
+            temp_test_xml = os.path.splitext(temp_test_xml)[0]
+            temp_test_xml += ".manual"
+            # print identical xml file name
+            if self.current_test_xml != temp_test_xml:
+                time.sleep(3)
+                LOGGER.info("\n[ testing xml: %s.xml ]" % temp_test_xml)
+                self.current_test_xml = temp_test_xml
+            if self.non_active:
+                self.skip_all_manual = True
+            else:
+                self.__run_with_commodule(core_manual_file)
+
+    def __run_webapi_test(self, latest_dir):
+        """ run webAPI test"""
+        if self.bdryrun:
+            LOGGER.info("[ WRTLauncher mode does not support dryrun ]")
+            return True
+
+        list_auto = []
+        list_manual = []
+        for i in self.exe_sequence:
+            if i[-4::1] == "auto":
+                list_auto.append(i)
+            if i[-6::1] == "manual":
+                list_manual.append(i)
+        list_auto.sort()
+        list_manual.sort()
+        self.exe_sequence = []
+        self.exe_sequence.extend(list_auto)
+        self.exe_sequence.extend(list_manual)
+
+        for webapi_total_file in self.exe_sequence:
+            for webapi_file in self.testsuite_dict[webapi_total_file]:
+                # print identical xml file name
+                if self.current_test_xml != \
+                        JOIN(latest_dir, webapi_total_file):
+                    time.sleep(3)
+                    LOGGER.info("\n[ testing xml: %s.xml ]\n"
+                                % JOIN(latest_dir, webapi_total_file))
+                    self.current_test_xml = JOIN(latest_dir, webapi_total_file)
+
+                self.__run_with_commodule(webapi_file)
+
+    def __run_with_commodule(self, webapi_file):
+        """run_with_commodule,Initialization,check status,get result"""
+        try:
+            # prepare test set list
+            test_xml_set_list = self.__split_xml_to_set(webapi_file)
+            # create temporary parameter
+            for test_xml_set in test_xml_set_list:
+                LOGGER.info("\n[ run set: %s ]" % test_xml_set)
+                # prepare the test JSON
+                self.__prepare_external_test_json(test_xml_set)
+
+                # init test here
+                init_status = self.__init_com_module(test_xml_set)
+                if not init_status:
+                    continue
+                # send set JSON Data to com_module
+                self.testworker.run_test(
+                    self.session_id, self.set_parameters)
+                while True:
+                    time.sleep(1)
+                    # check the test status ,if the set finished,get
+                    # the set_result,and finalize_test
+                    if self.__check_test_status():
+                        set_result = self.testworker.get_test_result(
+                            self.session_id)
+                        # write_result to set_xml
+                        self.__write_set_result(
+                            test_xml_set, set_result)
+                        # shut down server
+                        self.finalize_test(self.session_id)
+                        break
+        except IOError as error:
+            LOGGER.error(
+                "[ Error: fail to run webapi test xml, error: %s ]" % error)
+
+    def __split_xml_to_set(self, webapi_file):
+        """split xml by <set>"""
+
+        LOGGER.debug("[ split xml: %s by <set> ]" % webapi_file)
+        LOGGER.debug("[ this might take some time, please wait ]")
+        set_number = 1
+        test_xml_set_list = []
+        self.resultfiles.discard(webapi_file)
+        test_xml_temp = etree.parse(webapi_file)
+        for test_xml_temp_suite in test_xml_temp.getiterator('suite'):
+            while set_number <= len(test_xml_temp_suite.getiterator('set')):
+                copy_url = os.path.splitext(webapi_file)[0]
+                copy_url += "_set_%s.xml" % set_number
+                copyfile(webapi_file, copy_url)
+                test_xml_set_list.append(copy_url)
+                self.resultfiles.add(copy_url)
+                set_number += 1
+        time.sleep(3)
+        set_number -= 1
+        LOGGER.info("[ total set number is: %s ]" % set_number)
+
+        # only keep one set in each xml file and remove empty set
+        test_xml_set_list_empty = []
+        if len(test_xml_set_list) > 1:
+            test_xml_set_list.reverse()
+        for test_xml_set in test_xml_set_list:
+            test_xml_set_tmp = etree.parse(test_xml_set)
+            set_keep_number = 1
+            # LOGGER.debug("[ process set: %s ]" % test_xml_set)
+            for temp_suite in test_xml_set_tmp.getiterator('suite'):
+                for test_xml_set_temp_set in temp_suite.getiterator('set'):
+                    if set_keep_number != set_number:
+                        temp_suite.remove(test_xml_set_temp_set)
+                    else:
+                        if not test_xml_set_temp_set.getiterator('testcase'):
+                            test_xml_set_list_empty.append(test_xml_set)
+                    set_keep_number += 1
+            set_number -= 1
+            test_xml_set_tmp.write(test_xml_set)
+        for empty_set in test_xml_set_list_empty:
+            LOGGER.debug("[ remove empty set: %s ]" % empty_set)
+            test_xml_set_list.remove(empty_set)
+            self.resultfiles.discard(empty_set)
+        if len(test_xml_set_list) > 1:
+            test_xml_set_list.reverse()
+        return test_xml_set_list
+
+    def merge_resultfile(self, start_time, latest_dir):
+        """ merge_result_file """
+        mergefile = mktemp(suffix='.xml', prefix='tests.', dir=latest_dir)
+        #LOGGER.info("\nmergefile: %s ]" % mergefile)
+        mergefile = os.path.splitext(mergefile)[0]
+        #LOGGER.info("\nmergefile: %s ]" % mergefile)
+        mergefile = os.path.splitext(mergefile)[0]
+        #LOGGER.info("\nmergefile: %s ]" % mergefile)
+        mergefile = "%s.result" % BASENAME(mergefile)
+        #LOGGER.info("\nmergefile: %s ]" % mergefile)
+        mergefile = "%s.xml" % mergefile
+        #LOGGER.info("\nmergefile: %s ]" % mergefile)
+        mergefile = JOIN(latest_dir, mergefile)
+        #LOGGER.info("\nmergefile: %s ]" % mergefile)
+        end_time = datetime.today().strftime("%Y-%m-%d_%H_%M_%S")
+        LOGGER.info("\n[ test complete at time: %s ]" % end_time)
+        LOGGER.debug("[ start merging test result xml files, "\
+            "this might take some time, please wait ]")
+        LOGGER.debug("[ merge result files into %s ]" % mergefile)
+        root = etree.Element('test_definition')
+        root.tail = "\n"
+        totals = set()
+
+        # merge result files
+        resultfiles = self.resultfiles
+        totals = self.__merge_result(resultfiles, totals)
+
+        for total in totals:
+            result_xml = etree.parse(total)
+            for suite in result_xml.getiterator('suite'):
+                if suite.getiterator('testcase'):
+                    suite.tail = "\n"
+                    root.append(suite)
+        # print test summary
+        self.__print_summary()
+        # generate actual xml file
+        LOGGER.info("[ generate result xml: %s ]" % mergefile)
+        if self.skip_all_manual:
+            LOGGER.info("[ some results of core manual cases are N/A,"
+                        "please refer to the above result file ]")
+        LOGGER.info("[ merge complete, write to the result file,"
+                    " this might take some time, please wait ]")
+        # get useful info for xml
+        # add environment node
+        # add summary node
+        root.insert(0, get_summary(start_time, end_time))
+        root.insert(0, self.__get_environment())
+        # add XSL support to testkit-lite
+        declaration_text = """<?xml version="1.0" encoding="UTF-8"?>
+        <?xml-stylesheet type="text/xsl" href="testresult.xsl"?>\n"""
+        #LOGGER.info("\nmergefile: %s ]" % mergefile)
+        try:
+            with open(mergefile, 'w') as output:
+                output.write(declaration_text)
+                tree = etree.ElementTree(element=root)
+                tree.write(output, xml_declaration=False, encoding='utf-8')
+        except IOError as error:
+            LOGGER.error(
+                "[ Error: merge result file failed, error: %s ]" % error)
+        # change &lt;![CDATA[]]&gt; to <![CDATA[]]>
+        replace_cdata(mergefile)
+        # copy result to -o option
+        try:
+            if self.resultfile:
+                if os.path.splitext(self.resultfile)[-1] == '.xml':
+                    if not os.path.exists(os.path.dirname(self.resultfile)):
+                        if len(os.path.dirname(self.resultfile)) > 0:
+                            os.makedirs(os.path.dirname(self.resultfile))
+                    LOGGER.info("[ copy result xml to output file:"
+                                " %s ]" % self.resultfile)
+                    copyfile(mergefile, self.resultfile)
+                else:
+                    LOGGER.info(
+                        "[ Please specify and xml file for result output,"
+                        " not:%s ]" % self.resultfile)
+
+                for root, dirs, files in os.walk(latest_dir):
+                    for afile in files:
+                        if os.path.splitext(afile)[-1] == '.dlog':
+                            LOGGER.info("[ copy result dlog to output file:"
+                                    " %s ]" % afile)
+                            dlogfile = os.path.join(root, afile)
+                           finalName = afile
+                            rerunString = self.resultfile.split('.')[-2]
+                            if(rerunString == 'rerun'):
+                               extraNames = afile.split('.')
+                               extraName = ""
+                               if not extraNames[1].isdigit():
+                                       extraName = extraNames[1] + '.'
+                               for i in range(2, len(extraNames)-1):
+                                       extraName += extraNames[i]+'.'
+                               finalName = self.resultfile.split('/')[-1].split('.')[0]+"."+extraName[:-1]+"_rerun_"+str(datetime.now())+".dlog"
+                            destdfile = os.path.join(\
+                                    os.path.dirname(self.resultfile), finalName)
+                           print("destdfile = "+destdfile)
+                            copyfile(dlogfile, destdfile)
+#                 for afile in os.listdir(os.path.dirname(self.resultfile)):
+#                      if ".dlog" in afile and "tct" not in afile:
+#                              os.remove(afile)
+
+        except IOError as error:
+            LOGGER.error("[ Error: fail to copy the result file to: %s,"
+                         " please check if you have created its parent directory,"
+                         " error: %s ]" % (self.resultfile, error))
+
+    def __merge_result(self, setresultfiles, totals):
+        """ merge set result to total"""
+        resultfiles = setresultfiles
+        for resultfile in resultfiles:
+            totalfile = os.path.splitext(resultfile)[0]
+            totalfile = os.path.splitext(totalfile)[0]
+            totalfile = os.path.splitext(totalfile)[0]
+            totalfile = "%s.total" % totalfile
+            totalfile = "%s.xml" % totalfile
+            total_xml = etree.parse(totalfile)
+            # LOGGER.info("|--[ merge webapi result file: %s ]" % resultfile)
+            result_xml = etree.parse(resultfile)
+            for total_suite in total_xml.getiterator('suite'):
+                for total_set in total_suite.getiterator('set'):
+                    for result_suite in result_xml.getiterator('suite'):
+                        for result_set in result_suite.getiterator('set'):
+                            # when total xml and result xml have same suite
+                            # name and set name
+                            self.__merge_result_by_name(\
+                                    result_set, total_set, \
+                                    result_suite, total_suite)
+            total_xml.write(totalfile)
+            totals.add(totalfile)
+        return totals
+
+    def __merge_result_by_name(
+            self, result_set, total_set, result_suite, total_suite):
+        ''' merge result select by name'''
+        if result_set.get('name') == total_set.get('name') \
+                and result_suite.get('name') == total_suite.get('name'):
+            if result_set.get('set_debug_msg'):
+                total_set.set("set_debug_msg", result_set.get('set_debug_msg'))
+            # set cases that doesn't have result in result \
+            # set to N/A
+            # append cases from result set to total set
+            result_case_iterator = result_set.getiterator(
+                'testcase')
+            if result_case_iterator:
+                # LOGGER.info("----[ suite: %s, set: %s, time: %s ]"
+                #% (result_suite.get('name'), result_set.get('name'),
+                #    datetime.today().strftime("%Y-%m-%d_%H_%M_%S")))
+                for result_case in result_case_iterator:
+                    try:
+                        if self.skip_tc and str(self.skip_tc).find(result_case.get('id')) > -1:
+                            continue
+                        self.__count_result(result_case)
+                        total_set.append(result_case)
+                    except IOError as error:
+                        LOGGER.error("[ Error: fail to append %s, error: %s ]"
+                                     % (result_case.get('id'), error))
+
+    def __count_result(self, result_case):
+        """ record the pass,failed,block,N/A case number"""
+
+        if not result_case.get('result'):
+            result_case.set('result', 'N/A')
+            # add empty result node structure for N/A case
+            resinfo_elm = etree.Element('result_info')
+            res_elm = etree.Element('actual_result')
+            start_elm = etree.Element('start')
+            end_elm = etree.Element('end')
+            stdout_elm = etree.Element('stdout')
+            stderr_elm = etree.Element('stderr')
+            resinfo_elm.append(res_elm)
+            resinfo_elm.append(start_elm)
+            resinfo_elm.append(end_elm)
+            resinfo_elm.append(stdout_elm)
+            resinfo_elm.append(stderr_elm)
+            result_case.append(resinfo_elm)
+            res_elm.text = 'N/A'
+        if result_case.get('result') == "PASS":
+            self.testresult_dict["pass"] += 1
+        if result_case.get('result') == "FAIL":
+            self.testresult_dict["fail"] += 1
+        if result_case.get('result') == "BLOCK":
+            self.testresult_dict["block"] += 1
+        if result_case.get('result') == "N/A":
+            self.testresult_dict["not_run"] += 1
+
+    def __get_environment(self):
+        """ get environment """
+        device_info = self.connector.get_device_info()
+        build_info = self.connector.get_buildinfo(self.tizenV)
+
+        # add environment node
+        environment = etree.Element('environment')
+        environment.attrib['device_id'] = device_info['device_id']
+        environment.attrib['device_model'] = device_info["device_model"]
+        environment.attrib['device_name'] = device_info["device_name"]
+        environment.attrib['build_id'] = build_info['buildid']
+        environment.attrib['host'] = platform.platform()
+        environment.attrib['resolution'] = device_info["resolution"]
+        environment.attrib['screen_size'] = device_info["screen_size"]
+        environment.attrib['device_model'] = build_info['model']
+        environment.attrib['manufacturer'] = build_info['manufacturer']
+        other = etree.Element('other')
+        other.text = ""
+        environment.append(other)
+        environment.tail = "\n"
+
+        return environment
+
+    def __print_summary(self):
+        """ print test summary infomation"""
+        LOGGER.info("[ test summary ]")
+        total_case_number = int(self.testresult_dict["pass"]) \
+            + int(self.testresult_dict["fail"]) \
+            + int(self.testresult_dict["block"]) \
+            + int(self.testresult_dict["not_run"])
+        LOGGER.info("  [ total case number: %s ]" % (total_case_number))
+        if total_case_number == 0:
+            LOGGER.info("[Warning: found 0 case from the result files, "
+                        "if it's not right, please check the test xml files, "
+                        "or the filter values ]")
+        else:
+            LOGGER.info("  [ pass rate: %.2f%% ]" % (float(
+                self.testresult_dict["pass"]) * 100 / int(total_case_number)))
+            LOGGER.info("  [ PASS case number: %s ]" %
+                        self.testresult_dict["pass"])
+            LOGGER.info("  [ FAIL case number: %s ]" %
+                        self.testresult_dict["fail"])
+            LOGGER.info("  [ BLOCK case number: %s ]" %
+                        self.testresult_dict["block"])
+            LOGGER.info("  [ N/A case number: %s ]" %
+                        self.testresult_dict["not_run"])
+
+    def __prepare_external_test_json(self, resultfile):
+        """Run external test"""
+        parameters = {}
+        xml_set_tmp = resultfile
+        # split set_xml by <case> get case parameters
+        LOGGER.debug("[ split xml: %s by <case> ]" % xml_set_tmp)
+        LOGGER.debug("[ this might take some time, please wait ]")
+        try:
+            parse_tree = etree.parse(xml_set_tmp)
+            root_em = parse_tree.getroot()
+            case_tmp = []
+            for tset in root_em.getiterator('set'):
+                case_order = 1
+                parameters.setdefault(
+                    "casecount", str(len(tset.getiterator('testcase')))
+                )
+                parameters.setdefault("current_set_name", xml_set_tmp)
+
+                for tcase in tset.getiterator('testcase'):
+                    if self.skip_tc and str(self.skip_tc).find(tcase.get('id')) > -1:
+                        continue
+
+                    case_detail_tmp = {}
+                    step_tmp = []
+                    parameters.setdefault(
+                        "exetype", tcase.get('execution_type')
+                    )
+
+                    parameters.setdefault("type", tcase.get('type'))
+                    case_detail_tmp.setdefault("case_id", tcase.get('id'))
+                    case_detail_tmp.setdefault("purpose", tcase.get('purpose'))
+                    case_detail_tmp.setdefault("order", str(case_order))
+                    case_detail_tmp.setdefault("onload_delay", "3")
+
+                    if tcase.find('description/test_script_entry') is not None:
+                        tc_entry = tcase.find(
+                            'description/test_script_entry').text
+                        if not tc_entry:
+                            tc_entry = ""
+
+                        tc_entry = tc_entry.replace(DEVICE_SUITE_TARGET_30_STR,DEVICE_SUITE_TARGET_30)
+                        tc_entry = tc_entry.replace(DEVICE_EXECUTION_MODE_30_STR,DEVICE_EXECUTION_MODE_30)
+
+                        case_detail_tmp["entry"] = self.test_prefix + tc_entry
+                        if tcase.find(
+                                'description/test_script_entry')\
+                                        .get('timeout'):
+                            case_detail_tmp["timeout"] = tcase.find(
+                                'description/test_script_entry'
+                            ).get('timeout')
+                        if tcase.find(
+                            'description/test_script_entry'
+                        ).get('test_script_expected_result'):
+                            case_detail_tmp["expected_result"] = tcase.find(
+                                'description/test_script_entry'
+                            ).get('test_script_expected_result')
+                    for this_step in tcase.getiterator("step"):
+                        step_detail_tmp = {}
+                        step_detail_tmp.setdefault("order", "1")
+                        step_detail_tmp["order"] = str(this_step.get('order'))
+
+                        if this_step.find("step_desc") is not None:
+                            text = this_step.find("step_desc").text
+                            if text is not None:
+                                step_detail_tmp["step_desc"] = text
+
+                        if this_step.find("expected") is not None:
+                            text = this_step.find("expected").text
+                            if text is not None:
+                                step_detail_tmp["expected"] = text
+
+                        step_tmp.append(step_detail_tmp)
+
+                    case_detail_tmp['steps'] = step_tmp
+
+                    if tcase.find('description/pre_condition') is not None:
+                        text = tcase.find('description/pre_condition').text
+                        if text is not None:
+                            case_detail_tmp["pre_condition"] = text
+
+                    if tcase.find('description/post_condition') is not None:
+                        text = tcase.find('description/post_condition').text
+                        if text is not None:
+                            case_detail_tmp['post_condition'] = text
+
+                    if tcase.get('onload_delay') is not None:
+                        case_detail_tmp[
+                            'onload_delay'] = tcase.get('onload_delay')
+                    # Check performance test
+                    if tcase.find('measurement') is not None:
+                        measures = tcase.getiterator('measurement')
+                        measures_array = []
+                        for measure in measures:
+                            measure_json = {}
+                            measure_json['name'] = measure.get('name')
+                            measure_json['file'] = measure.get('file')
+                            measures_array.append(measure_json)
+                        case_detail_tmp['measures'] = measures_array
+                    case_tmp.append(case_detail_tmp)
+                    case_order += 1
+            parameters.setdefault("cases", case_tmp)
+            if self.bdryrun:
+                parameters.setdefault("dryrun", True)
+            self.set_parameters = parameters
+
+        except IOError as error:
+            LOGGER.error("[ Error: fail to prepare cases parameters, "
+                         "error: %s ]\n" % error)
+            return False
+        return True
+
+    def apply_filter(self, root_em):
+        """ apply filter """
+        rules = self.filter_rules
+        for tsuite in root_em.getiterator('suite'):
+            if rules.get('suite'):
+                if tsuite.get('name') not in rules['suite']:
+                    root_em.remove(tsuite)
+            for tset in tsuite.getiterator('set'):
+                if rules.get('set'):
+                    if tset.get('name') not in rules['set']:
+                        tsuite.remove(tset)
+
+            for tsuite in root_em.getiterator('suite'):
+                for tset in tsuite.getiterator('set'):
+                    # if there are capabilities ,do filter
+                    if self.has_capability:
+                        tset_status = self.__apply_capability_filter_set(tset)
+                        if not tset_status:
+                            tsuite.remove(tset)
+                            continue
+                    for tcase in tset.getiterator('testcase'):
+                        if not self.__apply_filter_case_check(tcase):
+                            tset.remove(tcase)
+
+    def __apply_filter_case_check(self, tcase):
+        """filter cases"""
+        rules = self.filter_rules
+        for key in rules.iterkeys():
+            if key in ["suite", "set"]:
+                continue
+
+            #suhee.yoo : priority filter
+            if key in ["priority"]:
+                if not tcase.get(key):
+                    return False
+
+            # Check attribute
+            t_val = tcase.get(key)
+            if t_val:
+                if not t_val in rules[key]:
+                    return False
+            else:
+                # Check sub-element
+                items = tcase.getiterator(key)
+                if items:
+                    t_val = []
+                    for i in items:
+                        t_val.append(i.text)
+                    if len(set(rules[key]) & set(t_val)) == 0:
+                        return False
+        return True
+
+    def __apply_capability_filter_set(self, tset):
+        """ check the set required capability with  self.capabilities """
+
+        for tcaps in tset.getiterator('capabilities'):
+            for tcap in tcaps.getiterator('capability'):
+                capname = None
+                capvalue = None
+                capname = tcap.get('name').lower()
+                if tcap.find('value') is not None:
+                    capvalue = tcap.find('value').text
+
+                if capname in self.capabilities:
+                    if capvalue is not None:
+                        if capvalue != self.capabilities[capname]:
+                            # if capability value is not equal ,remove the case
+                            return False
+                else:
+                    # if does not hava this capability ,remove case
+                    return False
+        return True
+
+    # sdx@kooltux.org: parse measures returned by test script
+    # and insert in XML result
+    # see xsd/test_definition.xsd: measurementType
+    _MEASURE_ATTRIBUTES = ['name', 'value', 'unit',
+                           'target', 'failure', 'power']
+
+    def __insert_measures(self, case, buf, pattern="###[MEASURE]###"):
+        """ get measures """
+        measures = self.__extract_measures(buf, pattern)
+        for measure in measures:
+            m_elm = etree.Element('measurement')
+            for key in measure:
+                m_elm.attrib[key] = measure[key]
+            case.append(m_elm)
+
+    def __extract_measures(self, buf, pattern):
+        """
+        This function extracts lines from <buf> containing the defined
+        <pattern>. For each line containing the pattern, it extracts the
+        string to the end of line Then it splits the content in multiple
+        fields using the defined separator <field_sep> and maps the fields
+        to measurement attributes defined in xsd. Finally, a list containing
+        all measurement objects found in input buffer is returned
+        """
+        out = []
+        for line in buf.split("\n"):
+            pos = line.find(pattern)
+            if pos < 0:
+                continue
+
+            measure = {}
+            elts = collections.deque(line[pos + len(pattern):].split(':'))
+            for k in self._MEASURE_ATTRIBUTES:
+                if len(elts) == 0:
+                    measure[k] = ''
+                else:
+                    measure[k] = elts.popleft()
+
+            # don't accept unnamed measure
+            if measure['name'] != '':
+                out.append(measure)
+        return out
+
+    def __init_com_module(self, testxml):
+        """
+            send init test to com_module
+            if webapi test,com_module will start testkit-stub
+            else com_module send the test case to devices
+        """
+        starup_prms = self.__prepare_starup_parameters(testxml)
+        # init stub and get the session_id
+        session_id = self.testworker.init_test(starup_prms)
+        if session_id == None:
+            LOGGER.error("[ Error: Initialization Error]")
+            return False
+        else:
+            self.set_session_id(session_id)
+            return True
+
+    def __prepare_starup_parameters(self, testxml):
+        """ prepare_starup_parameters """
+
+        starup_parameters = {}
+        LOGGER.info("[ prepare_startup_parameters ]")
+        try:
+            parse_tree = etree.parse(testxml)
+            tsuite = parse_tree.getroot().getiterator('suite')[0]
+            tset = parse_tree.getroot().getiterator('set')[0]
+            if tset.get("launcher") is not None:
+                starup_parameters['test-launcher'] = tset.get("launcher")
+            else:
+                starup_parameters['test-launcher'] = tsuite.get("launcher")
+            starup_parameters['testsuite-name'] = tsuite.get("name")
+            starup_parameters['testset-name'] = tset.get("name")
+            starup_parameters['stub-name'] = self.stub_name
+            if self.external_test is not None:
+                starup_parameters['external-test'] = self.external_test
+            starup_parameters['debug'] = self.debug
+            starup_parameters['test_prefix'] = self.test_prefix
+            if self.rerun:
+                starup_parameters['rerun'] = self.rerun
+            if len(self.capabilities) > 0:
+                starup_parameters['capability'] = self.capabilities
+            if self.tizenV is not None:
+                starup_parameters['tizen-version'] = self.tizenV
+            if self.stub_port is not None:
+                starup_parameters['stub-port'] = self.stub_port
+
+        except IOError as error:
+            LOGGER.error(
+                "[ Error: prepare startup parameters, error: %s ]" % error)
+        return starup_parameters
+
+    def __check_test_status(self):
+        '''
+            get_test_status from com_module
+            check the status
+            if end ,return ture; else return False
+        '''
+        # check test running or end
+        # if the status id end return True ,else return False
+
+        session_status = self.testworker.get_test_status(self.session_id)
+        # session_status["finished"] == "0" is running
+        # session_status["finished"] == "1" is end
+        if not session_status == None:
+            if session_status["finished"] == "0":
+                progress_msg_list = session_status["msg"]
+                for line in progress_msg_list:
+                    LOGGER.info(line)
+                return False
+            elif session_status["finished"] == "1":
+                return True
+        else:
+            LOGGER.error("[ session status error ,pls finalize test ]\n")
+            # return True to finished this set  ,becasue server error
+            return True
+
+    def finalize_test(self, sessionid):
+        '''shut_down testkit-stub'''
+        try:
+            self.testworker.finalize_test(sessionid)
+        except Exception as error:
+            LOGGER.error("[ Error: fail to close webapi http server, "
+                         "error: %s ]" % error)
+
+    def get_capability(self, file_name):
+        """get_capability from file """
+
+        capability_xml = file_name
+        capabilities = {}
+        try:
+            parse_tree = etree.parse(capability_xml)
+            root_em = parse_tree.getroot()
+            for tcap in root_em.getiterator('capability'):
+                capability = get_capability_form_node(tcap)
+                capabilities = dict(capabilities, **capability)
+
+            self.set_capability(capabilities)
+            return True
+        except IOError as error:
+            LOGGER.error(
+                "[ Error: fail to parse capability xml, error: %s ]" % error)
+            return False
+
+    def __write_set_result(self, testxmlfile, result):
+        '''
+            get the result JSON form com_module,
+            write them to orignal testxmlfile
+
+        '''
+        # write the set_result to set_xml
+        set_result_xml = testxmlfile
+        # covert JOSN to python dict string
+        set_result = result
+        if 'resultfile' in set_result:
+            self.__write_file_result(set_result_xml, set_result)
+        else:
+            write_json_result(set_result_xml, set_result)
+
+    def __write_file_result(self, set_result_xml, set_result):
+        """write xml result file"""
+        result_file = set_result['resultfile']
+        try:
+            if self.rerun:
+                LOGGER.info("[ Web UI FW Unit Test Does not support rerun.\
+                      Result should be N/A ]\n")
+            else:
+                test_tree = etree.parse(set_result_xml)
+                test_em = test_tree.getroot()
+                result_tree = etree.parse(result_file)
+                result_em = result_tree.getroot()
+                dubug_file = os.path.basename(set_result_xml)
+                dubug_file = os.path.splitext(dubug_file)[0] + '.dlog'
+                for result_suite in result_em.getiterator('suite'):
+                    for result_set in result_suite.getiterator('set'):
+                        for test_suite in test_em.getiterator('suite'):
+                            for test_set in test_suite.getiterator('set'):
+                                if result_set.get('name') == \
+                                        test_set.get('name'):
+                                    result_set.set("set_debug_msg", dubug_file)
+                                    test_suite.remove(test_set)
+                                    test_suite.append(result_set)
+                test_tree.write(set_result_xml)
+                os.remove(result_file)
+            LOGGER.info("[ cases result saved to resultfile ]\n")
+        except OSError as error:
+            traceback.print_exc()
+            LOGGER.error(
+                "[ Error: fail to write cases result, error: %s ]\n" % error)
+
+
+def get_capability_form_node(capability_em):
+    ''' splite capability key and value form element tree'''
+    tmp_key = ''
+    capability = {}
+    tcap = capability_em
+    if tcap.get("name"):
+        tmp_key = tcap.get("name").lower()
+
+    if tcap.get("type").lower() == 'boolean':
+        if tcap.get("support").lower() == 'true':
+            capability[tmp_key] = True
+
+    if tcap.get("type").lower() == 'integer':
+        if tcap.get("support").lower() == 'true':
+            if tcap.getiterator(
+                    "value") and tcap.find("value").text is not None:
+                capability[tmp_key] = int(tcap.find("value").text)
+
+    if tcap.get("type").lower() == 'string':
+        if tcap.get("support").lower() == 'true':
+            if tcap.getiterator(
+                    "value") and tcap.find("value").text is not None:
+                capability[tmp_key] = tcap.find("value").text
+
+    return capability
+
+
+def get_version_info():
+    """
+        get testkit tool version ,just read the version in VERSION file
+        VERSION file must put in /opt/testkit/lite2.4/
+    """
+    try:
+        config = ConfigParser.ConfigParser()
+        if platform.system() == "Linux":
+            config.read('/opt/testkit/lite2.4/VERSION')
+        else:
+            version_file = os.path.join(sys.path[0], 'VERSION')
+            config.read(version_file)
+        version = config.get('public_version', 'version')
+        return version
+    except KeyError as error:
+        LOGGER.error(
+            "[ Error: fail to parse version info, error: %s ]\n" % error)
+        return ""
+
+
+def replace_cdata(file_name):
+    """ replace some character"""
+    try:
+        abs_path = mktemp()
+        new_file = open(abs_path, 'w')
+        old_file = open(file_name)
+        for line in old_file:
+            line_temp = line.replace('&lt;![CDATA', '<![CDATA')
+            new_file.write(line_temp.replace(']]&gt;', ']]>'))
+        new_file.close()
+        old_file.close()
+        remove(file_name)
+        move(abs_path, file_name)
+    except IOError as error:
+        LOGGER.error("[ Error: fail to replace cdata in the result file, "
+                     "error: %s ]\n" % error)
+
+
+def extract_notes(buf, pattern):
+    """util func to split lines in buffer, search for pattern on each line
+    then concatenate remaining content in output buffer"""
+    out = ""
+    for line in buf.split("\n"):
+        pos = line.find(pattern)
+        if pos >= 0:
+            out += line[pos + len(pattern):] + "\n"
+    return out
+
+# sdx@kooltux.org: parse notes in buffer and insert them in XML result
+
+
+def insert_notes(case, buf, pattern="###[NOTE]###"):
+    """ insert notes"""
+    desc = case.find('description')
+    if desc is None:
+        return
+
+    notes_elm = desc.find('notes')
+    if notes_elm is None:
+        notes_elm = etree.Element('notes')
+        desc.append(notes_elm)
+    if notes_elm.text is None:
+        notes_elm.text = extract_notes(buf, pattern)
+    else:
+        notes_elm.text += "\n" + extract_notes(buf, pattern)
+
+
+def get_summary(start_time, end_time):
+    """ set summary node """
+    summary = etree.Element('summary')
+    summary.attrib['test_plan_name'] = "Empty test_plan_name"
+    start_at = etree.Element('start_at')
+    start_at.text = start_time
+    end_at = etree.Element('end_at')
+    end_at.text = end_time
+    summary.append(start_at)
+    summary.append(end_at)
+    summary.tail = "\n  "
+    return summary
+
+
+def write_json_result(set_result_xml, set_result):
+    ''' fetch result form JSON'''
+
+    case_results = set_result["cases"]
+    try:
+        parse_tree = etree.parse(set_result_xml)
+        root_em = parse_tree.getroot()
+        dubug_file = os.path.basename(set_result_xml)
+        dubug_file = os.path.splitext(dubug_file)[0] + '.dlog'
+        for tset in root_em.getiterator('set'):
+            tset.set("set_debug_msg", dubug_file)
+            for tcase in tset.getiterator('testcase'):
+                for case_result in case_results:
+                    if tcase.get("id") == case_result['case_id']:
+                        tcase.set('result', case_result['result'].upper())
+                        # Check performance test
+                        if tcase.find('measurement') is not None:
+                            for measurement in tcase.getiterator(
+                                    'measurement'):
+                                if 'measures' in case_result:
+                                    m_results = case_result['measures']
+                                    for m_result in m_results:
+                                        if measurement.get('name') == \
+                                                m_result['name'] and 'value' in m_result:
+                                            measurement.set(
+                                                'value', m_result[
+                                                    'value'])
+                        if tcase.find("./result_info") is not None:
+                            tcase.remove(tcase.find("./result_info"))
+                        result_info = etree.SubElement(tcase, "result_info")
+                        actual_result = etree.SubElement(
+                            result_info, "actual_result")
+                        actual_result.text = case_result['result'].upper()
+
+                        start = etree.SubElement(result_info, "start")
+                        end = etree.SubElement(result_info, "end")
+                        stdout = etree.SubElement(result_info, "stdout")
+                        stderr = etree.SubElement(result_info, "stderr")
+                        if 'start_at' in case_result:
+                            start.text = case_result['start_at']
+                        if 'end_at' in case_result:
+                            end.text = case_result['end_at']
+                        if 'stdout' in case_result:
+                            stdout.text = str2xmlstr(case_result['stdout'])
+                        if 'stderr' in case_result:
+                            stderr.text = str2xmlstr(case_result['stderr'])
+        parse_tree.write(set_result_xml)
+
+        LOGGER.info("[ cases result saved to resultfile ]\n")
+    except IOError as error:
+        traceback.print_exc()
+        LOGGER.error(
+            "[ Error: fail to write cases result, error: %s ]\n" % error)
+
diff --git a/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite1.0/testkitlite/engines/default/runner.pyc b/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite1.0/testkitlite/engines/default/runner.pyc
new file mode 100755 (executable)
index 0000000..697e3cf
Binary files /dev/null and b/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite1.0/testkitlite/engines/default/runner.pyc differ
diff --git a/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite1.0/testkitlite/engines/default/worker.py b/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite1.0/testkitlite/engines/default/worker.py
new file mode 100755 (executable)
index 0000000..3536493
--- /dev/null
@@ -0,0 +1,661 @@
+#!/usr/bin/python
+#
+# Copyright (C) 2012 Intel Corporation
+#
+# 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
+# of the License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+# MA  02110-1301, USA.
+#
+# Authors:
+#           Chengtao,Liu  <chengtaox.liu@intel.com>
+""" The implementation test worker"""
+
+import os
+import time
+import threading
+import uuid
+import ConfigParser
+
+from datetime import datetime
+from commodule.log import LOGGER
+from commodule.httprequest import get_url, http_request
+
+TCT_CONFIG_FILE = "/opt/tools/TCT_CONFIG"
+tct_parser = ConfigParser.ConfigParser()
+tct_parser.read(TCT_CONFIG_FILE)
+
+DEVICE_SUITE_TARGET_24 = tct_parser.get('DEVICE', 'DEVICE_SUITE_TARGET_24')
+DEVICE_SUITE_TARGET_30 = tct_parser.get('DEVICE', 'DEVICE_SUITE_TARGET_30')
+
+CNT_RETRY = 10
+DATE_FORMAT_STR = "%Y-%m-%d %H:%M:%S"
+UIFW_MAX_TIME = 300
+UIFW_MAX_WRITE_TIME = 10
+UIFW_RESULT = os.path.join(DEVICE_SUITE_TARGET_24, "Documents/tcresult")
+UIFW_SET_NUM = 0
+LAUNCH_ERROR = 1
+BLOCK_ERROR = 3
+
+
+class TestSetResut(object):
+
+    """ test result """
+
+    _progress = "execute case: %s # %s...(%s)"
+    _mutex = threading.Lock()
+
+    def __init__(self, testsuite_name="", testset_name=""):
+        self._suite_name = testsuite_name
+        self._set_name = testset_name
+        self._result = {"cases": []}
+        self._finished = 0
+
+    def set_status(self, flag=0):
+        """set finished tag"""
+        self._mutex.acquire()
+        self._finished = flag
+        self._mutex.release()
+
+    def get_status(self):
+        """return finished tag"""
+        self._mutex.acquire()
+        flag = self._finished
+        self._mutex.release()
+        return flag
+
+    def set_result(self, tresult):
+        """set cases result to result buffer"""
+        self._mutex.acquire()
+        self._result = tresult
+        self._mutex.release()
+
+    def extend_result(self, cases_result=None, print_out=True):
+        """update cases result to the result buffer"""
+        self._mutex.acquire()
+        if cases_result is not None:
+            self._result["cases"].extend(cases_result)
+
+        if print_out:
+            for case_it in cases_result:
+                LOGGER.info(self._progress %
+                            (self._suite_name, case_it['case_id'], \
+                                    case_it['result']))
+                if case_it['result'].lower() in ['fail', 'block'] \
+                        and 'stdout' in case_it:
+                    LOGGER.info(case_it['stdout'])
+        self._mutex.release()
+
+    def get_result(self):
+        """get cases result from the result buffer"""
+        self._mutex.acquire()
+        result = self._result
+        self._mutex.release()
+        return result
+
+
+def _print_dlog(dlog_file):
+    if os.path.exists(dlog_file):
+        LOGGER.info('[ start of dlog message ]')
+        readbuff = file(dlog_file, "r")
+        for line in readbuff.readlines():
+            LOGGER.info(line.strip('\n'))
+        LOGGER.info('[ end of dlog message ]')
+
+
+def _core_test_exec(conn, test_set_name, exetype, cases_queue, result_obj, \
+        tizen_version):
+    """function for running core tests"""
+    exetype = exetype.lower()
+    total_count = len(cases_queue)
+    current_idx = 0
+    manual_skip_all = False
+    result_list = []
+    for test_case in cases_queue:
+        if result_obj.get_status() == 1:
+            break
+
+        current_idx += 1
+        core_cmd = ""
+        if "entry" in test_case:
+            core_cmd = test_case["entry"]
+        else:
+            LOGGER.info(
+                "[ Warnning: test script is empty,"
+                " please check your test xml file ]")
+            continue
+        expected_result = test_case.get('expected_result', '0')
+        time_out = int(test_case.get('timeout', '90'))
+        measures = test_case.get('measures', [])
+        retmeasures = []
+
+        LOGGER.info("\n[%s:%s] TestCase: %s\n"
+                    "TestEntry: %s"
+                    % (current_idx, total_count, test_case['case_id'], core_cmd))
+        strtime = datetime.now().strftime(DATE_FORMAT_STR)
+        LOGGER.info("start: %s" % strtime)
+        test_case["start_at"] = strtime
+        if exetype == 'auto':
+            return_code, stdout, stderr = conn.shell_cmd_ext(
+                core_cmd, time_out, False)
+
+            if return_code is not None and return_code != "timeout":
+                test_case["result"] = "pass" if str(
+                    return_code) == expected_result else "fail"
+                test_case["stdout"] = stdout
+                test_case["stderr"] = stderr
+                for item in measures:
+                    ind = item['name']
+                    fname = item['file']
+                    if fname is None:
+                        continue
+                    tmpname = os.path.expanduser("~") + os.sep + "mea_tmp"
+                    if conn.download_file(fname, tmpname):
+                        try:
+                            config = ConfigParser.ConfigParser()
+                            config.read(tmpname)
+                            item['value'] = config.get(ind, 'value')
+                            retmeasures.append(item)
+                            os.remove(tmpname)
+                        except IOError as error:
+                            LOGGER.error(
+                                "[ Error: fail to parse value,"
+                                " error:%s ]\n" % error)
+                test_case["measures"] = retmeasures
+            else:
+                test_case["result"] = "BLOCK"
+                test_case["stdout"] = stdout
+                test_case["stderr"] = stderr
+        elif exetype == 'manual':
+            # handle manual core cases
+            try:
+                # LOGGER.infopre-condition info
+                if "pre_condition" in test_case:
+                    LOGGER.info("\n****\nPre-condition: %s\n ****\n"
+                                % test_case['pre_condition'])
+                # LOGGER.infostep info
+                if "steps" in test_case:
+                    for step in test_case['steps']:
+                        LOGGER.info(
+                            "********************\n"
+                            "Step Order: %s" % step['order'])
+                        LOGGER.info("Step Desc: %s" % step['step_desc'])
+                        LOGGER.info(
+                            "Expected: %s\n********************\n"
+                            % step['expected'])
+                if manual_skip_all:
+                    test_case["result"] = "N/A"
+                else:
+                    while True:
+                        test_result = raw_input(
+                            '[ please input case result ]'
+                            ' (p^PASS, f^FAIL, b^BLOCK, n^Next, d^Done):')
+                        if test_result.lower() == 'p':
+                            test_case["result"] = "PASS"
+                            break
+                        elif test_result.lower() == 'f':
+                            test_case["result"] = "FAIL"
+                            break
+                        elif test_result.lower() == 'b':
+                            test_case["result"] = "BLOCK"
+                            break
+                        elif test_result.lower() == 'n':
+                            test_case["result"] = "N/A"
+                            break
+                        elif test_result.lower() == 'd':
+                            manual_skip_all = True
+                            test_case["result"] = "N/A"
+                            break
+                        else:
+                            LOGGER.info(
+                                "[ Warnning: you input: '%s' is invalid,"
+                                " please try again ]" % test_result)
+            except IOError as error:
+                LOGGER.info(
+                    "[ Error: fail to get core manual test step,"
+                    " error: %s ]\n" % error)
+        strtime = datetime.now().strftime(DATE_FORMAT_STR)
+        LOGGER.info("end : %s" % strtime)
+        test_case["end_at"] = strtime
+        LOGGER.info("execute case: %s" % test_case["result"])
+        result_list.append(test_case)
+
+    result_obj.extend_result(result_list, False)
+    result_obj.set_status(1)
+
+
+def _web_test_exec(conn, server_url, test_web_app, exetype, cases_queue, \
+        result_obj, tizen_version):
+    """function for running web tests"""
+    exetype = exetype.lower()
+    test_set_finished = False
+    err_cnt = 0
+    relaunch_cnt = 0
+    for test_group in cases_queue:
+        if test_set_finished:
+            break
+
+        ret = http_request(
+            get_url(server_url, "/set_testcase"), "POST", test_group, 30)
+        if ret is None:
+            LOGGER.error(
+                "[ set testcases timeout, please check device! ]")
+            result_obj.set_status(1)
+            break
+
+        if not conn.launch_app(test_web_app):
+            result_obj.set_status(1)
+            break
+
+        while True:
+            if result_obj.get_status() == 1:
+                test_set_finished = True
+                break
+            ret = http_request(
+                get_url(server_url, "/check_server_status"), "GET", {})
+            if ret is None:
+                err_cnt += 1
+                LOGGER.info("/check_server_status : %s " % ret)
+                if err_cnt >= CNT_RETRY:
+                    LOGGER.error(
+                        "[ check server status time out, \
+                                please check device! ]")
+                    test_set_finished = True
+                    result_obj.set_status(1)
+                    break
+            else:
+                result_cases = ret.get("cases")
+                error_code = ret.get("error_code")
+                if error_code is not None:
+                    if not conn.launch_app(test_web_app):
+                        test_set_finished = True
+                        result_obj.set_status(1)
+                        break
+                    if error_code == LAUNCH_ERROR:
+                        LOGGER.error("[ERROR : test app no response, hang or not launched!]")
+                        relaunch_cnt += 1
+                        if relaunch_cnt >= 3:
+                            test_set_finished = True
+                            result_obj.set_status(1)
+                            break
+                    elif error_code == BLOCK_ERROR:
+                        relaunch_cnt = 0
+                else:
+                    err_cnt = 0
+                    relaunch_cnt = 0
+
+                if result_cases is not None and len(result_cases):
+                    result_obj.extend_result(result_cases)
+                elif exetype == 'manual':
+                    LOGGER.info(
+                        "[ please execute manual cases ]\r\n")
+
+                if ret["finished"] == 1:
+                    test_set_finished = True
+                    result_obj.set_status(1)
+                    break
+                elif ret["block_finished"] == 1:
+                    break
+            time.sleep(2)
+
+
+def _webuifw_test_exec(conn, test_web_app, test_session, test_set_name, \
+        exetype, cases_queue, result_obj):
+    """function for running webuifw tests"""
+    global UIFW_SET_NUM
+    UIFW_SET_NUM = UIFW_SET_NUM + 1
+    set_UIFW_RESULT = UIFW_RESULT + "_" + str(UIFW_SET_NUM) + ".xml"
+    result_obj.set_status(0)
+    result_obj.set_result({"resultfile": ""})
+    ls_cmd = "ls -l %s" % set_UIFW_RESULT
+    sz_cmd = "du -hk %s " % set_UIFW_RESULT
+    time_out = UIFW_MAX_TIME
+    rm_cmd = "rm " + os.path.join(DEVICE_SUITE_TARGET_24, "Documents/tcresult*.xml")
+
+    if exetype == "auto":
+        conn.shell_cmd(rm_cmd)
+        UIFW_SET_NUM = 1
+        LOGGER.info('[webuifw] start test executing')
+        if not conn.launch_app(test_web_app):
+            LOGGER.info("[ launch test app \"%s\" failed! ]" \
+                    % str(test_web_app))
+            result_obj.set_result({"resultfile": ""})
+            result_obj.set_status(1)
+
+    result_file = os.path.expanduser("~") + os.sep + test_session + "_uifw.xml"
+
+    while time_out > 0:
+        LOGGER.info('[webuifw] waiting for test completed...')
+        exit_code, ret = conn.shell_cmd(ls_cmd)
+        if not 'No such file or directory' in ret[0]:
+            exit_code, ret = conn.shell_cmd(sz_cmd)
+            f_size = int(ret[0].split("\t")[0])
+            if f_size > 0:
+                break
+            if time_out > UIFW_MAX_WRITE_TIME:
+                time_out = UIFW_MAX_WRITE_TIME
+        time.sleep(2)
+        time_out -= 2
+
+    LOGGER.info('[webuifw] end test executing')
+    if conn.download_file(set_UIFW_RESULT, result_file):
+        result_obj.set_result({"resultfile": result_file})
+    for test_case in cases_queue:
+        LOGGER.info("[webuifw] execute case: %s # %s" %
+                    (test_set_name, test_case['case_id']))
+    result_obj.set_status(1)
+
+
+class TestWorker(object):
+
+    """Test executor for testkit-lite"""
+
+    def __init__(self, client=None):
+        super(TestWorker, self).__init__()
+        self.conn = client
+        self.tizen_version = ""
+        self.server_url = None
+        self.result_obj = None
+        self.opts = dict({'block_size': 300,
+                          'test_type': None,
+                          'auto_iu': False,
+                          'fuzzy_match': False,
+                          'self_exec': False,
+                          'self_repeat': False,
+                          'debug_mode': False
+                          })
+
+    def set_TizenVersion(self, tizenversion):
+        self.tizen_version = tizenversion
+
+    def __init_test_stub(self, stub_app, stub_port, debug_opt):
+        # init testkit-stub deamon process
+        timecnt = 0
+        blaunched = False
+        while timecnt < CNT_RETRY:
+            if not self.conn.check_process(stub_app):
+                LOGGER.info(\
+                        "[ no stub process activated, now try to launch %s ]"\
+                        % stub_app)
+                self.conn.launch_stub(stub_app, stub_port, debug_opt)
+                timecnt += 1
+            else:
+                blaunched = True
+                break
+
+        if not blaunched:
+            LOGGER.info("[ launch stub process failed! ]")
+            return False
+
+        if self.server_url is None:
+            self.server_url = self.conn.get_server_url(stub_port)
+
+        timecnt = 0
+        blaunched = False
+        while timecnt < CNT_RETRY:
+            ret = http_request(get_url(
+                self.server_url, "/check_server_status"), "GET", {})
+            if ret is None:
+                LOGGER.info("[ check server status, not ready yet! ]")
+                timecnt += 1
+                time.sleep(1)
+            else:
+                blaunched = True
+                break
+        return blaunched
+
+    def __init_webtest_opt(self, params):
+        """init the test runtime, mainly process the star up of test stub"""
+        if params is None:
+            return None
+
+        session_id = str(uuid.uuid1())
+        cmdline = ""
+        debug_opt = ""
+        stub_app = params.get('stub-name', 'testkit-stub')
+        stub_port = params.get('stub-port', '8000')
+        test_launcher = params.get('external-test', '')
+        testsuite_name = params.get('testsuite-name', '')
+        testset_name = params.get('testset-name', '')
+        capability_opt = params.get("capability", None)
+        client_cmds = params.get('test-launcher', '').strip().split()
+        wrt_tag = client_cmds[1] if len(client_cmds) > 1 else ""
+        self.opts['fuzzy_match'] = fuzzy_match = wrt_tag.find('z') != -1
+        self.opts['auto_iu'] = auto_iu = wrt_tag.find('iu') != -1
+        self.opts['self_exec'] = wrt_tag.find('a') != -1
+        self.opts['self_repeat'] = wrt_tag.find('r') != -1
+        self.opts['debug_mode'] = params.get("debug", False)
+
+        test_opt = self.conn.get_launcher_opt(
+            test_launcher, testsuite_name, testset_name, fuzzy_match, auto_iu)
+        if test_opt is None:
+            LOGGER.info("[ init the test options, get failed ]")
+            return None
+
+        # to be removed in later version
+        test_opt["suite_id"] = test_opt["test_app_id"]
+        self.opts.update(test_opt)
+
+        # uifw, this suite don't need stub
+        if self.opts['self_exec'] or self.opts['self_repeat']:
+            self.opts['test_type'] = "jqunit"
+            return session_id
+
+        # enable debug information
+        if self.opts['debug_mode']:
+            debug_opt = '--debug'
+
+        if self.__init_test_stub(stub_app, stub_port, debug_opt):
+            ret = http_request(get_url(
+                self.server_url, "/init_test"), "POST", test_opt)
+            if ret is None:
+                LOGGER.info("[ init test suite failed! ]")
+                return None
+            elif "error_code" in ret:
+                LOGGER.info("[ init test suite, "
+                            "get error code %d ! ]" % ret["error_code"])
+                return None
+
+            if capability_opt is not None:
+                ret = http_request(get_url(self.server_url,
+                                           "/set_capability"),
+                                   "POST", capability_opt)
+            return session_id
+        else:
+            LOGGER.info("[ Init test failed ! ]")
+            return None
+
+    def init_test(self, params):
+        """init the test envrionment"""
+        self.opts['testset_name'] = params.get('testset-name', '')
+        self.opts['testsuite_name'] = params.get('testsuite-name', '')
+        if params.get('test-launcher') is not None:
+            self.opts['test_type'] = "webapi"
+            return self.__init_webtest_opt(params)
+        else:
+            self.opts['test_type'] = "coreapi"
+            return str(uuid.uuid1())
+
+    def __run_core_test(self, sessionid, test_set_name, exetype, cases):
+        """
+            process the execution for core api test
+        """
+        self.opts['async_th'] = threading.Thread(
+            target=_core_test_exec,
+            args=(
+                self.conn, test_set_name, exetype, cases, self.result_obj,\
+                        self.tizen_version)
+        )
+        self.opts['async_th'].start()
+        return True
+
+    def __run_jqt_test(self, sessionid, test_set_name, cases):
+        """
+            process the execution for Qunit testing
+        """
+        exetype = "auto" if self.opts['self_exec'] else ""
+        self.opts['async_th'] = threading.Thread(
+            target=_webuifw_test_exec,
+            args=(
+                self.conn, self.opts['test_app_id'], sessionid, test_set_name,\
+                        exetype, cases, self.result_obj)
+        )
+        self.opts['async_th'].start()
+        return True
+
+    def __run_web_test(self, sessionid, test_set_name, exetype, ctype, cases):
+        """
+            process the execution for web api test
+            may be splitted to serveral blocks,
+            with the unit size defined by block_size
+        """
+        case_count = len(cases)
+        blknum = 0
+        if case_count % self.opts['block_size'] == 0:
+            blknum = case_count / self.opts['block_size']
+        else:
+            blknum = case_count / self.opts['block_size'] + 1
+
+        idx = 1
+        test_set_queues = []
+        while idx <= blknum:
+            block_data = {}
+            block_data["exetype"] = exetype
+            block_data["type"] = ctype
+            block_data["totalBlk"] = str(blknum)
+            block_data["currentBlk"] = str(idx)
+            block_data["casecount"] = str(case_count)
+            start = (idx - 1) * self.opts['block_size']
+            if idx == blknum:
+                end = case_count
+            else:
+                end = idx * self.opts['block_size']
+            block_data["cases"] = cases[start:end]
+            test_set_queues.append(block_data)
+            idx += 1
+        self.opts['async_th'] = threading.Thread(
+            target=_web_test_exec,
+            args=(
+                self.conn, self.server_url, self.opts['test_app_id'], exetype,\
+                        test_set_queues, self.result_obj, self.tizen_version)
+        )
+        self.opts['async_th'].start()
+        return True
+
+    def run_test(self, sessionid, test_set):
+        """
+            process the execution for a test set
+        """
+        if sessionid is None:
+            return False
+
+        if not "cases" in test_set:
+            return False
+
+        # start debug trace thread
+        dlogfile = test_set['current_set_name'].replace('.xml', '.dlog')
+        self.opts['dlog_file'] = dlogfile
+        self.conn.start_debug(dlogfile)
+        time.sleep(1)
+
+        self.result_obj = TestSetResut(
+            self.opts['testsuite_name'], self.opts['testset_name'])
+
+        cases, exetype, ctype = test_set[
+            "cases"], test_set["exetype"], test_set["type"]
+
+        devid = self.conn.get_devid()
+        if self.conn.is_NE_mode() or (devid and devid.find('None') > -1):
+            result_list = []
+            for case in cases:
+                test_case = {}
+                test_case['case_id'] = case['case_id']
+                test_case['result'] = 'N/A'
+                if devid.find('None') > -1:
+                    test_case['stdout'] = "target not found"
+                else:
+                    issue_num = int(self.conn.is_NE_mode())
+                    err_msg = "precondition failed "
+                    if issue_num == 1:
+                        err_msg += "(not connected to wifi)"
+                    elif issue_num == 2:
+                        err_msg += "(not set email account)"
+                    elif issue_num == 3:
+                        err_msg += "(not available device network)"
+                    elif issue_num == 4:
+                        err_msg += "(not enable bluetooth)"
+                    elif issue_num == 5:
+                        err_msg += "(not enable nfc)"
+                    elif issue_num == 6:
+                        err_msg += "(not available sim card)"
+                    test_case['stdout'] = err_msg
+
+                result_list.append(test_case)
+
+            self.result_obj.extend_result(result_list)
+            self.result_obj.set_status(1)
+            return True
+
+        if self.opts['test_type'] == "webapi":
+            return self.__run_web_test(sessionid, \
+                    self.opts['testset_name'], exetype, ctype, cases)
+        elif self.opts['test_type'] == "coreapi":
+            return self.__run_core_test(sessionid, \
+                    self.opts['testset_name'], exetype, cases)
+        elif self.opts['test_type'] == "jqunit":
+            return self.__run_jqt_test(sessionid, \
+                    self.opts['testset_name'], cases)
+        else:
+            LOGGER.info("[ unsupported test suite type ! ]")
+            return False
+
+    def get_test_status(self, sessionid):
+        """poll the test task status"""
+        if sessionid is None:
+            return None
+        result = {}
+        result["msg"] = []
+        result["finished"] = str(self.result_obj.get_status())
+        return result
+
+    def get_test_result(self, sessionid):
+        """get the test result for a test set """
+        result = {}
+        if sessionid is None:
+            return result
+
+        result = self.result_obj.get_result()
+        return result
+
+    def finalize_test(self, sessionid):
+        """clear the test stub and related resources"""
+        if sessionid is None:
+            return False
+
+        self.result_obj.set_status(1)
+
+        # stop test app
+        if self.opts['test_type'] == "webapi":
+            self.conn.kill_app(self.opts['test_app_id'])
+            # uninstall test app
+            if self.opts['auto_iu']:
+                self.conn.uninstall_app(self.opts['test_app_id'])
+
+        # stop debug thread
+        self.conn.stop_debug()
+
+        # add dlog output for debug
+        if self.opts['debug_mode']:
+            _print_dlog(self.opts['dlog_file'])
+
+        return True
diff --git a/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite1.0/testkitlite/engines/default/worker.pyc b/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite1.0/testkitlite/engines/default/worker.pyc
new file mode 100755 (executable)
index 0000000..7633909
Binary files /dev/null and b/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite1.0/testkitlite/engines/default/worker.pyc differ
diff --git a/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite1.0/web/Makefile.am b/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite1.0/web/Makefile.am
new file mode 100755 (executable)
index 0000000..7c6dc85
--- /dev/null
@@ -0,0 +1,22 @@
+# Copyright (C) 2012 Intel Corporation
+# 
+# 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
+# of the License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
+#
+# Authors:
+#              Zhang, Huihui <huihuix.zhang@intel.com>
+#              Wendong,Sui  <weidongx.sun@intel.com>
+
+testkitwebdir = /opt/testkit/web
+dist_testkitweb_DATA = *.html *.js
diff --git a/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite1.0/web/index.html b/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite1.0/web/index.html
new file mode 100755 (executable)
index 0000000..ffe4019
--- /dev/null
@@ -0,0 +1,1148 @@
+<!doctype html>
+<!--
+# Copyright (C) 2012 Intel Corporation
+# 
+# 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
+# of the License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
+#
+# Authors:
+#              Wang, Jing <jing.j.wang@intel.com>
+#              Tang, Shaofeng  <shaofeng.tang@intel.com>
+-->
+<head>
+<meta name="viewport" content="width=device-width">
+<script src="jquery.js"></script>
+<script>
+       var iTest = 0;
+
+       var Tests;
+       var statusNode;
+       var oTestFrame;
+       var statusFrame;
+       var frmset;
+       var xmldoc;
+
+       var startTime;
+       var defTime = 2000;
+       var timeout;
+       var winCloseTimeout = 5000;
+       var blockCheckTime = 10;
+
+       var server = "http://127.0.0.1:8000";
+       var need_ajax = true;
+
+       var hidestatus;
+       var ttestsuite;
+       var tpriority;
+       var tstatus;
+       var ttype;
+       var tcategory;
+       var texecutiontype;
+
+       var manualcaseslist;
+
+       var cursuite;
+       var curset;
+
+       var last_test_page = "";
+       var current_page_uri = "";
+
+       var activetest = true;
+
+       var manualcases = function() {
+               this.casesid = "";
+               this.index = 0;
+               this.result = "";
+       };
+
+       function getTestPageParam(uri, param) {
+               var uri_local = uri;
+               var iLen = param.length;
+               var iStart = uri_local.indexOf(param);
+               if (iStart == -1)
+                       return "";
+               iStart += iLen + 1;
+               var iEnd = uri_local.indexOf("&", iStart);
+               if (iEnd == -1)
+                       return uri_local.substring(iStart);
+
+               return uri_local.substring(iStart, iEnd);
+       }
+
+       function Parm(data, name) {
+               var p;
+               ts = $(data).find(name);
+               if (ts) {
+                       t = $(ts).get(0);
+                       if (t)
+                               p = $(t).text().trim();
+               }
+
+               if (p) {
+                       var rawVal = decodeURI(p);
+                       if (rawVal.indexOf(',') < 0)
+                               p = rawVal;
+                       else
+                               p = rawVal.split(',');
+               }
+
+               return p;
+       }
+
+       function getParms() {
+               var parms = new Array();
+               var str = location.search.substring(1);
+               var items = str.split('&');
+               for ( var i = 0; i < items.length; i++) {
+                       var pos = items[i].indexOf('=');
+                       if (pos > 0) {
+                               var key = items[i].substring(0, pos);
+                               var val = items[i].substring(pos + 1);
+                               if (!parms[key]) {
+                                       var rawVal = decodeURI(val);
+                                       if (rawVal.indexOf(',') < 0)
+                                               parms[key] = rawVal;
+                                       else
+                                               parms[key] = rawVal.split(',');
+                               }
+                       }
+               }
+
+               ttestsuite = parms["testsuite"];
+               tpriority = parms["priority"];
+               hidestatus = parms["hidestatus"];
+               tstatus = parms["status"];
+               ttype = parms["type"];
+               tcategory = parms["category"];
+               texecutiontype = parms["execution_type"];
+               if (need_ajax) {
+                       $.ajax({
+                               async : false,
+                               type : "GET",
+                               url : server + "/get_params",
+                               dataType : "xml",
+                               success : function(data) {
+                                       hidestatus = Parm(data, 'hidestatus');
+                               },
+                               error : function(x, t, e) {
+                                       print_error_log("getParms", e);
+                               }
+                       });
+               }
+       }
+
+       function runTestsuite_nofilter(xml) {
+               xmldoc = xml;
+               Tests = $(xml).find("testcase");
+               doTest();
+       }
+
+       function runTestsuite(xml) {
+               xmldoc = xml;
+               $(xml).find("testcase").each(
+                               function() {
+                                       var v, vType;
+                                       v = $(this).attr('execution_type');
+
+                                       if (texecutiontype && texecutiontype == "manual")
+                                               vType = "manual";
+                                       else if (texecutiontype && texecutiontype == "auto")
+                                               vType = "auto";
+                                       else if (!texecutiontype)
+                                               vType = [ "auto", "manual" ];
+                                       else
+                                               vType = "auto";
+
+                                       if (v != vType && $.inArray(v, vType) < 0)
+                                               $(this).remove();
+                                       v = $(this).attr('priority');
+                                       if (tpriority && v != tpriority
+                                                       && $.inArray(v, tpriority) < 0)
+                                               $(this).remove();
+                                       v = $(this).attr('status');
+                                       if (tstatus && v != tstatus && $.inArray(v, tstatus) < 0)
+                                               $(this).remove();
+                                       v = $(this).attr('type');
+                                       if (ttype && v != ttype && $.inArray(v, ttype) < 0)
+                                               $(this).remove();
+                                       var categories = $(this).find("categories > category");
+                                       if (categories.length > 0 && tcategory) {
+                                               var i;
+                                               var found = false;
+                                               for (i = 0; i < categories.length; i++) {
+                                                       var category = $(categories).get(i);
+                                                       if ($(category).text().trim() != tcategory
+                                                                       && $.inArray($(category).text().trim(),
+                                                                                       tcategory) < 0) {
+                                                               found = true;
+                                                               break;
+                                                       }
+                                               }
+                                               if (!found)
+                                                       $(this).remove();
+                                       }
+
+                                       $(this).attr('result', "N/A");
+                               });
+               Tests = $(xml).find("testcase");
+               xmldoc = xml;
+               save_result();
+               doTest();
+       }
+
+       function precheck_init() {
+               server_url = "http://127.0.0.1:8000/check_server";
+               $.ajax({
+                       async : false,
+                       url : server_url,
+                       type : "GET",
+                       success : init_test,
+                       error : function(x, t, e) {
+                               print_error_log("can't find a http server",
+                                               "run widget in the standalone mode");
+                               need_ajax = false;
+                               init();
+                       }
+               });
+       }
+
+       function init() {
+               getParms();
+
+               oTestFrame = document.getElementById('testframe');
+               if (!oTestFrame)
+                       return;
+
+               statusFrame = document.getElementById('statusframe');
+               if (!statusFrame)
+                       return;
+
+               var statusWin = statusFrame.contentWindow;
+               if (!statusWin)
+                       return;
+
+               statusNode = statusWin.document.createElement("div");
+               if (!statusNode)
+                       return;
+               statusWin.document.body.appendChild(statusNode);
+
+               frmset = $($('#main')).get(0);
+               if (!frmset)
+                       return;
+
+               if (hidestatus && hidestatus == "1")
+                       $(frmset).attr('rows', "0, *");
+               if (need_ajax) {
+                       $.ajax({
+                               async : false,
+                               type : "GET",
+                               url : server + '/get_testsuite',
+                               dataType : "xml",
+                               success : runTestsuite_nofilter,
+                               error : function(x, t, e) {
+                                       print_error_log("init", e);
+                               }
+                       });
+               }
+               if (!xmldoc) {
+                       if (!ttestsuite) {
+                               ttestsuite = 'tests.xml';
+                       }
+                       $.ajax({
+                               async : false,
+                               type : "GET",
+                               url : ttestsuite,
+                               dataType : "xml",
+                               success : runTestsuite,
+                               error : function(x, t, e) {
+                                       print_error_log("init", e);
+                               }
+                       });
+               }
+       }
+
+       function escape_html(s) {
+               return s.replace(/\&/g, "&amp;").replace(/</g, "&lt;").replace(/"/g,
+                               "&quot;").replace(/'/g, "&#39;");
+       }
+
+       function check_timeout(time) {
+               if (time == 11) {
+                       report('BLOCK', "Time is out");
+               }
+               sleep_time = time * 50;
+               setTimeout("CheckResult('yes', " + time + ")", sleep_time);
+       }
+
+       function CheckResult(need_check_block, sleep_time) {
+               var message = "";
+               var total_num = "";
+               var locator_key = "";
+               var value = "";
+
+               var oTestWin = oTestFrame.contentWindow;
+               var oTestDoc = oTestWin.document;
+               var case_uri = current_page_uri;
+
+               try {
+                       if (oTestWin.document.readyState == "complete") {
+                               total_num = getTestPageParam(case_uri, "total_num");
+                               locator_key = getTestPageParam(case_uri, "locator_key");
+                               value = getTestPageParam(case_uri, "value");
+
+                               oPass = $(oTestDoc).find(".pass");
+                               oFail = $(oTestDoc).find(".fail");
+
+                               // Test page has parameters
+                               if (total_num != "" && locator_key != "" && value != "") {
+                                       if (locator_key == "id") {
+                                               var results;
+                                               var passes;
+                                               var fails;
+
+                                               var oRes = $(oTestDoc).find("table#results");
+                                               if (oRes) {
+                                                       results = $(oRes).find('tr');
+                                                       passes = $(oRes).find('tr.pass');
+                                                       fails = $(oRes).find('tr.fail');
+                                               }
+
+                                               if (passes.length + fails.length == total_num) {
+                                                       var i = 1;
+                                                       for (i = 1; i <= total_num; i++) {
+                                                               if (i.toString() != value) {
+                                                                       continue;
+                                                               }
+                                                               var rest = results[i].childNodes[0].textContent;
+                                                               var desc = results[i].childNodes[1].textContent;
+                                                               var msg = results[i].childNodes[2].textContent;
+                                                               if (rest && rest.toUpperCase() == "PASS")
+                                                                       report('PASS', msg);
+                                                               else
+                                                                       report('FAIL', msg);
+                                                               break;
+                                                       }
+                                               } else {
+                                                       var i;
+                                                       for (i = 0; i < fails.length; i++) {
+                                                               var desccell = fails[i].childNodes[1];
+                                                               if (desccell)
+                                                                       message += "\n###Test Start###\n"
+                                                                                       + desccell.textContent
+                                                                                       + "\n###Test End###\n";
+                                                               var msgcell = fails[i].childNodes[2];
+                                                               if (msgcell)
+                                                                       message += "###Error1 Start###\n"
+                                                                                       + msgcell.textContent
+                                                                                       + "\n###Error1 End###";
+                                                       }
+                                                       report('FAIL', message);
+                                               }
+                                       } else if (locator_key == "test_name") {
+                                               // Place holder
+                                       } else if (locator_key == "msg") {
+                                               // Place holder
+                                       } else {
+                                               alert("Unknown locator key");
+                                       }
+                               } else if (oPass.length > 0 && oFail.length == 0) {
+                                       if (oTestWin.resultdiv)
+                                               message = oTestWin.resultdiv.innerHTML;
+                                       report('PASS', message);
+                               } else if (oFail.length > 0) {
+                                       var oRes = $($(oTestDoc).find("table#results")).get(0);
+                                       // Get error log
+                                       if (oRes) {
+                                               var fails = $(oRes).find('tr.fail');
+                                               var i;
+                                               for (i = 0; i < fails.length; i++) {
+                                                       var desccell = fails[i].childNodes[1];
+                                                       if (desccell)
+                                                               message += "\n###Test Start###\n"
+                                                                               + desccell.textContent + "\n###Test End###\n";
+                                                       var msgcell = fails[i].childNodes[2];
+                                                       if (msgcell)
+                                                               message += "###Error2 Start###\n"
+                                                                               + msgcell.textContent
+                                                                               + "\n###Error2 End###";
+                                               }
+                                       }
+                                       report('FAIL', message);
+                               } else // oFail.length==0 && oPass.length==0
+                               if (need_check_block == 'yes') {
+                                       next_sleep_time = sleep_time + 1;
+                                       check_timeout(next_sleep_time);
+                                       return;
+                               }
+                       } else // not complete
+                       if (need_check_block == 'yes') {
+                               next_sleep_time = sleep_time + 1;
+                               check_timeout(next_sleep_time);
+                               return;
+                       }
+               } catch (e) {
+                       report('BLOCK', e);
+               }
+       }
+
+       function report(result, log) {
+
+               if (iTest >= Tests.length)
+                       return;
+               $(Tests[iTest]).attr('result', result);
+               var doc = $.parseXML("<result_info>" + "<actual_result>" + result
+                               + "</actual_result>" + "<start>" + startTime + "</start>"
+                               + "<end>" + new Date() + "</end>" + "<stdout>"
+                               + escape_html(log) + "</stdout>" + "</result_info>");
+               $(Tests[iTest]).append(doc.documentElement);
+
+               statusNode.innerHTML = "Test #" + (iTest + 1) + "/" + Tests.length
+                               + "(" + result + ") " + current_page_uri;
+
+               try {
+                       var starts = log.indexOf('value:');
+                       var stops = log.lastIndexOf(',');
+                       var resultinfo = log.substring(starts + 6, stops);
+                       $(Tests[iTest]).find("measurement").attr('value', resultinfo);
+               } catch (e) {
+               }
+
+               iTest++;
+
+               if (activetest) {
+                       doTest();
+               } else {
+                       activetest = true;
+               }
+       }
+
+       function doTest() {
+               while (iTest < Tests.length) {
+                       if ($(Tests[iTest]).attr('execution_type') != 'auto') {
+                               iTest++;
+                               continue;
+                       }
+                       var ts = $(Tests[iTest]).find('test_script_entry');
+                       if (ts.length == 0) {
+                               iTest++;
+                               continue;
+                       }
+                       var it = $(ts).get(0);
+                       var tstr = $(it).attr('timeout');
+                       if (!tstr)
+                               timeout = 8 * defTime;
+                       else {
+                               var t;
+                               try {
+                                       t = parseInt(tstr) * 1000;
+                               } catch (e) {
+                                       t = 8 * defTime;
+                               }
+                               timeout = t;
+                       }
+
+                       pset = $(Tests[iTest]).parent().attr('name');
+                       psuite = $(Tests[iTest]).parent().parent().attr('name');
+
+                       startTime = new Date();
+
+                       current_page_uri = $(it).text();
+                       var index = current_page_uri.indexOf("?");
+                       var test_page = "";
+                       if (need_ajax) {
+                               var svr = server + "/test_hint";
+                               $.ajax({
+                                       async : false,
+                                       type : "POST",
+                                       url : svr,
+                                       data : {
+                                               suite : psuite,
+                                               set : pset,
+                                               testcase : current_page_uri
+                                       },
+                                       error : function(x, t, e) {
+                                               print_error_log("doTest", e);
+                                       }
+                               });
+                       }
+                       if (index >= 0)
+                               test_page = current_page_uri.substring(0, index);
+                       else
+                               test_page = current_page_uri;
+
+                       // Don't load the same test page again
+                       if (test_page == last_test_page) {
+                               print_error_log("test page url is the same as the last one",
+                                               test_page);
+                               activetest = false;
+                               CheckResult('yes', 0);
+                               continue;
+                       }
+
+                       if ((current_page_uri.indexOf("2DTransforms") != -1)
+                                       || (current_page_uri.indexOf("3DTransforms") != -1)) {
+                               oTestFrame.height = 500000 + "px";
+                       } else {
+                               oTestFrame.height = 2500 + "px";
+                       }
+                       oTestFrame.src = current_page_uri;
+                       last_test_page = test_page;
+                       if (oTestFrame.attachEvent) {
+                               oTestFrame.attachEvent("onload", function() {
+                                       CheckResult('yes', 0);
+                               });
+                       } else {
+                               oTestFrame.onload = function() {
+                                       CheckResult('yes', 0);
+                               };
+                       }
+                       return;
+               }
+               doManualTest();
+       }
+
+       function doManualTest() {
+               manualcaseslist = new Array();
+               var iTemp1 = 0, iTemp2 = 0;
+               while (iTemp1 < Tests.length) {
+                       if ($(Tests[iTemp1]).attr('execution_type') == 'manual') {
+                               parent.document.getElementById("statusframe").height = 385 + "px";
+                               manualcaseslist[iTemp2] = new manualcases();
+                               manualcaseslist[iTemp2].casesid = $(Tests[iTemp1]).attr('id');
+                               manualcaseslist[iTemp2].index = iTemp1;
+                               manualcaseslist[iTemp2].result = $(Tests[iTemp1])
+                                               .attr('result');
+                               iTemp2++;
+                       }
+                       iTemp1++;
+               }
+               if (iTemp2 > 0) {
+                       winCloseTimeout = 50000;
+                       statusFrame.src = "./manualharness.html";
+                       $(frmset).attr('rows', "100,*");
+               } else if (iTest == Tests.length) {
+                       setTimeout("PublishResult()", 2000);
+               }
+               oTestFrame.src = '';
+       }
+
+       function PublishResult() {
+               $(frmset).attr('rows', "0, *");
+               results = oTestFrame.contentWindow;
+               var resultXML;
+               resultXML = "<title>HTML5 Test Result XML</title>";
+               resultXML += "<head> <style type='text/css'>\
+html {font-family:DejaVu Sans, Bitstream Vera Sans, Arial, Sans;}\
+section#summary {margin-bottom:1em;}\
+table#results {\
+    border-collapse:collapse;\
+    table-layout:fixed;\
+    width:80%;\
+}\
+table#results th:first-child,\
+table#results td:first-child {\
+    width:40%;\
+}\
+table#results th:last-child,\
+table#results td:last-child {\
+    width:30%;\
+}\
+table#results th {\
+    padding:0;\
+    padding-bottom:0.5em;\
+    text-align:left;\
+    border-bottom:medium solid black;\
+}\
+table#results td {\
+    padding:1em;\
+    padding-bottom:0.5em;\
+    border-bottom:thin solid black;\
+}\
+</style><head>";
+
+               resultXML += "<section id='summary'>";
+               resultXML += "<h2>Summary</h2>";
+               var ipass = $(xmldoc).find("testcase[result='PASS']").length;
+               var failList = $(xmldoc).find("testcase[result='FAIL']");
+               var ifail = failList.length;
+               resultXML += "<h3>Total:" + Tests.length
+                               + " Pass:<span style='color:green;'>" + ipass
+                               + "</span> Fail:<span style='color:red;'>" + ifail
+                               + "</span></h3>";
+               resultXML += "</section>";
+
+               resultXML += "<p><table id='results'> <tr> <th> TestSet </th> <th> Pass </th> <th> Fail </th></tr>";
+               var Sets = $(xmldoc).find("set");
+               var i = 0;
+               for (i = 0; i < Sets.length; i++) {
+                       ipass = $(Sets[i]).find("testcase[result='PASS']").length;
+                       ifail = $(Sets[i]).find("testcase[result='FAIL']").length;
+                       resultXML += "<tr>";
+                       resultXML += "<td>" + $(Sets[i]).attr('name') + "</td>";
+                       resultXML += "<td style='color:green;'>" + ipass
+                                       + "</td><td style='color:red;'>" + ifail + "</td>";
+                       resultXML += "</tr>";
+               }
+               resultXML += "</table>";
+
+               if (ifail > 0) {
+                       resultXML += "<section id='failedlist'>";
+                       resultXML += "<h2>Fails</h2>";
+                       resultXML += "<ul>";
+                       for (i = 0; i < failList.length; i++) {
+                               var ts = $(failList[i]).find("test_script_entry");
+                               if (ts.length > 0) {
+                                       var t = ts.get(0);
+                                       resultXML += "<li style='color:red;'>" + $(t).text()
+                                                       + "</li>";
+                               }
+                       }
+                       resultXML += "</ul>";
+                       resultXML += "</section>";
+               }
+
+               resultXML += "<h2>Details</h2>";
+               resultXML += "<form method='post' id='resultform'> <textarea id='results' style='width: 80%; height: 90%;' name='filecontent' disabled='disabled'>"
+                               + save_result() + "</textarea></form>";
+               setTimeout("window.open('','_self','');window.close()", winCloseTimeout);
+               results.document.writeln(resultXML);
+       }
+
+       function save_result() {
+               var svr = server + "/save_result";
+               var testid = (new Date()).getTime();
+               var contents = (new XMLSerializer()).serializeToString(xmldoc);
+               if (need_ajax) {
+                       $.ajax({
+                               async : false,
+                               type : "POST",
+                               url : svr,
+                               data : {
+                                       filename : testid,
+                                       filecontent : contents
+                               },
+                               error : function(x, t, e) {
+                                       print_error_log("doTest", e);
+                               }
+                       });
+               }
+               return contents;
+       }
+       // merge code from application.js
+       function init_test() {
+               var session_id = Math.round(Math.random() * 10000);
+               init_message_frame();
+               save_session_id(session_id);
+               sync_session_id(session_id);
+               start_test();
+       }
+
+       function init_message_frame() {
+               messageFrame = document.getElementById('messageframe');
+               messageWin = messageFrame.contentWindow;
+               messageNode = messageWin.document.getElementById('message_div');
+               if (null == messageNode) {
+                       messageNode = messageWin.document.createElement("div");
+                       messageNode.id = "message_div";
+                       messageWin.document.body.appendChild(messageNode);
+                       messageNode.innerHTML = "Message Area";
+               }
+               return messageNode;
+       }
+
+       function print_error_log(command, message) {
+               messageFrame = document.getElementById('messageframe');
+               messageFrame.height = 160 + "px";
+               messageNode = init_message_frame();
+               messageNode.innerHTML = "Message Area<div id=\"log_title\"></div><br/>Command: <div id=\"log_command\">"
+                               + command
+                               + "</div><br/>Message: <div id=\"log_message\">"
+                               + message + "</div>";
+       }
+
+       function save_session_id(session_id) {
+               statusFrame = document.getElementById('statusframe');
+               statusFrame.height = 270 + "px";
+               statusWin = statusFrame.contentWindow;
+               sessionIdNode = statusWin.document.getElementById('session_id_div');
+               if (null == sessionIdNode) {
+                       sessionIdNode = statusWin.document.createElement("div");
+                       sessionIdNode.id = "session_id_div";
+                       statusWin.document.body.appendChild(sessionIdNode);
+                       sessionIdNode.innerHTML = "Session ID: <div id=\"session_id\">"
+                                       + session_id
+                                       + "</div><br/><div id=\"execution_progress\"></div><br/>";
+               }
+       }
+
+       function sync_session_id(session_id) {
+               var server_url = server + "/init_session_id";
+               server_url += "?session_id=" + session_id;
+               $.ajax({
+                       async : false,
+                       url : server_url,
+                       type : "GET",
+                       error : function(x, t, e) {
+                               print_error_log("sync_session_id", e);
+                       }
+               });
+       }
+
+       function get_session_id() {
+               statusFrame = document.getElementById('statusframe');
+               statusWin = statusFrame.contentWindow;
+               sessionIdNode = statusWin.document.getElementById('session_id');
+               return sessionIdNode.innerHTML;
+       }
+
+       function close_window(){
+               //for tct-webgl-nonw3c-tests run by tizen-tool emulator html,window.parent.close() no function,must call window.close, why?
+               if(window.parent != window.self){
+                       window.open('','_self','');
+                       window.close();
+                       window.parent.onbeforeunload = null;
+                       window.parent.close();
+               }
+               else{
+                       window.open('','_self','');
+                       window.close();
+               }
+       }
+       function start_test() {
+               try {
+                       var task = ask_test_task();
+               } catch (e) {
+                       print_error_log("start_test_ask_test_task", e);
+               }
+               try {
+                       if (task == 1) {
+                               print_error_log("start_test_execute_test_task",
+                                               "Invalid session");
+                       } else if (task == -1) {
+                               print_error_log("restart client process activated",
+                                               "this window will be closed in 2sec");
+                               close_window();
+                               //setTimeout("window.open('','_self','');window.close()", 2000);
+                       } else if (task == null) {
+                               print_error_log(
+                                               "get auto case failed, client will be restarted later",
+                                               "this window will be closed in 2sec");
+                               close_window();
+                               //setTimeout("window.open('','_self','');window.close()", 2000);
+                       } else if (task != 0) {
+                               var progress = check_execution_progress();
+                               execute_test_task(task, progress);
+                       } else {
+                               execute_manual_test();
+                       }
+               } catch (e) {
+                       print_error_log("start_test_execute_test_task", e);
+               }
+       }
+
+       function ask_generate_xml() {
+               var server_url = server + "/generate_xml";
+               $.ajax({
+                       async : false,
+                       url : server_url,
+                       type : "GET",
+                       error : function(x, t, e) {
+                               print_error_log("ask_generate_xml", e);
+                       }
+               });
+               close_window();
+               //setTimeout("window.open('','_self','');window.close()", winCloseTimeout);
+       }
+
+       function extract_all_manual() {
+               var server_url = server + "/manual_cases";
+               var tasks = null;
+               $.ajax({
+                       async : false,
+                       url : server_url,
+                       type : "GET",
+                       dataType : "text",
+                       success : function(txt) {
+                               task = $.parseJSON(txt);
+                               if (0 == task.none) {
+                                       task = null;
+                               }
+                       },
+                       error : function(x, t, e) {
+                               print_error_log("extract_all_manual", e);
+                       }
+               });
+               return task;
+       }
+
+       function ask_test_task() {
+               var server_url = server + "/auto_test_task";
+               var task = null;
+               session_id = get_session_id();
+               server_url += "?session_id=" + session_id;
+               $.ajax({
+                       async : false,
+                       url : server_url,
+                       type : "GET",
+                       dataType : "text",
+                       success : function(txt) {
+                               task = $.parseJSON(txt);
+                               if (task.none == 0) {
+                                       task = 0;
+                               }
+                               if (task.invalid == 0) {
+                                       task = 1;
+                               }
+                               if (task.stop == 0) {
+                                       task = -1;
+                               }
+                       },
+                       error : function(x, t, e) {
+                               print_error_log("ask_test_task", e);
+                       }
+               });
+               return task;
+       }
+
+       function check_execution_progress() {
+               var server_url = server + "/check_execution_progress";
+               var progress = null;
+               session_id = get_session_id();
+               server_url += "?session_id=" + session_id;
+               $.ajax({
+                       async : false,
+                       url : server_url,
+                       type : "GET",
+                       dataType : "text",
+                       success : function(txt) {
+                               progress = $.parseJSON(txt);
+                       },
+                       error : function(x, t, e) {
+                               print_error_log("check_execution_progress", e);
+                       }
+               });
+               return progress;
+       }
+
+       function ask_next_step() {
+               var server_url = server + "/ask_next_step";
+               var next_step = null;
+               session_id = get_session_id();
+               server_url += "?session_id=" + session_id;
+               $.ajax({
+                       async : false,
+                       url : server_url,
+                       type : "GET",
+                       dataType : "text",
+                       success : function(txt) {
+                               next_step = $.parseJSON(txt);
+                       },
+                       error : function(x, t, e) {
+                               print_error_log("ask_next_step", e);
+                       }
+               });
+               return next_step;
+       }
+
+       function init_status_frame() {
+               statusFrame = document.getElementById('statusframe');
+               statusWin = statusFrame.contentWindow;
+               statusNode = statusWin.document.getElementById('status_div');
+               if (null == statusNode) {
+                       statusNode = statusWin.document.createElement("div");
+                       statusNode.id = "status_div";
+                       statusWin.document.body.appendChild(statusNode);
+               }
+               return statusNode;
+       }
+
+       function execute_test_task(json_task, json_progress) {
+               try {
+                       oTestFrame = document.getElementById('testframe');
+                       statusNode = init_status_frame();
+                       // update execution progress
+                       statusFrame = document.getElementById('statusframe');
+                       statusWin = statusFrame.contentWindow;
+                       progressNode = statusWin.document
+                                       .getElementById('execution_progress');
+                       progressNode.innerHTML = "Total:" + json_progress.total
+                                       + ", Current:" + json_progress.current;
+                       // update case info
+                       statusNode.innerHTML = "Test Purpose:<div id=\"test_purpose_div\">"
+                                       + json_task.purpose
+                                       + "</div><br/>Test Entry:<div id=\"test_entry_div\">"
+                                       + json_task.entry
+                                       + "</div><br/>Last Test Result:<div id=\"test_result_div\">"
+                                       + json_progress.last_test_result + "</div>";
+                       current_page_uri = json_task.entry;
+                       case_id_str = json_task.case_id;
+                       var index = current_page_uri.indexOf("?");
+                       var test_page = "";
+                       if (index >= 0)
+                               test_page = current_page_uri.substring(0, index);
+                       else
+                               test_page = current_page_uri;
+                       // Get how many times to check BLOCK result
+                       if (json_task.onload_delay) {
+                               calculate_block_check_time(parseInt(json_task.onload_delay) * 1000);
+                       } else {
+                               print_error_log("execute_test_task",
+                                               "can't get attribute onload_delay from task: "
+                                                               + json_task.purpose);
+                       }
+                       // Don't load the same test page again
+                       if (test_page == last_test_page) {
+                               print_error_log("test page url is the same as the last one",
+                                               test_page);
+                               extract_case_result('yes', 0);
+                               return;
+                       }
+                       if ((current_page_uri.indexOf("2DTransforms") != -1)
+                                       || (current_page_uri.indexOf("3DTransforms") != -1)) {
+                               oTestFrame.height = 500000 + "px";
+                       } else {
+                               oTestFrame.height = 2500 + "px";
+                       }
+                       oTestFrame.src = current_page_uri;
+                       last_test_page = test_page;
+                       if (oTestFrame.attachEvent) {
+                               oTestFrame.attachEvent("onload", function() {
+                                       extract_case_result('yes', 0);
+                               });
+                       } else {
+                               oTestFrame.onload = function() {
+                                       extract_case_result('yes', 0);
+                               };
+                       }
+               } catch (e) {
+                       print_error_log("execute_test_task", e);
+               }
+       }
+
+       function calculate_block_check_time(onload_delay) {
+               blockCheckTime = Math.ceil((Math.sqrt(onload_delay * 4 + 25) - 5) / 10);
+       }
+
+       function check_block_result_again(time) {
+               sleep_time = time * 50;
+               if (time == blockCheckTime) {
+                       setTimeout("extract_case_result('no', " + time + ")", sleep_time);
+                       return;
+               }
+               setTimeout("extract_case_result('yes', " + time + ")", sleep_time);
+       }
+
+       function extract_case_result(need_check_block, sleep_time) {
+               oTestFrame = document.getElementById('testframe');
+               var oTestWin = oTestFrame.contentWindow;
+               var oTestDoc = oTestFrame.contentWindow.document;
+               var result = "BLOCK";
+               var case_msg = "";
+
+               oPass = $(oTestDoc).find(".pass");
+               oFail = $(oTestDoc).find(".fail");
+               case_uri = current_page_uri;
+
+               total_num = getTestPageParam(case_uri, "total_num");
+               locator_key = getTestPageParam(case_uri, "locator_key");
+               value = getTestPageParam(case_uri, "value");
+
+               if (total_num != "" && locator_key != "" && value != "") {
+                       if (locator_key == "id") {
+                               var results;
+                               var passes;
+                               var fails;
+
+                               var oRes = $(oTestDoc).find("table#results");
+                               if (oRes) {
+                                       results = $(oRes).find('tr');
+                                       passes = $(oRes).find('tr.pass');
+                                       fails = $(oRes).find('tr.fail');
+                               }
+                               if (passes.length + fails.length == total_num) {
+                                       var i = 1;
+                                       for (i = 1; i <= total_num; i++) {
+                                               if (i.toString() != value) {
+                                                       continue;
+                                               }
+                                               var rest = results[i].childNodes[0].textContent;
+                                               var desc = results[i].childNodes[1].textContent;
+                                               case_msg = results[i].childNodes[2].textContent;                                        
+                                               if (rest && rest.toUpperCase() == "PASS") {
+                                                       result = "PASS";
+                                               } else {
+                                                       result = "FAIL";
+                                               }
+                                               break;
+                                       }
+                               } else {
+                                       if (need_check_block == 'yes') {
+                                               next_sleep_time = sleep_time + 1;
+                                               check_block_result_again(next_sleep_time);
+                                               return;
+                                       }
+                                       else{
+                                               var i;
+                                               for (i = 0; i < fails.length; i++) {
+                                                       var desccell = fails[i].childNodes[1];
+                                                       if (desccell) {
+                                                               case_msg += "\n###Test Start###\n" + desccell.textContent
+                                                                               + "\n###Test End###\n";
+                                                       }
+                                                       var msgcell = fails[i].childNodes[2];
+                                                       if (msgcell) {
+                                                               case_msg += "###Error1 Start###\n"
+                                                                               + msgcell.textContent + "\n###Error1 End###";
+                                                       }
+                                               }
+                                               result = "FAIL";
+                                       }
+
+                               }
+                       }
+               } else if (oPass.length > 0 && oFail.length == 0) {
+                       if (oTestWin.resultdiv) {
+                               case_msg = oTestWin.resultdiv.innerHTML;
+                       }
+                       result = "PASS";
+               } else if (oFail.length > 0) {
+                       var oRes = $($(oTestDoc).find("table#results")).get(0);
+                       // Get error log
+                       if (oRes) {
+                               var fails = $(oRes).find('tr.fail');
+                               var i;
+                               for (i = 0; i < fails.length; i++) {
+                                       var desccell = fails[i].childNodes[1];
+                                       if (desccell) {
+                                               case_msg += "\n###Test Start###\n" + desccell.textContent
+                                                               + "\n###Test End###\n";
+                                       }
+                                       var msgcell = fails[i].childNodes[2];
+                                       if (msgcell) {
+                                               case_msg += "###Error2 Start###\n" + msgcell.textContent
+                                                               + "\n###Error2 End###";                                         
+                                       }
+                               }
+                       }
+                       result = "FAIL";
+               } else {
+                       if (need_check_block == 'yes') {
+                               next_sleep_time = sleep_time + 1;
+                               check_block_result_again(next_sleep_time);
+                               return;
+                       }
+               }
+               var next_step = ask_next_step();
+               commit_test_result(result, case_msg);
+               if (next_step.step == "continue") {
+                       start_test();
+               } else {
+                       print_error_log("memory collection process activated",
+                                       "this window will be closed in 2sec");
+                       close_window();
+                       //setTimeout("window.open('','_self','');window.close()", 2000);
+               }
+       }
+
+       var manual_test_step = function() {
+               this.order = 0;
+               this.desc = "";
+               this.expected = "";
+       };
+
+       var manual_cases = function() {
+               this.casesid = "";
+               this.index = 0;
+               this.result = "";
+               this.entry = "";
+               this.pre_con = "";
+               this.post_con = "";
+               this.purpose = "";
+               this.steps = new Array();
+       };
+
+       function execute_manual_test() {
+               manualcaseslist = new Array();
+               tasks = extract_all_manual();
+               if (tasks != null){
+                       for ( var i = 0; i < tasks.length; i++) {
+                               if (parent.document.getElementById("statusframe"))
+                                       parent.document.getElementById("statusframe").height = 385 + "px";
+                               manualcaseslist[i] = new manual_cases();
+                               manualcaseslist[i].casesid = tasks[i].case_id;
+                               manualcaseslist[i].index = i;
+                               manualcaseslist[i].entry = tasks[i].entry;
+                               manualcaseslist[i].pre_con = tasks[i].pre_condition;
+                               manualcaseslist[i].post_con = tasks[i].post_condition;
+                               manualcaseslist[i].purpose = tasks[i].purpose;
+
+                               if (tasks[i].steps != undefined) {
+                                       for ( var j = 0; j < tasks[i].steps.length; j++) {
+                                               this_manual_step = new manual_test_step();
+                                               this_manual_step.order = parseInt(tasks[i].steps[j].order);
+                                               this_manual_step.desc = tasks[i].steps[j].step_desc;
+                                               this_manual_step.expected = tasks[i].steps[j].expected;
+                                               manualcaseslist[i].steps[this_manual_step.order - 1] = this_manual_step;
+                                       }
+                               }
+                       }
+                       if (tasks.length > 0) {
+                               statusFrame.src = "./manual_harness.html";
+                               $($($('#main')).get(0)).attr('rows', "100,*");
+                       }
+                       oTestFrame = document.getElementById('testframe');
+                       oTestFrame.src = '';
+               }
+               else {
+                       // No manual cases, generate the result.
+                       ask_generate_xml();
+               }
+       }
+
+       function commit_test_result(result, msg) {
+               statusFrame = document.getElementById('statusframe');
+               purposeNode = statusWin.document.getElementById('test_purpose_div');
+               session_id = get_session_id();
+               var purpose_str = purposeNode.innerHTML
+               var server_url = server + "/commit_result";
+               $.ajax({
+                       async : false,
+                       url : server_url,
+                       type : "POST",
+                       data : {
+                               "case_id" : case_id_str,
+                               "purpose" : purpose_str,
+                               "result" : result,
+                               "msg" : "[Message]" + msg,
+                               "session_id" : session_id
+                       },
+                       dataType : "json",
+                       beforeSend : function(x) {
+                               if (x && x.overrideMimeType) {
+                                       x.overrideMimeType("application/j-son;charset=UTF-8");
+                               }
+                       },
+                       error : function(x, t, e) {
+                               print_error_log("commit_test_result", e);
+                       }
+               });
+       }
+</script>
+</head>
+<body id="main" onload='precheck_init()'>
+       <iframe frameborder="1" height="30px" width="100%" id="messageframe"></iframe>
+       <iframe frameborder="1" height="30px" width="100%" id="statusframe"></iframe>
+       <iframe frameborder="1" height="2500px" width="100%" id="testframe" allowFullScreen="true" mozAllowFullScreen="true" webkitAllowFullscreen="true"></iframe>
+</body>
+</html>
diff --git a/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite1.0/web/jquery.js b/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite1.0/web/jquery.js
new file mode 100755 (executable)
index 0000000..eda55db
--- /dev/null
@@ -0,0 +1,9300 @@
+/*!
+ * jQuery JavaScript Library v1.7
+ * http://jquery.com/
+ *
+ * Copyright 2011, John Resig
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * Includes Sizzle.js
+ * http://sizzlejs.com/
+ * Copyright 2011, The Dojo Foundation
+ * Released under the MIT, BSD, and GPL Licenses.
+ *
+ * Date: Thu Nov 3 16:18:21 2011 -0400
+ */
+(function( window, undefined ) {
+
+// Use the correct document accordingly with window argument (sandbox)
+var document = window.document,
+       navigator = window.navigator,
+       location = window.location;
+var jQuery = (function() {
+
+// Define a local copy of jQuery
+var jQuery = function( selector, context ) {
+               // The jQuery object is actually just the init constructor 'enhanced'
+               return new jQuery.fn.init( selector, context, rootjQuery );
+       },
+
+       // Map over jQuery in case of overwrite
+       _jQuery = window.jQuery,
+
+       // Map over the $ in case of overwrite
+       _$ = window.$,
+
+       // A central reference to the root jQuery(document)
+       rootjQuery,
+
+       // A simple way to check for HTML strings or ID strings
+       // Prioritize #id over <tag> to avoid XSS via location.hash (#9521)
+       quickExpr = /^(?:[^#<]*(<[\w\W]+>)[^>]*$|#([\w\-]*)$)/,
+
+       // Check if a string has a non-whitespace character in it
+       rnotwhite = /\S/,
+
+       // Used for trimming whitespace
+       trimLeft = /^\s+/,
+       trimRight = /\s+$/,
+
+       // Check for digits
+       rdigit = /\d/,
+
+       // Match a standalone tag
+       rsingleTag = /^<(\w+)\s*\/?>(?:<\/\1>)?$/,
+
+       // JSON RegExp
+       rvalidchars = /^[\],:{}\s]*$/,
+       rvalidescape = /\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,
+       rvalidtokens = /"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,
+       rvalidbraces = /(?:^|:|,)(?:\s*\[)+/g,
+
+       // Useragent RegExp
+       rwebkit = /(webkit)[ \/]([\w.]+)/,
+       ropera = /(opera)(?:.*version)?[ \/]([\w.]+)/,
+       rmsie = /(msie) ([\w.]+)/,
+       rmozilla = /(mozilla)(?:.*? rv:([\w.]+))?/,
+
+       // Matches dashed string for camelizing
+       rdashAlpha = /-([a-z]|[0-9])/ig,
+       rmsPrefix = /^-ms-/,
+
+       // Used by jQuery.camelCase as callback to replace()
+       fcamelCase = function( all, letter ) {
+               return ( letter + "" ).toUpperCase();
+       },
+
+       // Keep a UserAgent string for use with jQuery.browser
+       userAgent = navigator.userAgent,
+
+       // For matching the engine and version of the browser
+       browserMatch,
+
+       // The deferred used on DOM ready
+       readyList,
+
+       // The ready event handler
+       DOMContentLoaded,
+
+       // Save a reference to some core methods
+       toString = Object.prototype.toString,
+       hasOwn = Object.prototype.hasOwnProperty,
+       push = Array.prototype.push,
+       slice = Array.prototype.slice,
+       trim = String.prototype.trim,
+       indexOf = Array.prototype.indexOf,
+
+       // [[Class]] -> type pairs
+       class2type = {};
+
+jQuery.fn = jQuery.prototype = {
+       constructor: jQuery,
+       init: function( selector, context, rootjQuery ) {
+               var match, elem, ret, doc;
+
+               // Handle $(""), $(null), or $(undefined)
+               if ( !selector ) {
+                       return this;
+               }
+
+               // Handle $(DOMElement)
+               if ( selector.nodeType ) {
+                       this.context = this[0] = selector;
+                       this.length = 1;
+                       return this;
+               }
+
+               // The body element only exists once, optimize finding it
+               if ( selector === "body" && !context && document.body ) {
+                       this.context = document;
+                       this[0] = document.body;
+                       this.selector = selector;
+                       this.length = 1;
+                       return this;
+               }
+
+               // Handle HTML strings
+               if ( typeof selector === "string" ) {
+                       // Are we dealing with HTML string or an ID?
+                       if ( selector.charAt(0) === "<" && selector.charAt( selector.length - 1 ) === ">" && selector.length >= 3 ) {
+                               // Assume that strings that start and end with <> are HTML and skip the regex check
+                               match = [ null, selector, null ];
+
+                       } else {
+                               match = quickExpr.exec( selector );
+                       }
+
+                       // Verify a match, and that no context was specified for #id
+                       if ( match && (match[1] || !context) ) {
+
+                               // HANDLE: $(html) -> $(array)
+                               if ( match[1] ) {
+                                       context = context instanceof jQuery ? context[0] : context;
+                                       doc = ( context ? context.ownerDocument || context : document );
+
+                                       // If a single string is passed in and it's a single tag
+                                       // just do a createElement and skip the rest
+                                       ret = rsingleTag.exec( selector );
+
+                                       if ( ret ) {
+                                               if ( jQuery.isPlainObject( context ) ) {
+                                                       selector = [ document.createElement( ret[1] ) ];
+                                                       jQuery.fn.attr.call( selector, context, true );
+
+                                               } else {
+                                                       selector = [ doc.createElement( ret[1] ) ];
+                                               }
+
+                                       } else {
+                                               ret = jQuery.buildFragment( [ match[1] ], [ doc ] );
+                                               selector = ( ret.cacheable ? jQuery.clone(ret.fragment) : ret.fragment ).childNodes;
+                                       }
+
+                                       return jQuery.merge( this, selector );
+
+                               // HANDLE: $("#id")
+                               } else {
+                                       elem = document.getElementById( match[2] );
+
+                                       // Check parentNode to catch when Blackberry 4.6 returns
+                                       // nodes that are no longer in the document #6963
+                                       if ( elem && elem.parentNode ) {
+                                               // Handle the case where IE and Opera return items
+                                               // by name instead of ID
+                                               if ( elem.id !== match[2] ) {
+                                                       return rootjQuery.find( selector );
+                                               }
+
+                                               // Otherwise, we inject the element directly into the jQuery object
+                                               this.length = 1;
+                                               this[0] = elem;
+                                       }
+
+                                       this.context = document;
+                                       this.selector = selector;
+                                       return this;
+                               }
+
+                       // HANDLE: $(expr, $(...))
+                       } else if ( !context || context.jquery ) {
+                               return ( context || rootjQuery ).find( selector );
+
+                       // HANDLE: $(expr, context)
+                       // (which is just equivalent to: $(context).find(expr)
+                       } else {
+                               return this.constructor( context ).find( selector );
+                       }
+
+               // HANDLE: $(function)
+               // Shortcut for document ready
+               } else if ( jQuery.isFunction( selector ) ) {
+                       return rootjQuery.ready( selector );
+               }
+
+               if ( selector.selector !== undefined ) {
+                       this.selector = selector.selector;
+                       this.context = selector.context;
+               }
+
+               return jQuery.makeArray( selector, this );
+       },
+
+       // Start with an empty selector
+       selector: "",
+
+       // The current version of jQuery being used
+       jquery: "1.7",
+
+       // The default length of a jQuery object is 0
+       length: 0,
+
+       // The number of elements contained in the matched element set
+       size: function() {
+               return this.length;
+       },
+
+       toArray: function() {
+               return slice.call( this, 0 );
+       },
+
+       // Get the Nth element in the matched element set OR
+       // Get the whole matched element set as a clean array
+       get: function( num ) {
+               return num == null ?
+
+                       // Return a 'clean' array
+                       this.toArray() :
+
+                       // Return just the object
+                       ( num < 0 ? this[ this.length + num ] : this[ num ] );
+       },
+
+       // Take an array of elements and push it onto the stack
+       // (returning the new matched element set)
+       pushStack: function( elems, name, selector ) {
+               // Build a new jQuery matched element set
+               var ret = this.constructor();
+
+               if ( jQuery.isArray( elems ) ) {
+                       push.apply( ret, elems );
+
+               } else {
+                       jQuery.merge( ret, elems );
+               }
+
+               // Add the old object onto the stack (as a reference)
+               ret.prevObject = this;
+
+               ret.context = this.context;
+
+               if ( name === "find" ) {
+                       ret.selector = this.selector + ( this.selector ? " " : "" ) + selector;
+               } else if ( name ) {
+                       ret.selector = this.selector + "." + name + "(" + selector + ")";
+               }
+
+               // Return the newly-formed element set
+               return ret;
+       },
+
+       // Execute a callback for every element in the matched set.
+       // (You can seed the arguments with an array of args, but this is
+       // only used internally.)
+       each: function( callback, args ) {
+               return jQuery.each( this, callback, args );
+       },
+
+       ready: function( fn ) {
+               // Attach the listeners
+               jQuery.bindReady();
+
+               // Add the callback
+               readyList.add( fn );
+
+               return this;
+       },
+
+       eq: function( i ) {
+               return i === -1 ?
+                       this.slice( i ) :
+                       this.slice( i, +i + 1 );
+       },
+
+       first: function() {
+               return this.eq( 0 );
+       },
+
+       last: function() {
+               return this.eq( -1 );
+       },
+
+       slice: function() {
+               return this.pushStack( slice.apply( this, arguments ),
+                       "slice", slice.call(arguments).join(",") );
+       },
+
+       map: function( callback ) {
+               return this.pushStack( jQuery.map(this, function( elem, i ) {
+                       return callback.call( elem, i, elem );
+               }));
+       },
+
+       end: function() {
+               return this.prevObject || this.constructor(null);
+       },
+
+       // For internal use only.
+       // Behaves like an Array's method, not like a jQuery method.
+       push: push,
+       sort: [].sort,
+       splice: [].splice
+};
+
+// Give the init function the jQuery prototype for later instantiation
+jQuery.fn.init.prototype = jQuery.fn;
+
+jQuery.extend = jQuery.fn.extend = function() {
+       var options, name, src, copy, copyIsArray, clone,
+               target = arguments[0] || {},
+               i = 1,
+               length = arguments.length,
+               deep = false;
+
+       // Handle a deep copy situation
+       if ( typeof target === "boolean" ) {
+               deep = target;
+               target = arguments[1] || {};
+               // skip the boolean and the target
+               i = 2;
+       }
+
+       // Handle case when target is a string or something (possible in deep copy)
+       if ( typeof target !== "object" && !jQuery.isFunction(target) ) {
+               target = {};
+       }
+
+       // extend jQuery itself if only one argument is passed
+       if ( length === i ) {
+               target = this;
+               --i;
+       }
+
+       for ( ; i < length; i++ ) {
+               // Only deal with non-null/undefined values
+               if ( (options = arguments[ i ]) != null ) {
+                       // Extend the base object
+                       for ( name in options ) {
+                               src = target[ name ];
+                               copy = options[ name ];
+
+                               // Prevent never-ending loop
+                               if ( target === copy ) {
+                                       continue;
+                               }
+
+                               // Recurse if we're merging plain objects or arrays
+                               if ( deep && copy && ( jQuery.isPlainObject(copy) || (copyIsArray = jQuery.isArray(copy)) ) ) {
+                                       if ( copyIsArray ) {
+                                               copyIsArray = false;
+                                               clone = src && jQuery.isArray(src) ? src : [];
+
+                                       } else {
+                                               clone = src && jQuery.isPlainObject(src) ? src : {};
+                                       }
+
+                                       // Never move original objects, clone them
+                                       target[ name ] = jQuery.extend( deep, clone, copy );
+
+                               // Don't bring in undefined values
+                               } else if ( copy !== undefined ) {
+                                       target[ name ] = copy;
+                               }
+                       }
+               }
+       }
+
+       // Return the modified object
+       return target;
+};
+
+jQuery.extend({
+       noConflict: function( deep ) {
+               if ( window.$ === jQuery ) {
+                       window.$ = _$;
+               }
+
+               if ( deep && window.jQuery === jQuery ) {
+                       window.jQuery = _jQuery;
+               }
+
+               return jQuery;
+       },
+
+       // Is the DOM ready to be used? Set to true once it occurs.
+       isReady: false,
+
+       // A counter to track how many items to wait for before
+       // the ready event fires. See #6781
+       readyWait: 1,
+
+       // Hold (or release) the ready event
+       holdReady: function( hold ) {
+               if ( hold ) {
+                       jQuery.readyWait++;
+               } else {
+                       jQuery.ready( true );
+               }
+       },
+
+       // Handle when the DOM is ready
+       ready: function( wait ) {
+               // Either a released hold or an DOMready/load event and not yet ready
+               if ( (wait === true && !--jQuery.readyWait) || (wait !== true && !jQuery.isReady) ) {
+                       // Make sure body exists, at least, in case IE gets a little overzealous (ticket #5443).
+                       if ( !document.body ) {
+                               return setTimeout( jQuery.ready, 1 );
+                       }
+
+                       // Remember that the DOM is ready
+                       jQuery.isReady = true;
+
+                       // If a normal DOM Ready event fired, decrement, and wait if need be
+                       if ( wait !== true && --jQuery.readyWait > 0 ) {
+                               return;
+                       }
+
+                       // If there are functions bound, to execute
+                       readyList.fireWith( document, [ jQuery ] );
+
+                       // Trigger any bound ready events
+                       if ( jQuery.fn.trigger ) {
+                               jQuery( document ).trigger( "ready" ).unbind( "ready" );
+                       }
+               }
+       },
+
+       bindReady: function() {
+               if ( readyList ) {
+                       return;
+               }
+
+               readyList = jQuery.Callbacks( "once memory" );
+
+               // Catch cases where $(document).ready() is called after the
+               // browser event has already occurred.
+               if ( document.readyState === "complete" ) {
+                       // Handle it asynchronously to allow scripts the opportunity to delay ready
+                       return setTimeout( jQuery.ready, 1 );
+               }
+
+               // Mozilla, Opera and webkit nightlies currently support this event
+               if ( document.addEventListener ) {
+                       // Use the handy event callback
+                       document.addEventListener( "DOMContentLoaded", DOMContentLoaded, false );
+
+                       // A fallback to window.onload, that will always work
+                       window.addEventListener( "load", jQuery.ready, false );
+
+               // If IE event model is used
+               } else if ( document.attachEvent ) {
+                       // ensure firing before onload,
+                       // maybe late but safe also for iframes
+                       document.attachEvent( "onreadystatechange", DOMContentLoaded );
+
+                       // A fallback to window.onload, that will always work
+                       window.attachEvent( "onload", jQuery.ready );
+
+                       // If IE and not a frame
+                       // continually check to see if the document is ready
+                       var toplevel = false;
+
+                       try {
+                               toplevel = window.frameElement == null;
+                       } catch(e) {}
+
+                       if ( document.documentElement.doScroll && toplevel ) {
+                               doScrollCheck();
+                       }
+               }
+       },
+
+       // See test/unit/core.js for details concerning isFunction.
+       // Since version 1.3, DOM methods and functions like alert
+       // aren't supported. They return false on IE (#2968).
+       isFunction: function( obj ) {
+               return jQuery.type(obj) === "function";
+       },
+
+       isArray: Array.isArray || function( obj ) {
+               return jQuery.type(obj) === "array";
+       },
+
+       // A crude way of determining if an object is a window
+       isWindow: function( obj ) {
+               return obj && typeof obj === "object" && "setInterval" in obj;
+       },
+
+       isNumeric: function( obj ) {
+               return obj != null && rdigit.test( obj ) && !isNaN( obj );
+       },
+
+       type: function( obj ) {
+               return obj == null ?
+                       String( obj ) :
+                       class2type[ toString.call(obj) ] || "object";
+       },
+
+       isPlainObject: function( obj ) {
+               // Must be an Object.
+               // Because of IE, we also have to check the presence of the constructor property.
+               // Make sure that DOM nodes and window objects don't pass through, as well
+               if ( !obj || jQuery.type(obj) !== "object" || obj.nodeType || jQuery.isWindow( obj ) ) {
+                       return false;
+               }
+
+               try {
+                       // Not own constructor property must be Object
+                       if ( obj.constructor &&
+                               !hasOwn.call(obj, "constructor") &&
+                               !hasOwn.call(obj.constructor.prototype, "isPrototypeOf") ) {
+                               return false;
+                       }
+               } catch ( e ) {
+                       // IE8,9 Will throw exceptions on certain host objects #9897
+                       return false;
+               }
+
+               // Own properties are enumerated firstly, so to speed up,
+               // if last one is own, then all properties are own.
+
+               var key;
+               for ( key in obj ) {}
+
+               return key === undefined || hasOwn.call( obj, key );
+       },
+
+       isEmptyObject: function( obj ) {
+               for ( var name in obj ) {
+                       return false;
+               }
+               return true;
+       },
+
+       error: function( msg ) {
+               throw msg;
+       },
+
+       parseJSON: function( data ) {
+               if ( typeof data !== "string" || !data ) {
+                       return null;
+               }
+
+               // Make sure leading/trailing whitespace is removed (IE can't handle it)
+               data = jQuery.trim( data );
+
+               // Attempt to parse using the native JSON parser first
+               if ( window.JSON && window.JSON.parse ) {
+                       return window.JSON.parse( data );
+               }
+
+               // Make sure the incoming data is actual JSON
+               // Logic borrowed from http://json.org/json2.js
+               if ( rvalidchars.test( data.replace( rvalidescape, "@" )
+                       .replace( rvalidtokens, "]" )
+                       .replace( rvalidbraces, "")) ) {
+
+                       return ( new Function( "return " + data ) )();
+
+               }
+               jQuery.error( "Invalid JSON: " + data );
+       },
+
+       // Cross-browser xml parsing
+       parseXML: function( data ) {
+               var xml, tmp;
+               try {
+                       if ( window.DOMParser ) { // Standard
+                               tmp = new DOMParser();
+                               xml = tmp.parseFromString( data , "text/xml" );
+                       } else { // IE
+                               xml = new ActiveXObject( "Microsoft.XMLDOM" );
+                               xml.async = "false";
+                               xml.loadXML( data );
+                       }
+               } catch( e ) {
+                       xml = undefined;
+               }
+               if ( !xml || !xml.documentElement || xml.getElementsByTagName( "parsererror" ).length ) {
+                       jQuery.error( "Invalid XML: " + data );
+               }
+               return xml;
+       },
+
+       noop: function() {},
+
+       // Evaluates a script in a global context
+       // Workarounds based on findings by Jim Driscoll
+       // http://weblogs.java.net/blog/driscoll/archive/2009/09/08/eval-javascript-global-context
+       globalEval: function( data ) {
+               if ( data && rnotwhite.test( data ) ) {
+                       // We use execScript on Internet Explorer
+                       // We use an anonymous function so that context is window
+                       // rather than jQuery in Firefox
+                       ( window.execScript || function( data ) {
+                               window[ "eval" ].call( window, data );
+                       } )( data );
+               }
+       },
+
+       // Convert dashed to camelCase; used by the css and data modules
+       // Microsoft forgot to hump their vendor prefix (#9572)
+       camelCase: function( string ) {
+               return string.replace( rmsPrefix, "ms-" ).replace( rdashAlpha, fcamelCase );
+       },
+
+       nodeName: function( elem, name ) {
+               return elem.nodeName && elem.nodeName.toUpperCase() === name.toUpperCase();
+       },
+
+       // args is for internal usage only
+       each: function( object, callback, args ) {
+               var name, i = 0,
+                       length = object.length,
+                       isObj = length === undefined || jQuery.isFunction( object );
+
+               if ( args ) {
+                       if ( isObj ) {
+                               for ( name in object ) {
+                                       if ( callback.apply( object[ name ], args ) === false ) {
+                                               break;
+                                       }
+                               }
+                       } else {
+                               for ( ; i < length; ) {
+                                       if ( callback.apply( object[ i++ ], args ) === false ) {
+                                               break;
+                                       }
+                               }
+                       }
+
+               // A special, fast, case for the most common use of each
+               } else {
+                       if ( isObj ) {
+                               for ( name in object ) {
+                                       if ( callback.call( object[ name ], name, object[ name ] ) === false ) {
+                                               break;
+                                       }
+                               }
+                       } else {
+                               for ( ; i < length; ) {
+                                       if ( callback.call( object[ i ], i, object[ i++ ] ) === false ) {
+                                               break;
+                                       }
+                               }
+                       }
+               }
+
+               return object;
+       },
+
+       // Use native String.trim function wherever possible
+       trim: trim ?
+               function( text ) {
+                       return text == null ?
+                               "" :
+                               trim.call( text );
+               } :
+
+               // Otherwise use our own trimming functionality
+               function( text ) {
+                       return text == null ?
+                               "" :
+                               text.toString().replace( trimLeft, "" ).replace( trimRight, "" );
+               },
+
+       // results is for internal usage only
+       makeArray: function( array, results ) {
+               var ret = results || [];
+
+               if ( array != null ) {
+                       // The window, strings (and functions) also have 'length'
+                       // The extra typeof function check is to prevent crashes
+                       // in Safari 2 (See: #3039)
+                       // Tweaked logic slightly to handle Blackberry 4.7 RegExp issues #6930
+                       var type = jQuery.type( array );
+
+                       if ( array.length == null || type === "string" || type === "function" || type === "regexp" || jQuery.isWindow( array ) ) {
+                               push.call( ret, array );
+                       } else {
+                               jQuery.merge( ret, array );
+                       }
+               }
+
+               return ret;
+       },
+
+       inArray: function( elem, array, i ) {
+               var len;
+
+               if ( array ) {
+                       if ( indexOf ) {
+                               return indexOf.call( array, elem, i );
+                       }
+
+                       len = array.length;
+                       i = i ? i < 0 ? Math.max( 0, len + i ) : i : 0;
+
+                       for ( ; i < len; i++ ) {
+                               // Skip accessing in sparse arrays
+                               if ( i in array && array[ i ] === elem ) {
+                                       return i;
+                               }
+                       }
+               }
+
+               return -1;
+       },
+
+       merge: function( first, second ) {
+               var i = first.length,
+                       j = 0;
+
+               if ( typeof second.length === "number" ) {
+                       for ( var l = second.length; j < l; j++ ) {
+                               first[ i++ ] = second[ j ];
+                       }
+
+               } else {
+                       while ( second[j] !== undefined ) {
+                               first[ i++ ] = second[ j++ ];
+                       }
+               }
+
+               first.length = i;
+
+               return first;
+       },
+
+       grep: function( elems, callback, inv ) {
+               var ret = [], retVal;
+               inv = !!inv;
+
+               // Go through the array, only saving the items
+               // that pass the validator function
+               for ( var i = 0, length = elems.length; i < length; i++ ) {
+                       retVal = !!callback( elems[ i ], i );
+                       if ( inv !== retVal ) {
+                               ret.push( elems[ i ] );
+                       }
+               }
+
+               return ret;
+       },
+
+       // arg is for internal usage only
+       map: function( elems, callback, arg ) {
+               var value, key, ret = [],
+                       i = 0,
+                       length = elems.length,
+                       // jquery objects are treated as arrays
+                       isArray = elems instanceof jQuery || length !== undefined && typeof length === "number" && ( ( length > 0 && elems[ 0 ] && elems[ length -1 ] ) || length === 0 || jQuery.isArray( elems ) ) ;
+
+               // Go through the array, translating each of the items to their
+               if ( isArray ) {
+                       for ( ; i < length; i++ ) {
+                               value = callback( elems[ i ], i, arg );
+
+                               if ( value != null ) {
+                                       ret[ ret.length ] = value;
+                               }
+                       }
+
+               // Go through every key on the object,
+               } else {
+                       for ( key in elems ) {
+                               value = callback( elems[ key ], key, arg );
+
+                               if ( value != null ) {
+                                       ret[ ret.length ] = value;
+                               }
+                       }
+               }
+
+               // Flatten any nested arrays
+               return ret.concat.apply( [], ret );
+       },
+
+       // A global GUID counter for objects
+       guid: 1,
+
+       // Bind a function to a context, optionally partially applying any
+       // arguments.
+       proxy: function( fn, context ) {
+               if ( typeof context === "string" ) {
+                       var tmp = fn[ context ];
+                       context = fn;
+                       fn = tmp;
+               }
+
+               // Quick check to determine if target is callable, in the spec
+               // this throws a TypeError, but we will just return undefined.
+               if ( !jQuery.isFunction( fn ) ) {
+                       return undefined;
+               }
+
+               // Simulated bind
+               var args = slice.call( arguments, 2 ),
+                       proxy = function() {
+                               return fn.apply( context, args.concat( slice.call( arguments ) ) );
+                       };
+
+               // Set the guid of unique handler to the same of original handler, so it can be removed
+               proxy.guid = fn.guid = fn.guid || proxy.guid || jQuery.guid++;
+
+               return proxy;
+       },
+
+       // Mutifunctional method to get and set values to a collection
+       // The value/s can optionally be executed if it's a function
+       access: function( elems, key, value, exec, fn, pass ) {
+               var length = elems.length;
+
+               // Setting many attributes
+               if ( typeof key === "object" ) {
+                       for ( var k in key ) {
+                               jQuery.access( elems, k, key[k], exec, fn, value );
+                       }
+                       return elems;
+               }
+
+               // Setting one attribute
+               if ( value !== undefined ) {
+                       // Optionally, function values get executed if exec is true
+                       exec = !pass && exec && jQuery.isFunction(value);
+
+                       for ( var i = 0; i < length; i++ ) {
+                               fn( elems[i], key, exec ? value.call( elems[i], i, fn( elems[i], key ) ) : value, pass );
+                       }
+
+                       return elems;
+               }
+
+               // Getting an attribute
+               return length ? fn( elems[0], key ) : undefined;
+       },
+
+       now: function() {
+               return ( new Date() ).getTime();
+       },
+
+       // Use of jQuery.browser is frowned upon.
+       // More details: http://docs.jquery.com/Utilities/jQuery.browser
+       uaMatch: function( ua ) {
+               ua = ua.toLowerCase();
+
+               var match = rwebkit.exec( ua ) ||
+                       ropera.exec( ua ) ||
+                       rmsie.exec( ua ) ||
+                       ua.indexOf("compatible") < 0 && rmozilla.exec( ua ) ||
+                       [];
+
+               return { browser: match[1] || "", version: match[2] || "0" };
+       },
+
+       sub: function() {
+               function jQuerySub( selector, context ) {
+                       return new jQuerySub.fn.init( selector, context );
+               }
+               jQuery.extend( true, jQuerySub, this );
+               jQuerySub.superclass = this;
+               jQuerySub.fn = jQuerySub.prototype = this();
+               jQuerySub.fn.constructor = jQuerySub;
+               jQuerySub.sub = this.sub;
+               jQuerySub.fn.init = function init( selector, context ) {
+                       if ( context && context instanceof jQuery && !(context instanceof jQuerySub) ) {
+                               context = jQuerySub( context );
+                       }
+
+                       return jQuery.fn.init.call( this, selector, context, rootjQuerySub );
+               };
+               jQuerySub.fn.init.prototype = jQuerySub.fn;
+               var rootjQuerySub = jQuerySub(document);
+               return jQuerySub;
+       },
+
+       browser: {}
+});
+
+// Populate the class2type map
+jQuery.each("Boolean Number String Function Array Date RegExp Object".split(" "), function(i, name) {
+       class2type[ "[object " + name + "]" ] = name.toLowerCase();
+});
+
+browserMatch = jQuery.uaMatch( userAgent );
+if ( browserMatch.browser ) {
+       jQuery.browser[ browserMatch.browser ] = true;
+       jQuery.browser.version = browserMatch.version;
+}
+
+// Deprecated, use jQuery.browser.webkit instead
+if ( jQuery.browser.webkit ) {
+       jQuery.browser.safari = true;
+}
+
+// IE doesn't match non-breaking spaces with \s
+if ( rnotwhite.test( "\xA0" ) ) {
+       trimLeft = /^[\s\xA0]+/;
+       trimRight = /[\s\xA0]+$/;
+}
+
+// All jQuery objects should point back to these
+rootjQuery = jQuery(document);
+
+// Cleanup functions for the document ready method
+if ( document.addEventListener ) {
+       DOMContentLoaded = function() {
+               document.removeEventListener( "DOMContentLoaded", DOMContentLoaded, false );
+               jQuery.ready();
+       };
+
+} else if ( document.attachEvent ) {
+       DOMContentLoaded = function() {
+               // Make sure body exists, at least, in case IE gets a little overzealous (ticket #5443).
+               if ( document.readyState === "complete" ) {
+                       document.detachEvent( "onreadystatechange", DOMContentLoaded );
+                       jQuery.ready();
+               }
+       };
+}
+
+// The DOM ready check for Internet Explorer
+function doScrollCheck() {
+       if ( jQuery.isReady ) {
+               return;
+       }
+
+       try {
+               // If IE is used, use the trick by Diego Perini
+               // http://javascript.nwbox.com/IEContentLoaded/
+               document.documentElement.doScroll("left");
+       } catch(e) {
+               setTimeout( doScrollCheck, 1 );
+               return;
+       }
+
+       // and execute any waiting functions
+       jQuery.ready();
+}
+
+// Expose jQuery as an AMD module, but only for AMD loaders that
+// understand the issues with loading multiple versions of jQuery
+// in a page that all might call define(). The loader will indicate
+// they have special allowances for multiple jQuery versions by
+// specifying define.amd.jQuery = true. Register as a named module,
+// since jQuery can be concatenated with other files that may use define,
+// but not use a proper concatenation script that understands anonymous
+// AMD modules. A named AMD is safest and most robust way to register.
+// Lowercase jquery is used because AMD module names are derived from
+// file names, and jQuery is normally delivered in a lowercase file name.
+if ( typeof define === "function" && define.amd && define.amd.jQuery ) {
+       define( "jquery", [], function () { return jQuery; } );
+}
+
+return jQuery;
+
+})();
+
+
+// String to Object flags format cache
+var flagsCache = {};
+
+// Convert String-formatted flags into Object-formatted ones and store in cache
+function createFlags( flags ) {
+       var object = flagsCache[ flags ] = {},
+               i, length;
+       flags = flags.split( /\s+/ );
+       for ( i = 0, length = flags.length; i < length; i++ ) {
+               object[ flags[i] ] = true;
+       }
+       return object;
+}
+
+/*
+ * Create a callback list using the following parameters:
+ *
+ *     flags:  an optional list of space-separated flags that will change how
+ *                     the callback list behaves
+ *
+ * By default a callback list will act like an event callback list and can be
+ * "fired" multiple times.
+ *
+ * Possible flags:
+ *
+ *     once:                   will ensure the callback list can only be fired once (like a Deferred)
+ *
+ *     memory:                 will keep track of previous values and will call any callback added
+ *                                     after the list has been fired right away with the latest "memorized"
+ *                                     values (like a Deferred)
+ *
+ *     unique:                 will ensure a callback can only be added once (no duplicate in the list)
+ *
+ *     stopOnFalse:    interrupt callings when a callback returns false
+ *
+ */
+jQuery.Callbacks = function( flags ) {
+
+       // Convert flags from String-formatted to Object-formatted
+       // (we check in cache first)
+       flags = flags ? ( flagsCache[ flags ] || createFlags( flags ) ) : {};
+
+       var // Actual callback list
+               list = [],
+               // Stack of fire calls for repeatable lists
+               stack = [],
+               // Last fire value (for non-forgettable lists)
+               memory,
+               // Flag to know if list is currently firing
+               firing,
+               // First callback to fire (used internally by add and fireWith)
+               firingStart,
+               // End of the loop when firing
+               firingLength,
+               // Index of currently firing callback (modified by remove if needed)
+               firingIndex,
+               // Add one or several callbacks to the list
+               add = function( args ) {
+                       var i,
+                               length,
+                               elem,
+                               type,
+                               actual;
+                       for ( i = 0, length = args.length; i < length; i++ ) {
+                               elem = args[ i ];
+                               type = jQuery.type( elem );
+                               if ( type === "array" ) {
+                                       // Inspect recursively
+                                       add( elem );
+                               } else if ( type === "function" ) {
+                                       // Add if not in unique mode and callback is not in
+                                       if ( !flags.unique || !self.has( elem ) ) {
+                                               list.push( elem );
+                                       }
+                               }
+                       }
+               },
+               // Fire callbacks
+               fire = function( context, args ) {
+                       args = args || [];
+                       memory = !flags.memory || [ context, args ];
+                       firing = true;
+                       firingIndex = firingStart || 0;
+                       firingStart = 0;
+                       firingLength = list.length;
+                       for ( ; list && firingIndex < firingLength; firingIndex++ ) {
+                               if ( list[ firingIndex ].apply( context, args ) === false && flags.stopOnFalse ) {
+                                       memory = true; // Mark as halted
+                                       break;
+                               }
+                       }
+                       firing = false;
+                       if ( list ) {
+                               if ( !flags.once ) {
+                                       if ( stack && stack.length ) {
+                                               memory = stack.shift();
+                                               self.fireWith( memory[ 0 ], memory[ 1 ] );
+                                       }
+                               } else if ( memory === true ) {
+                                       self.disable();
+                               } else {
+                                       list = [];
+                               }
+                       }
+               },
+               // Actual Callbacks object
+               self = {
+                       // Add a callback or a collection of callbacks to the list
+                       add: function() {
+                               if ( list ) {
+                                       var length = list.length;
+                                       add( arguments );
+                                       // Do we need to add the callbacks to the
+                                       // current firing batch?
+                                       if ( firing ) {
+                                               firingLength = list.length;
+                                       // With memory, if we're not firing then
+                                       // we should call right away, unless previous
+                                       // firing was halted (stopOnFalse)
+                                       } else if ( memory && memory !== true ) {
+                                               firingStart = length;
+                                               fire( memory[ 0 ], memory[ 1 ] );
+                                       }
+                               }
+                               return this;
+                       },
+                       // Remove a callback from the list
+                       remove: function() {
+                               if ( list ) {
+                                       var args = arguments,
+                                               argIndex = 0,
+                                               argLength = args.length;
+                                       for ( ; argIndex < argLength ; argIndex++ ) {
+                                               for ( var i = 0; i < list.length; i++ ) {
+                                                       if ( args[ argIndex ] === list[ i ] ) {
+                                                               // Handle firingIndex and firingLength
+                                                               if ( firing ) {
+                                                                       if ( i <= firingLength ) {
+                                                                               firingLength--;
+                                                                               if ( i <= firingIndex ) {
+                                                                                       firingIndex--;
+                                                                               }
+                                                                       }
+                                                               }
+                                                               // Remove the element
+                                                               list.splice( i--, 1 );
+                                                               // If we have some unicity property then
+                                                               // we only need to do this once
+                                                               if ( flags.unique ) {
+                                                                       break;
+                                                               }
+                                                       }
+                                               }
+                                       }
+                               }
+                               return this;
+                       },
+                       // Control if a given callback is in the list
+                       has: function( fn ) {
+                               if ( list ) {
+                                       var i = 0,
+                                               length = list.length;
+                                       for ( ; i < length; i++ ) {
+                                               if ( fn === list[ i ] ) {
+                                                       return true;
+                                               }
+                                       }
+                               }
+                               return false;
+                       },
+                       // Remove all callbacks from the list
+                       empty: function() {
+                               list = [];
+                               return this;
+                       },
+                       // Have the list do nothing anymore
+                       disable: function() {
+                               list = stack = memory = undefined;
+                               return this;
+                       },
+                       // Is it disabled?
+                       disabled: function() {
+                               return !list;
+                       },
+                       // Lock the list in its current state
+                       lock: function() {
+                               stack = undefined;
+                               if ( !memory || memory === true ) {
+                                       self.disable();
+                               }
+                               return this;
+                       },
+                       // Is it locked?
+                       locked: function() {
+                               return !stack;
+                       },
+                       // Call all callbacks with the given context and arguments
+                       fireWith: function( context, args ) {
+                               if ( stack ) {
+                                       if ( firing ) {
+                                               if ( !flags.once ) {
+                                                       stack.push( [ context, args ] );
+                                               }
+                                       } else if ( !( flags.once && memory ) ) {
+                                               fire( context, args );
+                                       }
+                               }
+                               return this;
+                       },
+                       // Call all the callbacks with the given arguments
+                       fire: function() {
+                               self.fireWith( this, arguments );
+                               return this;
+                       },
+                       // To know if the callbacks have already been called at least once
+                       fired: function() {
+                               return !!memory;
+                       }
+               };
+
+       return self;
+};
+
+
+
+
+var // Static reference to slice
+       sliceDeferred = [].slice;
+
+jQuery.extend({
+
+       Deferred: function( func ) {
+               var doneList = jQuery.Callbacks( "once memory" ),
+                       failList = jQuery.Callbacks( "once memory" ),
+                       progressList = jQuery.Callbacks( "memory" ),
+                       state = "pending",
+                       lists = {
+                               resolve: doneList,
+                               reject: failList,
+                               notify: progressList
+                       },
+                       promise = {
+                               done: doneList.add,
+                               fail: failList.add,
+                               progress: progressList.add,
+
+                               state: function() {
+                                       return state;
+                               },
+
+                               // Deprecated
+                               isResolved: doneList.fired,
+                               isRejected: failList.fired,
+
+                               then: function( doneCallbacks, failCallbacks, progressCallbacks ) {
+                                       deferred.done( doneCallbacks ).fail( failCallbacks ).progress( progressCallbacks );
+                                       return this;
+                               },
+                               always: function() {
+                                       return deferred.done.apply( deferred, arguments ).fail.apply( deferred, arguments );
+                               },
+                               pipe: function( fnDone, fnFail, fnProgress ) {
+                                       return jQuery.Deferred(function( newDefer ) {
+                                               jQuery.each( {
+                                                       done: [ fnDone, "resolve" ],
+                                                       fail: [ fnFail, "reject" ],
+                                                       progress: [ fnProgress, "notify" ]
+                                               }, function( handler, data ) {
+                                                       var fn = data[ 0 ],
+                                                               action = data[ 1 ],
+                                                               returned;
+                                                       if ( jQuery.isFunction( fn ) ) {
+                                                               deferred[ handler ](function() {
+                                                                       returned = fn.apply( this, arguments );
+                                                                       if ( returned && jQuery.isFunction( returned.promise ) ) {
+                                                                               returned.promise().then( newDefer.resolve, newDefer.reject, newDefer.notify );
+                                                                       } else {
+                                                                               newDefer[ action + "With" ]( this === deferred ? newDefer : this, [ returned ] );
+                                                                       }
+                                                               });
+                                                       } else {
+                                                               deferred[ handler ]( newDefer[ action ] );
+                                                       }
+                                               });
+                                       }).promise();
+                               },
+                               // Get a promise for this deferred
+                               // If obj is provided, the promise aspect is added to the object
+                               promise: function( obj ) {
+                                       if ( obj == null ) {
+                                               obj = promise;
+                                       } else {
+                                               for ( var key in promise ) {
+                                                       obj[ key ] = promise[ key ];
+                                               }
+                                       }
+                                       return obj;
+                               }
+                       },
+                       deferred = promise.promise({}),
+                       key;
+
+               for ( key in lists ) {
+                       deferred[ key ] = lists[ key ].fire;
+                       deferred[ key + "With" ] = lists[ key ].fireWith;
+               }
+
+               // Handle state
+               deferred.done( function() {
+                       state = "resolved";
+               }, failList.disable, progressList.lock ).fail( function() {
+                       state = "rejected";
+               }, doneList.disable, progressList.lock );
+
+               // Call given func if any
+               if ( func ) {
+                       func.call( deferred, deferred );
+               }
+
+               // All done!
+               return deferred;
+       },
+
+       // Deferred helper
+       when: function( firstParam ) {
+               var args = sliceDeferred.call( arguments, 0 ),
+                       i = 0,
+                       length = args.length,
+                       pValues = new Array( length ),
+                       count = length,
+                       pCount = length,
+                       deferred = length <= 1 && firstParam && jQuery.isFunction( firstParam.promise ) ?
+                               firstParam :
+                               jQuery.Deferred(),
+                       promise = deferred.promise();
+               function resolveFunc( i ) {
+                       return function( value ) {
+                               args[ i ] = arguments.length > 1 ? sliceDeferred.call( arguments, 0 ) : value;
+                               if ( !( --count ) ) {
+                                       deferred.resolveWith( deferred, args );
+                               }
+                       };
+               }
+               function progressFunc( i ) {
+                       return function( value ) {
+                               pValues[ i ] = arguments.length > 1 ? sliceDeferred.call( arguments, 0 ) : value;
+                               deferred.notifyWith( promise, pValues );
+                       };
+               }
+               if ( length > 1 ) {
+                       for ( ; i < length; i++ ) {
+                               if ( args[ i ] && args[ i ].promise && jQuery.isFunction( args[ i ].promise ) ) {
+                                       args[ i ].promise().then( resolveFunc(i), deferred.reject, progressFunc(i) );
+                               } else {
+                                       --count;
+                               }
+                       }
+                       if ( !count ) {
+                               deferred.resolveWith( deferred, args );
+                       }
+               } else if ( deferred !== firstParam ) {
+                       deferred.resolveWith( deferred, length ? [ firstParam ] : [] );
+               }
+               return promise;
+       }
+});
+
+
+
+
+jQuery.support = (function() {
+
+       var div = document.createElement( "div" ),
+               documentElement = document.documentElement,
+               all,
+               a,
+               select,
+               opt,
+               input,
+               marginDiv,
+               support,
+               fragment,
+               body,
+               testElementParent,
+               testElement,
+               testElementStyle,
+               tds,
+               events,
+               eventName,
+               i,
+               isSupported;
+
+       // Preliminary tests
+       div.setAttribute("className", "t");
+       div.innerHTML = "   <link/><table></table><a href='/a' style='top:1px;float:left;opacity:.55;'>a</a><input type='checkbox'/><nav></nav>";
+
+
+       all = div.getElementsByTagName( "*" );
+       a = div.getElementsByTagName( "a" )[ 0 ];
+
+       // Can't get basic test support
+       if ( !all || !all.length || !a ) {
+               return {};
+       }
+
+       // First batch of supports tests
+       select = document.createElement( "select" );
+       opt = select.appendChild( document.createElement("option") );
+       input = div.getElementsByTagName( "input" )[ 0 ];
+
+       support = {
+               // IE strips leading whitespace when .innerHTML is used
+               leadingWhitespace: ( div.firstChild.nodeType === 3 ),
+
+               // Make sure that tbody elements aren't automatically inserted
+               // IE will insert them into empty tables
+               tbody: !div.getElementsByTagName( "tbody" ).length,
+
+               // Make sure that link elements get serialized correctly by innerHTML
+               // This requires a wrapper element in IE
+               htmlSerialize: !!div.getElementsByTagName( "link" ).length,
+
+               // Get the style information from getAttribute
+               // (IE uses .cssText instead)
+               style: /top/.test( a.getAttribute("style") ),
+
+               // Make sure that URLs aren't manipulated
+               // (IE normalizes it by default)
+               hrefNormalized: ( a.getAttribute( "href" ) === "/a" ),
+
+               // Make sure that element opacity exists
+               // (IE uses filter instead)
+               // Use a regex to work around a WebKit issue. See #5145
+               opacity: /^0.55/.test( a.style.opacity ),
+
+               // Verify style float existence
+               // (IE uses styleFloat instead of cssFloat)
+               cssFloat: !!a.style.cssFloat,
+
+               // Make sure unknown elements (like HTML5 elems) are handled appropriately
+               unknownElems: !!div.getElementsByTagName( "nav" ).length,
+
+               // Make sure that if no value is specified for a checkbox
+               // that it defaults to "on".
+               // (WebKit defaults to "" instead)
+               checkOn: ( input.value === "on" ),
+
+               // Make sure that a selected-by-default option has a working selected property.
+               // (WebKit defaults to false instead of true, IE too, if it's in an optgroup)
+               optSelected: opt.selected,
+
+               // Test setAttribute on camelCase class. If it works, we need attrFixes when doing get/setAttribute (ie6/7)
+               getSetAttribute: div.className !== "t",
+
+               // Tests for enctype support on a form(#6743)
+               enctype: !!document.createElement("form").enctype,
+
+               // Will be defined later
+               submitBubbles: true,
+               changeBubbles: true,
+               focusinBubbles: false,
+               deleteExpando: true,
+               noCloneEvent: true,
+               inlineBlockNeedsLayout: false,
+               shrinkWrapBlocks: false,
+               reliableMarginRight: true
+       };
+
+       // Make sure checked status is properly cloned
+       input.checked = true;
+       support.noCloneChecked = input.cloneNode( true ).checked;
+
+       // Make sure that the options inside disabled selects aren't marked as disabled
+       // (WebKit marks them as disabled)
+       select.disabled = true;
+       support.optDisabled = !opt.disabled;
+
+       // Test to see if it's possible to delete an expando from an element
+       // Fails in Internet Explorer
+       try {
+               delete div.test;
+       } catch( e ) {
+               support.deleteExpando = false;
+       }
+
+       if ( !div.addEventListener && div.attachEvent && div.fireEvent ) {
+               div.attachEvent( "onclick", function() {
+                       // Cloning a node shouldn't copy over any
+                       // bound event handlers (IE does this)
+                       support.noCloneEvent = false;
+               });
+               div.cloneNode( true ).fireEvent( "onclick" );
+       }
+
+       // Check if a radio maintains its value
+       // after being appended to the DOM
+       input = document.createElement("input");
+       input.value = "t";
+       input.setAttribute("type", "radio");
+       support.radioValue = input.value === "t";
+
+       input.setAttribute("checked", "checked");
+       div.appendChild( input );
+       fragment = document.createDocumentFragment();
+       fragment.appendChild( div.lastChild );
+
+       // WebKit doesn't clone checked state correctly in fragments
+       support.checkClone = fragment.cloneNode( true ).cloneNode( true ).lastChild.checked;
+
+       div.innerHTML = "";
+
+       // Figure out if the W3C box model works as expected
+       div.style.width = div.style.paddingLeft = "1px";
+
+       // We don't want to do body-related feature tests on frameset
+       // documents, which lack a body. So we use
+       // document.getElementsByTagName("body")[0], which is undefined in
+       // frameset documents, while document.body isn’t. (7398)
+       body = document.getElementsByTagName("body")[ 0 ];
+       // We use our own, invisible, body unless the body is already present
+       // in which case we use a div (#9239)
+       testElement = document.createElement( body ? "div" : "body" );
+       testElementStyle = {
+               visibility: "hidden",
+               width: 0,
+               height: 0,
+               border: 0,
+               margin: 0,
+               background: "none"
+       };
+       if ( body ) {
+               jQuery.extend( testElementStyle, {
+                       position: "absolute",
+                       left: "-999px",
+                       top: "-999px"
+               });
+       }
+       for ( i in testElementStyle ) {
+               testElement.style[ i ] = testElementStyle[ i ];
+       }
+       testElement.appendChild( div );
+       testElementParent = body || documentElement;
+       testElementParent.insertBefore( testElement, testElementParent.firstChild );
+
+       // Check if a disconnected checkbox will retain its checked
+       // value of true after appended to the DOM (IE6/7)
+       support.appendChecked = input.checked;
+
+       support.boxModel = div.offsetWidth === 2;
+
+       if ( "zoom" in div.style ) {
+               // Check if natively block-level elements act like inline-block
+               // elements when setting their display to 'inline' and giving
+               // them layout
+               // (IE < 8 does this)
+               div.style.display = "inline";
+               div.style.zoom = 1;
+               support.inlineBlockNeedsLayout = ( div.offsetWidth === 2 );
+
+               // Check if elements with layout shrink-wrap their children
+               // (IE 6 does this)
+               div.style.display = "";
+               div.innerHTML = "<div style='width:4px;'></div>";
+               support.shrinkWrapBlocks = ( div.offsetWidth !== 2 );
+       }
+
+       div.innerHTML = "<table><tr><td style='padding:0;border:0;display:none'></td><td>t</td></tr></table>";
+       tds = div.getElementsByTagName( "td" );
+
+       // Check if table cells still have offsetWidth/Height when they are set
+       // to display:none and there are still other visible table cells in a
+       // table row; if so, offsetWidth/Height are not reliable for use when
+       // determining if an element has been hidden directly using
+       // display:none (it is still safe to use offsets if a parent element is
+       // hidden; don safety goggles and see bug #4512 for more information).
+       // (only IE 8 fails this test)
+       isSupported = ( tds[ 0 ].offsetHeight === 0 );
+
+       tds[ 0 ].style.display = "";
+       tds[ 1 ].style.display = "none";
+
+       // Check if empty table cells still have offsetWidth/Height
+       // (IE < 8 fail this test)
+       support.reliableHiddenOffsets = isSupported && ( tds[ 0 ].offsetHeight === 0 );
+       div.innerHTML = "";
+
+       // Check if div with explicit width and no margin-right incorrectly
+       // gets computed margin-right based on width of container. For more
+       // info see bug #3333
+       // Fails in WebKit before Feb 2011 nightlies
+       // WebKit Bug 13343 - getComputedStyle returns wrong value for margin-right
+       if ( document.defaultView && document.defaultView.getComputedStyle ) {
+               marginDiv = document.createElement( "div" );
+               marginDiv.style.width = "0";
+               marginDiv.style.marginRight = "0";
+               div.appendChild( marginDiv );
+               support.reliableMarginRight =
+                       ( parseInt( ( document.defaultView.getComputedStyle( marginDiv, null ) || { marginRight: 0 } ).marginRight, 10 ) || 0 ) === 0;
+       }
+
+       // Technique from Juriy Zaytsev
+       // http://perfectionkills.com/detecting-event-support-without-browser-sniffing/
+       // We only care about the case where non-standard event systems
+       // are used, namely in IE. Short-circuiting here helps us to
+       // avoid an eval call (in setAttribute) which can cause CSP
+       // to go haywire. See: https://developer.mozilla.org/en/Security/CSP
+       if ( div.attachEvent ) {
+               for( i in {
+                       submit: 1,
+                       change: 1,
+                       focusin: 1
+               } ) {
+                       eventName = "on" + i;
+                       isSupported = ( eventName in div );
+                       if ( !isSupported ) {
+                               div.setAttribute( eventName, "return;" );
+                               isSupported = ( typeof div[ eventName ] === "function" );
+                       }
+                       support[ i + "Bubbles" ] = isSupported;
+               }
+       }
+
+       // Run fixed position tests at doc ready to avoid a crash
+       // related to the invisible body in IE8
+       jQuery(function() {
+               var container, outer, inner, table, td, offsetSupport,
+                       conMarginTop = 1,
+                       ptlm = "position:absolute;top:0;left:0;width:1px;height:1px;margin:0;",
+                       vb = "visibility:hidden;border:0;",
+                       style = "style='" + ptlm + "border:5px solid #000;padding:0;'",
+                       html = "<div " + style + "><div></div></div>" +
+                                                       "<table " + style + " cellpadding='0' cellspacing='0'>" +
+                                                       "<tr><td></td></tr></table>";
+
+               // Reconstruct a container
+               body = document.getElementsByTagName("body")[0];
+               if ( !body ) {
+                       // Return for frameset docs that don't have a body
+                       // These tests cannot be done
+                       return;
+               }
+
+               container = document.createElement("div");
+               container.style.cssText = vb + "width:0;height:0;position:static;top:0;margin-top:" + conMarginTop + "px";
+               body.insertBefore( container, body.firstChild );
+
+               // Construct a test element
+               testElement = document.createElement("div");
+               testElement.style.cssText = ptlm + vb;
+
+               testElement.innerHTML = html;
+               container.appendChild( testElement );
+               outer = testElement.firstChild;
+               inner = outer.firstChild;
+               td = outer.nextSibling.firstChild.firstChild;
+
+               offsetSupport = {
+                       doesNotAddBorder: ( inner.offsetTop !== 5 ),
+                       doesAddBorderForTableAndCells: ( td.offsetTop === 5 )
+               };
+
+               inner.style.position = "fixed";
+               inner.style.top = "20px";
+
+               // safari subtracts parent border width here which is 5px
+               offsetSupport.fixedPosition = ( inner.offsetTop === 20 || inner.offsetTop === 15 );
+               inner.style.position = inner.style.top = "";
+
+               outer.style.overflow = "hidden";
+               outer.style.position = "relative";
+
+               offsetSupport.subtractsBorderForOverflowNotVisible = ( inner.offsetTop === -5 );
+               offsetSupport.doesNotIncludeMarginInBodyOffset = ( body.offsetTop !== conMarginTop );
+
+               body.removeChild( container );
+               testElement = container = null;
+
+               jQuery.extend( support, offsetSupport );
+       });
+
+       testElement.innerHTML = "";
+       testElementParent.removeChild( testElement );
+
+       // Null connected elements to avoid leaks in IE
+       testElement = fragment = select = opt = body = marginDiv = div = input = null;
+
+       return support;
+})();
+
+// Keep track of boxModel
+jQuery.boxModel = jQuery.support.boxModel;
+
+
+
+
+var rbrace = /^(?:\{.*\}|\[.*\])$/,
+       rmultiDash = /([A-Z])/g;
+
+jQuery.extend({
+       cache: {},
+
+       // Please use with caution
+       uuid: 0,
+
+       // Unique for each copy of jQuery on the page
+       // Non-digits removed to match rinlinejQuery
+       expando: "jQuery" + ( jQuery.fn.jquery + Math.random() ).replace( /\D/g, "" ),
+
+       // The following elements throw uncatchable exceptions if you
+       // attempt to add expando properties to them.
+       noData: {
+               "embed": true,
+               // Ban all objects except for Flash (which handle expandos)
+               "object": "clsid:D27CDB6E-AE6D-11cf-96B8-444553540000",
+               "applet": true
+       },
+
+       hasData: function( elem ) {
+               elem = elem.nodeType ? jQuery.cache[ elem[jQuery.expando] ] : elem[ jQuery.expando ];
+               return !!elem && !isEmptyDataObject( elem );
+       },
+
+       data: function( elem, name, data, pvt /* Internal Use Only */ ) {
+               if ( !jQuery.acceptData( elem ) ) {
+                       return;
+               }
+
+               var privateCache, thisCache, ret,
+                       internalKey = jQuery.expando,
+                       getByName = typeof name === "string",
+
+                       // We have to handle DOM nodes and JS objects differently because IE6-7
+                       // can't GC object references properly across the DOM-JS boundary
+                       isNode = elem.nodeType,
+
+                       // Only DOM nodes need the global jQuery cache; JS object data is
+                       // attached directly to the object so GC can occur automatically
+                       cache = isNode ? jQuery.cache : elem,
+
+                       // Only defining an ID for JS objects if its cache already exists allows
+                       // the code to shortcut on the same path as a DOM node with no cache
+                       id = isNode ? elem[ jQuery.expando ] : elem[ jQuery.expando ] && jQuery.expando,
+                       isEvents = name === "events";
+
+               // Avoid doing any more work than we need to when trying to get data on an
+               // object that has no data at all
+               if ( (!id || !cache[id] || (!isEvents && !pvt && !cache[id].data)) && getByName && data === undefined ) {
+                       return;
+               }
+
+               if ( !id ) {
+                       // Only DOM nodes need a new unique ID for each element since their data
+                       // ends up in the global cache
+                       if ( isNode ) {
+                               elem[ jQuery.expando ] = id = ++jQuery.uuid;
+                       } else {
+                               id = jQuery.expando;
+                       }
+               }
+
+               if ( !cache[ id ] ) {
+                       cache[ id ] = {};
+
+                       // Avoids exposing jQuery metadata on plain JS objects when the object
+                       // is serialized using JSON.stringify
+                       if ( !isNode ) {
+                               cache[ id ].toJSON = jQuery.noop;
+                       }
+               }
+
+               // An object can be passed to jQuery.data instead of a key/value pair; this gets
+               // shallow copied over onto the existing cache
+               if ( typeof name === "object" || typeof name === "function" ) {
+                       if ( pvt ) {
+                               cache[ id ] = jQuery.extend( cache[ id ], name );
+                       } else {
+                               cache[ id ].data = jQuery.extend( cache[ id ].data, name );
+                       }
+               }
+
+               privateCache = thisCache = cache[ id ];
+
+               // jQuery data() is stored in a separate object inside the object's internal data
+               // cache in order to avoid key collisions between internal data and user-defined
+               // data.
+               if ( !pvt ) {
+                       if ( !thisCache.data ) {
+                               thisCache.data = {};
+                       }
+
+                       thisCache = thisCache.data;
+               }
+
+               if ( data !== undefined ) {
+                       thisCache[ jQuery.camelCase( name ) ] = data;
+               }
+
+               // Users should not attempt to inspect the internal events object using jQuery.data,
+               // it is undocumented and subject to change. But does anyone listen? No.
+               if ( isEvents && !thisCache[ name ] ) {
+                       return privateCache.events;
+               }
+
+               // Check for both converted-to-camel and non-converted data property names
+               // If a data property was specified
+               if ( getByName ) {
+
+                       // First Try to find as-is property data
+                       ret = thisCache[ name ];
+
+                       // Test for null|undefined property data
+                       if ( ret == null ) {
+
+                               // Try to find the camelCased property
+                               ret = thisCache[ jQuery.camelCase( name ) ];
+                       }
+               } else {
+                       ret = thisCache;
+               }
+
+               return ret;
+       },
+
+       removeData: function( elem, name, pvt /* Internal Use Only */ ) {
+               if ( !jQuery.acceptData( elem ) ) {
+                       return;
+               }
+
+               var thisCache, i, l,
+
+                       // Reference to internal data cache key
+                       internalKey = jQuery.expando,
+
+                       isNode = elem.nodeType,
+
+                       // See jQuery.data for more information
+                       cache = isNode ? jQuery.cache : elem,
+
+                       // See jQuery.data for more information
+                       id = isNode ? elem[ jQuery.expando ] : jQuery.expando;
+
+               // If there is already no cache entry for this object, there is no
+               // purpose in continuing
+               if ( !cache[ id ] ) {
+                       return;
+               }
+
+               if ( name ) {
+
+                       thisCache = pvt ? cache[ id ] : cache[ id ].data;
+
+                       if ( thisCache ) {
+
+                               // Support space separated names
+                               if ( jQuery.isArray( name ) ) {
+                                       name = name;
+                               } else if ( name in thisCache ) {
+                                       name = [ name ];
+                               } else {
+
+                                       // split the camel cased version by spaces
+                                       name = jQuery.camelCase( name );
+                                       if ( name in thisCache ) {
+                                               name = [ name ];
+                                       } else {
+                                               name = name.split( " " );
+                                       }
+                               }
+
+                               for ( i = 0, l = name.length; i < l; i++ ) {
+                                       delete thisCache[ name[i] ];
+                               }
+
+                               // If there is no data left in the cache, we want to continue
+                               // and let the cache object itself get destroyed
+                               if ( !( pvt ? isEmptyDataObject : jQuery.isEmptyObject )( thisCache ) ) {
+                                       return;
+                               }
+                       }
+               }
+
+               // See jQuery.data for more information
+               if ( !pvt ) {
+                       delete cache[ id ].data;
+
+                       // Don't destroy the parent cache unless the internal data object
+                       // had been the only thing left in it
+                       if ( !isEmptyDataObject(cache[ id ]) ) {
+                               return;
+                       }
+               }
+
+               // Browsers that fail expando deletion also refuse to delete expandos on
+               // the window, but it will allow it on all other JS objects; other browsers
+               // don't care
+               // Ensure that `cache` is not a window object #10080
+               if ( jQuery.support.deleteExpando || !cache.setInterval ) {
+                       delete cache[ id ];
+               } else {
+                       cache[ id ] = null;
+               }
+
+               // We destroyed the cache and need to eliminate the expando on the node to avoid
+               // false lookups in the cache for entries that no longer exist
+               if ( isNode ) {
+                       // IE does not allow us to delete expando properties from nodes,
+                       // nor does it have a removeAttribute function on Document nodes;
+                       // we must handle all of these cases
+                       if ( jQuery.support.deleteExpando ) {
+                               delete elem[ jQuery.expando ];
+                       } else if ( elem.removeAttribute ) {
+                               elem.removeAttribute( jQuery.expando );
+                       } else {
+                               elem[ jQuery.expando ] = null;
+                       }
+               }
+       },
+
+       // For internal use only.
+       _data: function( elem, name, data ) {
+               return jQuery.data( elem, name, data, true );
+       },
+
+       // A method for determining if a DOM node can handle the data expando
+       acceptData: function( elem ) {
+               if ( elem.nodeName ) {
+                       var match = jQuery.noData[ elem.nodeName.toLowerCase() ];
+
+                       if ( match ) {
+                               return !(match === true || elem.getAttribute("classid") !== match);
+                       }
+               }
+
+               return true;
+       }
+});
+
+jQuery.fn.extend({
+       data: function( key, value ) {
+               var parts, attr, name,
+                       data = null;
+
+               if ( typeof key === "undefined" ) {
+                       if ( this.length ) {
+                               data = jQuery.data( this[0] );
+
+                               if ( this[0].nodeType === 1 && !jQuery._data( this[0], "parsedAttrs" ) ) {
+                                       attr = this[0].attributes;
+                                       for ( var i = 0, l = attr.length; i < l; i++ ) {
+                                               name = attr[i].name;
+
+                                               if ( name.indexOf( "data-" ) === 0 ) {
+                                                       name = jQuery.camelCase( name.substring(5) );
+
+                                                       dataAttr( this[0], name, data[ name ] );
+                                               }
+                                       }
+                                       jQuery._data( this[0], "parsedAttrs", true );
+                               }
+                       }
+
+                       return data;
+
+               } else if ( typeof key === "object" ) {
+                       return this.each(function() {
+                               jQuery.data( this, key );
+                       });
+               }
+
+               parts = key.split(".");
+               parts[1] = parts[1] ? "." + parts[1] : "";
+
+               if ( value === undefined ) {
+                       data = this.triggerHandler("getData" + parts[1] + "!", [parts[0]]);
+
+                       // Try to fetch any internally stored data first
+                       if ( data === undefined && this.length ) {
+                               data = jQuery.data( this[0], key );
+                               data = dataAttr( this[0], key, data );
+                       }
+
+                       return data === undefined && parts[1] ?
+                               this.data( parts[0] ) :
+                               data;
+
+               } else {
+                       return this.each(function() {
+                               var $this = jQuery( this ),
+                                       args = [ parts[0], value ];
+
+                               $this.triggerHandler( "setData" + parts[1] + "!", args );
+                               jQuery.data( this, key, value );
+                               $this.triggerHandler( "changeData" + parts[1] + "!", args );
+                       });
+               }
+       },
+
+       removeData: function( key ) {
+               return this.each(function() {
+                       jQuery.removeData( this, key );
+               });
+       }
+});
+
+function dataAttr( elem, key, data ) {
+       // If nothing was found internally, try to fetch any
+       // data from the HTML5 data-* attribute
+       if ( data === undefined && elem.nodeType === 1 ) {
+
+               var name = "data-" + key.replace( rmultiDash, "-$1" ).toLowerCase();
+
+               data = elem.getAttribute( name );
+
+               if ( typeof data === "string" ) {
+                       try {
+                               data = data === "true" ? true :
+                               data === "false" ? false :
+                               data === "null" ? null :
+                               jQuery.isNumeric( data ) ? parseFloat( data ) :
+                                       rbrace.test( data ) ? jQuery.parseJSON( data ) :
+                                       data;
+                       } catch( e ) {}
+
+                       // Make sure we set the data so it isn't changed later
+                       jQuery.data( elem, key, data );
+
+               } else {
+                       data = undefined;
+               }
+       }
+
+       return data;
+}
+
+// checks a cache object for emptiness
+function isEmptyDataObject( obj ) {
+       for ( var name in obj ) {
+
+               // if the public data object is empty, the private is still empty
+               if ( name === "data" && jQuery.isEmptyObject( obj[name] ) ) {
+                       continue;
+               }
+               if ( name !== "toJSON" ) {
+                       return false;
+               }
+       }
+
+       return true;
+}
+
+
+
+
+function handleQueueMarkDefer( elem, type, src ) {
+       var deferDataKey = type + "defer",
+               queueDataKey = type + "queue",
+               markDataKey = type + "mark",
+               defer = jQuery._data( elem, deferDataKey );
+       if ( defer &&
+               ( src === "queue" || !jQuery._data(elem, queueDataKey) ) &&
+               ( src === "mark" || !jQuery._data(elem, markDataKey) ) ) {
+               // Give room for hard-coded callbacks to fire first
+               // and eventually mark/queue something else on the element
+               setTimeout( function() {
+                       if ( !jQuery._data( elem, queueDataKey ) &&
+                               !jQuery._data( elem, markDataKey ) ) {
+                               jQuery.removeData( elem, deferDataKey, true );
+                               defer.fire();
+                       }
+               }, 0 );
+       }
+}
+
+jQuery.extend({
+
+       _mark: function( elem, type ) {
+               if ( elem ) {
+                       type = ( type || "fx" ) + "mark";
+                       jQuery._data( elem, type, (jQuery._data( elem, type ) || 0) + 1 );
+               }
+       },
+
+       _unmark: function( force, elem, type ) {
+               if ( force !== true ) {
+                       type = elem;
+                       elem = force;
+                       force = false;
+               }
+               if ( elem ) {
+                       type = type || "fx";
+                       var key = type + "mark",
+                               count = force ? 0 : ( (jQuery._data( elem, key ) || 1) - 1 );
+                       if ( count ) {
+                               jQuery._data( elem, key, count );
+                       } else {
+                               jQuery.removeData( elem, key, true );
+                               handleQueueMarkDefer( elem, type, "mark" );
+                       }
+               }
+       },
+
+       queue: function( elem, type, data ) {
+               var q;
+               if ( elem ) {
+                       type = ( type || "fx" ) + "queue";
+                       q = jQuery._data( elem, type );
+
+                       // Speed up dequeue by getting out quickly if this is just a lookup
+                       if ( data ) {
+                               if ( !q || jQuery.isArray(data) ) {
+                                       q = jQuery._data( elem, type, jQuery.makeArray(data) );
+                               } else {
+                                       q.push( data );
+                               }
+                       }
+                       return q || [];
+               }
+       },
+
+       dequeue: function( elem, type ) {
+               type = type || "fx";
+
+               var queue = jQuery.queue( elem, type ),
+                       fn = queue.shift(),
+                       hooks = {};
+
+               // If the fx queue is dequeued, always remove the progress sentinel
+               if ( fn === "inprogress" ) {
+                       fn = queue.shift();
+               }
+
+               if ( fn ) {
+                       // Add a progress sentinel to prevent the fx queue from being
+                       // automatically dequeued
+                       if ( type === "fx" ) {
+                               queue.unshift( "inprogress" );
+                       }
+
+                       jQuery._data( elem, type + ".run", hooks );
+                       fn.call( elem, function() {
+                               jQuery.dequeue( elem, type );
+                       }, hooks );
+               }
+
+               if ( !queue.length ) {
+                       jQuery.removeData( elem, type + "queue " + type + ".run", true );
+                       handleQueueMarkDefer( elem, type, "queue" );
+               }
+       }
+});
+
+jQuery.fn.extend({
+       queue: function( type, data ) {
+               if ( typeof type !== "string" ) {
+                       data = type;
+                       type = "fx";
+               }
+
+               if ( data === undefined ) {
+                       return jQuery.queue( this[0], type );
+               }
+               return this.each(function() {
+                       var queue = jQuery.queue( this, type, data );
+
+                       if ( type === "fx" && queue[0] !== "inprogress" ) {
+                               jQuery.dequeue( this, type );
+                       }
+               });
+       },
+       dequeue: function( type ) {
+               return this.each(function() {
+                       jQuery.dequeue( this, type );
+               });
+       },
+       // Based off of the plugin by Clint Helfers, with permission.
+       // http://blindsignals.com/index.php/2009/07/jquery-delay/
+       delay: function( time, type ) {
+               time = jQuery.fx ? jQuery.fx.speeds[ time ] || time : time;
+               type = type || "fx";
+
+               return this.queue( type, function( next, hooks ) {
+                       var timeout = setTimeout( next, time );
+                       hooks.stop = function() {
+                               clearTimeout( timeout );
+                       };
+               });
+       },
+       clearQueue: function( type ) {
+               return this.queue( type || "fx", [] );
+       },
+       // Get a promise resolved when queues of a certain type
+       // are emptied (fx is the type by default)
+       promise: function( type, object ) {
+               if ( typeof type !== "string" ) {
+                       object = type;
+                       type = undefined;
+               }
+               type = type || "fx";
+               var defer = jQuery.Deferred(),
+                       elements = this,
+                       i = elements.length,
+                       count = 1,
+                       deferDataKey = type + "defer",
+                       queueDataKey = type + "queue",
+                       markDataKey = type + "mark",
+                       tmp;
+               function resolve() {
+                       if ( !( --count ) ) {
+                               defer.resolveWith( elements, [ elements ] );
+                       }
+               }
+               while( i-- ) {
+                       if (( tmp = jQuery.data( elements[ i ], deferDataKey, undefined, true ) ||
+                                       ( jQuery.data( elements[ i ], queueDataKey, undefined, true ) ||
+                                               jQuery.data( elements[ i ], markDataKey, undefined, true ) ) &&
+                                       jQuery.data( elements[ i ], deferDataKey, jQuery.Callbacks( "once memory" ), true ) )) {
+                               count++;
+                               tmp.add( resolve );
+                       }
+               }
+               resolve();
+               return defer.promise();
+       }
+});
+
+
+
+
+var rclass = /[\n\t\r]/g,
+       rspace = /\s+/,
+       rreturn = /\r/g,
+       rtype = /^(?:button|input)$/i,
+       rfocusable = /^(?:button|input|object|select|textarea)$/i,
+       rclickable = /^a(?:rea)?$/i,
+       rboolean = /^(?:autofocus|autoplay|async|checked|controls|defer|disabled|hidden|loop|multiple|open|readonly|required|scoped|selected)$/i,
+       getSetAttribute = jQuery.support.getSetAttribute,
+       nodeHook, boolHook, fixSpecified;
+
+jQuery.fn.extend({
+       attr: function( name, value ) {
+               return jQuery.access( this, name, value, true, jQuery.attr );
+       },
+
+       removeAttr: function( name ) {
+               return this.each(function() {
+                       jQuery.removeAttr( this, name );
+               });
+       },
+
+       prop: function( name, value ) {
+               return jQuery.access( this, name, value, true, jQuery.prop );
+       },
+
+       removeProp: function( name ) {
+               name = jQuery.propFix[ name ] || name;
+               return this.each(function() {
+                       // try/catch handles cases where IE balks (such as removing a property on window)
+                       try {
+                               this[ name ] = undefined;
+                               delete this[ name ];
+                       } catch( e ) {}
+               });
+       },
+
+       addClass: function( value ) {
+               var classNames, i, l, elem,
+                       setClass, c, cl;
+
+               if ( jQuery.isFunction( value ) ) {
+                       return this.each(function( j ) {
+                               jQuery( this ).addClass( value.call(this, j, this.className) );
+                       });
+               }
+
+               if ( value && typeof value === "string" ) {
+                       classNames = value.split( rspace );
+
+                       for ( i = 0, l = this.length; i < l; i++ ) {
+                               elem = this[ i ];
+
+                               if ( elem.nodeType === 1 ) {
+                                       if ( !elem.className && classNames.length === 1 ) {
+                                               elem.className = value;
+
+                                       } else {
+                                               setClass = " " + elem.className + " ";
+
+                                               for ( c = 0, cl = classNames.length; c < cl; c++ ) {
+                                                       if ( !~setClass.indexOf( " " + classNames[ c ] + " " ) ) {
+                                                               setClass += classNames[ c ] + " ";
+                                                       }
+                                               }
+                                               elem.className = jQuery.trim( setClass );
+                                       }
+                               }
+                       }
+               }
+
+               return this;
+       },
+
+       removeClass: function( value ) {
+               var classNames, i, l, elem, className, c, cl;
+
+               if ( jQuery.isFunction( value ) ) {
+                       return this.each(function( j ) {
+                               jQuery( this ).removeClass( value.call(this, j, this.className) );
+                       });
+               }
+
+               if ( (value && typeof value === "string") || value === undefined ) {
+                       classNames = ( value || "" ).split( rspace );
+
+                       for ( i = 0, l = this.length; i < l; i++ ) {
+                               elem = this[ i ];
+
+                               if ( elem.nodeType === 1 && elem.className ) {
+                                       if ( value ) {
+                                               className = (" " + elem.className + " ").replace( rclass, " " );
+                                               for ( c = 0, cl = classNames.length; c < cl; c++ ) {
+                                                       className = className.replace(" " + classNames[ c ] + " ", " ");
+                                               }
+                                               elem.className = jQuery.trim( className );
+
+                                       } else {
+                                               elem.className = "";
+                                       }
+                               }
+                       }
+               }
+
+               return this;
+       },
+
+       toggleClass: function( value, stateVal ) {
+               var type = typeof value,
+                       isBool = typeof stateVal === "boolean";
+
+               if ( jQuery.isFunction( value ) ) {
+                       return this.each(function( i ) {
+                               jQuery( this ).toggleClass( value.call(this, i, this.className, stateVal), stateVal );
+                       });
+               }
+
+               return this.each(function() {
+                       if ( type === "string" ) {
+                               // toggle individual class names
+                               var className,
+                                       i = 0,
+                                       self = jQuery( this ),
+                                       state = stateVal,
+                                       classNames = value.split( rspace );
+
+                               while ( (className = classNames[ i++ ]) ) {
+                                       // check each className given, space seperated list
+                                       state = isBool ? state : !self.hasClass( className );
+                                       self[ state ? "addClass" : "removeClass" ]( className );
+                               }
+
+                       } else if ( type === "undefined" || type === "boolean" ) {
+                               if ( this.className ) {
+                                       // store className if set
+                                       jQuery._data( this, "__className__", this.className );
+                               }
+
+                               // toggle whole className
+                               this.className = this.className || value === false ? "" : jQuery._data( this, "__className__" ) || "";
+                       }
+               });
+       },
+
+       hasClass: function( selector ) {
+               var className = " " + selector + " ",
+                       i = 0,
+                       l = this.length;
+               for ( ; i < l; i++ ) {
+                       if ( this[i].nodeType === 1 && (" " + this[i].className + " ").replace(rclass, " ").indexOf( className ) > -1 ) {
+                               return true;
+                       }
+               }
+
+               return false;
+       },
+
+       val: function( value ) {
+               var hooks, ret, isFunction,
+                       elem = this[0];
+
+               if ( !arguments.length ) {
+                       if ( elem ) {
+                               hooks = jQuery.valHooks[ elem.nodeName.toLowerCase() ] || jQuery.valHooks[ elem.type ];
+
+                               if ( hooks && "get" in hooks && (ret = hooks.get( elem, "value" )) !== undefined ) {
+                                       return ret;
+                               }
+
+                               ret = elem.value;
+
+                               return typeof ret === "string" ?
+                                       // handle most common string cases
+                                       ret.replace(rreturn, "") :
+                                       // handle cases where value is null/undef or number
+                                       ret == null ? "" : ret;
+                       }
+
+                       return undefined;
+               }
+
+               isFunction = jQuery.isFunction( value );
+
+               return this.each(function( i ) {
+                       var self = jQuery(this), val;
+
+                       if ( this.nodeType !== 1 ) {
+                               return;
+                       }
+
+                       if ( isFunction ) {
+                               val = value.call( this, i, self.val() );
+                       } else {
+                               val = value;
+                       }
+
+                       // Treat null/undefined as ""; convert numbers to string
+                       if ( val == null ) {
+                               val = "";
+                       } else if ( typeof val === "number" ) {
+                               val += "";
+                       } else if ( jQuery.isArray( val ) ) {
+                               val = jQuery.map(val, function ( value ) {
+                                       return value == null ? "" : value + "";
+                               });
+                       }
+
+                       hooks = jQuery.valHooks[ this.nodeName.toLowerCase() ] || jQuery.valHooks[ this.type ];
+
+                       // If set returns undefined, fall back to normal setting
+                       if ( !hooks || !("set" in hooks) || hooks.set( this, val, "value" ) === undefined ) {
+                               this.value = val;
+                       }
+               });
+       }
+});
+
+jQuery.extend({
+       valHooks: {
+               option: {
+                       get: function( elem ) {
+                               // attributes.value is undefined in Blackberry 4.7 but
+                               // uses .value. See #6932
+                               var val = elem.attributes.value;
+                               return !val || val.specified ? elem.value : elem.text;
+                       }
+               },
+               select: {
+                       get: function( elem ) {
+                               var value, i, max, option,
+                                       index = elem.selectedIndex,
+                                       values = [],
+                                       options = elem.options,
+                                       one = elem.type === "select-one";
+
+                               // Nothing was selected
+                               if ( index < 0 ) {
+                                       return null;
+                               }
+
+                               // Loop through all the selected options
+                               i = one ? index : 0;
+                               max = one ? index + 1 : options.length;
+                               for ( ; i < max; i++ ) {
+                                       option = options[ i ];
+
+                                       // Don't return options that are disabled or in a disabled optgroup
+                                       if ( option.selected && (jQuery.support.optDisabled ? !option.disabled : option.getAttribute("disabled") === null) &&
+                                                       (!option.parentNode.disabled || !jQuery.nodeName( option.parentNode, "optgroup" )) ) {
+
+                                               // Get the specific value for the option
+                                               value = jQuery( option ).val();
+
+                                               // We don't need an array for one selects
+                                               if ( one ) {
+                                                       return value;
+                                               }
+
+                                               // Multi-Selects return an array
+                                               values.push( value );
+                                       }
+                               }
+
+                               // Fixes Bug #2551 -- select.val() broken in IE after form.reset()
+                               if ( one && !values.length && options.length ) {
+                                       return jQuery( options[ index ] ).val();
+                               }
+
+                               return values;
+                       },
+
+                       set: function( elem, value ) {
+                               var values = jQuery.makeArray( value );
+
+                               jQuery(elem).find("option").each(function() {
+                                       this.selected = jQuery.inArray( jQuery(this).val(), values ) >= 0;
+                               });
+
+                               if ( !values.length ) {
+                                       elem.selectedIndex = -1;
+                               }
+                               return values;
+                       }
+               }
+       },
+
+       attrFn: {
+               val: true,
+               css: true,
+               html: true,
+               text: true,
+               data: true,
+               width: true,
+               height: true,
+               offset: true
+       },
+
+       attr: function( elem, name, value, pass ) {
+               var ret, hooks, notxml,
+                       nType = elem.nodeType;
+
+               // don't get/set attributes on text, comment and attribute nodes
+               if ( !elem || nType === 3 || nType === 8 || nType === 2 ) {
+                       return undefined;
+               }
+
+               if ( pass && name in jQuery.attrFn ) {
+                       return jQuery( elem )[ name ]( value );
+               }
+
+               // Fallback to prop when attributes are not supported
+               if ( !("getAttribute" in elem) ) {
+                       return jQuery.prop( elem, name, value );
+               }
+
+               notxml = nType !== 1 || !jQuery.isXMLDoc( elem );
+
+               // All attributes are lowercase
+               // Grab necessary hook if one is defined
+               if ( notxml ) {
+                       name = name.toLowerCase();
+                       hooks = jQuery.attrHooks[ name ] || ( rboolean.test( name ) ? boolHook : nodeHook );
+               }
+
+               if ( value !== undefined ) {
+
+                       if ( value === null ) {
+                               jQuery.removeAttr( elem, name );
+                               return undefined;
+
+                       } else if ( hooks && "set" in hooks && notxml && (ret = hooks.set( elem, value, name )) !== undefined ) {
+                               return ret;
+
+                       } else {
+                               elem.setAttribute( name, "" + value );
+                               return value;
+                       }
+
+               } else if ( hooks && "get" in hooks && notxml && (ret = hooks.get( elem, name )) !== null ) {
+                       return ret;
+
+               } else {
+
+                       ret = elem.getAttribute( name );
+
+                       // Non-existent attributes return null, we normalize to undefined
+                       return ret === null ?
+                               undefined :
+                               ret;
+               }
+       },
+
+       removeAttr: function( elem, value ) {
+               var propName, attrNames, name, l,
+                       i = 0;
+
+               if ( elem.nodeType === 1 ) {
+                       attrNames = ( value || "" ).split( rspace );
+                       l = attrNames.length;
+
+                       for ( ; i < l; i++ ) {
+                               name = attrNames[ i ].toLowerCase();
+                               propName = jQuery.propFix[ name ] || name;
+
+                               // See #9699 for explanation of this approach (setting first, then removal)
+                               jQuery.attr( elem, name, "" );
+                               elem.removeAttribute( getSetAttribute ? name : propName );
+
+                               // Set corresponding property to false for boolean attributes
+                               if ( rboolean.test( name ) && propName in elem ) {
+                                       elem[ propName ] = false;
+                               }
+                       }
+               }
+       },
+
+       attrHooks: {
+               type: {
+                       set: function( elem, value ) {
+                               // We can't allow the type property to be changed (since it causes problems in IE)
+                               if ( rtype.test( elem.nodeName ) && elem.parentNode ) {
+                                       jQuery.error( "type property can't be changed" );
+                               } else if ( !jQuery.support.radioValue && value === "radio" && jQuery.nodeName(elem, "input") ) {
+                                       // Setting the type on a radio button after the value resets the value in IE6-9
+                                       // Reset value to it's default in case type is set after value
+                                       // This is for element creation
+                                       var val = elem.value;
+                                       elem.setAttribute( "type", value );
+                                       if ( val ) {
+                                               elem.value = val;
+                                       }
+                                       return value;
+                               }
+                       }
+               },
+               // Use the value property for back compat
+               // Use the nodeHook for button elements in IE6/7 (#1954)
+               value: {
+                       get: function( elem, name ) {
+                               if ( nodeHook && jQuery.nodeName( elem, "button" ) ) {
+                                       return nodeHook.get( elem, name );
+                               }
+                               return name in elem ?
+                                       elem.value :
+                                       null;
+                       },
+                       set: function( elem, value, name ) {
+                               if ( nodeHook && jQuery.nodeName( elem, "button" ) ) {
+                                       return nodeHook.set( elem, value, name );
+                               }
+                               // Does not return so that setAttribute is also used
+                               elem.value = value;
+                       }
+               }
+       },
+
+       propFix: {
+               tabindex: "tabIndex",
+               readonly: "readOnly",
+               "for": "htmlFor",
+               "class": "className",
+               maxlength: "maxLength",
+               cellspacing: "cellSpacing",
+               cellpadding: "cellPadding",
+               rowspan: "rowSpan",
+               colspan: "colSpan",
+               usemap: "useMap",
+               frameborder: "frameBorder",
+               contenteditable: "contentEditable"
+       },
+
+       prop: function( elem, name, value ) {
+               var ret, hooks, notxml,
+                       nType = elem.nodeType;
+
+               // don't get/set properties on text, comment and attribute nodes
+               if ( !elem || nType === 3 || nType === 8 || nType === 2 ) {
+                       return undefined;
+               }
+
+               notxml = nType !== 1 || !jQuery.isXMLDoc( elem );
+
+               if ( notxml ) {
+                       // Fix name and attach hooks
+                       name = jQuery.propFix[ name ] || name;
+                       hooks = jQuery.propHooks[ name ];
+               }
+
+               if ( value !== undefined ) {
+                       if ( hooks && "set" in hooks && (ret = hooks.set( elem, value, name )) !== undefined ) {
+                               return ret;
+
+                       } else {
+                               return ( elem[ name ] = value );
+                       }
+
+               } else {
+                       if ( hooks && "get" in hooks && (ret = hooks.get( elem, name )) !== null ) {
+                               return ret;
+
+                       } else {
+                               return elem[ name ];
+                       }
+               }
+       },
+
+       propHooks: {
+               tabIndex: {
+                       get: function( elem ) {
+                               // elem.tabIndex doesn't always return the correct value when it hasn't been explicitly set
+                               // http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/
+                               var attributeNode = elem.getAttributeNode("tabindex");
+
+                               return attributeNode && attributeNode.specified ?
+                                       parseInt( attributeNode.value, 10 ) :
+                                       rfocusable.test( elem.nodeName ) || rclickable.test( elem.nodeName ) && elem.href ?
+                                               0 :
+                                               undefined;
+                       }
+               }
+       }
+});
+
+// Add the tabIndex propHook to attrHooks for back-compat (different case is intentional)
+jQuery.attrHooks.tabindex = jQuery.propHooks.tabIndex;
+
+// Hook for boolean attributes
+boolHook = {
+       get: function( elem, name ) {
+               // Align boolean attributes with corresponding properties
+               // Fall back to attribute presence where some booleans are not supported
+               var attrNode,
+                       property = jQuery.prop( elem, name );
+               return property === true || typeof property !== "boolean" && ( attrNode = elem.getAttributeNode(name) ) && attrNode.nodeValue !== false ?
+                       name.toLowerCase() :
+                       undefined;
+       },
+       set: function( elem, value, name ) {
+               var propName;
+               if ( value === false ) {
+                       // Remove boolean attributes when set to false
+                       jQuery.removeAttr( elem, name );
+               } else {
+                       // value is true since we know at this point it's type boolean and not false
+                       // Set boolean attributes to the same name and set the DOM property
+                       propName = jQuery.propFix[ name ] || name;
+                       if ( propName in elem ) {
+                               // Only set the IDL specifically if it already exists on the element
+                               elem[ propName ] = true;
+                       }
+
+                       elem.setAttribute( name, name.toLowerCase() );
+               }
+               return name;
+       }
+};
+
+// IE6/7 do not support getting/setting some attributes with get/setAttribute
+if ( !getSetAttribute ) {
+
+       fixSpecified = {
+               name: true,
+               id: true
+       };
+
+       // Use this for any attribute in IE6/7
+       // This fixes almost every IE6/7 issue
+       nodeHook = jQuery.valHooks.button = {
+               get: function( elem, name ) {
+                       var ret;
+                       ret = elem.getAttributeNode( name );
+                       return ret && ( fixSpecified[ name ] ? ret.nodeValue !== "" : ret.specified ) ?
+                               ret.nodeValue :
+                               undefined;
+               },
+               set: function( elem, value, name ) {
+                       // Set the existing or create a new attribute node
+                       var ret = elem.getAttributeNode( name );
+                       if ( !ret ) {
+                               ret = document.createAttribute( name );
+                               elem.setAttributeNode( ret );
+                       }
+                       return ( ret.nodeValue = value + "" );
+               }
+       };
+
+       // Apply the nodeHook to tabindex
+       jQuery.attrHooks.tabindex.set = nodeHook.set;
+
+       // Set width and height to auto instead of 0 on empty string( Bug #8150 )
+       // This is for removals
+       jQuery.each([ "width", "height" ], function( i, name ) {
+               jQuery.attrHooks[ name ] = jQuery.extend( jQuery.attrHooks[ name ], {
+                       set: function( elem, value ) {
+                               if ( value === "" ) {
+                                       elem.setAttribute( name, "auto" );
+                                       return value;
+                               }
+                       }
+               });
+       });
+
+       // Set contenteditable to false on removals(#10429)
+       // Setting to empty string throws an error as an invalid value
+       jQuery.attrHooks.contenteditable = {
+               get: nodeHook.get,
+               set: function( elem, value, name ) {
+                       if ( value === "" ) {
+                               value = "false";
+                       }
+                       nodeHook.set( elem, value, name );
+               }
+       };
+}
+
+
+// Some attributes require a special call on IE
+if ( !jQuery.support.hrefNormalized ) {
+       jQuery.each([ "href", "src", "width", "height" ], function( i, name ) {
+               jQuery.attrHooks[ name ] = jQuery.extend( jQuery.attrHooks[ name ], {
+                       get: function( elem ) {
+                               var ret = elem.getAttribute( name, 2 );
+                               return ret === null ? undefined : ret;
+                       }
+               });
+       });
+}
+
+if ( !jQuery.support.style ) {
+       jQuery.attrHooks.style = {
+               get: function( elem ) {
+                       // Return undefined in the case of empty string
+                       // Normalize to lowercase since IE uppercases css property names
+                       return elem.style.cssText.toLowerCase() || undefined;
+               },
+               set: function( elem, value ) {
+                       return ( elem.style.cssText = "" + value );
+               }
+       };
+}
+
+// Safari mis-reports the default selected property of an option
+// Accessing the parent's selectedIndex property fixes it
+if ( !jQuery.support.optSelected ) {
+       jQuery.propHooks.selected = jQuery.extend( jQuery.propHooks.selected, {
+               get: function( elem ) {
+                       var parent = elem.parentNode;
+
+                       if ( parent ) {
+                               parent.selectedIndex;
+
+                               // Make sure that it also works with optgroups, see #5701
+                               if ( parent.parentNode ) {
+                                       parent.parentNode.selectedIndex;
+                               }
+                       }
+                       return null;
+               }
+       });
+}
+
+// IE6/7 call enctype encoding
+if ( !jQuery.support.enctype ) {
+       jQuery.propFix.enctype = "encoding";
+}
+
+// Radios and checkboxes getter/setter
+if ( !jQuery.support.checkOn ) {
+       jQuery.each([ "radio", "checkbox" ], function() {
+               jQuery.valHooks[ this ] = {
+                       get: function( elem ) {
+                               // Handle the case where in Webkit "" is returned instead of "on" if a value isn't specified
+                               return elem.getAttribute("value") === null ? "on" : elem.value;
+                       }
+               };
+       });
+}
+jQuery.each([ "radio", "checkbox" ], function() {
+       jQuery.valHooks[ this ] = jQuery.extend( jQuery.valHooks[ this ], {
+               set: function( elem, value ) {
+                       if ( jQuery.isArray( value ) ) {
+                               return ( elem.checked = jQuery.inArray( jQuery(elem).val(), value ) >= 0 );
+                       }
+               }
+       });
+});
+
+
+
+
+var rnamespaces = /\.(.*)$/,
+       rformElems = /^(?:textarea|input|select)$/i,
+       rperiod = /\./g,
+       rspaces = / /g,
+       rescape = /[^\w\s.|`]/g,
+       rtypenamespace = /^([^\.]*)?(?:\.(.+))?$/,
+       rhoverHack = /\bhover(\.\S+)?/,
+       rkeyEvent = /^key/,
+       rmouseEvent = /^(?:mouse|contextmenu)|click/,
+       rquickIs = /^(\w*)(?:#([\w\-]+))?(?:\.([\w\-]+))?$/,
+       quickParse = function( selector ) {
+               var quick = rquickIs.exec( selector );
+               if ( quick ) {
+                       //   0  1    2   3
+                       // [ _, tag, id, class ]
+                       quick[1] = ( quick[1] || "" ).toLowerCase();
+                       quick[3] = quick[3] && new RegExp( "(?:^|\\s)" + quick[3] + "(?:\\s|$)" );
+               }
+               return quick;
+       },
+       quickIs = function( elem, m ) {
+               return (
+                       (!m[1] || elem.nodeName.toLowerCase() === m[1]) &&
+                       (!m[2] || elem.id === m[2]) &&
+                       (!m[3] || m[3].test( elem.className ))
+               );
+       },
+       hoverHack = function( events ) {
+               return jQuery.event.special.hover ? events : events.replace( rhoverHack, "mouseenter$1 mouseleave$1" );
+       };
+
+/*
+ * Helper functions for managing events -- not part of the public interface.
+ * Props to Dean Edwards' addEvent library for many of the ideas.
+ */
+jQuery.event = {
+
+       add: function( elem, types, handler, data, selector ) {
+
+               var elemData, eventHandle, events,
+                       t, tns, type, namespaces, handleObj,
+                       handleObjIn, quick, handlers, special;
+
+               // Don't attach events to noData or text/comment nodes (allow plain objects tho)
+               if ( elem.nodeType === 3 || elem.nodeType === 8 || !types || !handler || !(elemData = jQuery._data( elem )) ) {
+                       return;
+               }
+
+               // Caller can pass in an object of custom data in lieu of the handler
+               if ( handler.handler ) {
+                       handleObjIn = handler;
+                       handler = handleObjIn.handler;
+               }
+
+               // Make sure that the handler has a unique ID, used to find/remove it later
+               if ( !handler.guid ) {
+                       handler.guid = jQuery.guid++;
+               }
+
+               // Init the element's event structure and main handler, if this is the first
+               events = elemData.events;
+               if ( !events ) {
+                       elemData.events = events = {};
+               }
+               eventHandle = elemData.handle;
+               if ( !eventHandle ) {
+                       elemData.handle = eventHandle = function( e ) {
+                               // Discard the second event of a jQuery.event.trigger() and
+                               // when an event is called after a page has unloaded
+                               return typeof jQuery !== "undefined" && (!e || jQuery.event.triggered !== e.type) ?
+                                       jQuery.event.dispatch.apply( eventHandle.elem, arguments ) :
+                                       undefined;
+                       };
+                       // Add elem as a property of the handle fn to prevent a memory leak with IE non-native events
+                       eventHandle.elem = elem;
+               }
+
+               // Handle multiple events separated by a space
+               // jQuery(...).bind("mouseover mouseout", fn);
+               types = hoverHack(types).split( " " );
+               for ( t = 0; t < types.length; t++ ) {
+
+                       tns = rtypenamespace.exec( types[t] ) || [];
+                       type = tns[1];
+                       namespaces = ( tns[2] || "" ).split( "." ).sort();
+
+                       // If event changes its type, use the special event handlers for the changed type
+                       special = jQuery.event.special[ type ] || {};
+
+                       // If selector defined, determine special event api type, otherwise given type
+                       type = ( selector ? special.delegateType : special.bindType ) || type;
+
+                       // Update special based on newly reset type
+                       special = jQuery.event.special[ type ] || {};
+
+                       // handleObj is passed to all event handlers
+                       handleObj = jQuery.extend({
+                               type: type,
+                               origType: tns[1],
+                               data: data,
+                               handler: handler,
+                               guid: handler.guid,
+                               selector: selector,
+                               namespace: namespaces.join(".")
+                       }, handleObjIn );
+
+                       // Delegated event; pre-analyze selector so it's processed quickly on event dispatch
+                       if ( selector ) {
+                               handleObj.quick = quickParse( selector );
+                               if ( !handleObj.quick && jQuery.expr.match.POS.test( selector ) ) {
+                                       handleObj.isPositional = true;
+                               }
+                       }
+
+                       // Init the event handler queue if we're the first
+                       handlers = events[ type ];
+                       if ( !handlers ) {
+                               handlers = events[ type ] = [];
+                               handlers.delegateCount = 0;
+
+                               // Only use addEventListener/attachEvent if the special events handler returns false
+                               if ( !special.setup || special.setup.call( elem, data, namespaces, eventHandle ) === false ) {
+                                       // Bind the global event handler to the element
+                                       if ( elem.addEventListener ) {
+                                               elem.addEventListener( type, eventHandle, false );
+
+                                       } else if ( elem.attachEvent ) {
+                                               elem.attachEvent( "on" + type, eventHandle );
+                                       }
+                               }
+                       }
+
+                       if ( special.add ) {
+                               special.add.call( elem, handleObj );
+
+                               if ( !handleObj.handler.guid ) {
+                                       handleObj.handler.guid = handler.guid;
+                               }
+                       }
+
+                       // Add to the element's handler list, delegates in front
+                       if ( selector ) {
+                               handlers.splice( handlers.delegateCount++, 0, handleObj );
+                       } else {
+                               handlers.push( handleObj );
+                       }
+
+                       // Keep track of which events have ever been used, for event optimization
+                       jQuery.event.global[ type ] = true;
+               }
+
+               // Nullify elem to prevent memory leaks in IE
+               elem = null;
+       },
+
+       global: {},
+
+       // Detach an event or set of events from an element
+       remove: function( elem, types, handler, selector ) {
+
+               var elemData = jQuery.hasData( elem ) && jQuery._data( elem ),
+                       t, tns, type, namespaces, origCount,
+                       j, events, special, handle, eventType, handleObj;
+
+               if ( !elemData || !(events = elemData.events) ) {
+                       return;
+               }
+
+               // Once for each type.namespace in types; type may be omitted
+               types = hoverHack( types || "" ).split(" ");
+               for ( t = 0; t < types.length; t++ ) {
+                       tns = rtypenamespace.exec( types[t] ) || [];
+                       type = tns[1];
+                       namespaces = tns[2];
+
+                       // Unbind all events (on this namespace, if provided) for the element
+                       if ( !type ) {
+                               namespaces = namespaces? "." + namespaces : "";
+                               for ( j in events ) {
+                                       jQuery.event.remove( elem, j + namespaces, handler, selector );
+                               }
+                               return;
+                       }
+
+                       special = jQuery.event.special[ type ] || {};
+                       type = ( selector? special.delegateType : special.bindType ) || type;
+                       eventType = events[ type ] || [];
+                       origCount = eventType.length;
+                       namespaces = namespaces ? new RegExp("(^|\\.)" + namespaces.split(".").sort().join("\\.(?:.*\\.)?") + "(\\.|$)") : null;
+
+                       // Only need to loop for special events or selective removal
+                       if ( handler || namespaces || selector || special.remove ) {
+                               for ( j = 0; j < eventType.length; j++ ) {
+                                       handleObj = eventType[ j ];
+
+                                       if ( !handler || handler.guid === handleObj.guid ) {
+                                               if ( !namespaces || namespaces.test( handleObj.namespace ) ) {
+                                                       if ( !selector || selector === handleObj.selector || selector === "**" && handleObj.selector ) {
+                                                               eventType.splice( j--, 1 );
+
+                                                               if ( handleObj.selector ) {
+                                                                       eventType.delegateCount--;
+                                                               }
+                                                               if ( special.remove ) {
+                                                                       special.remove.call( elem, handleObj );
+                                                               }
+                                                       }
+                                               }
+                                       }
+                               }
+                       } else {
+                               // Removing all events
+                               eventType.length = 0;
+                       }
+
+                       // Remove generic event handler if we removed something and no more handlers exist
+                       // (avoids potential for endless recursion during removal of special event handlers)
+                       if ( eventType.length === 0 && origCount !== eventType.length ) {
+                               if ( !special.teardown || special.teardown.call( elem, namespaces ) === false ) {
+                                       jQuery.removeEvent( elem, type, elemData.handle );
+                               }
+
+                               delete events[ type ];
+                       }
+               }
+
+               // Remove the expando if it's no longer used
+               if ( jQuery.isEmptyObject( events ) ) {
+                       handle = elemData.handle;
+                       if ( handle ) {
+                               handle.elem = null;
+                       }
+
+                       // removeData also checks for emptiness and clears the expando if empty
+                       // so use it instead of delete
+                       jQuery.removeData( elem, [ "events", "handle" ], true );
+               }
+       },
+
+       // Events that are safe to short-circuit if no handlers are attached.
+       // Native DOM events should not be added, they may have inline handlers.
+       customEvent: {
+               "getData": true,
+               "setData": true,
+               "changeData": true
+       },
+
+       trigger: function( event, data, elem, onlyHandlers ) {
+               // Don't do events on text and comment nodes
+               if ( elem && (elem.nodeType === 3 || elem.nodeType === 8) ) {
+                       return;
+               }
+
+               // Event object or event type
+               var type = event.type || event,
+                       namespaces = [],
+                       cache, exclusive, i, cur, old, ontype, special, handle, eventPath, bubbleType;
+
+               if ( type.indexOf( "!" ) >= 0 ) {
+                       // Exclusive events trigger only for the exact event (no namespaces)
+                       type = type.slice(0, -1);
+                       exclusive = true;
+               }
+
+               if ( type.indexOf( "." ) >= 0 ) {
+                       // Namespaced trigger; create a regexp to match event type in handle()
+                       namespaces = type.split(".");
+                       type = namespaces.shift();
+                       namespaces.sort();
+               }
+
+               if ( (!elem || jQuery.event.customEvent[ type ]) && !jQuery.event.global[ type ] ) {
+                       // No jQuery handlers for this event type, and it can't have inline handlers
+                       return;
+               }
+
+               // Caller can pass in an Event, Object, or just an event type string
+               event = typeof event === "object" ?
+                       // jQuery.Event object
+                       event[ jQuery.expando ] ? event :
+                       // Object literal
+                       new jQuery.Event( type, event ) :
+                       // Just the event type (string)
+                       new jQuery.Event( type );
+
+               event.type = type;
+               event.isTrigger = true;
+               event.exclusive = exclusive;
+               event.namespace = namespaces.join( "." );
+               event.namespace_re = event.namespace? new RegExp("(^|\\.)" + namespaces.join("\\.(?:.*\\.)?") + "(\\.|$)") : null;
+               ontype = type.indexOf( ":" ) < 0 ? "on" + type : "";
+
+               // triggerHandler() and global events don't bubble or run the default action
+               if ( onlyHandlers || !elem ) {
+                       event.preventDefault();
+               }
+
+               // Handle a global trigger
+               if ( !elem ) {
+
+                       // TODO: Stop taunting the data cache; remove global events and always attach to document
+                       cache = jQuery.cache;
+                       for ( i in cache ) {
+                               if ( cache[ i ].events && cache[ i ].events[ type ] ) {
+                                       jQuery.event.trigger( event, data, cache[ i ].handle.elem, true );
+                               }
+                       }
+                       return;
+               }
+
+               // Clean up the event in case it is being reused
+               event.result = undefined;
+               if ( !event.target ) {
+                       event.target = elem;
+               }
+
+               // Clone any incoming data and prepend the event, creating the handler arg list
+               data = data != null ? jQuery.makeArray( data ) : [];
+               data.unshift( event );
+
+               // Allow special events to draw outside the lines
+               special = jQuery.event.special[ type ] || {};
+               if ( special.trigger && special.trigger.apply( elem, data ) === false ) {
+                       return;
+               }
+
+               // Determine event propagation path in advance, per W3C events spec (#9951)
+               // Bubble up to document, then to window; watch for a global ownerDocument var (#9724)
+               eventPath = [[ elem, special.bindType || type ]];
+               if ( !onlyHandlers && !special.noBubble && !jQuery.isWindow( elem ) ) {
+
+                       bubbleType = special.delegateType || type;
+                       old = null;
+                       for ( cur = elem.parentNode; cur; cur = cur.parentNode ) {
+                               eventPath.push([ cur, bubbleType ]);
+                               old = cur;
+                       }
+
+                       // Only add window if we got to document (e.g., not plain obj or detached DOM)
+                       if ( old && old === elem.ownerDocument ) {
+                               eventPath.push([ old.defaultView || old.parentWindow || window, bubbleType ]);
+                       }
+               }
+
+               // Fire handlers on the event path
+               for ( i = 0; i < eventPath.length; i++ ) {
+
+                       cur = eventPath[i][0];
+                       event.type = eventPath[i][1];
+
+                       handle = ( jQuery._data( cur, "events" ) || {} )[ event.type ] && jQuery._data( cur, "handle" );
+                       if ( handle ) {
+                               handle.apply( cur, data );
+                       }
+                       handle = ontype && cur[ ontype ];
+                       if ( handle && jQuery.acceptData( cur ) ) {
+                               handle.apply( cur, data );
+                       }
+
+                       if ( event.isPropagationStopped() ) {
+                               break;
+                       }
+               }
+               event.type = type;
+
+               // If nobody prevented the default action, do it now
+               if ( !event.isDefaultPrevented() ) {
+
+                       if ( (!special._default || special._default.apply( elem.ownerDocument, data ) === false) &&
+                               !(type === "click" && jQuery.nodeName( elem, "a" )) && jQuery.acceptData( elem ) ) {
+
+                               // Call a native DOM method on the target with the same name name as the event.
+                               // Can't use an .isFunction() check here because IE6/7 fails that test.
+                               // Don't do default actions on window, that's where global variables be (#6170)
+                               // IE<9 dies on focus/blur to hidden element (#1486)
+                               if ( ontype && elem[ type ] && ((type !== "focus" && type !== "blur") || event.target.offsetWidth !== 0) && !jQuery.isWindow( elem ) ) {
+
+                                       // Don't re-trigger an onFOO event when we call its FOO() method
+                                       old = elem[ ontype ];
+
+                                       if ( old ) {
+                                               elem[ ontype ] = null;
+                                       }
+
+                                       // Prevent re-triggering of the same event, since we already bubbled it above
+                                       jQuery.event.triggered = type;
+                                       elem[ type ]();
+                                       jQuery.event.triggered = undefined;
+
+                                       if ( old ) {
+                                               elem[ ontype ] = old;
+                                       }
+                               }
+                       }
+               }
+
+               return event.result;
+       },
+
+       dispatch: function( event ) {
+
+               // Make a writable jQuery.Event from the native event object
+               event = jQuery.event.fix( event || window.event );
+
+               var handlers = ( (jQuery._data( this, "events" ) || {} )[ event.type ] || []),
+                       delegateCount = handlers.delegateCount,
+                       args = [].slice.call( arguments, 0 ),
+                       run_all = !event.exclusive && !event.namespace,
+                       specialHandle = ( jQuery.event.special[ event.type ] || {} ).handle,
+                       handlerQueue = [],
+                       i, j, cur, ret, selMatch, matched, matches, handleObj, sel, hit, related;
+
+               // Use the fix-ed jQuery.Event rather than the (read-only) native event
+               args[0] = event;
+               event.delegateTarget = this;
+
+               // Determine handlers that should run if there are delegated events
+               // Avoid disabled elements in IE (#6911) and non-left-click bubbling in Firefox (#3861)
+               if ( delegateCount && !event.target.disabled && !(event.button && event.type === "click") ) {
+
+                       for ( cur = event.target; cur != this; cur = cur.parentNode || this ) {
+                               selMatch = {};
+                               matches = [];
+                               for ( i = 0; i < delegateCount; i++ ) {
+                                       handleObj = handlers[ i ];
+                                       sel = handleObj.selector;
+                                       hit = selMatch[ sel ];
+
+                                       if ( handleObj.isPositional ) {
+                                               // Since .is() does not work for positionals; see http://jsfiddle.net/eJ4yd/3/
+                                               hit = ( hit || (selMatch[ sel ] = jQuery( sel )) ).index( cur ) >= 0;
+                                       } else if ( hit === undefined ) {
+                                               hit = selMatch[ sel ] = ( handleObj.quick ? quickIs( cur, handleObj.quick ) : jQuery( cur ).is( sel ) );
+                                       }
+                                       if ( hit ) {
+                                               matches.push( handleObj );
+                                       }
+                               }
+                               if ( matches.length ) {
+                                       handlerQueue.push({ elem: cur, matches: matches });
+                               }
+                       }
+               }
+
+               // Add the remaining (directly-bound) handlers
+               if ( handlers.length > delegateCount ) {
+                       handlerQueue.push({ elem: this, matches: handlers.slice( delegateCount ) });
+               }
+
+               // Run delegates first; they may want to stop propagation beneath us
+               for ( i = 0; i < handlerQueue.length && !event.isPropagationStopped(); i++ ) {
+                       matched = handlerQueue[ i ];
+                       event.currentTarget = matched.elem;
+
+                       for ( j = 0; j < matched.matches.length && !event.isImmediatePropagationStopped(); j++ ) {
+                               handleObj = matched.matches[ j ];
+
+                               // Triggered event must either 1) be non-exclusive and have no namespace, or
+                               // 2) have namespace(s) a subset or equal to those in the bound event (both can have no namespace).
+                               if ( run_all || (!event.namespace && !handleObj.namespace) || event.namespace_re && event.namespace_re.test( handleObj.namespace ) ) {
+
+                                       event.data = handleObj.data;
+                                       event.handleObj = handleObj;
+
+                                       ret = ( specialHandle || handleObj.handler ).apply( matched.elem, args );
+
+                                       if ( ret !== undefined ) {
+                                               event.result = ret;
+                                               if ( ret === false ) {
+                                                       event.preventDefault();
+                                                       event.stopPropagation();
+                                               }
+                                       }
+                               }
+                       }
+               }
+
+               return event.result;
+       },
+
+       // Includes some event props shared by KeyEvent and MouseEvent
+       // *** attrChange attrName relatedNode srcElement  are not normalized, non-W3C, deprecated, will be removed in 1.8 ***
+       props: "attrChange attrName relatedNode srcElement altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "),
+
+       fixHooks: {},
+
+       keyHooks: {
+               props: "char charCode key keyCode".split(" "),
+               filter: function( event, original ) {
+
+                       // Add which for key events
+                       if ( event.which == null ) {
+                               event.which = original.charCode != null ? original.charCode : original.keyCode;
+                       }
+
+                       return event;
+               }
+       },
+
+       mouseHooks: {
+               props: "button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement wheelDelta".split(" "),
+               filter: function( event, original ) {
+                       var eventDoc, doc, body,
+                               button = original.button,
+                               fromElement = original.fromElement;
+
+                       // Calculate pageX/Y if missing and clientX/Y available
+                       if ( event.pageX == null && original.clientX != null ) {
+                               eventDoc = event.target.ownerDocument || document;
+                               doc = eventDoc.documentElement;
+                               body = eventDoc.body;
+
+                               event.pageX = original.clientX + ( doc && doc.scrollLeft || body && body.scrollLeft || 0 ) - ( doc && doc.clientLeft || body && body.clientLeft || 0 );
+                               event.pageY = original.clientY + ( doc && doc.scrollTop  || body && body.scrollTop  || 0 ) - ( doc && doc.clientTop  || body && body.clientTop  || 0 );
+                       }
+
+                       // Add relatedTarget, if necessary
+                       if ( !event.relatedTarget && fromElement ) {
+                               event.relatedTarget = fromElement === event.target ? original.toElement : fromElement;
+                       }
+
+                       // Add which for click: 1 === left; 2 === middle; 3 === right
+                       // Note: button is not normalized, so don't use it
+                       if ( !event.which && button !== undefined ) {
+                               event.which = ( button & 1 ? 1 : ( button & 2 ? 3 : ( button & 4 ? 2 : 0 ) ) );
+                       }
+
+                       return event;
+               }
+       },
+
+       fix: function( event ) {
+               if ( event[ jQuery.expando ] ) {
+                       return event;
+               }
+
+               // Create a writable copy of the event object and normalize some properties
+               var i, prop,
+                       originalEvent = event,
+                       fixHook = jQuery.event.fixHooks[ event.type ] || {},
+                       copy = fixHook.props ? this.props.concat( fixHook.props ) : this.props;
+
+               event = jQuery.Event( originalEvent );
+
+               for ( i = copy.length; i; ) {
+                       prop = copy[ --i ];
+                       event[ prop ] = originalEvent[ prop ];
+               }
+
+               // Fix target property, if necessary (#1925, IE 6/7/8 & Safari2)
+               if ( !event.target ) {
+                       event.target = originalEvent.srcElement || document;
+               }
+
+               // Target should not be a text node (#504, Safari)
+               if ( event.target.nodeType === 3 ) {
+                       event.target = event.target.parentNode;
+               }
+
+               // For mouse/key events; add metaKey if it's not there (#3368, IE6/7/8)
+               if ( event.metaKey === undefined ) {
+                       event.metaKey = event.ctrlKey;
+               }
+
+               return fixHook.filter? fixHook.filter( event, originalEvent ) : event;
+       },
+
+       special: {
+               ready: {
+                       // Make sure the ready event is setup
+                       setup: jQuery.bindReady
+               },
+
+               focus: {
+                       delegateType: "focusin",
+                       noBubble: true
+               },
+               blur: {
+                       delegateType: "focusout",
+                       noBubble: true
+               },
+
+               beforeunload: {
+                       setup: function( data, namespaces, eventHandle ) {
+                               // We only want to do this special case on windows
+                               if ( jQuery.isWindow( this ) ) {
+                                       this.onbeforeunload = eventHandle;
+                               }
+                       },
+
+                       teardown: function( namespaces, eventHandle ) {
+                               if ( this.onbeforeunload === eventHandle ) {
+                                       this.onbeforeunload = null;
+                               }
+                       }
+               }
+       },
+
+       simulate: function( type, elem, event, bubble ) {
+               // Piggyback on a donor event to simulate a different one.
+               // Fake originalEvent to avoid donor's stopPropagation, but if the
+               // simulated event prevents default then we do the same on the donor.
+               var e = jQuery.extend(
+                       new jQuery.Event(),
+                       event,
+                       { type: type,
+                               isSimulated: true,
+                               originalEvent: {}
+                       }
+               );
+               if ( bubble ) {
+                       jQuery.event.trigger( e, null, elem );
+               } else {
+                       jQuery.event.dispatch.call( elem, e );
+               }
+               if ( e.isDefaultPrevented() ) {
+                       event.preventDefault();
+               }
+       }
+};
+
+// Some plugins are using, but it's undocumented/deprecated and will be removed.
+// The 1.7 special event interface should provide all the hooks needed now.
+jQuery.event.handle = jQuery.event.dispatch;
+
+jQuery.removeEvent = document.removeEventListener ?
+       function( elem, type, handle ) {
+               if ( elem.removeEventListener ) {
+                       elem.removeEventListener( type, handle, false );
+               }
+       } :
+       function( elem, type, handle ) {
+               if ( elem.detachEvent ) {
+                       elem.detachEvent( "on" + type, handle );
+               }
+       };
+
+jQuery.Event = function( src, props ) {
+       // Allow instantiation without the 'new' keyword
+       if ( !(this instanceof jQuery.Event) ) {
+               return new jQuery.Event( src, props );
+       }
+
+       // Event object
+       if ( src && src.type ) {
+               this.originalEvent = src;
+               this.type = src.type;
+
+               // Events bubbling up the document may have been marked as prevented
+               // by a handler lower down the tree; reflect the correct value.
+               this.isDefaultPrevented = ( src.defaultPrevented || src.returnValue === false ||
+                       src.getPreventDefault && src.getPreventDefault() ) ? returnTrue : returnFalse;
+
+       // Event type
+       } else {
+               this.type = src;
+       }
+
+       // Put explicitly provided properties onto the event object
+       if ( props ) {
+               jQuery.extend( this, props );
+       }
+
+       // Create a timestamp if incoming event doesn't have one
+       this.timeStamp = src && src.timeStamp || jQuery.now();
+
+       // Mark it as fixed
+       this[ jQuery.expando ] = true;
+};
+
+function returnFalse() {
+       return false;
+}
+function returnTrue() {
+       return true;
+}
+
+// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding
+// http://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html
+jQuery.Event.prototype = {
+       preventDefault: function() {
+               this.isDefaultPrevented = returnTrue;
+
+               var e = this.originalEvent;
+               if ( !e ) {
+                       return;
+               }
+
+               // if preventDefault exists run it on the original event
+               if ( e.preventDefault ) {
+                       e.preventDefault();
+
+               // otherwise set the returnValue property of the original event to false (IE)
+               } else {
+                       e.returnValue = false;
+               }
+       },
+       stopPropagation: function() {
+               this.isPropagationStopped = returnTrue;
+
+               var e = this.originalEvent;
+               if ( !e ) {
+                       return;
+               }
+               // if stopPropagation exists run it on the original event
+               if ( e.stopPropagation ) {
+                       e.stopPropagation();
+               }
+               // otherwise set the cancelBubble property of the original event to true (IE)
+               e.cancelBubble = true;
+       },
+       stopImmediatePropagation: function() {
+               this.isImmediatePropagationStopped = returnTrue;
+               this.stopPropagation();
+       },
+       isDefaultPrevented: returnFalse,
+       isPropagationStopped: returnFalse,
+       isImmediatePropagationStopped: returnFalse
+};
+
+// Create mouseenter/leave events using mouseover/out and event-time checks
+jQuery.each({
+       mouseenter: "mouseover",
+       mouseleave: "mouseout"
+}, function( orig, fix ) {
+       jQuery.event.special[ orig ] = jQuery.event.special[ fix ] = {
+               delegateType: fix,
+               bindType: fix,
+
+               handle: function( event ) {
+                       var target = this,
+                               related = event.relatedTarget,
+                               handleObj = event.handleObj,
+                               selector = handleObj.selector,
+                               oldType, ret;
+
+                       // For a real mouseover/out, always call the handler; for
+                       // mousenter/leave call the handler if related is outside the target.
+                       // NB: No relatedTarget if the mouse left/entered the browser window
+                       if ( !related || handleObj.origType === event.type || (related !== target && !jQuery.contains( target, related )) ) {
+                               oldType = event.type;
+                               event.type = handleObj.origType;
+                               ret = handleObj.handler.apply( this, arguments );
+                               event.type = oldType;
+                       }
+                       return ret;
+               }
+       };
+});
+
+// IE submit delegation
+if ( !jQuery.support.submitBubbles ) {
+
+       jQuery.event.special.submit = {
+               setup: function() {
+                       // Only need this for delegated form submit events
+                       if ( jQuery.nodeName( this, "form" ) ) {
+                               return false;
+                       }
+
+                       // Lazy-add a submit handler when a descendant form may potentially be submitted
+                       jQuery.event.add( this, "click._submit keypress._submit", function( e ) {
+                               // Node name check avoids a VML-related crash in IE (#9807)
+                               var elem = e.target,
+                                       form = jQuery.nodeName( elem, "input" ) || jQuery.nodeName( elem, "button" ) ? elem.form : undefined;
+                               if ( form && !form._submit_attached ) {
+                                       jQuery.event.add( form, "submit._submit", function( event ) {
+                                               // Form was submitted, bubble the event up the tree
+                                               if ( this.parentNode ) {
+                                                       jQuery.event.simulate( "submit", this.parentNode, event, true );
+                                               }
+                                       });
+                                       form._submit_attached = true;
+                               }
+                       });
+                       // return undefined since we don't need an event listener
+               },
+
+               teardown: function() {
+                       // Only need this for delegated form submit events
+                       if ( jQuery.nodeName( this, "form" ) ) {
+                               return false;
+                       }
+
+                       // Remove delegated handlers; cleanData eventually reaps submit handlers attached above
+                       jQuery.event.remove( this, "._submit" );
+               }
+       };
+}
+
+// IE change delegation and checkbox/radio fix
+if ( !jQuery.support.changeBubbles ) {
+
+       jQuery.event.special.change = {
+
+               setup: function() {
+
+                       if ( rformElems.test( this.nodeName ) ) {
+                               // IE doesn't fire change on a check/radio until blur; trigger it on click
+                               // after a propertychange. Eat the blur-change in special.change.handle.
+                               // This still fires onchange a second time for check/radio after blur.
+                               if ( this.type === "checkbox" || this.type === "radio" ) {
+                                       jQuery.event.add( this, "propertychange._change", function( event ) {
+                                               if ( event.originalEvent.propertyName === "checked" ) {
+                                                       this._just_changed = true;
+                                               }
+                                       });
+                                       jQuery.event.add( this, "click._change", function( event ) {
+                                               if ( this._just_changed ) {
+                                                       this._just_changed = false;
+                                                       jQuery.event.simulate( "change", this, event, true );
+                                               }
+                                       });
+                               }
+                               return false;
+                       }
+                       // Delegated event; lazy-add a change handler on descendant inputs
+                       jQuery.event.add( this, "beforeactivate._change", function( e ) {
+                               var elem = e.target;
+
+                               if ( rformElems.test( elem.nodeName ) && !elem._change_attached ) {
+                                       jQuery.event.add( elem, "change._change", function( event ) {
+                                               if ( this.parentNode && !event.isSimulated ) {
+                                                       jQuery.event.simulate( "change", this.parentNode, event, true );
+                                               }
+                                       });
+                                       elem._change_attached = true;
+                               }
+                       });
+               },
+
+               handle: function( event ) {
+                       var elem = event.target;
+
+                       // Swallow native change events from checkbox/radio, we already triggered them above
+                       if ( this !== elem || event.isSimulated || event.isTrigger || (elem.type !== "radio" && elem.type !== "checkbox") ) {
+                               return event.handleObj.handler.apply( this, arguments );
+                       }
+               },
+
+               teardown: function() {
+                       jQuery.event.remove( this, "._change" );
+
+                       return rformElems.test( this.nodeName );
+               }
+       };
+}
+
+// Create "bubbling" focus and blur events
+if ( !jQuery.support.focusinBubbles ) {
+       jQuery.each({ focus: "focusin", blur: "focusout" }, function( orig, fix ) {
+
+               // Attach a single capturing handler while someone wants focusin/focusout
+               var attaches = 0,
+                       handler = function( event ) {
+                               jQuery.event.simulate( fix, event.target, jQuery.event.fix( event ), true );
+                       };
+
+               jQuery.event.special[ fix ] = {
+                       setup: function() {
+                               if ( attaches++ === 0 ) {
+                                       document.addEventListener( orig, handler, true );
+                               }
+                       },
+                       teardown: function() {
+                               if ( --attaches === 0 ) {
+                                       document.removeEventListener( orig, handler, true );
+                               }
+                       }
+               };
+       });
+}
+
+jQuery.fn.extend({
+
+       on: function( types, selector, data, fn, /*INTERNAL*/ one ) {
+               var origFn, type;
+
+               // Types can be a map of types/handlers
+               if ( typeof types === "object" ) {
+                       // ( types-Object, selector, data )
+                       if ( typeof selector !== "string" ) {
+                               // ( types-Object, data )
+                               data = selector;
+                               selector = undefined;
+                       }
+                       for ( type in types ) {
+                               this.on( type, selector, data, types[ type ], one );
+                       }
+                       return this;
+               }
+
+               if ( data == null && fn == null ) {
+                       // ( types, fn )
+                       fn = selector;
+                       data = selector = undefined;
+               } else if ( fn == null ) {
+                       if ( typeof selector === "string" ) {
+                               // ( types, selector, fn )
+                               fn = data;
+                               data = undefined;
+                       } else {
+                               // ( types, data, fn )
+                               fn = data;
+                               data = selector;
+                               selector = undefined;
+                       }
+               }
+               if ( fn === false ) {
+                       fn = returnFalse;
+               } else if ( !fn ) {
+                       return this;
+               }
+
+               if ( one === 1 ) {
+                       origFn = fn;
+                       fn = function( event ) {
+                               // Can use an empty set, since event contains the info
+                               jQuery().off( event );
+                               return origFn.apply( this, arguments );
+                       };
+                       // Use same guid so caller can remove using origFn
+                       fn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ );
+               }
+               return this.each( function() {
+                       jQuery.event.add( this, types, fn, data, selector );
+               });
+       },
+       one: function( types, selector, data, fn ) {
+               return this.on.call( this, types, selector, data, fn, 1 );
+       },
+       off: function( types, selector, fn ) {
+               if ( types && types.preventDefault && types.handleObj ) {
+                       // ( event )  dispatched jQuery.Event
+                       var handleObj = types.handleObj;
+                       jQuery( types.delegateTarget ).off(
+                               handleObj.namespace? handleObj.type + "." + handleObj.namespace : handleObj.type,
+                               handleObj.selector,
+                               handleObj.handler
+                       );
+                       return this;
+               }
+               if ( typeof types === "object" ) {
+                       // ( types-object [, selector] )
+                       for ( var type in types ) {
+                               this.off( type, selector, types[ type ] );
+                       }
+                       return this;
+               }
+               if ( selector === false || typeof selector === "function" ) {
+                       // ( types [, fn] )
+                       fn = selector;
+                       selector = undefined;
+               }
+               if ( fn === false ) {
+                       fn = returnFalse;
+               }
+               return this.each(function() {
+                       jQuery.event.remove( this, types, fn, selector );
+               });
+       },
+
+       bind: function( types, data, fn ) {
+               return this.on( types, null, data, fn );
+       },
+       unbind: function( types, fn ) {
+               return this.off( types, null, fn );
+       },
+
+       live: function( types, data, fn ) {
+               jQuery( this.context ).on( types, this.selector, data, fn );
+               return this;
+       },
+       die: function( types, fn ) {
+               jQuery( this.context ).off( types, this.selector || "**", fn );
+               return this;
+       },
+
+       delegate: function( selector, types, data, fn ) {
+               return this.on( types, selector, data, fn );
+       },
+       undelegate: function( selector, types, fn ) {
+               // ( namespace ) or ( selector, types [, fn] )
+               return arguments.length == 1? this.off( selector, "**" ) : this.off( types, selector, fn );
+       },
+
+       trigger: function( type, data ) {
+               return this.each(function() {
+                       jQuery.event.trigger( type, data, this );
+               });
+       },
+       triggerHandler: function( type, data ) {
+               if ( this[0] ) {
+                       return jQuery.event.trigger( type, data, this[0], true );
+               }
+       },
+
+       toggle: function( fn ) {
+               // Save reference to arguments for access in closure
+               var args = arguments,
+                       guid = fn.guid || jQuery.guid++,
+                       i = 0,
+                       toggler = function( event ) {
+                               // Figure out which function to execute
+                               var lastToggle = ( jQuery._data( this, "lastToggle" + fn.guid ) || 0 ) % i;
+                               jQuery._data( this, "lastToggle" + fn.guid, lastToggle + 1 );
+
+                               // Make sure that clicks stop
+                               event.preventDefault();
+
+                               // and execute the function
+                               return args[ lastToggle ].apply( this, arguments ) || false;
+                       };
+
+               // link all the functions, so any of them can unbind this click handler
+               toggler.guid = guid;
+               while ( i < args.length ) {
+                       args[ i++ ].guid = guid;
+               }
+
+               return this.click( toggler );
+       },
+
+       hover: function( fnOver, fnOut ) {
+               return this.mouseenter( fnOver ).mouseleave( fnOut || fnOver );
+       }
+});
+
+jQuery.each( ("blur focus focusin focusout load resize scroll unload click dblclick " +
+       "mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave " +
+       "change select submit keydown keypress keyup error contextmenu").split(" "), function( i, name ) {
+
+       // Handle event binding
+       jQuery.fn[ name ] = function( data, fn ) {
+               if ( fn == null ) {
+                       fn = data;
+                       data = null;
+               }
+
+               return arguments.length > 0 ?
+                       this.bind( name, data, fn ) :
+                       this.trigger( name );
+       };
+
+       if ( jQuery.attrFn ) {
+               jQuery.attrFn[ name ] = true;
+       }
+
+       if ( rkeyEvent.test( name ) ) {
+               jQuery.event.fixHooks[ name ] = jQuery.event.keyHooks;
+       }
+
+       if ( rmouseEvent.test( name ) ) {
+               jQuery.event.fixHooks[ name ] = jQuery.event.mouseHooks;
+       }
+});
+
+
+
+/*!
+ * Sizzle CSS Selector Engine
+ *  Copyright 2011, The Dojo Foundation
+ *  Released under the MIT, BSD, and GPL Licenses.
+ *  More information: http://sizzlejs.com/
+ */
+(function(){
+
+var chunker = /((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^\[\]]*\]|['"][^'"]*['"]|[^\[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,
+       expando = "sizcache" + (Math.random() + '').replace('.', ''),
+       done = 0,
+       toString = Object.prototype.toString,
+       hasDuplicate = false,
+       baseHasDuplicate = true,
+       rBackslash = /\\/g,
+       rReturn = /\r\n/g,
+       rNonWord = /\W/;
+
+// Here we check if the JavaScript engine is using some sort of
+// optimization where it does not always call our comparision
+// function. If that is the case, discard the hasDuplicate value.
+//   Thus far that includes Google Chrome.
+[0, 0].sort(function() {
+       baseHasDuplicate = false;
+       return 0;
+});
+
+var Sizzle = function( selector, context, results, seed ) {
+       results = results || [];
+       context = context || document;
+
+       var origContext = context;
+
+       if ( context.nodeType !== 1 && context.nodeType !== 9 ) {
+               return [];
+       }
+       
+       if ( !selector || typeof selector !== "string" ) {
+               return results;
+       }
+
+       var m, set, checkSet, extra, ret, cur, pop, i,
+               prune = true,
+               contextXML = Sizzle.isXML( context ),
+               parts = [],
+               soFar = selector;
+       
+       // Reset the position of the chunker regexp (start from head)
+       do {
+               chunker.exec( "" );
+               m = chunker.exec( soFar );
+
+               if ( m ) {
+                       soFar = m[3];
+               
+                       parts.push( m[1] );
+               
+                       if ( m[2] ) {
+                               extra = m[3];
+                               break;
+                       }
+               }
+       } while ( m );
+
+       if ( parts.length > 1 && origPOS.exec( selector ) ) {
+
+               if ( parts.length === 2 && Expr.relative[ parts[0] ] ) {
+                       set = posProcess( parts[0] + parts[1], context, seed );
+
+               } else {
+                       set = Expr.relative[ parts[0] ] ?
+                               [ context ] :
+                               Sizzle( parts.shift(), context );
+
+                       while ( parts.length ) {
+                               selector = parts.shift();
+
+                               if ( Expr.relative[ selector ] ) {
+                                       selector += parts.shift();
+                               }
+                               
+                               set = posProcess( selector, set, seed );
+                       }
+               }
+
+       } else {
+               // Take a shortcut and set the context if the root selector is an ID
+               // (but not if it'll be faster if the inner selector is an ID)
+               if ( !seed && parts.length > 1 && context.nodeType === 9 && !contextXML &&
+                               Expr.match.ID.test(parts[0]) && !Expr.match.ID.test(parts[parts.length - 1]) ) {
+
+                       ret = Sizzle.find( parts.shift(), context, contextXML );
+                       context = ret.expr ?
+                               Sizzle.filter( ret.expr, ret.set )[0] :
+                               ret.set[0];
+               }
+
+               if ( context ) {
+                       ret = seed ?
+                               { expr: parts.pop(), set: makeArray(seed) } :
+                               Sizzle.find( parts.pop(), parts.length === 1 && (parts[0] === "~" || parts[0] === "+") && context.parentNode ? context.parentNode : context, contextXML );
+
+                       set = ret.expr ?
+                               Sizzle.filter( ret.expr, ret.set ) :
+                               ret.set;
+
+                       if ( parts.length > 0 ) {
+                               checkSet = makeArray( set );
+
+                       } else {
+                               prune = false;
+                       }
+
+                       while ( parts.length ) {
+                               cur = parts.pop();
+                               pop = cur;
+
+                               if ( !Expr.relative[ cur ] ) {
+                                       cur = "";
+                               } else {
+                                       pop = parts.pop();
+                               }
+
+                               if ( pop == null ) {
+                                       pop = context;
+                               }
+
+                               Expr.relative[ cur ]( checkSet, pop, contextXML );
+                       }
+
+               } else {
+                       checkSet = parts = [];
+               }
+       }
+
+       if ( !checkSet ) {
+               checkSet = set;
+       }
+
+       if ( !checkSet ) {
+               Sizzle.error( cur || selector );
+       }
+
+       if ( toString.call(checkSet) === "[object Array]" ) {
+               if ( !prune ) {
+                       results.push.apply( results, checkSet );
+
+               } else if ( context && context.nodeType === 1 ) {
+                       for ( i = 0; checkSet[i] != null; i++ ) {
+                               if ( checkSet[i] && (checkSet[i] === true || checkSet[i].nodeType === 1 && Sizzle.contains(context, checkSet[i])) ) {
+                                       results.push( set[i] );
+                               }
+                       }
+
+               } else {
+                       for ( i = 0; checkSet[i] != null; i++ ) {
+                               if ( checkSet[i] && checkSet[i].nodeType === 1 ) {
+                                       results.push( set[i] );
+                               }
+                       }
+               }
+
+       } else {
+               makeArray( checkSet, results );
+       }
+
+       if ( extra ) {
+               Sizzle( extra, origContext, results, seed );
+               Sizzle.uniqueSort( results );
+       }
+
+       return results;
+};
+
+Sizzle.uniqueSort = function( results ) {
+       if ( sortOrder ) {
+               hasDuplicate = baseHasDuplicate;
+               results.sort( sortOrder );
+
+               if ( hasDuplicate ) {
+                       for ( var i = 1; i < results.length; i++ ) {
+                               if ( results[i] === results[ i - 1 ] ) {
+                                       results.splice( i--, 1 );
+                               }
+                       }
+               }
+       }
+
+       return results;
+};
+
+Sizzle.matches = function( expr, set ) {
+       return Sizzle( expr, null, null, set );
+};
+
+Sizzle.matchesSelector = function( node, expr ) {
+       return Sizzle( expr, null, null, [node] ).length > 0;
+};
+
+Sizzle.find = function( expr, context, isXML ) {
+       var set, i, len, match, type, left;
+
+       if ( !expr ) {
+               return [];
+       }
+
+       for ( i = 0, len = Expr.order.length; i < len; i++ ) {
+               type = Expr.order[i];
+               
+               if ( (match = Expr.leftMatch[ type ].exec( expr )) ) {
+                       left = match[1];
+                       match.splice( 1, 1 );
+
+                       if ( left.substr( left.length - 1 ) !== "\\" ) {
+                               match[1] = (match[1] || "").replace( rBackslash, "" );
+                               set = Expr.find[ type ]( match, context, isXML );
+
+                               if ( set != null ) {
+                                       expr = expr.replace( Expr.match[ type ], "" );
+                                       break;
+                               }
+                       }
+               }
+       }
+
+       if ( !set ) {
+               set = typeof context.getElementsByTagName !== "undefined" ?
+                       context.getElementsByTagName( "*" ) :
+                       [];
+       }
+
+       return { set: set, expr: expr };
+};
+
+Sizzle.filter = function( expr, set, inplace, not ) {
+       var match, anyFound,
+               type, found, item, filter, left,
+               i, pass,
+               old = expr,
+               result = [],
+               curLoop = set,
+               isXMLFilter = set && set[0] && Sizzle.isXML( set[0] );
+
+       while ( expr && set.length ) {
+               for ( type in Expr.filter ) {
+                       if ( (match = Expr.leftMatch[ type ].exec( expr )) != null && match[2] ) {
+                               filter = Expr.filter[ type ];
+                               left = match[1];
+
+                               anyFound = false;
+
+                               match.splice(1,1);
+
+                               if ( left.substr( left.length - 1 ) === "\\" ) {
+                                       continue;
+                               }
+
+                               if ( curLoop === result ) {
+                                       result = [];
+                               }
+
+                               if ( Expr.preFilter[ type ] ) {
+                                       match = Expr.preFilter[ type ]( match, curLoop, inplace, result, not, isXMLFilter );
+
+                                       if ( !match ) {
+                                               anyFound = found = true;
+
+                                       } else if ( match === true ) {
+                                               continue;
+                                       }
+                               }
+
+                               if ( match ) {
+                                       for ( i = 0; (item = curLoop[i]) != null; i++ ) {
+                                               if ( item ) {
+                                                       found = filter( item, match, i, curLoop );
+                                                       pass = not ^ found;
+
+                                                       if ( inplace && found != null ) {
+                                                               if ( pass ) {
+                                                                       anyFound = true;
+
+                                                               } else {
+                                                                       curLoop[i] = false;
+                                                               }
+
+                                                       } else if ( pass ) {
+                                                               result.push( item );
+                                                               anyFound = true;
+                                                       }
+                                               }
+                                       }
+                               }
+
+                               if ( found !== undefined ) {
+                                       if ( !inplace ) {
+                                               curLoop = result;
+                                       }
+
+                                       expr = expr.replace( Expr.match[ type ], "" );
+
+                                       if ( !anyFound ) {
+                                               return [];
+                                       }
+
+                                       break;
+                               }
+                       }
+               }
+
+               // Improper expression
+               if ( expr === old ) {
+                       if ( anyFound == null ) {
+                               Sizzle.error( expr );
+
+                       } else {
+                               break;
+                       }
+               }
+
+               old = expr;
+       }
+
+       return curLoop;
+};
+
+Sizzle.error = function( msg ) {
+       throw "Syntax error, unrecognized expression: " + msg;
+};
+
+/**
+ * Utility function for retreiving the text value of an array of DOM nodes
+ * @param {Array|Element} elem
+ */
+var getText = Sizzle.getText = function( elem ) {
+    var i, node,
+               nodeType = elem.nodeType,
+               ret = "";
+
+       if ( nodeType ) {
+               if ( nodeType === 1 ) {
+                       // Use textContent || innerText for elements
+                       if ( typeof elem.textContent === 'string' ) {
+                               return elem.textContent;
+                       } else if ( typeof elem.innerText === 'string' ) {
+                               // Replace IE's carriage returns
+                               return elem.innerText.replace( rReturn, '' );
+                       } else {
+                               // Traverse it's children
+                               for ( elem = elem.firstChild; elem; elem = elem.nextSibling) {
+                                       ret += getText( elem );
+                               }
+                       }
+               } else if ( nodeType === 3 || nodeType === 4 ) {
+                       return elem.nodeValue;
+               }
+       } else {
+
+               // If no nodeType, this is expected to be an array
+               for ( i = 0; (node = elem[i]); i++ ) {
+                       // Do not traverse comment nodes
+                       if ( node.nodeType !== 8 ) {
+                               ret += getText( node );
+                       }
+               }
+       }
+       return ret;
+};
+
+var Expr = Sizzle.selectors = {
+       order: [ "ID", "NAME", "TAG" ],
+
+       match: {
+               ID: /#((?:[\w\u00c0-\uFFFF\-]|\\.)+)/,
+               CLASS: /\.((?:[\w\u00c0-\uFFFF\-]|\\.)+)/,
+               NAME: /\[name=['"]*((?:[\w\u00c0-\uFFFF\-]|\\.)+)['"]*\]/,
+               ATTR: /\[\s*((?:[\w\u00c0-\uFFFF\-]|\\.)+)\s*(?:(\S?=)\s*(?:(['"])(.*?)\3|(#?(?:[\w\u00c0-\uFFFF\-]|\\.)*)|)|)\s*\]/,
+               TAG: /^((?:[\w\u00c0-\uFFFF\*\-]|\\.)+)/,
+               CHILD: /:(only|nth|last|first)-child(?:\(\s*(even|odd|(?:[+\-]?\d+|(?:[+\-]?\d*)?n\s*(?:[+\-]\s*\d+)?))\s*\))?/,
+               POS: /:(nth|eq|gt|lt|first|last|even|odd)(?:\((\d*)\))?(?=[^\-]|$)/,
+               PSEUDO: /:((?:[\w\u00c0-\uFFFF\-]|\\.)+)(?:\((['"]?)((?:\([^\)]+\)|[^\(\)]*)+)\2\))?/
+       },
+
+       leftMatch: {},
+
+       attrMap: {
+               "class": "className",
+               "for": "htmlFor"
+       },
+
+       attrHandle: {
+               href: function( elem ) {
+                       return elem.getAttribute( "href" );
+               },
+               type: function( elem ) {
+                       return elem.getAttribute( "type" );
+               }
+       },
+
+       relative: {
+               "+": function(checkSet, part){
+                       var isPartStr = typeof part === "string",
+                               isTag = isPartStr && !rNonWord.test( part ),
+                               isPartStrNotTag = isPartStr && !isTag;
+
+                       if ( isTag ) {
+                               part = part.toLowerCase();
+                       }
+
+                       for ( var i = 0, l = checkSet.length, elem; i < l; i++ ) {
+                               if ( (elem = checkSet[i]) ) {
+                                       while ( (elem = elem.previousSibling) && elem.nodeType !== 1 ) {}
+
+                                       checkSet[i] = isPartStrNotTag || elem && elem.nodeName.toLowerCase() === part ?
+                                               elem || false :
+                                               elem === part;
+                               }
+                       }
+
+                       if ( isPartStrNotTag ) {
+                               Sizzle.filter( part, checkSet, true );
+                       }
+               },
+
+               ">": function( checkSet, part ) {
+                       var elem,
+                               isPartStr = typeof part === "string",
+                               i = 0,
+                               l = checkSet.length;
+
+                       if ( isPartStr && !rNonWord.test( part ) ) {
+                               part = part.toLowerCase();
+
+                               for ( ; i < l; i++ ) {
+                                       elem = checkSet[i];
+
+                                       if ( elem ) {
+                                               var parent = elem.parentNode;
+                                               checkSet[i] = parent.nodeName.toLowerCase() === part ? parent : false;
+                                       }
+                               }
+
+                       } else {
+                               for ( ; i < l; i++ ) {
+                                       elem = checkSet[i];
+
+                                       if ( elem ) {
+                                               checkSet[i] = isPartStr ?
+                                                       elem.parentNode :
+                                                       elem.parentNode === part;
+                                       }
+                               }
+
+                               if ( isPartStr ) {
+                                       Sizzle.filter( part, checkSet, true );
+                               }
+                       }
+               },
+
+               "": function(checkSet, part, isXML){
+                       var nodeCheck,
+                               doneName = done++,
+                               checkFn = dirCheck;
+
+                       if ( typeof part === "string" && !rNonWord.test( part ) ) {
+                               part = part.toLowerCase();
+                               nodeCheck = part;
+                               checkFn = dirNodeCheck;
+                       }
+
+                       checkFn( "parentNode", part, doneName, checkSet, nodeCheck, isXML );
+               },
+
+               "~": function( checkSet, part, isXML ) {
+                       var nodeCheck,
+                               doneName = done++,
+                               checkFn = dirCheck;
+
+                       if ( typeof part === "string" && !rNonWord.test( part ) ) {
+                               part = part.toLowerCase();
+                               nodeCheck = part;
+                               checkFn = dirNodeCheck;
+                       }
+
+                       checkFn( "previousSibling", part, doneName, checkSet, nodeCheck, isXML );
+               }
+       },
+
+       find: {
+               ID: function( match, context, isXML ) {
+                       if ( typeof context.getElementById !== "undefined" && !isXML ) {
+                               var m = context.getElementById(match[1]);
+                               // Check parentNode to catch when Blackberry 4.6 returns
+                               // nodes that are no longer in the document #6963
+                               return m && m.parentNode ? [m] : [];
+                       }
+               },
+
+               NAME: function( match, context ) {
+                       if ( typeof context.getElementsByName !== "undefined" ) {
+                               var ret = [],
+                                       results = context.getElementsByName( match[1] );
+
+                               for ( var i = 0, l = results.length; i < l; i++ ) {
+                                       if ( results[i].getAttribute("name") === match[1] ) {
+                                               ret.push( results[i] );
+                                       }
+                               }
+
+                               return ret.length === 0 ? null : ret;
+                       }
+               },
+
+               TAG: function( match, context ) {
+                       if ( typeof context.getElementsByTagName !== "undefined" ) {
+                               return context.getElementsByTagName( match[1] );
+                       }
+               }
+       },
+       preFilter: {
+               CLASS: function( match, curLoop, inplace, result, not, isXML ) {
+                       match = " " + match[1].replace( rBackslash, "" ) + " ";
+
+                       if ( isXML ) {
+                               return match;
+                       }
+
+                       for ( var i = 0, elem; (elem = curLoop[i]) != null; i++ ) {
+                               if ( elem ) {
+                                       if ( not ^ (elem.className && (" " + elem.className + " ").replace(/[\t\n\r]/g, " ").indexOf(match) >= 0) ) {
+                                               if ( !inplace ) {
+                                                       result.push( elem );
+                                               }
+
+                                       } else if ( inplace ) {
+                                               curLoop[i] = false;
+                                       }
+                               }
+                       }
+
+                       return false;
+               },
+
+               ID: function( match ) {
+                       return match[1].replace( rBackslash, "" );
+               },
+
+               TAG: function( match, curLoop ) {
+                       return match[1].replace( rBackslash, "" ).toLowerCase();
+               },
+
+               CHILD: function( match ) {
+                       if ( match[1] === "nth" ) {
+                               if ( !match[2] ) {
+                                       Sizzle.error( match[0] );
+                               }
+
+                               match[2] = match[2].replace(/^\+|\s*/g, '');
+
+                               // parse equations like 'even', 'odd', '5', '2n', '3n+2', '4n-1', '-n+6'
+                               var test = /(-?)(\d*)(?:n([+\-]?\d*))?/.exec(
+                                       match[2] === "even" && "2n" || match[2] === "odd" && "2n+1" ||
+                                       !/\D/.test( match[2] ) && "0n+" + match[2] || match[2]);
+
+                               // calculate the numbers (first)n+(last) including if they are negative
+                               match[2] = (test[1] + (test[2] || 1)) - 0;
+                               match[3] = test[3] - 0;
+                       }
+                       else if ( match[2] ) {
+                               Sizzle.error( match[0] );
+                       }
+
+                       // TODO: Move to normal caching system
+                       match[0] = done++;
+
+                       return match;
+               },
+
+               ATTR: function( match, curLoop, inplace, result, not, isXML ) {
+                       var name = match[1] = match[1].replace( rBackslash, "" );
+                       
+                       if ( !isXML && Expr.attrMap[name] ) {
+                               match[1] = Expr.attrMap[name];
+                       }
+
+                       // Handle if an un-quoted value was used
+                       match[4] = ( match[4] || match[5] || "" ).replace( rBackslash, "" );
+
+                       if ( match[2] === "~=" ) {
+                               match[4] = " " + match[4] + " ";
+                       }
+
+                       return match;
+               },
+
+               PSEUDO: function( match, curLoop, inplace, result, not ) {
+                       if ( match[1] === "not" ) {
+                               // If we're dealing with a complex expression, or a simple one
+                               if ( ( chunker.exec(match[3]) || "" ).length > 1 || /^\w/.test(match[3]) ) {
+                                       match[3] = Sizzle(match[3], null, null, curLoop);
+
+                               } else {
+                                       var ret = Sizzle.filter(match[3], curLoop, inplace, true ^ not);
+
+                                       if ( !inplace ) {
+                                               result.push.apply( result, ret );
+                                       }
+
+                                       return false;
+                               }
+
+                       } else if ( Expr.match.POS.test( match[0] ) || Expr.match.CHILD.test( match[0] ) ) {
+                               return true;
+                       }
+                       
+                       return match;
+               },
+
+               POS: function( match ) {
+                       match.unshift( true );
+
+                       return match;
+               }
+       },
+       
+       filters: {
+               enabled: function( elem ) {
+                       return elem.disabled === false && elem.type !== "hidden";
+               },
+
+               disabled: function( elem ) {
+                       return elem.disabled === true;
+               },
+
+               checked: function( elem ) {
+                       return elem.checked === true;
+               },
+               
+               selected: function( elem ) {
+                       // Accessing this property makes selected-by-default
+                       // options in Safari work properly
+                       if ( elem.parentNode ) {
+                               elem.parentNode.selectedIndex;
+                       }
+                       
+                       return elem.selected === true;
+               },
+
+               parent: function( elem ) {
+                       return !!elem.firstChild;
+               },
+
+               empty: function( elem ) {
+                       return !elem.firstChild;
+               },
+
+               has: function( elem, i, match ) {
+                       return !!Sizzle( match[3], elem ).length;
+               },
+
+               header: function( elem ) {
+                       return (/h\d/i).test( elem.nodeName );
+               },
+
+               text: function( elem ) {
+                       var attr = elem.getAttribute( "type" ), type = elem.type;
+                       // IE6 and 7 will map elem.type to 'text' for new HTML5 types (search, etc) 
+                       // use getAttribute instead to test this case
+                       return elem.nodeName.toLowerCase() === "input" && "text" === type && ( attr === type || attr === null );
+               },
+
+               radio: function( elem ) {
+                       return elem.nodeName.toLowerCase() === "input" && "radio" === elem.type;
+               },
+
+               checkbox: function( elem ) {
+                       return elem.nodeName.toLowerCase() === "input" && "checkbox" === elem.type;
+               },
+
+               file: function( elem ) {
+                       return elem.nodeName.toLowerCase() === "input" && "file" === elem.type;
+               },
+
+               password: function( elem ) {
+                       return elem.nodeName.toLowerCase() === "input" && "password" === elem.type;
+               },
+
+               submit: function( elem ) {
+                       var name = elem.nodeName.toLowerCase();
+                       return (name === "input" || name === "button") && "submit" === elem.type;
+               },
+
+               image: function( elem ) {
+                       return elem.nodeName.toLowerCase() === "input" && "image" === elem.type;
+               },
+
+               reset: function( elem ) {
+                       var name = elem.nodeName.toLowerCase();
+                       return (name === "input" || name === "button") && "reset" === elem.type;
+               },
+
+               button: function( elem ) {
+                       var name = elem.nodeName.toLowerCase();
+                       return name === "input" && "button" === elem.type || name === "button";
+               },
+
+               input: function( elem ) {
+                       return (/input|select|textarea|button/i).test( elem.nodeName );
+               },
+
+               focus: function( elem ) {
+                       return elem === elem.ownerDocument.activeElement;
+               }
+       },
+       setFilters: {
+               first: function( elem, i ) {
+                       return i === 0;
+               },
+
+               last: function( elem, i, match, array ) {
+                       return i === array.length - 1;
+               },
+
+               even: function( elem, i ) {
+                       return i % 2 === 0;
+               },
+
+               odd: function( elem, i ) {
+                       return i % 2 === 1;
+               },
+
+               lt: function( elem, i, match ) {
+                       return i < match[3] - 0;
+               },
+
+               gt: function( elem, i, match ) {
+                       return i > match[3] - 0;
+               },
+
+               nth: function( elem, i, match ) {
+                       return match[3] - 0 === i;
+               },
+
+               eq: function( elem, i, match ) {
+                       return match[3] - 0 === i;
+               }
+       },
+       filter: {
+               PSEUDO: function( elem, match, i, array ) {
+                       var name = match[1],
+                               filter = Expr.filters[ name ];
+
+                       if ( filter ) {
+                               return filter( elem, i, match, array );
+
+                       } else if ( name === "contains" ) {
+                               return (elem.textContent || elem.innerText || getText([ elem ]) || "").indexOf(match[3]) >= 0;
+
+                       } else if ( name === "not" ) {
+                               var not = match[3];
+
+                               for ( var j = 0, l = not.length; j < l; j++ ) {
+                                       if ( not[j] === elem ) {
+                                               return false;
+                                       }
+                               }
+
+                               return true;
+
+                       } else {
+                               Sizzle.error( name );
+                       }
+               },
+
+               CHILD: function( elem, match ) {
+                       var first, last,
+                               doneName, parent, cache,
+                               count, diff,
+                               type = match[1],
+                               node = elem;
+
+                       switch ( type ) {
+                               case "only":
+                               case "first":
+                                       while ( (node = node.previousSibling) )  {
+                                               if ( node.nodeType === 1 ) { 
+                                                       return false; 
+                                               }
+                                       }
+
+                                       if ( type === "first" ) { 
+                                               return true; 
+                                       }
+
+                                       node = elem;
+
+                               case "last":
+                                       while ( (node = node.nextSibling) )      {
+                                               if ( node.nodeType === 1 ) { 
+                                                       return false; 
+                                               }
+                                       }
+
+                                       return true;
+
+                               case "nth":
+                                       first = match[2];
+                                       last = match[3];
+
+                                       if ( first === 1 && last === 0 ) {
+                                               return true;
+                                       }
+                                       
+                                       doneName = match[0];
+                                       parent = elem.parentNode;
+       
+                                       if ( parent && (parent[ expando ] !== doneName || !elem.nodeIndex) ) {
+                                               count = 0;
+                                               
+                                               for ( node = parent.firstChild; node; node = node.nextSibling ) {
+                                                       if ( node.nodeType === 1 ) {
+                                                               node.nodeIndex = ++count;
+                                                       }
+                                               } 
+
+                                               parent[ expando ] = doneName;
+                                       }
+                                       
+                                       diff = elem.nodeIndex - last;
+
+                                       if ( first === 0 ) {
+                                               return diff === 0;
+
+                                       } else {
+                                               return ( diff % first === 0 && diff / first >= 0 );
+                                       }
+                       }
+               },
+
+               ID: function( elem, match ) {
+                       return elem.nodeType === 1 && elem.getAttribute("id") === match;
+               },
+
+               TAG: function( elem, match ) {
+                       return (match === "*" && elem.nodeType === 1) || !!elem.nodeName && elem.nodeName.toLowerCase() === match;
+               },
+               
+               CLASS: function( elem, match ) {
+                       return (" " + (elem.className || elem.getAttribute("class")) + " ")
+                               .indexOf( match ) > -1;
+               },
+
+               ATTR: function( elem, match ) {
+                       var name = match[1],
+                               result = Sizzle.attr ?
+                                       Sizzle.attr( elem, name ) :
+                                       Expr.attrHandle[ name ] ?
+                                       Expr.attrHandle[ name ]( elem ) :
+                                       elem[ name ] != null ?
+                                               elem[ name ] :
+                                               elem.getAttribute( name ),
+                               value = result + "",
+                               type = match[2],
+                               check = match[4];
+
+                       return result == null ?
+                               type === "!=" :
+                               !type && Sizzle.attr ?
+                               result != null :
+                               type === "=" ?
+                               value === check :
+                               type === "*=" ?
+                               value.indexOf(check) >= 0 :
+                               type === "~=" ?
+                               (" " + value + " ").indexOf(check) >= 0 :
+                               !check ?
+                               value && result !== false :
+                               type === "!=" ?
+                               value !== check :
+                               type === "^=" ?
+                               value.indexOf(check) === 0 :
+                               type === "$=" ?
+                               value.substr(value.length - check.length) === check :
+                               type === "|=" ?
+                               value === check || value.substr(0, check.length + 1) === check + "-" :
+                               false;
+               },
+
+               POS: function( elem, match, i, array ) {
+                       var name = match[2],
+                               filter = Expr.setFilters[ name ];
+
+                       if ( filter ) {
+                               return filter( elem, i, match, array );
+                       }
+               }
+       }
+};
+
+var origPOS = Expr.match.POS,
+       fescape = function(all, num){
+               return "\\" + (num - 0 + 1);
+       };
+
+for ( var type in Expr.match ) {
+       Expr.match[ type ] = new RegExp( Expr.match[ type ].source + (/(?![^\[]*\])(?![^\(]*\))/.source) );
+       Expr.leftMatch[ type ] = new RegExp( /(^(?:.|\r|\n)*?)/.source + Expr.match[ type ].source.replace(/\\(\d+)/g, fescape) );
+}
+
+var makeArray = function( array, results ) {
+       array = Array.prototype.slice.call( array, 0 );
+
+       if ( results ) {
+               results.push.apply( results, array );
+               return results;
+       }
+       
+       return array;
+};
+
+// Perform a simple check to determine if the browser is capable of
+// converting a NodeList to an array using builtin methods.
+// Also verifies that the returned array holds DOM nodes
+// (which is not the case in the Blackberry browser)
+try {
+       Array.prototype.slice.call( document.documentElement.childNodes, 0 )[0].nodeType;
+
+// Provide a fallback method if it does not work
+} catch( e ) {
+       makeArray = function( array, results ) {
+               var i = 0,
+                       ret = results || [];
+
+               if ( toString.call(array) === "[object Array]" ) {
+                       Array.prototype.push.apply( ret, array );
+
+               } else {
+                       if ( typeof array.length === "number" ) {
+                               for ( var l = array.length; i < l; i++ ) {
+                                       ret.push( array[i] );
+                               }
+
+                       } else {
+                               for ( ; array[i]; i++ ) {
+                                       ret.push( array[i] );
+                               }
+                       }
+               }
+
+               return ret;
+       };
+}
+
+var sortOrder, siblingCheck;
+
+if ( document.documentElement.compareDocumentPosition ) {
+       sortOrder = function( a, b ) {
+               if ( a === b ) {
+                       hasDuplicate = true;
+                       return 0;
+               }
+
+               if ( !a.compareDocumentPosition || !b.compareDocumentPosition ) {
+                       return a.compareDocumentPosition ? -1 : 1;
+               }
+
+               return a.compareDocumentPosition(b) & 4 ? -1 : 1;
+       };
+
+} else {
+       sortOrder = function( a, b ) {
+               // The nodes are identical, we can exit early
+               if ( a === b ) {
+                       hasDuplicate = true;
+                       return 0;
+
+               // Fallback to using sourceIndex (in IE) if it's available on both nodes
+               } else if ( a.sourceIndex && b.sourceIndex ) {
+                       return a.sourceIndex - b.sourceIndex;
+               }
+
+               var al, bl,
+                       ap = [],
+                       bp = [],
+                       aup = a.parentNode,
+                       bup = b.parentNode,
+                       cur = aup;
+
+               // If the nodes are siblings (or identical) we can do a quick check
+               if ( aup === bup ) {
+                       return siblingCheck( a, b );
+
+               // If no parents were found then the nodes are disconnected
+               } else if ( !aup ) {
+                       return -1;
+
+               } else if ( !bup ) {
+                       return 1;
+               }
+
+               // Otherwise they're somewhere else in the tree so we need
+               // to build up a full list of the parentNodes for comparison
+               while ( cur ) {
+                       ap.unshift( cur );
+                       cur = cur.parentNode;
+               }
+
+               cur = bup;
+
+               while ( cur ) {
+                       bp.unshift( cur );
+                       cur = cur.parentNode;
+               }
+
+               al = ap.length;
+               bl = bp.length;
+
+               // Start walking down the tree looking for a discrepancy
+               for ( var i = 0; i < al && i < bl; i++ ) {
+                       if ( ap[i] !== bp[i] ) {
+                               return siblingCheck( ap[i], bp[i] );
+                       }
+               }
+
+               // We ended someplace up the tree so do a sibling check
+               return i === al ?
+                       siblingCheck( a, bp[i], -1 ) :
+                       siblingCheck( ap[i], b, 1 );
+       };
+
+       siblingCheck = function( a, b, ret ) {
+               if ( a === b ) {
+                       return ret;
+               }
+
+               var cur = a.nextSibling;
+
+               while ( cur ) {
+                       if ( cur === b ) {
+                               return -1;
+                       }
+
+                       cur = cur.nextSibling;
+               }
+
+               return 1;
+       };
+}
+
+// Check to see if the browser returns elements by name when
+// querying by getElementById (and provide a workaround)
+(function(){
+       // We're going to inject a fake input element with a specified name
+       var form = document.createElement("div"),
+               id = "script" + (new Date()).getTime(),
+               root = document.documentElement;
+
+       form.innerHTML = "<a name='" + id + "'/>";
+
+       // Inject it into the root element, check its status, and remove it quickly
+       root.insertBefore( form, root.firstChild );
+
+       // The workaround has to do additional checks after a getElementById
+       // Which slows things down for other browsers (hence the branching)
+       if ( document.getElementById( id ) ) {
+               Expr.find.ID = function( match, context, isXML ) {
+                       if ( typeof context.getElementById !== "undefined" && !isXML ) {
+                               var m = context.getElementById(match[1]);
+
+                               return m ?
+                                       m.id === match[1] || typeof m.getAttributeNode !== "undefined" && m.getAttributeNode("id").nodeValue === match[1] ?
+                                               [m] :
+                                               undefined :
+                                       [];
+                       }
+               };
+
+               Expr.filter.ID = function( elem, match ) {
+                       var node = typeof elem.getAttributeNode !== "undefined" && elem.getAttributeNode("id");
+
+                       return elem.nodeType === 1 && node && node.nodeValue === match;
+               };
+       }
+
+       root.removeChild( form );
+
+       // release memory in IE
+       root = form = null;
+})();
+
+(function(){
+       // Check to see if the browser returns only elements
+       // when doing getElementsByTagName("*")
+
+       // Create a fake element
+       var div = document.createElement("div");
+       div.appendChild( document.createComment("") );
+
+       // Make sure no comments are found
+       if ( div.getElementsByTagName("*").length > 0 ) {
+               Expr.find.TAG = function( match, context ) {
+                       var results = context.getElementsByTagName( match[1] );
+
+                       // Filter out possible comments
+                       if ( match[1] === "*" ) {
+                               var tmp = [];
+
+                               for ( var i = 0; results[i]; i++ ) {
+                                       if ( results[i].nodeType === 1 ) {
+                                               tmp.push( results[i] );
+                                       }
+                               }
+
+                               results = tmp;
+                       }
+
+                       return results;
+               };
+       }
+
+       // Check to see if an attribute returns normalized href attributes
+       div.innerHTML = "<a href='#'></a>";
+
+       if ( div.firstChild && typeof div.firstChild.getAttribute !== "undefined" &&
+                       div.firstChild.getAttribute("href") !== "#" ) {
+
+               Expr.attrHandle.href = function( elem ) {
+                       return elem.getAttribute( "href", 2 );
+               };
+       }
+
+       // release memory in IE
+       div = null;
+})();
+
+if ( document.querySelectorAll ) {
+       (function(){
+               var oldSizzle = Sizzle,
+                       div = document.createElement("div"),
+                       id = "__sizzle__";
+
+               div.innerHTML = "<p class='TEST'></p>";
+
+               // Safari can't handle uppercase or unicode characters when
+               // in quirks mode.
+               if ( div.querySelectorAll && div.querySelectorAll(".TEST").length === 0 ) {
+                       return;
+               }
+       
+               Sizzle = function( query, context, extra, seed ) {
+                       context = context || document;
+
+                       // Only use querySelectorAll on non-XML documents
+                       // (ID selectors don't work in non-HTML documents)
+                       if ( !seed && !Sizzle.isXML(context) ) {
+                               // See if we find a selector to speed up
+                               var match = /^(\w+$)|^\.([\w\-]+$)|^#([\w\-]+$)/.exec( query );
+                               
+                               if ( match && (context.nodeType === 1 || context.nodeType === 9) ) {
+                                       // Speed-up: Sizzle("TAG")
+                                       if ( match[1] ) {
+                                               return makeArray( context.getElementsByTagName( query ), extra );
+                                       
+                                       // Speed-up: Sizzle(".CLASS")
+                                       } else if ( match[2] && Expr.find.CLASS && context.getElementsByClassName ) {
+                                               return makeArray( context.getElementsByClassName( match[2] ), extra );
+                                       }
+                               }
+                               
+                               if ( context.nodeType === 9 ) {
+                                       // Speed-up: Sizzle("body")
+                                       // The body element only exists once, optimize finding it
+                                       if ( query === "body" && context.body ) {
+                                               return makeArray( [ context.body ], extra );
+                                               
+                                       // Speed-up: Sizzle("#ID")
+                                       } else if ( match && match[3] ) {
+                                               var elem = context.getElementById( match[3] );
+
+                                               // Check parentNode to catch when Blackberry 4.6 returns
+                                               // nodes that are no longer in the document #6963
+                                               if ( elem && elem.parentNode ) {
+                                                       // Handle the case where IE and Opera return items
+                                                       // by name instead of ID
+                                                       if ( elem.id === match[3] ) {
+                                                               return makeArray( [ elem ], extra );
+                                                       }
+                                                       
+                                               } else {
+                                                       return makeArray( [], extra );
+                                               }
+                                       }
+                                       
+                                       try {
+                                               return makeArray( context.querySelectorAll(query), extra );
+                                       } catch(qsaError) {}
+
+                               // qSA works strangely on Element-rooted queries
+                               // We can work around this by specifying an extra ID on the root
+                               // and working up from there (Thanks to Andrew Dupont for the technique)
+                               // IE 8 doesn't work on object elements
+                               } else if ( context.nodeType === 1 && context.nodeName.toLowerCase() !== "object" ) {
+                                       var oldContext = context,
+                                               old = context.getAttribute( "id" ),
+                                               nid = old || id,
+                                               hasParent = context.parentNode,
+                                               relativeHierarchySelector = /^\s*[+~]/.test( query );
+
+                                       if ( !old ) {
+                                               context.setAttribute( "id", nid );
+                                       } else {
+                                               nid = nid.replace( /'/g, "\\$&" );
+                                       }
+                                       if ( relativeHierarchySelector && hasParent ) {
+                                               context = context.parentNode;
+                                       }
+
+                                       try {
+                                               if ( !relativeHierarchySelector || hasParent ) {
+                                                       return makeArray( context.querySelectorAll( "[id='" + nid + "'] " + query ), extra );
+                                               }
+
+                                       } catch(pseudoError) {
+                                       } finally {
+                                               if ( !old ) {
+                                                       oldContext.removeAttribute( "id" );
+                                               }
+                                       }
+                               }
+                       }
+               
+                       return oldSizzle(query, context, extra, seed);
+               };
+
+               for ( var prop in oldSizzle ) {
+                       Sizzle[ prop ] = oldSizzle[ prop ];
+               }
+
+               // release memory in IE
+               div = null;
+       })();
+}
+
+(function(){
+       var html = document.documentElement,
+               matches = html.matchesSelector || html.mozMatchesSelector || html.webkitMatchesSelector || html.msMatchesSelector;
+
+       if ( matches ) {
+               // Check to see if it's possible to do matchesSelector
+               // on a disconnected node (IE 9 fails this)
+               var disconnectedMatch = !matches.call( document.createElement( "div" ), "div" ),
+                       pseudoWorks = false;
+
+               try {
+                       // This should fail with an exception
+                       // Gecko does not error, returns false instead
+                       matches.call( document.documentElement, "[test!='']:sizzle" );
+       
+               } catch( pseudoError ) {
+                       pseudoWorks = true;
+               }
+
+               Sizzle.matchesSelector = function( node, expr ) {
+                       // Make sure that attribute selectors are quoted
+                       expr = expr.replace(/\=\s*([^'"\]]*)\s*\]/g, "='$1']");
+
+                       if ( !Sizzle.isXML( node ) ) {
+                               try { 
+                                       if ( pseudoWorks || !Expr.match.PSEUDO.test( expr ) && !/!=/.test( expr ) ) {
+                                               var ret = matches.call( node, expr );
+
+                                               // IE 9's matchesSelector returns false on disconnected nodes
+                                               if ( ret || !disconnectedMatch ||
+                                                               // As well, disconnected nodes are said to be in a document
+                                                               // fragment in IE 9, so check for that
+                                                               node.document && node.document.nodeType !== 11 ) {
+                                                       return ret;
+                                               }
+                                       }
+                               } catch(e) {}
+                       }
+
+                       return Sizzle(expr, null, null, [node]).length > 0;
+               };
+       }
+})();
+
+(function(){
+       var div = document.createElement("div");
+
+       div.innerHTML = "<div class='test e'></div><div class='test'></div>";
+
+       // Opera can't find a second classname (in 9.6)
+       // Also, make sure that getElementsByClassName actually exists
+       if ( !div.getElementsByClassName || div.getElementsByClassName("e").length === 0 ) {
+               return;
+       }
+
+       // Safari caches class attributes, doesn't catch changes (in 3.2)
+       div.lastChild.className = "e";
+
+       if ( div.getElementsByClassName("e").length === 1 ) {
+               return;
+       }
+       
+       Expr.order.splice(1, 0, "CLASS");
+       Expr.find.CLASS = function( match, context, isXML ) {
+               if ( typeof context.getElementsByClassName !== "undefined" && !isXML ) {
+                       return context.getElementsByClassName(match[1]);
+               }
+       };
+
+       // release memory in IE
+       div = null;
+})();
+
+function dirNodeCheck( dir, cur, doneName, checkSet, nodeCheck, isXML ) {
+       for ( var i = 0, l = checkSet.length; i < l; i++ ) {
+               var elem = checkSet[i];
+
+               if ( elem ) {
+                       var match = false;
+
+                       elem = elem[dir];
+
+                       while ( elem ) {
+                               if ( elem[ expando ] === doneName ) {
+                                       match = checkSet[elem.sizset];
+                                       break;
+                               }
+
+                               if ( elem.nodeType === 1 && !isXML ){
+                                       elem[ expando ] = doneName;
+                                       elem.sizset = i;
+                               }
+
+                               if ( elem.nodeName.toLowerCase() === cur ) {
+                                       match = elem;
+                                       break;
+                               }
+
+                               elem = elem[dir];
+                       }
+
+                       checkSet[i] = match;
+               }
+       }
+}
+
+function dirCheck( dir, cur, doneName, checkSet, nodeCheck, isXML ) {
+       for ( var i = 0, l = checkSet.length; i < l; i++ ) {
+               var elem = checkSet[i];
+
+               if ( elem ) {
+                       var match = false;
+                       
+                       elem = elem[dir];
+
+                       while ( elem ) {
+                               if ( elem[ expando ] === doneName ) {
+                                       match = checkSet[elem.sizset];
+                                       break;
+                               }
+
+                               if ( elem.nodeType === 1 ) {
+                                       if ( !isXML ) {
+                                               elem[ expando ] = doneName;
+                                               elem.sizset = i;
+                                       }
+
+                                       if ( typeof cur !== "string" ) {
+                                               if ( elem === cur ) {
+                                                       match = true;
+                                                       break;
+                                               }
+
+                                       } else if ( Sizzle.filter( cur, [elem] ).length > 0 ) {
+                                               match = elem;
+                                               break;
+                                       }
+                               }
+
+                               elem = elem[dir];
+                       }
+
+                       checkSet[i] = match;
+               }
+       }
+}
+
+if ( document.documentElement.contains ) {
+       Sizzle.contains = function( a, b ) {
+               return a !== b && (a.contains ? a.contains(b) : true);
+       };
+
+} else if ( document.documentElement.compareDocumentPosition ) {
+       Sizzle.contains = function( a, b ) {
+               return !!(a.compareDocumentPosition(b) & 16);
+       };
+
+} else {
+       Sizzle.contains = function() {
+               return false;
+       };
+}
+
+Sizzle.isXML = function( elem ) {
+       // documentElement is verified for cases where it doesn't yet exist
+       // (such as loading iframes in IE - #4833) 
+       var documentElement = (elem ? elem.ownerDocument || elem : 0).documentElement;
+
+       return documentElement ? documentElement.nodeName !== "HTML" : false;
+};
+
+var posProcess = function( selector, context, seed ) {
+       var match,
+               tmpSet = [],
+               later = "",
+               root = context.nodeType ? [context] : context;
+
+       // Position selectors must be done after the filter
+       // And so must :not(positional) so we move all PSEUDOs to the end
+       while ( (match = Expr.match.PSEUDO.exec( selector )) ) {
+               later += match[0];
+               selector = selector.replace( Expr.match.PSEUDO, "" );
+       }
+
+       selector = Expr.relative[selector] ? selector + "*" : selector;
+
+       for ( var i = 0, l = root.length; i < l; i++ ) {
+               Sizzle( selector, root[i], tmpSet, seed );
+       }
+
+       return Sizzle.filter( later, tmpSet );
+};
+
+// EXPOSE
+// Override sizzle attribute retrieval
+Sizzle.attr = jQuery.attr;
+Sizzle.selectors.attrMap = {};
+jQuery.find = Sizzle;
+jQuery.expr = Sizzle.selectors;
+jQuery.expr[":"] = jQuery.expr.filters;
+jQuery.unique = Sizzle.uniqueSort;
+jQuery.text = Sizzle.getText;
+jQuery.isXMLDoc = Sizzle.isXML;
+jQuery.contains = Sizzle.contains;
+
+
+})();
+
+
+var runtil = /Until$/,
+       rparentsprev = /^(?:parents|prevUntil|prevAll)/,
+       // Note: This RegExp should be improved, or likely pulled from Sizzle
+       rmultiselector = /,/,
+       isSimple = /^.[^:#\[\.,]*$/,
+       slice = Array.prototype.slice,
+       POS = jQuery.expr.match.POS,
+       // methods guaranteed to produce a unique set when starting from a unique set
+       guaranteedUnique = {
+               children: true,
+               contents: true,
+               next: true,
+               prev: true
+       };
+
+jQuery.fn.extend({
+       find: function( selector ) {
+               var self = this,
+                       i, l;
+
+               if ( typeof selector !== "string" ) {
+                       return jQuery( selector ).filter(function() {
+                               for ( i = 0, l = self.length; i < l; i++ ) {
+                                       if ( jQuery.contains( self[ i ], this ) ) {
+                                               return true;
+                                       }
+                               }
+                       });
+               }
+
+               var ret = this.pushStack( "", "find", selector ),
+                       length, n, r;
+
+               for ( i = 0, l = this.length; i < l; i++ ) {
+                       length = ret.length;
+                       jQuery.find( selector, this[i], ret );
+
+                       if ( i > 0 ) {
+                               // Make sure that the results are unique
+                               for ( n = length; n < ret.length; n++ ) {
+                                       for ( r = 0; r < length; r++ ) {
+                                               if ( ret[r] === ret[n] ) {
+                                                       ret.splice(n--, 1);
+                                                       break;
+                                               }
+                                       }
+                               }
+                       }
+               }
+
+               return ret;
+       },
+
+       has: function( target ) {
+               var targets = jQuery( target );
+               return this.filter(function() {
+                       for ( var i = 0, l = targets.length; i < l; i++ ) {
+                               if ( jQuery.contains( this, targets[i] ) ) {
+                                       return true;
+                               }
+                       }
+               });
+       },
+
+       not: function( selector ) {
+               return this.pushStack( winnow(this, selector, false), "not", selector);
+       },
+
+       filter: function( selector ) {
+               return this.pushStack( winnow(this, selector, true), "filter", selector );
+       },
+
+       is: function( selector ) {
+               return !!selector && ( 
+                       typeof selector === "string" ?
+                               // If this is a positional selector, check membership in the returned set
+                               // so $("p:first").is("p:last") won't return true for a doc with two "p".
+                               POS.test( selector ) ? 
+                                       jQuery( selector, this.context ).index( this[0] ) >= 0 :
+                                       jQuery.filter( selector, this ).length > 0 :
+                               this.filter( selector ).length > 0 );
+       },
+
+       closest: function( selectors, context ) {
+               var ret = [], i, l, cur = this[0];
+               
+               // Array (deprecated as of jQuery 1.7)
+               if ( jQuery.isArray( selectors ) ) {
+                       var level = 1;
+
+                       while ( cur && cur.ownerDocument && cur !== context ) {
+                               for ( i = 0; i < selectors.length; i++ ) {
+
+                                       if ( jQuery( cur ).is( selectors[ i ] ) ) {
+                                               ret.push({ selector: selectors[ i ], elem: cur, level: level });
+                                       }
+                               }
+
+                               cur = cur.parentNode;
+                               level++;
+                       }
+
+                       return ret;
+               }
+
+               // String
+               var pos = POS.test( selectors ) || typeof selectors !== "string" ?
+                               jQuery( selectors, context || this.context ) :
+                               0;
+
+               for ( i = 0, l = this.length; i < l; i++ ) {
+                       cur = this[i];
+
+                       while ( cur ) {
+                               if ( pos ? pos.index(cur) > -1 : jQuery.find.matchesSelector(cur, selectors) ) {
+                                       ret.push( cur );
+                                       break;
+
+                               } else {
+                                       cur = cur.parentNode;
+                                       if ( !cur || !cur.ownerDocument || cur === context || cur.nodeType === 11 ) {
+                                               break;
+                                       }
+                               }
+                       }
+               }
+
+               ret = ret.length > 1 ? jQuery.unique( ret ) : ret;
+
+               return this.pushStack( ret, "closest", selectors );
+       },
+
+       // Determine the position of an element within
+       // the matched set of elements
+       index: function( elem ) {
+
+               // No argument, return index in parent
+               if ( !elem ) {
+                       return ( this[0] && this[0].parentNode ) ? this.prevAll().length : -1;
+               }
+
+               // index in selector
+               if ( typeof elem === "string" ) {
+                       return jQuery.inArray( this[0], jQuery( elem ) );
+               }
+
+               // Locate the position of the desired element
+               return jQuery.inArray(
+                       // If it receives a jQuery object, the first element is used
+                       elem.jquery ? elem[0] : elem, this );
+       },
+
+       add: function( selector, context ) {
+               var set = typeof selector === "string" ?
+                               jQuery( selector, context ) :
+                               jQuery.makeArray( selector && selector.nodeType ? [ selector ] : selector ),
+                       all = jQuery.merge( this.get(), set );
+
+               return this.pushStack( isDisconnected( set[0] ) || isDisconnected( all[0] ) ?
+                       all :
+                       jQuery.unique( all ) );
+       },
+
+       andSelf: function() {
+               return this.add( this.prevObject );
+       }
+});
+
+// A painfully simple check to see if an element is disconnected
+// from a document (should be improved, where feasible).
+function isDisconnected( node ) {
+       return !node || !node.parentNode || node.parentNode.nodeType === 11;
+}
+
+jQuery.each({
+       parent: function( elem ) {
+               var parent = elem.parentNode;
+               return parent && parent.nodeType !== 11 ? parent : null;
+       },
+       parents: function( elem ) {
+               return jQuery.dir( elem, "parentNode" );
+       },
+       parentsUntil: function( elem, i, until ) {
+               return jQuery.dir( elem, "parentNode", until );
+       },
+       next: function( elem ) {
+               return jQuery.nth( elem, 2, "nextSibling" );
+       },
+       prev: function( elem ) {
+               return jQuery.nth( elem, 2, "previousSibling" );
+       },
+       nextAll: function( elem ) {
+               return jQuery.dir( elem, "nextSibling" );
+       },
+       prevAll: function( elem ) {
+               return jQuery.dir( elem, "previousSibling" );
+       },
+       nextUntil: function( elem, i, until ) {
+               return jQuery.dir( elem, "nextSibling", until );
+       },
+       prevUntil: function( elem, i, until ) {
+               return jQuery.dir( elem, "previousSibling", until );
+       },
+       siblings: function( elem ) {
+               return jQuery.sibling( elem.parentNode.firstChild, elem );
+       },
+       children: function( elem ) {
+               return jQuery.sibling( elem.firstChild );
+       },
+       contents: function( elem ) {
+               return jQuery.nodeName( elem, "iframe" ) ?
+                       elem.contentDocument || elem.contentWindow.document :
+                       jQuery.makeArray( elem.childNodes );
+       }
+}, function( name, fn ) {
+       jQuery.fn[ name ] = function( until, selector ) {
+               var ret = jQuery.map( this, fn, until ),
+                       // The variable 'args' was introduced in
+                       // https://github.com/jquery/jquery/commit/52a0238
+                       // to work around a bug in Chrome 10 (Dev) and should be removed when the bug is fixed.
+                       // http://code.google.com/p/v8/issues/detail?id=1050
+                       args = slice.call(arguments);
+
+               if ( !runtil.test( name ) ) {
+                       selector = until;
+               }
+
+               if ( selector && typeof selector === "string" ) {
+                       ret = jQuery.filter( selector, ret );
+               }
+
+               ret = this.length > 1 && !guaranteedUnique[ name ] ? jQuery.unique( ret ) : ret;
+
+               if ( (this.length > 1 || rmultiselector.test( selector )) && rparentsprev.test( name ) ) {
+                       ret = ret.reverse();
+               }
+
+               return this.pushStack( ret, name, args.join(",") );
+       };
+});
+
+jQuery.extend({
+       filter: function( expr, elems, not ) {
+               if ( not ) {
+                       expr = ":not(" + expr + ")";
+               }
+
+               return elems.length === 1 ?
+                       jQuery.find.matchesSelector(elems[0], expr) ? [ elems[0] ] : [] :
+                       jQuery.find.matches(expr, elems);
+       },
+
+       dir: function( elem, dir, until ) {
+               var matched = [],
+                       cur = elem[ dir ];
+
+               while ( cur && cur.nodeType !== 9 && (until === undefined || cur.nodeType !== 1 || !jQuery( cur ).is( until )) ) {
+                       if ( cur.nodeType === 1 ) {
+                               matched.push( cur );
+                       }
+                       cur = cur[dir];
+               }
+               return matched;
+       },
+
+       nth: function( cur, result, dir, elem ) {
+               result = result || 1;
+               var num = 0;
+
+               for ( ; cur; cur = cur[dir] ) {
+                       if ( cur.nodeType === 1 && ++num === result ) {
+                               break;
+                       }
+               }
+
+               return cur;
+       },
+
+       sibling: function( n, elem ) {
+               var r = [];
+
+               for ( ; n; n = n.nextSibling ) {
+                       if ( n.nodeType === 1 && n !== elem ) {
+                               r.push( n );
+                       }
+               }
+
+               return r;
+       }
+});
+
+// Implement the identical functionality for filter and not
+function winnow( elements, qualifier, keep ) {
+
+       // Can't pass null or undefined to indexOf in Firefox 4
+       // Set to 0 to skip string check
+       qualifier = qualifier || 0;
+
+       if ( jQuery.isFunction( qualifier ) ) {
+               return jQuery.grep(elements, function( elem, i ) {
+                       var retVal = !!qualifier.call( elem, i, elem );
+                       return retVal === keep;
+               });
+
+       } else if ( qualifier.nodeType ) {
+               return jQuery.grep(elements, function( elem, i ) {
+                       return ( elem === qualifier ) === keep;
+               });
+
+       } else if ( typeof qualifier === "string" ) {
+               var filtered = jQuery.grep(elements, function( elem ) {
+                       return elem.nodeType === 1;
+               });
+
+               if ( isSimple.test( qualifier ) ) {
+                       return jQuery.filter(qualifier, filtered, !keep);
+               } else {
+                       qualifier = jQuery.filter( qualifier, filtered );
+               }
+       }
+
+       return jQuery.grep(elements, function( elem, i ) {
+               return ( jQuery.inArray( elem, qualifier ) >= 0 ) === keep;
+       });
+}
+
+
+
+
+function createSafeFragment( document ) {
+       var list = nodeNames.split( " " ),
+       safeFrag = document.createDocumentFragment();
+
+       if ( safeFrag.createElement ) {
+               while ( list.length ) {
+                       safeFrag.createElement(
+                               list.pop()
+                       );
+               }
+       }
+       return safeFrag;
+}
+
+var nodeNames = "abbr article aside audio canvas datalist details figcaption figure footer " +
+               "header hgroup mark meter nav output progress section summary time video",
+       rinlinejQuery = / jQuery\d+="(?:\d+|null)"/g,
+       rleadingWhitespace = /^\s+/,
+       rxhtmlTag = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/ig,
+       rtagName = /<([\w:]+)/,
+       rtbody = /<tbody/i,
+       rhtml = /<|&#?\w+;/,
+       rnoInnerhtml = /<(?:script|style)/i,
+       rnocache = /<(?:script|object|embed|option|style)/i,
+       rnoshimcache = new RegExp("<(?:" + nodeNames.replace(" ", "|") + ")", "i"),
+       // checked="checked" or checked
+       rchecked = /checked\s*(?:[^=]|=\s*.checked.)/i,
+       rscriptType = /\/(java|ecma)script/i,
+       rcleanScript = /^\s*<!(?:\[CDATA\[|\-\-)/,
+       wrapMap = {
+               option: [ 1, "<select multiple='multiple'>", "</select>" ],
+               legend: [ 1, "<fieldset>", "</fieldset>" ],
+               thead: [ 1, "<table>", "</table>" ],
+               tr: [ 2, "<table><tbody>", "</tbody></table>" ],
+               td: [ 3, "<table><tbody><tr>", "</tr></tbody></table>" ],
+               col: [ 2, "<table><tbody></tbody><colgroup>", "</colgroup></table>" ],
+               area: [ 1, "<map>", "</map>" ],
+               _default: [ 0, "", "" ]
+       },
+       safeFragment = createSafeFragment( document );
+
+wrapMap.optgroup = wrapMap.option;
+wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead;
+wrapMap.th = wrapMap.td;
+
+// IE can't serialize <link> and <script> tags normally
+if ( !jQuery.support.htmlSerialize ) {
+       wrapMap._default = [ 1, "div<div>", "</div>" ];
+}
+
+jQuery.fn.extend({
+       text: function( text ) {
+               if ( jQuery.isFunction(text) ) {
+                       return this.each(function(i) {
+                               var self = jQuery( this );
+
+                               self.text( text.call(this, i, self.text()) );
+                       });
+               }
+
+               if ( typeof text !== "object" && text !== undefined ) {
+                       return this.empty().append( (this[0] && this[0].ownerDocument || document).createTextNode( text ) );
+               }
+
+               return jQuery.text( this );
+       },
+
+       wrapAll: function( html ) {
+               if ( jQuery.isFunction( html ) ) {
+                       return this.each(function(i) {
+                               jQuery(this).wrapAll( html.call(this, i) );
+                       });
+               }
+
+               if ( this[0] ) {
+                       // The elements to wrap the target around
+                       var wrap = jQuery( html, this[0].ownerDocument ).eq(0).clone(true);
+
+                       if ( this[0].parentNode ) {
+                               wrap.insertBefore( this[0] );
+                       }
+
+                       wrap.map(function() {
+                               var elem = this;
+
+                               while ( elem.firstChild && elem.firstChild.nodeType === 1 ) {
+                                       elem = elem.firstChild;
+                               }
+
+                               return elem;
+                       }).append( this );
+               }
+
+               return this;
+       },
+
+       wrapInner: function( html ) {
+               if ( jQuery.isFunction( html ) ) {
+                       return this.each(function(i) {
+                               jQuery(this).wrapInner( html.call(this, i) );
+                       });
+               }
+
+               return this.each(function() {
+                       var self = jQuery( this ),
+                               contents = self.contents();
+
+                       if ( contents.length ) {
+                               contents.wrapAll( html );
+
+                       } else {
+                               self.append( html );
+                       }
+               });
+       },
+
+       wrap: function( html ) {
+               return this.each(function() {
+                       jQuery( this ).wrapAll( html );
+               });
+       },
+
+       unwrap: function() {
+               return this.parent().each(function() {
+                       if ( !jQuery.nodeName( this, "body" ) ) {
+                               jQuery( this ).replaceWith( this.childNodes );
+                       }
+               }).end();
+       },
+
+       append: function() {
+               return this.domManip(arguments, true, function( elem ) {
+                       if ( this.nodeType === 1 ) {
+                               this.appendChild( elem );
+                       }
+               });
+       },
+
+       prepend: function() {
+               return this.domManip(arguments, true, function( elem ) {
+                       if ( this.nodeType === 1 ) {
+                               this.insertBefore( elem, this.firstChild );
+                       }
+               });
+       },
+
+       before: function() {
+               if ( this[0] && this[0].parentNode ) {
+                       return this.domManip(arguments, false, function( elem ) {
+                               this.parentNode.insertBefore( elem, this );
+                       });
+               } else if ( arguments.length ) {
+                       var set = jQuery(arguments[0]);
+                       set.push.apply( set, this.toArray() );
+                       return this.pushStack( set, "before", arguments );
+               }
+       },
+
+       after: function() {
+               if ( this[0] && this[0].parentNode ) {
+                       return this.domManip(arguments, false, function( elem ) {
+                               this.parentNode.insertBefore( elem, this.nextSibling );
+                       });
+               } else if ( arguments.length ) {
+                       var set = this.pushStack( this, "after", arguments );
+                       set.push.apply( set, jQuery(arguments[0]).toArray() );
+                       return set;
+               }
+       },
+
+       // keepData is for internal use only--do not document
+       remove: function( selector, keepData ) {
+               for ( var i = 0, elem; (elem = this[i]) != null; i++ ) {
+                       if ( !selector || jQuery.filter( selector, [ elem ] ).length ) {
+                               if ( !keepData && elem.nodeType === 1 ) {
+                                       jQuery.cleanData( elem.getElementsByTagName("*") );
+                                       jQuery.cleanData( [ elem ] );
+                               }
+
+                               if ( elem.parentNode ) {
+                                       elem.parentNode.removeChild( elem );
+                               }
+                       }
+               }
+
+               return this;
+       },
+
+       empty: function() {
+               for ( var i = 0, elem; (elem = this[i]) != null; i++ ) {
+                       // Remove element nodes and prevent memory leaks
+                       if ( elem.nodeType === 1 ) {
+                               jQuery.cleanData( elem.getElementsByTagName("*") );
+                       }
+
+                       // Remove any remaining nodes
+                       while ( elem.firstChild ) {
+                               elem.removeChild( elem.firstChild );
+                       }
+               }
+
+               return this;
+       },
+
+       clone: function( dataAndEvents, deepDataAndEvents ) {
+               dataAndEvents = dataAndEvents == null ? false : dataAndEvents;
+               deepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents;
+
+               return this.map( function () {
+                       return jQuery.clone( this, dataAndEvents, deepDataAndEvents );
+               });
+       },
+
+       html: function( value ) {
+               if ( value === undefined ) {
+                       return this[0] && this[0].nodeType === 1 ?
+                               this[0].innerHTML.replace(rinlinejQuery, "") :
+                               null;
+
+               // See if we can take a shortcut and just use innerHTML
+               } else if ( typeof value === "string" && !rnoInnerhtml.test( value ) &&
+                       (jQuery.support.leadingWhitespace || !rleadingWhitespace.test( value )) &&
+                       !wrapMap[ (rtagName.exec( value ) || ["", ""])[1].toLowerCase() ] ) {
+
+                       value = value.replace(rxhtmlTag, "<$1></$2>");
+
+                       try {
+                               for ( var i = 0, l = this.length; i < l; i++ ) {
+                                       // Remove element nodes and prevent memory leaks
+                                       if ( this[i].nodeType === 1 ) {
+                                               jQuery.cleanData( this[i].getElementsByTagName("*") );
+                                               this[i].innerHTML = value;
+                                       }
+                               }
+
+                       // If using innerHTML throws an exception, use the fallback method
+                       } catch(e) {
+                               this.empty().append( value );
+                       }
+
+               } else if ( jQuery.isFunction( value ) ) {
+                       this.each(function(i){
+                               var self = jQuery( this );
+
+                               self.html( value.call(this, i, self.html()) );
+                       });
+
+               } else {
+                       this.empty().append( value );
+               }
+
+               return this;
+       },
+
+       replaceWith: function( value ) {
+               if ( this[0] && this[0].parentNode ) {
+                       // Make sure that the elements are removed from the DOM before they are inserted
+                       // this can help fix replacing a parent with child elements
+                       if ( jQuery.isFunction( value ) ) {
+                               return this.each(function(i) {
+                                       var self = jQuery(this), old = self.html();
+                                       self.replaceWith( value.call( this, i, old ) );
+                               });
+                       }
+
+                       if ( typeof value !== "string" ) {
+                               value = jQuery( value ).detach();
+                       }
+
+                       return this.each(function() {
+                               var next = this.nextSibling,
+                                       parent = this.parentNode;
+
+                               jQuery( this ).remove();
+
+                               if ( next ) {
+                                       jQuery(next).before( value );
+                               } else {
+                                       jQuery(parent).append( value );
+                               }
+                       });
+               } else {
+                       return this.length ?
+                               this.pushStack( jQuery(jQuery.isFunction(value) ? value() : value), "replaceWith", value ) :
+                               this;
+               }
+       },
+
+       detach: function( selector ) {
+               return this.remove( selector, true );
+       },
+
+       domManip: function( args, table, callback ) {
+               var results, first, fragment, parent,
+                       value = args[0],
+                       scripts = [];
+
+               // We can't cloneNode fragments that contain checked, in WebKit
+               if ( !jQuery.support.checkClone && arguments.length === 3 && typeof value === "string" && rchecked.test( value ) ) {
+                       return this.each(function() {
+                               jQuery(this).domManip( args, table, callback, true );
+                       });
+               }
+
+               if ( jQuery.isFunction(value) ) {
+                       return this.each(function(i) {
+                               var self = jQuery(this);
+                               args[0] = value.call(this, i, table ? self.html() : undefined);
+                               self.domManip( args, table, callback );
+                       });
+               }
+
+               if ( this[0] ) {
+                       parent = value && value.parentNode;
+
+                       // If we're in a fragment, just use that instead of building a new one
+                       if ( jQuery.support.parentNode && parent && parent.nodeType === 11 && parent.childNodes.length === this.length ) {
+                               results = { fragment: parent };
+
+                       } else {
+                               results = jQuery.buildFragment( args, this, scripts );
+                       }
+
+                       fragment = results.fragment;
+
+                       if ( fragment.childNodes.length === 1 ) {
+                               first = fragment = fragment.firstChild;
+                       } else {
+                               first = fragment.firstChild;
+                       }
+
+                       if ( first ) {
+                               table = table && jQuery.nodeName( first, "tr" );
+
+                               for ( var i = 0, l = this.length, lastIndex = l - 1; i < l; i++ ) {
+                                       callback.call(
+                                               table ?
+                                                       root(this[i], first) :
+                                                       this[i],
+                                               // Make sure that we do not leak memory by inadvertently discarding
+                                               // the original fragment (which might have attached data) instead of
+                                               // using it; in addition, use the original fragment object for the last
+                                               // item instead of first because it can end up being emptied incorrectly
+                                               // in certain situations (Bug #8070).
+                                               // Fragments from the fragment cache must always be cloned and never used
+                                               // in place.
+                                               results.cacheable || ( l > 1 && i < lastIndex ) ?
+                                                       jQuery.clone( fragment, true, true ) :
+                                                       fragment
+                                       );
+                               }
+                       }
+
+                       if ( scripts.length ) {
+                               jQuery.each( scripts, evalScript );
+                       }
+               }
+
+               return this;
+       }
+});
+
+function root( elem, cur ) {
+       return jQuery.nodeName(elem, "table") ?
+               (elem.getElementsByTagName("tbody")[0] ||
+               elem.appendChild(elem.ownerDocument.createElement("tbody"))) :
+               elem;
+}
+
+function cloneCopyEvent( src, dest ) {
+
+       if ( dest.nodeType !== 1 || !jQuery.hasData( src ) ) {
+               return;
+       }
+
+       var type, i, l,
+               oldData = jQuery._data( src ),
+               curData = jQuery._data( dest, oldData ),
+               events = oldData.events;
+
+       if ( events ) {
+               delete curData.handle;
+               curData.events = {};
+
+               for ( type in events ) {
+                       for ( i = 0, l = events[ type ].length; i < l; i++ ) {
+                               jQuery.event.add( dest, type + ( events[ type ][ i ].namespace ? "." : "" ) + events[ type ][ i ].namespace, events[ type ][ i ], events[ type ][ i ].data );
+                       }
+               }
+       }
+
+       // make the cloned public data object a copy from the original
+       if ( curData.data ) {
+               curData.data = jQuery.extend( {}, curData.data );
+       }
+}
+
+function cloneFixAttributes( src, dest ) {
+       var nodeName;
+
+       // We do not need to do anything for non-Elements
+       if ( dest.nodeType !== 1 ) {
+               return;
+       }
+
+       // clearAttributes removes the attributes, which we don't want,
+       // but also removes the attachEvent events, which we *do* want
+       if ( dest.clearAttributes ) {
+               dest.clearAttributes();
+       }
+
+       // mergeAttributes, in contrast, only merges back on the
+       // original attributes, not the events
+       if ( dest.mergeAttributes ) {
+               dest.mergeAttributes( src );
+       }
+
+       nodeName = dest.nodeName.toLowerCase();
+
+       // IE6-8 fail to clone children inside object elements that use
+       // the proprietary classid attribute value (rather than the type
+       // attribute) to identify the type of content to display
+       if ( nodeName === "object" ) {
+               dest.outerHTML = src.outerHTML;
+
+       } else if ( nodeName === "input" && (src.type === "checkbox" || src.type === "radio") ) {
+               // IE6-8 fails to persist the checked state of a cloned checkbox
+               // or radio button. Worse, IE6-7 fail to give the cloned element
+               // a checked appearance if the defaultChecked value isn't also set
+               if ( src.checked ) {
+                       dest.defaultChecked = dest.checked = src.checked;
+               }
+
+               // IE6-7 get confused and end up setting the value of a cloned
+               // checkbox/radio button to an empty string instead of "on"
+               if ( dest.value !== src.value ) {
+                       dest.value = src.value;
+               }
+
+       // IE6-8 fails to return the selected option to the default selected
+       // state when cloning options
+       } else if ( nodeName === "option" ) {
+               dest.selected = src.defaultSelected;
+
+       // IE6-8 fails to set the defaultValue to the correct value when
+       // cloning other types of input fields
+       } else if ( nodeName === "input" || nodeName === "textarea" ) {
+               dest.defaultValue = src.defaultValue;
+       }
+
+       // Event data gets referenced instead of copied if the expando
+       // gets copied too
+       dest.removeAttribute( jQuery.expando );
+}
+
+jQuery.buildFragment = function( args, nodes, scripts ) {
+       var fragment, cacheable, cacheresults, doc,
+       first = args[ 0 ];
+
+       // nodes may contain either an explicit document object,
+       // a jQuery collection or context object.
+       // If nodes[0] contains a valid object to assign to doc
+       if ( nodes && nodes[0] ) {
+               doc = nodes[0].ownerDocument || nodes[0];
+       }
+
+  // Ensure that an attr object doesn't incorrectly stand in as a document object
+       // Chrome and Firefox seem to allow this to occur and will throw exception
+       // Fixes #8950
+       if ( !doc.createDocumentFragment ) {
+               doc = document;
+       }
+
+       // Only cache "small" (1/2 KB) HTML strings that are associated with the main document
+       // Cloning options loses the selected state, so don't cache them
+       // IE 6 doesn't like it when you put <object> or <embed> elements in a fragment
+       // Also, WebKit does not clone 'checked' attributes on cloneNode, so don't cache
+       // Lastly, IE6,7,8 will not correctly reuse cached fragments that were created from unknown elems #10501
+       if ( args.length === 1 && typeof first === "string" && first.length < 512 && doc === document &&
+               first.charAt(0) === "<" && !rnocache.test( first ) &&
+               (jQuery.support.checkClone || !rchecked.test( first )) &&
+               (!jQuery.support.unknownElems && rnoshimcache.test( first )) ) {
+
+               cacheable = true;
+
+               cacheresults = jQuery.fragments[ first ];
+               if ( cacheresults && cacheresults !== 1 ) {
+                       fragment = cacheresults;
+               }
+       }
+
+       if ( !fragment ) {
+               fragment = doc.createDocumentFragment();
+               jQuery.clean( args, doc, fragment, scripts );
+       }
+
+       if ( cacheable ) {
+               jQuery.fragments[ first ] = cacheresults ? fragment : 1;
+       }
+
+       return { fragment: fragment, cacheable: cacheable };
+};
+
+jQuery.fragments = {};
+
+jQuery.each({
+       appendTo: "append",
+       prependTo: "prepend",
+       insertBefore: "before",
+       insertAfter: "after",
+       replaceAll: "replaceWith"
+}, function( name, original ) {
+       jQuery.fn[ name ] = function( selector ) {
+               var ret = [],
+                       insert = jQuery( selector ),
+                       parent = this.length === 1 && this[0].parentNode;
+
+               if ( parent && parent.nodeType === 11 && parent.childNodes.length === 1 && insert.length === 1 ) {
+                       insert[ original ]( this[0] );
+                       return this;
+
+               } else {
+                       for ( var i = 0, l = insert.length; i < l; i++ ) {
+                               var elems = ( i > 0 ? this.clone(true) : this ).get();
+                               jQuery( insert[i] )[ original ]( elems );
+                               ret = ret.concat( elems );
+                       }
+
+                       return this.pushStack( ret, name, insert.selector );
+               }
+       };
+});
+
+function getAll( elem ) {
+       if ( typeof elem.getElementsByTagName !== "undefined" ) {
+               return elem.getElementsByTagName( "*" );
+
+       } else if ( typeof elem.querySelectorAll !== "undefined" ) {
+               return elem.querySelectorAll( "*" );
+
+       } else {
+               return [];
+       }
+}
+
+// Used in clean, fixes the defaultChecked property
+function fixDefaultChecked( elem ) {
+       if ( elem.type === "checkbox" || elem.type === "radio" ) {
+               elem.defaultChecked = elem.checked;
+       }
+}
+// Finds all inputs and passes them to fixDefaultChecked
+function findInputs( elem ) {
+       var nodeName = ( elem.nodeName || "" ).toLowerCase();
+       if ( nodeName === "input" ) {
+               fixDefaultChecked( elem );
+       // Skip scripts, get other children
+       } else if ( nodeName !== "script" && typeof elem.getElementsByTagName !== "undefined" ) {
+               jQuery.grep( elem.getElementsByTagName("input"), fixDefaultChecked );
+       }
+}
+
+jQuery.extend({
+       clone: function( elem, dataAndEvents, deepDataAndEvents ) {
+               var clone = elem.cloneNode(true),
+                               srcElements,
+                               destElements,
+                               i;
+
+               if ( (!jQuery.support.noCloneEvent || !jQuery.support.noCloneChecked) &&
+                               (elem.nodeType === 1 || elem.nodeType === 11) && !jQuery.isXMLDoc(elem) ) {
+                       // IE copies events bound via attachEvent when using cloneNode.
+                       // Calling detachEvent on the clone will also remove the events
+                       // from the original. In order to get around this, we use some
+                       // proprietary methods to clear the events. Thanks to MooTools
+                       // guys for this hotness.
+
+                       cloneFixAttributes( elem, clone );
+
+                       // Using Sizzle here is crazy slow, so we use getElementsByTagName
+                       // instead
+                       srcElements = getAll( elem );
+                       destElements = getAll( clone );
+
+                       // Weird iteration because IE will replace the length property
+                       // with an element if you are cloning the body and one of the
+                       // elements on the page has a name or id of "length"
+                       for ( i = 0; srcElements[i]; ++i ) {
+                               // Ensure that the destination node is not null; Fixes #9587
+                               if ( destElements[i] ) {
+                                       cloneFixAttributes( srcElements[i], destElements[i] );
+                               }
+                       }
+               }
+
+               // Copy the events from the original to the clone
+               if ( dataAndEvents ) {
+                       cloneCopyEvent( elem, clone );
+
+                       if ( deepDataAndEvents ) {
+                               srcElements = getAll( elem );
+                               destElements = getAll( clone );
+
+                               for ( i = 0; srcElements[i]; ++i ) {
+                                       cloneCopyEvent( srcElements[i], destElements[i] );
+                               }
+                       }
+               }
+
+               srcElements = destElements = null;
+
+               // Return the cloned set
+               return clone;
+       },
+
+       clean: function( elems, context, fragment, scripts ) {
+               var checkScriptType;
+
+               context = context || document;
+
+               // !context.createElement fails in IE with an error but returns typeof 'object'
+               if ( typeof context.createElement === "undefined" ) {
+                       context = context.ownerDocument || context[0] && context[0].ownerDocument || document;
+               }
+
+               var ret = [], j;
+
+               for ( var i = 0, elem; (elem = elems[i]) != null; i++ ) {
+                       if ( typeof elem === "number" ) {
+                               elem += "";
+                       }
+
+                       if ( !elem ) {
+                               continue;
+                       }
+
+                       // Convert html string into DOM nodes
+                       if ( typeof elem === "string" ) {
+                               if ( !rhtml.test( elem ) ) {
+                                       elem = context.createTextNode( elem );
+                               } else {
+                                       // Fix "XHTML"-style tags in all browsers
+                                       elem = elem.replace(rxhtmlTag, "<$1></$2>");
+
+                                       // Trim whitespace, otherwise indexOf won't work as expected
+                                       var tag = ( rtagName.exec( elem ) || ["", ""] )[1].toLowerCase(),
+                                               wrap = wrapMap[ tag ] || wrapMap._default,
+                                               depth = wrap[0],
+                                               div = context.createElement("div");
+
+                                       // Append wrapper element to unknown element safe doc fragment
+                                       if ( context === document ) {
+                                               // Use the fragment we've already created for this document
+                                               safeFragment.appendChild( div );
+                                       } else {
+                                               // Use a fragment created with the owner document
+                                               createSafeFragment( context ).appendChild( div );
+                                       }
+
+                                       // Go to html and back, then peel off extra wrappers
+                                       div.innerHTML = wrap[1] + elem + wrap[2];
+
+                                       // Move to the right depth
+                                       while ( depth-- ) {
+                                               div = div.lastChild;
+                                       }
+
+                                       // Remove IE's autoinserted <tbody> from table fragments
+                                       if ( !jQuery.support.tbody ) {
+
+                                               // String was a <table>, *may* have spurious <tbody>
+                                               var hasBody = rtbody.test(elem),
+                                                       tbody = tag === "table" && !hasBody ?
+                                                               div.firstChild && div.firstChild.childNodes :
+
+                                                               // String was a bare <thead> or <tfoot>
+                                                               wrap[1] === "<table>" && !hasBody ?
+                                                                       div.childNodes :
+                                                                       [];
+
+                                               for ( j = tbody.length - 1; j >= 0 ; --j ) {
+                                                       if ( jQuery.nodeName( tbody[ j ], "tbody" ) && !tbody[ j ].childNodes.length ) {
+                                                               tbody[ j ].parentNode.removeChild( tbody[ j ] );
+                                                       }
+                                               }
+                                       }
+
+                                       // IE completely kills leading whitespace when innerHTML is used
+                                       if ( !jQuery.support.leadingWhitespace && rleadingWhitespace.test( elem ) ) {
+                                               div.insertBefore( context.createTextNode( rleadingWhitespace.exec(elem)[0] ), div.firstChild );
+                                       }
+
+                                       elem = div.childNodes;
+                               }
+                       }
+
+                       // Resets defaultChecked for any radios and checkboxes
+                       // about to be appended to the DOM in IE 6/7 (#8060)
+                       var len;
+                       if ( !jQuery.support.appendChecked ) {
+                               if ( elem[0] && typeof (len = elem.length) === "number" ) {
+                                       for ( j = 0; j < len; j++ ) {
+                                               findInputs( elem[j] );
+                                       }
+                               } else {
+                                       findInputs( elem );
+                               }
+                       }
+
+                       if ( elem.nodeType ) {
+                               ret.push( elem );
+                       } else {
+                               ret = jQuery.merge( ret, elem );
+                       }
+               }
+
+               if ( fragment ) {
+                       checkScriptType = function( elem ) {
+                               return !elem.type || rscriptType.test( elem.type );
+                       };
+                       for ( i = 0; ret[i]; i++ ) {
+                               if ( scripts && jQuery.nodeName( ret[i], "script" ) && (!ret[i].type || ret[i].type.toLowerCase() === "text/javascript") ) {
+                                       scripts.push( ret[i].parentNode ? ret[i].parentNode.removeChild( ret[i] ) : ret[i] );
+
+                               } else {
+                                       if ( ret[i].nodeType === 1 ) {
+                                               var jsTags = jQuery.grep( ret[i].getElementsByTagName( "script" ), checkScriptType );
+
+                                               ret.splice.apply( ret, [i + 1, 0].concat( jsTags ) );
+                                       }
+                                       fragment.appendChild( ret[i] );
+                               }
+                       }
+               }
+
+               return ret;
+       },
+
+       cleanData: function( elems ) {
+               var data, id,
+                       cache = jQuery.cache,
+                       special = jQuery.event.special,
+                       deleteExpando = jQuery.support.deleteExpando;
+
+               for ( var i = 0, elem; (elem = elems[i]) != null; i++ ) {
+                       if ( elem.nodeName && jQuery.noData[elem.nodeName.toLowerCase()] ) {
+                               continue;
+                       }
+
+                       id = elem[ jQuery.expando ];
+
+                       if ( id ) {
+                               data = cache[ id ];
+
+                               if ( data && data.events ) {
+                                       for ( var type in data.events ) {
+                                               if ( special[ type ] ) {
+                                                       jQuery.event.remove( elem, type );
+
+                                               // This is a shortcut to avoid jQuery.event.remove's overhead
+                                               } else {
+                                                       jQuery.removeEvent( elem, type, data.handle );
+                                               }
+                                       }
+
+                                       // Null the DOM reference to avoid IE6/7/8 leak (#7054)
+                                       if ( data.handle ) {
+                                               data.handle.elem = null;
+                                       }
+                               }
+
+                               if ( deleteExpando ) {
+                                       delete elem[ jQuery.expando ];
+
+                               } else if ( elem.removeAttribute ) {
+                                       elem.removeAttribute( jQuery.expando );
+                               }
+
+                               delete cache[ id ];
+                       }
+               }
+       }
+});
+
+function evalScript( i, elem ) {
+       if ( elem.src ) {
+               jQuery.ajax({
+                       url: elem.src,
+                       async: false,
+                       dataType: "script"
+               });
+       } else {
+               jQuery.globalEval( ( elem.text || elem.textContent || elem.innerHTML || "" ).replace( rcleanScript, "/*$0*/" ) );
+       }
+
+       if ( elem.parentNode ) {
+               elem.parentNode.removeChild( elem );
+       }
+}
+
+
+
+
+var ralpha = /alpha\([^)]*\)/i,
+       ropacity = /opacity=([^)]*)/,
+       // fixed for IE9, see #8346
+       rupper = /([A-Z]|^ms)/g,
+       rnumpx = /^-?\d+(?:px)?$/i,
+       rnum = /^-?\d/,
+       rrelNum = /^([\-+])=([\-+.\de]+)/,
+
+       cssShow = { position: "absolute", visibility: "hidden", display: "block" },
+       cssWidth = [ "Left", "Right" ],
+       cssHeight = [ "Top", "Bottom" ],
+       curCSS,
+
+       getComputedStyle,
+       currentStyle;
+
+jQuery.fn.css = function( name, value ) {
+       // Setting 'undefined' is a no-op
+       if ( arguments.length === 2 && value === undefined ) {
+               return this;
+       }
+
+       return jQuery.access( this, name, value, true, function( elem, name, value ) {
+               return value !== undefined ?
+                       jQuery.style( elem, name, value ) :
+                       jQuery.css( elem, name );
+       });
+};
+
+jQuery.extend({
+       // Add in style property hooks for overriding the default
+       // behavior of getting and setting a style property
+       cssHooks: {
+               opacity: {
+                       get: function( elem, computed ) {
+                               if ( computed ) {
+                                       // We should always get a number back from opacity
+                                       var ret = curCSS( elem, "opacity", "opacity" );
+                                       return ret === "" ? "1" : ret;
+
+                               } else {
+                                       return elem.style.opacity;
+                               }
+                       }
+               }
+       },
+
+       // Exclude the following css properties to add px
+       cssNumber: {
+               "fillOpacity": true,
+               "fontWeight": true,
+               "lineHeight": true,
+               "opacity": true,
+               "orphans": true,
+               "widows": true,
+               "zIndex": true,
+               "zoom": true
+       },
+
+       // Add in properties whose names you wish to fix before
+       // setting or getting the value
+       cssProps: {
+               // normalize float css property
+               "float": jQuery.support.cssFloat ? "cssFloat" : "styleFloat"
+       },
+
+       // Get and set the style property on a DOM Node
+       style: function( elem, name, value, extra ) {
+               // Don't set styles on text and comment nodes
+               if ( !elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style ) {
+                       return;
+               }
+
+               // Make sure that we're working with the right name
+               var ret, type, origName = jQuery.camelCase( name ),
+                       style = elem.style, hooks = jQuery.cssHooks[ origName ];
+
+               name = jQuery.cssProps[ origName ] || origName;
+
+               // Check if we're setting a value
+               if ( value !== undefined ) {
+                       type = typeof value;
+
+                       // convert relative number strings (+= or -=) to relative numbers. #7345
+                       if ( type === "string" && (ret = rrelNum.exec( value )) ) {
+                               value = ( +( ret[1] + 1) * +ret[2] ) + parseFloat( jQuery.css( elem, name ) );
+                               // Fixes bug #9237
+                               type = "number";
+                       }
+
+                       // Make sure that NaN and null values aren't set. See: #7116
+                       if ( value == null || type === "number" && isNaN( value ) ) {
+                               return;
+                       }
+
+                       // If a number was passed in, add 'px' to the (except for certain CSS properties)
+                       if ( type === "number" && !jQuery.cssNumber[ origName ] ) {
+                               value += "px";
+                       }
+
+                       // If a hook was provided, use that value, otherwise just set the specified value
+                       if ( !hooks || !("set" in hooks) || (value = hooks.set( elem, value )) !== undefined ) {
+                               // Wrapped to prevent IE from throwing errors when 'invalid' values are provided
+                               // Fixes bug #5509
+                               try {
+                                       style[ name ] = value;
+                               } catch(e) {}
+                       }
+
+               } else {
+                       // If a hook was provided get the non-computed value from there
+                       if ( hooks && "get" in hooks && (ret = hooks.get( elem, false, extra )) !== undefined ) {
+                               return ret;
+                       }
+
+                       // Otherwise just get the value from the style object
+                       return style[ name ];
+               }
+       },
+
+       css: function( elem, name, extra ) {
+               var ret, hooks;
+
+               // Make sure that we're working with the right name
+               name = jQuery.camelCase( name );
+               hooks = jQuery.cssHooks[ name ];
+               name = jQuery.cssProps[ name ] || name;
+
+               // cssFloat needs a special treatment
+               if ( name === "cssFloat" ) {
+                       name = "float";
+               }
+
+               // If a hook was provided get the computed value from there
+               if ( hooks && "get" in hooks && (ret = hooks.get( elem, true, extra )) !== undefined ) {
+                       return ret;
+
+               // Otherwise, if a way to get the computed value exists, use that
+               } else if ( curCSS ) {
+                       return curCSS( elem, name );
+               }
+       },
+
+       // A method for quickly swapping in/out CSS properties to get correct calculations
+       swap: function( elem, options, callback ) {
+               var old = {};
+
+               // Remember the old values, and insert the new ones
+               for ( var name in options ) {
+                       old[ name ] = elem.style[ name ];
+                       elem.style[ name ] = options[ name ];
+               }
+
+               callback.call( elem );
+
+               // Revert the old values
+               for ( name in options ) {
+                       elem.style[ name ] = old[ name ];
+               }
+       }
+});
+
+// DEPRECATED, Use jQuery.css() instead
+jQuery.curCSS = jQuery.css;
+
+jQuery.each(["height", "width"], function( i, name ) {
+       jQuery.cssHooks[ name ] = {
+               get: function( elem, computed, extra ) {
+                       var val;
+
+                       if ( computed ) {
+                               if ( elem.offsetWidth !== 0 ) {
+                                       return getWH( elem, name, extra );
+                               } else {
+                                       jQuery.swap( elem, cssShow, function() {
+                                               val = getWH( elem, name, extra );
+                                       });
+                               }
+
+                               return val;
+                       }
+               },
+
+               set: function( elem, value ) {
+                       if ( rnumpx.test( value ) ) {
+                               // ignore negative width and height values #1599
+                               value = parseFloat( value );
+
+                               if ( value >= 0 ) {
+                                       return value + "px";
+                               }
+
+                       } else {
+                               return value;
+                       }
+               }
+       };
+});
+
+if ( !jQuery.support.opacity ) {
+       jQuery.cssHooks.opacity = {
+               get: function( elem, computed ) {
+                       // IE uses filters for opacity
+                       return ropacity.test( (computed && elem.currentStyle ? elem.currentStyle.filter : elem.style.filter) || "" ) ?
+                               ( parseFloat( RegExp.$1 ) / 100 ) + "" :
+                               computed ? "1" : "";
+               },
+
+               set: function( elem, value ) {
+                       var style = elem.style,
+                               currentStyle = elem.currentStyle,
+                               opacity = jQuery.isNumeric( value ) ? "alpha(opacity=" + value * 100 + ")" : "",
+                               filter = currentStyle && currentStyle.filter || style.filter || "";
+
+                       // IE has trouble with opacity if it does not have layout
+                       // Force it by setting the zoom level
+                       style.zoom = 1;
+
+                       // if setting opacity to 1, and no other filters exist - attempt to remove filter attribute #6652
+                       if ( value >= 1 && jQuery.trim( filter.replace( ralpha, "" ) ) === "" ) {
+
+                               // Setting style.filter to null, "" & " " still leave "filter:" in the cssText
+                               // if "filter:" is present at all, clearType is disabled, we want to avoid this
+                               // style.removeAttribute is IE Only, but so apparently is this code path...
+                               style.removeAttribute( "filter" );
+
+                               // if there there is no filter style applied in a css rule, we are done
+                               if ( currentStyle && !currentStyle.filter ) {
+                                       return;
+                               }
+                       }
+
+                       // otherwise, set new filter values
+                       style.filter = ralpha.test( filter ) ?
+                               filter.replace( ralpha, opacity ) :
+                               filter + " " + opacity;
+               }
+       };
+}
+
+jQuery(function() {
+       // This hook cannot be added until DOM ready because the support test
+       // for it is not run until after DOM ready
+       if ( !jQuery.support.reliableMarginRight ) {
+               jQuery.cssHooks.marginRight = {
+                       get: function( elem, computed ) {
+                               // WebKit Bug 13343 - getComputedStyle returns wrong value for margin-right
+                               // Work around by temporarily setting element display to inline-block
+                               var ret;
+                               jQuery.swap( elem, { "display": "inline-block" }, function() {
+                                       if ( computed ) {
+                                               ret = curCSS( elem, "margin-right", "marginRight" );
+                                       } else {
+                                               ret = elem.style.marginRight;
+                                       }
+                               });
+                               return ret;
+                       }
+               };
+       }
+});
+
+if ( document.defaultView && document.defaultView.getComputedStyle ) {
+       getComputedStyle = function( elem, name ) {
+               var ret, defaultView, computedStyle;
+
+               name = name.replace( rupper, "-$1" ).toLowerCase();
+
+               if ( !(defaultView = elem.ownerDocument.defaultView) ) {
+                       return undefined;
+               }
+
+               if ( (computedStyle = defaultView.getComputedStyle( elem, null )) ) {
+                       ret = computedStyle.getPropertyValue( name );
+                       if ( ret === "" && !jQuery.contains( elem.ownerDocument.documentElement, elem ) ) {
+                               ret = jQuery.style( elem, name );
+                       }
+               }
+
+               return ret;
+       };
+}
+
+if ( document.documentElement.currentStyle ) {
+       currentStyle = function( elem, name ) {
+               var left, rsLeft, uncomputed,
+                       ret = elem.currentStyle && elem.currentStyle[ name ],
+                       style = elem.style;
+
+               // Avoid setting ret to empty string here
+               // so we don't default to auto
+               if ( ret === null && style && (uncomputed = style[ name ]) ) {
+                       ret = uncomputed;
+               }
+
+               // From the awesome hack by Dean Edwards
+               // http://erik.eae.net/archives/2007/07/27/18.54.15/#comment-102291
+
+               // If we're not dealing with a regular pixel number
+               // but a number that has a weird ending, we need to convert it to pixels
+               if ( !rnumpx.test( ret ) && rnum.test( ret ) ) {
+
+                       // Remember the original values
+                       left = style.left;
+                       rsLeft = elem.runtimeStyle && elem.runtimeStyle.left;
+
+                       // Put in the new values to get a computed value out
+                       if ( rsLeft ) {
+                               elem.runtimeStyle.left = elem.currentStyle.left;
+                       }
+                       style.left = name === "fontSize" ? "1em" : ( ret || 0 );
+                       ret = style.pixelLeft + "px";
+
+                       // Revert the changed values
+                       style.left = left;
+                       if ( rsLeft ) {
+                               elem.runtimeStyle.left = rsLeft;
+                       }
+               }
+
+               return ret === "" ? "auto" : ret;
+       };
+}
+
+curCSS = getComputedStyle || currentStyle;
+
+function getWH( elem, name, extra ) {
+
+       // Start with offset property
+       var val = name === "width" ? elem.offsetWidth : elem.offsetHeight,
+               which = name === "width" ? cssWidth : cssHeight;
+
+       if ( val > 0 ) {
+               if ( extra !== "border" ) {
+                       jQuery.each( which, function() {
+                               if ( !extra ) {
+                                       val -= parseFloat( jQuery.css( elem, "padding" + this ) ) || 0;
+                               }
+                               if ( extra === "margin" ) {
+                                       val += parseFloat( jQuery.css( elem, extra + this ) ) || 0;
+                               } else {
+                                       val -= parseFloat( jQuery.css( elem, "border" + this + "Width" ) ) || 0;
+                               }
+                       });
+               }
+
+               return val + "px";
+       }
+
+       // Fall back to computed then uncomputed css if necessary
+       val = curCSS( elem, name, name );
+       if ( val < 0 || val == null ) {
+               val = elem.style[ name ] || 0;
+       }
+       // Normalize "", auto, and prepare for extra
+       val = parseFloat( val ) || 0;
+
+       // Add padding, border, margin
+       if ( extra ) {
+               jQuery.each( which, function() {
+                       val += parseFloat( jQuery.css( elem, "padding" + this ) ) || 0;
+                       if ( extra !== "padding" ) {
+                               val += parseFloat( jQuery.css( elem, "border" + this + "Width" ) ) || 0;
+                       }
+                       if ( extra === "margin" ) {
+                               val += parseFloat( jQuery.css( elem, extra + this ) ) || 0;
+                       }
+               });
+       }
+
+       return val + "px";
+}
+
+if ( jQuery.expr && jQuery.expr.filters ) {
+       jQuery.expr.filters.hidden = function( elem ) {
+               var width = elem.offsetWidth,
+                       height = elem.offsetHeight;
+
+               return ( width === 0 && height === 0 ) || (!jQuery.support.reliableHiddenOffsets && ((elem.style && elem.style.display) || jQuery.css( elem, "display" )) === "none");
+       };
+
+       jQuery.expr.filters.visible = function( elem ) {
+               return !jQuery.expr.filters.hidden( elem );
+       };
+}
+
+
+
+
+var r20 = /%20/g,
+       rbracket = /\[\]$/,
+       rCRLF = /\r?\n/g,
+       rhash = /#.*$/,
+       rheaders = /^(.*?):[ \t]*([^\r\n]*)\r?$/mg, // IE leaves an \r character at EOL
+       rinput = /^(?:color|date|datetime|datetime-local|email|hidden|month|number|password|range|search|tel|text|time|url|week)$/i,
+       // #7653, #8125, #8152: local protocol detection
+       rlocalProtocol = /^(?:about|app|app\-storage|.+\-extension|file|res|widget):$/,
+       rnoContent = /^(?:GET|HEAD)$/,
+       rprotocol = /^\/\//,
+       rquery = /\?/,
+       rscript = /<script\b[^<]*(?:(?!<\/script>)<[^<]*)*<\/script>/gi,
+       rselectTextarea = /^(?:select|textarea)/i,
+       rspacesAjax = /\s+/,
+       rts = /([?&])_=[^&]*/,
+       rurl = /^([\w\+\.\-]+:)(?:\/\/([^\/?#:]*)(?::(\d+))?)?/,
+
+       // Keep a copy of the old load method
+       _load = jQuery.fn.load,
+
+       /* Prefilters
+        * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example)
+        * 2) These are called:
+        *    - BEFORE asking for a transport
+        *    - AFTER param serialization (s.data is a string if s.processData is true)
+        * 3) key is the dataType
+        * 4) the catchall symbol "*" can be used
+        * 5) execution will start with transport dataType and THEN continue down to "*" if needed
+        */
+       prefilters = {},
+
+       /* Transports bindings
+        * 1) key is the dataType
+        * 2) the catchall symbol "*" can be used
+        * 3) selection will start with transport dataType and THEN go to "*" if needed
+        */
+       transports = {},
+
+       // Document location
+       ajaxLocation,
+
+       // Document location segments
+       ajaxLocParts,
+
+       // Avoid comment-prolog char sequence (#10098); must appease lint and evade compression
+       allTypes = ["*/"] + ["*"];
+
+// #8138, IE may throw an exception when accessing
+// a field from window.location if document.domain has been set
+try {
+       ajaxLocation = location.href;
+} catch( e ) {
+       // Use the href attribute of an A element
+       // since IE will modify it given document.location
+       ajaxLocation = document.createElement( "a" );
+       ajaxLocation.href = "";
+       ajaxLocation = ajaxLocation.href;
+}
+
+// Segment location into parts
+ajaxLocParts = rurl.exec( ajaxLocation.toLowerCase() ) || [];
+
+// Base "constructor" for jQuery.ajaxPrefilter and jQuery.ajaxTransport
+function addToPrefiltersOrTransports( structure ) {
+
+       // dataTypeExpression is optional and defaults to "*"
+       return function( dataTypeExpression, func ) {
+
+               if ( typeof dataTypeExpression !== "string" ) {
+                       func = dataTypeExpression;
+                       dataTypeExpression = "*";
+               }
+
+               if ( jQuery.isFunction( func ) ) {
+                       var dataTypes = dataTypeExpression.toLowerCase().split( rspacesAjax ),
+                               i = 0,
+                               length = dataTypes.length,
+                               dataType,
+                               list,
+                               placeBefore;
+
+                       // For each dataType in the dataTypeExpression
+                       for ( ; i < length; i++ ) {
+                               dataType = dataTypes[ i ];
+                               // We control if we're asked to add before
+                               // any existing element
+                               placeBefore = /^\+/.test( dataType );
+                               if ( placeBefore ) {
+                                       dataType = dataType.substr( 1 ) || "*";
+                               }
+                               list = structure[ dataType ] = structure[ dataType ] || [];
+                               // then we add to the structure accordingly
+                               list[ placeBefore ? "unshift" : "push" ]( func );
+                       }
+               }
+       };
+}
+
+// Base inspection function for prefilters and transports
+function inspectPrefiltersOrTransports( structure, options, originalOptions, jqXHR,
+               dataType /* internal */, inspected /* internal */ ) {
+
+       dataType = dataType || options.dataTypes[ 0 ];
+       inspected = inspected || {};
+
+       inspected[ dataType ] = true;
+
+       var list = structure[ dataType ],
+               i = 0,
+               length = list ? list.length : 0,
+               executeOnly = ( structure === prefilters ),
+               selection;
+
+       for ( ; i < length && ( executeOnly || !selection ); i++ ) {
+               selection = list[ i ]( options, originalOptions, jqXHR );
+               // If we got redirected to another dataType
+               // we try there if executing only and not done already
+               if ( typeof selection === "string" ) {
+                       if ( !executeOnly || inspected[ selection ] ) {
+                               selection = undefined;
+                       } else {
+                               options.dataTypes.unshift( selection );
+                               selection = inspectPrefiltersOrTransports(
+                                               structure, options, originalOptions, jqXHR, selection, inspected );
+                       }
+               }
+       }
+       // If we're only executing or nothing was selected
+       // we try the catchall dataType if not done already
+       if ( ( executeOnly || !selection ) && !inspected[ "*" ] ) {
+               selection = inspectPrefiltersOrTransports(
+                               structure, options, originalOptions, jqXHR, "*", inspected );
+       }
+       // unnecessary when only executing (prefilters)
+       // but it'll be ignored by the caller in that case
+       return selection;
+}
+
+// A special extend for ajax options
+// that takes "flat" options (not to be deep extended)
+// Fixes #9887
+function ajaxExtend( target, src ) {
+       var key, deep,
+               flatOptions = jQuery.ajaxSettings.flatOptions || {};
+       for ( key in src ) {
+               if ( src[ key ] !== undefined ) {
+                       ( flatOptions[ key ] ? target : ( deep || ( deep = {} ) ) )[ key ] = src[ key ];
+               }
+       }
+       if ( deep ) {
+               jQuery.extend( true, target, deep );
+       }
+}
+
+jQuery.fn.extend({
+       load: function( url, params, callback ) {
+               if ( typeof url !== "string" && _load ) {
+                       return _load.apply( this, arguments );
+
+               // Don't do a request if no elements are being requested
+               } else if ( !this.length ) {
+                       return this;
+               }
+
+               var off = url.indexOf( " " );
+               if ( off >= 0 ) {
+                       var selector = url.slice( off, url.length );
+                       url = url.slice( 0, off );
+               }
+
+               // Default to a GET request
+               var type = "GET";
+
+               // If the second parameter was provided
+               if ( params ) {
+                       // If it's a function
+                       if ( jQuery.isFunction( params ) ) {
+                               // We assume that it's the callback
+                               callback = params;
+                               params = undefined;
+
+                       // Otherwise, build a param string
+                       } else if ( typeof params === "object" ) {
+                               params = jQuery.param( params, jQuery.ajaxSettings.traditional );
+                               type = "POST";
+                       }
+               }
+
+               var self = this;
+
+               // Request the remote document
+               jQuery.ajax({
+                       url: url,
+                       type: type,
+                       dataType: "html",
+                       data: params,
+                       // Complete callback (responseText is used internally)
+                       complete: function( jqXHR, status, responseText ) {
+                               // Store the response as specified by the jqXHR object
+                               responseText = jqXHR.responseText;
+                               // If successful, inject the HTML into all the matched elements
+                               if ( jqXHR.isResolved() ) {
+                                       // #4825: Get the actual response in case
+                                       // a dataFilter is present in ajaxSettings
+                                       jqXHR.done(function( r ) {
+                                               responseText = r;
+                                       });
+                                       // See if a selector was specified
+                                       self.html( selector ?
+                                               // Create a dummy div to hold the results
+                                               jQuery("<div>")
+                                                       // inject the contents of the document in, removing the scripts
+                                                       // to avoid any 'Permission Denied' errors in IE
+                                                       .append(responseText.replace(rscript, ""))
+
+                                                       // Locate the specified elements
+                                                       .find(selector) :
+
+                                               // If not, just inject the full result
+                                               responseText );
+                               }
+
+                               if ( callback ) {
+                                       self.each( callback, [ responseText, status, jqXHR ] );
+                               }
+                       }
+               });
+
+               return this;
+       },
+
+       serialize: function() {
+               return jQuery.param( this.serializeArray() );
+       },
+
+       serializeArray: function() {
+               return this.map(function(){
+                       return this.elements ? jQuery.makeArray( this.elements ) : this;
+               })
+               .filter(function(){
+                       return this.name && !this.disabled &&
+                               ( this.checked || rselectTextarea.test( this.nodeName ) ||
+                                       rinput.test( this.type ) );
+               })
+               .map(function( i, elem ){
+                       var val = jQuery( this ).val();
+
+                       return val == null ?
+                               null :
+                               jQuery.isArray( val ) ?
+                                       jQuery.map( val, function( val, i ){
+                                               return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) };
+                                       }) :
+                                       { name: elem.name, value: val.replace( rCRLF, "\r\n" ) };
+               }).get();
+       }
+});
+
+// Attach a bunch of functions for handling common AJAX events
+jQuery.each( "ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split( " " ), function( i, o ){
+       jQuery.fn[ o ] = function( f ){
+               return this.bind( o, f );
+       };
+});
+
+jQuery.each( [ "get", "post" ], function( i, method ) {
+       jQuery[ method ] = function( url, data, callback, type ) {
+               // shift arguments if data argument was omitted
+               if ( jQuery.isFunction( data ) ) {
+                       type = type || callback;
+                       callback = data;
+                       data = undefined;
+               }
+
+               return jQuery.ajax({
+                       type: method,
+                       url: url,
+                       data: data,
+                       success: callback,
+                       dataType: type
+               });
+       };
+});
+
+jQuery.extend({
+
+       getScript: function( url, callback ) {
+               return jQuery.get( url, undefined, callback, "script" );
+       },
+
+       getJSON: function( url, data, callback ) {
+               return jQuery.get( url, data, callback, "json" );
+       },
+
+       // Creates a full fledged settings object into target
+       // with both ajaxSettings and settings fields.
+       // If target is omitted, writes into ajaxSettings.
+       ajaxSetup: function( target, settings ) {
+               if ( settings ) {
+                       // Building a settings object
+                       ajaxExtend( target, jQuery.ajaxSettings );
+               } else {
+                       // Extending ajaxSettings
+                       settings = target;
+                       target = jQuery.ajaxSettings;
+               }
+               ajaxExtend( target, settings );
+               return target;
+       },
+
+       ajaxSettings: {
+               url: ajaxLocation,
+               isLocal: rlocalProtocol.test( ajaxLocParts[ 1 ] ),
+               global: true,
+               type: "GET",
+               contentType: "application/x-www-form-urlencoded",
+               processData: true,
+               async: true,
+               /*
+               timeout: 0,
+               data: null,
+               dataType: null,
+               username: null,
+               password: null,
+               cache: null,
+               traditional: false,
+               headers: {},
+               */
+
+               accepts: {
+                       xml: "application/xml, text/xml",
+                       html: "text/html",
+                       text: "text/plain",
+                       json: "application/json, text/javascript",
+                       "*": allTypes
+               },
+
+               contents: {
+                       xml: /xml/,
+                       html: /html/,
+                       json: /json/
+               },
+
+               responseFields: {
+                       xml: "responseXML",
+                       text: "responseText"
+               },
+
+               // List of data converters
+               // 1) key format is "source_type destination_type" (a single space in-between)
+               // 2) the catchall symbol "*" can be used for source_type
+               converters: {
+
+                       // Convert anything to text
+                       "* text": window.String,
+
+                       // Text to html (true = no transformation)
+                       "text html": true,
+
+                       // Evaluate text as a json expression
+                       "text json": jQuery.parseJSON,
+
+                       // Parse text as xml
+                       "text xml": jQuery.parseXML
+               },
+
+               // For options that shouldn't be deep extended:
+               // you can add your own custom options here if
+               // and when you create one that shouldn't be
+               // deep extended (see ajaxExtend)
+               flatOptions: {
+                       context: true,
+                       url: true
+               }
+       },
+
+       ajaxPrefilter: addToPrefiltersOrTransports( prefilters ),
+       ajaxTransport: addToPrefiltersOrTransports( transports ),
+
+       // Main method
+       ajax: function( url, options ) {
+
+               // If url is an object, simulate pre-1.5 signature
+               if ( typeof url === "object" ) {
+                       options = url;
+                       url = undefined;
+               }
+
+               // Force options to be an object
+               options = options || {};
+
+               var // Create the final options object
+                       s = jQuery.ajaxSetup( {}, options ),
+                       // Callbacks context
+                       callbackContext = s.context || s,
+                       // Context for global events
+                       // It's the callbackContext if one was provided in the options
+                       // and if it's a DOM node or a jQuery collection
+                       globalEventContext = callbackContext !== s &&
+                               ( callbackContext.nodeType || callbackContext instanceof jQuery ) ?
+                                               jQuery( callbackContext ) : jQuery.event,
+                       // Deferreds
+                       deferred = jQuery.Deferred(),
+                       completeDeferred = jQuery.Callbacks( "once memory" ),
+                       // Status-dependent callbacks
+                       statusCode = s.statusCode || {},
+                       // ifModified key
+                       ifModifiedKey,
+                       // Headers (they are sent all at once)
+                       requestHeaders = {},
+                       requestHeadersNames = {},
+                       // Response headers
+                       responseHeadersString,
+                       responseHeaders,
+                       // transport
+                       transport,
+                       // timeout handle
+                       timeoutTimer,
+                       // Cross-domain detection vars
+                       parts,
+                       // The jqXHR state
+                       state = 0,
+                       // To know if global events are to be dispatched
+                       fireGlobals,
+                       // Loop variable
+                       i,
+                       // Fake xhr
+                       jqXHR = {
+
+                               readyState: 0,
+
+                               // Caches the header
+                               setRequestHeader: function( name, value ) {
+                                       if ( !state ) {
+                                               var lname = name.toLowerCase();
+                                               name = requestHeadersNames[ lname ] = requestHeadersNames[ lname ] || name;
+                                               requestHeaders[ name ] = value;
+                                       }
+                                       return this;
+                               },
+
+                               // Raw string
+                               getAllResponseHeaders: function() {
+                                       return state === 2 ? responseHeadersString : null;
+                               },
+
+                               // Builds headers hashtable if needed
+                               getResponseHeader: function( key ) {
+                                       var match;
+                                       if ( state === 2 ) {
+                                               if ( !responseHeaders ) {
+                                                       responseHeaders = {};
+                                                       while( ( match = rheaders.exec( responseHeadersString ) ) ) {
+                                                               responseHeaders[ match[1].toLowerCase() ] = match[ 2 ];
+                                                       }
+                                               }
+                                               match = responseHeaders[ key.toLowerCase() ];
+                                       }
+                                       return match === undefined ? null : match;
+                               },
+
+                               // Overrides response content-type header
+                               overrideMimeType: function( type ) {
+                                       if ( !state ) {
+                                               s.mimeType = type;
+                                       }
+                                       return this;
+                               },
+
+                               // Cancel the request
+                               abort: function( statusText ) {
+                                       statusText = statusText || "abort";
+                                       if ( transport ) {
+                                               transport.abort( statusText );
+                                       }
+                                       done( 0, statusText );
+                                       return this;
+                               }
+                       };
+
+               // Callback for when everything is done
+               // It is defined here because jslint complains if it is declared
+               // at the end of the function (which would be more logical and readable)
+               function done( status, nativeStatusText, responses, headers ) {
+
+                       // Called once
+                       if ( state === 2 ) {
+                               return;
+                       }
+
+                       // State is "done" now
+                       state = 2;
+
+                       // Clear timeout if it exists
+                       if ( timeoutTimer ) {
+                               clearTimeout( timeoutTimer );
+                       }
+
+                       // Dereference transport for early garbage collection
+                       // (no matter how long the jqXHR object will be used)
+                       transport = undefined;
+
+                       // Cache response headers
+                       responseHeadersString = headers || "";
+
+                       // Set readyState
+                       jqXHR.readyState = status > 0 ? 4 : 0;
+
+                       var isSuccess,
+                               success,
+                               error,
+                               statusText = nativeStatusText,
+                               response = responses ? ajaxHandleResponses( s, jqXHR, responses ) : undefined,
+                               lastModified,
+                               etag;
+
+                       // If successful, handle type chaining
+                       if ( status >= 200 && status < 300 || status === 304 ) {
+
+                               // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.
+                               if ( s.ifModified ) {
+
+                                       if ( ( lastModified = jqXHR.getResponseHeader( "Last-Modified" ) ) ) {
+                                               jQuery.lastModified[ ifModifiedKey ] = lastModified;
+                                       }
+                                       if ( ( etag = jqXHR.getResponseHeader( "Etag" ) ) ) {
+                                               jQuery.etag[ ifModifiedKey ] = etag;
+                                       }
+                               }
+
+                               // If not modified
+                               if ( status === 304 ) {
+
+                                       statusText = "notmodified";
+                                       isSuccess = true;
+
+                               // If we have data
+                               } else {
+
+                                       try {
+                                               success = ajaxConvert( s, response );
+                                               statusText = "success";
+                                               isSuccess = true;
+                                       } catch(e) {
+                                               // We have a parsererror
+                                               statusText = "parsererror";
+                                               error = e;
+                                       }
+                               }
+                       } else {
+                               // We extract error from statusText
+                               // then normalize statusText and status for non-aborts
+                               error = statusText;
+                               if ( !statusText || status ) {
+                                       statusText = "error";
+                                       if ( status < 0 ) {
+                                               status = 0;
+                                       }
+                               }
+                       }
+
+                       // Set data for the fake xhr object
+                       jqXHR.status = status;
+                       jqXHR.statusText = "" + ( nativeStatusText || statusText );
+
+                       // Success/Error
+                       if ( isSuccess ) {
+                               deferred.resolveWith( callbackContext, [ success, statusText, jqXHR ] );
+                       } else {
+                               deferred.rejectWith( callbackContext, [ jqXHR, statusText, error ] );
+                       }
+
+                       // Status-dependent callbacks
+                       jqXHR.statusCode( statusCode );
+                       statusCode = undefined;
+
+                       if ( fireGlobals ) {
+                               globalEventContext.trigger( "ajax" + ( isSuccess ? "Success" : "Error" ),
+                                               [ jqXHR, s, isSuccess ? success : error ] );
+                       }
+
+                       // Complete
+                       completeDeferred.fireWith( callbackContext, [ jqXHR, statusText ] );
+
+                       if ( fireGlobals ) {
+                               globalEventContext.trigger( "ajaxComplete", [ jqXHR, s ] );
+                               // Handle the global AJAX counter
+                               if ( !( --jQuery.active ) ) {
+                                       jQuery.event.trigger( "ajaxStop" );
+                               }
+                       }
+               }
+
+               // Attach deferreds
+               deferred.promise( jqXHR );
+               jqXHR.success = jqXHR.done;
+               jqXHR.error = jqXHR.fail;
+               jqXHR.complete = completeDeferred.add;
+
+               // Status-dependent callbacks
+               jqXHR.statusCode = function( map ) {
+                       if ( map ) {
+                               var tmp;
+                               if ( state < 2 ) {
+                                       for ( tmp in map ) {
+                                               statusCode[ tmp ] = [ statusCode[tmp], map[tmp] ];
+                                       }
+                               } else {
+                                       tmp = map[ jqXHR.status ];
+                                       jqXHR.then( tmp, tmp );
+                               }
+                       }
+                       return this;
+               };
+
+               // Remove hash character (#7531: and string promotion)
+               // Add protocol if not provided (#5866: IE7 issue with protocol-less urls)
+               // We also use the url parameter if available
+               s.url = ( ( url || s.url ) + "" ).replace( rhash, "" ).replace( rprotocol, ajaxLocParts[ 1 ] + "//" );
+
+               // Extract dataTypes list
+               s.dataTypes = jQuery.trim( s.dataType || "*" ).toLowerCase().split( rspacesAjax );
+
+               // Determine if a cross-domain request is in order
+               if ( s.crossDomain == null ) {
+                       parts = rurl.exec( s.url.toLowerCase() );
+                       s.crossDomain = !!( parts &&
+                               ( parts[ 1 ] != ajaxLocParts[ 1 ] || parts[ 2 ] != ajaxLocParts[ 2 ] ||
+                                       ( parts[ 3 ] || ( parts[ 1 ] === "http:" ? 80 : 443 ) ) !=
+                                               ( ajaxLocParts[ 3 ] || ( ajaxLocParts[ 1 ] === "http:" ? 80 : 443 ) ) )
+                       );
+               }
+
+               // Convert data if not already a string
+               if ( s.data && s.processData && typeof s.data !== "string" ) {
+                       s.data = jQuery.param( s.data, s.traditional );
+               }
+
+               // Apply prefilters
+               inspectPrefiltersOrTransports( prefilters, s, options, jqXHR );
+
+               // If request was aborted inside a prefiler, stop there
+               if ( state === 2 ) {
+                       return false;
+               }
+
+               // We can fire global events as of now if asked to
+               fireGlobals = s.global;
+
+               // Uppercase the type
+               s.type = s.type.toUpperCase();
+
+               // Determine if request has content
+               s.hasContent = !rnoContent.test( s.type );
+
+               // Watch for a new set of requests
+               if ( fireGlobals && jQuery.active++ === 0 ) {
+                       jQuery.event.trigger( "ajaxStart" );
+               }
+
+               // More options handling for requests with no content
+               if ( !s.hasContent ) {
+
+                       // If data is available, append data to url
+                       if ( s.data ) {
+                               s.url += ( rquery.test( s.url ) ? "&" : "?" ) + s.data;
+                               // #9682: remove data so that it's not used in an eventual retry
+                               delete s.data;
+                       }
+
+                       // Get ifModifiedKey before adding the anti-cache parameter
+                       ifModifiedKey = s.url;
+
+                       // Add anti-cache in url if needed
+                       if ( s.cache === false ) {
+
+                               var ts = jQuery.now(),
+                                       // try replacing _= if it is there
+                                       ret = s.url.replace( rts, "$1_=" + ts );
+
+                               // if nothing was replaced, add timestamp to the end
+                               s.url = ret + ( ( ret === s.url ) ? ( rquery.test( s.url ) ? "&" : "?" ) + "_=" + ts : "" );
+                       }
+               }
+
+               // Set the correct header, if data is being sent
+               if ( s.data && s.hasContent && s.contentType !== false || options.contentType ) {
+                       jqXHR.setRequestHeader( "Content-Type", s.contentType );
+               }
+
+               // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.
+               if ( s.ifModified ) {
+                       ifModifiedKey = ifModifiedKey || s.url;
+                       if ( jQuery.lastModified[ ifModifiedKey ] ) {
+                               jqXHR.setRequestHeader( "If-Modified-Since", jQuery.lastModified[ ifModifiedKey ] );
+                       }
+                       if ( jQuery.etag[ ifModifiedKey ] ) {
+                               jqXHR.setRequestHeader( "If-None-Match", jQuery.etag[ ifModifiedKey ] );
+                       }
+               }
+
+               // Set the Accepts header for the server, depending on the dataType
+               jqXHR.setRequestHeader(
+                       "Accept",
+                       s.dataTypes[ 0 ] && s.accepts[ s.dataTypes[0] ] ?
+                               s.accepts[ s.dataTypes[0] ] + ( s.dataTypes[ 0 ] !== "*" ? ", " + allTypes + "; q=0.01" : "" ) :
+                               s.accepts[ "*" ]
+               );
+
+               // Check for headers option
+               for ( i in s.headers ) {
+                       jqXHR.setRequestHeader( i, s.headers[ i ] );
+               }
+
+               // Allow custom headers/mimetypes and early abort
+               if ( s.beforeSend && ( s.beforeSend.call( callbackContext, jqXHR, s ) === false || state === 2 ) ) {
+                               // Abort if not done already
+                               jqXHR.abort();
+                               return false;
+
+               }
+
+               // Install callbacks on deferreds
+               for ( i in { success: 1, error: 1, complete: 1 } ) {
+                       jqXHR[ i ]( s[ i ] );
+               }
+
+               // Get transport
+               transport = inspectPrefiltersOrTransports( transports, s, options, jqXHR );
+
+               // If no transport, we auto-abort
+               if ( !transport ) {
+                       done( -1, "No Transport" );
+               } else {
+                       jqXHR.readyState = 1;
+                       // Send global event
+                       if ( fireGlobals ) {
+                               globalEventContext.trigger( "ajaxSend", [ jqXHR, s ] );
+                       }
+                       // Timeout
+                       if ( s.async && s.timeout > 0 ) {
+                               timeoutTimer = setTimeout( function(){
+                                       jqXHR.abort( "timeout" );
+                               }, s.timeout );
+                       }
+
+                       try {
+                               state = 1;
+                               transport.send( requestHeaders, done );
+                       } catch (e) {
+                               // Propagate exception as error if not done
+                               if ( state < 2 ) {
+                                       done( -1, e );
+                               // Simply rethrow otherwise
+                               } else {
+                                       jQuery.error( e );
+                               }
+                       }
+               }
+
+               return jqXHR;
+       },
+
+       // Serialize an array of form elements or a set of
+       // key/values into a query string
+       param: function( a, traditional ) {
+               var s = [],
+                       add = function( key, value ) {
+                               // If value is a function, invoke it and return its value
+                               value = jQuery.isFunction( value ) ? value() : value;
+                               s[ s.length ] = encodeURIComponent( key ) + "=" + encodeURIComponent( value );
+                       };
+
+               // Set traditional to true for jQuery <= 1.3.2 behavior.
+               if ( traditional === undefined ) {
+                       traditional = jQuery.ajaxSettings.traditional;
+               }
+
+               // If an array was passed in, assume that it is an array of form elements.
+               if ( jQuery.isArray( a ) || ( a.jquery && !jQuery.isPlainObject( a ) ) ) {
+                       // Serialize the form elements
+                       jQuery.each( a, function() {
+                               add( this.name, this.value );
+                       });
+
+               } else {
+                       // If traditional, encode the "old" way (the way 1.3.2 or older
+                       // did it), otherwise encode params recursively.
+                       for ( var prefix in a ) {
+                               buildParams( prefix, a[ prefix ], traditional, add );
+                       }
+               }
+
+               // Return the resulting serialization
+               return s.join( "&" ).replace( r20, "+" );
+       }
+});
+
+function buildParams( prefix, obj, traditional, add ) {
+       if ( jQuery.isArray( obj ) ) {
+               // Serialize array item.
+               jQuery.each( obj, function( i, v ) {
+                       if ( traditional || rbracket.test( prefix ) ) {
+                               // Treat each array item as a scalar.
+                               add( prefix, v );
+
+                       } else {
+                               // If array item is non-scalar (array or object), encode its
+                               // numeric index to resolve deserialization ambiguity issues.
+                               // Note that rack (as of 1.0.0) can't currently deserialize
+                               // nested arrays properly, and attempting to do so may cause
+                               // a server error. Possible fixes are to modify rack's
+                               // deserialization algorithm or to provide an option or flag
+                               // to force array serialization to be shallow.
+                               buildParams( prefix + "[" + ( typeof v === "object" || jQuery.isArray(v) ? i : "" ) + "]", v, traditional, add );
+                       }
+               });
+
+       } else if ( !traditional && obj != null && typeof obj === "object" ) {
+               // Serialize object item.
+               for ( var name in obj ) {
+                       buildParams( prefix + "[" + name + "]", obj[ name ], traditional, add );
+               }
+
+       } else {
+               // Serialize scalar item.
+               add( prefix, obj );
+       }
+}
+
+// This is still on the jQuery object... for now
+// Want to move this to jQuery.ajax some day
+jQuery.extend({
+
+       // Counter for holding the number of active queries
+       active: 0,
+
+       // Last-Modified header cache for next request
+       lastModified: {},
+       etag: {}
+
+});
+
+/* Handles responses to an ajax request:
+ * - sets all responseXXX fields accordingly
+ * - finds the right dataType (mediates between content-type and expected dataType)
+ * - returns the corresponding response
+ */
+function ajaxHandleResponses( s, jqXHR, responses ) {
+
+       var contents = s.contents,
+               dataTypes = s.dataTypes,
+               responseFields = s.responseFields,
+               ct,
+               type,
+               finalDataType,
+               firstDataType;
+
+       // Fill responseXXX fields
+       for ( type in responseFields ) {
+               if ( type in responses ) {
+                       jqXHR[ responseFields[type] ] = responses[ type ];
+               }
+       }
+
+       // Remove auto dataType and get content-type in the process
+       while( dataTypes[ 0 ] === "*" ) {
+               dataTypes.shift();
+               if ( ct === undefined ) {
+                       ct = s.mimeType || jqXHR.getResponseHeader( "content-type" );
+               }
+       }
+
+       // Check if we're dealing with a known content-type
+       if ( ct ) {
+               for ( type in contents ) {
+                       if ( contents[ type ] && contents[ type ].test( ct ) ) {
+                               dataTypes.unshift( type );
+                               break;
+                       }
+               }
+       }
+
+       // Check to see if we have a response for the expected dataType
+       if ( dataTypes[ 0 ] in responses ) {
+               finalDataType = dataTypes[ 0 ];
+       } else {
+               // Try convertible dataTypes
+               for ( type in responses ) {
+                       if ( !dataTypes[ 0 ] || s.converters[ type + " " + dataTypes[0] ] ) {
+                               finalDataType = type;
+                               break;
+                       }
+                       if ( !firstDataType ) {
+                               firstDataType = type;
+                       }
+               }
+               // Or just use first one
+               finalDataType = finalDataType || firstDataType;
+       }
+
+       // If we found a dataType
+       // We add the dataType to the list if needed
+       // and return the corresponding response
+       if ( finalDataType ) {
+               if ( finalDataType !== dataTypes[ 0 ] ) {
+                       dataTypes.unshift( finalDataType );
+               }
+               return responses[ finalDataType ];
+       }
+}
+
+// Chain conversions given the request and the original response
+function ajaxConvert( s, response ) {
+
+       // Apply the dataFilter if provided
+       if ( s.dataFilter ) {
+               response = s.dataFilter( response, s.dataType );
+       }
+
+       var dataTypes = s.dataTypes,
+               converters = {},
+               i,
+               key,
+               length = dataTypes.length,
+               tmp,
+               // Current and previous dataTypes
+               current = dataTypes[ 0 ],
+               prev,
+               // Conversion expression
+               conversion,
+               // Conversion function
+               conv,
+               // Conversion functions (transitive conversion)
+               conv1,
+               conv2;
+
+       // For each dataType in the chain
+       for ( i = 1; i < length; i++ ) {
+
+               // Create converters map
+               // with lowercased keys
+               if ( i === 1 ) {
+                       for ( key in s.converters ) {
+                               if ( typeof key === "string" ) {
+                                       converters[ key.toLowerCase() ] = s.converters[ key ];
+                               }
+                       }
+               }
+
+               // Get the dataTypes
+               prev = current;
+               current = dataTypes[ i ];
+
+               // If current is auto dataType, update it to prev
+               if ( current === "*" ) {
+                       current = prev;
+               // If no auto and dataTypes are actually different
+               } else if ( prev !== "*" && prev !== current ) {
+
+                       // Get the converter
+                       conversion = prev + " " + current;
+                       conv = converters[ conversion ] || converters[ "* " + current ];
+
+                       // If there is no direct converter, search transitively
+                       if ( !conv ) {
+                               conv2 = undefined;
+                               for ( conv1 in converters ) {
+                                       tmp = conv1.split( " " );
+                                       if ( tmp[ 0 ] === prev || tmp[ 0 ] === "*" ) {
+                                               conv2 = converters[ tmp[1] + " " + current ];
+                                               if ( conv2 ) {
+                                                       conv1 = converters[ conv1 ];
+                                                       if ( conv1 === true ) {
+                                                               conv = conv2;
+                                                       } else if ( conv2 === true ) {
+                                                               conv = conv1;
+                                                       }
+                                                       break;
+                                               }
+                                       }
+                               }
+                       }
+                       // If we found no converter, dispatch an error
+                       if ( !( conv || conv2 ) ) {
+                               jQuery.error( "No conversion from " + conversion.replace(" "," to ") );
+                       }
+                       // If found converter is not an equivalence
+                       if ( conv !== true ) {
+                               // Convert with 1 or 2 converters accordingly
+                               response = conv ? conv( response ) : conv2( conv1(response) );
+                       }
+               }
+       }
+       return response;
+}
+
+
+
+
+var jsc = jQuery.now(),
+       jsre = /(\=)\?(&|$)|\?\?/i;
+
+// Default jsonp settings
+jQuery.ajaxSetup({
+       jsonp: "callback",
+       jsonpCallback: function() {
+               return jQuery.expando + "_" + ( jsc++ );
+       }
+});
+
+// Detect, normalize options and install callbacks for jsonp requests
+jQuery.ajaxPrefilter( "json jsonp", function( s, originalSettings, jqXHR ) {
+
+       var inspectData = s.contentType === "application/x-www-form-urlencoded" &&
+               ( typeof s.data === "string" );
+
+       if ( s.dataTypes[ 0 ] === "jsonp" ||
+               s.jsonp !== false && ( jsre.test( s.url ) ||
+                               inspectData && jsre.test( s.data ) ) ) {
+
+               var responseContainer,
+                       jsonpCallback = s.jsonpCallback =
+                               jQuery.isFunction( s.jsonpCallback ) ? s.jsonpCallback() : s.jsonpCallback,
+                       previous = window[ jsonpCallback ],
+                       url = s.url,
+                       data = s.data,
+                       replace = "$1" + jsonpCallback + "$2";
+
+               if ( s.jsonp !== false ) {
+                       url = url.replace( jsre, replace );
+                       if ( s.url === url ) {
+                               if ( inspectData ) {
+                                       data = data.replace( jsre, replace );
+                               }
+                               if ( s.data === data ) {
+                                       // Add callback manually
+                                       url += (/\?/.test( url ) ? "&" : "?") + s.jsonp + "=" + jsonpCallback;
+                               }
+                       }
+               }
+
+               s.url = url;
+               s.data = data;
+
+               // Install callback
+               window[ jsonpCallback ] = function( response ) {
+                       responseContainer = [ response ];
+               };
+
+               // Clean-up function
+               jqXHR.always(function() {
+                       // Set callback back to previous value
+                       window[ jsonpCallback ] = previous;
+                       // Call if it was a function and we have a response
+                       if ( responseContainer && jQuery.isFunction( previous ) ) {
+                               window[ jsonpCallback ]( responseContainer[ 0 ] );
+                       }
+               });
+
+               // Use data converter to retrieve json after script execution
+               s.converters["script json"] = function() {
+                       if ( !responseContainer ) {
+                               jQuery.error( jsonpCallback + " was not called" );
+                       }
+                       return responseContainer[ 0 ];
+               };
+
+               // force json dataType
+               s.dataTypes[ 0 ] = "json";
+
+               // Delegate to script
+               return "script";
+       }
+});
+
+
+
+
+// Install script dataType
+jQuery.ajaxSetup({
+       accepts: {
+               script: "text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"
+       },
+       contents: {
+               script: /javascript|ecmascript/
+       },
+       converters: {
+               "text script": function( text ) {
+                       jQuery.globalEval( text );
+                       return text;
+               }
+       }
+});
+
+// Handle cache's special case and global
+jQuery.ajaxPrefilter( "script", function( s ) {
+       if ( s.cache === undefined ) {
+               s.cache = false;
+       }
+       if ( s.crossDomain ) {
+               s.type = "GET";
+               s.global = false;
+       }
+});
+
+// Bind script tag hack transport
+jQuery.ajaxTransport( "script", function(s) {
+
+       // This transport only deals with cross domain requests
+       if ( s.crossDomain ) {
+
+               var script,
+                       head = document.head || document.getElementsByTagName( "head" )[0] || document.documentElement;
+
+               return {
+
+                       send: function( _, callback ) {
+
+                               script = document.createElement( "script" );
+
+                               script.async = "async";
+
+                               if ( s.scriptCharset ) {
+                                       script.charset = s.scriptCharset;
+                               }
+
+                               script.src = s.url;
+
+                               // Attach handlers for all browsers
+                               script.onload = script.onreadystatechange = function( _, isAbort ) {
+
+                                       if ( isAbort || !script.readyState || /loaded|complete/.test( script.readyState ) ) {
+
+                                               // Handle memory leak in IE
+                                               script.onload = script.onreadystatechange = null;
+
+                                               // Remove the script
+                                               if ( head && script.parentNode ) {
+                                                       head.removeChild( script );
+                                               }
+
+                                               // Dereference the script
+                                               script = undefined;
+
+                                               // Callback if not abort
+                                               if ( !isAbort ) {
+                                                       callback( 200, "success" );
+                                               }
+                                       }
+                               };
+                               // Use insertBefore instead of appendChild  to circumvent an IE6 bug.
+                               // This arises when a base node is used (#2709 and #4378).
+                               head.insertBefore( script, head.firstChild );
+                       },
+
+                       abort: function() {
+                               if ( script ) {
+                                       script.onload( 0, 1 );
+                               }
+                       }
+               };
+       }
+});
+
+
+
+
+var // #5280: Internet Explorer will keep connections alive if we don't abort on unload
+       xhrOnUnloadAbort = window.ActiveXObject ? function() {
+               // Abort all pending requests
+               for ( var key in xhrCallbacks ) {
+                       xhrCallbacks[ key ]( 0, 1 );
+               }
+       } : false,
+       xhrId = 0,
+       xhrCallbacks;
+
+// Functions to create xhrs
+function createStandardXHR() {
+       try {
+               return new window.XMLHttpRequest();
+       } catch( e ) {}
+}
+
+function createActiveXHR() {
+       try {
+               return new window.ActiveXObject( "Microsoft.XMLHTTP" );
+       } catch( e ) {}
+}
+
+// Create the request object
+// (This is still attached to ajaxSettings for backward compatibility)
+jQuery.ajaxSettings.xhr = window.ActiveXObject ?
+       /* Microsoft failed to properly
+        * implement the XMLHttpRequest in IE7 (can't request local files),
+        * so we use the ActiveXObject when it is available
+        * Additionally XMLHttpRequest can be disabled in IE7/IE8 so
+        * we need a fallback.
+        */
+       function() {
+               return !this.isLocal && createStandardXHR() || createActiveXHR();
+       } :
+       // For all other browsers, use the standard XMLHttpRequest object
+       createStandardXHR;
+
+// Determine support properties
+(function( xhr ) {
+       jQuery.extend( jQuery.support, {
+               ajax: !!xhr,
+               cors: !!xhr && ( "withCredentials" in xhr )
+       });
+})( jQuery.ajaxSettings.xhr() );
+
+// Create transport if the browser can provide an xhr
+if ( jQuery.support.ajax ) {
+
+       jQuery.ajaxTransport(function( s ) {
+               // Cross domain only allowed if supported through XMLHttpRequest
+               if ( !s.crossDomain || jQuery.support.cors ) {
+
+                       var callback;
+
+                       return {
+                               send: function( headers, complete ) {
+
+                                       // Get a new xhr
+                                       var xhr = s.xhr(),
+                                               handle,
+                                               i;
+
+                                       // Open the socket
+                                       // Passing null username, generates a login popup on Opera (#2865)
+                                       if ( s.username ) {
+                                               xhr.open( s.type, s.url, s.async, s.username, s.password );
+                                       } else {
+                                               xhr.open( s.type, s.url, s.async );
+                                       }
+
+                                       // Apply custom fields if provided
+                                       if ( s.xhrFields ) {
+                                               for ( i in s.xhrFields ) {
+                                                       xhr[ i ] = s.xhrFields[ i ];
+                                               }
+                                       }
+
+                                       // Override mime type if needed
+                                       if ( s.mimeType && xhr.overrideMimeType ) {
+                                               xhr.overrideMimeType( s.mimeType );
+                                       }
+
+                                       // X-Requested-With header
+                                       // For cross-domain requests, seeing as conditions for a preflight are
+                                       // akin to a jigsaw puzzle, we simply never set it to be sure.
+                                       // (it can always be set on a per-request basis or even using ajaxSetup)
+                                       // For same-domain requests, won't change header if already provided.
+                                       if ( !s.crossDomain && !headers["X-Requested-With"] ) {
+                                               headers[ "X-Requested-With" ] = "XMLHttpRequest";
+                                       }
+
+                                       // Need an extra try/catch for cross domain requests in Firefox 3
+                                       try {
+                                               for ( i in headers ) {
+                                                       xhr.setRequestHeader( i, headers[ i ] );
+                                               }
+                                       } catch( _ ) {}
+
+                                       // Do send the request
+                                       // This may raise an exception which is actually
+                                       // handled in jQuery.ajax (so no try/catch here)
+                                       xhr.send( ( s.hasContent && s.data ) || null );
+
+                                       // Listener
+                                       callback = function( _, isAbort ) {
+
+                                               var status,
+                                                       statusText,
+                                                       responseHeaders,
+                                                       responses,
+                                                       xml;
+
+                                               // Firefox throws exceptions when accessing properties
+                                               // of an xhr when a network error occured
+                                               // http://helpful.knobs-dials.com/index.php/Component_returned_failure_code:_0x80040111_(NS_ERROR_NOT_AVAILABLE)
+                                               try {
+
+                                                       // Was never called and is aborted or complete
+                                                       if ( callback && ( isAbort || xhr.readyState === 4 ) ) {
+
+                                                               // Only called once
+                                                               callback = undefined;
+
+                                                               // Do not keep as active anymore
+                                                               if ( handle ) {
+                                                                       xhr.onreadystatechange = jQuery.noop;
+                                                                       if ( xhrOnUnloadAbort ) {
+                                                                               delete xhrCallbacks[ handle ];
+                                                                       }
+                                                               }
+
+                                                               // If it's an abort
+                                                               if ( isAbort ) {
+                                                                       // Abort it manually if needed
+                                                                       if ( xhr.readyState !== 4 ) {
+                                                                               xhr.abort();
+                                                                       }
+                                                               } else {
+                                                                       status = xhr.status;
+                                                                       responseHeaders = xhr.getAllResponseHeaders();
+                                                                       responses = {};
+                                                                       xml = xhr.responseXML;
+
+                                                                       // Construct response list
+                                                                       if ( xml && xml.documentElement /* #4958 */ ) {
+                                                                               responses.xml = xml;
+                                                                       }
+                                                                       responses.text = xhr.responseText;
+
+                                                                       // Firefox throws an exception when accessing
+                                                                       // statusText for faulty cross-domain requests
+                                                                       try {
+                                                                               statusText = xhr.statusText;
+                                                                       } catch( e ) {
+                                                                               // We normalize with Webkit giving an empty statusText
+                                                                               statusText = "";
+                                                                       }
+
+                                                                       // Filter status for non standard behaviors
+
+                                                                       // If the request is local and we have data: assume a success
+                                                                       // (success with no data won't get notified, that's the best we
+                                                                       // can do given current implementations)
+                                                                       if ( !status && s.isLocal && !s.crossDomain ) {
+                                                                               status = responses.text ? 200 : 404;
+                                                                       // IE - #1450: sometimes returns 1223 when it should be 204
+                                                                       } else if ( status === 1223 ) {
+                                                                               status = 204;
+                                                                       }
+                                                               }
+                                                       }
+                                               } catch( firefoxAccessException ) {
+                                                       if ( !isAbort ) {
+                                                               complete( -1, firefoxAccessException );
+                                                       }
+                                               }
+
+                                               // Call complete if needed
+                                               if ( responses ) {
+                                                       complete( status, statusText, responses, responseHeaders );
+                                               }
+                                       };
+
+                                       // if we're in sync mode or it's in cache
+                                       // and has been retrieved directly (IE6 & IE7)
+                                       // we need to manually fire the callback
+                                       if ( !s.async || xhr.readyState === 4 ) {
+                                               callback();
+                                       } else {
+                                               handle = ++xhrId;
+                                               if ( xhrOnUnloadAbort ) {
+                                                       // Create the active xhrs callbacks list if needed
+                                                       // and attach the unload handler
+                                                       if ( !xhrCallbacks ) {
+                                                               xhrCallbacks = {};
+                                                               jQuery( window ).unload( xhrOnUnloadAbort );
+                                                       }
+                                                       // Add to list of active xhrs callbacks
+                                                       xhrCallbacks[ handle ] = callback;
+                                               }
+                                               xhr.onreadystatechange = callback;
+                                       }
+                               },
+
+                               abort: function() {
+                                       if ( callback ) {
+                                               callback(0,1);
+                                       }
+                               }
+                       };
+               }
+       });
+}
+
+
+
+
+var elemdisplay = {},
+       iframe, iframeDoc,
+       rfxtypes = /^(?:toggle|show|hide)$/,
+       rfxnum = /^([+\-]=)?([\d+.\-]+)([a-z%]*)$/i,
+       timerId,
+       fxAttrs = [
+               // height animations
+               [ "height", "marginTop", "marginBottom", "paddingTop", "paddingBottom" ],
+               // width animations
+               [ "width", "marginLeft", "marginRight", "paddingLeft", "paddingRight" ],
+               // opacity animations
+               [ "opacity" ]
+       ],
+       fxNow;
+
+jQuery.fn.extend({
+       show: function( speed, easing, callback ) {
+               var elem, display;
+
+               if ( speed || speed === 0 ) {
+                       return this.animate( genFx("show", 3), speed, easing, callback );
+
+               } else {
+                       for ( var i = 0, j = this.length; i < j; i++ ) {
+                               elem = this[ i ];
+
+                               if ( elem.style ) {
+                                       display = elem.style.display;
+
+                                       // Reset the inline display of this element to learn if it is
+                                       // being hidden by cascaded rules or not
+                                       if ( !jQuery._data(elem, "olddisplay") && display === "none" ) {
+                                               display = elem.style.display = "";
+                                       }
+
+                                       // Set elements which have been overridden with display: none
+                                       // in a stylesheet to whatever the default browser style is
+                                       // for such an element
+                                       if ( display === "" && jQuery.css(elem, "display") === "none" ) {
+                                               jQuery._data( elem, "olddisplay", defaultDisplay(elem.nodeName) );
+                                       }
+                               }
+                       }
+
+                       // Set the display of most of the elements in a second loop
+                       // to avoid the constant reflow
+                       for ( i = 0; i < j; i++ ) {
+                               elem = this[ i ];
+
+                               if ( elem.style ) {
+                                       display = elem.style.display;
+
+                                       if ( display === "" || display === "none" ) {
+                                               elem.style.display = jQuery._data( elem, "olddisplay" ) || "";
+                                       }
+                               }
+                       }
+
+                       return this;
+               }
+       },
+
+       hide: function( speed, easing, callback ) {
+               if ( speed || speed === 0 ) {
+                       return this.animate( genFx("hide", 3), speed, easing, callback);
+
+               } else {
+                       var elem, display,
+                               i = 0,
+                               j = this.length;
+
+                       for ( ; i < j; i++ ) {
+                               elem = this[i];
+                               if ( elem.style ) {
+                                       display = jQuery.css( elem, "display" );
+
+                                       if ( display !== "none" && !jQuery._data( elem, "olddisplay" ) ) {
+                                               jQuery._data( elem, "olddisplay", display );
+                                       }
+                               }
+                       }
+
+                       // Set the display of the elements in a second loop
+                       // to avoid the constant reflow
+                       for ( i = 0; i < j; i++ ) {
+                               if ( this[i].style ) {
+                                       this[i].style.display = "none";
+                               }
+                       }
+
+                       return this;
+               }
+       },
+
+       // Save the old toggle function
+       _toggle: jQuery.fn.toggle,
+
+       toggle: function( fn, fn2, callback ) {
+               var bool = typeof fn === "boolean";
+
+               if ( jQuery.isFunction(fn) && jQuery.isFunction(fn2) ) {
+                       this._toggle.apply( this, arguments );
+
+               } else if ( fn == null || bool ) {
+                       this.each(function() {
+                               var state = bool ? fn : jQuery(this).is(":hidden");
+                               jQuery(this)[ state ? "show" : "hide" ]();
+                       });
+
+               } else {
+                       this.animate(genFx("toggle", 3), fn, fn2, callback);
+               }
+
+               return this;
+       },
+
+       fadeTo: function( speed, to, easing, callback ) {
+               return this.filter(":hidden").css("opacity", 0).show().end()
+                                       .animate({opacity: to}, speed, easing, callback);
+       },
+
+       animate: function( prop, speed, easing, callback ) {
+               var optall = jQuery.speed( speed, easing, callback );
+
+               if ( jQuery.isEmptyObject( prop ) ) {
+                       return this.each( optall.complete, [ false ] );
+               }
+
+               // Do not change referenced properties as per-property easing will be lost
+               prop = jQuery.extend( {}, prop );
+
+               function doAnimation() {
+                       // XXX 'this' does not always have a nodeName when running the
+                       // test suite
+
+                       if ( optall.queue === false ) {
+                               jQuery._mark( this );
+                       }
+
+                       var opt = jQuery.extend( {}, optall ),
+                               isElement = this.nodeType === 1,
+                               hidden = isElement && jQuery(this).is(":hidden"),
+                               name, val, p, e,
+                               parts, start, end, unit,
+                               method;
+
+                       // will store per property easing and be used to determine when an animation is complete
+                       opt.animatedProperties = {};
+
+                       for ( p in prop ) {
+
+                               // property name normalization
+                               name = jQuery.camelCase( p );
+                               if ( p !== name ) {
+                                       prop[ name ] = prop[ p ];
+                                       delete prop[ p ];
+                               }
+
+                               val = prop[ name ];
+
+                               // easing resolution: per property > opt.specialEasing > opt.easing > 'swing' (default)
+                               if ( jQuery.isArray( val ) ) {
+                                       opt.animatedProperties[ name ] = val[ 1 ];
+                                       val = prop[ name ] = val[ 0 ];
+                               } else {
+                                       opt.animatedProperties[ name ] = opt.specialEasing && opt.specialEasing[ name ] || opt.easing || 'swing';
+                               }
+
+                               if ( val === "hide" && hidden || val === "show" && !hidden ) {
+                                       return opt.complete.call( this );
+                               }
+
+                               if ( isElement && ( name === "height" || name === "width" ) ) {
+                                       // Make sure that nothing sneaks out
+                                       // Record all 3 overflow attributes because IE does not
+                                       // change the overflow attribute when overflowX and
+                                       // overflowY are set to the same value
+                                       opt.overflow = [ this.style.overflow, this.style.overflowX, this.style.overflowY ];
+
+                                       // Set display property to inline-block for height/width
+                                       // animations on inline elements that are having width/height animated
+                                       if ( jQuery.css( this, "display" ) === "inline" &&
+                                                       jQuery.css( this, "float" ) === "none" ) {
+
+                                               // inline-level elements accept inline-block;
+                                               // block-level elements need to be inline with layout
+                                               if ( !jQuery.support.inlineBlockNeedsLayout || defaultDisplay( this.nodeName ) === "inline" ) {
+                                                       this.style.display = "inline-block";
+
+                                               } else {
+                                                       this.style.zoom = 1;
+                                               }
+                                       }
+                               }
+                       }
+
+                       if ( opt.overflow != null ) {
+                               this.style.overflow = "hidden";
+                       }
+
+                       for ( p in prop ) {
+                               e = new jQuery.fx( this, opt, p );
+                               val = prop[ p ];
+
+                               if ( rfxtypes.test( val ) ) {
+
+                                       // Tracks whether to show or hide based on private
+                                       // data attached to the element
+                                       method = jQuery._data( this, "toggle" + p ) || ( val === "toggle" ? hidden ? "show" : "hide" : 0 );
+                                       if ( method ) {
+                                               jQuery._data( this, "toggle" + p, method === "show" ? "hide" : "show" );
+                                               e[ method ]();
+                                       } else {
+                                               e[ val ]();
+                                       }
+
+                               } else {
+                                       parts = rfxnum.exec( val );
+                                       start = e.cur();
+
+                                       if ( parts ) {
+                                               end = parseFloat( parts[2] );
+                                               unit = parts[3] || ( jQuery.cssNumber[ p ] ? "" : "px" );
+
+                                               // We need to compute starting value
+                                               if ( unit !== "px" ) {
+                                                       jQuery.style( this, p, (end || 1) + unit);
+                                                       start = ( (end || 1) / e.cur() ) * start;
+                                                       jQuery.style( this, p, start + unit);
+                                               }
+
+                                               // If a +=/-= token was provided, we're doing a relative animation
+                                               if ( parts[1] ) {
+                                                       end = ( (parts[ 1 ] === "-=" ? -1 : 1) * end ) + start;
+                                               }
+
+                                               e.custom( start, end, unit );
+
+                                       } else {
+                                               e.custom( start, val, "" );
+                                       }
+                               }
+                       }
+
+                       // For JS strict compliance
+                       return true;
+               }
+
+               return optall.queue === false ?
+                       this.each( doAnimation ) :
+                       this.queue( optall.queue, doAnimation );
+       },
+
+       stop: function( type, clearQueue, gotoEnd ) {
+               if ( typeof type !== "string" ) {
+                       gotoEnd = clearQueue;
+                       clearQueue = type;
+                       type = undefined;
+               }
+               if ( clearQueue && type !== false ) {
+                       this.queue( type || "fx", [] );
+               }
+
+               return this.each(function() {
+                       var i,
+                               hadTimers = false,
+                               timers = jQuery.timers,
+                               data = jQuery._data( this );
+
+                       // clear marker counters if we know they won't be
+                       if ( !gotoEnd ) {
+                               jQuery._unmark( true, this );
+                       }
+
+                       function stopQueue( elem, data, i ) {
+                               var hooks = data[ i ];
+                               jQuery.removeData( elem, i, true );
+                               hooks.stop( gotoEnd );
+                       }
+
+                       if ( type == null ) {
+                               for ( i in data ) {
+                                       if ( data[ i ].stop && i.indexOf(".run") === i.length - 4 ) {
+                                               stopQueue( this, data, i );
+                                       }
+                               }
+                       } else if ( data[ i = type + ".run" ] && data[ i ].stop ){
+                               stopQueue( this, data, i );
+                       }
+
+                       for ( i = timers.length; i--; ) {
+                               if ( timers[ i ].elem === this && (type == null || timers[ i ].queue === type) ) {
+                                       if ( gotoEnd ) {
+
+                                               // force the next step to be the last
+                                               timers[ i ]( true );
+                                       } else {
+                                               timers[ i ].saveState();
+                                       }
+                                       hadTimers = true;
+                                       timers.splice( i, 1 );
+                               }
+                       }
+
+                       // start the next in the queue if the last step wasn't forced
+                       // timers currently will call their complete callbacks, which will dequeue
+                       // but only if they were gotoEnd
+                       if ( !( gotoEnd && hadTimers ) ) {
+                               jQuery.dequeue( this, type );
+                       }
+               });
+       }
+
+});
+
+// Animations created synchronously will run synchronously
+function createFxNow() {
+       setTimeout( clearFxNow, 0 );
+       return ( fxNow = jQuery.now() );
+}
+
+function clearFxNow() {
+       fxNow = undefined;
+}
+
+// Generate parameters to create a standard animation
+function genFx( type, num ) {
+       var obj = {};
+
+       jQuery.each( fxAttrs.concat.apply([], fxAttrs.slice( 0, num )), function() {
+               obj[ this ] = type;
+       });
+
+       return obj;
+}
+
+// Generate shortcuts for custom animations
+jQuery.each({
+       slideDown: genFx( "show", 1 ),
+       slideUp: genFx( "hide", 1 ),
+       slideToggle: genFx( "toggle", 1 ),
+       fadeIn: { opacity: "show" },
+       fadeOut: { opacity: "hide" },
+       fadeToggle: { opacity: "toggle" }
+}, function( name, props ) {
+       jQuery.fn[ name ] = function( speed, easing, callback ) {
+               return this.animate( props, speed, easing, callback );
+       };
+});
+
+jQuery.extend({
+       speed: function( speed, easing, fn ) {
+               var opt = speed && typeof speed === "object" ? jQuery.extend( {}, speed ) : {
+                       complete: fn || !fn && easing ||
+                               jQuery.isFunction( speed ) && speed,
+                       duration: speed,
+                       easing: fn && easing || easing && !jQuery.isFunction( easing ) && easing
+               };
+
+               opt.duration = jQuery.fx.off ? 0 : typeof opt.duration === "number" ? opt.duration :
+                       opt.duration in jQuery.fx.speeds ? jQuery.fx.speeds[ opt.duration ] : jQuery.fx.speeds._default;
+
+               // normalize opt.queue - true/undefined/null -> "fx"
+               if ( opt.queue == null || opt.queue === true ) {
+                       opt.queue = "fx";
+               }
+
+               // Queueing
+               opt.old = opt.complete;
+
+               opt.complete = function( noUnmark ) {
+                       if ( jQuery.isFunction( opt.old ) ) {
+                               opt.old.call( this );
+                       }
+
+                       if ( opt.queue ) {
+                               jQuery.dequeue( this, opt.queue );
+                       } else if ( noUnmark !== false ) {
+                               jQuery._unmark( this );
+                       }
+               };
+
+               return opt;
+       },
+
+       easing: {
+               linear: function( p, n, firstNum, diff ) {
+                       return firstNum + diff * p;
+               },
+               swing: function( p, n, firstNum, diff ) {
+                       return ( ( -Math.cos( p*Math.PI ) / 2 ) + 0.5 ) * diff + firstNum;
+               }
+       },
+
+       timers: [],
+
+       fx: function( elem, options, prop ) {
+               this.options = options;
+               this.elem = elem;
+               this.prop = prop;
+
+               options.orig = options.orig || {};
+       }
+
+});
+
+jQuery.fx.prototype = {
+       // Simple function for setting a style value
+       update: function() {
+               if ( this.options.step ) {
+                       this.options.step.call( this.elem, this.now, this );
+               }
+
+               ( jQuery.fx.step[ this.prop ] || jQuery.fx.step._default )( this );
+       },
+
+       // Get the current size
+       cur: function() {
+               if ( this.elem[ this.prop ] != null && (!this.elem.style || this.elem.style[ this.prop ] == null) ) {
+                       return this.elem[ this.prop ];
+               }
+
+               var parsed,
+                       r = jQuery.css( this.elem, this.prop );
+               // Empty strings, null, undefined and "auto" are converted to 0,
+               // complex values such as "rotate(1rad)" are returned as is,
+               // simple values such as "10px" are parsed to Float.
+               return isNaN( parsed = parseFloat( r ) ) ? !r || r === "auto" ? 0 : r : parsed;
+       },
+
+       // Start an animation from one number to another
+       custom: function( from, to, unit ) {
+               var self = this,
+                       fx = jQuery.fx;
+
+               this.startTime = fxNow || createFxNow();
+               this.end = to;
+               this.now = this.start = from;
+               this.pos = this.state = 0;
+               this.unit = unit || this.unit || ( jQuery.cssNumber[ this.prop ] ? "" : "px" );
+
+               function t( gotoEnd ) {
+                       return self.step( gotoEnd );
+               }
+
+               t.queue = this.options.queue;
+               t.elem = this.elem;
+               t.saveState = function() {
+                       if ( self.options.hide && jQuery._data( self.elem, "fxshow" + self.prop ) === undefined ) {
+                               jQuery._data( self.elem, "fxshow" + self.prop, self.start );
+                       }
+               };
+
+               if ( t() && jQuery.timers.push(t) && !timerId ) {
+                       timerId = setInterval( fx.tick, fx.interval );
+               }
+       },
+
+       // Simple 'show' function
+       show: function() {
+               var dataShow = jQuery._data( this.elem, "fxshow" + this.prop );
+
+               // Remember where we started, so that we can go back to it later
+               this.options.orig[ this.prop ] = dataShow || jQuery.style( this.elem, this.prop );
+               this.options.show = true;
+
+               // Begin the animation
+               // Make sure that we start at a small width/height to avoid any flash of content
+               if ( dataShow !== undefined ) {
+                       // This show is picking up where a previous hide or show left off
+                       this.custom( this.cur(), dataShow );
+               } else {
+                       this.custom( this.prop === "width" || this.prop === "height" ? 1 : 0, this.cur() );
+               }
+
+               // Start by showing the element
+               jQuery( this.elem ).show();
+       },
+
+       // Simple 'hide' function
+       hide: function() {
+               // Remember where we started, so that we can go back to it later
+               this.options.orig[ this.prop ] = jQuery._data( this.elem, "fxshow" + this.prop ) || jQuery.style( this.elem, this.prop );
+               this.options.hide = true;
+
+               // Begin the animation
+               this.custom( this.cur(), 0 );
+       },
+
+       // Each step of an animation
+       step: function( gotoEnd ) {
+               var p, n, complete,
+                       t = fxNow || createFxNow(),
+                       done = true,
+                       elem = this.elem,
+                       options = this.options;
+
+               if ( gotoEnd || t >= options.duration + this.startTime ) {
+                       this.now = this.end;
+                       this.pos = this.state = 1;
+                       this.update();
+
+                       options.animatedProperties[ this.prop ] = true;
+
+                       for ( p in options.animatedProperties ) {
+                               if ( options.animatedProperties[ p ] !== true ) {
+                                       done = false;
+                               }
+                       }
+
+                       if ( done ) {
+                               // Reset the overflow
+                               if ( options.overflow != null && !jQuery.support.shrinkWrapBlocks ) {
+
+                                       jQuery.each( [ "", "X", "Y" ], function( index, value ) {
+                                               elem.style[ "overflow" + value ] = options.overflow[ index ];
+                                       });
+                               }
+
+                               // Hide the element if the "hide" operation was done
+                               if ( options.hide ) {
+                                       jQuery( elem ).hide();
+                               }
+
+                               // Reset the properties, if the item has been hidden or shown
+                               if ( options.hide || options.show ) {
+                                       for ( p in options.animatedProperties ) {
+                                               jQuery.style( elem, p, options.orig[ p ] );
+                                               jQuery.removeData( elem, "fxshow" + p, true );
+                                               // Toggle data is no longer needed
+                                               jQuery.removeData( elem, "toggle" + p, true );
+                                       }
+                               }
+
+                               // Execute the complete function
+                               // in the event that the complete function throws an exception
+                               // we must ensure it won't be called twice. #5684
+
+                               complete = options.complete;
+                               if ( complete ) {
+
+                                       options.complete = false;
+                                       complete.call( elem );
+                               }
+                       }
+
+                       return false;
+
+               } else {
+                       // classical easing cannot be used with an Infinity duration
+                       if ( options.duration == Infinity ) {
+                               this.now = t;
+                       } else {
+                               n = t - this.startTime;
+                               this.state = n / options.duration;
+
+                               // Perform the easing function, defaults to swing
+                               this.pos = jQuery.easing[ options.animatedProperties[this.prop] ]( this.state, n, 0, 1, options.duration );
+                               this.now = this.start + ( (this.end - this.start) * this.pos );
+                       }
+                       // Perform the next step of the animation
+                       this.update();
+               }
+
+               return true;
+       }
+};
+
+jQuery.extend( jQuery.fx, {
+       tick: function() {
+               var timer,
+                       timers = jQuery.timers,
+                       i = 0;
+
+               for ( ; i < timers.length; i++ ) {
+                       timer = timers[ i ];
+                       // Checks the timer has not already been removed
+                       if ( !timer() && timers[ i ] === timer ) {
+                               timers.splice( i--, 1 );
+                       }
+               }
+
+               if ( !timers.length ) {
+                       jQuery.fx.stop();
+               }
+       },
+
+       interval: 13,
+
+       stop: function() {
+               clearInterval( timerId );
+               timerId = null;
+       },
+
+       speeds: {
+               slow: 600,
+               fast: 200,
+               // Default speed
+               _default: 400
+       },
+
+       step: {
+               opacity: function( fx ) {
+                       jQuery.style( fx.elem, "opacity", fx.now );
+               },
+
+               _default: function( fx ) {
+                       if ( fx.elem.style && fx.elem.style[ fx.prop ] != null ) {
+                               fx.elem.style[ fx.prop ] = fx.now + fx.unit;
+                       } else {
+                               fx.elem[ fx.prop ] = fx.now;
+                       }
+               }
+       }
+});
+
+// Adds width/height step functions
+// Do not set anything below 0
+jQuery.each([ "width", "height" ], function( i, prop ) {
+       jQuery.fx.step[ prop ] = function( fx ) {
+               jQuery.style( fx.elem, prop, Math.max(0, fx.now) );
+       };
+});
+
+if ( jQuery.expr && jQuery.expr.filters ) {
+       jQuery.expr.filters.animated = function( elem ) {
+               return jQuery.grep(jQuery.timers, function( fn ) {
+                       return elem === fn.elem;
+               }).length;
+       };
+}
+
+// Try to restore the default display value of an element
+function defaultDisplay( nodeName ) {
+
+       if ( !elemdisplay[ nodeName ] ) {
+
+               var body = document.body,
+                       elem = jQuery( "<" + nodeName + ">" ).appendTo( body ),
+                       display = elem.css( "display" );
+               elem.remove();
+
+               // If the simple way fails,
+               // get element's real default display by attaching it to a temp iframe
+               if ( display === "none" || display === "" ) {
+                       // No iframe to use yet, so create it
+                       if ( !iframe ) {
+                               iframe = document.createElement( "iframe" );
+                               iframe.frameBorder = iframe.width = iframe.height = 0;
+                       }
+
+                       body.appendChild( iframe );
+
+                       // Create a cacheable copy of the iframe document on first call.
+                       // IE and Opera will allow us to reuse the iframeDoc without re-writing the fake HTML
+                       // document to it; WebKit & Firefox won't allow reusing the iframe document.
+                       if ( !iframeDoc || !iframe.createElement ) {
+                               iframeDoc = ( iframe.contentWindow || iframe.contentDocument ).document;
+                               iframeDoc.write( ( document.compatMode === "CSS1Compat" ? "<!doctype html>" : "" ) + "<html><body>" );
+                               iframeDoc.close();
+                       }
+
+                       elem = iframeDoc.createElement( nodeName );
+
+                       iframeDoc.body.appendChild( elem );
+
+                       display = jQuery.css( elem, "display" );
+                       body.removeChild( iframe );
+               }
+
+               // Store the correct default display
+               elemdisplay[ nodeName ] = display;
+       }
+
+       return elemdisplay[ nodeName ];
+}
+
+
+
+
+var rtable = /^t(?:able|d|h)$/i,
+       rroot = /^(?:body|html)$/i;
+
+if ( "getBoundingClientRect" in document.documentElement ) {
+       jQuery.fn.offset = function( options ) {
+               var elem = this[0], box;
+
+               if ( options ) {
+                       return this.each(function( i ) {
+                               jQuery.offset.setOffset( this, options, i );
+                       });
+               }
+
+               if ( !elem || !elem.ownerDocument ) {
+                       return null;
+               }
+
+               if ( elem === elem.ownerDocument.body ) {
+                       return jQuery.offset.bodyOffset( elem );
+               }
+
+               try {
+                       box = elem.getBoundingClientRect();
+               } catch(e) {}
+
+               var doc = elem.ownerDocument,
+                       docElem = doc.documentElement;
+
+               // Make sure we're not dealing with a disconnected DOM node
+               if ( !box || !jQuery.contains( docElem, elem ) ) {
+                       return box ? { top: box.top, left: box.left } : { top: 0, left: 0 };
+               }
+
+               var body = doc.body,
+                       win = getWindow(doc),
+                       clientTop  = docElem.clientTop  || body.clientTop  || 0,
+                       clientLeft = docElem.clientLeft || body.clientLeft || 0,
+                       scrollTop  = win.pageYOffset || jQuery.support.boxModel && docElem.scrollTop  || body.scrollTop,
+                       scrollLeft = win.pageXOffset || jQuery.support.boxModel && docElem.scrollLeft || body.scrollLeft,
+                       top  = box.top  + scrollTop  - clientTop,
+                       left = box.left + scrollLeft - clientLeft;
+
+               return { top: top, left: left };
+       };
+
+} else {
+       jQuery.fn.offset = function( options ) {
+               var elem = this[0];
+
+               if ( options ) {
+                       return this.each(function( i ) {
+                               jQuery.offset.setOffset( this, options, i );
+                       });
+               }
+
+               if ( !elem || !elem.ownerDocument ) {
+                       return null;
+               }
+
+               if ( elem === elem.ownerDocument.body ) {
+                       return jQuery.offset.bodyOffset( elem );
+               }
+
+               var computedStyle,
+                       offsetParent = elem.offsetParent,
+                       prevOffsetParent = elem,
+                       doc = elem.ownerDocument,
+                       docElem = doc.documentElement,
+                       body = doc.body,
+                       defaultView = doc.defaultView,
+                       prevComputedStyle = defaultView ? defaultView.getComputedStyle( elem, null ) : elem.currentStyle,
+                       top = elem.offsetTop,
+                       left = elem.offsetLeft;
+
+               while ( (elem = elem.parentNode) && elem !== body && elem !== docElem ) {
+                       if ( jQuery.support.fixedPosition && prevComputedStyle.position === "fixed" ) {
+                               break;
+                       }
+
+                       computedStyle = defaultView ? defaultView.getComputedStyle(elem, null) : elem.currentStyle;
+                       top  -= elem.scrollTop;
+                       left -= elem.scrollLeft;
+
+                       if ( elem === offsetParent ) {
+                               top  += elem.offsetTop;
+                               left += elem.offsetLeft;
+
+                               if ( jQuery.support.doesNotAddBorder && !(jQuery.support.doesAddBorderForTableAndCells && rtable.test(elem.nodeName)) ) {
+                                       top  += parseFloat( computedStyle.borderTopWidth  ) || 0;
+                                       left += parseFloat( computedStyle.borderLeftWidth ) || 0;
+                               }
+
+                               prevOffsetParent = offsetParent;
+                               offsetParent = elem.offsetParent;
+                       }
+
+                       if ( jQuery.support.subtractsBorderForOverflowNotVisible && computedStyle.overflow !== "visible" ) {
+                               top  += parseFloat( computedStyle.borderTopWidth  ) || 0;
+                               left += parseFloat( computedStyle.borderLeftWidth ) || 0;
+                       }
+
+                       prevComputedStyle = computedStyle;
+               }
+
+               if ( prevComputedStyle.position === "relative" || prevComputedStyle.position === "static" ) {
+                       top  += body.offsetTop;
+                       left += body.offsetLeft;
+               }
+
+               if ( jQuery.support.fixedPosition && prevComputedStyle.position === "fixed" ) {
+                       top  += Math.max( docElem.scrollTop, body.scrollTop );
+                       left += Math.max( docElem.scrollLeft, body.scrollLeft );
+               }
+
+               return { top: top, left: left };
+       };
+}
+
+jQuery.offset = {
+
+       bodyOffset: function( body ) {
+               var top = body.offsetTop,
+                       left = body.offsetLeft;
+
+               if ( jQuery.support.doesNotIncludeMarginInBodyOffset ) {
+                       top  += parseFloat( jQuery.css(body, "marginTop") ) || 0;
+                       left += parseFloat( jQuery.css(body, "marginLeft") ) || 0;
+               }
+
+               return { top: top, left: left };
+       },
+
+       setOffset: function( elem, options, i ) {
+               var position = jQuery.css( elem, "position" );
+
+               // set position first, in-case top/left are set even on static elem
+               if ( position === "static" ) {
+                       elem.style.position = "relative";
+               }
+
+               var curElem = jQuery( elem ),
+                       curOffset = curElem.offset(),
+                       curCSSTop = jQuery.css( elem, "top" ),
+                       curCSSLeft = jQuery.css( elem, "left" ),
+                       calculatePosition = ( position === "absolute" || position === "fixed" ) && jQuery.inArray("auto", [curCSSTop, curCSSLeft]) > -1,
+                       props = {}, curPosition = {}, curTop, curLeft;
+
+               // need to be able to calculate position if either top or left is auto and position is either absolute or fixed
+               if ( calculatePosition ) {
+                       curPosition = curElem.position();
+                       curTop = curPosition.top;
+                       curLeft = curPosition.left;
+               } else {
+                       curTop = parseFloat( curCSSTop ) || 0;
+                       curLeft = parseFloat( curCSSLeft ) || 0;
+               }
+
+               if ( jQuery.isFunction( options ) ) {
+                       options = options.call( elem, i, curOffset );
+               }
+
+               if ( options.top != null ) {
+                       props.top = ( options.top - curOffset.top ) + curTop;
+               }
+               if ( options.left != null ) {
+                       props.left = ( options.left - curOffset.left ) + curLeft;
+               }
+
+               if ( "using" in options ) {
+                       options.using.call( elem, props );
+               } else {
+                       curElem.css( props );
+               }
+       }
+};
+
+
+jQuery.fn.extend({
+
+       position: function() {
+               if ( !this[0] ) {
+                       return null;
+               }
+
+               var elem = this[0],
+
+               // Get *real* offsetParent
+               offsetParent = this.offsetParent(),
+
+               // Get correct offsets
+               offset       = this.offset(),
+               parentOffset = rroot.test(offsetParent[0].nodeName) ? { top: 0, left: 0 } : offsetParent.offset();
+
+               // Subtract element margins
+               // note: when an element has margin: auto the offsetLeft and marginLeft
+               // are the same in Safari causing offset.left to incorrectly be 0
+               offset.top  -= parseFloat( jQuery.css(elem, "marginTop") ) || 0;
+               offset.left -= parseFloat( jQuery.css(elem, "marginLeft") ) || 0;
+
+               // Add offsetParent borders
+               parentOffset.top  += parseFloat( jQuery.css(offsetParent[0], "borderTopWidth") ) || 0;
+               parentOffset.left += parseFloat( jQuery.css(offsetParent[0], "borderLeftWidth") ) || 0;
+
+               // Subtract the two offsets
+               return {
+                       top:  offset.top  - parentOffset.top,
+                       left: offset.left - parentOffset.left
+               };
+       },
+
+       offsetParent: function() {
+               return this.map(function() {
+                       var offsetParent = this.offsetParent || document.body;
+                       while ( offsetParent && (!rroot.test(offsetParent.nodeName) && jQuery.css(offsetParent, "position") === "static") ) {
+                               offsetParent = offsetParent.offsetParent;
+                       }
+                       return offsetParent;
+               });
+       }
+});
+
+
+// Create scrollLeft and scrollTop methods
+jQuery.each( ["Left", "Top"], function( i, name ) {
+       var method = "scroll" + name;
+
+       jQuery.fn[ method ] = function( val ) {
+               var elem, win;
+
+               if ( val === undefined ) {
+                       elem = this[ 0 ];
+
+                       if ( !elem ) {
+                               return null;
+                       }
+
+                       win = getWindow( elem );
+
+                       // Return the scroll offset
+                       return win ? ("pageXOffset" in win) ? win[ i ? "pageYOffset" : "pageXOffset" ] :
+                               jQuery.support.boxModel && win.document.documentElement[ method ] ||
+                                       win.document.body[ method ] :
+                               elem[ method ];
+               }
+
+               // Set the scroll offset
+               return this.each(function() {
+                       win = getWindow( this );
+
+                       if ( win ) {
+                               win.scrollTo(
+                                       !i ? val : jQuery( win ).scrollLeft(),
+                                        i ? val : jQuery( win ).scrollTop()
+                               );
+
+                       } else {
+                               this[ method ] = val;
+                       }
+               });
+       };
+});
+
+function getWindow( elem ) {
+       return jQuery.isWindow( elem ) ?
+               elem :
+               elem.nodeType === 9 ?
+                       elem.defaultView || elem.parentWindow :
+                       false;
+}
+
+
+
+
+// Create width, height, innerHeight, innerWidth, outerHeight and outerWidth methods
+jQuery.each([ "Height", "Width" ], function( i, name ) {
+
+       var type = name.toLowerCase();
+
+       // innerHeight and innerWidth
+       jQuery.fn[ "inner" + name ] = function() {
+               var elem = this[0];
+               return elem ?
+                       elem.style ?
+                       parseFloat( jQuery.css( elem, type, "padding" ) ) :
+                       this[ type ]() :
+                       null;
+       };
+
+       // outerHeight and outerWidth
+       jQuery.fn[ "outer" + name ] = function( margin ) {
+               var elem = this[0];
+               return elem ?
+                       elem.style ?
+                       parseFloat( jQuery.css( elem, type, margin ? "margin" : "border" ) ) :
+                       this[ type ]() :
+                       null;
+       };
+
+       jQuery.fn[ type ] = function( size ) {
+               // Get window width or height
+               var elem = this[0];
+               if ( !elem ) {
+                       return size == null ? null : this;
+               }
+
+               if ( jQuery.isFunction( size ) ) {
+                       return this.each(function( i ) {
+                               var self = jQuery( this );
+                               self[ type ]( size.call( this, i, self[ type ]() ) );
+                       });
+               }
+
+               if ( jQuery.isWindow( elem ) ) {
+                       // Everyone else use document.documentElement or document.body depending on Quirks vs Standards mode
+                       // 3rd condition allows Nokia support, as it supports the docElem prop but not CSS1Compat
+                       var docElemProp = elem.document.documentElement[ "client" + name ],
+                               body = elem.document.body;
+                       return elem.document.compatMode === "CSS1Compat" && docElemProp ||
+                               body && body[ "client" + name ] || docElemProp;
+
+               // Get document width or height
+               } else if ( elem.nodeType === 9 ) {
+                       // Either scroll[Width/Height] or offset[Width/Height], whichever is greater
+                       return Math.max(
+                               elem.documentElement["client" + name],
+                               elem.body["scroll" + name], elem.documentElement["scroll" + name],
+                               elem.body["offset" + name], elem.documentElement["offset" + name]
+                       );
+
+               // Get or set width or height on the element
+               } else if ( size === undefined ) {
+                       var orig = jQuery.css( elem, type ),
+                               ret = parseFloat( orig );
+
+                       return jQuery.isNumeric( ret ) ? ret : orig;
+
+               // Set the width or height on the element (default to pixels if value is unitless)
+               } else {
+                       return this.css( type, typeof size === "string" ? size : size + "px" );
+               }
+       };
+
+});
+
+
+// Expose jQuery to the global object
+window.jQuery = window.$ = jQuery;
+})( window );
diff --git a/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite1.0/web/manual_harness.html b/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite1.0/web/manual_harness.html
new file mode 100755 (executable)
index 0000000..63a4c61
--- /dev/null
@@ -0,0 +1,312 @@
+<!--
+# Copyright (C) 2012 Intel Corporation
+# 
+# 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
+# of the License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
+#
+# Authors:
+#              Zhang, Huihui <huihuix.zhang@intel.com>
+#              Wendong,Sui  <weidongx.sun@intel.com>
+-->
+<!doctype html>
+<html>
+<head>
+<style type="text/css">
+body {
+        margin: 0px;
+}
+
+div#manualharness {
+        box-sizing:border-box;
+        width:100%;
+        border:0px;
+        text-align: left;
+        background: teal;
+        color: white;
+}
+
+textarea#casesinfo{
+        width: 99%;
+        font-size: 20px;
+}
+input,lable,select{
+       font-size: 25px;
+}
+</style>
+<script src="jquery.js"></script>
+<script>
+var iTestsManual = 0;
+
+function fillCasesInfo(){
+        oTestFrame = window.parent.document.getElementById('testframe');
+       oTestFrame.src = '';
+       document.getElementById("caseslist").options[iTestsManual].selected=true;
+       if(window.parent.manualcaseslist[iTestsManual].result == "PASS"){
+               document.getElementById("passradio").checked=true;
+                document.getElementById("passradio").tag=1;
+               document.getElementById("failradio").checked=false;
+                document.getElementById("failradio").tag=0;
+                document.getElementById("blockradio").checked=false;
+                document.getElementById("blockradio").tag=0;
+       } else if(window.parent.manualcaseslist[iTestsManual].result == "FAIL"){
+               document.getElementById("passradio").checked=false;
+                document.getElementById("passradio").tag=0;
+                document.getElementById("failradio").checked=true;
+                document.getElementById("failradio").tag=1;
+                document.getElementById("blockradio").checked=false;
+                document.getElementById("blockradio").tag=0;
+       } else if(window.parent.manualcaseslist[iTestsManual].result == "BLOCK"){
+                document.getElementById("passradio").checked=false;
+                document.getElementById("passradio").tag=0;
+                document.getElementById("failradio").checked=false;
+                document.getElementById("failradio").tag=0;
+                document.getElementById("blockradio").checked=true;
+                document.getElementById("blockradio").tag=1;
+        }else {
+               document.getElementById("passradio").checked=false;
+                document.getElementById("passradio").tag=0;
+                document.getElementById("failradio").checked=false;
+                document.getElementById("failradio").tag=0;
+                document.getElementById("blockradio").checked=false;
+                document.getElementById("blockradio").tag=0;
+       }
+
+       var scriptPathText = window.parent.manualcaseslist[iTestsManual].entry;
+       if(scriptPathText != undefined && scriptPathText.trim().length > 0){
+               document.getElementById("runbutton").disabled = false;
+       }else {
+               document.getElementById("runbutton").disabled = true;
+       }
+       
+       document.getElementById("casesinfo").value="";
+        document.getElementById("casesinfo").value+="Descriptions: "+window.parent.manualcaseslist[iTestsManual].purpose +"\n";
+        var preC = window.parent.manualcaseslist[iTestsManual].pre_con;
+        if (preC && preC.length > 0){
+                document.getElementById("casesinfo").value+= "PreCondition: "+preC+"\n";
+        }
+
+        var posC = window.parent.manualcaseslist[iTestsManual].post_con;
+        if (posC && posC.length > 0){
+                document.getElementById("casesinfo").value+= "PostCondition: "+posC+"\n";
+        }
+
+        var steps = window.parent.manualcaseslist[iTestsManual].steps;
+        if(steps.length > 0){
+            for(var i=0; i<steps.length; i++){
+                document.getElementById("casesinfo").value+= "Step-"+steps[i].order+": "+steps[i].desc+"\n";
+                document.getElementById("casesinfo").value+= "Expected"+": "+steps[i].expected+"\n";
+            }
+        }
+}
+
+function initManual(){
+        for(var i = 0; i < window.parent.manualcaseslist.length; i++){
+            var id_temp = window.parent.manualcaseslist[i].casesid;
+            if(id_temp.length > 32){
+                var prefix = id_temp.substring(0,9);
+                var postfix = id_temp.substring(15);
+                var item = new Option(prefix + " ... " + postfix, window.parent.manualcaseslist[i].index);
+            } else {
+                var item = new Option(window.parent.manualcaseslist[i].casesid, window.parent.manualcaseslist[i].index);
+            }
+            document.getElementById("caseslist").options.add(item);
+        }
+       fillCasesInfo();
+}
+
+function runTest(){
+       var scriptPathText = window.parent.manualcaseslist[iTestsManual].entry;
+       if(scriptPathText){
+               window.parent.document.getElementById('testframe').src = scriptPathText;
+       }
+}
+
+function nextTest(){
+       submitTest();
+       iTestsManual++;
+       if(iTestsManual >= window.parent.manualcaseslist.length)
+               iTestsManual=0;
+       fillCasesInfo();
+}
+
+function prevTest(){
+       submitTest();
+        iTestsManual--;
+        if(iTestsManual < 0)
+                iTestsManual = window.parent.manualcaseslist.length - 1;
+       fillCasesInfo();
+}
+
+function submitTest(){
+       var iResult="N/A";
+       var optionsColor="white";
+       if(document.getElementById("passradio").tag == 1){
+               iResult="PASS";
+               optionsColor="greenyellow";
+       } else if(document.getElementById("failradio").tag == 1){
+               iResult="FAIL";
+               optionsColor="orangered";
+       } else if(document.getElementById("blockradio").tag == 1){
+                iResult="BLOCK";
+                optionsColor="gray";
+        }
+       window.parent.manualcaseslist[iTestsManual].result = iResult;
+       document.getElementById("caseslist").options[iTestsManual].style.backgroundColor = optionsColor;
+
+       var server_url = "http://127.0.0.1:8000/commit_manual_result";
+        jQuery.ajax({
+          async: false,
+          url: server_url,
+          type: "POST",
+          data: {"case_id": window.parent.manualcaseslist[iTestsManual].casesid,"purpose": window.parent.manualcaseslist[iTestsManual].purpose, "result": iResult},
+          dataType: "json",
+          beforeSend: function(x) {
+            if (x && x.overrideMimeType) {
+              x.overrideMimeType("application/json;charset=UTF-8");
+            }
+          },
+          success: function(result) {
+          }
+        });
+}
+
+function completeTest(){
+       window.parent.ask_generate_xml();
+}
+
+function passRadio()
+{
+       var radio = document.getElementById("passradio");
+       if (radio.tag==1){
+               radio.checked=false;
+               radio.tag=0;
+       }else{
+               radio.checked=true;
+               radio.tag=1;
+               document.getElementById("failradio").checked=false;
+                document.getElementById("failradio").tag=0;
+                document.getElementById("blockradio").checked=false;
+                document.getElementById("blockradio").tag=0;
+       }
+}
+
+function failRadio()
+{
+        var radio = document.getElementById("failradio");
+        if (radio.tag==1){
+                radio.checked=false;
+                radio.tag=0;
+        }else{
+                radio.checked=true;
+                radio.tag=1;
+                document.getElementById("passradio").checked=false;
+                document.getElementById("passradio").tag=0;
+                document.getElementById("blockradio").checked=false;
+                document.getElementById("blockradio").tag=0;
+
+        }
+}
+
+function blockRadio()
+{
+        var radio = document.getElementById("blockradio");
+        if (radio.tag==1){
+                radio.checked=false;
+                radio.tag=0;
+        }else{
+                radio.checked=true;
+                radio.tag=1;
+                document.getElementById("passradio").checked=false;
+                document.getElementById("passradio").tag=0;
+                document.getElementById("failradio").checked=false;
+                document.getElementById("failradio").tag=0;
+        }
+}
+
+function listUpdate(){
+       iTestsManual = document.getElementById("caseslist").selectedIndex;
+       fillCasesInfo();
+}
+
+function passLabel(){
+        var radio = document.getElementById("passradio");
+        if (radio.tag==1){
+                radio.checked=false;
+                radio.tag=0;
+        }else{
+                radio.checked=true;
+                radio.tag=1;
+                document.getElementById("failradio").checked=false;
+                document.getElementById("failradio").tag=0;
+                document.getElementById("blockradio").checked=false;
+                document.getElementById("blockradio").tag=0;
+        }
+}
+
+function failLabel(){
+       var radio = document.getElementById("failradio");
+        if (radio.tag==1){
+                radio.checked=false;
+                radio.tag=0;
+        }else{
+                radio.checked=true;
+                radio.tag=1;
+                document.getElementById("passradio").checked=false;
+                document.getElementById("passradio").tag=0;
+                document.getElementById("blockradio").checked=false;
+                document.getElementById("blockradio").tag=0;
+        }
+}
+
+function blockLabel(){
+        var radio = document.getElementById("blockradio");
+        if (radio.tag==1){
+                radio.checked=false;
+                radio.tag=0;
+        }else{
+                radio.checked=true;
+                radio.tag=1;
+                document.getElementById("passradio").checked=false;
+                document.getElementById("passradio").tag=0;
+                document.getElementById("failradio").checked=false;
+                document.getElementById("failradio").tag=0;
+        }
+}
+
+</script>
+</head>
+<body onload="initManual()">
+<div id="manualharness" >
+<input type="button" style="width:13%" id="prevbutton" value="< Prev" onclick="prevTest()"/>
+<select id="caseslist" style="width:59%" onchange="listUpdate()">
+</select>
+<input type="button" style="width:13%" id="nextbutton" value="Next >" onclick="nextTest()"/>
+<input type="button" style="width:12%" id="runbutton" value="Run" onclick="runTest()"/>
+</div>
+<div width=100%>
+<textarea id="casesinfo" rows=8 disabled='disabled' />
+</textarea>
+</div>
+<div style="width:100%;text-align:right;background-color:#cccccc;">
+<input type="radio" id="passradio" value="Pass" onclick="passRadio()"/><label style="font-size:25px" onclick="passLabel()">Pass</label>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+<input type="radio" id="failradio" value="Fail" onclick="failRadio()"/><label style="font-size:25px" onclick="failLabel()">Fail</label>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+<input type="radio" id="blockradio" value="Block" onclick="blockRadio()"/><label style="font-size:25px" onclick="blockLabel()">Block</label>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+<input type="button" style="width:12%" id="submitbutton" value="Save" onclick="submitTest()"/>
+<input type="button" style="width:12%" id="completebutton" value="Done" onclick="completeTest()"/><br>
+</div>
+</body>
+</html>
diff --git a/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite1.0/web/manualharness.html b/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite1.0/web/manualharness.html
new file mode 100755 (executable)
index 0000000..6ca25b5
--- /dev/null
@@ -0,0 +1,318 @@
+<!--
+# Copyright (C) 2012 Intel Corporation
+# 
+# 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
+# of the License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
+#
+# Authors:
+#              Zhang, Huihui <huihuix.zhang@intel.com>
+#              Wendong,Sui  <weidongx.sun@intel.com>
+-->
+<!doctype html>
+<html>
+<head>
+<style type="text/css">
+body {
+        margin: 0px;
+}
+
+div#manualharness {
+       box-sizing:border-box;
+       width:100%;
+       border:0px;
+       text-align: left;
+       background: teal;
+       color: white;
+}
+
+textarea#casesinfo{
+        width: 99%;
+        font-size: 20px;
+}
+
+input,lable,select{
+       font-size: 25px;
+}
+
+</style>
+<script src="jquery.js"></script>
+<script>
+var iTestsManual = 0;
+
+function fillCasesInfo(){
+       window.parent.oTestFrame.src = '';
+       document.getElementById("caseslist").options[iTestsManual].selected=true;
+       if(window.parent.manualcaseslist[iTestsManual].result == "PASS"){
+                document.getElementById("passradio").checked=true;
+                document.getElementById("passradio").tag=1;
+                document.getElementById("failradio").checked=false;
+                document.getElementById("failradio").tag=0;
+                document.getElementById("blockradio").checked=false;
+                document.getElementById("blockradio").tag=0;
+       } else if(window.parent.manualcaseslist[iTestsManual].result == "FAIL"){
+                document.getElementById("passradio").checked=false;
+                document.getElementById("passradio").tag=0;
+                document.getElementById("failradio").checked=true;
+                document.getElementById("failradio").tag=1;
+                document.getElementById("blockradio").checked=false;
+                document.getElementById("blockradio").tag=0;
+       } else if(window.parent.manualcaseslist[iTestsManual].result == "BLOCK"){
+                document.getElementById("passradio").checked=false;
+                document.getElementById("passradio").tag=0;
+                document.getElementById("failradio").checked=false;
+                document.getElementById("failradio").tag=0;
+                document.getElementById("blockradio").checked=true;
+                document.getElementById("blockradio").tag=1;
+        } else {
+                document.getElementById("passradio").checked=false;
+                document.getElementById("passradio").tag=0;
+                document.getElementById("failradio").checked=false;
+                document.getElementById("failradio").tag=0;
+                document.getElementById("blockradio").checked=false;
+                document.getElementById("blockradio").tag=0;
+       }
+
+       var scriptPathText = $(window.parent.Tests[window.parent.manualcaseslist[iTestsManual].index]).find('test_script_entry').get(0);
+       if(scriptPathText){
+               if($(scriptPathText).text().trim() == "")
+                       document.getElementById("runbutton").disabled = true;
+               else
+                       document.getElementById("runbutton").disabled = false;
+       }else {
+               document.getElementById("runbutton").disabled = true;
+       }
+       
+       document.getElementById("casesinfo").value="";
+        document.getElementById("casesinfo").value+="Descriptions: "+$(window.parent.Tests[window.parent.manualcaseslist[iTestsManual].index]).attr('purpose')+"\n";
+        var preC = $(window.parent.Tests[window.parent.manualcaseslist[iTestsManual].index]).find('pre_condition');
+        if (preC && preC.length > 0){
+                var preCText = $(window.parent.Tests[window.parent.manualcaseslist[iTestsManual].index]).find('pre_condition').get(0);
+                document.getElementById("casesinfo").value+= "PreCondition: "+$(preCText).text().trim()+"\n";
+        }
+
+        var posC = $(window.parent.Tests[window.parent.manualcaseslist[iTestsManual].index]).find('post_condition');
+        if (posC && posC.length > 0){
+                var posCText = $(posC).get(0);
+                document.getElementById("casesinfo").value+= "PostCondition: "+$(posCText).text().trim()+"\n";
+        }
+        var stepInfo = $(window.parent.Tests[window.parent.manualcaseslist[iTestsManual].index]).find('step_desc');
+        var stepExp = $(window.parent.Tests[window.parent.manualcaseslist[iTestsManual].index]).find('expected');
+        for(var j=0;j<stepInfo.length;j++){
+               var stepsnum = j + 1;
+               if(stepInfo){
+                       var stepInfoText = $(stepInfo[j]).get(0);
+                       document.getElementById("casesinfo").value+= "Step-"+stepsnum+": "+$(stepInfoText).text().trim()+"\n";
+               }
+               if(stepExp){
+                       var stepExpText = $(stepExp[j]).get(0);
+                       document.getElementById("casesinfo").value+= "Expected"+": "+$(stepExpText).text().trim()+"\n";
+               }
+        }
+}
+
+function initManual(){
+        for(var i = 0; i < window.parent.manualcaseslist.length; i++){
+                var id_temp = window.parent.manualcaseslist[i].casesid;
+                if(window.parent.manualcaseslist[i].casesid.length > 32){
+                        var prefix = id_temp.substring(0,9);
+                        var postfix = id_temp.substring(15);
+                        var item = new Option(prefix + " ... " + postfix, window.parent.manualcaseslist[i].index);
+                } else {
+                        var item = new Option(window.parent.manualcaseslist[i].casesid, window.parent.manualcaseslist[i].index);
+                }
+                document.getElementById("caseslist").options.add(item);
+        }
+        fillCasesInfo();
+}
+
+function runTest(){
+       var scriptPathText = $(window.parent.Tests[window.parent.manualcaseslist[iTestsManual].index]).find('test_script_entry').get(0);
+       if(scriptPathText){
+               window.parent.oTestFrame.src = $(scriptPathText).text().trim();
+       }
+}
+
+function nextTest(){
+       submitTest();
+       iTestsManual++;
+       if(iTestsManual >= window.parent.manualcaseslist.length)
+               iTestsManual=0;
+       fillCasesInfo();
+}
+
+function prevTest(){
+       submitTest();
+        iTestsManual--;
+        if(iTestsManual < 0)
+                iTestsManual = window.parent.manualcaseslist.length - 1;
+       fillCasesInfo();
+}
+
+function submitTest(){
+       if (window.parent.manualcaseslist[iTestsManual].index >= window.parent.Tests.length)
+               return;
+       var iResult="N/A";
+       var optionsColor="white";
+       if(document.getElementById("passradio").tag == 1){
+                iResult="PASS";
+                optionsColor="greenyellow";
+       } else if(document.getElementById("failradio").tag == 1){
+                iResult="FAIL";
+                optionsColor="orangered";
+       } else if(document.getElementById("blockradio").tag == 1){
+                iResult="BLOCK";
+                optionsColor="gray";
+        }
+
+       window.parent.manualcaseslist[iTestsManual].result = iResult;
+       document.getElementById("caseslist").options[iTestsManual].style.backgroundColor = optionsColor;
+
+       $(window.parent.Tests[window.parent.manualcaseslist[iTestsManual].index]).attr('result', iResult);
+       if($(window.parent.Tests[window.parent.manualcaseslist[iTestsManual].index]).find('result_info').length > 0)
+               $(window.parent.Tests[window.parent.manualcaseslist[iTestsManual].index]).find('result_info').remove();
+
+       var doc=$.parseXML("<result_info>" + "<actual_result>" + iResult +"</actual_result>" + "<start>" + "</start>" + "<end>" + "</end>" + "<stdout>" + "</stdout>" + "</result_info>");
+       $(window.parent.Tests[window.parent.manualcaseslist[iTestsManual].index]).append(doc.documentElement);
+
+//     window.parent.statusNode.innerHTML =  "Test #" + (window.parent.manualcaseslist[iTestsManual].index+1) + "/" + window.parent.Tests.length + "(" + iResult + ") " + window.parent.oTestFrame.src;
+}
+
+function completeTest(){
+       window.parent.PublishResult();
+}
+
+function passRadio()
+{
+       var radio = document.getElementById("passradio");
+       if (radio.tag==1){
+                radio.checked=false;
+                radio.tag=0;
+       }else{
+                radio.checked=true;
+                radio.tag=1;
+                document.getElementById("failradio").checked=false;
+                document.getElementById("failradio").tag=0;
+                document.getElementById("blockradio").checked=false;
+                document.getElementById("blockradio").tag=0;
+       }
+}
+
+function failRadio()
+{
+        var radio = document.getElementById("failradio");
+        if (radio.tag==1){
+                radio.checked=false;
+                radio.tag=0;
+        }else{
+                radio.checked=true;
+                radio.tag=1;
+                document.getElementById("passradio").checked=false;
+                document.getElementById("passradio").tag=0;
+                document.getElementById("blockradio").checked=false;
+                document.getElementById("blockradio").tag=0;
+        }
+}
+
+function blockRadio()
+{
+        var radio = document.getElementById("blockradio");
+        if (radio.tag==1){
+                radio.checked=false;
+                radio.tag=0;
+        }else{
+                radio.checked=true;
+                radio.tag=1;
+                document.getElementById("passradio").checked=false;
+                document.getElementById("passradio").tag=0;
+                document.getElementById("failradio").checked=false;
+                document.getElementById("failradio").tag=0;
+        }
+}
+
+function listUpdate(){
+       iTestsManual = document.getElementById("caseslist").selectedIndex;
+       fillCasesInfo();
+}
+
+function passLabel(){
+        var radio = document.getElementById("passradio");
+        if (radio.tag==1){
+                radio.checked=false;
+                radio.tag=0;
+        }else{
+                radio.checked=true;
+                radio.tag=1;
+                document.getElementById("failradio").checked=false;
+                document.getElementById("failradio").tag=0;
+                document.getElementById("blockradio").checked=false;
+                document.getElementById("blockradio").tag=0;
+        }
+}
+
+function failLabel(){
+       var radio = document.getElementById("failradio");
+        if (radio.tag==1){
+                radio.checked=false;
+                radio.tag=0;
+        }else{
+                radio.checked=true;
+                radio.tag=1;
+                document.getElementById("passradio").checked=false;
+                document.getElementById("passradio").tag=0;
+                document.getElementById("blockradio").checked=false;
+                document.getElementById("blockradio").tag=0;
+        }
+}
+
+function blockLabel(){
+        var radio = document.getElementById("blockradio");
+        if (radio.tag==1){
+                radio.checked=false;
+                radio.tag=0;
+        }else{
+                radio.checked=true;
+                radio.tag=1;
+                document.getElementById("passradio").checked=false;
+                document.getElementById("passradio").tag=0;
+                document.getElementById("failradio").checked=false;
+                document.getElementById("failradio").tag=0;
+        }
+}
+
+</script>
+</head>
+<body onload="initManual()">
+<div id="manualharness" >
+<input type="button" style="width:13%" id="prevbutton" value="< Prev" onclick="prevTest()"/>
+<select id="caseslist" style="width:59%" onchange="listUpdate()">
+</select>
+<input type="button" style="width:13%" id="nextbutton" value="Next >" onclick="nextTest()"/>
+<input type="button" style="width:12%" id="runbutton" value="Run" onclick="runTest()"/>
+</div>
+<div width=100%>
+<textarea id="casesinfo" rows=8 disabled='disabled' />
+</textarea>
+</div>
+<div style="width:100%;text-align:right;background-color:#cccccc;">
+<input type="radio" id="passradio" value="Pass" onclick="passRadio()"/><label style="font-size:25px" onclick="passLabel()">Pass</label>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+<input type="radio" id="failradio" value="Fail" onclick="failRadio()"/><label style="font-size:25px" onclick="failLabel()">Fail</label>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+<input type="radio" id="blockradio" value="Block" onclick="blockRadio()"/><label style="font-size:25px" onclick="blockLabel()">Block</label>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+<input type="button" style="width:12%" id="submitbutton" value="Save" onclick="submitTest()"/>
+<input type="button" style="width:12%" id="completebutton" value="Done" onclick="completeTest()"/><br>
+</div>
+</body>
+</html>
diff --git a/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite1.0/xsd/Makefile.am b/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite1.0/xsd/Makefile.am
new file mode 100755 (executable)
index 0000000..e438102
--- /dev/null
@@ -0,0 +1,22 @@
+# Copyright (C) 2012 Intel Corporation
+# 
+# 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
+# of the License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
+#
+# Authors:
+#              Zhang, Huihui <huihuix.zhang@intel.com>
+#              Wendong,Sui  <weidongx.sun@intel.com>
+
+testkitxsddir = /opt/testkit/lite2.4/xsd
+dist_testkitxsd_DATA = *.js *.xsl *.css *.png *.txt *.xml *.xsd release-notes
diff --git a/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite1.0/xsd/application.js b/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite1.0/xsd/application.js
new file mode 100755 (executable)
index 0000000..72e2a78
--- /dev/null
@@ -0,0 +1,44 @@
+function getScrollTop(){
+    return f_scrollTop();
+}
+
+function f_scrollTop() {
+       return f_filterResults (
+               $(window) ? $(window).scrollTop() : 0,
+               document.documentElement ? document.documentElement.scrollTop : 0,
+               document.body ? document.body.scrollTop : 0
+       );
+}
+function f_filterResults(n_win, n_docel, n_body) {
+       var n_result = n_win ? n_win : 0;
+       if (n_docel && (!n_result || (n_result > n_docel)))
+               n_result = n_docel;
+       return n_body && (!n_result || (n_result > n_body)) ? n_body : n_result;
+}
+
+function setScrollTop(){
+    $(window) ? $(window).scrollTop(0): 0;
+       document.documentElement ? document.documentElement.scrollTop = 0 :0;
+       document.body ? document.body.scrollTop = 0 : 0;
+} 
+
+function goTopEx(){
+    $node = $('#goTopBtn');
+       if(getScrollTop() > 0){
+                   $node.show();
+       }else{
+                   $node.hide();
+       }
+       
+    $(window).scroll(function(){
+           if(getScrollTop() > 0){
+                   $node.show();
+           }else{
+                   $node.hide();
+           }
+    });
+       
+    $node.click(function(){
+               setScrollTop();
+    });
+}
\ No newline at end of file
diff --git a/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite1.0/xsd/back_top.png b/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite1.0/xsd/back_top.png
new file mode 100755 (executable)
index 0000000..19cbd76
Binary files /dev/null and b/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite1.0/xsd/back_top.png differ
diff --git a/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite1.0/xsd/jquery.min.js b/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite1.0/xsd/jquery.min.js
new file mode 100755 (executable)
index 0000000..198b3ff
--- /dev/null
@@ -0,0 +1,4 @@
+/*! jQuery v1.7.1 jquery.com | jquery.org/license */
+(function(a,b){function cy(a){return f.isWindow(a)?a:a.nodeType===9?a.defaultView||a.parentWindow:!1}function cv(a){if(!ck[a]){var b=c.body,d=f("<"+a+">").appendTo(b),e=d.css("display");d.remove();if(e==="none"||e===""){cl||(cl=c.createElement("iframe"),cl.frameBorder=cl.width=cl.height=0),b.appendChild(cl);if(!cm||!cl.createElement)cm=(cl.contentWindow||cl.contentDocument).document,cm.write((c.compatMode==="CSS1Compat"?"<!doctype html>":"")+"<html><body>"),cm.close();d=cm.createElement(a),cm.body.appendChild(d),e=f.css(d,"display"),b.removeChild(cl)}ck[a]=e}return ck[a]}function cu(a,b){var c={};f.each(cq.concat.apply([],cq.slice(0,b)),function(){c[this]=a});return c}function ct(){cr=b}function cs(){setTimeout(ct,0);return cr=f.now()}function cj(){try{return new a.ActiveXObject("Microsoft.XMLHTTP")}catch(b){}}function ci(){try{return new a.XMLHttpRequest}catch(b){}}function cc(a,c){a.dataFilter&&(c=a.dataFilter(c,a.dataType));var d=a.dataTypes,e={},g,h,i=d.length,j,k=d[0],l,m,n,o,p;for(g=1;g<i;g++){if(g===1)for(h in a.converters)typeof h=="string"&&(e[h.toLowerCase()]=a.converters[h]);l=k,k=d[g];if(k==="*")k=l;else if(l!=="*"&&l!==k){m=l+" "+k,n=e[m]||e["* "+k];if(!n){p=b;for(o in e){j=o.split(" ");if(j[0]===l||j[0]==="*"){p=e[j[1]+" "+k];if(p){o=e[o],o===!0?n=p:p===!0&&(n=o);break}}}}!n&&!p&&f.error("No conversion from "+m.replace(" "," to ")),n!==!0&&(c=n?n(c):p(o(c)))}}return c}function cb(a,c,d){var e=a.contents,f=a.dataTypes,g=a.responseFields,h,i,j,k;for(i in g)i in d&&(c[g[i]]=d[i]);while(f[0]==="*")f.shift(),h===b&&(h=a.mimeType||c.getResponseHeader("content-type"));if(h)for(i in e)if(e[i]&&e[i].test(h)){f.unshift(i);break}if(f[0]in d)j=f[0];else{for(i in d){if(!f[0]||a.converters[i+" "+f[0]]){j=i;break}k||(k=i)}j=j||k}if(j){j!==f[0]&&f.unshift(j);return d[j]}}function ca(a,b,c,d){if(f.isArray(b))f.each(b,function(b,e){c||bE.test(a)?d(a,e):ca(a+"["+(typeof e=="object"||f.isArray(e)?b:"")+"]",e,c,d)});else if(!c&&b!=null&&typeof b=="object")for(var e in b)ca(a+"["+e+"]",b[e],c,d);else d(a,b)}function b_(a,c){var d,e,g=f.ajaxSettings.flatOptions||{};for(d in c)c[d]!==b&&((g[d]?a:e||(e={}))[d]=c[d]);e&&f.extend(!0,a,e)}function b$(a,c,d,e,f,g){f=f||c.dataTypes[0],g=g||{},g[f]=!0;var h=a[f],i=0,j=h?h.length:0,k=a===bT,l;for(;i<j&&(k||!l);i++)l=h[i](c,d,e),typeof l=="string"&&(!k||g[l]?l=b:(c.dataTypes.unshift(l),l=b$(a,c,d,e,l,g)));(k||!l)&&!g["*"]&&(l=b$(a,c,d,e,"*",g));return l}function bZ(a){return function(b,c){typeof b!="string"&&(c=b,b="*");if(f.isFunction(c)){var d=b.toLowerCase().split(bP),e=0,g=d.length,h,i,j;for(;e<g;e++)h=d[e],j=/^\+/.test(h),j&&(h=h.substr(1)||"*"),i=a[h]=a[h]||[],i[j?"unshift":"push"](c)}}}function bC(a,b,c){var d=b==="width"?a.offsetWidth:a.offsetHeight,e=b==="width"?bx:by,g=0,h=e.length;if(d>0){if(c!=="border")for(;g<h;g++)c||(d-=parseFloat(f.css(a,"padding"+e[g]))||0),c==="margin"?d+=parseFloat(f.css(a,c+e[g]))||0:d-=parseFloat(f.css(a,"border"+e[g]+"Width"))||0;return d+"px"}d=bz(a,b,b);if(d<0||d==null)d=a.style[b]||0;d=parseFloat(d)||0;if(c)for(;g<h;g++)d+=parseFloat(f.css(a,"padding"+e[g]))||0,c!=="padding"&&(d+=parseFloat(f.css(a,"border"+e[g]+"Width"))||0),c==="margin"&&(d+=parseFloat(f.css(a,c+e[g]))||0);return d+"px"}function bp(a,b){b.src?f.ajax({url:b.src,async:!1,dataType:"script"}):f.globalEval((b.text||b.textContent||b.innerHTML||"").replace(bf,"/*$0*/")),b.parentNode&&b.parentNode.removeChild(b)}function bo(a){var b=c.createElement("div");bh.appendChild(b),b.innerHTML=a.outerHTML;return b.firstChild}function bn(a){var b=(a.nodeName||"").toLowerCase();b==="input"?bm(a):b!=="script"&&typeof a.getElementsByTagName!="undefined"&&f.grep(a.getElementsByTagName("input"),bm)}function bm(a){if(a.type==="checkbox"||a.type==="radio")a.defaultChecked=a.checked}function bl(a){return typeof a.getElementsByTagName!="undefined"?a.getElementsByTagName("*"):typeof a.querySelectorAll!="undefined"?a.querySelectorAll("*"):[]}function bk(a,b){var c;if(b.nodeType===1){b.clearAttributes&&b.clearAttributes(),b.mergeAttributes&&b.mergeAttributes(a),c=b.nodeName.toLowerCase();if(c==="object")b.outerHTML=a.outerHTML;else if(c!=="input"||a.type!=="checkbox"&&a.type!=="radio"){if(c==="option")b.selected=a.defaultSelected;else if(c==="input"||c==="textarea")b.defaultValue=a.defaultValue}else a.checked&&(b.defaultChecked=b.checked=a.checked),b.value!==a.value&&(b.value=a.value);b.removeAttribute(f.expando)}}function bj(a,b){if(b.nodeType===1&&!!f.hasData(a)){var c,d,e,g=f._data(a),h=f._data(b,g),i=g.events;if(i){delete h.handle,h.events={};for(c in i)for(d=0,e=i[c].length;d<e;d++)f.event.add(b,c+(i[c][d].namespace?".":"")+i[c][d].namespace,i[c][d],i[c][d].data)}h.data&&(h.data=f.extend({},h.data))}}function bi(a,b){return f.nodeName(a,"table")?a.getElementsByTagName("tbody")[0]||a.appendChild(a.ownerDocument.createElement("tbody")):a}function U(a){var b=V.split("|"),c=a.createDocumentFragment();if(c.createElement)while(b.length)c.createElement(b.pop());return c}function T(a,b,c){b=b||0;if(f.isFunction(b))return f.grep(a,function(a,d){var e=!!b.call(a,d,a);return e===c});if(b.nodeType)return f.grep(a,function(a,d){return a===b===c});if(typeof b=="string"){var d=f.grep(a,function(a){return a.nodeType===1});if(O.test(b))return f.filter(b,d,!c);b=f.filter(b,d)}return f.grep(a,function(a,d){return f.inArray(a,b)>=0===c})}function S(a){return!a||!a.parentNode||a.parentNode.nodeType===11}function K(){return!0}function J(){return!1}function n(a,b,c){var d=b+"defer",e=b+"queue",g=b+"mark",h=f._data(a,d);h&&(c==="queue"||!f._data(a,e))&&(c==="mark"||!f._data(a,g))&&setTimeout(function(){!f._data(a,e)&&!f._data(a,g)&&(f.removeData(a,d,!0),h.fire())},0)}function m(a){for(var b in a){if(b==="data"&&f.isEmptyObject(a[b]))continue;if(b!=="toJSON")return!1}return!0}function l(a,c,d){if(d===b&&a.nodeType===1){var e="data-"+c.replace(k,"-$1").toLowerCase();d=a.getAttribute(e);if(typeof d=="string"){try{d=d==="true"?!0:d==="false"?!1:d==="null"?null:f.isNumeric(d)?parseFloat(d):j.test(d)?f.parseJSON(d):d}catch(g){}f.data(a,c,d)}else d=b}return d}function h(a){var b=g[a]={},c,d;a=a.split(/\s+/);for(c=0,d=a.length;c<d;c++)b[a[c]]=!0;return b}var c=a.document,d=a.navigator,e=a.location,f=function(){function J(){if(!e.isReady){try{c.documentElement.doScroll("left")}catch(a){setTimeout(J,1);return}e.ready()}}var e=function(a,b){return new e.fn.init(a,b,h)},f=a.jQuery,g=a.$,h,i=/^(?:[^#<]*(<[\w\W]+>)[^>]*$|#([\w\-]*)$)/,j=/\S/,k=/^\s+/,l=/\s+$/,m=/^<(\w+)\s*\/?>(?:<\/\1>)?$/,n=/^[\],:{}\s]*$/,o=/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,p=/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,q=/(?:^|:|,)(?:\s*\[)+/g,r=/(webkit)[ \/]([\w.]+)/,s=/(opera)(?:.*version)?[ \/]([\w.]+)/,t=/(msie) ([\w.]+)/,u=/(mozilla)(?:.*? rv:([\w.]+))?/,v=/-([a-z]|[0-9])/ig,w=/^-ms-/,x=function(a,b){return(b+"").toUpperCase()},y=d.userAgent,z,A,B,C=Object.prototype.toString,D=Object.prototype.hasOwnProperty,E=Array.prototype.push,F=Array.prototype.slice,G=String.prototype.trim,H=Array.prototype.indexOf,I={};e.fn=e.prototype={constructor:e,init:function(a,d,f){var g,h,j,k;if(!a)return this;if(a.nodeType){this.context=this[0]=a,this.length=1;return this}if(a==="body"&&!d&&c.body){this.context=c,this[0]=c.body,this.selector=a,this.length=1;return this}if(typeof a=="string"){a.charAt(0)!=="<"||a.charAt(a.length-1)!==">"||a.length<3?g=i.exec(a):g=[null,a,null];if(g&&(g[1]||!d)){if(g[1]){d=d instanceof e?d[0]:d,k=d?d.ownerDocument||d:c,j=m.exec(a),j?e.isPlainObject(d)?(a=[c.createElement(j[1])],e.fn.attr.call(a,d,!0)):a=[k.createElement(j[1])]:(j=e.buildFragment([g[1]],[k]),a=(j.cacheable?e.clone(j.fragment):j.fragment).childNodes);return e.merge(this,a)}h=c.getElementById(g[2]);if(h&&h.parentNode){if(h.id!==g[2])return f.find(a);this.length=1,this[0]=h}this.context=c,this.selector=a;return this}return!d||d.jquery?(d||f).find(a):this.constructor(d).find(a)}if(e.isFunction(a))return f.ready(a);a.selector!==b&&(this.selector=a.selector,this.context=a.context);return e.makeArray(a,this)},selector:"",jquery:"1.7.1",length:0,size:function(){return this.length},toArray:function(){return F.call(this,0)},get:function(a){return a==null?this.toArray():a<0?this[this.length+a]:this[a]},pushStack:function(a,b,c){var d=this.constructor();e.isArray(a)?E.apply(d,a):e.merge(d,a),d.prevObject=this,d.context=this.context,b==="find"?d.selector=this.selector+(this.selector?" ":"")+c:b&&(d.selector=this.selector+"."+b+"("+c+")");return d},each:function(a,b){return e.each(this,a,b)},ready:function(a){e.bindReady(),A.add(a);return this},eq:function(a){a=+a;return a===-1?this.slice(a):this.slice(a,a+1)},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},slice:function(){return this.pushStack(F.apply(this,arguments),"slice",F.call(arguments).join(","))},map:function(a){return this.pushStack(e.map(this,function(b,c){return a.call(b,c,b)}))},end:function(){return this.prevObject||this.constructor(null)},push:E,sort:[].sort,splice:[].splice},e.fn.init.prototype=e.fn,e.extend=e.fn.extend=function(){var a,c,d,f,g,h,i=arguments[0]||{},j=1,k=arguments.length,l=!1;typeof i=="boolean"&&(l=i,i=arguments[1]||{},j=2),typeof i!="object"&&!e.isFunction(i)&&(i={}),k===j&&(i=this,--j);for(;j<k;j++)if((a=arguments[j])!=null)for(c in a){d=i[c],f=a[c];if(i===f)continue;l&&f&&(e.isPlainObject(f)||(g=e.isArray(f)))?(g?(g=!1,h=d&&e.isArray(d)?d:[]):h=d&&e.isPlainObject(d)?d:{},i[c]=e.extend(l,h,f)):f!==b&&(i[c]=f)}return i},e.extend({noConflict:function(b){a.$===e&&(a.$=g),b&&a.jQuery===e&&(a.jQuery=f);return e},isReady:!1,readyWait:1,holdReady:function(a){a?e.readyWait++:e.ready(!0)},ready:function(a){if(a===!0&&!--e.readyWait||a!==!0&&!e.isReady){if(!c.body)return setTimeout(e.ready,1);e.isReady=!0;if(a!==!0&&--e.readyWait>0)return;A.fireWith(c,[e]),e.fn.trigger&&e(c).trigger("ready").off("ready")}},bindReady:function(){if(!A){A=e.Callbacks("once memory");if(c.readyState==="complete")return setTimeout(e.ready,1);if(c.addEventListener)c.addEventListener("DOMContentLoaded",B,!1),a.addEventListener("load",e.ready,!1);else if(c.attachEvent){c.attachEvent("onreadystatechange",B),a.attachEvent("onload",e.ready);var b=!1;try{b=a.frameElement==null}catch(d){}c.documentElement.doScroll&&b&&J()}}},isFunction:function(a){return e.type(a)==="function"},isArray:Array.isArray||function(a){return e.type(a)==="array"},isWindow:function(a){return a&&typeof a=="object"&&"setInterval"in a},isNumeric:function(a){return!isNaN(parseFloat(a))&&isFinite(a)},type:function(a){return a==null?String(a):I[C.call(a)]||"object"},isPlainObject:function(a){if(!a||e.type(a)!=="object"||a.nodeType||e.isWindow(a))return!1;try{if(a.constructor&&!D.call(a,"constructor")&&!D.call(a.constructor.prototype,"isPrototypeOf"))return!1}catch(c){return!1}var d;for(d in a);return d===b||D.call(a,d)},isEmptyObject:function(a){for(var b in a)return!1;return!0},error:function(a){throw new Error(a)},parseJSON:function(b){if(typeof b!="string"||!b)return null;b=e.trim(b);if(a.JSON&&a.JSON.parse)return a.JSON.parse(b);if(n.test(b.replace(o,"@").replace(p,"]").replace(q,"")))return(new Function("return "+b))();e.error("Invalid JSON: "+b)},parseXML:function(c){var d,f;try{a.DOMParser?(f=new DOMParser,d=f.parseFromString(c,"text/xml")):(d=new ActiveXObject("Microsoft.XMLDOM"),d.async="false",d.loadXML(c))}catch(g){d=b}(!d||!d.documentElement||d.getElementsByTagName("parsererror").length)&&e.error("Invalid XML: "+c);return d},noop:function(){},globalEval:function(b){b&&j.test(b)&&(a.execScript||function(b){a.eval.call(a,b)})(b)},camelCase:function(a){return a.replace(w,"ms-").replace(v,x)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toUpperCase()===b.toUpperCase()},each:function(a,c,d){var f,g=0,h=a.length,i=h===b||e.isFunction(a);if(d){if(i){for(f in a)if(c.apply(a[f],d)===!1)break}else for(;g<h;)if(c.apply(a[g++],d)===!1)break}else if(i){for(f in a)if(c.call(a[f],f,a[f])===!1)break}else for(;g<h;)if(c.call(a[g],g,a[g++])===!1)break;return a},trim:G?function(a){return a==null?"":G.call(a)}:function(a){return a==null?"":(a+"").replace(k,"").replace(l,"")},makeArray:function(a,b){var c=b||[];if(a!=null){var d=e.type(a);a.length==null||d==="string"||d==="function"||d==="regexp"||e.isWindow(a)?E.call(c,a):e.merge(c,a)}return c},inArray:function(a,b,c){var d;if(b){if(H)return H.call(b,a,c);d=b.length,c=c?c<0?Math.max(0,d+c):c:0;for(;c<d;c++)if(c in b&&b[c]===a)return c}return-1},merge:function(a,c){var d=a.length,e=0;if(typeof c.length=="number")for(var f=c.length;e<f;e++)a[d++]=c[e];else while(c[e]!==b)a[d++]=c[e++];a.length=d;return a},grep:function(a,b,c){var d=[],e;c=!!c;for(var f=0,g=a.length;f<g;f++)e=!!b(a[f],f),c!==e&&d.push(a[f]);return d},map:function(a,c,d){var f,g,h=[],i=0,j=a.length,k=a instanceof e||j!==b&&typeof j=="number"&&(j>0&&a[0]&&a[j-1]||j===0||e.isArray(a));if(k)for(;i<j;i++)f=c(a[i],i,d),f!=null&&(h[h.length]=f);else for(g in a)f=c(a[g],g,d),f!=null&&(h[h.length]=f);return h.concat.apply([],h)},guid:1,proxy:function(a,c){if(typeof c=="string"){var d=a[c];c=a,a=d}if(!e.isFunction(a))return b;var f=F.call(arguments,2),g=function(){return a.apply(c,f.concat(F.call(arguments)))};g.guid=a.guid=a.guid||g.guid||e.guid++;return g},access:function(a,c,d,f,g,h){var i=a.length;if(typeof c=="object"){for(var j in c)e.access(a,j,c[j],f,g,d);return a}if(d!==b){f=!h&&f&&e.isFunction(d);for(var k=0;k<i;k++)g(a[k],c,f?d.call(a[k],k,g(a[k],c)):d,h);return a}return i?g(a[0],c):b},now:function(){return(new Date).getTime()},uaMatch:function(a){a=a.toLowerCase();var b=r.exec(a)||s.exec(a)||t.exec(a)||a.indexOf("compatible")<0&&u.exec(a)||[];return{browser:b[1]||"",version:b[2]||"0"}},sub:function(){function a(b,c){return new a.fn.init(b,c)}e.extend(!0,a,this),a.superclass=this,a.fn=a.prototype=this(),a.fn.constructor=a,a.sub=this.sub,a.fn.init=function(d,f){f&&f instanceof e&&!(f instanceof a)&&(f=a(f));return e.fn.init.call(this,d,f,b)},a.fn.init.prototype=a.fn;var b=a(c);return a},browser:{}}),e.each("Boolean Number String Function Array Date RegExp Object".split(" "),function(a,b){I["[object "+b+"]"]=b.toLowerCase()}),z=e.uaMatch(y),z.browser&&(e.browser[z.browser]=!0,e.browser.version=z.version),e.browser.webkit&&(e.browser.safari=!0),j.test(" ")&&(k=/^[\s\xA0]+/,l=/[\s\xA0]+$/),h=e(c),c.addEventListener?B=function(){c.removeEventListener("DOMContentLoaded",B,!1),e.ready()}:c.attachEvent&&(B=function(){c.readyState==="complete"&&(c.detachEvent("onreadystatechange",B),e.ready())});return e}(),g={};f.Callbacks=function(a){a=a?g[a]||h(a):{};var c=[],d=[],e,i,j,k,l,m=function(b){var d,e,g,h,i;for(d=0,e=b.length;d<e;d++)g=b[d],h=f.type(g),h==="array"?m(g):h==="function"&&(!a.unique||!o.has(g))&&c.push(g)},n=function(b,f){f=f||[],e=!a.memory||[b,f],i=!0,l=j||0,j=0,k=c.length;for(;c&&l<k;l++)if(c[l].apply(b,f)===!1&&a.stopOnFalse){e=!0;break}i=!1,c&&(a.once?e===!0?o.disable():c=[]:d&&d.length&&(e=d.shift(),o.fireWith(e[0],e[1])))},o={add:function(){if(c){var a=c.length;m(arguments),i?k=c.length:e&&e!==!0&&(j=a,n(e[0],e[1]))}return this},remove:function(){if(c){var b=arguments,d=0,e=b.length;for(;d<e;d++)for(var f=0;f<c.length;f++)if(b[d]===c[f]){i&&f<=k&&(k--,f<=l&&l--),c.splice(f--,1);if(a.unique)break}}return this},has:function(a){if(c){var b=0,d=c.length;for(;b<d;b++)if(a===c[b])return!0}return!1},empty:function(){c=[];return this},disable:function(){c=d=e=b;return this},disabled:function(){return!c},lock:function(){d=b,(!e||e===!0)&&o.disable();return this},locked:function(){return!d},fireWith:function(b,c){d&&(i?a.once||d.push([b,c]):(!a.once||!e)&&n(b,c));return this},fire:function(){o.fireWith(this,arguments);return this},fired:function(){return!!e}};return o};var i=[].slice;f.extend({Deferred:function(a){var b=f.Callbacks("once memory"),c=f.Callbacks("once memory"),d=f.Callbacks("memory"),e="pending",g={resolve:b,reject:c,notify:d},h={done:b.add,fail:c.add,progress:d.add,state:function(){return e},isResolved:b.fired,isRejected:c.fired,then:function(a,b,c){i.done(a).fail(b).progress(c);return this},always:function(){i.done.apply(i,arguments).fail.apply(i,arguments);return this},pipe:function(a,b,c){return f.Deferred(function(d){f.each({done:[a,"resolve"],fail:[b,"reject"],progress:[c,"notify"]},function(a,b){var c=b[0],e=b[1],g;f.isFunction(c)?i[a](function(){g=c.apply(this,arguments),g&&f.isFunction(g.promise)?g.promise().then(d.resolve,d.reject,d.notify):d[e+"With"](this===i?d:this,[g])}):i[a](d[e])})}).promise()},promise:function(a){if(a==null)a=h;else for(var b in h)a[b]=h[b];return a}},i=h.promise({}),j;for(j in g)i[j]=g[j].fire,i[j+"With"]=g[j].fireWith;i.done(function(){e="resolved"},c.disable,d.lock).fail(function(){e="rejected"},b.disable,d.lock),a&&a.call(i,i);return i},when:function(a){function m(a){return function(b){e[a]=arguments.length>1?i.call(arguments,0):b,j.notifyWith(k,e)}}function l(a){return function(c){b[a]=arguments.length>1?i.call(arguments,0):c,--g||j.resolveWith(j,b)}}var b=i.call(arguments,0),c=0,d=b.length,e=Array(d),g=d,h=d,j=d<=1&&a&&f.isFunction(a.promise)?a:f.Deferred(),k=j.promise();if(d>1){for(;c<d;c++)b[c]&&b[c].promise&&f.isFunction(b[c].promise)?b[c].promise().then(l(c),j.reject,m(c)):--g;g||j.resolveWith(j,b)}else j!==a&&j.resolveWith(j,d?[a]:[]);return k}}),f.support=function(){var b,d,e,g,h,i,j,k,l,m,n,o,p,q=c.createElement("div"),r=c.documentElement;q.setAttribute("className","t"),q.innerHTML="   <link/><table></table><a href='/a' style='top:1px;float:left;opacity:.55;'>a</a><input type='checkbox'/>",d=q.getElementsByTagName("*"),e=q.getElementsByTagName("a")[0];if(!d||!d.length||!e)return{};g=c.createElement("select"),h=g.appendChild(c.createElement("option")),i=q.getElementsByTagName("input")[0],b={leadingWhitespace:q.firstChild.nodeType===3,tbody:!q.getElementsByTagName("tbody").length,htmlSerialize:!!q.getElementsByTagName("link").length,style:/top/.test(e.getAttribute("style")),hrefNormalized:e.getAttribute("href")==="/a",opacity:/^0.55/.test(e.style.opacity),cssFloat:!!e.style.cssFloat,checkOn:i.value==="on",optSelected:h.selected,getSetAttribute:q.className!=="t",enctype:!!c.createElement("form").enctype,html5Clone:c.createElement("nav").cloneNode(!0).outerHTML!=="<:nav></:nav>",submitBubbles:!0,changeBubbles:!0,focusinBubbles:!1,deleteExpando:!0,noCloneEvent:!0,inlineBlockNeedsLayout:!1,shrinkWrapBlocks:!1,reliableMarginRight:!0},i.checked=!0,b.noCloneChecked=i.cloneNode(!0).checked,g.disabled=!0,b.optDisabled=!h.disabled;try{delete q.test}catch(s){b.deleteExpando=!1}!q.addEventListener&&q.attachEvent&&q.fireEvent&&(q.attachEvent("onclick",function(){b.noCloneEvent=!1}),q.cloneNode(!0).fireEvent("onclick")),i=c.createElement("input"),i.value="t",i.setAttribute("type","radio"),b.radioValue=i.value==="t",i.setAttribute("checked","checked"),q.appendChild(i),k=c.createDocumentFragment(),k.appendChild(q.lastChild),b.checkClone=k.cloneNode(!0).cloneNode(!0).lastChild.checked,b.appendChecked=i.checked,k.removeChild(i),k.appendChild(q),q.innerHTML="",a.getComputedStyle&&(j=c.createElement("div"),j.style.width="0",j.style.marginRight="0",q.style.width="2px",q.appendChild(j),b.reliableMarginRight=(parseInt((a.getComputedStyle(j,null)||{marginRight:0}).marginRight,10)||0)===0);if(q.attachEvent)for(o in{submit:1,change:1,focusin:1})n="on"+o,p=n in q,p||(q.setAttribute(n,"return;"),p=typeof q[n]=="function"),b[o+"Bubbles"]=p;k.removeChild(q),k=g=h=j=q=i=null,f(function(){var a,d,e,g,h,i,j,k,m,n,o,r=c.getElementsByTagName("body")[0];!r||(j=1,k="position:absolute;top:0;left:0;width:1px;height:1px;margin:0;",m="visibility:hidden;border:0;",n="style='"+k+"border:5px solid #000;padding:0;'",o="<div "+n+"><div></div></div>"+"<table "+n+" cellpadding='0' cellspacing='0'>"+"<tr><td></td></tr></table>",a=c.createElement("div"),a.style.cssText=m+"width:0;height:0;position:static;top:0;margin-top:"+j+"px",r.insertBefore(a,r.firstChild),q=c.createElement("div"),a.appendChild(q),q.innerHTML="<table><tr><td style='padding:0;border:0;display:none'></td><td>t</td></tr></table>",l=q.getElementsByTagName("td"),p=l[0].offsetHeight===0,l[0].style.display="",l[1].style.display="none",b.reliableHiddenOffsets=p&&l[0].offsetHeight===0,q.innerHTML="",q.style.width=q.style.paddingLeft="1px",f.boxModel=b.boxModel=q.offsetWidth===2,typeof q.style.zoom!="undefined"&&(q.style.display="inline",q.style.zoom=1,b.inlineBlockNeedsLayout=q.offsetWidth===2,q.style.display="",q.innerHTML="<div style='width:4px;'></div>",b.shrinkWrapBlocks=q.offsetWidth!==2),q.style.cssText=k+m,q.innerHTML=o,d=q.firstChild,e=d.firstChild,h=d.nextSibling.firstChild.firstChild,i={doesNotAddBorder:e.offsetTop!==5,doesAddBorderForTableAndCells:h.offsetTop===5},e.style.position="fixed",e.style.top="20px",i.fixedPosition=e.offsetTop===20||e.offsetTop===15,e.style.position=e.style.top="",d.style.overflow="hidden",d.style.position="relative",i.subtractsBorderForOverflowNotVisible=e.offsetTop===-5,i.doesNotIncludeMarginInBodyOffset=r.offsetTop!==j,r.removeChild(a),q=a=null,f.extend(b,i))});return b}();var j=/^(?:\{.*\}|\[.*\])$/,k=/([A-Z])/g;f.extend({cache:{},uuid:0,expando:"jQuery"+(f.fn.jquery+Math.random()).replace(/\D/g,""),noData:{embed:!0,object:"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000",applet:!0},hasData:function(a){a=a.nodeType?f.cache[a[f.expando]]:a[f.expando];return!!a&&!m(a)},data:function(a,c,d,e){if(!!f.acceptData(a)){var g,h,i,j=f.expando,k=typeof c=="string",l=a.nodeType,m=l?f.cache:a,n=l?a[j]:a[j]&&j,o=c==="events";if((!n||!m[n]||!o&&!e&&!m[n].data)&&k&&d===b)return;n||(l?a[j]=n=++f.uuid:n=j),m[n]||(m[n]={},l||(m[n].toJSON=f.noop));if(typeof c=="object"||typeof c=="function")e?m[n]=f.extend(m[n],c):m[n].data=f.extend(m[n].data,c);g=h=m[n],e||(h.data||(h.data={}),h=h.data),d!==b&&(h[f.camelCase(c)]=d);if(o&&!h[c])return g.events;k?(i=h[c],i==null&&(i=h[f.camelCase(c)])):i=h;return i}},removeData:function(a,b,c){if(!!f.acceptData(a)){var d,e,g,h=f.expando,i=a.nodeType,j=i?f.cache:a,k=i?a[h]:h;if(!j[k])return;if(b){d=c?j[k]:j[k].data;if(d){f.isArray(b)||(b in d?b=[b]:(b=f.camelCase(b),b in d?b=[b]:b=b.split(" ")));for(e=0,g=b.length;e<g;e++)delete d[b[e]];if(!(c?m:f.isEmptyObject)(d))return}}if(!c){delete j[k].data;if(!m(j[k]))return}f.support.deleteExpando||!j.setInterval?delete j[k]:j[k]=null,i&&(f.support.deleteExpando?delete a[h]:a.removeAttribute?a.removeAttribute(h):a[h]=null)}},_data:function(a,b,c){return f.data(a,b,c,!0)},acceptData:function(a){if(a.nodeName){var b=f.noData[a.nodeName.toLowerCase()];if(b)return b!==!0&&a.getAttribute("classid")===b}return!0}}),f.fn.extend({data:function(a,c){var d,e,g,h=null;if(typeof a=="undefined"){if(this.length){h=f.data(this[0]);if(this[0].nodeType===1&&!f._data(this[0],"parsedAttrs")){e=this[0].attributes;for(var i=0,j=e.length;i<j;i++)g=e[i].name,g.indexOf("data-")===0&&(g=f.camelCase(g.substring(5)),l(this[0],g,h[g]));f._data(this[0],"parsedAttrs",!0)}}return h}if(typeof a=="object")return this.each(function(){f.data(this,a)});d=a.split("."),d[1]=d[1]?"."+d[1]:"";if(c===b){h=this.triggerHandler("getData"+d[1]+"!",[d[0]]),h===b&&this.length&&(h=f.data(this[0],a),h=l(this[0],a,h));return h===b&&d[1]?this.data(d[0]):h}return this.each(function(){var b=f(this),e=[d[0],c];b.triggerHandler("setData"+d[1]+"!",e),f.data(this,a,c),b.triggerHandler("changeData"+d[1]+"!",e)})},removeData:function(a){return this.each(function(){f.removeData(this,a)})}}),f.extend({_mark:function(a,b){a&&(b=(b||"fx")+"mark",f._data(a,b,(f._data(a,b)||0)+1))},_unmark:function(a,b,c){a!==!0&&(c=b,b=a,a=!1);if(b){c=c||"fx";var d=c+"mark",e=a?0:(f._data(b,d)||1)-1;e?f._data(b,d,e):(f.removeData(b,d,!0),n(b,c,"mark"))}},queue:function(a,b,c){var d;if(a){b=(b||"fx")+"queue",d=f._data(a,b),c&&(!d||f.isArray(c)?d=f._data(a,b,f.makeArray(c)):d.push(c));return d||[]}},dequeue:function(a,b){b=b||"fx";var c=f.queue(a,b),d=c.shift(),e={};d==="inprogress"&&(d=c.shift()),d&&(b==="fx"&&c.unshift("inprogress"),f._data(a,b+".run",e),d.call(a,function(){f.dequeue(a,b)},e)),c.length||(f.removeData(a,b+"queue "+b+".run",!0),n(a,b,"queue"))}}),f.fn.extend({queue:function(a,c){typeof a!="string"&&(c=a,a="fx");if(c===b)return f.queue(this[0],a);return this.each(function(){var b=f.queue(this,a,c);a==="fx"&&b[0]!=="inprogress"&&f.dequeue(this,a)})},dequeue:function(a){return this.each(function(){f.dequeue(this,a)})},delay:function(a,b){a=f.fx?f.fx.speeds[a]||a:a,b=b||"fx";return this.queue(b,function(b,c){var d=setTimeout(b,a);c.stop=function(){clearTimeout(d)}})},clearQueue:function(a){return this.queue(a||"fx",[])},promise:function(a,c){function m(){--h||d.resolveWith(e,[e])}typeof a!="string"&&(c=a,a=b),a=a||"fx";var d=f.Deferred(),e=this,g=e.length,h=1,i=a+"defer",j=a+"queue",k=a+"mark",l;while(g--)if(l=f.data(e[g],i,b,!0)||(f.data(e[g],j,b,!0)||f.data(e[g],k,b,!0))&&f.data(e[g],i,f.Callbacks("once memory"),!0))h++,l.add(m);m();return d.promise()}});var o=/[\n\t\r]/g,p=/\s+/,q=/\r/g,r=/^(?:button|input)$/i,s=/^(?:button|input|object|select|textarea)$/i,t=/^a(?:rea)?$/i,u=/^(?:autofocus|autoplay|async|checked|controls|defer|disabled|hidden|loop|multiple|open|readonly|required|scoped|selected)$/i,v=f.support.getSetAttribute,w,x,y;f.fn.extend({attr:function(a,b){return f.access(this,a,b,!0,f.attr)},removeAttr:function(a){return this.each(function(){f.removeAttr(this,a)})},prop:function(a,b){return f.access(this,a,b,!0,f.prop)},removeProp:function(a){a=f.propFix[a]||a;return this.each(function(){try{this[a]=b,delete this[a]}catch(c){}})},addClass:function(a){var b,c,d,e,g,h,i;if(f.isFunction(a))return this.each(function(b){f(this).addClass(a.call(this,b,this.className))});if(a&&typeof a=="string"){b=a.split(p);for(c=0,d=this.length;c<d;c++){e=this[c];if(e.nodeType===1)if(!e.className&&b.length===1)e.className=a;else{g=" "+e.className+" ";for(h=0,i=b.length;h<i;h++)~g.indexOf(" "+b[h]+" ")||(g+=b[h]+" ");e.className=f.trim(g)}}}return this},removeClass:function(a){var c,d,e,g,h,i,j;if(f.isFunction(a))return this.each(function(b){f(this).removeClass(a.call(this,b,this.className))});if(a&&typeof a=="string"||a===b){c=(a||"").split(p);for(d=0,e=this.length;d<e;d++){g=this[d];if(g.nodeType===1&&g.className)if(a){h=(" "+g.className+" ").replace(o," ");for(i=0,j=c.length;i<j;i++)h=h.replace(" "+c[i]+" "," ");g.className=f.trim(h)}else g.className=""}}return this},toggleClass:function(a,b){var c=typeof a,d=typeof b=="boolean";if(f.isFunction(a))return this.each(function(c){f(this).toggleClass(a.call(this,c,this.className,b),b)});return this.each(function(){if(c==="string"){var e,g=0,h=f(this),i=b,j=a.split(p);while(e=j[g++])i=d?i:!h.hasClass(e),h[i?"addClass":"removeClass"](e)}else if(c==="undefined"||c==="boolean")this.className&&f._data(this,"__className__",this.className),this.className=this.className||a===!1?"":f._data(this,"__className__")||""})},hasClass:function(a){var b=" "+a+" ",c=0,d=this.length;for(;c<d;c++)if(this[c].nodeType===1&&(" "+this[c].className+" ").replace(o," ").indexOf(b)>-1)return!0;return!1},val:function(a){var c,d,e,g=this[0];{if(!!arguments.length){e=f.isFunction(a);return this.each(function(d){var g=f(this),h;if(this.nodeType===1){e?h=a.call(this,d,g.val()):h=a,h==null?h="":typeof h=="number"?h+="":f.isArray(h)&&(h=f.map(h,function(a){return a==null?"":a+""})),c=f.valHooks[this.nodeName.toLowerCase()]||f.valHooks[this.type];if(!c||!("set"in c)||c.set(this,h,"value")===b)this.value=h}})}if(g){c=f.valHooks[g.nodeName.toLowerCase()]||f.valHooks[g.type];if(c&&"get"in c&&(d=c.get(g,"value"))!==b)return d;d=g.value;return typeof d=="string"?d.replace(q,""):d==null?"":d}}}}),f.extend({valHooks:{option:{get:function(a){var b=a.attributes.value;return!b||b.specified?a.value:a.text}},select:{get:function(a){var b,c,d,e,g=a.selectedIndex,h=[],i=a.options,j=a.type==="select-one";if(g<0)return null;c=j?g:0,d=j?g+1:i.length;for(;c<d;c++){e=i[c];if(e.selected&&(f.support.optDisabled?!e.disabled:e.getAttribute("disabled")===null)&&(!e.parentNode.disabled||!f.nodeName(e.parentNode,"optgroup"))){b=f(e).val();if(j)return b;h.push(b)}}if(j&&!h.length&&i.length)return f(i[g]).val();return h},set:function(a,b){var c=f.makeArray(b);f(a).find("option").each(function(){this.selected=f.inArray(f(this).val(),c)>=0}),c.length||(a.selectedIndex=-1);return c}}},attrFn:{val:!0,css:!0,html:!0,text:!0,data:!0,width:!0,height:!0,offset:!0},attr:function(a,c,d,e){var g,h,i,j=a.nodeType;if(!!a&&j!==3&&j!==8&&j!==2){if(e&&c in f.attrFn)return f(a)[c](d);if(typeof a.getAttribute=="undefined")return f.prop(a,c,d);i=j!==1||!f.isXMLDoc(a),i&&(c=c.toLowerCase(),h=f.attrHooks[c]||(u.test(c)?x:w));if(d!==b){if(d===null){f.removeAttr(a,c);return}if(h&&"set"in h&&i&&(g=h.set(a,d,c))!==b)return g;a.setAttribute(c,""+d);return d}if(h&&"get"in h&&i&&(g=h.get(a,c))!==null)return g;g=a.getAttribute(c);return g===null?b:g}},removeAttr:function(a,b){var c,d,e,g,h=0;if(b&&a.nodeType===1){d=b.toLowerCase().split(p),g=d.length;for(;h<g;h++)e=d[h],e&&(c=f.propFix[e]||e,f.attr(a,e,""),a.removeAttribute(v?e:c),u.test(e)&&c in a&&(a[c]=!1))}},attrHooks:{type:{set:function(a,b){if(r.test(a.nodeName)&&a.parentNode)f.error("type property can't be changed");else if(!f.support.radioValue&&b==="radio"&&f.nodeName(a,"input")){var c=a.value;a.setAttribute("type",b),c&&(a.value=c);return b}}},value:{get:function(a,b){if(w&&f.nodeName(a,"button"))return w.get(a,b);return b in a?a.value:null},set:function(a,b,c){if(w&&f.nodeName(a,"button"))return w.set(a,b,c);a.value=b}}},propFix:{tabindex:"tabIndex",readonly:"readOnly","for":"htmlFor","class":"className",maxlength:"maxLength",cellspacing:"cellSpacing",cellpadding:"cellPadding",rowspan:"rowSpan",colspan:"colSpan",usemap:"useMap",frameborder:"frameBorder",contenteditable:"contentEditable"},prop:function(a,c,d){var e,g,h,i=a.nodeType;if(!!a&&i!==3&&i!==8&&i!==2){h=i!==1||!f.isXMLDoc(a),h&&(c=f.propFix[c]||c,g=f.propHooks[c]);return d!==b?g&&"set"in g&&(e=g.set(a,d,c))!==b?e:a[c]=d:g&&"get"in g&&(e=g.get(a,c))!==null?e:a[c]}},propHooks:{tabIndex:{get:function(a){var c=a.getAttributeNode("tabindex");return c&&c.specified?parseInt(c.value,10):s.test(a.nodeName)||t.test(a.nodeName)&&a.href?0:b}}}}),f.attrHooks.tabindex=f.propHooks.tabIndex,x={get:function(a,c){var d,e=f.prop(a,c);return e===!0||typeof e!="boolean"&&(d=a.getAttributeNode(c))&&d.nodeValue!==!1?c.toLowerCase():b},set:function(a,b,c){var d;b===!1?f.removeAttr(a,c):(d=f.propFix[c]||c,d in a&&(a[d]=!0),a.setAttribute(c,c.toLowerCase()));return c}},v||(y={name:!0,id:!0},w=f.valHooks.button={get:function(a,c){var d;d=a.getAttributeNode(c);return d&&(y[c]?d.nodeValue!=="":d.specified)?d.nodeValue:b},set:function(a,b,d){var e=a.getAttributeNode(d);e||(e=c.createAttribute(d),a.setAttributeNode(e));return e.nodeValue=b+""}},f.attrHooks.tabindex.set=w.set,f.each(["width","height"],function(a,b){f.attrHooks[b]=f.extend(f.attrHooks[b],{set:function(a,c){if(c===""){a.setAttribute(b,"auto");return c}}})}),f.attrHooks.contenteditable={get:w.get,set:function(a,b,c){b===""&&(b="false"),w.set(a,b,c)}}),f.support.hrefNormalized||f.each(["href","src","width","height"],function(a,c){f.attrHooks[c]=f.extend(f.attrHooks[c],{get:function(a){var d=a.getAttribute(c,2);return d===null?b:d}})}),f.support.style||(f.attrHooks.style={get:function(a){return a.style.cssText.toLowerCase()||b},set:function(a,b){return a.style.cssText=""+b}}),f.support.optSelected||(f.propHooks.selected=f.extend(f.propHooks.selected,{get:function(a){var b=a.parentNode;b&&(b.selectedIndex,b.parentNode&&b.parentNode.selectedIndex);return null}})),f.support.enctype||(f.propFix.enctype="encoding"),f.support.checkOn||f.each(["radio","checkbox"],function(){f.valHooks[this]={get:function(a){return a.getAttribute("value")===null?"on":a.value}}}),f.each(["radio","checkbox"],function(){f.valHooks[this]=f.extend(f.valHooks[this],{set:function(a,b){if(f.isArray(b))return a.checked=f.inArray(f(a).val(),b)>=0}})});var z=/^(?:textarea|input|select)$/i,A=/^([^\.]*)?(?:\.(.+))?$/,B=/\bhover(\.\S+)?\b/,C=/^key/,D=/^(?:mouse|contextmenu)|click/,E=/^(?:focusinfocus|focusoutblur)$/,F=/^(\w*)(?:#([\w\-]+))?(?:\.([\w\-]+))?$/,G=function(a){var b=F.exec(a);b&&(b[1]=(b[1]||"").toLowerCase(),b[3]=b[3]&&new RegExp("(?:^|\\s)"+b[3]+"(?:\\s|$)"));return b},H=function(a,b){var c=a.attributes||{};return(!b[1]||a.nodeName.toLowerCase()===b[1])&&(!b[2]||(c.id||{}).value===b[2])&&(!b[3]||b[3].test((c["class"]||{}).value))},I=function(a){return f.event.special.hover?a:a.replace(B,"mouseenter$1 mouseleave$1")};
+f.event={add:function(a,c,d,e,g){var h,i,j,k,l,m,n,o,p,q,r,s;if(!(a.nodeType===3||a.nodeType===8||!c||!d||!(h=f._data(a)))){d.handler&&(p=d,d=p.handler),d.guid||(d.guid=f.guid++),j=h.events,j||(h.events=j={}),i=h.handle,i||(h.handle=i=function(a){return typeof f!="undefined"&&(!a||f.event.triggered!==a.type)?f.event.dispatch.apply(i.elem,arguments):b},i.elem=a),c=f.trim(I(c)).split(" ");for(k=0;k<c.length;k++){l=A.exec(c[k])||[],m=l[1],n=(l[2]||"").split(".").sort(),s=f.event.special[m]||{},m=(g?s.delegateType:s.bindType)||m,s=f.event.special[m]||{},o=f.extend({type:m,origType:l[1],data:e,handler:d,guid:d.guid,selector:g,quick:G(g),namespace:n.join(".")},p),r=j[m];if(!r){r=j[m]=[],r.delegateCount=0;if(!s.setup||s.setup.call(a,e,n,i)===!1)a.addEventListener?a.addEventListener(m,i,!1):a.attachEvent&&a.attachEvent("on"+m,i)}s.add&&(s.add.call(a,o),o.handler.guid||(o.handler.guid=d.guid)),g?r.splice(r.delegateCount++,0,o):r.push(o),f.event.global[m]=!0}a=null}},global:{},remove:function(a,b,c,d,e){var g=f.hasData(a)&&f._data(a),h,i,j,k,l,m,n,o,p,q,r,s;if(!!g&&!!(o=g.events)){b=f.trim(I(b||"")).split(" ");for(h=0;h<b.length;h++){i=A.exec(b[h])||[],j=k=i[1],l=i[2];if(!j){for(j in o)f.event.remove(a,j+b[h],c,d,!0);continue}p=f.event.special[j]||{},j=(d?p.delegateType:p.bindType)||j,r=o[j]||[],m=r.length,l=l?new RegExp("(^|\\.)"+l.split(".").sort().join("\\.(?:.*\\.)?")+"(\\.|$)"):null;for(n=0;n<r.length;n++)s=r[n],(e||k===s.origType)&&(!c||c.guid===s.guid)&&(!l||l.test(s.namespace))&&(!d||d===s.selector||d==="**"&&s.selector)&&(r.splice(n--,1),s.selector&&r.delegateCount--,p.remove&&p.remove.call(a,s));r.length===0&&m!==r.length&&((!p.teardown||p.teardown.call(a,l)===!1)&&f.removeEvent(a,j,g.handle),delete o[j])}f.isEmptyObject(o)&&(q=g.handle,q&&(q.elem=null),f.removeData(a,["events","handle"],!0))}},customEvent:{getData:!0,setData:!0,changeData:!0},trigger:function(c,d,e,g){if(!e||e.nodeType!==3&&e.nodeType!==8){var h=c.type||c,i=[],j,k,l,m,n,o,p,q,r,s;if(E.test(h+f.event.triggered))return;h.indexOf("!")>=0&&(h=h.slice(0,-1),k=!0),h.indexOf(".")>=0&&(i=h.split("."),h=i.shift(),i.sort());if((!e||f.event.customEvent[h])&&!f.event.global[h])return;c=typeof c=="object"?c[f.expando]?c:new f.Event(h,c):new f.Event(h),c.type=h,c.isTrigger=!0,c.exclusive=k,c.namespace=i.join("."),c.namespace_re=c.namespace?new RegExp("(^|\\.)"+i.join("\\.(?:.*\\.)?")+"(\\.|$)"):null,o=h.indexOf(":")<0?"on"+h:"";if(!e){j=f.cache;for(l in j)j[l].events&&j[l].events[h]&&f.event.trigger(c,d,j[l].handle.elem,!0);return}c.result=b,c.target||(c.target=e),d=d!=null?f.makeArray(d):[],d.unshift(c),p=f.event.special[h]||{};if(p.trigger&&p.trigger.apply(e,d)===!1)return;r=[[e,p.bindType||h]];if(!g&&!p.noBubble&&!f.isWindow(e)){s=p.delegateType||h,m=E.test(s+h)?e:e.parentNode,n=null;for(;m;m=m.parentNode)r.push([m,s]),n=m;n&&n===e.ownerDocument&&r.push([n.defaultView||n.parentWindow||a,s])}for(l=0;l<r.length&&!c.isPropagationStopped();l++)m=r[l][0],c.type=r[l][1],q=(f._data(m,"events")||{})[c.type]&&f._data(m,"handle"),q&&q.apply(m,d),q=o&&m[o],q&&f.acceptData(m)&&q.apply(m,d)===!1&&c.preventDefault();c.type=h,!g&&!c.isDefaultPrevented()&&(!p._default||p._default.apply(e.ownerDocument,d)===!1)&&(h!=="click"||!f.nodeName(e,"a"))&&f.acceptData(e)&&o&&e[h]&&(h!=="focus"&&h!=="blur"||c.target.offsetWidth!==0)&&!f.isWindow(e)&&(n=e[o],n&&(e[o]=null),f.event.triggered=h,e[h](),f.event.triggered=b,n&&(e[o]=n));return c.result}},dispatch:function(c){c=f.event.fix(c||a.event);var d=(f._data(this,"events")||{})[c.type]||[],e=d.delegateCount,g=[].slice.call(arguments,0),h=!c.exclusive&&!c.namespace,i=[],j,k,l,m,n,o,p,q,r,s,t;g[0]=c,c.delegateTarget=this;if(e&&!c.target.disabled&&(!c.button||c.type!=="click")){m=f(this),m.context=this.ownerDocument||this;for(l=c.target;l!=this;l=l.parentNode||this){o={},q=[],m[0]=l;for(j=0;j<e;j++)r=d[j],s=r.selector,o[s]===b&&(o[s]=r.quick?H(l,r.quick):m.is(s)),o[s]&&q.push(r);q.length&&i.push({elem:l,matches:q})}}d.length>e&&i.push({elem:this,matches:d.slice(e)});for(j=0;j<i.length&&!c.isPropagationStopped();j++){p=i[j],c.currentTarget=p.elem;for(k=0;k<p.matches.length&&!c.isImmediatePropagationStopped();k++){r=p.matches[k];if(h||!c.namespace&&!r.namespace||c.namespace_re&&c.namespace_re.test(r.namespace))c.data=r.data,c.handleObj=r,n=((f.event.special[r.origType]||{}).handle||r.handler).apply(p.elem,g),n!==b&&(c.result=n,n===!1&&(c.preventDefault(),c.stopPropagation()))}}return c.result},props:"attrChange attrName relatedNode srcElement altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "),fixHooks:{},keyHooks:{props:"char charCode key keyCode".split(" "),filter:function(a,b){a.which==null&&(a.which=b.charCode!=null?b.charCode:b.keyCode);return a}},mouseHooks:{props:"button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement".split(" "),filter:function(a,d){var e,f,g,h=d.button,i=d.fromElement;a.pageX==null&&d.clientX!=null&&(e=a.target.ownerDocument||c,f=e.documentElement,g=e.body,a.pageX=d.clientX+(f&&f.scrollLeft||g&&g.scrollLeft||0)-(f&&f.clientLeft||g&&g.clientLeft||0),a.pageY=d.clientY+(f&&f.scrollTop||g&&g.scrollTop||0)-(f&&f.clientTop||g&&g.clientTop||0)),!a.relatedTarget&&i&&(a.relatedTarget=i===a.target?d.toElement:i),!a.which&&h!==b&&(a.which=h&1?1:h&2?3:h&4?2:0);return a}},fix:function(a){if(a[f.expando])return a;var d,e,g=a,h=f.event.fixHooks[a.type]||{},i=h.props?this.props.concat(h.props):this.props;a=f.Event(g);for(d=i.length;d;)e=i[--d],a[e]=g[e];a.target||(a.target=g.srcElement||c),a.target.nodeType===3&&(a.target=a.target.parentNode),a.metaKey===b&&(a.metaKey=a.ctrlKey);return h.filter?h.filter(a,g):a},special:{ready:{setup:f.bindReady},load:{noBubble:!0},focus:{delegateType:"focusin"},blur:{delegateType:"focusout"},beforeunload:{setup:function(a,b,c){f.isWindow(this)&&(this.onbeforeunload=c)},teardown:function(a,b){this.onbeforeunload===b&&(this.onbeforeunload=null)}}},simulate:function(a,b,c,d){var e=f.extend(new f.Event,c,{type:a,isSimulated:!0,originalEvent:{}});d?f.event.trigger(e,null,b):f.event.dispatch.call(b,e),e.isDefaultPrevented()&&c.preventDefault()}},f.event.handle=f.event.dispatch,f.removeEvent=c.removeEventListener?function(a,b,c){a.removeEventListener&&a.removeEventListener(b,c,!1)}:function(a,b,c){a.detachEvent&&a.detachEvent("on"+b,c)},f.Event=function(a,b){if(!(this instanceof f.Event))return new f.Event(a,b);a&&a.type?(this.originalEvent=a,this.type=a.type,this.isDefaultPrevented=a.defaultPrevented||a.returnValue===!1||a.getPreventDefault&&a.getPreventDefault()?K:J):this.type=a,b&&f.extend(this,b),this.timeStamp=a&&a.timeStamp||f.now(),this[f.expando]=!0},f.Event.prototype={preventDefault:function(){this.isDefaultPrevented=K;var a=this.originalEvent;!a||(a.preventDefault?a.preventDefault():a.returnValue=!1)},stopPropagation:function(){this.isPropagationStopped=K;var a=this.originalEvent;!a||(a.stopPropagation&&a.stopPropagation(),a.cancelBubble=!0)},stopImmediatePropagation:function(){this.isImmediatePropagationStopped=K,this.stopPropagation()},isDefaultPrevented:J,isPropagationStopped:J,isImmediatePropagationStopped:J},f.each({mouseenter:"mouseover",mouseleave:"mouseout"},function(a,b){f.event.special[a]={delegateType:b,bindType:b,handle:function(a){var c=this,d=a.relatedTarget,e=a.handleObj,g=e.selector,h;if(!d||d!==c&&!f.contains(c,d))a.type=e.origType,h=e.handler.apply(this,arguments),a.type=b;return h}}}),f.support.submitBubbles||(f.event.special.submit={setup:function(){if(f.nodeName(this,"form"))return!1;f.event.add(this,"click._submit keypress._submit",function(a){var c=a.target,d=f.nodeName(c,"input")||f.nodeName(c,"button")?c.form:b;d&&!d._submit_attached&&(f.event.add(d,"submit._submit",function(a){this.parentNode&&!a.isTrigger&&f.event.simulate("submit",this.parentNode,a,!0)}),d._submit_attached=!0)})},teardown:function(){if(f.nodeName(this,"form"))return!1;f.event.remove(this,"._submit")}}),f.support.changeBubbles||(f.event.special.change={setup:function(){if(z.test(this.nodeName)){if(this.type==="checkbox"||this.type==="radio")f.event.add(this,"propertychange._change",function(a){a.originalEvent.propertyName==="checked"&&(this._just_changed=!0)}),f.event.add(this,"click._change",function(a){this._just_changed&&!a.isTrigger&&(this._just_changed=!1,f.event.simulate("change",this,a,!0))});return!1}f.event.add(this,"beforeactivate._change",function(a){var b=a.target;z.test(b.nodeName)&&!b._change_attached&&(f.event.add(b,"change._change",function(a){this.parentNode&&!a.isSimulated&&!a.isTrigger&&f.event.simulate("change",this.parentNode,a,!0)}),b._change_attached=!0)})},handle:function(a){var b=a.target;if(this!==b||a.isSimulated||a.isTrigger||b.type!=="radio"&&b.type!=="checkbox")return a.handleObj.handler.apply(this,arguments)},teardown:function(){f.event.remove(this,"._change");return z.test(this.nodeName)}}),f.support.focusinBubbles||f.each({focus:"focusin",blur:"focusout"},function(a,b){var d=0,e=function(a){f.event.simulate(b,a.target,f.event.fix(a),!0)};f.event.special[b]={setup:function(){d++===0&&c.addEventListener(a,e,!0)},teardown:function(){--d===0&&c.removeEventListener(a,e,!0)}}}),f.fn.extend({on:function(a,c,d,e,g){var h,i;if(typeof a=="object"){typeof c!="string"&&(d=c,c=b);for(i in a)this.on(i,c,d,a[i],g);return this}d==null&&e==null?(e=c,d=c=b):e==null&&(typeof c=="string"?(e=d,d=b):(e=d,d=c,c=b));if(e===!1)e=J;else if(!e)return this;g===1&&(h=e,e=function(a){f().off(a);return h.apply(this,arguments)},e.guid=h.guid||(h.guid=f.guid++));return this.each(function(){f.event.add(this,a,e,d,c)})},one:function(a,b,c,d){return this.on.call(this,a,b,c,d,1)},off:function(a,c,d){if(a&&a.preventDefault&&a.handleObj){var e=a.handleObj;f(a.delegateTarget).off(e.namespace?e.type+"."+e.namespace:e.type,e.selector,e.handler);return this}if(typeof a=="object"){for(var g in a)this.off(g,c,a[g]);return this}if(c===!1||typeof c=="function")d=c,c=b;d===!1&&(d=J);return this.each(function(){f.event.remove(this,a,d,c)})},bind:function(a,b,c){return this.on(a,null,b,c)},unbind:function(a,b){return this.off(a,null,b)},live:function(a,b,c){f(this.context).on(a,this.selector,b,c);return this},die:function(a,b){f(this.context).off(a,this.selector||"**",b);return this},delegate:function(a,b,c,d){return this.on(b,a,c,d)},undelegate:function(a,b,c){return arguments.length==1?this.off(a,"**"):this.off(b,a,c)},trigger:function(a,b){return this.each(function(){f.event.trigger(a,b,this)})},triggerHandler:function(a,b){if(this[0])return f.event.trigger(a,b,this[0],!0)},toggle:function(a){var b=arguments,c=a.guid||f.guid++,d=0,e=function(c){var e=(f._data(this,"lastToggle"+a.guid)||0)%d;f._data(this,"lastToggle"+a.guid,e+1),c.preventDefault();return b[e].apply(this,arguments)||!1};e.guid=c;while(d<b.length)b[d++].guid=c;return this.click(e)},hover:function(a,b){return this.mouseenter(a).mouseleave(b||a)}}),f.each("blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error contextmenu".split(" "),function(a,b){f.fn[b]=function(a,c){c==null&&(c=a,a=null);return arguments.length>0?this.on(b,null,a,c):this.trigger(b)},f.attrFn&&(f.attrFn[b]=!0),C.test(b)&&(f.event.fixHooks[b]=f.event.keyHooks),D.test(b)&&(f.event.fixHooks[b]=f.event.mouseHooks)}),function(){function x(a,b,c,e,f,g){for(var h=0,i=e.length;h<i;h++){var j=e[h];if(j){var k=!1;j=j[a];while(j){if(j[d]===c){k=e[j.sizset];break}if(j.nodeType===1){g||(j[d]=c,j.sizset=h);if(typeof b!="string"){if(j===b){k=!0;break}}else if(m.filter(b,[j]).length>0){k=j;break}}j=j[a]}e[h]=k}}}function w(a,b,c,e,f,g){for(var h=0,i=e.length;h<i;h++){var j=e[h];if(j){var k=!1;j=j[a];while(j){if(j[d]===c){k=e[j.sizset];break}j.nodeType===1&&!g&&(j[d]=c,j.sizset=h);if(j.nodeName.toLowerCase()===b){k=j;break}j=j[a]}e[h]=k}}}var a=/((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^\[\]]*\]|['"][^'"]*['"]|[^\[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,d="sizcache"+(Math.random()+"").replace(".",""),e=0,g=Object.prototype.toString,h=!1,i=!0,j=/\\/g,k=/\r\n/g,l=/\W/;[0,0].sort(function(){i=!1;return 0});var m=function(b,d,e,f){e=e||[],d=d||c;var h=d;if(d.nodeType!==1&&d.nodeType!==9)return[];if(!b||typeof b!="string")return e;var i,j,k,l,n,q,r,t,u=!0,v=m.isXML(d),w=[],x=b;do{a.exec(""),i=a.exec(x);if(i){x=i[3],w.push(i[1]);if(i[2]){l=i[3];break}}}while(i);if(w.length>1&&p.exec(b))if(w.length===2&&o.relative[w[0]])j=y(w[0]+w[1],d,f);else{j=o.relative[w[0]]?[d]:m(w.shift(),d);while(w.length)b=w.shift(),o.relative[b]&&(b+=w.shift()),j=y(b,j,f)}else{!f&&w.length>1&&d.nodeType===9&&!v&&o.match.ID.test(w[0])&&!o.match.ID.test(w[w.length-1])&&(n=m.find(w.shift(),d,v),d=n.expr?m.filter(n.expr,n.set)[0]:n.set[0]);if(d){n=f?{expr:w.pop(),set:s(f)}:m.find(w.pop(),w.length===1&&(w[0]==="~"||w[0]==="+")&&d.parentNode?d.parentNode:d,v),j=n.expr?m.filter(n.expr,n.set):n.set,w.length>0?k=s(j):u=!1;while(w.length)q=w.pop(),r=q,o.relative[q]?r=w.pop():q="",r==null&&(r=d),o.relative[q](k,r,v)}else k=w=[]}k||(k=j),k||m.error(q||b);if(g.call(k)==="[object Array]")if(!u)e.push.apply(e,k);else if(d&&d.nodeType===1)for(t=0;k[t]!=null;t++)k[t]&&(k[t]===!0||k[t].nodeType===1&&m.contains(d,k[t]))&&e.push(j[t]);else for(t=0;k[t]!=null;t++)k[t]&&k[t].nodeType===1&&e.push(j[t]);else s(k,e);l&&(m(l,h,e,f),m.uniqueSort(e));return e};m.uniqueSort=function(a){if(u){h=i,a.sort(u);if(h)for(var b=1;b<a.length;b++)a[b]===a[b-1]&&a.splice(b--,1)}return a},m.matches=function(a,b){return m(a,null,null,b)},m.matchesSelector=function(a,b){return m(b,null,null,[a]).length>0},m.find=function(a,b,c){var d,e,f,g,h,i;if(!a)return[];for(e=0,f=o.order.length;e<f;e++){h=o.order[e];if(g=o.leftMatch[h].exec(a)){i=g[1],g.splice(1,1);if(i.substr(i.length-1)!=="\\"){g[1]=(g[1]||"").replace(j,""),d=o.find[h](g,b,c);if(d!=null){a=a.replace(o.match[h],"");break}}}}d||(d=typeof b.getElementsByTagName!="undefined"?b.getElementsByTagName("*"):[]);return{set:d,expr:a}},m.filter=function(a,c,d,e){var f,g,h,i,j,k,l,n,p,q=a,r=[],s=c,t=c&&c[0]&&m.isXML(c[0]);while(a&&c.length){for(h in o.filter)if((f=o.leftMatch[h].exec(a))!=null&&f[2]){k=o.filter[h],l=f[1],g=!1,f.splice(1,1);if(l.substr(l.length-1)==="\\")continue;s===r&&(r=[]);if(o.preFilter[h]){f=o.preFilter[h](f,s,d,r,e,t);if(!f)g=i=!0;else if(f===!0)continue}if(f)for(n=0;(j=s[n])!=null;n++)j&&(i=k(j,f,n,s),p=e^i,d&&i!=null?p?g=!0:s[n]=!1:p&&(r.push(j),g=!0));if(i!==b){d||(s=r),a=a.replace(o.match[h],"");if(!g)return[];break}}if(a===q)if(g==null)m.error(a);else break;q=a}return s},m.error=function(a){throw new Error("Syntax error, unrecognized expression: "+a)};var n=m.getText=function(a){var b,c,d=a.nodeType,e="";if(d){if(d===1||d===9){if(typeof a.textContent=="string")return a.textContent;if(typeof a.innerText=="string")return a.innerText.replace(k,"");for(a=a.firstChild;a;a=a.nextSibling)e+=n(a)}else if(d===3||d===4)return a.nodeValue}else for(b=0;c=a[b];b++)c.nodeType!==8&&(e+=n(c));return e},o=m.selectors={order:["ID","NAME","TAG"],match:{ID:/#((?:[\w\u00c0-\uFFFF\-]|\\.)+)/,CLASS:/\.((?:[\w\u00c0-\uFFFF\-]|\\.)+)/,NAME:/\[name=['"]*((?:[\w\u00c0-\uFFFF\-]|\\.)+)['"]*\]/,ATTR:/\[\s*((?:[\w\u00c0-\uFFFF\-]|\\.)+)\s*(?:(\S?=)\s*(?:(['"])(.*?)\3|(#?(?:[\w\u00c0-\uFFFF\-]|\\.)*)|)|)\s*\]/,TAG:/^((?:[\w\u00c0-\uFFFF\*\-]|\\.)+)/,CHILD:/:(only|nth|last|first)-child(?:\(\s*(even|odd|(?:[+\-]?\d+|(?:[+\-]?\d*)?n\s*(?:[+\-]\s*\d+)?))\s*\))?/,POS:/:(nth|eq|gt|lt|first|last|even|odd)(?:\((\d*)\))?(?=[^\-]|$)/,PSEUDO:/:((?:[\w\u00c0-\uFFFF\-]|\\.)+)(?:\((['"]?)((?:\([^\)]+\)|[^\(\)]*)+)\2\))?/},leftMatch:{},attrMap:{"class":"className","for":"htmlFor"},attrHandle:{href:function(a){return a.getAttribute("href")},type:function(a){return a.getAttribute("type")}},relative:{"+":function(a,b){var c=typeof b=="string",d=c&&!l.test(b),e=c&&!d;d&&(b=b.toLowerCase());for(var f=0,g=a.length,h;f<g;f++)if(h=a[f]){while((h=h.previousSibling)&&h.nodeType!==1);a[f]=e||h&&h.nodeName.toLowerCase()===b?h||!1:h===b}e&&m.filter(b,a,!0)},">":function(a,b){var c,d=typeof b=="string",e=0,f=a.length;if(d&&!l.test(b)){b=b.toLowerCase();for(;e<f;e++){c=a[e];if(c){var g=c.parentNode;a[e]=g.nodeName.toLowerCase()===b?g:!1}}}else{for(;e<f;e++)c=a[e],c&&(a[e]=d?c.parentNode:c.parentNode===b);d&&m.filter(b,a,!0)}},"":function(a,b,c){var d,f=e++,g=x;typeof b=="string"&&!l.test(b)&&(b=b.toLowerCase(),d=b,g=w),g("parentNode",b,f,a,d,c)},"~":function(a,b,c){var d,f=e++,g=x;typeof b=="string"&&!l.test(b)&&(b=b.toLowerCase(),d=b,g=w),g("previousSibling",b,f,a,d,c)}},find:{ID:function(a,b,c){if(typeof b.getElementById!="undefined"&&!c){var d=b.getElementById(a[1]);return d&&d.parentNode?[d]:[]}},NAME:function(a,b){if(typeof b.getElementsByName!="undefined"){var c=[],d=b.getElementsByName(a[1]);for(var e=0,f=d.length;e<f;e++)d[e].getAttribute("name")===a[1]&&c.push(d[e]);return c.length===0?null:c}},TAG:function(a,b){if(typeof b.getElementsByTagName!="undefined")return b.getElementsByTagName(a[1])}},preFilter:{CLASS:function(a,b,c,d,e,f){a=" "+a[1].replace(j,"")+" ";if(f)return a;for(var g=0,h;(h=b[g])!=null;g++)h&&(e^(h.className&&(" "+h.className+" ").replace(/[\t\n\r]/g," ").indexOf(a)>=0)?c||d.push(h):c&&(b[g]=!1));return!1},ID:function(a){return a[1].replace(j,"")},TAG:function(a,b){return a[1].replace(j,"").toLowerCase()},CHILD:function(a){if(a[1]==="nth"){a[2]||m.error(a[0]),a[2]=a[2].replace(/^\+|\s*/g,"");var b=/(-?)(\d*)(?:n([+\-]?\d*))?/.exec(a[2]==="even"&&"2n"||a[2]==="odd"&&"2n+1"||!/\D/.test(a[2])&&"0n+"+a[2]||a[2]);a[2]=b[1]+(b[2]||1)-0,a[3]=b[3]-0}else a[2]&&m.error(a[0]);a[0]=e++;return a},ATTR:function(a,b,c,d,e,f){var g=a[1]=a[1].replace(j,"");!f&&o.attrMap[g]&&(a[1]=o.attrMap[g]),a[4]=(a[4]||a[5]||"").replace(j,""),a[2]==="~="&&(a[4]=" "+a[4]+" ");return a},PSEUDO:function(b,c,d,e,f){if(b[1]==="not")if((a.exec(b[3])||"").length>1||/^\w/.test(b[3]))b[3]=m(b[3],null,null,c);else{var g=m.filter(b[3],c,d,!0^f);d||e.push.apply(e,g);return!1}else if(o.match.POS.test(b[0])||o.match.CHILD.test(b[0]))return!0;return b},POS:function(a){a.unshift(!0);return a}},filters:{enabled:function(a){return a.disabled===!1&&a.type!=="hidden"},disabled:function(a){return a.disabled===!0},checked:function(a){return a.checked===!0},selected:function(a){a.parentNode&&a.parentNode.selectedIndex;return a.selected===!0},parent:function(a){return!!a.firstChild},empty:function(a){return!a.firstChild},has:function(a,b,c){return!!m(c[3],a).length},header:function(a){return/h\d/i.test(a.nodeName)},text:function(a){var b=a.getAttribute("type"),c=a.type;return a.nodeName.toLowerCase()==="input"&&"text"===c&&(b===c||b===null)},radio:function(a){return a.nodeName.toLowerCase()==="input"&&"radio"===a.type},checkbox:function(a){return a.nodeName.toLowerCase()==="input"&&"checkbox"===a.type},file:function(a){return a.nodeName.toLowerCase()==="input"&&"file"===a.type},password:function(a){return a.nodeName.toLowerCase()==="input"&&"password"===a.type},submit:function(a){var b=a.nodeName.toLowerCase();return(b==="input"||b==="button")&&"submit"===a.type},image:function(a){return a.nodeName.toLowerCase()==="input"&&"image"===a.type},reset:function(a){var b=a.nodeName.toLowerCase();return(b==="input"||b==="button")&&"reset"===a.type},button:function(a){var b=a.nodeName.toLowerCase();return b==="input"&&"button"===a.type||b==="button"},input:function(a){return/input|select|textarea|button/i.test(a.nodeName)},focus:function(a){return a===a.ownerDocument.activeElement}},setFilters:{first:function(a,b){return b===0},last:function(a,b,c,d){return b===d.length-1},even:function(a,b){return b%2===0},odd:function(a,b){return b%2===1},lt:function(a,b,c){return b<c[3]-0},gt:function(a,b,c){return b>c[3]-0},nth:function(a,b,c){return c[3]-0===b},eq:function(a,b,c){return c[3]-0===b}},filter:{PSEUDO:function(a,b,c,d){var e=b[1],f=o.filters[e];if(f)return f(a,c,b,d);if(e==="contains")return(a.textContent||a.innerText||n([a])||"").indexOf(b[3])>=0;if(e==="not"){var g=b[3];for(var h=0,i=g.length;h<i;h++)if(g[h]===a)return!1;return!0}m.error(e)},CHILD:function(a,b){var c,e,f,g,h,i,j,k=b[1],l=a;switch(k){case"only":case"first":while(l=l.previousSibling)if(l.nodeType===1)return!1;if(k==="first")return!0;l=a;case"last":while(l=l.nextSibling)if(l.nodeType===1)return!1;return!0;case"nth":c=b[2],e=b[3];if(c===1&&e===0)return!0;f=b[0],g=a.parentNode;if(g&&(g[d]!==f||!a.nodeIndex)){i=0;for(l=g.firstChild;l;l=l.nextSibling)l.nodeType===1&&(l.nodeIndex=++i);g[d]=f}j=a.nodeIndex-e;return c===0?j===0:j%c===0&&j/c>=0}},ID:function(a,b){return a.nodeType===1&&a.getAttribute("id")===b},TAG:function(a,b){return b==="*"&&a.nodeType===1||!!a.nodeName&&a.nodeName.toLowerCase()===b},CLASS:function(a,b){return(" "+(a.className||a.getAttribute("class"))+" ").indexOf(b)>-1},ATTR:function(a,b){var c=b[1],d=m.attr?m.attr(a,c):o.attrHandle[c]?o.attrHandle[c](a):a[c]!=null?a[c]:a.getAttribute(c),e=d+"",f=b[2],g=b[4];return d==null?f==="!=":!f&&m.attr?d!=null:f==="="?e===g:f==="*="?e.indexOf(g)>=0:f==="~="?(" "+e+" ").indexOf(g)>=0:g?f==="!="?e!==g:f==="^="?e.indexOf(g)===0:f==="$="?e.substr(e.length-g.length)===g:f==="|="?e===g||e.substr(0,g.length+1)===g+"-":!1:e&&d!==!1},POS:function(a,b,c,d){var e=b[2],f=o.setFilters[e];if(f)return f(a,c,b,d)}}},p=o.match.POS,q=function(a,b){return"\\"+(b-0+1)};for(var r in o.match)o.match[r]=new RegExp(o.match[r].source+/(?![^\[]*\])(?![^\(]*\))/.source),o.leftMatch[r]=new RegExp(/(^(?:.|\r|\n)*?)/.source+o.match[r].source.replace(/\\(\d+)/g,q));var s=function(a,b){a=Array.prototype.slice.call(a,0);if(b){b.push.apply(b,a);return b}return a};try{Array.prototype.slice.call(c.documentElement.childNodes,0)[0].nodeType}catch(t){s=function(a,b){var c=0,d=b||[];if(g.call(a)==="[object Array]")Array.prototype.push.apply(d,a);else if(typeof a.length=="number")for(var e=a.length;c<e;c++)d.push(a[c]);else for(;a[c];c++)d.push(a[c]);return d}}var u,v;c.documentElement.compareDocumentPosition?u=function(a,b){if(a===b){h=!0;return 0}if(!a.compareDocumentPosition||!b.compareDocumentPosition)return a.compareDocumentPosition?-1:1;return a.compareDocumentPosition(b)&4?-1:1}:(u=function(a,b){if(a===b){h=!0;return 0}if(a.sourceIndex&&b.sourceIndex)return a.sourceIndex-b.sourceIndex;var c,d,e=[],f=[],g=a.parentNode,i=b.parentNode,j=g;if(g===i)return v(a,b);if(!g)return-1;if(!i)return 1;while(j)e.unshift(j),j=j.parentNode;j=i;while(j)f.unshift(j),j=j.parentNode;c=e.length,d=f.length;for(var k=0;k<c&&k<d;k++)if(e[k]!==f[k])return v(e[k],f[k]);return k===c?v(a,f[k],-1):v(e[k],b,1)},v=function(a,b,c){if(a===b)return c;var d=a.nextSibling;while(d){if(d===b)return-1;d=d.nextSibling}return 1}),function(){var a=c.createElement("div"),d="script"+(new Date).getTime(),e=c.documentElement;a.innerHTML="<a name='"+d+"'/>",e.insertBefore(a,e.firstChild),c.getElementById(d)&&(o.find.ID=function(a,c,d){if(typeof c.getElementById!="undefined"&&!d){var e=c.getElementById(a[1]);return e?e.id===a[1]||typeof e.getAttributeNode!="undefined"&&e.getAttributeNode("id").nodeValue===a[1]?[e]:b:[]}},o.filter.ID=function(a,b){var c=typeof a.getAttributeNode!="undefined"&&a.getAttributeNode("id");return a.nodeType===1&&c&&c.nodeValue===b}),e.removeChild(a),e=a=null}(),function(){var a=c.createElement("div");a.appendChild(c.createComment("")),a.getElementsByTagName("*").length>0&&(o.find.TAG=function(a,b){var c=b.getElementsByTagName(a[1]);if(a[1]==="*"){var d=[];for(var e=0;c[e];e++)c[e].nodeType===1&&d.push(c[e]);c=d}return c}),a.innerHTML="<a href='#'></a>",a.firstChild&&typeof a.firstChild.getAttribute!="undefined"&&a.firstChild.getAttribute("href")!=="#"&&(o.attrHandle.href=function(a){return a.getAttribute("href",2)}),a=null}(),c.querySelectorAll&&function(){var a=m,b=c.createElement("div"),d="__sizzle__";b.innerHTML="<p class='TEST'></p>";if(!b.querySelectorAll||b.querySelectorAll(".TEST").length!==0){m=function(b,e,f,g){e=e||c;if(!g&&!m.isXML(e)){var h=/^(\w+$)|^\.([\w\-]+$)|^#([\w\-]+$)/.exec(b);if(h&&(e.nodeType===1||e.nodeType===9)){if(h[1])return s(e.getElementsByTagName(b),f);if(h[2]&&o.find.CLASS&&e.getElementsByClassName)return s(e.getElementsByClassName(h[2]),f)}if(e.nodeType===9){if(b==="body"&&e.body)return s([e.body],f);if(h&&h[3]){var i=e.getElementById(h[3]);if(!i||!i.parentNode)return s([],f);if(i.id===h[3])return s([i],f)}try{return s(e.querySelectorAll(b),f)}catch(j){}}else if(e.nodeType===1&&e.nodeName.toLowerCase()!=="object"){var k=e,l=e.getAttribute("id"),n=l||d,p=e.parentNode,q=/^\s*[+~]/.test(b);l?n=n.replace(/'/g,"\\$&"):e.setAttribute("id",n),q&&p&&(e=e.parentNode);try{if(!q||p)return s(e.querySelectorAll("[id='"+n+"'] "+b),f)}catch(r){}finally{l||k.removeAttribute("id")}}}return a(b,e,f,g)};for(var e in a)m[e]=a[e];b=null}}(),function(){var a=c.documentElement,b=a.matchesSelector||a.mozMatchesSelector||a.webkitMatchesSelector||a.msMatchesSelector;if(b){var d=!b.call(c.createElement("div"),"div"),e=!1;try{b.call(c.documentElement,"[test!='']:sizzle")}catch(f){e=!0}m.matchesSelector=function(a,c){c=c.replace(/\=\s*([^'"\]]*)\s*\]/g,"='$1']");if(!m.isXML(a))try{if(e||!o.match.PSEUDO.test(c)&&!/!=/.test(c)){var f=b.call(a,c);if(f||!d||a.document&&a.document.nodeType!==11)return f}}catch(g){}return m(c,null,null,[a]).length>0}}}(),function(){var a=c.createElement("div");a.innerHTML="<div class='test e'></div><div class='test'></div>";if(!!a.getElementsByClassName&&a.getElementsByClassName("e").length!==0){a.lastChild.className="e";if(a.getElementsByClassName("e").length===1)return;o.order.splice(1,0,"CLASS"),o.find.CLASS=function(a,b,c){if(typeof b.getElementsByClassName!="undefined"&&!c)return b.getElementsByClassName(a[1])},a=null}}(),c.documentElement.contains?m.contains=function(a,b){return a!==b&&(a.contains?a.contains(b):!0)}:c.documentElement.compareDocumentPosition?m.contains=function(a,b){return!!(a.compareDocumentPosition(b)&16)}:m.contains=function(){return!1},m.isXML=function(a){var b=(a?a.ownerDocument||a:0).documentElement;return b?b.nodeName!=="HTML":!1};var y=function(a,b,c){var d,e=[],f="",g=b.nodeType?[b]:b;while(d=o.match.PSEUDO.exec(a))f+=d[0],a=a.replace(o.match.PSEUDO,"");a=o.relative[a]?a+"*":a;for(var h=0,i=g.length;h<i;h++)m(a,g[h],e,c);return m.filter(f,e)};m.attr=f.attr,m.selectors.attrMap={},f.find=m,f.expr=m.selectors,f.expr[":"]=f.expr.filters,f.unique=m.uniqueSort,f.text=m.getText,f.isXMLDoc=m.isXML,f.contains=m.contains}();var L=/Until$/,M=/^(?:parents|prevUntil|prevAll)/,N=/,/,O=/^.[^:#\[\.,]*$/,P=Array.prototype.slice,Q=f.expr.match.POS,R={children:!0,contents:!0,next:!0,prev:!0};f.fn.extend({find:function(a){var b=this,c,d;if(typeof a!="string")return f(a).filter(function(){for(c=0,d=b.length;c<d;c++)if(f.contains(b[c],this))return!0});var e=this.pushStack("","find",a),g,h,i;for(c=0,d=this.length;c<d;c++){g=e.length,f.find(a,this[c],e);if(c>0)for(h=g;h<e.length;h++)for(i=0;i<g;i++)if(e[i]===e[h]){e.splice(h--,1);break}}return e},has:function(a){var b=f(a);return this.filter(function(){for(var a=0,c=b.length;a<c;a++)if(f.contains(this,b[a]))return!0})},not:function(a){return this.pushStack(T(this,a,!1),"not",a)},filter:function(a){return this.pushStack(T(this,a,!0),"filter",a)},is:function(a){return!!a&&(typeof a=="string"?Q.test(a)?f(a,this.context).index(this[0])>=0:f.filter(a,this).length>0:this.filter(a).length>0)},closest:function(a,b){var c=[],d,e,g=this[0];if(f.isArray(a)){var h=1;while(g&&g.ownerDocument&&g!==b){for(d=0;d<a.length;d++)f(g).is(a[d])&&c.push({selector:a[d],elem:g,level:h});g=g.parentNode,h++}return c}var i=Q.test(a)||typeof a!="string"?f(a,b||this.context):0;for(d=0,e=this.length;d<e;d++){g=this[d];while(g){if(i?i.index(g)>-1:f.find.matchesSelector(g,a)){c.push(g);break}g=g.parentNode;if(!g||!g.ownerDocument||g===b||g.nodeType===11)break}}c=c.length>1?f.unique(c):c;return this.pushStack(c,"closest",a)},index:function(a){if(!a)return this[0]&&this[0].parentNode?this.prevAll().length:-1;if(typeof a=="string")return f.inArray(this[0],f(a));return f.inArray(a.jquery?a[0]:a,this)},add:function(a,b){var c=typeof a=="string"?f(a,b):f.makeArray(a&&a.nodeType?[a]:a),d=f.merge(this.get(),c);return this.pushStack(S(c[0])||S(d[0])?d:f.unique(d))},andSelf:function(){return this.add(this.prevObject)}}),f.each({parent:function(a){var b=a.parentNode;return b&&b.nodeType!==11?b:null},parents:function(a){return f.dir(a,"parentNode")},parentsUntil:function(a,b,c){return f.dir(a,"parentNode",c)},next:function(a){return f.nth(a,2,"nextSibling")},prev:function(a){return f.nth(a,2,"previousSibling")},nextAll:function(a){return f.dir(a,"nextSibling")},prevAll:function(a){return f.dir(a,"previousSibling")},nextUntil:function(a,b,c){return f.dir(a,"nextSibling",c)},prevUntil:function(a,b,c){return f.dir(a,"previousSibling",c)},siblings:function(a){return f.sibling(a.parentNode.firstChild,a)},children:function(a){return f.sibling(a.firstChild)},contents:function(a){return f.nodeName(a,"iframe")?a.contentDocument||a.contentWindow.document:f.makeArray(a.childNodes)}},function(a,b){f.fn[a]=function(c,d){var e=f.map(this,b,c);L.test(a)||(d=c),d&&typeof d=="string"&&(e=f.filter(d,e)),e=this.length>1&&!R[a]?f.unique(e):e,(this.length>1||N.test(d))&&M.test(a)&&(e=e.reverse());return this.pushStack(e,a,P.call(arguments).join(","))}}),f.extend({filter:function(a,b,c){c&&(a=":not("+a+")");return b.length===1?f.find.matchesSelector(b[0],a)?[b[0]]:[]:f.find.matches(a,b)},dir:function(a,c,d){var e=[],g=a[c];while(g&&g.nodeType!==9&&(d===b||g.nodeType!==1||!f(g).is(d)))g.nodeType===1&&e.push(g),g=g[c];return e},nth:function(a,b,c,d){b=b||1;var e=0;for(;a;a=a[c])if(a.nodeType===1&&++e===b)break;return a},sibling:function(a,b){var c=[];for(;a;a=a.nextSibling)a.nodeType===1&&a!==b&&c.push(a);return c}});var V="abbr|article|aside|audio|canvas|datalist|details|figcaption|figure|footer|header|hgroup|mark|meter|nav|output|progress|section|summary|time|video",W=/ jQuery\d+="(?:\d+|null)"/g,X=/^\s+/,Y=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/ig,Z=/<([\w:]+)/,$=/<tbody/i,_=/<|&#?\w+;/,ba=/<(?:script|style)/i,bb=/<(?:script|object|embed|option|style)/i,bc=new RegExp("<(?:"+V+")","i"),bd=/checked\s*(?:[^=]|=\s*.checked.)/i,be=/\/(java|ecma)script/i,bf=/^\s*<!(?:\[CDATA\[|\-\-)/,bg={option:[1,"<select multiple='multiple'>","</select>"],legend:[1,"<fieldset>","</fieldset>"],thead:[1,"<table>","</table>"],tr:[2,"<table><tbody>","</tbody></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],col:[2,"<table><tbody></tbody><colgroup>","</colgroup></table>"],area:[1,"<map>","</map>"],_default:[0,"",""]},bh=U(c);bg.optgroup=bg.option,bg.tbody=bg.tfoot=bg.colgroup=bg.caption=bg.thead,bg.th=bg.td,f.support.htmlSerialize||(bg._default=[1,"div<div>","</div>"]),f.fn.extend({text:function(a){if(f.isFunction(a))return this.each(function(b){var c=f(this);c.text(a.call(this,b,c.text()))});if(typeof a!="object"&&a!==b)return this.empty().append((this[0]&&this[0].ownerDocument||c).createTextNode(a));return f.text(this)},wrapAll:function(a){if(f.isFunction(a))return this.each(function(b){f(this).wrapAll(a.call(this,b))});if(this[0]){var b=f(a,this[0].ownerDocument).eq(0).clone(!0);this[0].parentNode&&b.insertBefore(this[0]),b.map(function(){var a=this;while(a.firstChild&&a.firstChild.nodeType===1)a=a.firstChild;return a}).append(this)}return this},wrapInner:function(a){if(f.isFunction(a))return this.each(function(b){f(this).wrapInner(a.call(this,b))});return this.each(function(){var b=f(this),c=b.contents();c.length?c.wrapAll(a):b.append(a)})},wrap:function(a){var b=f.isFunction(a);return this.each(function(c){f(this).wrapAll(b?a.call(this,c):a)})},unwrap:function(){return this.parent().each(function(){f.nodeName(this,"body")||f(this).replaceWith(this.childNodes)}).end()},append:function(){return this.domManip(arguments,!0,function(a){this.nodeType===1&&this.appendChild(a)})},prepend:function(){return this.domManip(arguments,!0,function(a){this.nodeType===1&&this.insertBefore(a,this.firstChild)})},before:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this)});if(arguments.length){var a=f.clean(arguments);a.push.apply(a,this.toArray());return this.pushStack(a,"before",arguments)}},after:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this.nextSibling)});if(arguments.length){var a=this.pushStack(this,"after",arguments);a.push.apply(a,f.clean(arguments));return a}},remove:function(a,b){for(var c=0,d;(d=this[c])!=null;c++)if(!a||f.filter(a,[d]).length)!b&&d.nodeType===1&&(f.cleanData(d.getElementsByTagName("*")),f.cleanData([d])),d.parentNode&&d.parentNode.removeChild(d);return this},empty:function()
+{for(var a=0,b;(b=this[a])!=null;a++){b.nodeType===1&&f.cleanData(b.getElementsByTagName("*"));while(b.firstChild)b.removeChild(b.firstChild)}return this},clone:function(a,b){a=a==null?!1:a,b=b==null?a:b;return this.map(function(){return f.clone(this,a,b)})},html:function(a){if(a===b)return this[0]&&this[0].nodeType===1?this[0].innerHTML.replace(W,""):null;if(typeof a=="string"&&!ba.test(a)&&(f.support.leadingWhitespace||!X.test(a))&&!bg[(Z.exec(a)||["",""])[1].toLowerCase()]){a=a.replace(Y,"<$1></$2>");try{for(var c=0,d=this.length;c<d;c++)this[c].nodeType===1&&(f.cleanData(this[c].getElementsByTagName("*")),this[c].innerHTML=a)}catch(e){this.empty().append(a)}}else f.isFunction(a)?this.each(function(b){var c=f(this);c.html(a.call(this,b,c.html()))}):this.empty().append(a);return this},replaceWith:function(a){if(this[0]&&this[0].parentNode){if(f.isFunction(a))return this.each(function(b){var c=f(this),d=c.html();c.replaceWith(a.call(this,b,d))});typeof a!="string"&&(a=f(a).detach());return this.each(function(){var b=this.nextSibling,c=this.parentNode;f(this).remove(),b?f(b).before(a):f(c).append(a)})}return this.length?this.pushStack(f(f.isFunction(a)?a():a),"replaceWith",a):this},detach:function(a){return this.remove(a,!0)},domManip:function(a,c,d){var e,g,h,i,j=a[0],k=[];if(!f.support.checkClone&&arguments.length===3&&typeof j=="string"&&bd.test(j))return this.each(function(){f(this).domManip(a,c,d,!0)});if(f.isFunction(j))return this.each(function(e){var g=f(this);a[0]=j.call(this,e,c?g.html():b),g.domManip(a,c,d)});if(this[0]){i=j&&j.parentNode,f.support.parentNode&&i&&i.nodeType===11&&i.childNodes.length===this.length?e={fragment:i}:e=f.buildFragment(a,this,k),h=e.fragment,h.childNodes.length===1?g=h=h.firstChild:g=h.firstChild;if(g){c=c&&f.nodeName(g,"tr");for(var l=0,m=this.length,n=m-1;l<m;l++)d.call(c?bi(this[l],g):this[l],e.cacheable||m>1&&l<n?f.clone(h,!0,!0):h)}k.length&&f.each(k,bp)}return this}}),f.buildFragment=function(a,b,d){var e,g,h,i,j=a[0];b&&b[0]&&(i=b[0].ownerDocument||b[0]),i.createDocumentFragment||(i=c),a.length===1&&typeof j=="string"&&j.length<512&&i===c&&j.charAt(0)==="<"&&!bb.test(j)&&(f.support.checkClone||!bd.test(j))&&(f.support.html5Clone||!bc.test(j))&&(g=!0,h=f.fragments[j],h&&h!==1&&(e=h)),e||(e=i.createDocumentFragment(),f.clean(a,i,e,d)),g&&(f.fragments[j]=h?e:1);return{fragment:e,cacheable:g}},f.fragments={},f.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){f.fn[a]=function(c){var d=[],e=f(c),g=this.length===1&&this[0].parentNode;if(g&&g.nodeType===11&&g.childNodes.length===1&&e.length===1){e[b](this[0]);return this}for(var h=0,i=e.length;h<i;h++){var j=(h>0?this.clone(!0):this).get();f(e[h])[b](j),d=d.concat(j)}return this.pushStack(d,a,e.selector)}}),f.extend({clone:function(a,b,c){var d,e,g,h=f.support.html5Clone||!bc.test("<"+a.nodeName)?a.cloneNode(!0):bo(a);if((!f.support.noCloneEvent||!f.support.noCloneChecked)&&(a.nodeType===1||a.nodeType===11)&&!f.isXMLDoc(a)){bk(a,h),d=bl(a),e=bl(h);for(g=0;d[g];++g)e[g]&&bk(d[g],e[g])}if(b){bj(a,h);if(c){d=bl(a),e=bl(h);for(g=0;d[g];++g)bj(d[g],e[g])}}d=e=null;return h},clean:function(a,b,d,e){var g;b=b||c,typeof b.createElement=="undefined"&&(b=b.ownerDocument||b[0]&&b[0].ownerDocument||c);var h=[],i;for(var j=0,k;(k=a[j])!=null;j++){typeof k=="number"&&(k+="");if(!k)continue;if(typeof k=="string")if(!_.test(k))k=b.createTextNode(k);else{k=k.replace(Y,"<$1></$2>");var l=(Z.exec(k)||["",""])[1].toLowerCase(),m=bg[l]||bg._default,n=m[0],o=b.createElement("div");b===c?bh.appendChild(o):U(b).appendChild(o),o.innerHTML=m[1]+k+m[2];while(n--)o=o.lastChild;if(!f.support.tbody){var p=$.test(k),q=l==="table"&&!p?o.firstChild&&o.firstChild.childNodes:m[1]==="<table>"&&!p?o.childNodes:[];for(i=q.length-1;i>=0;--i)f.nodeName(q[i],"tbody")&&!q[i].childNodes.length&&q[i].parentNode.removeChild(q[i])}!f.support.leadingWhitespace&&X.test(k)&&o.insertBefore(b.createTextNode(X.exec(k)[0]),o.firstChild),k=o.childNodes}var r;if(!f.support.appendChecked)if(k[0]&&typeof (r=k.length)=="number")for(i=0;i<r;i++)bn(k[i]);else bn(k);k.nodeType?h.push(k):h=f.merge(h,k)}if(d){g=function(a){return!a.type||be.test(a.type)};for(j=0;h[j];j++)if(e&&f.nodeName(h[j],"script")&&(!h[j].type||h[j].type.toLowerCase()==="text/javascript"))e.push(h[j].parentNode?h[j].parentNode.removeChild(h[j]):h[j]);else{if(h[j].nodeType===1){var s=f.grep(h[j].getElementsByTagName("script"),g);h.splice.apply(h,[j+1,0].concat(s))}d.appendChild(h[j])}}return h},cleanData:function(a){var b,c,d=f.cache,e=f.event.special,g=f.support.deleteExpando;for(var h=0,i;(i=a[h])!=null;h++){if(i.nodeName&&f.noData[i.nodeName.toLowerCase()])continue;c=i[f.expando];if(c){b=d[c];if(b&&b.events){for(var j in b.events)e[j]?f.event.remove(i,j):f.removeEvent(i,j,b.handle);b.handle&&(b.handle.elem=null)}g?delete i[f.expando]:i.removeAttribute&&i.removeAttribute(f.expando),delete d[c]}}}});var bq=/alpha\([^)]*\)/i,br=/opacity=([^)]*)/,bs=/([A-Z]|^ms)/g,bt=/^-?\d+(?:px)?$/i,bu=/^-?\d/,bv=/^([\-+])=([\-+.\de]+)/,bw={position:"absolute",visibility:"hidden",display:"block"},bx=["Left","Right"],by=["Top","Bottom"],bz,bA,bB;f.fn.css=function(a,c){if(arguments.length===2&&c===b)return this;return f.access(this,a,c,!0,function(a,c,d){return d!==b?f.style(a,c,d):f.css(a,c)})},f.extend({cssHooks:{opacity:{get:function(a,b){if(b){var c=bz(a,"opacity","opacity");return c===""?"1":c}return a.style.opacity}}},cssNumber:{fillOpacity:!0,fontWeight:!0,lineHeight:!0,opacity:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{"float":f.support.cssFloat?"cssFloat":"styleFloat"},style:function(a,c,d,e){if(!!a&&a.nodeType!==3&&a.nodeType!==8&&!!a.style){var g,h,i=f.camelCase(c),j=a.style,k=f.cssHooks[i];c=f.cssProps[i]||i;if(d===b){if(k&&"get"in k&&(g=k.get(a,!1,e))!==b)return g;return j[c]}h=typeof d,h==="string"&&(g=bv.exec(d))&&(d=+(g[1]+1)*+g[2]+parseFloat(f.css(a,c)),h="number");if(d==null||h==="number"&&isNaN(d))return;h==="number"&&!f.cssNumber[i]&&(d+="px");if(!k||!("set"in k)||(d=k.set(a,d))!==b)try{j[c]=d}catch(l){}}},css:function(a,c,d){var e,g;c=f.camelCase(c),g=f.cssHooks[c],c=f.cssProps[c]||c,c==="cssFloat"&&(c="float");if(g&&"get"in g&&(e=g.get(a,!0,d))!==b)return e;if(bz)return bz(a,c)},swap:function(a,b,c){var d={};for(var e in b)d[e]=a.style[e],a.style[e]=b[e];c.call(a);for(e in b)a.style[e]=d[e]}}),f.curCSS=f.css,f.each(["height","width"],function(a,b){f.cssHooks[b]={get:function(a,c,d){var e;if(c){if(a.offsetWidth!==0)return bC(a,b,d);f.swap(a,bw,function(){e=bC(a,b,d)});return e}},set:function(a,b){if(!bt.test(b))return b;b=parseFloat(b);if(b>=0)return b+"px"}}}),f.support.opacity||(f.cssHooks.opacity={get:function(a,b){return br.test((b&&a.currentStyle?a.currentStyle.filter:a.style.filter)||"")?parseFloat(RegExp.$1)/100+"":b?"1":""},set:function(a,b){var c=a.style,d=a.currentStyle,e=f.isNumeric(b)?"alpha(opacity="+b*100+")":"",g=d&&d.filter||c.filter||"";c.zoom=1;if(b>=1&&f.trim(g.replace(bq,""))===""){c.removeAttribute("filter");if(d&&!d.filter)return}c.filter=bq.test(g)?g.replace(bq,e):g+" "+e}}),f(function(){f.support.reliableMarginRight||(f.cssHooks.marginRight={get:function(a,b){var c;f.swap(a,{display:"inline-block"},function(){b?c=bz(a,"margin-right","marginRight"):c=a.style.marginRight});return c}})}),c.defaultView&&c.defaultView.getComputedStyle&&(bA=function(a,b){var c,d,e;b=b.replace(bs,"-$1").toLowerCase(),(d=a.ownerDocument.defaultView)&&(e=d.getComputedStyle(a,null))&&(c=e.getPropertyValue(b),c===""&&!f.contains(a.ownerDocument.documentElement,a)&&(c=f.style(a,b)));return c}),c.documentElement.currentStyle&&(bB=function(a,b){var c,d,e,f=a.currentStyle&&a.currentStyle[b],g=a.style;f===null&&g&&(e=g[b])&&(f=e),!bt.test(f)&&bu.test(f)&&(c=g.left,d=a.runtimeStyle&&a.runtimeStyle.left,d&&(a.runtimeStyle.left=a.currentStyle.left),g.left=b==="fontSize"?"1em":f||0,f=g.pixelLeft+"px",g.left=c,d&&(a.runtimeStyle.left=d));return f===""?"auto":f}),bz=bA||bB,f.expr&&f.expr.filters&&(f.expr.filters.hidden=function(a){var b=a.offsetWidth,c=a.offsetHeight;return b===0&&c===0||!f.support.reliableHiddenOffsets&&(a.style&&a.style.display||f.css(a,"display"))==="none"},f.expr.filters.visible=function(a){return!f.expr.filters.hidden(a)});var bD=/%20/g,bE=/\[\]$/,bF=/\r?\n/g,bG=/#.*$/,bH=/^(.*?):[ \t]*([^\r\n]*)\r?$/mg,bI=/^(?:color|date|datetime|datetime-local|email|hidden|month|number|password|range|search|tel|text|time|url|week)$/i,bJ=/^(?:about|app|app\-storage|.+\-extension|file|res|widget):$/,bK=/^(?:GET|HEAD)$/,bL=/^\/\//,bM=/\?/,bN=/<script\b[^<]*(?:(?!<\/script>)<[^<]*)*<\/script>/gi,bO=/^(?:select|textarea)/i,bP=/\s+/,bQ=/([?&])_=[^&]*/,bR=/^([\w\+\.\-]+:)(?:\/\/([^\/?#:]*)(?::(\d+))?)?/,bS=f.fn.load,bT={},bU={},bV,bW,bX=["*/"]+["*"];try{bV=e.href}catch(bY){bV=c.createElement("a"),bV.href="",bV=bV.href}bW=bR.exec(bV.toLowerCase())||[],f.fn.extend({load:function(a,c,d){if(typeof a!="string"&&bS)return bS.apply(this,arguments);if(!this.length)return this;var e=a.indexOf(" ");if(e>=0){var g=a.slice(e,a.length);a=a.slice(0,e)}var h="GET";c&&(f.isFunction(c)?(d=c,c=b):typeof c=="object"&&(c=f.param(c,f.ajaxSettings.traditional),h="POST"));var i=this;f.ajax({url:a,type:h,dataType:"html",data:c,complete:function(a,b,c){c=a.responseText,a.isResolved()&&(a.done(function(a){c=a}),i.html(g?f("<div>").append(c.replace(bN,"")).find(g):c)),d&&i.each(d,[c,b,a])}});return this},serialize:function(){return f.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?f.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||bO.test(this.nodeName)||bI.test(this.type))}).map(function(a,b){var c=f(this).val();return c==null?null:f.isArray(c)?f.map(c,function(a,c){return{name:b.name,value:a.replace(bF,"\r\n")}}):{name:b.name,value:c.replace(bF,"\r\n")}}).get()}}),f.each("ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "),function(a,b){f.fn[b]=function(a){return this.on(b,a)}}),f.each(["get","post"],function(a,c){f[c]=function(a,d,e,g){f.isFunction(d)&&(g=g||e,e=d,d=b);return f.ajax({type:c,url:a,data:d,success:e,dataType:g})}}),f.extend({getScript:function(a,c){return f.get(a,b,c,"script")},getJSON:function(a,b,c){return f.get(a,b,c,"json")},ajaxSetup:function(a,b){b?b_(a,f.ajaxSettings):(b=a,a=f.ajaxSettings),b_(a,b);return a},ajaxSettings:{url:bV,isLocal:bJ.test(bW[1]),global:!0,type:"GET",contentType:"application/x-www-form-urlencoded",processData:!0,async:!0,accepts:{xml:"application/xml, text/xml",html:"text/html",text:"text/plain",json:"application/json, text/javascript","*":bX},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText"},converters:{"* text":a.String,"text html":!0,"text json":f.parseJSON,"text xml":f.parseXML},flatOptions:{context:!0,url:!0}},ajaxPrefilter:bZ(bT),ajaxTransport:bZ(bU),ajax:function(a,c){function w(a,c,l,m){if(s!==2){s=2,q&&clearTimeout(q),p=b,n=m||"",v.readyState=a>0?4:0;var o,r,u,w=c,x=l?cb(d,v,l):b,y,z;if(a>=200&&a<300||a===304){if(d.ifModified){if(y=v.getResponseHeader("Last-Modified"))f.lastModified[k]=y;if(z=v.getResponseHeader("Etag"))f.etag[k]=z}if(a===304)w="notmodified",o=!0;else try{r=cc(d,x),w="success",o=!0}catch(A){w="parsererror",u=A}}else{u=w;if(!w||a)w="error",a<0&&(a=0)}v.status=a,v.statusText=""+(c||w),o?h.resolveWith(e,[r,w,v]):h.rejectWith(e,[v,w,u]),v.statusCode(j),j=b,t&&g.trigger("ajax"+(o?"Success":"Error"),[v,d,o?r:u]),i.fireWith(e,[v,w]),t&&(g.trigger("ajaxComplete",[v,d]),--f.active||f.event.trigger("ajaxStop"))}}typeof a=="object"&&(c=a,a=b),c=c||{};var d=f.ajaxSetup({},c),e=d.context||d,g=e!==d&&(e.nodeType||e instanceof f)?f(e):f.event,h=f.Deferred(),i=f.Callbacks("once memory"),j=d.statusCode||{},k,l={},m={},n,o,p,q,r,s=0,t,u,v={readyState:0,setRequestHeader:function(a,b){if(!s){var c=a.toLowerCase();a=m[c]=m[c]||a,l[a]=b}return this},getAllResponseHeaders:function(){return s===2?n:null},getResponseHeader:function(a){var c;if(s===2){if(!o){o={};while(c=bH.exec(n))o[c[1].toLowerCase()]=c[2]}c=o[a.toLowerCase()]}return c===b?null:c},overrideMimeType:function(a){s||(d.mimeType=a);return this},abort:function(a){a=a||"abort",p&&p.abort(a),w(0,a);return this}};h.promise(v),v.success=v.done,v.error=v.fail,v.complete=i.add,v.statusCode=function(a){if(a){var b;if(s<2)for(b in a)j[b]=[j[b],a[b]];else b=a[v.status],v.then(b,b)}return this},d.url=((a||d.url)+"").replace(bG,"").replace(bL,bW[1]+"//"),d.dataTypes=f.trim(d.dataType||"*").toLowerCase().split(bP),d.crossDomain==null&&(r=bR.exec(d.url.toLowerCase()),d.crossDomain=!(!r||r[1]==bW[1]&&r[2]==bW[2]&&(r[3]||(r[1]==="http:"?80:443))==(bW[3]||(bW[1]==="http:"?80:443)))),d.data&&d.processData&&typeof d.data!="string"&&(d.data=f.param(d.data,d.traditional)),b$(bT,d,c,v);if(s===2)return!1;t=d.global,d.type=d.type.toUpperCase(),d.hasContent=!bK.test(d.type),t&&f.active++===0&&f.event.trigger("ajaxStart");if(!d.hasContent){d.data&&(d.url+=(bM.test(d.url)?"&":"?")+d.data,delete d.data),k=d.url;if(d.cache===!1){var x=f.now(),y=d.url.replace(bQ,"$1_="+x);d.url=y+(y===d.url?(bM.test(d.url)?"&":"?")+"_="+x:"")}}(d.data&&d.hasContent&&d.contentType!==!1||c.contentType)&&v.setRequestHeader("Content-Type",d.contentType),d.ifModified&&(k=k||d.url,f.lastModified[k]&&v.setRequestHeader("If-Modified-Since",f.lastModified[k]),f.etag[k]&&v.setRequestHeader("If-None-Match",f.etag[k])),v.setRequestHeader("Accept",d.dataTypes[0]&&d.accepts[d.dataTypes[0]]?d.accepts[d.dataTypes[0]]+(d.dataTypes[0]!=="*"?", "+bX+"; q=0.01":""):d.accepts["*"]);for(u in d.headers)v.setRequestHeader(u,d.headers[u]);if(d.beforeSend&&(d.beforeSend.call(e,v,d)===!1||s===2)){v.abort();return!1}for(u in{success:1,error:1,complete:1})v[u](d[u]);p=b$(bU,d,c,v);if(!p)w(-1,"No Transport");else{v.readyState=1,t&&g.trigger("ajaxSend",[v,d]),d.async&&d.timeout>0&&(q=setTimeout(function(){v.abort("timeout")},d.timeout));try{s=1,p.send(l,w)}catch(z){if(s<2)w(-1,z);else throw z}}return v},param:function(a,c){var d=[],e=function(a,b){b=f.isFunction(b)?b():b,d[d.length]=encodeURIComponent(a)+"="+encodeURIComponent(b)};c===b&&(c=f.ajaxSettings.traditional);if(f.isArray(a)||a.jquery&&!f.isPlainObject(a))f.each(a,function(){e(this.name,this.value)});else for(var g in a)ca(g,a[g],c,e);return d.join("&").replace(bD,"+")}}),f.extend({active:0,lastModified:{},etag:{}});var cd=f.now(),ce=/(\=)\?(&|$)|\?\?/i;f.ajaxSetup({jsonp:"callback",jsonpCallback:function(){return f.expando+"_"+cd++}}),f.ajaxPrefilter("json jsonp",function(b,c,d){var e=b.contentType==="application/x-www-form-urlencoded"&&typeof b.data=="string";if(b.dataTypes[0]==="jsonp"||b.jsonp!==!1&&(ce.test(b.url)||e&&ce.test(b.data))){var g,h=b.jsonpCallback=f.isFunction(b.jsonpCallback)?b.jsonpCallback():b.jsonpCallback,i=a[h],j=b.url,k=b.data,l="$1"+h+"$2";b.jsonp!==!1&&(j=j.replace(ce,l),b.url===j&&(e&&(k=k.replace(ce,l)),b.data===k&&(j+=(/\?/.test(j)?"&":"?")+b.jsonp+"="+h))),b.url=j,b.data=k,a[h]=function(a){g=[a]},d.always(function(){a[h]=i,g&&f.isFunction(i)&&a[h](g[0])}),b.converters["script json"]=function(){g||f.error(h+" was not called");return g[0]},b.dataTypes[0]="json";return"script"}}),f.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/javascript|ecmascript/},converters:{"text script":function(a){f.globalEval(a);return a}}}),f.ajaxPrefilter("script",function(a){a.cache===b&&(a.cache=!1),a.crossDomain&&(a.type="GET",a.global=!1)}),f.ajaxTransport("script",function(a){if(a.crossDomain){var d,e=c.head||c.getElementsByTagName("head")[0]||c.documentElement;return{send:function(f,g){d=c.createElement("script"),d.async="async",a.scriptCharset&&(d.charset=a.scriptCharset),d.src=a.url,d.onload=d.onreadystatechange=function(a,c){if(c||!d.readyState||/loaded|complete/.test(d.readyState))d.onload=d.onreadystatechange=null,e&&d.parentNode&&e.removeChild(d),d=b,c||g(200,"success")},e.insertBefore(d,e.firstChild)},abort:function(){d&&d.onload(0,1)}}}});var cf=a.ActiveXObject?function(){for(var a in ch)ch[a](0,1)}:!1,cg=0,ch;f.ajaxSettings.xhr=a.ActiveXObject?function(){return!this.isLocal&&ci()||cj()}:ci,function(a){f.extend(f.support,{ajax:!!a,cors:!!a&&"withCredentials"in a})}(f.ajaxSettings.xhr()),f.support.ajax&&f.ajaxTransport(function(c){if(!c.crossDomain||f.support.cors){var d;return{send:function(e,g){var h=c.xhr(),i,j;c.username?h.open(c.type,c.url,c.async,c.username,c.password):h.open(c.type,c.url,c.async);if(c.xhrFields)for(j in c.xhrFields)h[j]=c.xhrFields[j];c.mimeType&&h.overrideMimeType&&h.overrideMimeType(c.mimeType),!c.crossDomain&&!e["X-Requested-With"]&&(e["X-Requested-With"]="XMLHttpRequest");try{for(j in e)h.setRequestHeader(j,e[j])}catch(k){}h.send(c.hasContent&&c.data||null),d=function(a,e){var j,k,l,m,n;try{if(d&&(e||h.readyState===4)){d=b,i&&(h.onreadystatechange=f.noop,cf&&delete ch[i]);if(e)h.readyState!==4&&h.abort();else{j=h.status,l=h.getAllResponseHeaders(),m={},n=h.responseXML,n&&n.documentElement&&(m.xml=n),m.text=h.responseText;try{k=h.statusText}catch(o){k=""}!j&&c.isLocal&&!c.crossDomain?j=m.text?200:404:j===1223&&(j=204)}}}catch(p){e||g(-1,p)}m&&g(j,k,m,l)},!c.async||h.readyState===4?d():(i=++cg,cf&&(ch||(ch={},f(a).unload(cf)),ch[i]=d),h.onreadystatechange=d)},abort:function(){d&&d(0,1)}}}});var ck={},cl,cm,cn=/^(?:toggle|show|hide)$/,co=/^([+\-]=)?([\d+.\-]+)([a-z%]*)$/i,cp,cq=[["height","marginTop","marginBottom","paddingTop","paddingBottom"],["width","marginLeft","marginRight","paddingLeft","paddingRight"],["opacity"]],cr;f.fn.extend({show:function(a,b,c){var d,e;if(a||a===0)return this.animate(cu("show",3),a,b,c);for(var g=0,h=this.length;g<h;g++)d=this[g],d.style&&(e=d.style.display,!f._data(d,"olddisplay")&&e==="none"&&(e=d.style.display=""),e===""&&f.css(d,"display")==="none"&&f._data(d,"olddisplay",cv(d.nodeName)));for(g=0;g<h;g++){d=this[g];if(d.style){e=d.style.display;if(e===""||e==="none")d.style.display=f._data(d,"olddisplay")||""}}return this},hide:function(a,b,c){if(a||a===0)return this.animate(cu("hide",3),a,b,c);var d,e,g=0,h=this.length;for(;g<h;g++)d=this[g],d.style&&(e=f.css(d,"display"),e!=="none"&&!f._data(d,"olddisplay")&&f._data(d,"olddisplay",e));for(g=0;g<h;g++)this[g].style&&(this[g].style.display="none");return this},_toggle:f.fn.toggle,toggle:function(a,b,c){var d=typeof a=="boolean";f.isFunction(a)&&f.isFunction(b)?this._toggle.apply(this,arguments):a==null||d?this.each(function(){var b=d?a:f(this).is(":hidden");f(this)[b?"show":"hide"]()}):this.animate(cu("toggle",3),a,b,c);return this},fadeTo:function(a,b,c,d){return this.filter(":hidden").css("opacity",0).show().end().animate({opacity:b},a,c,d)},animate:function(a,b,c,d){function g(){e.queue===!1&&f._mark(this);var b=f.extend({},e),c=this.nodeType===1,d=c&&f(this).is(":hidden"),g,h,i,j,k,l,m,n,o;b.animatedProperties={};for(i in a){g=f.camelCase(i),i!==g&&(a[g]=a[i],delete a[i]),h=a[g],f.isArray(h)?(b.animatedProperties[g]=h[1],h=a[g]=h[0]):b.animatedProperties[g]=b.specialEasing&&b.specialEasing[g]||b.easing||"swing";if(h==="hide"&&d||h==="show"&&!d)return b.complete.call(this);c&&(g==="height"||g==="width")&&(b.overflow=[this.style.overflow,this.style.overflowX,this.style.overflowY],f.css(this,"display")==="inline"&&f.css(this,"float")==="none"&&(!f.support.inlineBlockNeedsLayout||cv(this.nodeName)==="inline"?this.style.display="inline-block":this.style.zoom=1))}b.overflow!=null&&(this.style.overflow="hidden");for(i in a)j=new f.fx(this,b,i),h=a[i],cn.test(h)?(o=f._data(this,"toggle"+i)||(h==="toggle"?d?"show":"hide":0),o?(f._data(this,"toggle"+i,o==="show"?"hide":"show"),j[o]()):j[h]()):(k=co.exec(h),l=j.cur(),k?(m=parseFloat(k[2]),n=k[3]||(f.cssNumber[i]?"":"px"),n!=="px"&&(f.style(this,i,(m||1)+n),l=(m||1)/j.cur()*l,f.style(this,i,l+n)),k[1]&&(m=(k[1]==="-="?-1:1)*m+l),j.custom(l,m,n)):j.custom(l,h,""));return!0}var e=f.speed(b,c,d);if(f.isEmptyObject(a))return this.each(e.complete,[!1]);a=f.extend({},a);return e.queue===!1?this.each(g):this.queue(e.queue,g)},stop:function(a,c,d){typeof a!="string"&&(d=c,c=a,a=b),c&&a!==!1&&this.queue(a||"fx",[]);return this.each(function(){function h(a,b,c){var e=b[c];f.removeData(a,c,!0),e.stop(d)}var b,c=!1,e=f.timers,g=f._data(this);d||f._unmark(!0,this);if(a==null)for(b in g)g[b]&&g[b].stop&&b.indexOf(".run")===b.length-4&&h(this,g,b);else g[b=a+".run"]&&g[b].stop&&h(this,g,b);for(b=e.length;b--;)e[b].elem===this&&(a==null||e[b].queue===a)&&(d?e[b](!0):e[b].saveState(),c=!0,e.splice(b,1));(!d||!c)&&f.dequeue(this,a)})}}),f.each({slideDown:cu("show",1),slideUp:cu("hide",1),slideToggle:cu("toggle",1),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(a,b){f.fn[a]=function(a,c,d){return this.animate(b,a,c,d)}}),f.extend({speed:function(a,b,c){var d=a&&typeof a=="object"?f.extend({},a):{complete:c||!c&&b||f.isFunction(a)&&a,duration:a,easing:c&&b||b&&!f.isFunction(b)&&b};d.duration=f.fx.off?0:typeof d.duration=="number"?d.duration:d.duration in f.fx.speeds?f.fx.speeds[d.duration]:f.fx.speeds._default;if(d.queue==null||d.queue===!0)d.queue="fx";d.old=d.complete,d.complete=function(a){f.isFunction(d.old)&&d.old.call(this),d.queue?f.dequeue(this,d.queue):a!==!1&&f._unmark(this)};return d},easing:{linear:function(a,b,c,d){return c+d*a},swing:function(a,b,c,d){return(-Math.cos(a*Math.PI)/2+.5)*d+c}},timers:[],fx:function(a,b,c){this.options=b,this.elem=a,this.prop=c,b.orig=b.orig||{}}}),f.fx.prototype={update:function(){this.options.step&&this.options.step.call(this.elem,this.now,this),(f.fx.step[this.prop]||f.fx.step._default)(this)},cur:function(){if(this.elem[this.prop]!=null&&(!this.elem.style||this.elem.style[this.prop]==null))return this.elem[this.prop];var a,b=f.css(this.elem,this.prop);return isNaN(a=parseFloat(b))?!b||b==="auto"?0:b:a},custom:function(a,c,d){function h(a){return e.step(a)}var e=this,g=f.fx;this.startTime=cr||cs(),this.end=c,this.now=this.start=a,this.pos=this.state=0,this.unit=d||this.unit||(f.cssNumber[this.prop]?"":"px"),h.queue=this.options.queue,h.elem=this.elem,h.saveState=function(){e.options.hide&&f._data(e.elem,"fxshow"+e.prop)===b&&f._data(e.elem,"fxshow"+e.prop,e.start)},h()&&f.timers.push(h)&&!cp&&(cp=setInterval(g.tick,g.interval))},show:function(){var a=f._data(this.elem,"fxshow"+this.prop);this.options.orig[this.prop]=a||f.style(this.elem,this.prop),this.options.show=!0,a!==b?this.custom(this.cur(),a):this.custom(this.prop==="width"||this.prop==="height"?1:0,this.cur()),f(this.elem).show()},hide:function(){this.options.orig[this.prop]=f._data(this.elem,"fxshow"+this.prop)||f.style(this.elem,this.prop),this.options.hide=!0,this.custom(this.cur(),0)},step:function(a){var b,c,d,e=cr||cs(),g=!0,h=this.elem,i=this.options;if(a||e>=i.duration+this.startTime){this.now=this.end,this.pos=this.state=1,this.update(),i.animatedProperties[this.prop]=!0;for(b in i.animatedProperties)i.animatedProperties[b]!==!0&&(g=!1);if(g){i.overflow!=null&&!f.support.shrinkWrapBlocks&&f.each(["","X","Y"],function(a,b){h.style["overflow"+b]=i.overflow[a]}),i.hide&&f(h).hide();if(i.hide||i.show)for(b in i.animatedProperties)f.style(h,b,i.orig[b]),f.removeData(h,"fxshow"+b,!0),f.removeData(h,"toggle"+b,!0);d=i.complete,d&&(i.complete=!1,d.call(h))}return!1}i.duration==Infinity?this.now=e:(c=e-this.startTime,this.state=c/i.duration,this.pos=f.easing[i.animatedProperties[this.prop]](this.state,c,0,1,i.duration),this.now=this.start+(this.end-this.start)*this.pos),this.update();return!0}},f.extend(f.fx,{tick:function(){var a,b=f.timers,c=0;for(;c<b.length;c++)a=b[c],!a()&&b[c]===a&&b.splice(c--,1);b.length||f.fx.stop()},interval:13,stop:function(){clearInterval(cp),cp=null},speeds:{slow:600,fast:200,_default:400},step:{opacity:function(a){f.style(a.elem,"opacity",a.now)},_default:function(a){a.elem.style&&a.elem.style[a.prop]!=null?a.elem.style[a.prop]=a.now+a.unit:a.elem[a.prop]=a.now}}}),f.each(["width","height"],function(a,b){f.fx.step[b]=function(a){f.style(a.elem,b,Math.max(0,a.now)+a.unit)}}),f.expr&&f.expr.filters&&(f.expr.filters.animated=function(a){return f.grep(f.timers,function(b){return a===b.elem}).length});var cw=/^t(?:able|d|h)$/i,cx=/^(?:body|html)$/i;"getBoundingClientRect"in c.documentElement?f.fn.offset=function(a){var b=this[0],c;if(a)return this.each(function(b){f.offset.setOffset(this,a,b)});if(!b||!b.ownerDocument)return null;if(b===b.ownerDocument.body)return f.offset.bodyOffset(b);try{c=b.getBoundingClientRect()}catch(d){}var e=b.ownerDocument,g=e.documentElement;if(!c||!f.contains(g,b))return c?{top:c.top,left:c.left}:{top:0,left:0};var h=e.body,i=cy(e),j=g.clientTop||h.clientTop||0,k=g.clientLeft||h.clientLeft||0,l=i.pageYOffset||f.support.boxModel&&g.scrollTop||h.scrollTop,m=i.pageXOffset||f.support.boxModel&&g.scrollLeft||h.scrollLeft,n=c.top+l-j,o=c.left+m-k;return{top:n,left:o}}:f.fn.offset=function(a){var b=this[0];if(a)return this.each(function(b){f.offset.setOffset(this,a,b)});if(!b||!b.ownerDocument)return null;if(b===b.ownerDocument.body)return f.offset.bodyOffset(b);var c,d=b.offsetParent,e=b,g=b.ownerDocument,h=g.documentElement,i=g.body,j=g.defaultView,k=j?j.getComputedStyle(b,null):b.currentStyle,l=b.offsetTop,m=b.offsetLeft;while((b=b.parentNode)&&b!==i&&b!==h){if(f.support.fixedPosition&&k.position==="fixed")break;c=j?j.getComputedStyle(b,null):b.currentStyle,l-=b.scrollTop,m-=b.scrollLeft,b===d&&(l+=b.offsetTop,m+=b.offsetLeft,f.support.doesNotAddBorder&&(!f.support.doesAddBorderForTableAndCells||!cw.test(b.nodeName))&&(l+=parseFloat(c.borderTopWidth)||0,m+=parseFloat(c.borderLeftWidth)||0),e=d,d=b.offsetParent),f.support.subtractsBorderForOverflowNotVisible&&c.overflow!=="visible"&&(l+=parseFloat(c.borderTopWidth)||0,m+=parseFloat(c.borderLeftWidth)||0),k=c}if(k.position==="relative"||k.position==="static")l+=i.offsetTop,m+=i.offsetLeft;f.support.fixedPosition&&k.position==="fixed"&&(l+=Math.max(h.scrollTop,i.scrollTop),m+=Math.max(h.scrollLeft,i.scrollLeft));return{top:l,left:m}},f.offset={bodyOffset:function(a){var b=a.offsetTop,c=a.offsetLeft;f.support.doesNotIncludeMarginInBodyOffset&&(b+=parseFloat(f.css(a,"marginTop"))||0,c+=parseFloat(f.css(a,"marginLeft"))||0);return{top:b,left:c}},setOffset:function(a,b,c){var d=f.css(a,"position");d==="static"&&(a.style.position="relative");var e=f(a),g=e.offset(),h=f.css(a,"top"),i=f.css(a,"left"),j=(d==="absolute"||d==="fixed")&&f.inArray("auto",[h,i])>-1,k={},l={},m,n;j?(l=e.position(),m=l.top,n=l.left):(m=parseFloat(h)||0,n=parseFloat(i)||0),f.isFunction(b)&&(b=b.call(a,c,g)),b.top!=null&&(k.top=b.top-g.top+m),b.left!=null&&(k.left=b.left-g.left+n),"using"in b?b.using.call(a,k):e.css(k)}},f.fn.extend({position:function(){if(!this[0])return null;var a=this[0],b=this.offsetParent(),c=this.offset(),d=cx.test(b[0].nodeName)?{top:0,left:0}:b.offset();c.top-=parseFloat(f.css(a,"marginTop"))||0,c.left-=parseFloat(f.css(a,"marginLeft"))||0,d.top+=parseFloat(f.css(b[0],"borderTopWidth"))||0,d.left+=parseFloat(f.css(b[0],"borderLeftWidth"))||0;return{top:c.top-d.top,left:c.left-d.left}},offsetParent:function(){return this.map(function(){var a=this.offsetParent||c.body;while(a&&!cx.test(a.nodeName)&&f.css(a,"position")==="static")a=a.offsetParent;return a})}}),f.each(["Left","Top"],function(a,c){var d="scroll"+c;f.fn[d]=function(c){var e,g;if(c===b){e=this[0];if(!e)return null;g=cy(e);return g?"pageXOffset"in g?g[a?"pageYOffset":"pageXOffset"]:f.support.boxModel&&g.document.documentElement[d]||g.document.body[d]:e[d]}return this.each(function(){g=cy(this),g?g.scrollTo(a?f(g).scrollLeft():c,a?c:f(g).scrollTop()):this[d]=c})}}),f.each(["Height","Width"],function(a,c){var d=c.toLowerCase();f.fn["inner"+c]=function(){var a=this[0];return a?a.style?parseFloat(f.css(a,d,"padding")):this[d]():null},f.fn["outer"+c]=function(a){var b=this[0];return b?b.style?parseFloat(f.css(b,d,a?"margin":"border")):this[d]():null},f.fn[d]=function(a){var e=this[0];if(!e)return a==null?null:this;if(f.isFunction(a))return this.each(function(b){var c=f(this);c[d](a.call(this,b,c[d]()))});if(f.isWindow(e)){var g=e.document.documentElement["client"+c],h=e.document.body;return e.document.compatMode==="CSS1Compat"&&g||h&&h["client"+c]||g}if(e.nodeType===9)return Math.max(e.documentElement["client"+c],e.body["scroll"+c],e.documentElement["scroll"+c],e.body["offset"+c],e.documentElement["offset"+c]);if(a===b){var i=f.css(e,d),j=parseFloat(i);return f.isNumeric(j)?j:i}return this.css(d,typeof a=="string"?a:a+"px")}}),a.jQuery=a.$=f,typeof define=="function"&&define.amd&&define.amd.jQuery&&define("jquery",[],function(){return f})})(window);
\ No newline at end of file
diff --git a/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite1.0/xsd/readme.txt b/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite1.0/xsd/readme.txt
new file mode 100755 (executable)
index 0000000..2040274
--- /dev/null
@@ -0,0 +1,53 @@
+= XSLT style for Test Case and Test Result =\r
+\r
+== Files structure ==\r
+\r
+        readme.txt\r
+        test_definition.xsd   //The schema of test definition\r
+        tests.css             // CSS style for showing test cases and results\r
+        testresult.xsl\r
+        testcase.xsl\r
+        tests.xml             //example of test cases\r
+        result.xml            //example of test result\r
+        \r
\r
+ == Applying the style ==\r
\r
+ === Update in definition and result XML ===\r
\r
+ For applying this style for the definition XML of test cases, please add below statement before the root element of XML (the tag "test_definition").\r
\r
+ <?xml-stylesheet type="text/xsl"  href="./testcase.xsl"?>\r
\r
+ as below: \r
\r
+<?xml version="1.0" encoding="UTF-8"?>\r
+<?xml-stylesheet type="text/xsl"  href="./testcase.xsl"?>\r
+<test_definition>\r
+\r
+For applying this style for the test-result XML, please add below statement before the root element of XML (the tag "test_definition").\r
+<?xml-stylesheet type="text/xsl"  href="./testresult.xsl"?>\r
+\r
+as below:\r
+\r
+<?xml version="1.0" encoding="UTF-8"?>\r
+<?xml-stylesheet type="text/xsl"  href="./testresult.xsl"?>\r
+<test_definition>\r
+\r
+=== Deploy XSLT and CSS style ===\r
+\r
+For our test package, below 3 files should be added in each test package. \r
+\r
+        tests.css  \r
+        testresult.xsl\r
+        testcase.xsl\r
+        \r
+For instance, add them under the test package "webapi-tizen-alarm-tests".\r
+ Â©Â¸Â©Â¤webapi-tizen-alarm-tests\r
+             Â©Â¸Â©Â¤...\r
+             Â©Â¸Â©Â¤...\r
+             Â©Â¸tests.css  \r
+             Â©Â¸testresult.xsl\r
+             Â©Â¸testcase.xsl\r
+             Â©Â¸tests.xml\r
+             Â©Â¸...\r
diff --git a/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite1.0/xsd/release-notes b/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite1.0/xsd/release-notes
new file mode 100755 (executable)
index 0000000..30e97e8
--- /dev/null
@@ -0,0 +1,86 @@
+-- version 1.0.1-2 --
+
+ adding 2 new case types "compliance" and "user_experience"
+-- version 1.0.1-3 --
+ Add a new sub-element "spec" (type: string) under the "testcase" element.
+-- version 1.0.1-4 --
+  
+ Add 2 new priority "P3" and "P4"
+-- version 1.0.1-5 --
+ Add a new root "test_definition", and the element "suite" has been move into it as children elements.
+-- version 1.0.1-6 --
+ A new optional attribute "launcher" is added in the element "testdefinition" for supporting identifying which kind of test suites the XML is designed for
+
+-- version 1.0.1-7 --
+The Xslt related files are merged into this repo. 
+including 
+
+        tests.css             // CSS style for showing test cases and results
+        testresult.xsl
+        testcase.xsl
+        tests.xml             //example of test cases
+        result.xml            //example of test result
+        application.js        //Javascript for "back to top"
+        jquery.min.js         //JQuery
+        back_top.png          //image for "back to top"
+
+Modification in Schema:
+
+1\ the optional attribute "launcher" is moved into suite, not in "testdefinition" element any longer.
+
+2\ "spec" element is removed. and a new "specs" structure is added as below
+
+                                <specs>
+                                       <spec>
+                                               <spec_assertion category="Tizen Device API Specifications"
+                                                       section="Widget" specification="Widget Packaging and XML Configuration"
+                                                       interface="Widget" usage="true" />
+                                               <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>
+                                               <spec_statement>spec_statement</spec_statement>
+                                       </spec>
+                               </specs>
+All spec-related infomation are re-organized as XML element and attributes.
+
+In Xslt, 
+
+1\ a float image "Back to top" is available on right-bottom for scrolling to top.
+
+2\ html anchor is adder for scrolling back to suite summary table, and case detail tables.
+
+-- version 1.0.1-8 --
+1\ For more flexible, rename the attribute "method_or_attribute" to "element_name".
+2\ Add a new attribute "element_type" to describe the type of the corresponding specification item
+
+related example and Xlst is also updated for above.
+
+-- version 1.0.1-9 --
+1\ add an attribute "cts_version" in the element "environment/BuildInfoType" for saving the version of CTS tool
+2\ add an attribute "file" in "measurement/simpleMeasurementType"
+3\ update the result XSLt for showing cts_version
+4\ update the result XSLt for showing Â¡Â°Test Blocked¡± instead of "Test N/A"
+5\ add a summary table for showing all FAIL cases.
+
+
+-- version 1.0.2-1 --
+1\ add a new int optional attribute "onload_delay" with default "3"
+
+-- version 1.0.2-2 --
+1\ Add a new sub element "capabilities" under the element "testcase"
+2\ Add a new boolean attribute "check_unsupport_error" in the element "testcase"
+
+-- version 1.0.2-3 --
+1\ Move the sub element "capabilities" from the element "testcase" to the element "set"
+
+
+-- version 1.0.2-4 --
+1\ Add a unique limitation for suite name
+2\ Add a new optional attribute "launcher" in set 
+
+
+-- version 1.0.2-5 --
+1\ Add a attribute "set_debug_msg" in set for recording the name of log file.
diff --git a/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite1.0/xsd/result.xml b/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite1.0/xsd/result.xml
new file mode 100755 (executable)
index 0000000..60dafda
--- /dev/null
@@ -0,0 +1,1737 @@
+<?xml version="1.0" encoding="UTF-8"?>\r
+<?xml-stylesheet type="text/xsl"  href="testresult.xsl"?>\r
+<test_definition name="http://tempuri.org" type=""\r
+       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"\r
+       xsi:noNamespaceSchemaLocation="test_definition.xsd">\r
+       <environment device_id="generic/sdk/generic:4.0.4/MR1/302030:eng/test-keys"\r
+               device_model="unknown" device_name="MR8" firmware_version="4.0.4"\r
+               host="zhongqing-dev.sh.intel.com (Linux - 2.6.38.6-26.rc1.fc15.i686)"\r
+               os_version="4.0.4" resolution="1280*800" screen_size="250*150" cts_version="2.3.0-3">\r
+               <other> Here is a Long String for testing ~~~~~~~~~~~~~~~~~~~\r
+               Here is a Long String for testing ~~~~~~~~~~~~~~~~~~~\r
+               Here is a Long String for testing ~~~~~~~~~~~~~~~~~~~\r
+               </other>\r
+       </environment>\r
+       <summary test_plan_name="tmp_test_1">\r
+               <start_at>Fri Jul 13 04:04:59 CST 2012</start_at>\r
+               <end_at>Fri Jul 13 05:01:53 CST 2012</end_at>\r
+       </summary>\r
+       <suite name="webapi-tizen-alarm-tests" type="">\r
+               <set name="Alarm1">\r
+                       <testcase component="WebAPI/Tizen/Alarm" execution_type="auto"\r
+                               id="Alarm_AlarmRelative_constructor_delay" priority="P1"\r
+                               purpose="check AlarmRelative attribute when create with delay"\r
+                               status="approved" type="compliance" result="PASS">\r
+                               <description>\r
+                                       <pre_condition />\r
+                                       <post_condition />\r
+                                       <steps>\r
+                                               <step order="1">\r
+                                                       <step_desc>check AlarmRelative create constructor with delay\r
+                                                       </step_desc>\r
+                                                       <expected>AlarmRelative create succeed with constructor with\r
+                                                               delay\r
+                                                       </expected>\r
+                                               </step>\r
+                                       </steps>\r
+                                       <test_script_entry test_script_expected_result="0">/opt/webapi-tizen-alarm-tests/Alarm/Alarm_AlarmRelative_constructor_delay.htm\r
+                                       </test_script_entry>\r
+                               </description>\r
+                               <specs>\r
+                                       <spec>\r
+                                               <spec_assertion category="Tizen Device API Specifications"\r
+                                                       section="Widget" specification="Widget Packaging and XML Configuration"\r
+                                                       interface="Widget" usage="true" />\r
+                                               <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>\r
+                                               <spec_statement>spec_statement</spec_statement>\r
+                                       </spec>\r
+                               </specs>\r
+                               <result_info>\r
+                                       <actual_result>PASS</actual_result>\r
+                                       <start>Sat Jan 01 2000 13:43:44 GMT+0900 (KST)</start>\r
+                                       <end>Sat Jan 01 2000 13:43:46 GMT+0900 (KST)</end>\r
+                                       <stdout />\r
+                               </result_info>\r
+                       </testcase>\r
+                       <testcase component="WebAPI/Tizen/Alarm" execution_type="auto"\r
+                               id="Alarm_AlarmManager_get" priority="P1"\r
+                               purpose="check AlarmManager method removeAll: without input attribute"\r
+                               status="approved" type="compliance" result="BLOCK">\r
+                               <description>\r
+                                       <pre_condition />\r
+                                       <post_condition />\r
+                                       <steps>\r
+                                               <step order="1">\r
+                                                       <step_desc>check AlarmManager method get: default check\r
+                                                       </step_desc>\r
+                                                       <expected>AlarmManager method get: default check succeed\r
+                                                       </expected>\r
+                                               </step>\r
+                                       </steps>\r
+                                       <test_script_entry test_script_expected_result="0">/opt/webapi-tizen-alarm-tests/Alarm/Alarm_AlarmManager_get.htm\r
+                                       </test_script_entry>\r
+                               </description>\r
+                               <specs>\r
+                                       <spec>\r
+                                               <spec_assertion category="Tizen Device API Specifications"\r
+                                                       section="Widget" specification="Widget Packaging and XML Configuration"\r
+                                                       interface="Widget" usage="true" />\r
+                                               <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>\r
+                                               <spec_statement>spec_statement</spec_statement>\r
+                                       </spec>\r
+                               </specs>\r
+                               <result_info>\r
+                                       <actual_result>BLOCK</actual_result>\r
+                                       <start>Sat Jan 01 2000 13:43:46 GMT+0900 (KST)</start>\r
+                                       <end>Sat Jan 01 2000 13:44:02 GMT+0900 (KST)</end>\r
+                                       <stdout>Test time out</stdout>\r
+                               </result_info>\r
+                       </testcase>\r
+                       <testcase component="WebAPI/Tizen/Alarm" execution_type="auto"\r
+                               id="Alarm_AlarmAbsolute_attri_date_01" priority="P1"\r
+                               purpose="check AlarmAbsolute attribute when create with date"\r
+                               status="approved" type="compliance">\r
+                               <description>\r
+                                       <pre_condition />\r
+                                       <post_condition />\r
+                                       <steps>\r
+                                               <step order="1">\r
+                                                       <step_desc>check AlarmAbsolute attribute when create with date\r
+                                                       </step_desc>\r
+                                                       <expected>AlarmAbsolute attribute return correct value when\r
+                                                               create with date\r
+                                                       </expected>\r
+                                               </step>\r
+                                       </steps>\r
+                                       <test_script_entry test_script_expected_result="0">/opt/webapi-tizen-alarm-tests/Alarm/Alarm_AlarmAbsolute_attri_date.htm?total_num=3&amp;locator_key=id&amp;value=1\r
+                                       </test_script_entry>\r
+                               </description>\r
+                               <specs>\r
+                                       <spec>\r
+                                               <spec_assertion category="Tizen Device API Specifications"\r
+                                                       section="Widget" specification="Widget Packaging and XML Configuration"\r
+                                                       interface="Widget" usage="true" />\r
+                                               <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>\r
+                                               <spec_statement>spec_statement</spec_statement>\r
+                                       </spec>\r
+                               </specs>\r
+                               <result_info>\r
+                                       <actual_result>N/R</actual_result>\r
+                                       <start>Sat Jan 01 2000 13:44:02 GMT+0900 (KST)</start>\r
+                                       <end>Sat Jan 01 2000 13:44:05 GMT+0900 (KST)</end>\r
+                                       <stdout />\r
+                               </result_info>\r
+                       </testcase>\r
+                       <testcase component="WebAPI/Tizen/Alarm" execution_type="auto"\r
+                               id="Alarm_AlarmManager_add_rel" priority="P1"\r
+                               purpose="check AlarmManager method add: add relative alarm" status="approved"\r
+                               type="compliance" result="FAIL">\r
+                               <description>\r
+                                       <pre_condition />\r
+                                       <post_condition />\r
+                                       <steps>\r
+                                               <step order="1">\r
+                                                       <step_desc>check AlarmManager method add: add relative alarm\r
+                                                       </step_desc>\r
+                                                       <expected>AlarmManager method add: add relative alarm succeed\r
+                                                       </expected>\r
+                                               </step>\r
+                                       </steps>\r
+                                       <test_script_entry test_script_expected_result="0">/opt/webapi-tizen-alarm-tests/Alarm/Alarm_AlarmManager_add_rel.htm\r
+                                       </test_script_entry>\r
+                               </description>\r
+                               <specs>\r
+                                       <spec>\r
+                                               <spec_assertion category="Tizen Device API Specifications"\r
+                                                       section="Widget" specification="Widget Packaging and XML Configuration"\r
+                                                       interface="Widget" usage="true" />\r
+                                               <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>\r
+                                               <spec_statement>spec_statement</spec_statement>\r
+                                       </spec>\r
+                               </specs>\r
+                               <result_info>\r
+                                       <actual_result>FAIL</actual_result>\r
+                                       <start>Sat Jan 01 2000 13:44:05 GMT+0900 (KST)</start>\r
+                                       <end>Sat Jan 01 2000 13:44:21 GMT+0900 (KST)</end>\r
+                                       <stdout>Test time out</stdout>\r
+                               </result_info>\r
+                       </testcase>\r
+                       <testcase component="WebAPI/Tizen/Alarm" execution_type="auto"\r
+                               id="Alarm_AlarmRelative_attri_delay_02" priority="P1"\r
+                               purpose="check AlarmAbsolute attribute when create with period"\r
+                               status="approved" type="compliance" result="FAIL">\r
+                               <description>\r
+                                       <pre_condition />\r
+                                       <post_condition />\r
+                                       <steps>\r
+                                               <step order="1">\r
+                                                       <step_desc>check AlarmRelative attribute when create with delay\r
+                                                       </step_desc>\r
+                                                       <expected>AlarmRelative attribute return correct value when\r
+                                                               create succeed with with delay\r
+                                                       </expected>\r
+                                               </step>\r
+                                       </steps>\r
+                                       <test_script_entry test_script_expected_result="0">/opt/webapi-tizen-alarm-tests/Alarm/Alarm_AlarmRelative_attri_delay.htm?total_num=2&amp;locator_key=id&amp;value=2\r
+                                       </test_script_entry>\r
+                               </description>\r
+                               <specs>\r
+                                       <spec>\r
+                                               <spec_assertion category="Tizen Device API Specifications"\r
+                                                       section="Widget" specification="Widget Packaging and XML Configuration"\r
+                                                       interface="Widget" usage="true" />\r
+                                               <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>\r
+                                               <spec_statement>spec_statement</spec_statement>\r
+                                       </spec>\r
+                               </specs>\r
+                               <result_info>\r
+                                       <actual_result>FAIL</actual_result>\r
+                                       <start>Sat Jan 01 2000 13:44:21 GMT+0900 (KST)</start>\r
+                                       <end>Sat Jan 01 2000 13:44:23 GMT+0900 (KST)</end>\r
+                                       <stdout />\r
+                               </result_info>\r
+                       </testcase>\r
+                       <testcase component="WebAPI/Tizen/Alarm" execution_type="auto"\r
+                               id="Alarm_AlarmManager_getAll" priority="P1"\r
+                               purpose="check AlarmManager method getAll: default check" status="approved"\r
+                               type="compliance" result="FAIL">\r
+                               <description>\r
+                                       <pre_condition />\r
+                                       <post_condition />\r
+                                       <steps>\r
+                                               <step order="1">\r
+                                                       <step_desc>check AlarmManager method getAll: default check\r
+                                                       </step_desc>\r
+                                                       <expected>AlarmManager method getAll: default check succeed\r
+                                                       </expected>\r
+                                               </step>\r
+                                       </steps>\r
+                                       <test_script_entry test_script_expected_result="0">/opt/webapi-tizen-alarm-tests/Alarm/Alarm_AlarmManager_getAll.htm\r
+                                       </test_script_entry>\r
+                               </description>\r
+                               <specs>\r
+                                       <spec>\r
+                                               <spec_assertion category="Tizen Device API Specifications"\r
+                                                       section="Widget" specification="Widget Packaging and XML Configuration"\r
+                                                       interface="Widget" usage="true" />\r
+                                               <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>\r
+                                               <spec_statement>spec_statement</spec_statement>\r
+                                       </spec>\r
+                               </specs>\r
+                               <result_info>\r
+                                       <actual_result>FAIL</actual_result>\r
+                                       <start>Sat Jan 01 2000 13:44:23 GMT+0900 (KST)</start>\r
+                                       <end>Sat Jan 01 2000 13:44:39 GMT+0900 (KST)</end>\r
+                                       <stdout>Test time out</stdout>\r
+                               </result_info>\r
+                       </testcase>\r
+                       <testcase component="WebAPI/Tizen/Alarm" execution_type="auto"\r
+                               id="Alarm_AlarmAbsolute_attri_date_03" priority="P1"\r
+                               purpose="check AlarmAbsolute attribute when create with date"\r
+                               status="approved" type="compliance" result="Blocked">\r
+                               <description>\r
+                                       <pre_condition />\r
+                                       <post_condition />\r
+                                       <steps>\r
+                                               <step order="1">\r
+                                                       <step_desc>check AlarmAbsolute attribute when create with date\r
+                                                       </step_desc>\r
+                                                       <expected>AlarmAbsolute attribute return correct value when\r
+                                                               create with date\r
+                                                       </expected>\r
+                                               </step>\r
+                                       </steps>\r
+                                       <test_script_entry test_script_expected_result="0">/opt/webapi-tizen-alarm-tests/Alarm/Alarm_AlarmAbsolute_attri_date.htm?total_num=3&amp;locator_key=id&amp;value=3\r
+                                       </test_script_entry>\r
+                               </description>\r
+                               <specs>\r
+                                       <spec>\r
+                                               <spec_assertion category="Tizen Device API Specifications"\r
+                                                       section="Widget" specification="Widget Packaging and XML Configuration"\r
+                                                       interface="Widget" usage="true" />\r
+                                               <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>\r
+                                               <spec_statement>spec_statement</spec_statement>\r
+                                       </spec>\r
+                               </specs>\r
+                               <result_info>\r
+                                       <actual_result>FAIL</actual_result>\r
+                                       <start>Sat Jan 01 2000 13:44:39 GMT+0900 (KST)</start>\r
+                                       <end>Sat Jan 01 2000 13:44:41 GMT+0900 (KST)</end>\r
+                                       <stdout />\r
+                               </result_info>\r
+                       </testcase>\r
+                       <testcase component="WebAPI/Tizen/Alarm" execution_type="auto"\r
+                               id="Alarm_AlarmAbsolute_getNextScheduledDate_date" priority="P1"\r
+                               purpose="check AlarmAbsolute method getNextScheduledDate when create with date"\r
+                               status="approved" type="compliance" result="FAIL">\r
+                               <description>\r
+                                       <pre_condition />\r
+                                       <post_condition />\r
+                                       <steps>\r
+                                               <step order="1">\r
+                                                       <step_desc>check AlarmAbsolute method getNextScheduledDate when\r
+                                                               create with date\r
+                                                       </step_desc>\r
+                                                       <expected>AlarmAbsolute method getNextScheduledDate return\r
+                                                               correct value when create with date\r
+                                                       </expected>\r
+                                               </step>\r
+                                       </steps>\r
+                                       <test_script_entry test_script_expected_result="0">/opt/webapi-tizen-alarm-tests/Alarm/Alarm_AlarmAbsolute_getNextScheduledDate_date.htm\r
+                                       </test_script_entry>\r
+                               </description>\r
+                               <specs>\r
+                                       <spec>\r
+                                               <spec_assertion category="Tizen Device API Specifications"\r
+                                                       section="Widget" specification="Widget Packaging and XML Configuration"\r
+                                                       interface="Widget" usage="true" />\r
+                                               <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>\r
+                                               <spec_statement>spec_statement</spec_statement>\r
+                                       </spec>\r
+                               </specs>\r
+                               <result_info>\r
+                                       <actual_result>FAIL</actual_result>\r
+                                       <start>Sat Jan 01 2000 13:44:41 GMT+0900 (KST)</start>\r
+                                       <end>Sat Jan 01 2000 13:44:57 GMT+0900 (KST)</end>\r
+                                       <stdout>Test time out</stdout>\r
+                               </result_info>\r
+                       </testcase>\r
+                       <testcase component="WebAPI/Tizen/Alarm" execution_type="auto"\r
+                               id="Alarm_AlarmAbsolute_constructor_date" priority="P1"\r
+                               purpose="check AlarmAbsolute create constructor with date" status="approved"\r
+                               type="compliance" result="FAIL">\r
+                               <description>\r
+                                       <pre_condition />\r
+                                       <post_condition />\r
+                                       <steps>\r
+                                               <step order="1">\r
+                                                       <step_desc>check AlarmAbsolute create constructor with date\r
+                                                       </step_desc>\r
+                                                       <expected>AlarmAbsolute create succeed with constructor with date\r
+                                                       </expected>\r
+                                               </step>\r
+                                       </steps>\r
+                                       <test_script_entry test_script_expected_result="0">/opt/webapi-tizen-alarm-tests/Alarm/Alarm_AlarmAbsolute_constructor_date.htm\r
+                                       </test_script_entry>\r
+                               </description>\r
+                               <specs>\r
+                                       <spec>\r
+                                               <spec_assertion category="Tizen Device API Specifications"\r
+                                                       section="Widget" specification="Widget Packaging and XML Configuration"\r
+                                                       interface="Widget" usage="true" />\r
+                                               <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>\r
+                                               <spec_statement>spec_statement</spec_statement>\r
+                                       </spec>\r
+                               </specs>\r
+                               <result_info>\r
+                                       <actual_result>FAIL</actual_result>\r
+                                       <start>Sat Jan 01 2000 13:44:57 GMT+0900 (KST)</start>\r
+                                       <end>Sat Jan 01 2000 13:45:13 GMT+0900 (KST)</end>\r
+                                       <stdout>Test time out</stdout>\r
+                               </result_info>\r
+                       </testcase>\r
+                       <testcase component="WebAPI/Tizen/Alarm" execution_type="auto"\r
+                               id="Alarm_AlarmRelative_getRemainingSeconds_delay" priority="P1"\r
+                               purpose="check AlarmRelative method getNextScheduleddelay when create with delay"\r
+                               status="approved" type="compliance" result="FAIL">\r
+                               <description>\r
+                                       <pre_condition />\r
+                                       <post_condition />\r
+                                       <steps>\r
+                                               <step order="1">\r
+                                                       <step_desc>check AlarmRelative method getNextScheduleddelay when\r
+                                                               create with delay\r
+                                                       </step_desc>\r
+                                                       <expected>AlarmRelative method getNextScheduleddelay return\r
+                                                               correct value when create succeed with with delay\r
+                                                       </expected>\r
+                                               </step>\r
+                                       </steps>\r
+                                       <test_script_entry test_script_expected_result="0">/opt/webapi-tizen-alarm-tests/Alarm/Alarm_AlarmRelative_getRemainingSeconds_delay.htm\r
+                                       </test_script_entry>\r
+                               </description>\r
+                               <specs>\r
+                                       <spec>\r
+                                               <spec_assertion category="Tizen Device API Specifications"\r
+                                                       section="Widget" specification="Widget Packaging and XML Configuration"\r
+                                                       interface="Widget" usage="true" />\r
+                                               <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>\r
+                                               <spec_statement>spec_statement</spec_statement>\r
+                                       </spec>\r
+                               </specs>\r
+                               <result_info>\r
+                                       <actual_result>FAIL</actual_result>\r
+                                       <start>Sat Jan 01 2000 13:45:13 GMT+0900 (KST)</start>\r
+                                       <end>Sat Jan 01 2000 13:45:30 GMT+0900 (KST)</end>\r
+                                       <stdout>Test time out</stdout>\r
+                               </result_info>\r
+                       </testcase>\r
+                       <testcase component="WebAPI/Tizen/Alarm" execution_type="auto"\r
+                               id="Alarm_AlarmRelative_attri_delay_01" priority="P1"\r
+                               purpose="check AlarmAbsolute attribute when create with period"\r
+                               status="approved" type="compliance" result="FAIL">\r
+                               <description>\r
+                                       <pre_condition />\r
+                                       <post_condition />\r
+                                       <steps>\r
+                                               <step order="1">\r
+                                                       <step_desc>check AlarmRelative attribute when create with delay\r
+                                                       </step_desc>\r
+                                                       <expected>AlarmRelative attribute return correct value when\r
+                                                               create succeed with with delay\r
+                                                       </expected>\r
+                                               </step>\r
+                                       </steps>\r
+                                       <test_script_entry test_script_expected_result="0">/opt/webapi-tizen-alarm-tests/Alarm/Alarm_AlarmRelative_attri_delay.htm?total_num=2&amp;locator_key=id&amp;value=1\r
+                                       </test_script_entry>\r
+                               </description>\r
+                               <specs>\r
+                                       <spec>\r
+                                               <spec_assertion category="Tizen Device API Specifications"\r
+                                                       section="Widget" specification="Widget Packaging and XML Configuration"\r
+                                                       interface="Widget" usage="true" />\r
+                                               <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>\r
+                                               <spec_statement>spec_statement</spec_statement>\r
+                                       </spec>\r
+                               </specs>\r
+                               <result_info>\r
+                                       <actual_result>FAIL</actual_result>\r
+                                       <start>Sat Jan 01 2000 13:45:30 GMT+0900 (KST)</start>\r
+                                       <end>Sat Jan 01 2000 13:45:32 GMT+0900 (KST)</end>\r
+                                       <stdout />\r
+                               </result_info>\r
+                       </testcase>\r
+                       <testcase component="WebAPI/Tizen/Alarm" execution_type="auto"\r
+                               id="Alarm_AlarmManager_add_abs" priority="P1"\r
+                               purpose="check AlarmManager method add: add absolute alarm" status="approved"\r
+                               type="compliance" result="FAIL">\r
+                               <description>\r
+                                       <pre_condition />\r
+                                       <post_condition />\r
+                                       <steps>\r
+                                               <step order="1">\r
+                                                       <step_desc>check AlarmManager method add: add absolute alarm\r
+                                                       </step_desc>\r
+                                                       <expected>AlarmManager method add: add absolute alarm succeed\r
+                                                       </expected>\r
+                                               </step>\r
+                                       </steps>\r
+                                       <test_script_entry test_script_expected_result="0">/opt/webapi-tizen-alarm-tests/Alarm/Alarm_AlarmManager_add_abs.htm\r
+                                       </test_script_entry>\r
+                               </description>\r
+                               <specs>\r
+                                       <spec>\r
+                                               <spec_assertion category="Tizen Device API Specifications"\r
+                                                       section="Widget" specification="Widget Packaging and XML Configuration"\r
+                                                       interface="Widget" usage="true" />\r
+                                               <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>\r
+                                               <spec_statement>spec_statement</spec_statement>\r
+                                       </spec>\r
+                               </specs>\r
+                               <result_info>\r
+                                       <actual_result>FAIL</actual_result>\r
+                                       <start>Sat Jan 01 2000 13:45:32 GMT+0900 (KST)</start>\r
+                                       <end>Sat Jan 01 2000 13:45:48 GMT+0900 (KST)</end>\r
+                                       <stdout>Test time out</stdout>\r
+                               </result_info>\r
+                       </testcase>\r
+                       <testcase component="WebAPI/Tizen/Alarm" execution_type="auto"\r
+                               id="Alarm_AlarmAbsolute_attri_date_02" priority="P1"\r
+                               purpose="check AlarmAbsolute attribute when create with date"\r
+                               status="approved" type="compliance" result="FAIL">\r
+                               <description>\r
+                                       <pre_condition />\r
+                                       <post_condition />\r
+                                       <steps>\r
+                                               <step order="1">\r
+                                                       <step_desc>check AlarmAbsolute attribute when create with date\r
+                                                       </step_desc>\r
+                                                       <expected>AlarmAbsolute attribute return correct value when\r
+                                                               create with date\r
+                                                       </expected>\r
+                                               </step>\r
+                                       </steps>\r
+                                       <test_script_entry test_script_expected_result="0">/opt/webapi-tizen-alarm-tests/Alarm/Alarm_AlarmAbsolute_attri_date.htm?total_num=3&amp;locator_key=id&amp;value=2\r
+                                       </test_script_entry>\r
+                               </description>\r
+                               <specs>\r
+                                       <spec>\r
+                                               <spec_assertion category="Tizen Device API Specifications"\r
+                                                       section="Widget" specification="Widget Packaging and XML Configuration"\r
+                                                       interface="Widget" usage="true" />\r
+                                               <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>\r
+                                               <spec_statement>spec_statement</spec_statement>\r
+                                       </spec>\r
+                               </specs>\r
+                               <result_info>\r
+                                       <actual_result>FAIL</actual_result>\r
+                                       <start>Sat Jan 01 2000 13:45:48 GMT+0900 (KST)</start>\r
+                                       <end>Sat Jan 01 2000 13:45:50 GMT+0900 (KST)</end>\r
+                                       <stdout />\r
+                               </result_info>\r
+                       </testcase>\r
+                       <testcase component="WebAPI/Tizen/Alarm" execution_type="auto"\r
+                               id="Alarm_AlarmManager_removeAll" priority="P1"\r
+                               purpose="check AlarmManager method removeAll: default check" status="approved"\r
+                               type="compliance" result="FAIL">\r
+                               <description>\r
+                                       <pre_condition />\r
+                                       <post_condition />\r
+                                       <steps>\r
+                                               <step order="1">\r
+                                                       <step_desc>check AlarmManager method removeAll: default check\r
+                                                       </step_desc>\r
+                                                       <expected>AlarmManager method removeAll: default check succeed\r
+                                                       </expected>\r
+                                               </step>\r
+                                       </steps>\r
+                                       <test_script_entry test_script_expected_result="0">/opt/webapi-tizen-alarm-tests/Alarm/Alarm_AlarmManager_removeAll.htm\r
+                                       </test_script_entry>\r
+                               </description>\r
+                               <specs>\r
+                                       <spec>\r
+                                               <spec_assertion category="Tizen Device API Specifications"\r
+                                                       section="Widget" specification="Widget Packaging and XML Configuration"\r
+                                                       interface="Widget" usage="true" />\r
+                                               <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>\r
+                                               <spec_statement>spec_statement</spec_statement>\r
+                                       </spec>\r
+                               </specs>\r
+                               <result_info>\r
+                                       <actual_result>FAIL</actual_result>\r
+                                       <start>Sat Jan 01 2000 13:45:50 GMT+0900 (KST)</start>\r
+                                       <end>Sat Jan 01 2000 13:46:06 GMT+0900 (KST)</end>\r
+                                       <stdout>Test time out</stdout>\r
+                               </result_info>\r
+                       </testcase>\r
+                       <testcase component="WebAPI/Tizen/Alarm" execution_type="auto"\r
+                               id="Alarm_AlarmManager_remove" priority="P1"\r
+                               purpose="check AlarmManager method remove: default check" status="approved"\r
+                               type="compliance" result="FAIL">\r
+                               <description>\r
+                                       <pre_condition />\r
+                                       <post_condition />\r
+                                       <steps>\r
+                                               <step order="1">\r
+                                                       <step_desc>check AlarmManager method remove: default check\r
+                                                       </step_desc>\r
+                                                       <expected>AlarmManager method remove: default check succeed\r
+                                                       </expected>\r
+                                               </step>\r
+                                       </steps>\r
+                                       <test_script_entry test_script_expected_result="0">/opt/webapi-tizen-alarm-tests/Alarm/Alarm_AlarmManager_remove.htm\r
+                                       </test_script_entry>\r
+                               </description>\r
+                               <specs>\r
+                                       <spec>\r
+                                               <spec_assertion category="Tizen Device API Specifications"\r
+                                                       section="Widget" specification="Widget Packaging and XML Configuration"\r
+                                                       interface="Widget" usage="true" />\r
+                                               <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>\r
+                                               <spec_statement>spec_statement</spec_statement>\r
+                                       </spec>\r
+                               </specs>\r
+                               <result_info>\r
+                                       <actual_result>FAIL</actual_result>\r
+                                       <start>Sat Jan 01 2000 13:46:06 GMT+0900 (KST)</start>\r
+                                       <end>Sat Jan 01 2000 13:46:22 GMT+0900 (KST)</end>\r
+                                       <stdout>Test time out</stdout>\r
+                               </result_info>\r
+                       </testcase>\r
+                       <testcase component="WebAPI/Tizen/Alarm" execution_type="auto"\r
+                               id="Alarm_AlarmManagerObject_exist" priority="P1"\r
+                               purpose="check AlarmManagerObject existance" status="approved" type="compliance"\r
+                               result="FAIL">\r
+                               <description>\r
+                                       <pre_condition />\r
+                                       <post_condition />\r
+                                       <steps>\r
+                                               <step order="1">\r
+                                                       <step_desc>check AlarmManagerObject exist</step_desc>\r
+                                                       <expected>AlarmManagerObject exist</expected>\r
+                                               </step>\r
+                                       </steps>\r
+                                       <test_script_entry test_script_expected_result="">/opt/webapi-tizen-alarm-tests/Alarm/Alarm_AlarmManagerObject_exist.htm\r
+                                       </test_script_entry>\r
+                               </description>\r
+                               <specs>\r
+                                       <spec>\r
+                                               <spec_assertion category="Tizen Device API Specifications"\r
+                                                       section="Widget" specification="Widget Packaging and XML Configuration"\r
+                                                       interface="Widget" usage="true" />\r
+                                               <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>\r
+                                               <spec_statement>spec_statement</spec_statement>\r
+                                       </spec>\r
+                               </specs>\r
+                               <result_info>\r
+                                       <actual_result>FAIL</actual_result>\r
+                                       <start>Sat Jan 01 2000 13:46:22 GMT+0900 (KST)</start>\r
+                                       <end>Sat Jan 01 2000 13:46:38 GMT+0900 (KST)</end>\r
+                                       <stdout>Test time out</stdout>\r
+                               </result_info>\r
+                       </testcase>\r
+                       <testcase component="WebAPI/Tizen/Alarm" execution_type="auto"\r
+                               id="Alarm_AlarmManager_const_check_01" priority="P1"\r
+                               purpose="Check AlarmManager constants:PERIOD_MINUTE" status="approved"\r
+                               type="compliance" result="FAIL">\r
+                               <description>\r
+                                       <pre_condition />\r
+                                       <post_condition />\r
+                                       <steps>\r
+                                               <step order="1">\r
+                                                       <step_desc>Check AlarmManager constants:</step_desc>\r
+                                                       <expected>AlarmManager constants value is correct:</expected>\r
+                                               </step>\r
+                                       </steps>\r
+                                       <test_script_entry test_script_expected_result="0">/opt/webapi-tizen-alarm-tests/Alarm/Alarm_AlarmManager_const_check.htm?total_num=4&amp;locator_key=id&amp;value=1\r
+                                       </test_script_entry>\r
+                               </description>\r
+                               <specs>\r
+                                       <spec>\r
+                                               <spec_assertion category="Tizen Device API Specifications"\r
+                                                       section="Widget" specification="Widget Packaging and XML Configuration"\r
+                                                       interface="Widget" usage="true" />\r
+                                               <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>\r
+                                               <spec_statement>spec_statement</spec_statement>\r
+                                       </spec>\r
+                               </specs>\r
+                               <result_info>\r
+                                       <actual_result>FAIL</actual_result>\r
+                                       <start>Sat Jan 01 2000 13:46:38 GMT+0900 (KST)</start>\r
+                                       <end>Sat Jan 01 2000 13:46:40 GMT+0900 (KST)</end>\r
+                                       <stdout>Can't find variable: tizen</stdout>\r
+                               </result_info>\r
+                       </testcase>\r
+                       <testcase component="WebAPI/Tizen/Alarm" execution_type="auto"\r
+                               id="Alarm_AlarmManager_const_check_02" priority="P1"\r
+                               purpose="Check AlarmManager constants:PERIOD_HOUR" status="approved"\r
+                               type="compliance" result="FAIL">\r
+                               <description>\r
+                                       <pre_condition />\r
+                                       <post_condition />\r
+                                       <steps>\r
+                                               <step order="1">\r
+                                                       <step_desc>Check AlarmManager constants:</step_desc>\r
+                                                       <expected>AlarmManager constants value is correct:</expected>\r
+                                               </step>\r
+                                       </steps>\r
+                                       <test_script_entry test_script_expected_result="0">/opt/webapi-tizen-alarm-tests/Alarm/Alarm_AlarmManager_const_check.htm?total_num=4&amp;locator_key=id&amp;value=2\r
+                                       </test_script_entry>\r
+                               </description>\r
+                               <specs>\r
+                                       <spec>\r
+                                               <spec_assertion category="Tizen Device API Specifications"\r
+                                                       section="Widget" specification="Widget Packaging and XML Configuration"\r
+                                                       interface="Widget" usage="true" />\r
+                                               <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>\r
+                                               <spec_statement>spec_statement</spec_statement>\r
+                                       </spec>\r
+                               </specs>\r
+                               <result_info>\r
+                                       <actual_result>FAIL</actual_result>\r
+                                       <start>Sat Jan 01 2000 13:46:40 GMT+0900 (KST)</start>\r
+                                       <end>Sat Jan 01 2000 13:46:42 GMT+0900 (KST)</end>\r
+                                       <stdout>Can't find variable: tizen</stdout>\r
+                               </result_info>\r
+                       </testcase>\r
+                       <testcase component="WebAPI/Tizen/Alarm" execution_type="auto"\r
+                               id="Alarm_AlarmManager_const_check_03" priority="P1"\r
+                               purpose="Check AlarmManager constants:PERIOD_DAY" status="approved"\r
+                               type="compliance" result="FAIL">\r
+                               <description>\r
+                                       <pre_condition />\r
+                                       <post_condition />\r
+                                       <steps>\r
+                                               <step order="1">\r
+                                                       <step_desc>Check AlarmManager constants:</step_desc>\r
+                                                       <expected>AlarmManager constants value is correct:</expected>\r
+                                               </step>\r
+                                       </steps>\r
+                                       <test_script_entry test_script_expected_result="0">/opt/webapi-tizen-alarm-tests/Alarm/Alarm_AlarmManager_const_check.htm?total_num=4&amp;locator_key=id&amp;value=3\r
+                                       </test_script_entry>\r
+                               </description>\r
+                               <specs>\r
+                                       <spec>\r
+                                               <spec_assertion category="Tizen Device API Specifications"\r
+                                                       section="Widget" specification="Widget Packaging and XML Configuration"\r
+                                                       interface="Widget" usage="true" />\r
+                                               <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>\r
+                                               <spec_statement>spec_statement</spec_statement>\r
+                                       </spec>\r
+                               </specs>\r
+                               <result_info>\r
+                                       <actual_result>FAIL</actual_result>\r
+                                       <start>Sat Jan 01 2000 13:46:42 GMT+0900 (KST)</start>\r
+                                       <end>Sat Jan 01 2000 13:46:44 GMT+0900 (KST)</end>\r
+                                       <stdout>Can't find variable: tizen</stdout>\r
+                               </result_info>\r
+                       </testcase>\r
+                       <testcase component="WebAPI/Tizen/Alarm" execution_type="auto"\r
+                               id="Alarm_AlarmManager_const_check_04" priority="P1"\r
+                               purpose="Check AlarmManager constants:PERIOD_WEEK" status="approved"\r
+                               type="compliance" result="FAIL">\r
+                               <description>\r
+                                       <pre_condition />\r
+                                       <post_condition />\r
+                                       <steps>\r
+                                               <step order="1">\r
+                                                       <step_desc>Check AlarmManager constants:</step_desc>\r
+                                                       <expected>AlarmManager constants value is correct:</expected>\r
+                                               </step>\r
+                                       </steps>\r
+                                       <test_script_entry test_script_expected_result="0">/opt/webapi-tizen-alarm-tests/Alarm/Alarm_AlarmManager_const_check.htm?total_num=4&amp;locator_key=id&amp;value=4\r
+                                       </test_script_entry>\r
+                               </description>\r
+                               <specs>\r
+                                       <spec>\r
+                                               <spec_assertion category="Tizen Device API Specifications"\r
+                                                       section="Widget" specification="Widget Packaging and XML Configuration"\r
+                                                       interface="Widget" usage="true" />\r
+                                               <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>\r
+                                               <spec_statement>spec_statement</spec_statement>\r
+                                       </spec>\r
+                               </specs>\r
+                               <result_info>\r
+                                       <actual_result>FAIL</actual_result>\r
+                                       <start>Sat Jan 01 2000 13:46:44 GMT+0900 (KST)</start>\r
+                                       <end>Sat Jan 01 2000 13:46:46 GMT+0900 (KST)</end>\r
+                                       <stdout>Can't find variable: tizen</stdout>\r
+                               </result_info>\r
+                       </testcase>\r
+               </set>\r
+               <set name="Alarm">\r
+                       <testcase component="WebAPI/Tizen/Alarm" execution_type="auto"\r
+                               id="Alarm_AlarmRelative_constructor_delay" priority="P1"\r
+                               purpose="check AlarmRelative attribute when create with delay"\r
+                               status="approved" type="compliance" result="PASS">\r
+                               <description>\r
+                                       <pre_condition />\r
+                                       <post_condition />\r
+                                       <steps>\r
+                                               <step order="1">\r
+                                                       <step_desc>check AlarmRelative create constructor with delay\r
+                                                       </step_desc>\r
+                                                       <expected>AlarmRelative create succeed with constructor with\r
+                                                               delay\r
+                                                       </expected>\r
+                                               </step>\r
+                                       </steps>\r
+                                       <test_script_entry test_script_expected_result="0">/opt/webapi-tizen-alarm-tests/Alarm/Alarm_AlarmRelative_constructor_delay.htm\r
+                                       </test_script_entry>\r
+                               </description>\r
+                               <specs>\r
+                                       <spec>\r
+                                               <spec_assertion category="Tizen Device API Specifications"\r
+                                                       section="Widget" specification="Widget Packaging and XML Configuration"\r
+                                                       interface="Widget" usage="true" />\r
+                                               <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>\r
+                                               <spec_statement>spec_statement</spec_statement>\r
+                                       </spec>\r
+                               </specs>\r
+                               <result_info>\r
+                                       <actual_result>PASS</actual_result>\r
+                                       <start>Sat Jan 01 2000 13:43:44 GMT+0900 (KST)</start>\r
+                                       <end>Sat Jan 01 2000 13:43:46 GMT+0900 (KST)</end>\r
+                                       <stdout />\r
+                               </result_info>\r
+                       </testcase>\r
+                       <testcase component="WebAPI/Tizen/Alarm" execution_type="auto"\r
+                               id="Alarm_AlarmManager_get" priority="P1"\r
+                               purpose="check AlarmManager method removeAll: without input attribute"\r
+                               status="approved" type="compliance" result="FAIL">\r
+                               <description>\r
+                                       <pre_condition />\r
+                                       <post_condition />\r
+                                       <steps>\r
+                                               <step order="1">\r
+                                                       <step_desc>check AlarmManager method get: default check\r
+                                                       </step_desc>\r
+                                                       <expected>AlarmManager method get: default check succeed\r
+                                                       </expected>\r
+                                               </step>\r
+                                       </steps>\r
+                                       <test_script_entry test_script_expected_result="0">/opt/webapi-tizen-alarm-tests/Alarm/Alarm_AlarmManager_get.htm\r
+                                       </test_script_entry>\r
+                               </description>\r
+                               <specs>\r
+                                       <spec>\r
+                                               <spec_assertion category="Tizen Device API Specifications"\r
+                                                       section="Widget" specification="Widget Packaging and XML Configuration"\r
+                                                       interface="Widget" usage="true" />\r
+                                               <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>\r
+                                               <spec_statement>spec_statement</spec_statement>\r
+                                       </spec>\r
+                               </specs>\r
+                               <result_info>\r
+                                       <actual_result>FAIL</actual_result>\r
+                                       <start>Sat Jan 01 2000 13:43:46 GMT+0900 (KST)</start>\r
+                                       <end>Sat Jan 01 2000 13:44:02 GMT+0900 (KST)</end>\r
+                                       <stdout>Test time out</stdout>\r
+                               </result_info>\r
+                       </testcase>\r
+                       <testcase component="WebAPI/Tizen/Alarm" execution_type="auto"\r
+                               id="Alarm_AlarmAbsolute_attri_date_01" priority="P1"\r
+                               purpose="check AlarmAbsolute attribute when create with date"\r
+                               status="approved" type="compliance" result="FAIL">\r
+                               <description>\r
+                                       <pre_condition />\r
+                                       <post_condition />\r
+                                       <steps>\r
+                                               <step order="1">\r
+                                                       <step_desc>check AlarmAbsolute attribute when create with date\r
+                                                       </step_desc>\r
+                                                       <expected>AlarmAbsolute attribute return correct value when\r
+                                                               create with date\r
+                                                       </expected>\r
+                                               </step>\r
+                                       </steps>\r
+                                       <test_script_entry test_script_expected_result="0">/opt/webapi-tizen-alarm-tests/Alarm/Alarm_AlarmAbsolute_attri_date.htm?total_num=3&amp;locator_key=id&amp;value=1\r
+                                       </test_script_entry>\r
+                               </description>\r
+                               <specs>\r
+                                       <spec>\r
+                                               <spec_assertion category="Tizen Device API Specifications"\r
+                                                       section="Widget" specification="Widget Packaging and XML Configuration"\r
+                                                       interface="Widget" usage="true" />\r
+                                               <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>\r
+                                               <spec_statement>spec_statement</spec_statement>\r
+                                       </spec>\r
+                               </specs>\r
+                               <result_info>\r
+                                       <actual_result>FAIL</actual_result>\r
+                                       <start>Sat Jan 01 2000 13:44:02 GMT+0900 (KST)</start>\r
+                                       <end>Sat Jan 01 2000 13:44:05 GMT+0900 (KST)</end>\r
+                                       <stdout />\r
+                               </result_info>\r
+                       </testcase>\r
+                       <testcase component="WebAPI/Tizen/Alarm" execution_type="auto"\r
+                               id="Alarm_AlarmManager_add_rel" priority="P1"\r
+                               purpose="check AlarmManager method add: add relative alarm" status="approved"\r
+                               type="compliance" result="FAIL">\r
+                               <description>\r
+                                       <pre_condition />\r
+                                       <post_condition />\r
+                                       <steps>\r
+                                               <step order="1">\r
+                                                       <step_desc>check AlarmManager method add: add relative alarm\r
+                                                       </step_desc>\r
+                                                       <expected>AlarmManager method add: add relative alarm succeed\r
+                                                       </expected>\r
+                                               </step>\r
+                                       </steps>\r
+                                       <test_script_entry test_script_expected_result="0">/opt/webapi-tizen-alarm-tests/Alarm/Alarm_AlarmManager_add_rel.htm\r
+                                       </test_script_entry>\r
+                               </description>\r
+                               <specs>\r
+                                       <spec>\r
+                                               <spec_assertion category="Tizen Device API Specifications"\r
+                                                       section="Widget" specification="Widget Packaging and XML Configuration"\r
+                                                       interface="Widget" usage="true" />\r
+                                               <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>\r
+                                               <spec_statement>spec_statement</spec_statement>\r
+                                       </spec>\r
+                               </specs>\r
+                               <result_info>\r
+                                       <actual_result>FAIL</actual_result>\r
+                                       <start>Sat Jan 01 2000 13:44:05 GMT+0900 (KST)</start>\r
+                                       <end>Sat Jan 01 2000 13:44:21 GMT+0900 (KST)</end>\r
+                                       <stdout>Test time out</stdout>\r
+                               </result_info>\r
+                       </testcase>\r
+                       <testcase component="WebAPI/Tizen/Alarm" execution_type="auto"\r
+                               id="Alarm_AlarmRelative_attri_delay_02" priority="P1"\r
+                               purpose="check AlarmAbsolute attribute when create with period"\r
+                               status="approved" type="compliance" result="FAIL">\r
+                               <description>\r
+                                       <pre_condition />\r
+                                       <post_condition />\r
+                                       <steps>\r
+                                               <step order="1">\r
+                                                       <step_desc>check AlarmRelative attribute when create with delay\r
+                                                       </step_desc>\r
+                                                       <expected>AlarmRelative attribute return correct value when\r
+                                                               create succeed with with delay\r
+                                                       </expected>\r
+                                               </step>\r
+                                       </steps>\r
+                                       <test_script_entry test_script_expected_result="0">/opt/webapi-tizen-alarm-tests/Alarm/Alarm_AlarmRelative_attri_delay.htm?total_num=2&amp;locator_key=id&amp;value=2\r
+                                       </test_script_entry>\r
+                               </description>\r
+                               <specs>\r
+                                       <spec>\r
+                                               <spec_assertion category="Tizen Device API Specifications"\r
+                                                       section="Widget" specification="Widget Packaging and XML Configuration"\r
+                                                       interface="Widget" usage="true" />\r
+                                               <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>\r
+                                               <spec_statement>spec_statement</spec_statement>\r
+                                       </spec>\r
+                               </specs>\r
+                               <result_info>\r
+                                       <actual_result>FAIL</actual_result>\r
+                                       <start>Sat Jan 01 2000 13:44:21 GMT+0900 (KST)</start>\r
+                                       <end>Sat Jan 01 2000 13:44:23 GMT+0900 (KST)</end>\r
+                                       <stdout />\r
+                               </result_info>\r
+                       </testcase>\r
+               </set>\r
+       </suite>\r
+       <suite name="webapi-tizen-alarm-tests1" type="">\r
+               <set name="Alarm4">\r
+                       <testcase component="WebAPI/Tizen/Alarm" execution_type="auto"\r
+                               id="Alarm_AlarmRelative_constructor_delay" priority="P1"\r
+                               purpose="check AlarmRelative attribute when create with delay"\r
+                               status="approved" type="compliance" result="PASS">\r
+                               <description>\r
+                                       <pre_condition />\r
+                                       <post_condition />\r
+                                       <steps>\r
+                                               <step order="1">\r
+                                                       <step_desc>check AlarmRelative create constructor with delay\r
+                                                       </step_desc>\r
+                                                       <expected>AlarmRelative create succeed with constructor with\r
+                                                               delay\r
+                                                       </expected>\r
+                                               </step>\r
+                                       </steps>\r
+                                       <test_script_entry test_script_expected_result="0">/opt/webapi-tizen-alarm-tests/Alarm/Alarm_AlarmRelative_constructor_delay.htm\r
+                                       </test_script_entry>\r
+                               </description>\r
+                               <specs>\r
+                                       <spec>\r
+                                               <spec_assertion category="Tizen Device API Specifications"\r
+                                                       section="Widget" specification="Widget Packaging and XML Configuration"\r
+                                                       interface="Widget" usage="true" />\r
+                                               <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>\r
+                                               <spec_statement>spec_statement</spec_statement>\r
+                                       </spec>\r
+                               </specs>\r
+                               <result_info>\r
+                                       <actual_result>PASS</actual_result>\r
+                                       <start>Sat Jan 01 2000 13:43:44 GMT+0900 (KST)</start>\r
+                                       <end>Sat Jan 01 2000 13:43:46 GMT+0900 (KST)</end>\r
+                                       <stdout />\r
+                               </result_info>\r
+                       </testcase>\r
+                       <testcase component="WebAPI/Tizen/Alarm" execution_type="auto"\r
+                               id="Alarm_AlarmManager_get" priority="P1"\r
+                               purpose="check AlarmManager method removeAll: without input attribute"\r
+                               status="approved" type="compliance" result="FAIL">\r
+                               <description>\r
+                                       <pre_condition />\r
+                                       <post_condition />\r
+                                       <steps>\r
+                                               <step order="1">\r
+                                                       <step_desc>check AlarmManager method get: default check\r
+                                                       </step_desc>\r
+                                                       <expected>AlarmManager method get: default check succeed\r
+                                                       </expected>\r
+                                               </step>\r
+                                       </steps>\r
+                                       <test_script_entry test_script_expected_result="0">/opt/webapi-tizen-alarm-tests/Alarm/Alarm_AlarmManager_get.htm\r
+                                       </test_script_entry>\r
+                               </description>\r
+                               <specs>\r
+                                       <spec>\r
+                                               <spec_assertion category="Tizen Device API Specifications"\r
+                                                       section="Widget" specification="Widget Packaging and XML Configuration"\r
+                                                       interface="Widget" usage="true" />\r
+                                               <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>\r
+                                               <spec_statement>spec_statement</spec_statement>\r
+                                       </spec>\r
+                               </specs>\r
+                               <result_info>\r
+                                       <actual_result>FAIL</actual_result>\r
+                                       <start>Sat Jan 01 2000 13:43:46 GMT+0900 (KST)</start>\r
+                                       <end>Sat Jan 01 2000 13:44:02 GMT+0900 (KST)</end>\r
+                                       <stdout>Test time out</stdout>\r
+                               </result_info>\r
+                       </testcase>\r
+                       <testcase component="WebAPI/Tizen/Alarm" execution_type="auto"\r
+                               id="Alarm_AlarmAbsolute_attri_date_01" priority="P1"\r
+                               purpose="check AlarmAbsolute attribute when create with date"\r
+                               status="approved" type="compliance" result="FAIL">\r
+                               <description>\r
+                                       <pre_condition />\r
+                                       <post_condition />\r
+                                       <steps>\r
+                                               <step order="1">\r
+                                                       <step_desc>check AlarmAbsolute attribute when create with date\r
+                                                       </step_desc>\r
+                                                       <expected>AlarmAbsolute attribute return correct value when\r
+                                                               create with date\r
+                                                       </expected>\r
+                                               </step>\r
+                                       </steps>\r
+                                       <test_script_entry test_script_expected_result="0">/opt/webapi-tizen-alarm-tests/Alarm/Alarm_AlarmAbsolute_attri_date.htm?total_num=3&amp;locator_key=id&amp;value=1\r
+                                       </test_script_entry>\r
+                               </description>\r
+                               <specs>\r
+                                       <spec>\r
+                                               <spec_assertion category="Tizen Device API Specifications"\r
+                                                       section="Widget" specification="Widget Packaging and XML Configuration"\r
+                                                       interface="Widget" usage="true" />\r
+                                               <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>\r
+                                               <spec_statement>spec_statement</spec_statement>\r
+                                       </spec>\r
+                               </specs>\r
+                               <result_info>\r
+                                       <actual_result>FAIL</actual_result>\r
+                                       <start>Sat Jan 01 2000 13:44:02 GMT+0900 (KST)</start>\r
+                                       <end>Sat Jan 01 2000 13:44:05 GMT+0900 (KST)</end>\r
+                                       <stdout />\r
+                               </result_info>\r
+                       </testcase>\r
+                       <testcase component="WebAPI/Tizen/Alarm" execution_type="auto"\r
+                               id="Alarm_AlarmManager_add_rel" priority="P1"\r
+                               purpose="check AlarmManager method add: add relative alarm" status="approved"\r
+                               type="compliance" result="FAIL">\r
+                               <description>\r
+                                       <pre_condition />\r
+                                       <post_condition />\r
+                                       <steps>\r
+                                               <step order="1">\r
+                                                       <step_desc>check AlarmManager method add: add relative alarm\r
+                                                       </step_desc>\r
+                                                       <expected>AlarmManager method add: add relative alarm succeed\r
+                                                       </expected>\r
+                                               </step>\r
+                                       </steps>\r
+                                       <test_script_entry test_script_expected_result="0">/opt/webapi-tizen-alarm-tests/Alarm/Alarm_AlarmManager_add_rel.htm\r
+                                       </test_script_entry>\r
+                               </description>\r
+                               <specs>\r
+                                       <spec>\r
+                                               <spec_assertion category="Tizen Device API Specifications"\r
+                                                       section="Widget" specification="Widget Packaging and XML Configuration"\r
+                                                       interface="Widget" usage="true" />\r
+                                               <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>\r
+                                               <spec_statement>spec_statement</spec_statement>\r
+                                       </spec>\r
+                               </specs>\r
+                               <result_info>\r
+                                       <actual_result>FAIL</actual_result>\r
+                                       <start>Sat Jan 01 2000 13:44:05 GMT+0900 (KST)</start>\r
+                                       <end>Sat Jan 01 2000 13:44:21 GMT+0900 (KST)</end>\r
+                                       <stdout>Test time out</stdout>\r
+                               </result_info>\r
+                       </testcase>\r
+                       <testcase component="WebAPI/Tizen/Alarm" execution_type="auto"\r
+                               id="Alarm_AlarmRelative_attri_delay_02" priority="P1"\r
+                               purpose="check AlarmAbsolute attribute when create with period"\r
+                               status="approved" type="compliance" result="FAIL">\r
+                               <description>\r
+                                       <pre_condition />\r
+                                       <post_condition />\r
+                                       <steps>\r
+                                               <step order="1">\r
+                                                       <step_desc>check AlarmRelative attribute when create with delay\r
+                                                       </step_desc>\r
+                                                       <expected>AlarmRelative attribute return correct value when\r
+                                                               create succeed with with delay\r
+                                                       </expected>\r
+                                               </step>\r
+                                       </steps>\r
+                                       <test_script_entry test_script_expected_result="0">/opt/webapi-tizen-alarm-tests/Alarm/Alarm_AlarmRelative_attri_delay.htm?total_num=2&amp;locator_key=id&amp;value=2\r
+                                       </test_script_entry>\r
+                               </description>\r
+                               <specs>\r
+                                       <spec>\r
+                                               <spec_assertion category="Tizen Device API Specifications"\r
+                                                       section="Widget" specification="Widget Packaging and XML Configuration"\r
+                                                       interface="Widget" usage="true" />\r
+                                               <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>\r
+                                               <spec_statement>spec_statement</spec_statement>\r
+                                       </spec>\r
+                               </specs>\r
+                               <result_info>\r
+                                       <actual_result>FAIL</actual_result>\r
+                                       <start>Sat Jan 01 2000 13:44:21 GMT+0900 (KST)</start>\r
+                                       <end>Sat Jan 01 2000 13:44:23 GMT+0900 (KST)</end>\r
+                                       <stdout />\r
+                               </result_info>\r
+                       </testcase>\r
+                       <testcase component="WebAPI/Tizen/Alarm" execution_type="auto"\r
+                               id="Alarm_AlarmManager_getAll" priority="P1"\r
+                               purpose="check AlarmManager method getAll: default check" status="approved"\r
+                               type="compliance" result="FAIL">\r
+                               <description>\r
+                                       <pre_condition />\r
+                                       <post_condition />\r
+                                       <steps>\r
+                                               <step order="1">\r
+                                                       <step_desc>check AlarmManager method getAll: default check\r
+                                                       </step_desc>\r
+                                                       <expected>AlarmManager method getAll: default check succeed\r
+                                                       </expected>\r
+                                               </step>\r
+                                       </steps>\r
+                                       <test_script_entry test_script_expected_result="0">/opt/webapi-tizen-alarm-tests/Alarm/Alarm_AlarmManager_getAll.htm\r
+                                       </test_script_entry>\r
+                               </description>\r
+                               <specs>\r
+                                       <spec>\r
+                                               <spec_assertion category="Tizen Device API Specifications"\r
+                                                       section="Widget" specification="Widget Packaging and XML Configuration"\r
+                                                       interface="Widget" usage="true" />\r
+                                               <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>\r
+                                               <spec_statement>spec_statement</spec_statement>\r
+                                       </spec>\r
+                               </specs>\r
+                               <result_info>\r
+                                       <actual_result>FAIL</actual_result>\r
+                                       <start>Sat Jan 01 2000 13:44:23 GMT+0900 (KST)</start>\r
+                                       <end>Sat Jan 01 2000 13:44:39 GMT+0900 (KST)</end>\r
+                                       <stdout>Test time out</stdout>\r
+                               </result_info>\r
+                       </testcase>\r
+                       <testcase component="WebAPI/Tizen/Alarm" execution_type="auto"\r
+                               id="Alarm_AlarmAbsolute_attri_date_03" priority="P1"\r
+                               purpose="check AlarmAbsolute attribute when create with date"\r
+                               status="approved" type="compliance" result="FAIL">\r
+                               <description>\r
+                                       <pre_condition />\r
+                                       <post_condition />\r
+                                       <steps>\r
+                                               <step order="1">\r
+                                                       <step_desc>check AlarmAbsolute attribute when create with date\r
+                                                       </step_desc>\r
+                                                       <expected>AlarmAbsolute attribute return correct value when\r
+                                                               create with date\r
+                                                       </expected>\r
+                                               </step>\r
+                                       </steps>\r
+                                       <test_script_entry test_script_expected_result="0">/opt/webapi-tizen-alarm-tests/Alarm/Alarm_AlarmAbsolute_attri_date.htm?total_num=3&amp;locator_key=id&amp;value=3\r
+                                       </test_script_entry>\r
+                               </description>\r
+                               <specs>\r
+                                       <spec>\r
+                                               <spec_assertion category="Tizen Device API Specifications"\r
+                                                       section="Widget" specification="Widget Packaging and XML Configuration"\r
+                                                       interface="Widget" usage="true" />\r
+                                               <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>\r
+                                               <spec_statement>spec_statement</spec_statement>\r
+                                       </spec>\r
+                               </specs>\r
+                               <result_info>\r
+                                       <actual_result>FAIL</actual_result>\r
+                                       <start>Sat Jan 01 2000 13:44:39 GMT+0900 (KST)</start>\r
+                                       <end>Sat Jan 01 2000 13:44:41 GMT+0900 (KST)</end>\r
+                                       <stdout />\r
+                               </result_info>\r
+                       </testcase>\r
+                       <testcase component="WebAPI/Tizen/Alarm" execution_type="auto"\r
+                               id="Alarm_AlarmAbsolute_getNextScheduledDate_date" priority="P1"\r
+                               purpose="check AlarmAbsolute method getNextScheduledDate when create with date"\r
+                               status="approved" type="compliance" result="FAIL">\r
+                               <description>\r
+                                       <pre_condition />\r
+                                       <post_condition />\r
+                                       <steps>\r
+                                               <step order="1">\r
+                                                       <step_desc>check AlarmAbsolute method getNextScheduledDate when\r
+                                                               create with date\r
+                                                       </step_desc>\r
+                                                       <expected>AlarmAbsolute method getNextScheduledDate return\r
+                                                               correct value when create with date\r
+                                                       </expected>\r
+                                               </step>\r
+                                       </steps>\r
+                                       <test_script_entry test_script_expected_result="0">/opt/webapi-tizen-alarm-tests/Alarm/Alarm_AlarmAbsolute_getNextScheduledDate_date.htm\r
+                                       </test_script_entry>\r
+                               </description>\r
+                               <specs>\r
+                                       <spec>\r
+                                               <spec_assertion category="Tizen Device API Specifications"\r
+                                                       section="Widget" specification="Widget Packaging and XML Configuration"\r
+                                                       interface="Widget" usage="true" />\r
+                                               <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>\r
+                                               <spec_statement>spec_statement</spec_statement>\r
+                                       </spec>\r
+                               </specs>\r
+                               <result_info>\r
+                                       <actual_result>FAIL</actual_result>\r
+                                       <start>Sat Jan 01 2000 13:44:41 GMT+0900 (KST)</start>\r
+                                       <end>Sat Jan 01 2000 13:44:57 GMT+0900 (KST)</end>\r
+                                       <stdout>Test time out</stdout>\r
+                               </result_info>\r
+                       </testcase>\r
+                       <testcase component="WebAPI/Tizen/Alarm" execution_type="auto"\r
+                               id="Alarm_AlarmAbsolute_constructor_date" priority="P1"\r
+                               purpose="check AlarmAbsolute create constructor with date" status="approved"\r
+                               type="compliance" result="FAIL">\r
+                               <description>\r
+                                       <pre_condition />\r
+                                       <post_condition />\r
+                                       <steps>\r
+                                               <step order="1">\r
+                                                       <step_desc>check AlarmAbsolute create constructor with date\r
+                                                       </step_desc>\r
+                                                       <expected>AlarmAbsolute create succeed with constructor with date\r
+                                                       </expected>\r
+                                               </step>\r
+                                       </steps>\r
+                                       <test_script_entry test_script_expected_result="0">/opt/webapi-tizen-alarm-tests/Alarm/Alarm_AlarmAbsolute_constructor_date.htm\r
+                                       </test_script_entry>\r
+                               </description>\r
+                               <specs>\r
+                                       <spec>\r
+                                               <spec_assertion category="Tizen Device API Specifications"\r
+                                                       section="Widget" specification="Widget Packaging and XML Configuration"\r
+                                                       interface="Widget" usage="true" />\r
+                                               <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>\r
+                                               <spec_statement>spec_statement</spec_statement>\r
+                                       </spec>\r
+                               </specs>\r
+                               <result_info>\r
+                                       <actual_result>FAIL</actual_result>\r
+                                       <start>Sat Jan 01 2000 13:44:57 GMT+0900 (KST)</start>\r
+                                       <end>Sat Jan 01 2000 13:45:13 GMT+0900 (KST)</end>\r
+                                       <stdout>Test time out</stdout>\r
+                               </result_info>\r
+                       </testcase>\r
+                       <testcase component="WebAPI/Tizen/Alarm" execution_type="auto"\r
+                               id="Alarm_AlarmRelative_getRemainingSeconds_delay" priority="P1"\r
+                               purpose="check AlarmRelative method getNextScheduleddelay when create with delay"\r
+                               status="approved" type="compliance" result="FAIL">\r
+                               <description>\r
+                                       <pre_condition />\r
+                                       <post_condition />\r
+                                       <steps>\r
+                                               <step order="1">\r
+                                                       <step_desc>check AlarmRelative method getNextScheduleddelay when\r
+                                                               create with delay\r
+                                                       </step_desc>\r
+                                                       <expected>AlarmRelative method getNextScheduleddelay return\r
+                                                               correct value when create succeed with with delay\r
+                                                       </expected>\r
+                                               </step>\r
+                                       </steps>\r
+                                       <test_script_entry test_script_expected_result="0">/opt/webapi-tizen-alarm-tests/Alarm/Alarm_AlarmRelative_getRemainingSeconds_delay.htm\r
+                                       </test_script_entry>\r
+                               </description>\r
+                               <specs>\r
+                                       <spec>\r
+                                               <spec_assertion category="Tizen Device API Specifications"\r
+                                                       section="Widget" specification="Widget Packaging and XML Configuration"\r
+                                                       interface="Widget" usage="true" />\r
+                                               <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>\r
+                                               <spec_statement>spec_statement</spec_statement>\r
+                                       </spec>\r
+                               </specs>\r
+                               <result_info>\r
+                                       <actual_result>FAIL</actual_result>\r
+                                       <start>Sat Jan 01 2000 13:45:13 GMT+0900 (KST)</start>\r
+                                       <end>Sat Jan 01 2000 13:45:30 GMT+0900 (KST)</end>\r
+                                       <stdout>Test time out</stdout>\r
+                               </result_info>\r
+                       </testcase>\r
+                       <testcase component="WebAPI/Tizen/Alarm" execution_type="auto"\r
+                               id="Alarm_AlarmRelative_attri_delay_01" priority="P1"\r
+                               purpose="check AlarmAbsolute attribute when create with period"\r
+                               status="approved" type="compliance" result="FAIL">\r
+                               <description>\r
+                                       <pre_condition />\r
+                                       <post_condition />\r
+                                       <steps>\r
+                                               <step order="1">\r
+                                                       <step_desc>check AlarmRelative attribute when create with delay\r
+                                                       </step_desc>\r
+                                                       <expected>AlarmRelative attribute return correct value when\r
+                                                               create succeed with with delay\r
+                                                       </expected>\r
+                                               </step>\r
+                                       </steps>\r
+                                       <test_script_entry test_script_expected_result="0">/opt/webapi-tizen-alarm-tests/Alarm/Alarm_AlarmRelative_attri_delay.htm?total_num=2&amp;locator_key=id&amp;value=1\r
+                                       </test_script_entry>\r
+                               </description>\r
+                               <specs>\r
+                                       <spec>\r
+                                               <spec_assertion category="Tizen Device API Specifications"\r
+                                                       section="Widget" specification="Widget Packaging and XML Configuration"\r
+                                                       interface="Widget" usage="true" />\r
+                                               <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>\r
+                                               <spec_statement>spec_statement</spec_statement>\r
+                                       </spec>\r
+                               </specs>\r
+                               <result_info>\r
+                                       <actual_result>FAIL</actual_result>\r
+                                       <start>Sat Jan 01 2000 13:45:30 GMT+0900 (KST)</start>\r
+                                       <end>Sat Jan 01 2000 13:45:32 GMT+0900 (KST)</end>\r
+                                       <stdout />\r
+                               </result_info>\r
+                       </testcase>\r
+                       <testcase component="WebAPI/Tizen/Alarm" execution_type="auto"\r
+                               id="Alarm_AlarmManager_add_abs" priority="P1"\r
+                               purpose="check AlarmManager method add: add absolute alarm" status="approved"\r
+                               type="compliance" result="FAIL">\r
+                               <description>\r
+                                       <pre_condition />\r
+                                       <post_condition />\r
+                                       <steps>\r
+                                               <step order="1">\r
+                                                       <step_desc>check AlarmManager method add: add absolute alarm\r
+                                                       </step_desc>\r
+                                                       <expected>AlarmManager method add: add absolute alarm succeed\r
+                                                       </expected>\r
+                                               </step>\r
+                                       </steps>\r
+                                       <test_script_entry test_script_expected_result="0">/opt/webapi-tizen-alarm-tests/Alarm/Alarm_AlarmManager_add_abs.htm\r
+                                       </test_script_entry>\r
+                               </description>\r
+                               <specs>\r
+                                       <spec>\r
+                                               <spec_assertion category="Tizen Device API Specifications"\r
+                                                       section="Widget" specification="Widget Packaging and XML Configuration"\r
+                                                       interface="Widget" usage="true" />\r
+                                               <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>\r
+                                               <spec_statement>spec_statement</spec_statement>\r
+                                       </spec>\r
+                               </specs>\r
+                               <result_info>\r
+                                       <actual_result>FAIL</actual_result>\r
+                                       <start>Sat Jan 01 2000 13:45:32 GMT+0900 (KST)</start>\r
+                                       <end>Sat Jan 01 2000 13:45:48 GMT+0900 (KST)</end>\r
+                                       <stdout>Test time out</stdout>\r
+                               </result_info>\r
+                       </testcase>\r
+                       <testcase component="WebAPI/Tizen/Alarm" execution_type="auto"\r
+                               id="Alarm_AlarmAbsolute_attri_date_02" priority="P1"\r
+                               purpose="check AlarmAbsolute attribute when create with date"\r
+                               status="approved" type="compliance" result="FAIL">\r
+                               <description>\r
+                                       <pre_condition />\r
+                                       <post_condition />\r
+                                       <steps>\r
+                                               <step order="1">\r
+                                                       <step_desc>check AlarmAbsolute attribute when create with date\r
+                                                       </step_desc>\r
+                                                       <expected>AlarmAbsolute attribute return correct value when\r
+                                                               create with date\r
+                                                       </expected>\r
+                                               </step>\r
+                                       </steps>\r
+                                       <test_script_entry test_script_expected_result="0">/opt/webapi-tizen-alarm-tests/Alarm/Alarm_AlarmAbsolute_attri_date.htm?total_num=3&amp;locator_key=id&amp;value=2\r
+                                       </test_script_entry>\r
+                               </description>\r
+                               <specs>\r
+                                       <spec>\r
+                                               <spec_assertion category="Tizen Device API Specifications"\r
+                                                       section="Widget" specification="Widget Packaging and XML Configuration"\r
+                                                       interface="Widget" usage="true" />\r
+                                               <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>\r
+                                               <spec_statement>spec_statement</spec_statement>\r
+                                       </spec>\r
+                               </specs>\r
+                               <result_info>\r
+                                       <actual_result>FAIL</actual_result>\r
+                                       <start>Sat Jan 01 2000 13:45:48 GMT+0900 (KST)</start>\r
+                                       <end>Sat Jan 01 2000 13:45:50 GMT+0900 (KST)</end>\r
+                                       <stdout />\r
+                               </result_info>\r
+                       </testcase>\r
+                       <testcase component="WebAPI/Tizen/Alarm" execution_type="auto"\r
+                               id="Alarm_AlarmManager_removeAll" priority="P1"\r
+                               purpose="check AlarmManager method removeAll: default check" status="approved"\r
+                               type="compliance" result="FAIL">\r
+                               <description>\r
+                                       <pre_condition />\r
+                                       <post_condition />\r
+                                       <steps>\r
+                                               <step order="1">\r
+                                                       <step_desc>check AlarmManager method removeAll: default check\r
+                                                       </step_desc>\r
+                                                       <expected>AlarmManager method removeAll: default check succeed\r
+                                                       </expected>\r
+                                               </step>\r
+                                       </steps>\r
+                                       <test_script_entry test_script_expected_result="0">/opt/webapi-tizen-alarm-tests/Alarm/Alarm_AlarmManager_removeAll.htm\r
+                                       </test_script_entry>\r
+                               </description>\r
+                               <specs>\r
+                                       <spec>\r
+                                               <spec_assertion category="Tizen Device API Specifications"\r
+                                                       section="Widget" specification="Widget Packaging and XML Configuration"\r
+                                                       interface="Widget" usage="true" />\r
+                                               <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>\r
+                                               <spec_statement>spec_statement</spec_statement>\r
+                                       </spec>\r
+                               </specs>\r
+                               <result_info>\r
+                                       <actual_result>FAIL</actual_result>\r
+                                       <start>Sat Jan 01 2000 13:45:50 GMT+0900 (KST)</start>\r
+                                       <end>Sat Jan 01 2000 13:46:06 GMT+0900 (KST)</end>\r
+                                       <stdout>Test time out</stdout>\r
+                               </result_info>\r
+                       </testcase>\r
+                       <testcase component="WebAPI/Tizen/Alarm" execution_type="auto"\r
+                               id="Alarm_AlarmManager_remove" priority="P1"\r
+                               purpose="check AlarmManager method remove: default check" status="approved"\r
+                               type="compliance" result="FAIL">\r
+                               <description>\r
+                                       <pre_condition />\r
+                                       <post_condition />\r
+                                       <steps>\r
+                                               <step order="1">\r
+                                                       <step_desc>check AlarmManager method remove: default check\r
+                                                       </step_desc>\r
+                                                       <expected>AlarmManager method remove: default check succeed\r
+                                                       </expected>\r
+                                               </step>\r
+                                       </steps>\r
+                                       <test_script_entry test_script_expected_result="0">/opt/webapi-tizen-alarm-tests/Alarm/Alarm_AlarmManager_remove.htm\r
+                                       </test_script_entry>\r
+                               </description>\r
+                               <specs>\r
+                                       <spec>\r
+                                               <spec_assertion category="Tizen Device API Specifications"\r
+                                                       section="Widget" specification="Widget Packaging and XML Configuration"\r
+                                                       interface="Widget" usage="true" />\r
+                                               <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>\r
+                                               <spec_statement>spec_statement</spec_statement>\r
+                                       </spec>\r
+                               </specs>\r
+                               <result_info>\r
+                                       <actual_result>FAIL</actual_result>\r
+                                       <start>Sat Jan 01 2000 13:46:06 GMT+0900 (KST)</start>\r
+                                       <end>Sat Jan 01 2000 13:46:22 GMT+0900 (KST)</end>\r
+                                       <stdout>Test time out</stdout>\r
+                               </result_info>\r
+                       </testcase>\r
+                       <testcase component="WebAPI/Tizen/Alarm" execution_type="auto"\r
+                               id="Alarm_AlarmManagerObject_exist" priority="P1"\r
+                               purpose="check AlarmManagerObject existance" status="approved" type="compliance"\r
+                               result="FAIL">\r
+                               <description>\r
+                                       <pre_condition />\r
+                                       <post_condition />\r
+                                       <steps>\r
+                                               <step order="1">\r
+                                                       <step_desc>check AlarmManagerObject exist</step_desc>\r
+                                                       <expected>AlarmManagerObject exist</expected>\r
+                                               </step>\r
+                                       </steps>\r
+                                       <test_script_entry test_script_expected_result="">/opt/webapi-tizen-alarm-tests/Alarm/Alarm_AlarmManagerObject_exist.htm\r
+                                       </test_script_entry>\r
+                               </description>\r
+                               <specs>\r
+                                       <spec>\r
+                                               <spec_assertion category="Tizen Device API Specifications"\r
+                                                       section="Widget" specification="Widget Packaging and XML Configuration"\r
+                                                       interface="Widget" usage="true" />\r
+                                               <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>\r
+                                               <spec_statement>spec_statement</spec_statement>\r
+                                       </spec>\r
+                               </specs>\r
+                               <result_info>\r
+                                       <actual_result>FAIL</actual_result>\r
+                                       <start>Sat Jan 01 2000 13:46:22 GMT+0900 (KST)</start>\r
+                                       <end>Sat Jan 01 2000 13:46:38 GMT+0900 (KST)</end>\r
+                                       <stdout>Test time out</stdout>\r
+                               </result_info>\r
+                       </testcase>\r
+                       <testcase component="WebAPI/Tizen/Alarm" execution_type="auto"\r
+                               id="Alarm_AlarmManager_const_check_01" priority="P1"\r
+                               purpose="Check AlarmManager constants:PERIOD_MINUTE" status="approved"\r
+                               type="compliance" result="FAIL">\r
+                               <description>\r
+                                       <pre_condition />\r
+                                       <post_condition />\r
+                                       <steps>\r
+                                               <step order="1">\r
+                                                       <step_desc>Check AlarmManager constants:</step_desc>\r
+                                                       <expected>AlarmManager constants value is correct:</expected>\r
+                                               </step>\r
+                                       </steps>\r
+                                       <test_script_entry test_script_expected_result="0">/opt/webapi-tizen-alarm-tests/Alarm/Alarm_AlarmManager_const_check.htm?total_num=4&amp;locator_key=id&amp;value=1\r
+                                       </test_script_entry>\r
+                               </description>\r
+                               <specs>\r
+                                       <spec>\r
+                                               <spec_assertion category="Tizen Device API Specifications"\r
+                                                       section="Widget" specification="Widget Packaging and XML Configuration"\r
+                                                       interface="Widget" usage="true" />\r
+                                               <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>\r
+                                               <spec_statement>spec_statement</spec_statement>\r
+                                       </spec>\r
+                               </specs>\r
+                               <result_info>\r
+                                       <actual_result>FAIL</actual_result>\r
+                                       <start>Sat Jan 01 2000 13:46:38 GMT+0900 (KST)</start>\r
+                                       <end>Sat Jan 01 2000 13:46:40 GMT+0900 (KST)</end>\r
+                                       <stdout>Can't find variable: tizen</stdout>\r
+                               </result_info>\r
+                       </testcase>\r
+                       <testcase component="WebAPI/Tizen/Alarm" execution_type="auto"\r
+                               id="Alarm_AlarmManager_const_check_02" priority="P1"\r
+                               purpose="Check AlarmManager constants:PERIOD_HOUR" status="approved"\r
+                               type="compliance" result="FAIL">\r
+                               <description>\r
+                                       <pre_condition />\r
+                                       <post_condition />\r
+                                       <steps>\r
+                                               <step order="1">\r
+                                                       <step_desc>Check AlarmManager constants:</step_desc>\r
+                                                       <expected>AlarmManager constants value is correct:</expected>\r
+                                               </step>\r
+                                       </steps>\r
+                                       <test_script_entry test_script_expected_result="0">/opt/webapi-tizen-alarm-tests/Alarm/Alarm_AlarmManager_const_check.htm?total_num=4&amp;locator_key=id&amp;value=2\r
+                                       </test_script_entry>\r
+                               </description>\r
+                               <specs>\r
+                                       <spec>\r
+                                               <spec_assertion category="Tizen Device API Specifications"\r
+                                                       section="Widget" specification="Widget Packaging and XML Configuration"\r
+                                                       interface="Widget" usage="true" />\r
+                                               <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>\r
+                                               <spec_statement>spec_statement</spec_statement>\r
+                                       </spec>\r
+                               </specs>\r
+                               <result_info>\r
+                                       <actual_result>FAIL</actual_result>\r
+                                       <start>Sat Jan 01 2000 13:46:40 GMT+0900 (KST)</start>\r
+                                       <end>Sat Jan 01 2000 13:46:42 GMT+0900 (KST)</end>\r
+                                       <stdout>Can't find variable: tizen</stdout>\r
+                               </result_info>\r
+                       </testcase>\r
+                       <testcase component="WebAPI/Tizen/Alarm" execution_type="auto"\r
+                               id="Alarm_AlarmManager_const_check_03" priority="P1"\r
+                               purpose="Check AlarmManager constants:PERIOD_DAY" status="approved"\r
+                               type="compliance" result="FAIL">\r
+                               <description>\r
+                                       <pre_condition />\r
+                                       <post_condition />\r
+                                       <steps>\r
+                                               <step order="1">\r
+                                                       <step_desc>Check AlarmManager constants:</step_desc>\r
+                                                       <expected>AlarmManager constants value is correct:</expected>\r
+                                               </step>\r
+                                       </steps>\r
+                                       <test_script_entry test_script_expected_result="0">/opt/webapi-tizen-alarm-tests/Alarm/Alarm_AlarmManager_const_check.htm?total_num=4&amp;locator_key=id&amp;value=3\r
+                                       </test_script_entry>\r
+                               </description>\r
+                               <specs>\r
+                                       <spec>\r
+                                               <spec_assertion category="Tizen Device API Specifications"\r
+                                                       section="Widget" specification="Widget Packaging and XML Configuration"\r
+                                                       interface="Widget" usage="true" />\r
+                                               <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>\r
+                                               <spec_statement>spec_statement</spec_statement>\r
+                                       </spec>\r
+                               </specs>\r
+                               <result_info>\r
+                                       <actual_result>FAIL</actual_result>\r
+                                       <start>Sat Jan 01 2000 13:46:42 GMT+0900 (KST)</start>\r
+                                       <end>Sat Jan 01 2000 13:46:44 GMT+0900 (KST)</end>\r
+                                       <stdout>Can't find variable: tizen</stdout>\r
+                               </result_info>\r
+                       </testcase>\r
+                       <testcase component="WebAPI/Tizen/Alarm" execution_type="auto"\r
+                               id="Alarm_AlarmManager_const_check_04" priority="P1"\r
+                               purpose="Check AlarmManager constants:PERIOD_WEEK" status="approved"\r
+                               type="compliance" result="FAIL">\r
+                               <description>\r
+                                       <pre_condition />\r
+                                       <post_condition />\r
+                                       <steps>\r
+                                               <step order="1">\r
+                                                       <step_desc>Check AlarmManager constants:</step_desc>\r
+                                                       <expected>AlarmManager constants value is correct:</expected>\r
+                                               </step>\r
+                                       </steps>\r
+                                       <test_script_entry test_script_expected_result="0">/opt/webapi-tizen-alarm-tests/Alarm/Alarm_AlarmManager_const_check.htm?total_num=4&amp;locator_key=id&amp;value=4\r
+                                       </test_script_entry>\r
+                               </description>\r
+                               <specs>\r
+                                       <spec>\r
+                                               <spec_assertion category="Tizen Device API Specifications"\r
+                                                       section="Widget" specification="Widget Packaging and XML Configuration"\r
+                                                       interface="Widget" usage="true" />\r
+                                               <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>\r
+                                               <spec_statement>spec_statement</spec_statement>\r
+                                       </spec>\r
+                               </specs>\r
+                               <result_info>\r
+                                       <actual_result>FAIL</actual_result>\r
+                                       <start>Sat Jan 01 2000 13:46:44 GMT+0900 (KST)</start>\r
+                                       <end>Sat Jan 01 2000 13:46:46 GMT+0900 (KST)</end>\r
+                                       <stdout>Can't find variable: tizen</stdout>\r
+                               </result_info>\r
+                       </testcase>\r
+               </set>\r
+               <set name="Alarm3">\r
+                       <testcase component="WebAPI/Tizen/Alarm" execution_type="auto"\r
+                               id="Alarm_AlarmRelative_constructor_delay" priority="P1"\r
+                               purpose="check AlarmRelative attribute when create with delay"\r
+                               status="approved" type="compliance" result="PASS">\r
+                               <description>\r
+                                       <pre_condition />\r
+                                       <post_condition />\r
+                                       <steps>\r
+                                               <step order="1">\r
+                                                       <step_desc>check AlarmRelative create constructor with delay\r
+                                                       </step_desc>\r
+                                                       <expected>AlarmRelative create succeed with constructor with\r
+                                                               delay\r
+                                                       </expected>\r
+                                               </step>\r
+                                       </steps>\r
+                                       <test_script_entry test_script_expected_result="0">/opt/webapi-tizen-alarm-tests/Alarm/Alarm_AlarmRelative_constructor_delay.htm\r
+                                       </test_script_entry>\r
+                               </description>\r
+                               <specs>\r
+                                       <spec>\r
+                                               <spec_assertion category="Tizen Device API Specifications"\r
+                                                       section="Widget" specification="Widget Packaging and XML Configuration"\r
+                                                       interface="Widget" usage="true" />\r
+                                               <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>\r
+                                               <spec_statement>spec_statement</spec_statement>\r
+                                       </spec>\r
+                               </specs>\r
+                               <result_info>\r
+                                       <actual_result>PASS</actual_result>\r
+                                       <start>Sat Jan 01 2000 13:43:44 GMT+0900 (KST)</start>\r
+                                       <end>Sat Jan 01 2000 13:43:46 GMT+0900 (KST)</end>\r
+                                       <stdout />\r
+                               </result_info>\r
+                       </testcase>\r
+                       <testcase component="WebAPI/Tizen/Alarm" execution_type="auto"\r
+                               id="Alarm_AlarmManager_get" priority="P1"\r
+                               purpose="check AlarmManager method removeAll: without input attribute"\r
+                               status="approved" type="compliance" result="FAIL">\r
+                               <description>\r
+                                       <pre_condition />\r
+                                       <post_condition />\r
+                                       <steps>\r
+                                               <step order="1">\r
+                                                       <step_desc>check AlarmManager method get: default check\r
+                                                       </step_desc>\r
+                                                       <expected>AlarmManager method get: default check succeed\r
+                                                       </expected>\r
+                                               </step>\r
+                                       </steps>\r
+                                       <test_script_entry test_script_expected_result="0">/opt/webapi-tizen-alarm-tests/Alarm/Alarm_AlarmManager_get.htm\r
+                                       </test_script_entry>\r
+                               </description>\r
+                               <specs>\r
+                                       <spec>\r
+                                               <spec_assertion category="Tizen Device API Specifications"\r
+                                                       section="Widget" specification="Widget Packaging and XML Configuration"\r
+                                                       interface="Widget" usage="true" />\r
+                                               <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>\r
+                                               <spec_statement>spec_statement</spec_statement>\r
+                                       </spec>\r
+                               </specs>\r
+                               <result_info>\r
+                                       <actual_result>FAIL</actual_result>\r
+                                       <start>Sat Jan 01 2000 13:43:46 GMT+0900 (KST)</start>\r
+                                       <end>Sat Jan 01 2000 13:44:02 GMT+0900 (KST)</end>\r
+                                       <stdout>Test time out</stdout>\r
+                               </result_info>\r
+                       </testcase>\r
+                       <testcase component="WebAPI/Tizen/Alarm" execution_type="auto"\r
+                               id="Alarm_AlarmAbsolute_attri_date_01" priority="P1"\r
+                               purpose="check AlarmAbsolute attribute when create with date"\r
+                               status="approved" type="compliance" result="FAIL">\r
+                               <description>\r
+                                       <pre_condition />\r
+                                       <post_condition />\r
+                                       <steps>\r
+                                               <step order="1">\r
+                                                       <step_desc>check AlarmAbsolute attribute when create with date\r
+                                                       </step_desc>\r
+                                                       <expected>AlarmAbsolute attribute return correct value when\r
+                                                               create with date\r
+                                                       </expected>\r
+                                               </step>\r
+                                       </steps>\r
+                                       <test_script_entry test_script_expected_result="0">/opt/webapi-tizen-alarm-tests/Alarm/Alarm_AlarmAbsolute_attri_date.htm?total_num=3&amp;locator_key=id&amp;value=1\r
+                                       </test_script_entry>\r
+                               </description>\r
+                               <specs>\r
+                                       <spec>\r
+                                               <spec_assertion category="Tizen Device API Specifications"\r
+                                                       section="Widget" specification="Widget Packaging and XML Configuration"\r
+                                                       interface="Widget" usage="true" />\r
+                                               <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>\r
+                                               <spec_statement>spec_statement</spec_statement>\r
+                                       </spec>\r
+                               </specs>\r
+                               <result_info>\r
+                                       <actual_result>FAIL</actual_result>\r
+                                       <start>Sat Jan 01 2000 13:44:02 GMT+0900 (KST)</start>\r
+                                       <end>Sat Jan 01 2000 13:44:05 GMT+0900 (KST)</end>\r
+                                       <stdout />\r
+                               </result_info>\r
+                       </testcase>\r
+                       <testcase component="WebAPI/Tizen/Alarm" execution_type="auto"\r
+                               id="Alarm_AlarmManager_add_rel" priority="P1"\r
+                               purpose="check AlarmManager method add: add relative alarm" status="approved"\r
+                               type="compliance" result="FAIL">\r
+                               <description>\r
+                                       <pre_condition />\r
+                                       <post_condition />\r
+                                       <steps>\r
+                                               <step order="1">\r
+                                                       <step_desc>check AlarmManager method add: add relative alarm\r
+                                                       </step_desc>\r
+                                                       <expected>AlarmManager method add: add relative alarm succeed\r
+                                                       </expected>\r
+                                               </step>\r
+                                       </steps>\r
+                                       <test_script_entry test_script_expected_result="0">/opt/webapi-tizen-alarm-tests/Alarm/Alarm_AlarmManager_add_rel.htm\r
+                                       </test_script_entry>\r
+                               </description>\r
+                               <specs>\r
+                                       <spec>\r
+                                               <spec_assertion category="Tizen Device API Specifications"\r
+                                                       section="Widget" specification="Widget Packaging and XML Configuration"\r
+                                                       interface="Widget" usage="true" />\r
+                                               <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>\r
+                                               <spec_statement>spec_statement</spec_statement>\r
+                                       </spec>\r
+                               </specs>\r
+                               <result_info>\r
+                                       <actual_result>FAIL</actual_result>\r
+                                       <start>Sat Jan 01 2000 13:44:05 GMT+0900 (KST)</start>\r
+                                       <end>Sat Jan 01 2000 13:44:21 GMT+0900 (KST)</end>\r
+                                       <stdout>Test time out</stdout>\r
+                               </result_info>\r
+                       </testcase>\r
+                       <testcase component="WebAPI/Tizen/Alarm" execution_type="auto"\r
+                               id="Alarm_AlarmRelative_attri_delay_02" priority="P1"\r
+                               purpose="check AlarmAbsolute attribute when create with period"\r
+                               status="approved" type="compliance" result="FAIL">\r
+                               <description>\r
+                                       <pre_condition />\r
+                                       <post_condition />\r
+                                       <steps>\r
+                                               <step order="1">\r
+                                                       <step_desc>check AlarmRelative attribute when create with delay\r
+                                                       </step_desc>\r
+                                                       <expected>AlarmRelative attribute return correct value when\r
+                                                               create succeed with with delay\r
+                                                       </expected>\r
+                                               </step>\r
+                                       </steps>\r
+                                       <test_script_entry test_script_expected_result="0">/opt/webapi-tizen-alarm-tests/Alarm/Alarm_AlarmRelative_attri_delay.htm?total_num=2&amp;locator_key=id&amp;value=2\r
+                                       </test_script_entry>\r
+                               </description>\r
+                               <specs>\r
+                                       <spec>\r
+                                               <spec_assertion category="Tizen Device API Specifications"\r
+                                                       section="Widget" specification="Widget Packaging and XML Configuration"\r
+                                                       interface="Widget" usage="true" />\r
+                                               <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>\r
+                                               <spec_statement>spec_statement</spec_statement>\r
+                                       </spec>\r
+                               </specs>\r
+                               <result_info>\r
+                                       <actual_result>FAIL</actual_result>\r
+                                       <start>Sat Jan 01 2000 13:44:21 GMT+0900 (KST)</start>\r
+                                       <end>Sat Jan 01 2000 13:44:23 GMT+0900 (KST)</end>\r
+                                       <stdout />\r
+                               </result_info>\r
+                       </testcase>\r
+               </set>\r
+       </suite>\r
+</test_definition>\r
diff --git a/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite1.0/xsd/test_definition.xsd b/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite1.0/xsd/test_definition.xsd
new file mode 100755 (executable)
index 0000000..9653308
--- /dev/null
@@ -0,0 +1,383 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
+
+       <xs:element name="suite">
+
+
+               <xs:complexType>
+
+                       <xs:sequence minOccurs="1" maxOccurs="unbounded">
+                               <xs:element ref="set" minOccurs="0" maxOccurs="unbounded"></xs:element>
+                       </xs:sequence>
+
+                       <xs:attributeGroup ref="set_attribute_group"></xs:attributeGroup>
+                       <xs:attribute name="launcher" type="xs:string"></xs:attribute>
+               </xs:complexType>
+               <xs:unique name="uniqueSetName">
+                       <xs:selector xpath=".//set" />
+                       <xs:field xpath="@name" />
+               </xs:unique>
+       </xs:element>
+
+       <xs:element name="set">
+
+               <xs:complexType>
+                       <xs:sequence>
+                               <xs:element name="capabilities" type="CapabilitiesType"
+                                       minOccurs="0" maxOccurs="1">
+                               </xs:element>
+                               <xs:sequence minOccurs="1" maxOccurs="unbounded">
+                                       <xs:element ref="testcase" minOccurs="0"
+                                               maxOccurs="unbounded">
+                                       </xs:element>
+                               </xs:sequence>
+                       </xs:sequence>
+
+
+
+                       <xs:attributeGroup ref="set_attribute_group"></xs:attributeGroup>
+                       <xs:attribute name="launcher" type="xs:string"></xs:attribute>
+                       <xs:attribute name="set_debug_msg" type="xs:string"></xs:attribute>
+               </xs:complexType>
+               <xs:unique name="uniqueCaseName">
+                       <xs:selector xpath=".//testcase" />
+                       <xs:field xpath="@id" />
+               </xs:unique>
+       </xs:element>
+
+       <xs:element name="testcase">
+               <xs:complexType>
+                       <xs:sequence minOccurs="1">
+                               <xs:element ref="description"></xs:element>
+                               <xs:element name="categories" type="categories"
+                                       minOccurs="0" maxOccurs="1">
+                               </xs:element>
+                               <xs:element name="measurement" type="measurementType"
+                                       minOccurs="0" maxOccurs="unbounded">
+                               </xs:element>
+                               <xs:element name="series" type="seriesType" minOccurs="0"
+                                       maxOccurs="unbounded">
+                               </xs:element>
+                               <xs:element name="specs" type="specsType" minOccurs="0"
+                                       maxOccurs="1">
+                               </xs:element>
+                               <xs:element name="result_info" type="result_info_type"
+                                       minOccurs="0">
+                               </xs:element>
+                       </xs:sequence>
+
+                       <xs:attributeGroup ref="case_attribute_group"></xs:attributeGroup>
+               </xs:complexType>
+       </xs:element>
+
+       <xs:element name="steps">
+               <xs:complexType>
+                       <xs:sequence minOccurs="0" maxOccurs="unbounded">
+                               <xs:element ref="step"></xs:element>
+                       </xs:sequence>
+               </xs:complexType>
+               <xs:unique name="uniqueStepName">
+                       <xs:selector xpath=".//step" />
+                       <xs:field xpath="@order" />
+               </xs:unique>
+       </xs:element>
+
+       <xs:attributeGroup name="set_attribute_group">
+
+               <xs:attribute name="name" type="xs:anyURI" use="required"></xs:attribute>
+               <xs:attribute name="type" type="xs:string"></xs:attribute>
+       </xs:attributeGroup>
+
+       <xs:attributeGroup name="case_attribute_group">
+
+               <xs:attribute name="id" use="required">
+                       <xs:simpleType>
+                               <xs:restriction base="xs:string">
+                                       <xs:minLength value="1"></xs:minLength>
+                                       <xs:whiteSpace value="collapse"></xs:whiteSpace>
+                               </xs:restriction>
+                       </xs:simpleType>
+               </xs:attribute>
+
+               <xs:attribute name="priority" type="priority_simple_type"
+                       use="required">
+               </xs:attribute>
+
+               <xs:attribute name="execution_type" type="execution_type_simple_type"
+                       use="required">
+               </xs:attribute>
+
+               <xs:attribute name="component" type="xs:string"></xs:attribute>
+
+               <xs:attribute name="requirement_ref" type="xs:anyURI"
+                       use="optional">
+               </xs:attribute>
+
+               <xs:attribute name="status" type="status_type" use="required"></xs:attribute>
+
+               <xs:attribute name="type" type="case_type_type" use="required">
+               </xs:attribute>
+               <xs:attribute name="purpose" type="xs:string"></xs:attribute>
+               <xs:attribute name="result" type="xs:string"></xs:attribute>
+               <xs:attribute name="onload_delay" type="xs:int" use="optional"
+                       default="3">
+               </xs:attribute>
+       </xs:attributeGroup>
+
+       <xs:simpleType name="priority_simple_type">
+               <xs:restriction base="xs:string">
+
+                       <xs:enumeration value="P0"></xs:enumeration>
+
+                       <xs:enumeration value="P1"></xs:enumeration>
+
+                       <xs:enumeration value="P2"></xs:enumeration>
+
+                       <xs:enumeration value="P3"></xs:enumeration>
+
+                       <xs:enumeration value="P4"></xs:enumeration>
+
+               </xs:restriction>
+       </xs:simpleType>
+
+       <xs:simpleType name="execution_type_simple_type">
+               <xs:restriction base="xs:string">
+
+                       <xs:enumeration value="auto"></xs:enumeration>
+
+                       <xs:enumeration value="manual"></xs:enumeration>
+               </xs:restriction>
+       </xs:simpleType>
+
+       <xs:simpleType name="status_type">
+               <xs:restriction base="xs:string">
+
+                       <xs:enumeration value="designed"></xs:enumeration>
+
+                       <xs:enumeration value="ready"></xs:enumeration>
+
+                       <xs:enumeration value="approved"></xs:enumeration>
+               </xs:restriction>
+       </xs:simpleType>
+
+       <xs:simpleType name="case_type_type">
+               <xs:restriction base="xs:string">
+
+                       <xs:enumeration value="functional_positive"></xs:enumeration>
+
+                       <xs:enumeration value="functional_negative"></xs:enumeration>
+
+                       <xs:enumeration value="security"></xs:enumeration>
+
+                       <xs:enumeration value="performance"></xs:enumeration>
+
+                       <xs:enumeration value="reliability"></xs:enumeration>
+
+                       <xs:enumeration value="portability"></xs:enumeration>
+
+                       <xs:enumeration value="maintainability"></xs:enumeration>
+
+                       <xs:enumeration value="compliance"></xs:enumeration>
+
+                       <xs:enumeration value="user_experience"></xs:enumeration>
+
+                       <xs:enumeration value="undefined"></xs:enumeration>
+               </xs:restriction>
+       </xs:simpleType>
+
+
+       <xs:element name="purpose" type="xs:anySimpleType"></xs:element>
+
+       <xs:element name="notes" type="xs:string"></xs:element>
+
+       <xs:element name="pre_condition" type="xs:string"></xs:element>
+
+       <xs:element name="post_condition" type="xs:string"></xs:element>
+
+       <xs:element name="description">
+
+               <xs:complexType>
+
+                       <xs:sequence minOccurs="1" maxOccurs="unbounded">
+
+                               <xs:choice minOccurs="0" maxOccurs="1">
+                                       <xs:element ref="notes"></xs:element>
+                               </xs:choice>
+
+                               <xs:choice minOccurs="0" maxOccurs="1">
+                                       <xs:element ref="pre_condition"></xs:element>
+                               </xs:choice>
+
+                               <xs:choice minOccurs="0" maxOccurs="1">
+                                       <xs:element ref="post_condition"></xs:element>
+                               </xs:choice>
+
+                               <xs:element ref="steps" minOccurs="1" maxOccurs="1"></xs:element>
+
+                               <xs:choice minOccurs="0" maxOccurs="1">
+                                       <xs:element ref="test_script_entry"></xs:element>
+                               </xs:choice>
+
+
+                       </xs:sequence>
+
+               </xs:complexType>
+       </xs:element>
+
+       <xs:element name="step">
+               <xs:complexType>
+                       <xs:sequence>
+                               <xs:element name="step_desc" type="xs:string"></xs:element>
+                               <xs:element name="expected" type="xs:string"></xs:element>
+                       </xs:sequence>
+                       <xs:attribute name="order" type="xs:int"></xs:attribute>
+               </xs:complexType>
+       </xs:element>
+
+       <xs:element name="test_script_entry">
+               <xs:complexType>
+                       <xs:simpleContent>
+                               <xs:extension base="xs:string">
+                                       <xs:attribute name="test_script_expected_result" type="xs:string"
+                                               default="0">
+                                       </xs:attribute>
+                                       <xs:attribute name="timeout" type="xs:int" default="90">
+                                       </xs:attribute>
+                               </xs:extension>
+                       </xs:simpleContent>
+               </xs:complexType>
+       </xs:element>
+
+       <xs:complexType name="result_info_type">
+               <xs:sequence minOccurs="0">
+                       <xs:element name="actual_result" type="xs:string"></xs:element>
+                       <xs:element name="start" type="xs:string"></xs:element>
+                       <xs:element name="end" type="xs:string"></xs:element>
+                       <xs:element name="stdout" type="xs:string" minOccurs="0"></xs:element>
+                       <xs:element name="stderr" type="xs:string" minOccurs="0"></xs:element>
+               </xs:sequence>
+       </xs:complexType>
+
+       <xs:complexType name="measurementType">
+               <xs:attribute name="name" type="xs:string"></xs:attribute>
+               <xs:attribute name="value" type="xs:string"></xs:attribute>
+               <xs:attribute name="unit" type="xs:string"></xs:attribute>
+               <xs:attribute name="target" type="xs:string"></xs:attribute>
+               <xs:attribute name="failure" type="xs:string"></xs:attribute>
+               <xs:attribute name="power" type="xs:string"></xs:attribute>
+       </xs:complexType>
+
+       <xs:complexType name="seriesType">
+               <xs:sequence>
+                       <xs:element name="measurement" type="simpleMeasurementType"
+                               minOccurs="1" maxOccurs="unbounded"></xs:element>
+               </xs:sequence>
+               <xs:attribute name="name" type="xs:string"></xs:attribute>
+               <xs:attribute name="group" type="xs:string"></xs:attribute>
+               <xs:attribute name="unit" type="xs:string"></xs:attribute>
+               <xs:attribute name="interval" type="xs:string"></xs:attribute>
+               <xs:attribute name="interval_unit" type="xs:string"></xs:attribute>
+               <xs:attribute name="power" type="xs:string"></xs:attribute>
+       </xs:complexType>
+
+       <xs:complexType name="simpleMeasurementType">
+               <xs:attribute name="value" type="xs:string"></xs:attribute>
+               <xs:attribute name="file" type="xs:string"></xs:attribute>
+       </xs:complexType>
+
+
+       <xs:complexType name="categories">
+               <xs:sequence>
+                       <xs:element name="category" type="xs:string" maxOccurs="unbounded"
+                               minOccurs="0"></xs:element>
+               </xs:sequence>
+       </xs:complexType>
+
+       <xs:element name="test_definition">
+               <xs:complexType>
+                       <xs:sequence minOccurs="1" maxOccurs="unbounded">
+                               <xs:element name="environment" type="BuildInfoType"
+                                       minOccurs="0">
+                               </xs:element>
+                               <xs:element name="summary" type="summaryType" minOccurs="0">
+                               </xs:element>
+                               <xs:element ref="suite" minOccurs="1" maxOccurs="unbounded">
+                               </xs:element>
+                       </xs:sequence>
+               </xs:complexType>
+               <xs:unique name="uniqueSuiteName">
+                       <xs:selector xpath=".//suite" />
+                       <xs:field xpath="@name" />
+               </xs:unique>
+       </xs:element>
+
+
+
+       <xs:complexType name="BuildInfoType">
+               <xs:sequence>
+                       <xs:element name="other" type="xs:string"></xs:element>
+               </xs:sequence>
+               <xs:attribute name="device_name" type="xs:string"></xs:attribute>
+               <xs:attribute name="device_model" type="xs:string"></xs:attribute>
+               <xs:attribute name="os_version" type="xs:string"></xs:attribute>
+               <xs:attribute name="device_id" type="xs:string"></xs:attribute>
+               <xs:attribute name="firmware_version" type="xs:string"></xs:attribute>
+               <xs:attribute name="screen_size" type="xs:string"></xs:attribute>
+               <xs:attribute name="resolution" type="xs:string"></xs:attribute>
+               <xs:attribute name="host" type="xs:string"></xs:attribute>
+               <xs:attribute name="cts_version" type="xs:string"></xs:attribute>
+               <xs:attribute name="build_id" type="xs:string"></xs:attribute>
+       </xs:complexType>
+
+
+       <xs:complexType name="summaryType">
+               <xs:sequence>
+                       <xs:element name="start_at" type="xs:string"></xs:element>
+                       <xs:element name="end_at" type="xs:string"></xs:element>
+               </xs:sequence>
+               <xs:attribute name="test_plan_name" type="xs:string"></xs:attribute>
+       </xs:complexType>
+
+
+       <xs:complexType name="specsType">
+               <xs:sequence>
+                       <xs:element name="spec" type="specType" maxOccurs="unbounded"></xs:element>
+               </xs:sequence>
+       </xs:complexType>
+
+       <xs:complexType name="specType">
+               <xs:sequence>
+                       <xs:element name="spec_assertion" type="spec_assertionType"></xs:element>
+                       <xs:element name="spec_url" type="xs:string"></xs:element>
+                       <xs:element name="spec_statement" type="xs:string"></xs:element>
+               </xs:sequence>
+       </xs:complexType>
+
+       <xs:complexType name="spec_assertionType">
+               <xs:attribute name="category" type="xs:string" use="required"></xs:attribute>
+               <xs:attribute name="section" type="xs:string" use="required"></xs:attribute>
+               <xs:attribute name="specification" type="xs:string" use="required">
+               </xs:attribute>
+               <xs:attribute name="interface" type="xs:string" use="required">
+               </xs:attribute>
+               <xs:attribute name="element_name" type="xs:string" use="optional">
+               </xs:attribute>
+               <xs:attribute name="usage" type="xs:boolean" default="false"></xs:attribute>
+               <xs:attribute name="element_type" type="xs:string"></xs:attribute>
+       </xs:complexType>
+
+       <xs:complexType name="CapabilitiesType">
+               <xs:sequence>
+                       <xs:element name="capability" type="CapabilityType"
+                               minOccurs="1" maxOccurs="unbounded"></xs:element>
+               </xs:sequence>
+       </xs:complexType>
+
+       <xs:complexType name="CapabilityType">
+               <xs:sequence minOccurs="0">
+                       <xs:element name="value" type="xs:string"></xs:element>
+               </xs:sequence>
+               <xs:attribute name="name" type="xs:string" use="required"></xs:attribute>
+       </xs:complexType>
+</xs:schema>
+
diff --git a/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite1.0/xsd/testcase.xsl b/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite1.0/xsd/testcase.xsl
new file mode 100755 (executable)
index 0000000..c25a6c6
--- /dev/null
@@ -0,0 +1,216 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<xsl:stylesheet version="1.0"
+       xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
+       <xsl:output method="html" version="1.0" encoding="UTF-8"
+               indent="yes" />
+       <xsl:template match="/">
+               <html>
+                       <STYLE type="text/css">
+                               @import "tests.css";
+                       </STYLE>
+                       <head>
+                               <script type="text/javascript" src="jquery.min.js" />
+                       </head>
+                       <body>
+                               <div id="testcasepage">
+                                       <div id="title">
+                                               <table>
+                                                       <tr>
+                                                               <td>
+                                                                       <h1>Test Cases</h1>
+                                                               </td>
+                                                       </tr>
+                                               </table>
+                                       </div>
+                                       <div id="suites">
+                                               <a name="contents"></a>
+                                               <table>
+                                                       <tr>
+                                                               <th>Test Suite</th>
+                                                               <th>Total</th>
+                                                               <th>Auto</th>
+                                                               <th>Manual</th>
+                                                       </tr>
+                                                       <tr>
+                                                               <td>
+                                                                       Total
+                                                               </td>
+                                                               <td>
+                                                                       <xsl:value-of select="count(test_definition/suite/set//testcase)" />
+                                                               </td>
+                                                               <td>
+                                                                       <xsl:value-of
+                                                                               select="count(test_definition/suite/set//testcase[@execution_type = 'auto'])" />
+                                                               </td>
+                                                               <td>
+                                                                       <xsl:value-of
+                                                                               select="count(test_definition/suite/set//testcase[@execution_type != 'auto'])" />
+                                                               </td>
+                                                       </tr>
+                                                       <xsl:for-each select="test_definition/suite">
+                                                               <tr>
+                                                                       <td>
+                                                                               <a>
+                                                                                       <xsl:attribute name="href">
+                                                                                      #<xsl:value-of
+                                                                                               select="@name" />
+                                                                                   </xsl:attribute>
+                                                                                       <xsl:value-of select="@name" />
+                                                                               </a>
+                                                                       </td>
+                                                                       <td>
+                                                                               <xsl:value-of select="count(set//testcase)" />
+                                                                       </td>
+                                                                       <td>
+                                                                               <xsl:value-of select="count(set/testcase[@execution_type = 'auto'])" />
+                                                                       </td>
+                                                                       <td>
+                                                                               <xsl:value-of select="count(set/testcase[@execution_type != 'auto'])" />
+                                                                       </td>
+                                                               </tr>
+                                                       </xsl:for-each>
+                                               </table>
+                                       </div>
+                                       <div id="title">
+                                               <table>
+                                                       <tr>
+                                                               <td class="title">
+                                                                       <h1>Detailed Test Cases</h1>
+                                                               </td>
+                                                       </tr>
+                                               </table>
+                                       </div>
+                                       <div id="cases">
+                                               <xsl:for-each select="test_definition/suite">
+                                                       <xsl:sort select="@name" />
+                                                       <div id="btc">
+                                                               <a href="#contents">Back to Contents</a>
+                                                       </div>
+                                                       <div id="suite_title">
+                                                               Test Suite:
+                                                               <xsl:value-of select="@name" />
+                                                               <a>
+                                                                       <xsl:attribute name="name">
+                                                                     <xsl:value-of
+                                                                               select="@name" />
+                                                                  </xsl:attribute>
+                                                               </a>
+                                                       </div>
+                                                       <table>
+                                                               <tr>
+                                                                       <th>Case_ID</th>
+                                                                       <th>Purpose</th>
+                                                                       <th>Type</th>
+                                                                       <th>Component</th>
+                                                                       <th>Execution Type</th>
+                                                                       <th>Description</th>
+                                                                       <th>Specification</th>
+                                                               </tr>
+                                                               <xsl:for-each select=".//set">
+                                                                       <xsl:sort select="@name" />
+                                                                       <tr>
+                                                                               <td colspan="7">
+                                                                                       Test Set:
+                                                                                       <xsl:value-of select="@name" />
+                                                                               </td>
+                                                                       </tr>
+                                                                       <xsl:for-each select=".//testcase">
+                                                                               <!-- xsl:sort select="@id" /> -->
+                                                                               <tr>
+                                                                                       <td>
+                                                                                               <xsl:value-of select="@id" />
+                                                                                       </td>
+                                                                                       <td>
+                                                                                               <xsl:value-of select="@purpose" />
+                                                                                       </td>
+                                                                                       <td>
+                                                                                               <xsl:value-of select="@type" />
+                                                                                       </td>
+                                                                                       <td>
+                                                                                               <xsl:value-of select="@component" />
+                                                                                       </td>
+                                                                                       <td>
+                                                                                               <xsl:value-of select="@execution_type" />
+                                                                                       </td>
+                                                                                       <td>
+                                                                                               <p>
+                                                                                                       Pre_condition:
+                                                                                                       <xsl:value-of select=".//description/pre_condition" />
+                                                                                               </p>
+                                                                                               <p>
+                                                                                                       Post_condition:
+                                                                                                       <xsl:value-of select=".//description/post_condition" />
+                                                                                               </p>
+                                                                                               <p>
+                                                                                                       Test Script Entry:
+                                                                                                       <xsl:value-of select=".//description/test_script_entry" />
+                                                                                               </p>
+                                                                                               <p>
+                                                                                                       Steps:
+                                                                                                       <p />
+                                                                                                       <xsl:for-each select=".//description/steps/step">
+                                                                                                               <xsl:sort select="@order" />
+                                                                                                               Step
+                                                                                                               <xsl:value-of select="@order" />
+                                                                                                               :
+                                                                                                               <xsl:value-of select="./step_desc" />
+                                                                                                               ;
+                                                                                                               <p />
+                                                                                                               Expected Result:
+                                                                                                               <xsl:value-of select="./expected" />
+                                                                                                               <p />
+                                                                                                       </xsl:for-each>
+                                                                                               </p>
+                                                                                       </td>
+                                                                                       <td>
+                                                                                               <xsl:for-each select=".//specs/spec">
+                                                                                                       <b>[Spec_Assertion]:</b>
+                                                                                                       <br />
+                                                                                                       [Category]:
+                                                                                                       <xsl:value-of select="./spec_assertion/@category" />
+                                                                                                       <br />
+                                                                                                       [Section]:
+                                                                                                       <xsl:value-of select="./spec_assertion/@section" />
+                                                                                                       <br />
+                                                                                                       [Specification]:
+                                                                                                       <xsl:value-of select="./spec_assertion/@specification" />
+                                                                                                       <br />
+                                                                                                       [Interface]:
+                                                                                                       <xsl:value-of select="./spec_assertion/@interface" />
+                                                                                                       <br />
+                                                                                                       <xsl:choose>
+                                                                                                               <xsl:when test="./spec_assertion/@element_name">
+                                                                                                                       [<xsl:value-of select="./spec_assertion/@element_type" />]:
+                                                                                                                       <xsl:value-of select="./spec_assertion/@element_name" />
+                                                                                                                       <br />
+                                                                                                               </xsl:when>
+                                                                                                       </xsl:choose>
+
+                                                                                                       [URL]:
+                                                                                                       <xsl:value-of select="./spec_url" />
+                                                                                                       <br />
+                                                                                                       [Statement]:
+                                                                                                       <xsl:value-of select="./spec_statement" />
+                                                                                                       <br />
+                                                                                               </xsl:for-each>
+                                                                                       </td>
+                                                                               </tr>
+                                                                       </xsl:for-each>
+                                                               </xsl:for-each>
+                                                       </table>
+                                               </xsl:for-each>
+                                       </div>
+                               </div>
+                               <div id="goTopBtn">
+                                       <img border="0" src="./back_top.png" />
+                               </div>
+                               <script type="text/javascript" src="application.js" />
+                               <script language="javascript" type="text/javascript">
+                                       $(document).ready(function(){
+                                       goTopEx();
+                                       });
+                               </script>
+                       </body>
+               </html>
+       </xsl:template>
+</xsl:stylesheet>
\ No newline at end of file
diff --git a/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite1.0/xsd/testresult.xsl b/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite1.0/xsd/testresult.xsl
new file mode 100755 (executable)
index 0000000..c20a914
--- /dev/null
@@ -0,0 +1,522 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<xsl:stylesheet version="1.0"
+       xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
+       <xsl:output method="html" version="1.0" encoding="UTF-8"
+               indent="yes" />
+       <xsl:template match="/">
+               <html>
+                       <STYLE type="text/css">
+                               @import "tests.css";
+                       </STYLE>
+                       <head>
+                               <script type="text/javascript" src="jquery.min.js" />
+                       </head>
+                       <body>
+                               <div id="testcasepage">
+                                       <div id="title">
+                                               <table>
+                                                       <tr>
+                                                               <td>
+                                                                       <h1>Test Report</h1>
+                                                               </td>
+                                                       </tr>
+                                               </table>
+                                       </div>
+                                       <div id="device">
+                                               <table>
+                                                       <tr>
+                                                               <th colspan="2">Device Information</th>
+                                                       </tr>
+                                                       <tr>
+                                                               <td>Device Name</td>
+                                                               <td>
+                                                                       <xsl:choose>
+                                                                               <xsl:when test="test_definition/environment/@device_name">
+                                                                                       <xsl:if test="test_definition/environment/@device_name = ''">
+                                                                                               N/A
+                                                                                       </xsl:if>
+                                                                                       <xsl:value-of select="test_definition/environment/@device_name" />
+                                                                               </xsl:when>
+                                                                               <xsl:otherwise>
+                                                                                       N/A
+                                                                               </xsl:otherwise>
+                                                                       </xsl:choose>
+                                                               </td>
+                                                       </tr>
+                                                       <tr>
+                                                               <td>Device Model</td>
+                                                               <td>
+                                                                       <xsl:choose>
+                                                                               <xsl:when test="test_definition/environment/@device_model">
+                                                                                       <xsl:if test="test_definition/environment/@device_model = ''">
+                                                                                               N/A
+                                                                                       </xsl:if>
+                                                                                       <xsl:value-of select="test_definition/environment/@device_model" />
+                                                                               </xsl:when>
+                                                                               <xsl:otherwise>
+                                                                                       N/A
+                                                                               </xsl:otherwise>
+                                                                       </xsl:choose>
+                                                               </td>
+                                                       </tr>
+                                                       <tr>
+                                                               <td>OS Version</td>
+                                                               <td>
+                                                                       <xsl:choose>
+                                                                               <xsl:when test="test_definition/environment/@os_version">
+                                                                                       <xsl:if test="test_definition/environment/@os_version = ''">
+                                                                                               N/A
+                                                                                       </xsl:if>
+                                                                                       <xsl:value-of select="test_definition/environment/@os_version" />
+                                                                               </xsl:when>
+                                                                               <xsl:otherwise>
+                                                                                       N/A
+                                                                               </xsl:otherwise>
+                                                                       </xsl:choose>
+                                                               </td>
+                                                       </tr>
+                                                       <tr>
+                                                               <td>Device ID</td>
+                                                               <td>
+                                                                       <xsl:choose>
+                                                                               <xsl:when test="test_definition/environment/@device_id">
+                                                                                       <xsl:if test="test_definition/environment/@device_id = ''">
+                                                                                               N/A
+                                                                                       </xsl:if>
+                                                                                       <xsl:value-of select="test_definition/environment/@device_id" />
+                                                                               </xsl:when>
+                                                                               <xsl:otherwise>
+                                                                                       N/A
+                                                                               </xsl:otherwise>
+                                                                       </xsl:choose>
+                                                               </td>
+                                                       </tr>
+                                                       <tr>
+                                                               <td>Firmware Version</td>
+                                                               <td>
+                                                                       <xsl:choose>
+                                                                               <xsl:when test="test_definition/environment/@firmware_version">
+                                                                                       <xsl:if test="test_definition/environment/@firmware_version = ''">
+                                                                                               N/A
+                                                                                       </xsl:if>
+                                                                                       <xsl:value-of select="test_definition/environment/@firmware_version" />
+                                                                               </xsl:when>
+                                                                               <xsl:otherwise>
+                                                                                       N/A
+                                                                               </xsl:otherwise>
+                                                                       </xsl:choose>
+                                                               </td>
+                                                       </tr>
+                                                       <tr>
+                                                               <td>Build ID</td>
+                                                               <td>
+                                                                       <xsl:choose>
+                                                                               <xsl:when test="test_definition/environment/@build_id">
+                                                                                       <xsl:if test="test_definition/environment/@build_id = ''">
+                                                                                               N/A
+                                                                                       </xsl:if>
+                                                                                       <xsl:value-of select="test_definition/environment/@build_id" />
+                                                                               </xsl:when>
+                                                                               <xsl:otherwise>
+                                                                                       N/A
+                                                                               </xsl:otherwise>
+                                                                       </xsl:choose>
+                                                               </td>
+                                                       </tr>
+                                                       <tr>
+                                                               <td>Screen Size</td>
+                                                               <td>
+                                                                       <xsl:choose>
+                                                                               <xsl:when test="test_definition/environment/@screen_size">
+                                                                                       <xsl:if test="test_definition/environment/@screen_size = ''">
+                                                                                               N/A
+                                                                                       </xsl:if>
+                                                                                       <xsl:value-of select="test_definition/environment/@screen_size" />
+                                                                               </xsl:when>
+                                                                               <xsl:otherwise>
+                                                                                       N/A
+                                                                               </xsl:otherwise>
+                                                                       </xsl:choose>
+                                                               </td>
+                                                       </tr>
+                                                       <tr>
+                                                               <td>Resolution</td>
+                                                               <td>
+                                                                       <xsl:choose>
+                                                                               <xsl:when test="test_definition/environment/@resolution">
+                                                                                       <xsl:if test="test_definition/environment/@resolution = ''">
+                                                                                               N/A
+                                                                                       </xsl:if>
+                                                                                       <xsl:value-of select="test_definition/environment/@resolution" />
+                                                                               </xsl:when>
+                                                                               <xsl:otherwise>
+                                                                                       N/A
+                                                                               </xsl:otherwise>
+                                                                       </xsl:choose>
+                                                               </td>
+                                                       </tr>
+                                                       <tr>
+                                                               <td>Host Info</td>
+                                                               <td>
+                                                                       <xsl:choose>
+                                                                               <xsl:when test="test_definition/environment/@host">
+                                                                                       <xsl:if test="test_definition/environment/@host = ''">
+                                                                                               N/A
+                                                                                       </xsl:if>
+                                                                                       <xsl:value-of select="test_definition/environment/@host" />
+                                                                               </xsl:when>
+                                                                               <xsl:otherwise>
+                                                                                       N/A
+                                                                               </xsl:otherwise>
+                                                                       </xsl:choose>
+                                                               </td>
+                                                       </tr>
+                                                       <tr>
+                                                               <td>CTS Version</td>
+                                                               <td>
+                                                                       <xsl:choose>
+                                                                               <xsl:when test="test_definition/environment/@cts_version">
+                                                                                       <xsl:if test="test_definition/environment/@cts_version = ''">
+                                                                                               N/A
+                                                                                       </xsl:if>
+                                                                                       <xsl:value-of select="test_definition/environment/@cts_version" />
+                                                                               </xsl:when>
+                                                                               <xsl:otherwise>
+                                                                                       N/A
+                                                                               </xsl:otherwise>
+                                                                       </xsl:choose>
+                                                               </td>
+                                                       </tr>
+                                                       <tr>
+                                                               <td>Others</td>
+                                                               <td>
+                                                                       <xsl:if test="test_definition/environment/other = ''">
+                                                                               N/A
+                                                                       </xsl:if>
+                                                                       <xsl:call-template name="br-replace">
+                                                                               <xsl:with-param name="word"
+                                                                                       select="test_definition/environment/other" />
+                                                                       </xsl:call-template>
+                                                               </td>
+                                                       </tr>
+                                               </table>
+                                       </div>
+
+                                       <div id="summary">
+                                               <table>
+                                                       <tr>
+                                                               <th colspan="2">Test Summary</th>
+                                                       </tr>
+                                                       <tr>
+                                                               <td>Test Plan Name</td>
+                                                               <td>
+                                                                       <xsl:value-of select="test_definition/summary/@test_plan_name" />
+                                                               </td>
+                                                       </tr>
+                                                       <tr>
+                                                               <td>Tests Total</td>
+                                                               <td>
+                                                                       <xsl:value-of select="count(test_definition//suite/set/testcase)" />
+                                                               </td>
+                                                       </tr>
+                                                       <tr>
+                                                               <td>Test Passed</td>
+                                                               <td>
+                                                                       <xsl:value-of
+                                                                               select="count(test_definition//suite/set/testcase[@result = 'PASS'])" />
+                                                               </td>
+                                                       </tr>
+                                                       <tr>
+                                                               <td>Test Failed</td>
+                                                               <td>
+                                                                       <xsl:value-of
+                                                                               select="count(test_definition//suite/set/testcase[@result = 'FAIL'])" />
+                                                               </td>
+                                                       </tr>
+                                                       <tr>
+                                                               <td>Test Block</td>
+                                                               <td>
+                                                                       <xsl:value-of
+                                                                               select="count(test_definition//suite/set/testcase[@result = 'BLOCK'])" />
+                                                               </td>
+                                                       </tr>
+                                                       <tr>
+                                                               <td>Test Not Run</td>
+                                                               <td>
+                                                                       <xsl:value-of
+                                                                               select="count(test_definition//suite/set/testcase) - count(test_definition//suite/set/testcase[@result = 'PASS']) - count(test_definition//suite/set/testcase[@result = 'FAIL']) - count(test_definition//suite/set/testcase[@result = 'BLOCK'])" />
+                                                               </td>
+                                                       </tr>
+                                                       <tr>
+                                                               <td>Start time</td>
+                                                               <td>
+                                                                       <xsl:value-of select="test_definition/summary/start_at" />
+                                                               </td>
+                                                       </tr>
+                                                       <tr>
+                                                               <td>End time</td>
+                                                               <td>
+                                                                       <xsl:value-of select="test_definition/summary/end_at" />
+                                                               </td>
+                                                       </tr>
+                                               </table>
+                                       </div>
+
+
+                                       <div id="suite_summary">
+                                               <div id="title">
+                                                       <a name="contents"></a>
+                                                       <table>
+                                                               <tr>
+                                                                       <td class="title">
+                                                                               <h1>Test Summary by Suite</h1>
+                                                                       </td>
+                                                               </tr>
+                                                       </table>
+                                               </div>
+                                               <table>
+                                                       <tr>
+                                                               <th>Suite</th>
+                                                               <th>Passed</th>
+                                                               <th>Failed</th>
+                                                               <th>Blocked</th>
+                                                               <th>Not Run</th>
+                                                               <th>Total</th>
+                                                       </tr>
+                                                       <xsl:for-each select="test_definition/suite">
+                                                               <xsl:sort select="@name" />
+                                                               <tr>
+                                                                       <td>
+                                                                               <a>
+                                                                                       <xsl:attribute name="href">
+                                                                                      #<xsl:value-of
+                                                                                               select="@name" />
+                                                                                   </xsl:attribute>
+                                                                                       <xsl:value-of select="@name" />
+                                                                               </a>
+                                                                       </td>
+                                                                       <td>
+                                                                               <xsl:value-of select="count(set//testcase[@result = 'PASS'])" />
+                                                                       </td>
+                                                                       <td>
+                                                                               <xsl:value-of select="count(set//testcase[@result = 'FAIL'])" />
+                                                                       </td>
+                                                                       <td>
+                                                                               <xsl:value-of select="count(set//testcase[@result = 'BLOCK'])" />
+                                                                       </td>
+                                                                       <td>
+                                                                               <xsl:value-of
+                                                                                       select="count(set//testcase) - count(set//testcase[@result = 'PASS']) - count(set//testcase[@result = 'FAIL']) - count(set//testcase[@result = 'BLOCK'])" />
+                                                                       </td>
+                                                                       <td>
+                                                                               <xsl:value-of select="count(set//testcase)" />
+                                                                       </td>
+                                                               </tr>
+                                                       </xsl:for-each>
+                                               </table>
+                                       </div>
+
+                                       <div id="fail_cases">
+                                               <div id="title">
+                                                       <table>
+                                                               <tr>
+                                                                       <td class="title">
+                                                                               <h1 align="center">
+                                                                                       Test Failures (
+                                                                                       <xsl:value-of
+                                                                                               select="count(test_definition/suite/set//testcase[@result = 'FAIL'])" />
+                                                                                       )
+                                                                               </h1>
+                                                                       </td>
+                                                               </tr>
+                                                       </table>
+                                               </div>
+                                               <xsl:for-each select="test_definition/suite">
+                                                       <xsl:sort select="@name" />
+                                                       <div id="btc">
+                                                               <a href="#contents">Back to Contents</a>
+                                                       </div>
+                                                       <div id="suite_title">
+                                                               Test Suite:
+                                                               <xsl:value-of select="@name" />
+                                                               <a>
+                                                                       <xsl:attribute name="name">
+                                          <xsl:value-of
+                                                                               select="@name" />
+                                    </xsl:attribute>
+                                                               </a>
+                                                       </div>
+                                                       <table>
+                                                               <tr>
+                                                                       <th>Case_ID</th>
+                                                                       <th>Purpose</th>
+                                                                       <th>Result</th>
+                                                                       <th>Stdout</th>
+                                                               </tr>
+                                                               <xsl:for-each select=".//set">
+                                                                       <xsl:sort select="@name" />
+                                                                       <tr>
+                                                                               <td colspan="4">
+                                                                                       Test Set:
+                                                                                       <xsl:value-of select="@name" />
+                                                                               </td>
+                                                                       </tr>
+                                                                       <xsl:for-each select=".//testcase">
+                                                                               <xsl:sort select="@id" />
+                                                                               <xsl:choose>
+                                                                                       <xsl:when test="@result">
+                                                                                               <xsl:if test="@result = 'FAIL'">
+
+                                                                                                       <tr>
+                                                                                                               <td>
+                                                                                                                       <xsl:value-of select="@id" />
+                                                                                                               </td>
+                                                                                                               <td>
+                                                                                                                       <xsl:value-of select="@purpose" />
+                                                                                                               </td>
+
+
+                                                                                                               <td class="red_rate">
+                                                                                                                       <xsl:value-of select="@result" />
+                                                                                                               </td>
+
+                                                                                                               <td>
+                                                                                                                       <xsl:value-of select=".//result_info/stdout" />
+                                                                                                                       <xsl:if test=".//result_info/stdout = ''">
+                                                                                                                               N/A
+                                                                                                                       </xsl:if>
+                                                                                                               </td>
+                                                                                                       </tr>
+                                                                                               </xsl:if>
+                                                                                       </xsl:when>
+                                                                               </xsl:choose>
+                                                                       </xsl:for-each>
+                                                               </xsl:for-each>
+                                                       </table>
+                                               </xsl:for-each>
+                                       </div>
+
+                                       <div id="cases">
+                                               <div id="title">
+                                                       <table>
+                                                               <tr>
+                                                                       <td class="title">
+                                                                               <h1 align="center">Detailed Test Results</h1>
+                                                                       </td>
+                                                               </tr>
+                                                       </table>
+                                               </div>
+                                               <xsl:for-each select="test_definition/suite">
+                                                       <xsl:sort select="@name" />
+                                                       <div id="btc">
+                                                               <a href="#contents">Back to Contents</a>
+                                                       </div>
+                                                       <div id="suite_title">
+                                                               Test Suite:
+                                                               <xsl:value-of select="@name" />
+                                                               <a>
+                                                                       <xsl:attribute name="name">
+                                                                     <xsl:value-of
+                                                                               select="@name" />
+                                                                  </xsl:attribute>
+                                                               </a>
+                                                       </div>
+                                                       <table>
+                                                               <tr>
+                                                                       <th>Case_ID</th>
+                                                                       <th>Purpose</th>
+                                                                       <th>Result</th>
+                                                                       <th>Stdout</th>
+                                                               </tr>
+                                                               <xsl:for-each select=".//set">
+                                                                       <xsl:sort select="@name" />
+                                                                       <tr>
+                                                                               <td colspan="4">
+                                                                                       Test Set:
+                                                                                       <xsl:value-of select="@name" />
+                                                                               </td>
+                                                                       </tr>
+                                                                       <xsl:for-each select=".//testcase">
+                                                                               <xsl:sort select="@id" />
+                                                                               <tr>
+                                                                                       <td>
+                                                                                               <xsl:value-of select="@id" />
+                                                                                       </td>
+                                                                                       <td>
+                                                                                               <xsl:value-of select="@purpose" />
+                                                                                       </td>
+
+                                                                                       <xsl:choose>
+                                                                                               <xsl:when test="@result">
+                                                                                                       <xsl:if test="@result = 'FAIL'">
+                                                                                                               <td class="red_rate">
+                                                                                                                       <xsl:value-of select="@result" />
+                                                                                                               </td>
+                                                                                                       </xsl:if>
+                                                                                                       <xsl:if test="@result = 'PASS'">
+                                                                                                               <td class="green_rate">
+                                                                                                                       <xsl:value-of select="@result" />
+                                                                                                               </td>
+                                                                                                       </xsl:if>
+                                                                                                       <xsl:if test="@result = 'BLOCK' ">
+                                                                                                               <td>
+                                                                                                                       BLOCK
+                                                                                                               </td>
+                                                                                                       </xsl:if>
+                                                                                                       <xsl:if test="@result != 'BLOCK' and @result != 'FAIL' and @result != 'PASS' ">
+                                                                                                               <td>
+                                                                                                                       Not Run
+                                                                                                               </td>
+                                                                                                       </xsl:if>
+                                                                                               </xsl:when>
+                                                                                               <xsl:otherwise>
+                                                                                                       <td>
+
+                                                                                                       </td>
+                                                                                               </xsl:otherwise>
+                                                                                       </xsl:choose>
+                                                                                       <td>
+                                                                                               <xsl:value-of select=".//result_info/stdout" />
+                                                                                               <xsl:if test=".//result_info/stdout = ''">
+                                                                                                       N/A
+                                                                                               </xsl:if>
+                                                                                       </td>
+                                                                               </tr>
+                                                                       </xsl:for-each>
+                                                               </xsl:for-each>
+                                                       </table>
+                                               </xsl:for-each>
+                                       </div>
+                               </div>
+                               <div id="goTopBtn">
+                                       <img border="0" src="./back_top.png" />
+                               </div>
+                               <script type="text/javascript" src="application.js" />
+                               <script language="javascript" type="text/javascript">
+                                       $(document).ready(function(){
+                                       goTopEx();
+                                       });
+                               </script>
+                       </body>
+               </html>
+       </xsl:template>
+       <xsl:template name="br-replace">
+               <xsl:param name="word" />
+               <xsl:variable name="cr">
+                       <xsl:text>
+</xsl:text>
+               </xsl:variable>
+               <xsl:choose>
+                       <xsl:when test="contains($word,$cr)">
+                               <xsl:value-of select="substring-before($word,$cr)" />
+                               <br />
+                               <xsl:call-template name="br-replace">
+                                       <xsl:with-param name="word" select="substring-after($word,$cr)" />
+                               </xsl:call-template>
+                       </xsl:when>
+                       <xsl:otherwise>
+                               <xsl:value-of select="$word" />
+                       </xsl:otherwise>
+               </xsl:choose>
+       </xsl:template>
+</xsl:stylesheet>
diff --git a/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite1.0/xsd/tests.css b/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite1.0/xsd/tests.css
new file mode 100755 (executable)
index 0000000..cbad68a
--- /dev/null
@@ -0,0 +1,123 @@
+@charset "UTF-8";\r
+/* CSS Document */\r
+#testcasepage div,#testcasepage h1,#testcasepage p,#testcasepage table,#testcasepage tr,#testcasepage th,#testcasepage td\r
+       {\r
+       margin: 0;\r
+       padding: 0;\r
+       border: 0;\r
+       font-weight: inherit;\r
+       font-style: inherit;\r
+       font-size: 0.96em;\r
+       font-family: arial;\r
+       vertical-align: baseline;\r
+}\r
+\r
+#testcasepage p {\r
+       text-align: left;\r
+}\r
+\r
+#suite_title {\r
+       text-align: left;\r
+}\r
+\r
+#btc {\r
+       text-align: right;\r
+}\r
+\r
+#testcasepage table {\r
+       border-collapse: separate;\r
+       border-spacing: 0;\r
+       margin-bottom: 1.4em;\r
+       vertical-align: middle;\r
+}\r
+\r
+#testcasepage th,#testcasepage td {\r
+       text-align: left;\r
+       font-weight: normal;\r
+       padding: 4px 10px 4px 5px;\r
+       vertical-align: middle;\r
+}\r
+\r
+#cases table {\r
+       width: 101%;\r
+}\r
+\r
+#fail_cases table {\r
+       width: 101%;\r
+}\r
+\r
+#title table {\r
+       width: 101%;\r
+}\r
+\r
+#device table {\r
+       width: 50%;\r
+}\r
+\r
+#summary table {\r
+       width: 50%;\r
+}\r
+\r
+#testcasepage th {\r
+       border-bottom: 1px solid #000;\r
+       background-color: #AAAAAA;\r
+       border-left: 1px solid #000;\r
+       border-top: 1px solid #000;\r
+       color: #000;\r
+       font-weight: bold;\r
+       vertical-align: bottom;\r
+}\r
+\r
+#testcasepage th:last-child,#testcasepage td:last-child {\r
+       border-right: 1px solid #000;\r
+}\r
+\r
+#testcasepage td {\r
+       border-left: 1px solid;\r
+       font-weight: normal;\r
+       border-bottom: 1px solid;\r
+}\r
+\r
+#testcasepage td.yellow_rate {\r
+       background-color: #ffcc00;\r
+}\r
+\r
+#testcasepage td.green_rate {\r
+       background-color: #33cc33;\r
+}\r
+\r
+#testcasepage td.dgreen_rate {\r
+       background-color: #339933;\r
+}\r
+\r
+#testcasepage td.red_rate {\r
+       background-color: #FF3333;\r
+}\r
+\r
+#title table,#title tr,#title td {\r
+       border-left: none;\r
+       border-bottom: none;\r
+       text-align: center;\r
+}\r
+\r
+#title td:last-child {\r
+       border-right: none;\r
+}\r
+\r
+#testcasepage h1 {\r
+       font-size: 2em;\r
+       font-family: Arial, sans-serif;\r
+       font-weight: bold;\r
+       line-height: 1;\r
+       color: #000;\r
+       margin-bottom: 0.75em;\r
+       padding-top: 0.25em;\r
+       font-weight: bold;\r
+}\r
+\r
+#goTopBtn {\r
+       right: 0px;\r
+       bottom: 0px;\r
+       position: fixed; +position: absolute;\r
+       top: expression(parseInt(document.body.scrollTop)+document.body.clientHeight-40);\r
+}
\ No newline at end of file
diff --git a/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite1.0/xsd/tests.xml b/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite1.0/xsd/tests.xml
new file mode 100755 (executable)
index 0000000..bf9b312
--- /dev/null
@@ -0,0 +1,1336 @@
+<?xml version="1.0" encoding="UTF-8"?>\r
+<?xml-stylesheet type="text/xsl"  href="testcase.xsl"?>\r
+<test_definition xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"\r
+       xsi:noNamespaceSchemaLocation="test_definition.xsd">\r
+       <suite name="webapi-w3c-widget-tests">\r
+               <set name="WidgetPackaging">\r
+                       <testcase\r
+                               purpose="Tests the user agent's ability to process files with no file extension. "\r
+                               type="compliance" status="ready" component="WebAPI/W3C_Widget/WidgetPackaging"\r
+                               execution_type="auto" priority="P3" id="dm">\r
+                               <description>\r
+                                       <pre_condition />\r
+                                       <post_condition />\r
+                                       <steps>\r
+                                               <step order="1">\r
+                                                       <step_desc>Install /opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/dm</step_desc>\r
+                                                       <expected> \r
+       To pass, the user agent start file of the widget must be index.htm</expected>\r
+                                               </step>\r
+                                       </steps>\r
+                                       <test_script_entry>/opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/dm</test_script_entry>\r
+                               </description>\r
+                               <specs>\r
+                                       <spec>\r
+                                               <spec_assertion category="Tizen Device API Specifications"\r
+                                                       section="Widget" specification="Widget Packaging and XML Configuration"\r
+                                                       interface="Widget" element_name="constructor" element_type="method" />\r
+                                               <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>\r
+                                               <spec_statement>spec_statement</spec_statement>\r
+                                       </spec>\r
+                                       <spec>\r
+                                               <spec_assertion category="Tizen Device API Specifications"\r
+                                                       section="Tizen" specification="Tizen Packaging and XML Configuration"\r
+                                                       interface="Tizen" usage="true" />\r
+                                               <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>\r
+                                               <spec_statement>spec_statement</spec_statement>\r
+                                       </spec>\r
+                               </specs>\r
+                       </testcase>\r
+                       <testcase\r
+                               purpose="Tests the user agent's ability to process files with a file extension other than .wgt."\r
+                               type="compliance" status="ready" component="WebAPI/W3C_Widget/WidgetPackaging"\r
+                               execution_type="manual" priority="P3" id="dn">\r
+                               <description>\r
+                                       <pre_condition />\r
+                                       <post_condition />\r
+                                       <steps>\r
+                                               <step order="1">\r
+                                                       <step_desc>Install /opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/dn.test</step_desc>\r
+                                                       <expected> \r
+       To pass, the user agent start file of the widget must be index.htm</expected>\r
+                                               </step>\r
+                                       </steps>\r
+                                       <test_script_entry>/opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/dn.test</test_script_entry>\r
+                               </description>\r
+                               <specs>\r
+                                       <spec>\r
+                                               <spec_assertion category="Tizen Device API Specifications"\r
+                                                       section="Widget" specification="Widget Packaging and XML Configuration"\r
+                                                       interface="Widget" usage="true" />\r
+                                               <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>\r
+                                               <spec_statement>spec_statement</spec_statement>\r
+                                       </spec>\r
+                               </specs>\r
+                       </testcase>\r
+                       <testcase purpose="Test the ability of the UA to verify a zip archive."\r
+                               type="compliance" status="ready" component="WebAPI/W3C_Widget/WidgetPackaging"\r
+                               execution_type="manual" priority="P3" id="do">\r
+                               <description>\r
+                                       <pre_condition />\r
+                                       <post_condition />\r
+                                       <steps>\r
+                                               <step order="1">\r
+                                                       <step_desc>Install /opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/split.wgt.001</step_desc>\r
+                                                       <expected> \r
+       To pass, the user agent must treat this as an invalid widget (archive is spanned).</expected>\r
+                                               </step>\r
+                                       </steps>\r
+                                       <test_script_entry>/opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/split.wgt.001</test_script_entry>\r
+                               </description>\r
+                               <specs>\r
+                                       <spec>\r
+                                               <spec_assertion category="Tizen Device API Specifications"\r
+                                                       section="Widget" specification="Widget Packaging and XML Configuration"\r
+                                                       interface="Widget" element_name="constructor" element_type="method" />\r
+                                               <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>\r
+                                               <spec_statement>spec_statement</spec_statement>\r
+                                       </spec>\r
+                               </specs>\r
+                       </testcase>\r
+                       <testcase\r
+                               purpose="Test the user agent's ability to get a widget over HTTP and respect the application/widget mimetype. The server from which this test is served from has been set up to label the 'test' resource as an 'application/widget'."\r
+                               type="compliance" status="ready" component="WebAPI/W3C_Widget/WidgetPackaging"\r
+                               execution_type="manual" priority="P3" id="z3">\r
+                               <description>\r
+                                       <pre_condition />\r
+                                       <post_condition />\r
+                                       <steps>\r
+                                               <step order="1">\r
+                                                       <step_desc>Install /opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/z3</step_desc>\r
+                                                       <expected> \r
+       To pass, a user agent must correctly process this resource as a widget because of the 'application/widget' mimetype (i.e., not only because of sniffing).</expected>\r
+                                               </step>\r
+                                       </steps>\r
+                                       <test_script_entry>/opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/z3</test_script_entry>\r
+                               </description>\r
+                               <specs>\r
+                                       <spec>\r
+                                               <spec_assertion category="Tizen Device API Specifications"\r
+                                                       section="Widget" specification="Widget Packaging and XML Configuration"\r
+                                                       interface="Widget" element_name="constructor" element_type="method" />\r
+                                               <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>\r
+                                               <spec_statement>spec_statement</spec_statement>\r
+                                       </spec>\r
+                               </specs>\r
+                       </testcase>\r
+                       <testcase\r
+                               purpose="Test the user agent's ability to get a widget over HTTP and respect the 'application/widget' mimetype. The server from which this test is served from has been set up to label the 'test.html' resource as an 'application/widget'."\r
+                               type="compliance" status="ready" component="WebAPI/W3C_Widget/WidgetPackaging"\r
+                               execution_type="manual" priority="P3" id="z4">\r
+                               <description>\r
+                                       <pre_condition />\r
+                                       <post_condition />\r
+                                       <steps>\r
+                                               <step order="1">\r
+                                                       <step_desc>Install /opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/z4.html</step_desc>\r
+                                                       <expected> \r
+       To pass, a user agent must correctly process this resource as a widget because of the 'application/widget' mimetype (i.e., not only via sniffing).</expected>\r
+                                               </step>\r
+                                       </steps>\r
+                                       <test_script_entry>/opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/z4.html</test_script_entry>\r
+                               </description>\r
+                               <specs>\r
+                                       <spec>\r
+                                               <spec_assertion category="Tizen Device API Specifications"\r
+                                                       section="Widget" specification="Widget Packaging and XML Configuration"\r
+                                                       interface="Widget" element_name="constructor" element_type="method" />\r
+                                               <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>\r
+                                               <spec_statement>spec_statement</spec_statement>\r
+                                       </spec>\r
+                               </specs>\r
+                       </testcase>\r
+                       <testcase\r
+                               purpose="Tests that an empty defaultlocale attribute is ignored (and does not cause the widget to be treated as invalid)."\r
+                               type="compliance" status="ready" component="WebAPI/W3C_Widget/WidgetPackaging"\r
+                               execution_type="manual" priority="P3" id="dlocignore00">\r
+                               <description>\r
+                                       <pre_condition />\r
+                                       <post_condition />\r
+                                       <steps>\r
+                                               <step order="1">\r
+                                                       <step_desc>Install /opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/dlocignore00.wgt</step_desc>\r
+                                                       <expected> \r
+       To pass, the widget must simply run..</expected>\r
+                                               </step>\r
+                                       </steps>\r
+                                       <test_script_entry>/opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/dlocignore00.wgt</test_script_entry>\r
+                               </description>\r
+                               <specs>\r
+                                       <spec>\r
+                                               <spec_assertion category="Tizen Device API Specifications"\r
+                                                       section="Widget" specification="Widget Packaging and XML Configuration"\r
+                                                       interface="Widget" element_name="constructor" element_type="method" />\r
+                                               <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>\r
+                                               <spec_statement>spec_statement</spec_statement>\r
+                                       </spec>\r
+                               </specs>\r
+                       </testcase>\r
+                       <testcase\r
+                               purpose="Tests that the user agent applies rule for getting a single attribute value to the defaultlocale attribute."\r
+                               type="compliance" status="ready" component="WebAPI/W3C_Widget/WidgetPackaging"\r
+                               execution_type="manual" priority="P3" id="dlocignore01">\r
+                               <description>\r
+                                       <pre_condition />\r
+                                       <post_condition />\r
+                                       <steps>\r
+                                               <step order="1">\r
+                                                       <step_desc>Install /opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/ta-de-001.wgt</step_desc>\r
+                                                       <expected> To pass, the name of the widget must be the value PASS..</expected>\r
+                                               </step>\r
+                                       </steps>\r
+                                       <test_script_entry>/opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/ta-de-001.wgt</test_script_entry>\r
+                               </description>\r
+                               <specs>\r
+                                       <spec>\r
+                                               <spec_assertion category="Tizen Device API Specifications"\r
+                                                       section="Widget" specification="Widget Packaging and XML Configuration"\r
+                                                       interface="Widget" element_name="constructor" element_type="method" />\r
+                                               <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>\r
+                                               <spec_statement>spec_statement</spec_statement>\r
+                                       </spec>\r
+                               </specs>\r
+                       </testcase>\r
+                       <testcase\r
+                               purpose="Test that the user agent matches obscure, yet valid, language tags."\r
+                               type="compliance" status="ready" component="WebAPI/W3C_Widget/WidgetPackaging"\r
+                               execution_type="manual" priority="P3" id="dlocignore02">\r
+                               <description>\r
+                                       <pre_condition />\r
+                                       <post_condition />\r
+                                       <steps>\r
+                                               <step order="1">\r
+                                                       <step_desc>Install /opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/ta-de-002.wgt</step_desc>\r
+                                                       <expected> To pass, the widgets description must be the value PASS..</expected>\r
+                                               </step>\r
+                                       </steps>\r
+                                       <test_script_entry>/opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/ta-de-002.wgt</test_script_entry>\r
+                               </description>\r
+                               <specs>\r
+                                       <spec>\r
+                                               <spec_assertion category="Tizen Device API Specifications"\r
+                                                       section="Widget" specification="Widget Packaging and XML Configuration"\r
+                                                       interface="Widget" element_name="constructor" element_type="method" />\r
+                                               <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>\r
+                                               <spec_statement>spec_statement</spec_statement>\r
+                                       </spec>\r
+                               </specs>\r
+                       </testcase>\r
+                       <testcase\r
+                               purpose="Tests that a language tag already part of the UA's locales list is ignored when it is repeated for defaultlocale attribute."\r
+                               type="compliance" status="ready" component="WebAPI/W3C_Widget/WidgetPackaging"\r
+                               execution_type="manual" priority="P3" id="dlocignore03">\r
+                               <description>\r
+                                       <pre_condition />\r
+                                       <post_condition />\r
+                                       <steps>\r
+                                               <step order="1">\r
+                                                       <step_desc>Install /opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/ta-de-003.wgt</step_desc>\r
+                                                       <expected> \r
+       To pass, the specified value should not be added twice to the locales list of the UA..</expected>\r
+                                               </step>\r
+                                       </steps>\r
+                                       <test_script_entry>/opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/ta-de-003.wgt</test_script_entry>\r
+                               </description>\r
+                               <specs>\r
+                                       <spec>\r
+                                               <spec_assertion category="Tizen Device API Specifications"\r
+                                                       section="Widget" specification="Widget Packaging and XML Configuration"\r
+                                                       interface="Widget" element_name="constructor" element_type="method" />\r
+                                               <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>\r
+                                               <spec_statement>spec_statement</spec_statement>\r
+                                       </spec>\r
+                               </specs>\r
+                       </testcase>\r
+                       <testcase\r
+                               purpose="Tests that the default locale is added to the end of the user agent's locale list \r
+       (and does not override the default language, which is assumed to be 'en')."\r
+                               type="compliance" status="ready" component="WebAPI/W3C_Widget/WidgetPackaging"\r
+                               execution_type="manual" priority="P3" id="dlocignore04">\r
+                               <description>\r
+                                       <pre_condition />\r
+                                       <post_condition />\r
+                                       <steps>\r
+                                               <step order="1">\r
+                                                       <step_desc>Install /opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/ta-de-004.wgt</step_desc>\r
+                                                       <expected> \r
+       To pass, the name of the widget must be PASS..</expected>\r
+                                               </step>\r
+                                       </steps>\r
+                                       <test_script_entry>/opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/ta-de-004.wgt</test_script_entry>\r
+                               </description>\r
+                               <specs>\r
+                                       <spec>\r
+                                               <spec_assertion category="Tizen Device API Specifications"\r
+                                                       section="Widget" specification="Widget Packaging and XML Configuration"\r
+                                                       interface="Widget" element_name="constructor" element_type="method" />\r
+                                               <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>\r
+                                               <spec_statement>spec_statement</spec_statement>\r
+                                       </spec>\r
+                               </specs>\r
+                       </testcase>\r
+                       <testcase\r
+                               purpose="Tests that the value of defaultlocale is also used to in folder-based localization."\r
+                               type="compliance" status="ready" component="WebAPI/W3C_Widget/WidgetPackaging"\r
+                               execution_type="manual" priority="P3" id="dlocuse00">\r
+                               <description>\r
+                                       <pre_condition />\r
+                                       <post_condition />\r
+                                       <steps>\r
+                                               <step order="1">\r
+                                                       <step_desc>Install /opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/ta-de-000.wgt</step_desc>\r
+                                                       <expected>\r
+               To pass, the index.html of the folder 'locales/esx-al/' should be loaded and say PASS..</expected>\r
+                                               </step>\r
+                                       </steps>\r
+                                       <test_script_entry>/opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/ta-de-000.wgt</test_script_entry>\r
+                               </description>\r
+                               <specs>\r
+                                       <spec>\r
+                                               <spec_assertion category="Tizen Device API Specifications"\r
+                                                       section="Widget" specification="Widget Packaging and XML Configuration"\r
+                                                       interface="Widget" element_name="constructor" element_type="method" />\r
+                                               <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>\r
+                                               <spec_statement>spec_statement</spec_statement>\r
+                                       </spec>\r
+                               </specs>\r
+                       </testcase>\r
+                       <testcase\r
+                               purpose="Tests that the value of defaultlocale works in conjunction to xml:lang on the widget element."\r
+                               type="compliance" status="ready" component="WebAPI/W3C_Widget/WidgetPackaging"\r
+                               execution_type="manual" priority="P3" id="dlocuse01">\r
+                               <description>\r
+                                       <pre_condition />\r
+                                       <post_condition />\r
+                                       <steps>\r
+                                               <step order="1">\r
+                                                       <step_desc>Install /opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/dlocuse01.wgt</step_desc>\r
+                                                       <expected>\r
+               To pass, the name of the widget must be PASS..</expected>\r
+                                               </step>\r
+                                       </steps>\r
+                                       <test_script_entry>/opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/dlocuse01.wgt</test_script_entry>\r
+                               </description>\r
+                               <specs>\r
+                                       <spec>\r
+                                               <spec_assertion category="Tizen Device API Specifications"\r
+                                                       section="Widget" specification="Widget Packaging and XML Configuration"\r
+                                                       interface="Widget" element_name="constructor" element_type="method" />\r
+                                               <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>\r
+                                               <spec_statement>spec_statement</spec_statement>\r
+                                       </spec>\r
+                               </specs>\r
+                       </testcase>\r
+                       <testcase\r
+                               purpose="Tests that the UA rejects configuration documents that don't have\r
+       correct widget element at the root."\r
+                               type="compliance" status="ready" component="WebAPI/W3C_Widget/WidgetPackaging"\r
+                               execution_type="manual" priority="P3" id="aa">\r
+                               <description>\r
+                                       <pre_condition />\r
+                                       <post_condition />\r
+                                       <steps>\r
+                                               <step order="1">\r
+                                                       <step_desc>Install /opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/aa.wgt</step_desc>\r
+                                                       <expected> To pass, the UA must treat this as an\r
+       invalid widget (the root element is not widget)..</expected>\r
+                                               </step>\r
+                                       </steps>\r
+                                       <test_script_entry>/opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/aa.wgt</test_script_entry>\r
+                               </description>\r
+                               <specs>\r
+                                       <spec>\r
+                                               <spec_assertion category="Tizen Device API Specifications"\r
+                                                       section="Widget" specification="Widget Packaging and XML Configuration"\r
+                                                       interface="Widget" element_name="constructor" element_type="method" />\r
+                                               <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>\r
+                                               <spec_statement>spec_statement</spec_statement>\r
+                                       </spec>\r
+                               </specs>\r
+                       </testcase>\r
+                       <testcase\r
+                               purpose="Tests that the UA rejects configuration documents that don't have correct\r
+       widget element at the root."\r
+                               type="compliance" status="ready" component="WebAPI/W3C_Widget/WidgetPackaging"\r
+                               execution_type="manual" priority="P3" id="ab">\r
+                               <description>\r
+                                       <pre_condition />\r
+                                       <post_condition />\r
+                                       <steps>\r
+                                               <step order="1">\r
+                                                       <step_desc>Install /opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/ab.wgt</step_desc>\r
+                                                       <expected> To pass, the UA must treat this as an invalid widget (the namespace is wrong)..</expected>\r
+                                               </step>\r
+                                       </steps>\r
+                                       <test_script_entry>/opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/ab.wgt</test_script_entry>\r
+                               </description>\r
+                               <specs>\r
+                                       <spec>\r
+                                               <spec_assertion category="Tizen Device API Specifications"\r
+                                                       section="Widget" specification="Widget Packaging and XML Configuration"\r
+                                                       interface="Widget" element_name="constructor" element_type="method" />\r
+                                               <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>\r
+                                               <spec_statement>spec_statement</spec_statement>\r
+                                       </spec>\r
+                               </specs>\r
+                       </testcase>\r
+                       <testcase\r
+                               purpose="Tests that the UA rejects configuration documents that don't have correct widget\r
+       element at the root."\r
+                               type="compliance" status="ready" component="WebAPI/W3C_Widget/WidgetPackaging"\r
+                               execution_type="manual" priority="P3" id="ac">\r
+                               <description>\r
+                                       <pre_condition />\r
+                                       <post_condition />\r
+                                       <steps>\r
+                                               <step order="1">\r
+                                                       <step_desc>Install /opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/ac.wgt</step_desc>\r
+                                                       <expected>To pass, the UA must treat this as an invalid widget (the namespace is missing)..</expected>\r
+                                               </step>\r
+                                       </steps>\r
+                                       <test_script_entry>/opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/ac.wgt</test_script_entry>\r
+                               </description>\r
+                               <specs>\r
+                                       <spec>\r
+                                               <spec_assertion category="Tizen Device API Specifications"\r
+                                                       section="Widget" specification="Widget Packaging and XML Configuration"\r
+                                                       interface="Widget" element_name="constructor" element_type="method" />\r
+                                               <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>\r
+                                               <spec_statement>spec_statement</spec_statement>\r
+                                       </spec>\r
+                               </specs>\r
+                       </testcase>\r
+                       <testcase\r
+                               purpose="Test that a user agent correctly processes a author element."\r
+                               type="compliance" status="ready" component="WebAPI/W3C_Widget/WidgetPackaging"\r
+                               execution_type="manual" priority="P3" id="af">\r
+                               <description>\r
+                                       <pre_condition />\r
+                                       <post_condition />\r
+                                       <steps>\r
+                                               <step order="1">\r
+                                                       <step_desc>Install /opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/af.wgt</step_desc>\r
+                                                       <expected>\r
+       To pass, the author name must be the string "PASS"..</expected>\r
+                                               </step>\r
+                                       </steps>\r
+                                       <test_script_entry>/opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/af.wgt</test_script_entry>\r
+                               </description>\r
+                               <specs>\r
+                                       <spec>\r
+                                               <spec_assertion category="Tizen Device API Specifications"\r
+                                                       section="Widget" specification="Widget Packaging and XML Configuration"\r
+                                                       interface="Widget" element_name="constructor" element_type="method" />\r
+                                               <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>\r
+                                               <spec_statement>spec_statement</spec_statement>\r
+                                       </spec>\r
+                               </specs>\r
+                       </testcase>\r
+                       <testcase\r
+                               purpose="Test that a user agent correctly applies the Rule for Getting Text Content with Normalized White Space."\r
+                               type="compliance" status="ready" component="WebAPI/W3C_Widget/WidgetPackaging"\r
+                               execution_type="manual" priority="P3" id="ag">\r
+                               <description>\r
+                                       <pre_condition />\r
+                                       <post_condition />\r
+                                       <steps>\r
+                                               <step order="1">\r
+                                                       <step_desc>Install /opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/ag.wgt</step_desc>\r
+                                                       <expected>\r
+       To pass, the widget author must be the string "P A S S" (i.e., white space collapsed to single space)..</expected>\r
+                                               </step>\r
+                                       </steps>\r
+                                       <test_script_entry>/opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/ag.wgt</test_script_entry>\r
+                               </description>\r
+                               <specs>\r
+                                       <spec>\r
+                                               <spec_assertion category="Tizen Device API Specifications"\r
+                                                       section="Widget" specification="Widget Packaging and XML Configuration"\r
+                                                       interface="Widget" element_name="constructor" element_type="method" />\r
+                                               <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>\r
+                                               <spec_statement>spec_statement</spec_statement>\r
+                                       </spec>\r
+                               </specs>\r
+                       </testcase>\r
+                       <testcase\r
+                               purpose="Test that a user agent correctly applies the Rule for Getting Text Content with Normalized White Space."\r
+                               type="compliance" status="ready" component="WebAPI/W3C_Widget/WidgetPackaging"\r
+                               execution_type="manual" priority="P3" id="ah">\r
+                               <description>\r
+                                       <pre_condition />\r
+                                       <post_condition />\r
+                                       <steps>\r
+                                               <step order="1">\r
+                                                       <step_desc>Install /opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/ah.wgt</step_desc>\r
+                                                       <expected>\r
+       To pass, the author name must be the string "PASS" (i.e., all white space collapsed to single space, spaces at start/end trimmed)..</expected>\r
+                                               </step>\r
+                                       </steps>\r
+                                       <test_script_entry>/opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/ah.wgt</test_script_entry>\r
+                               </description>\r
+                               <specs>\r
+                                       <spec>\r
+                                               <spec_assertion category="Tizen Device API Specifications"\r
+                                                       section="Widget" specification="Widget Packaging and XML Configuration"\r
+                                                       interface="Widget" element_name="constructor" element_type="method" />\r
+                                               <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>\r
+                                               <spec_statement>spec_statement</spec_statement>\r
+                                       </spec>\r
+                               </specs>\r
+                       </testcase>\r
+                       <testcase\r
+                               purpose="Test that a user agent correctly applies the rule for getting a single attribute value."\r
+                               type="compliance" status="ready" component="WebAPI/W3C_Widget/WidgetPackaging"\r
+                               execution_type="manual" priority="P3" id="ai">\r
+                               <description>\r
+                                       <pre_condition />\r
+                                       <post_condition />\r
+                                       <steps>\r
+                                               <step order="1">\r
+                                                       <step_desc>Install /opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/ai.wgt</step_desc>\r
+                                                       <expected>\r
+       To pass, the author email must be the string "PASS"..</expected>\r
+                                               </step>\r
+                                       </steps>\r
+                                       <test_script_entry>/opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/ai.wgt</test_script_entry>\r
+                               </description>\r
+                               <specs>\r
+                                       <spec>\r
+                                               <spec_assertion category="Tizen Device API Specifications"\r
+                                                       section="Widget" specification="Widget Packaging and XML Configuration"\r
+                                                       interface="Widget" element_name="constructor" element_type="method" />\r
+                                               <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>\r
+                                               <spec_statement>spec_statement</spec_statement>\r
+                                       </spec>\r
+                               </specs>\r
+                       </testcase>\r
+                       <testcase\r
+                               purpose="Test that a user agent correctly applies the rule for getting a single attribute value and the Rule for Getting Text Content with Normalized White Space."\r
+                               type="compliance" status="ready" component="WebAPI/W3C_Widget/WidgetPackaging"\r
+                               execution_type="manual" priority="P3" id="aj">\r
+                               <description>\r
+                                       <pre_condition />\r
+                                       <post_condition />\r
+                                       <steps>\r
+                                               <step order="1">\r
+                                                       <step_desc>Install /opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/aj.wgt</step_desc>\r
+                                                       <expected>\r
+       To pass, the author name must be the string "PASS"..</expected>\r
+                                               </step>\r
+                                       </steps>\r
+                                       <test_script_entry>/opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/aj.wgt</test_script_entry>\r
+                               </description>\r
+                               <specs>\r
+                                       <spec>\r
+                                               <spec_assertion category="Tizen Device API Specifications"\r
+                                                       section="Widget" specification="Widget Packaging and XML Configuration"\r
+                                                       interface="Widget" element_name="constructor" element_type="method" />\r
+                                               <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>\r
+                                               <spec_statement>spec_statement</spec_statement>\r
+                                       </spec>\r
+                               </specs>\r
+                       </testcase>\r
+                       <testcase\r
+                               purpose="Test that a user agent correctly applies the rule for getting a single attribute value and the Rule for Getting Text Content with Normalized White Space."\r
+                               type="compliance" status="ready" component="WebAPI/W3C_Widget/WidgetPackaging"\r
+                               execution_type="manual" priority="P3" id="ak">\r
+                               <description>\r
+                                       <pre_condition />\r
+                                       <post_condition />\r
+                                       <steps>\r
+                                               <step order="1">\r
+                                                       <step_desc>Install /opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/ak.wgt</step_desc>\r
+                                                       <expected>\r
+       To pass, the author name must be the string "PASS"..</expected>\r
+                                               </step>\r
+                                       </steps>\r
+                                       <test_script_entry>/opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/ak.wgt</test_script_entry>\r
+                               </description>\r
+                               <specs>\r
+                                       <spec>\r
+                                               <spec_assertion category="Tizen Device API Specifications"\r
+                                                       section="Widget" specification="Widget Packaging and XML Configuration"\r
+                                                       interface="Widget" element_name="constructor" element_type="method" />\r
+                                               <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>\r
+                                               <spec_statement>spec_statement</spec_statement>\r
+                                       </spec>\r
+                               </specs>\r
+                       </testcase>\r
+                       <testcase\r
+                               purpose="Test the ability of the user agent to handle an empty author element."\r
+                               type="compliance" status="ready" component="WebAPI/W3C_Widget/WidgetPackaging"\r
+                               execution_type="manual" priority="P3" id="al">\r
+                               <description>\r
+                                       <pre_condition />\r
+                                       <post_condition />\r
+                                       <steps>\r
+                                               <step order="1">\r
+                                                       <step_desc>Install /opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/al.wgt</step_desc>\r
+                                                       <expected>\r
+       To pass, the author name must be an empty string..</expected>\r
+                                               </step>\r
+                                       </steps>\r
+                                       <test_script_entry>/opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/al.wgt</test_script_entry>\r
+                               </description>\r
+                               <specs>\r
+                                       <spec>\r
+                                               <spec_assertion category="Tizen Device API Specifications"\r
+                                                       section="Widget" specification="Widget Packaging and XML Configuration"\r
+                                                       interface="Widget" element_name="constructor" element_type="method" />\r
+                                               <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>\r
+                                               <spec_statement>spec_statement</spec_statement>\r
+                                       </spec>\r
+                               </specs>\r
+                       </testcase>\r
+                       <testcase\r
+                               purpose="Test the ability of the user agent to correctly process the author href attribute."\r
+                               type="compliance" status="ready" component="WebAPI/W3C_Widget/WidgetPackaging"\r
+                               execution_type="manual" priority="P3" id="am">\r
+                               <description>\r
+                                       <pre_condition />\r
+                                       <post_condition />\r
+                                       <steps>\r
+                                               <step order="1">\r
+                                                       <step_desc>Install /opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/am.wgt</step_desc>\r
+                                                       <expected>\r
+       To pass, the value of author href must be "PASS:PASS"..</expected>\r
+                                               </step>\r
+                                       </steps>\r
+                                       <test_script_entry>/opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/am.wgt</test_script_entry>\r
+                               </description>\r
+                               <specs>\r
+                                       <spec>\r
+                                               <spec_assertion category="Tizen Device API Specifications"\r
+                                                       section="Widget" specification="Widget Packaging and XML Configuration"\r
+                                                       interface="Widget" element_name="constructor" element_type="method" />\r
+                                               <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>\r
+                                               <spec_statement>spec_statement</spec_statement>\r
+                                       </spec>\r
+                               </specs>\r
+                       </testcase>\r
+                       <testcase\r
+                               purpose="Test the ability of the user agent to correctly process the author href attribute."\r
+                               type="compliance" status="ready" component="WebAPI/W3C_Widget/WidgetPackaging"\r
+                               execution_type="manual" priority="P3" id="an">\r
+                               <description>\r
+                                       <pre_condition />\r
+                                       <post_condition />\r
+                                       <steps>\r
+                                               <step order="1">\r
+                                                       <step_desc>Install /opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/an.wgt</step_desc>\r
+                                                       <expected>\r
+       To pass, the value of author href must be ignored..</expected>\r
+                                               </step>\r
+                                       </steps>\r
+                                       <test_script_entry>/opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/an.wgt</test_script_entry>\r
+                               </description>\r
+                               <specs>\r
+                                       <spec>\r
+                                               <spec_assertion category="Tizen Device API Specifications"\r
+                                                       section="Widget" specification="Widget Packaging and XML Configuration"\r
+                                                       interface="Widget" element_name="constructor" element_type="method" />\r
+                                               <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>\r
+                                               <spec_statement>spec_statement</spec_statement>\r
+                                       </spec>\r
+                               </specs>\r
+                       </testcase>\r
+                       <testcase\r
+                               purpose="Test that a user agent correctly processes a name element."\r
+                               type="compliance" status="ready" component="WebAPI/W3C_Widget/WidgetPackaging"\r
+                               execution_type="manual" priority="P3" id="ao">\r
+                               <description>\r
+                                       <pre_condition />\r
+                                       <post_condition />\r
+                                       <steps>\r
+                                               <step order="1">\r
+                                                       <step_desc>Install /opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/ao.wgt</step_desc>\r
+                                                       <expected>\r
+       To pass, the widget name must be the string "PASS"..</expected>\r
+                                               </step>\r
+                                       </steps>\r
+                                       <test_script_entry>/opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/ao.wgt</test_script_entry>\r
+                               </description>\r
+                               <specs>\r
+                                       <spec>\r
+                                               <spec_assertion category="Tizen Device API Specifications"\r
+                                                       section="Widget" specification="Widget Packaging and XML Configuration"\r
+                                                       interface="Widget" element_name="constructor" element_type="method" />\r
+                                               <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>\r
+                                               <spec_statement>spec_statement</spec_statement>\r
+                                       </spec>\r
+                               </specs>\r
+                       </testcase>\r
+                       <testcase\r
+                               purpose="Test that a user agent correctly applies the Rule for Getting Text Content with Normalized White Space."\r
+                               type="compliance" status="ready" component="WebAPI/W3C_Widget/WidgetPackaging"\r
+                               execution_type="manual" priority="P3" id="ap">\r
+                               <description>\r
+                                       <pre_condition />\r
+                                       <post_condition />\r
+                                       <steps>\r
+                                               <step order="1">\r
+                                                       <step_desc>Install /opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/ap.wgt</step_desc>\r
+                                                       <expected>\r
+       To pass, the widget name must be the string "P A S S" (i.e., white space collapsed to single space)..</expected>\r
+                                               </step>\r
+                                       </steps>\r
+                                       <test_script_entry>/opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/ap.wgt</test_script_entry>\r
+                               </description>\r
+                               <specs>\r
+                                       <spec>\r
+                                               <spec_assertion category="Tizen Device API Specifications"\r
+                                                       section="Widget" specification="Widget Packaging and XML Configuration"\r
+                                                       interface="Widget" element_name="constructor" element_type="method" />\r
+                                               <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>\r
+                                               <spec_statement>spec_statement</spec_statement>\r
+                                       </spec>\r
+                               </specs>\r
+                       </testcase>\r
+                       <testcase\r
+                               purpose="Test that a user agent correctly applies the Rule for Getting Text Content with Normalized White Space."\r
+                               type="compliance" status="ready" component="WebAPI/W3C_Widget/WidgetPackaging"\r
+                               execution_type="manual" priority="P3" id="aq">\r
+                               <description>\r
+                                       <pre_condition />\r
+                                       <post_condition />\r
+                                       <steps>\r
+                                               <step order="1">\r
+                                                       <step_desc>Install /opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/aq.wgt</step_desc>\r
+                                                       <expected>\r
+       To pass, the widget name must be the string "PASS" (i.e., all white space collapsed to single space, spaces at front/back trimmed)..</expected>\r
+                                               </step>\r
+                                       </steps>\r
+                                       <test_script_entry>/opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/aq.wgt</test_script_entry>\r
+                               </description>\r
+                               <specs>\r
+                                       <spec>\r
+                                               <spec_assertion category="Tizen Device API Specifications"\r
+                                                       section="Widget" specification="Widget Packaging and XML Configuration"\r
+                                                       interface="Widget" element_name="constructor" element_type="method" />\r
+                                               <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>\r
+                                               <spec_statement>spec_statement</spec_statement>\r
+                                       </spec>\r
+                               </specs>\r
+                       </testcase>\r
+                       <testcase\r
+                               purpose="Test that a user agent correctly applies the rule for getting a single attribute value."\r
+                               type="compliance" status="ready" component="WebAPI/W3C_Widget/WidgetPackaging"\r
+                               execution_type="manual" priority="P3" id="ar">\r
+                               <description>\r
+                                       <pre_condition />\r
+                                       <post_condition />\r
+                                       <steps>\r
+                                               <step order="1">\r
+                                                       <step_desc>Install /opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/ar.wgt</step_desc>\r
+                                                       <expected>\r
+       To pass, the widget short name must be the string "PASS"..</expected>\r
+                                               </step>\r
+                                       </steps>\r
+                                       <test_script_entry>/opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/ar.wgt</test_script_entry>\r
+                               </description>\r
+                               <specs>\r
+                                       <spec>\r
+                                               <spec_assertion category="Tizen Device API Specifications"\r
+                                                       section="Widget" specification="Widget Packaging and XML Configuration"\r
+                                                       interface="Widget" element_name="constructor" element_type="method" />\r
+                                               <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>\r
+                                               <spec_statement>spec_statement</spec_statement>\r
+                                       </spec>\r
+                               </specs>\r
+                       </testcase>\r
+                       <testcase\r
+                               purpose="Test that a user agent correctly applies the rule for getting a single attribute value and\r
+       the Rule for Getting Text Content with Normalized White Space."\r
+                               type="compliance" status="ready" component="WebAPI/W3C_Widget/WidgetPackaging"\r
+                               execution_type="manual" priority="P3" id="as">\r
+                               <description>\r
+                                       <pre_condition />\r
+                                       <post_condition />\r
+                                       <steps>\r
+                                               <step order="1">\r
+                                                       <step_desc>Install /opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/as.wgt</step_desc>\r
+                                                       <expected>\r
+       To pass, the widget short name must be the string "PASS" and the widget name must be "PASS"..</expected>\r
+                                               </step>\r
+                                       </steps>\r
+                                       <test_script_entry>/opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/as.wgt</test_script_entry>\r
+                               </description>\r
+                               <specs>\r
+                                       <spec>\r
+                                               <spec_assertion category="Tizen Device API Specifications"\r
+                                                       section="Widget" specification="Widget Packaging and XML Configuration"\r
+                                                       interface="Widget" element_name="constructor" element_type="method" />\r
+                                               <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>\r
+                                               <spec_statement>spec_statement</spec_statement>\r
+                                       </spec>\r
+                               </specs>\r
+                       </testcase>\r
+                       <testcase\r
+                               purpose="Test that a user agent correctly applies the rule for getting a single attribute value and\r
+       the Rule for Getting Text Content with Normalized White Space."\r
+                               type="compliance" status="ready" component="WebAPI/W3C_Widget/WidgetPackaging"\r
+                               execution_type="manual" priority="P3" id="at">\r
+                               <description>\r
+                                       <pre_condition />\r
+                                       <post_condition />\r
+                                       <steps>\r
+                                               <step order="1">\r
+                                                       <step_desc>Install /opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/at.wgt</step_desc>\r
+                                                       <expected>\r
+       To pass, the widget short name must be the string "PASS" and the widget name must be "PASS"..</expected>\r
+                                               </step>\r
+                                       </steps>\r
+                                       <test_script_entry>/opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/at.wgt</test_script_entry>\r
+                               </description>\r
+                               <specs>\r
+                                       <spec>\r
+                                               <spec_assertion category="Tizen Device API Specifications"\r
+                                                       section="Widget" specification="Widget Packaging and XML Configuration"\r
+                                                       interface="Widget" element_name="constructor" element_type="method" />\r
+                                               <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>\r
+                                               <spec_statement>spec_statement</spec_statement>\r
+                                       </spec>\r
+                               </specs>\r
+                       </testcase>\r
+                       <testcase\r
+                               purpose="Test that a user agent correctly processes the short attribute."\r
+                               type="compliance" status="ready" component="WebAPI/W3C_Widget/WidgetPackaging"\r
+                               execution_type="manual" priority="P3" id="au">\r
+                               <description>\r
+                                       <pre_condition />\r
+                                       <post_condition />\r
+                                       <steps>\r
+                                               <step order="1">\r
+                                                       <step_desc>Install /opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/au.wgt</step_desc>\r
+                                                       <expected>\r
+       To pass, the widget short name must be an empty string..</expected>\r
+                                               </step>\r
+                                       </steps>\r
+                                       <test_script_entry>/opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/au.wgt</test_script_entry>\r
+                               </description>\r
+                               <specs>\r
+                                       <spec>\r
+                                               <spec_assertion category="Tizen Device API Specifications"\r
+                                                       section="Widget" specification="Widget Packaging and XML Configuration"\r
+                                                       interface="Widget" element_name="constructor" element_type="method" />\r
+                                               <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>\r
+                                               <spec_statement>spec_statement</spec_statement>\r
+                                       </spec>\r
+                               </specs>\r
+                       </testcase>\r
+                       <testcase\r
+                               purpose="Test the ability of the user agent to handle an empty name element."\r
+                               type="compliance" status="ready" component="WebAPI/W3C_Widget/WidgetPackaging"\r
+                               execution_type="manual" priority="P3" id="av">\r
+                               <description>\r
+                                       <pre_condition />\r
+                                       <post_condition />\r
+                                       <steps>\r
+                                               <step order="1">\r
+                                                       <step_desc>Install /opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/av.wgt</step_desc>\r
+                                                       <expected>\r
+       To pass, the widget name must be an empty string..</expected>\r
+                                               </step>\r
+                                       </steps>\r
+                                       <test_script_entry>/opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/av.wgt</test_script_entry>\r
+                               </description>\r
+                               <specs>\r
+                                       <spec>\r
+                                               <spec_assertion category="Tizen Device API Specifications"\r
+                                                       section="Widget" specification="Widget Packaging and XML Configuration"\r
+                                                       interface="Widget" element_name="constructor" element_type="method" />\r
+                                               <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>\r
+                                               <spec_statement>spec_statement</spec_statement>\r
+                                       </spec>\r
+                               </specs>\r
+                       </testcase>\r
+                       <testcase\r
+                               purpose="Test that a user agent correctly processes a name element with xml:lang attribute."\r
+                               type="compliance" status="ready" component="WebAPI/W3C_Widget/WidgetPackaging"\r
+                               execution_type="manual" priority="P3" id="oa">\r
+                               <description>\r
+                                       <pre_condition />\r
+                                       <post_condition />\r
+                                       <steps>\r
+                                               <step order="1">\r
+                                                       <step_desc>Install /opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/oa.wgt</step_desc>\r
+                                                       <expected>\r
+       To pass, the widget name must be the string "PASS"..</expected>\r
+                                               </step>\r
+                                       </steps>\r
+                                       <test_script_entry>/opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/oa.wgt</test_script_entry>\r
+                               </description>\r
+                               <specs>\r
+                                       <spec>\r
+                                               <spec_assertion category="Tizen Device API Specifications"\r
+                                                       section="Widget" specification="Widget Packaging and XML Configuration"\r
+                                                       interface="Widget" element_name="constructor" element_type="method" />\r
+                                               <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>\r
+                                               <spec_statement>spec_statement</spec_statement>\r
+                                       </spec>\r
+                               </specs>\r
+                       </testcase>\r
+                       <testcase\r
+                               purpose="Test that the user agent does not attempt to load a default start file when a custom start file has been declared."\r
+                               type="compliance" status="ready" component="WebAPI/W3C_Widget/WidgetPackaging"\r
+                               execution_type="manual" priority="P3" id="aw">\r
+                               <description>\r
+                                       <pre_condition />\r
+                                       <post_condition />\r
+                                       <steps>\r
+                                               <step order="1">\r
+                                                       <step_desc>Install /opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/aw.wgt</step_desc>\r
+                                                       <expected>\r
+       To pass, the widget start file must point to "pass.html" and the icons list must contain a pointer to "icon.png" at the root of the widget..</expected>\r
+                                               </step>\r
+                                       </steps>\r
+                                       <test_script_entry>/opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/aw.wgt</test_script_entry>\r
+                               </description>\r
+                               <specs>\r
+                                       <spec>\r
+                                               <spec_assertion category="Tizen Device API Specifications"\r
+                                                       section="Widget" specification="Widget Packaging and XML Configuration"\r
+                                                       interface="Widget" element_name="constructor" element_type="method" />\r
+                                               <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>\r
+                                               <spec_statement>spec_statement</spec_statement>\r
+                                       </spec>\r
+                               </specs>\r
+                       </testcase>\r
+                       <testcase purpose="Test the UA's ability process the height attribute."\r
+                               type="compliance" status="ready" component="WebAPI/W3C_Widget/WidgetPackaging"\r
+                               execution_type="manual" priority="P3" id="ax">\r
+                               <description>\r
+                                       <pre_condition />\r
+                                       <post_condition />\r
+                                       <steps>\r
+                                               <step order="1">\r
+                                                       <step_desc>Install /opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/ax.wgt</step_desc>\r
+                                                       <expected>\r
+       To pass, the widget height must be either the numeric value 123 or a value greater than 0..</expected>\r
+                                               </step>\r
+                                       </steps>\r
+                                       <test_script_entry>/opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/ax.wgt</test_script_entry>\r
+                               </description>\r
+                               <specs>\r
+                                       <spec>\r
+                                               <spec_assertion category="Tizen Device API Specifications"\r
+                                                       section="Widget" specification="Widget Packaging and XML Configuration"\r
+                                                       interface="Widget" element_name="constructor" element_type="method" />\r
+                                               <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>\r
+                                               <spec_statement>spec_statement</spec_statement>\r
+                                       </spec>\r
+                               </specs>\r
+                       </testcase>\r
+                       <testcase purpose="Test the UA's ability process the height attribute."\r
+                               type="compliance" status="ready" component="WebAPI/W3C_Widget/WidgetPackaging"\r
+                               execution_type="manual" priority="P3" id="ay">\r
+                               <description>\r
+                                       <pre_condition />\r
+                                       <post_condition />\r
+                                       <steps>\r
+                                               <step order="1">\r
+                                                       <step_desc>Install /opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/ay.wgt</step_desc>\r
+                                                       <expected>\r
+       To pass, the user agent must ignore the value of the height attribute (the value is composed of characters)..</expected>\r
+                                               </step>\r
+                                       </steps>\r
+                                       <test_script_entry>/opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/ay.wgt</test_script_entry>\r
+                               </description>\r
+                               <specs>\r
+                                       <spec>\r
+                                               <spec_assertion category="Tizen Device API Specifications"\r
+                                                       section="Widget" specification="Widget Packaging and XML Configuration"\r
+                                                       interface="Widget" element_name="constructor" element_type="method" />\r
+                                               <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>\r
+                                               <spec_statement>spec_statement</spec_statement>\r
+                                       </spec>\r
+                               </specs>\r
+                       </testcase>\r
+                       <testcase purpose="Test the UA's ability process the height attribute."\r
+                               type="compliance" status="ready" component="WebAPI/W3C_Widget/WidgetPackaging"\r
+                               execution_type="manual" priority="P3" id="az">\r
+                               <description>\r
+                                       <pre_condition />\r
+                                       <post_condition />\r
+                                       <steps>\r
+                                               <step order="1">\r
+                                                       <step_desc>Install /opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/az.wgt</step_desc>\r
+                                                       <expected>\r
+       To pass, the widget height must be the numeric value 100 or a value greater than 0 (resulting from rule for parsing a non-negative integer)..</expected>\r
+                                               </step>\r
+                                       </steps>\r
+                                       <test_script_entry>/opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/az.wgt</test_script_entry>\r
+                               </description>\r
+                               <specs>\r
+                                       <spec>\r
+                                               <spec_assertion category="Tizen Device API Specifications"\r
+                                                       section="Widget" specification="Widget Packaging and XML Configuration"\r
+                                                       interface="Widget" element_name="constructor" element_type="method" />\r
+                                               <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>\r
+                                               <spec_statement>spec_statement</spec_statement>\r
+                                       </spec>\r
+                               </specs>\r
+                       </testcase>\r
+                       <testcase purpose="Test the UA's ability process the height attribute."\r
+                               type="compliance" status="ready" component="WebAPI/W3C_Widget/WidgetPackaging"\r
+                               execution_type="manual" priority="P3" id="a1">\r
+                               <description>\r
+                                       <pre_condition />\r
+                                       <post_condition />\r
+                                       <steps>\r
+                                               <step order="1">\r
+                                                       <step_desc>Install /opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/a1.wgt</step_desc>\r
+                                                       <expected>\r
+       To pass, the widget height must be the numeric value 123 or a value greater than 0 (resulting from rule for parsing a non-negative integer)..</expected>\r
+                                               </step>\r
+                                       </steps>\r
+                                       <test_script_entry>/opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/a1.wgt</test_script_entry>\r
+                               </description>\r
+                               <specs>\r
+                                       <spec>\r
+                                               <spec_assertion category="Tizen Device API Specifications"\r
+                                                       section="Widget" specification="Widget Packaging and XML Configuration"\r
+                                                       interface="Widget" element_name="constructor" element_type="method" />\r
+                                               <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>\r
+                                               <spec_statement>spec_statement</spec_statement>\r
+                                       </spec>\r
+                               </specs>\r
+                       </testcase>\r
+                       <testcase purpose="Test the UA's ability process the height attribute."\r
+                               type="compliance" status="ready" component="WebAPI/W3C_Widget/WidgetPackaging"\r
+                               execution_type="manual" priority="P3" id="a2">\r
+                               <description>\r
+                                       <pre_condition />\r
+                                       <post_condition />\r
+                                       <steps>\r
+                                               <step order="1">\r
+                                                       <step_desc>Install /opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/a2.wgt</step_desc>\r
+                                                       <expected>\r
+       To pass, the widget height must be ignored (the value is an empty string, hence it would be ignored)..</expected>\r
+                                               </step>\r
+                                       </steps>\r
+                                       <test_script_entry>/opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/a2.wgt</test_script_entry>\r
+                               </description>\r
+                               <specs>\r
+                                       <spec>\r
+                                               <spec_assertion category="Tizen Device API Specifications"\r
+                                                       section="Widget" specification="Widget Packaging and XML Configuration"\r
+                                                       interface="Widget" element_name="constructor" element_type="method" />\r
+                                               <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>\r
+                                               <spec_statement>spec_statement</spec_statement>\r
+                                       </spec>\r
+                               </specs>\r
+                       </testcase>\r
+                       <testcase purpose="Test the UA's ability process the height attribute."\r
+                               type="compliance" status="ready" component="WebAPI/W3C_Widget/WidgetPackaging"\r
+                               execution_type="manual" priority="P3" id="a3">\r
+                               <description>\r
+                                       <pre_condition />\r
+                                       <post_condition />\r
+                                       <steps>\r
+                                               <step order="1">\r
+                                                       <step_desc>Install /opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/a3.wgt</step_desc>\r
+                                                       <expected>\r
+       To pass, the widget height must be ignored (the value is a sequence of space characters, hence it would be ignored)..</expected>\r
+                                               </step>\r
+                                       </steps>\r
+                                       <test_script_entry>/opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/a3.wgt</test_script_entry>\r
+                               </description>\r
+                               <specs>\r
+                                       <spec>\r
+                                               <spec_assertion category="Tizen Device API Specifications"\r
+                                                       section="Widget" specification="Widget Packaging and XML Configuration"\r
+                                                       interface="Widget" element_name="constructor" element_type="method" />\r
+                                               <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>\r
+                                               <spec_statement>spec_statement</spec_statement>\r
+                                       </spec>\r
+                               </specs>\r
+                       </testcase>\r
+                       <testcase purpose="Test the UA's ability process the height attribute."\r
+                               type="compliance" status="ready" component="WebAPI/W3C_Widget/WidgetPackaging"\r
+                               execution_type="manual" priority="P3" id="a4">\r
+                               <description>\r
+                                       <pre_condition />\r
+                                       <post_condition />\r
+                                       <steps>\r
+                                               <step order="1">\r
+                                                       <step_desc>Install /opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/a4.wgt</step_desc>\r
+                                                       <expected>\r
+       To pass, the widget height must be ignored (the value is an empty string)..</expected>\r
+                                               </step>\r
+                                       </steps>\r
+                                       <test_script_entry>/opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/a4.wgt</test_script_entry>\r
+                               </description>\r
+                               <specs>\r
+                                       <spec>\r
+                                               <spec_assertion category="Tizen Device API Specifications"\r
+                                                       section="Widget" specification="Widget Packaging and XML Configuration"\r
+                                                       interface="Widget" element_name="constructor" element_type="method" />\r
+                                               <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>\r
+                                               <spec_statement>spec_statement</spec_statement>\r
+                                       </spec>\r
+                               </specs>\r
+                       </testcase>\r
+                       <testcase\r
+                               purpose="Test that the UA skips preference elements without a name attribute."\r
+                               type="compliance" status="ready" component="WebAPI/W3C_Widget/WidgetPackaging"\r
+                               execution_type="manual" priority="P3" id="a5">\r
+                               <description>\r
+                                       <pre_condition />\r
+                                       <post_condition />\r
+                                       <steps>\r
+                                               <step order="1">\r
+                                                       <step_desc>Install /opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/a5.wgt</step_desc>\r
+                                                       <expected>\r
+       To pass, widget preferences must remain an empty list (i.e., the preference is skipped)..</expected>\r
+                                               </step>\r
+                                       </steps>\r
+                                       <test_script_entry>/opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/a5.wgt</test_script_entry>\r
+                               </description>\r
+                               <specs>\r
+                                       <spec>\r
+                                               <spec_assertion category="Tizen Device API Specifications"\r
+                                                       section="Widget" specification="Widget Packaging and XML Configuration"\r
+                                                       interface="Widget" element_name="constructor" element_type="method" />\r
+                                               <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>\r
+                                               <spec_statement>spec_statement</spec_statement>\r
+                                       </spec>\r
+                               </specs>\r
+                       </testcase>\r
+                       <testcase\r
+                               purpose="Test that the UA skips preference element already defined."\r
+                               type="compliance" status="ready" component="WebAPI/W3C_Widget/WidgetPackaging"\r
+                               execution_type="manual" priority="P3" id="a6">\r
+                               <description>\r
+                                       <pre_condition />\r
+                                       <post_condition />\r
+                                       <steps>\r
+                                               <step order="1">\r
+                                                       <step_desc>Install /opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/a6.wgt</step_desc>\r
+                                                       <expected>\r
+       To pass, widget preference must contain one preference whose name is "PASS" and whose value is "PASS" and whose readonly attr value must be "false"..</expected>\r
+                                               </step>\r
+                                       </steps>\r
+                                       <test_script_entry>/opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/a6.wgt</test_script_entry>\r
+                               </description>\r
+                               <specs>\r
+                                       <spec>\r
+                                               <spec_assertion category="Tizen Device API Specifications"\r
+                                                       section="Widget" specification="Widget Packaging and XML Configuration"\r
+                                                       interface="Widget" element_name="constructor" element_type="method" />\r
+                                               <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>\r
+                                               <spec_statement>spec_statement</spec_statement>\r
+                                       </spec>\r
+                               </specs>\r
+                       </testcase>\r
+                       <testcase\r
+                               purpose="Test that the UA does a case sensitive comparison on the value of the readonly attribute."\r
+                               type="compliance" status="ready" component="WebAPI/W3C_Widget/WidgetPackaging"\r
+                               execution_type="manual" priority="P3" id="a7">\r
+                               <description>\r
+                                       <pre_condition />\r
+                                       <post_condition />\r
+                                       <steps>\r
+                                               <step order="1">\r
+                                                       <step_desc>Install /opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/a7.wgt</step_desc>\r
+                                                       <expected>\r
+       To pass, widget preference must contain one preference whose name is "PASS" and whose value is "PASS" and whose readonly attr value must be "false"..</expected>\r
+                                               </step>\r
+                                       </steps>\r
+                                       <test_script_entry>/opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/a7.wgt</test_script_entry>\r
+                               </description>\r
+                               <specs>\r
+                                       <spec>\r
+                                               <spec_assertion category="Tizen Device API Specifications"\r
+                                                       section="Widget" specification="Widget Packaging and XML Configuration"\r
+                                                       interface="Widget" element_name="constructor" element_type="method" />\r
+                                               <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>\r
+                                               <spec_statement>spec_statement</spec_statement>\r
+                                       </spec>\r
+                               </specs>\r
+                       </testcase>\r
+                       <testcase\r
+                               purpose="Test that the UA does a case sensitive comparison on the value of the readonly attribute."\r
+                               type="compliance" status="ready" component="WebAPI/W3C_Widget/WidgetPackaging"\r
+                               execution_type="manual" priority="P3" id="a8">\r
+                               <description>\r
+                                       <pre_condition />\r
+                                       <post_condition />\r
+                                       <steps>\r
+                                               <step order="1">\r
+                                                       <step_desc>Install /opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/a8.wgt</step_desc>\r
+                                                       <expected>\r
+       To pass, widget preference must contain one preference whose name is "PASS" and whose value is "PASS" and whose readonly attr value must be "true"..</expected>\r
+                                               </step>\r
+                                       </steps>\r
+                                       <test_script_entry>/opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/a8.wgt</test_script_entry>\r
+                               </description>\r
+                               <specs>\r
+                                       <spec>\r
+                                               <spec_assertion category="Tizen Device API Specifications"\r
+                                                       section="Widget" specification="Widget Packaging and XML Configuration"\r
+                                                       interface="Widget" element_name="constructor" element_type="method" />\r
+                                               <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>\r
+                                               <spec_statement>spec_statement</spec_statement>\r
+                                       </spec>\r
+                               </specs>\r
+                       </testcase>\r
+                       <testcase\r
+                               purpose="Test that the UA sets the readonly attribute to false by default."\r
+                               type="compliance" status="ready" component="WebAPI/W3C_Widget/WidgetPackaging"\r
+                               execution_type="manual" priority="P3" id="a9">\r
+                               <description>\r
+                                       <pre_condition />\r
+                                       <post_condition />\r
+                                       <steps>\r
+                                               <step order="1">\r
+                                                       <step_desc>Install /opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/a9.wgt</step_desc>\r
+                                                       <expected>\r
+       To pass, widget preference must contain one preference whose name is "PASS" and whose value is "PASS" and whose readonly attr value must be "false"..</expected>\r
+                                               </step>\r
+                                       </steps>\r
+                                       <test_script_entry>/opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/a9.wgt</test_script_entry>\r
+                               </description>\r
+                               <specs>\r
+                                       <spec>\r
+                                               <spec_assertion category="Tizen Device API Specifications"\r
+                                                       section="Widget" specification="Widget Packaging and XML Configuration"\r
+                                                       interface="Widget" element_name="constructor" element_type="method" />\r
+                                               <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>\r
+                                               <spec_statement>spec_statement</spec_statement>\r
+                                       </spec>\r
+                               </specs>\r
+                       </testcase>\r
+                       <testcase\r
+                               purpose="Test that the UA skips multiple preference element already defined."\r
+                               type="compliance" status="ready" component="WebAPI/W3C_Widget/WidgetPackaging"\r
+                               execution_type="manual" priority="P3" id="ba">\r
+                               <description>\r
+                                       <pre_condition />\r
+                                       <post_condition />\r
+                                       <steps>\r
+                                               <step order="1">\r
+                                                       <step_desc>Install /opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/ba.wgt</step_desc>\r
+                                                       <expected>\r
+       To pass, widget preference must contain one preference whose name is "a" and whose value is "a" and whose readonly attr value must be "false"..</expected>\r
+                                               </step>\r
+                                       </steps>\r
+                                       <test_script_entry>/opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/ba.wgt</test_script_entry>\r
+                               </description>\r
+                               <specs>\r
+                                       <spec>\r
+                                               <spec_assertion category="Tizen Device API Specifications"\r
+                                                       section="Widget" specification="Widget Packaging and XML Configuration"\r
+                                                       interface="Widget" element_name="constructor" element_type="method" />\r
+                                               <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>\r
+                                               <spec_statement>spec_statement</spec_statement>\r
+                                       </spec>\r
+                               </specs>\r
+                       </testcase>\r
+                       <testcase\r
+                               purpose="Test the UA's ability store preferences whose name vary only in case."\r
+                               type="compliance" status="ready" component="WebAPI/W3C_Widget/WidgetPackaging"\r
+                               execution_type="manual" priority="P3" id="bb">\r
+                               <description>\r
+                                       <pre_condition />\r
+                                       <post_condition />\r
+                                       <steps>\r
+                                               <step order="1">\r
+                                                       <step_desc>Install /opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/bb.wgt</step_desc>\r
+                                                       <expected>\r
+       To pass, widget preference must contain two preferences: 1 must have a name "a" and whose value is "a" and whose readonly attr value must be "false". 2 must have a name "A" and whose value is "b" and whose readonly attribute value must be "false"..</expected>\r
+                                               </step>\r
+                                       </steps>\r
+                                       <test_script_entry>/opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/bb.wgt</test_script_entry>\r
+                               </description>\r
+                               <specs>\r
+                                       <spec>\r
+                                               <spec_assertion category="Tizen Device API Specifications"\r
+                                                       section="Widget" specification="Widget Packaging and XML Configuration"\r
+                                                       interface="Widget" element_name="constructor" element_type="method" />\r
+                                               <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>\r
+                                               <spec_statement>spec_statement</spec_statement>\r
+                                       </spec>\r
+                               </specs>\r
+                       </testcase>\r
+                       <testcase\r
+                               purpose="Tests that the UA applies the rule for getting a single attribute value to name, value, and readonly attributes."\r
+                               type="compliance" status="ready" component="WebAPI/W3C_Widget/WidgetPackaging"\r
+                               execution_type="manual" priority="P3" id="bc">\r
+                               <description>\r
+                                       <pre_condition />\r
+                                       <post_condition />\r
+                                       <steps>\r
+                                               <step order="1">\r
+                                                       <step_desc>Install /opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/bc.wgt</step_desc>\r
+                                                       <expected>\r
+       To pass, widget preference must contain one preference whose name is "PASS" and whose value is "PASS" and whose readonly attr value must be "false"..</expected>\r
+                                               </step>\r
+                                       </steps>\r
+                                       <test_script_entry>/opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/bc.wgt</test_script_entry>\r
+                               </description>\r
+                               <specs>\r
+                                       <spec>\r
+                                               <spec_assertion category="Tizen Device API Specifications"\r
+                                                       section="Widget" specification="Widget Packaging and XML Configuration"\r
+                                                       interface="Widget" element_name="constructor" element_type="method" />\r
+                                               <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>\r
+                                               <spec_statement>spec_statement</spec_statement>\r
+                                       </spec>\r
+                               </specs>\r
+                       </testcase>\r
+                       <testcase\r
+                               purpose="Test to make sure that the UA only checks the root of the widget for config files, and not in an arbitrary folder."\r
+                               type="compliance" status="ready" component="WebAPI/W3C_Widget/WidgetPackaging"\r
+                               execution_type="manual" priority="P3" id="bg">\r
+                               <description>\r
+                                       <pre_condition />\r
+                                       <post_condition />\r
+                                       <steps>\r
+                                               <step order="1">\r
+                                                       <step_desc>Install /opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/bg.wgt</step_desc>\r
+                                                       <expected>\r
+       To pass, the user agent must treat this widget as an invalid widget (config file is not at the root)..</expected>\r
+                                               </step>\r
+                                       </steps>\r
+                                       <test_script_entry>/opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/bg.wgt</test_script_entry>\r
+                               </description>\r
+                               <specs>\r
+                                       <spec>\r
+                                               <spec_assertion category="Tizen Device API Specifications"\r
+                                                       section="Widget" specification="Widget Packaging and XML Configuration"\r
+                                                       interface="Widget" element_name="constructor" element_type="method" />\r
+                                               <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>\r
+                                               <spec_statement>spec_statement</spec_statement>\r
+                                       </spec>\r
+                               </specs>\r
+                       </testcase>\r
+                       <testcase\r
+                               purpose="Test to make sure that the UA only checks the root of the widget for config files, and not in a locale folder."\r
+                               type="compliance" status="ready" component="WebAPI/W3C_Widget/WidgetPackaging"\r
+                               execution_type="manual" priority="P3" id="bh">\r
+                               <description>\r
+                                       <pre_condition />\r
+                                       <post_condition />\r
+                                       <steps>\r
+                                               <step order="1">\r
+                                                       <step_desc>Install /opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/bh.wgt</step_desc>\r
+                                                       <expected>\r
+       To pass, the user agent must treat this widget as an invalid widget (config file is not at the root, but in locale folder)..</expected>\r
+                                               </step>\r
+                                       </steps>\r
+                                       <test_script_entry>/opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/bh.wgt</test_script_entry>\r
+                               </description>\r
+                               <specs>\r
+                                       <spec>\r
+                                               <spec_assertion category="Tizen Device API Specifications"\r
+                                                       section="Widget" specification="Widget Packaging and XML Configuration"\r
+                                                       interface="Widget" element_name="constructor" element_type="method" />\r
+                                               <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>\r
+                                               <spec_statement>spec_statement</spec_statement>\r
+                                       </spec>\r
+                               </specs>\r
+                       </testcase>\r
+               </set>\r
+       </suite>\r
+</test_definition>\r
diff --git a/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite2.0/CONFIG b/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite2.0/CONFIG
new file mode 100755 (executable)
index 0000000..e6b6d74
--- /dev/null
@@ -0,0 +1,8 @@
+[LOGGING]
+log_level=INFO
+
+[EXTENSION]
+crosswalk=--external-extensions-path=/usr/lib/tizen-extensions-crosswalk
+
+[TIZEN]
+tizen_user=app
diff --git a/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite2.0/LICENSE b/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite2.0/LICENSE
new file mode 100755 (executable)
index 0000000..6d45519
--- /dev/null
@@ -0,0 +1,340 @@
+                   GNU GENERAL PUBLIC LICENSE
+                      Version 2, June 1991
+
+ Copyright (C) 1989, 1991 Free Software Foundation, Inc.
+                       51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+                           Preamble
+
+  The licenses for most software are designed to take away your
+freedom to share and change it.  By contrast, the GNU General Public
+License is intended to guarantee your freedom to share and change free
+software--to make sure the software is free for all its users.  This
+General Public License applies to most of the Free Software
+Foundation's software and to any other program whose authors commit to
+using it.  (Some other Free Software Foundation software is covered by
+the GNU Library General Public License instead.)  You can apply it to
+your programs, too.
+
+  When we speak of free software, we are referring to freedom, not
+price.  Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+this service if you wish), that you receive source code or can get it
+if you want it, that you can change the software or use pieces of it
+in new free programs; and that you know you can do these things.
+
+  To protect your rights, we need to make restrictions that forbid
+anyone to deny you these rights or to ask you to surrender the rights.
+These restrictions translate to certain responsibilities for you if you
+distribute copies of the software, or if you modify it.
+
+  For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must give the recipients all the rights that
+you have.  You must make sure that they, too, receive or can get the
+source code.  And you must show them these terms so they know their
+rights.
+
+  We protect your rights with two steps: (1) copyright the software, and
+(2) offer you this license which gives you legal permission to copy,
+distribute and/or modify the software.
+
+  Also, for each author's protection and ours, we want to make certain
+that everyone understands that there is no warranty for this free
+software.  If the software is modified by someone else and passed on, we
+want its recipients to know that what they have is not the original, so
+that any problems introduced by others will not reflect on the original
+authors' reputations.
+
+  Finally, any free program is threatened constantly by software
+patents.  We wish to avoid the danger that redistributors of a free
+program will individually obtain patent licenses, in effect making the
+program proprietary.  To prevent this, we have made it clear that any
+patent must be licensed for everyone's free use or not licensed at all.
+
+  The precise terms and conditions for copying, distribution and
+modification follow.
+
+                   GNU GENERAL PUBLIC LICENSE
+   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+  0. This License applies to any program or other work which contains
+a notice placed by the copyright holder saying it may be distributed
+under the terms of this General Public License.  The "Program", below,
+refers to any such program or work, and a "work based on the Program"
+means either the Program or any derivative work under copyright law:
+that is to say, a work containing the Program or a portion of it,
+either verbatim or with modifications and/or translated into another
+language.  (Hereinafter, translation is included without limitation in
+the term "modification".)  Each licensee is addressed as "you".
+
+Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope.  The act of
+running the Program is not restricted, and the output from the Program
+is covered only if its contents constitute a work based on the
+Program (independent of having been made by running the Program).
+Whether that is true depends on what the Program does.
+
+  1. You may copy and distribute verbatim copies of the Program's
+source code as you receive it, in any medium, provided that you
+conspicuously and appropriately publish on each copy an appropriate
+copyright notice and disclaimer of warranty; keep intact all the
+notices that refer to this License and to the absence of any warranty;
+and give any other recipients of the Program a copy of this License
+along with the Program.
+
+You may charge a fee for the physical act of transferring a copy, and
+you may at your option offer warranty protection in exchange for a fee.
+
+  2. You may modify your copy or copies of the Program or any portion
+of it, thus forming a work based on the Program, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+    a) You must cause the modified files to carry prominent notices
+    stating that you changed the files and the date of any change.
+
+    b) You must cause any work that you distribute or publish, that in
+    whole or in part contains or is derived from the Program or any
+    part thereof, to be licensed as a whole at no charge to all third
+    parties under the terms of this License.
+
+    c) If the modified program normally reads commands interactively
+    when run, you must cause it, when started running for such
+    interactive use in the most ordinary way, to print or display an
+    announcement including an appropriate copyright notice and a
+    notice that there is no warranty (or else, saying that you provide
+    a warranty) and that users may redistribute the program under
+    these conditions, and telling the user how to view a copy of this
+    License.  (Exception: if the Program itself is interactive but
+    does not normally print such an announcement, your work based on
+    the Program is not required to print an announcement.)
+
+These requirements apply to the modified work as a whole.  If
+identifiable sections of that work are not derived from the Program,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works.  But when you
+distribute the same sections as part of a whole which is a work based
+on the Program, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Program.
+
+In addition, mere aggregation of another work not based on the Program
+with the Program (or with a work based on the Program) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+  3. You may copy and distribute the Program (or a work based on it,
+under Section 2) in object code or executable form under the terms of
+Sections 1 and 2 above provided that you also do one of the following:
+
+    a) Accompany it with the complete corresponding machine-readable
+    source code, which must be distributed under the terms of Sections
+    1 and 2 above on a medium customarily used for software interchange; or,
+
+    b) Accompany it with a written offer, valid for at least three
+    years, to give any third party, for a charge no more than your
+    cost of physically performing source distribution, a complete
+    machine-readable copy of the corresponding source code, to be
+    distributed under the terms of Sections 1 and 2 above on a medium
+    customarily used for software interchange; or,
+
+    c) Accompany it with the information you received as to the offer
+    to distribute corresponding source code.  (This alternative is
+    allowed only for noncommercial distribution and only if you
+    received the program in object code or executable form with such
+    an offer, in accord with Subsection b above.)
+
+The source code for a work means the preferred form of the work for
+making modifications to it.  For an executable work, complete source
+code means all the source code for all modules it contains, plus any
+associated interface definition files, plus the scripts used to
+control compilation and installation of the executable.  However, as a
+special exception, the source code distributed need not include
+anything that is normally distributed (in either source or binary
+form) with the major components (compiler, kernel, and so on) of the
+operating system on which the executable runs, unless that component
+itself accompanies the executable.
+
+If distribution of executable or object code is made by offering
+access to copy from a designated place, then offering equivalent
+access to copy the source code from the same place counts as
+distribution of the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+  4. You may not copy, modify, sublicense, or distribute the Program
+except as expressly provided under this License.  Any attempt
+otherwise to copy, modify, sublicense or distribute the Program is
+void, and will automatically terminate your rights under this License.
+However, parties who have received copies, or rights, from you under
+this License will not have their licenses terminated so long as such
+parties remain in full compliance.
+
+  5. You are not required to accept this License, since you have not
+signed it.  However, nothing else grants you permission to modify or
+distribute the Program or its derivative works.  These actions are
+prohibited by law if you do not accept this License.  Therefore, by
+modifying or distributing the Program (or any work based on the
+Program), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Program or works based on it.
+
+  6. Each time you redistribute the Program (or any work based on the
+Program), the recipient automatically receives a license from the
+original licensor to copy, distribute or modify the Program subject to
+these terms and conditions.  You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties to
+this License.
+
+  7. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License.  If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Program at all.  For example, if a patent
+license would not permit royalty-free redistribution of the Program by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Program.
+
+If any portion of this section is held invalid or unenforceable under
+any particular circumstance, the balance of the section is intended to
+apply and the section as a whole is intended to apply in other
+circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system, which is
+implemented by public license practices.  Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+  8. If the distribution and/or use of the Program is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Program under this License
+may add an explicit geographical distribution limitation excluding
+those countries, so that distribution is permitted only in or among
+countries not thus excluded.  In such case, this License incorporates
+the limitation as if written in the body of this License.
+
+  9. The Free Software Foundation may publish revised and/or new versions
+of the General Public License from time to time.  Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+Each version is given a distinguishing version number.  If the Program
+specifies a version number of this License which applies to it and "any
+later version", you have the option of following the terms and conditions
+either of that version or of any later version published by the Free
+Software Foundation.  If the Program does not specify a version number of
+this License, you may choose any version ever published by the Free Software
+Foundation.
+
+  10. If you wish to incorporate parts of the Program into other free
+programs whose distribution conditions are different, write to the author
+to ask for permission.  For software which is copyrighted by the Free
+Software Foundation, write to the Free Software Foundation; we sometimes
+make exceptions for this.  Our decision will be guided by the two goals
+of preserving the free status of all derivatives of our free software and
+of promoting the sharing and reuse of software generally.
+
+                           NO WARRANTY
+
+  11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
+FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW.  EXCEPT WHEN
+OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
+PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
+OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.  THE ENTIRE RISK AS
+TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.  SHOULD THE
+PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
+REPAIR OR CORRECTION.
+
+  12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
+REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
+INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
+OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
+TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
+YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
+PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGES.
+
+                    END OF TERMS AND CONDITIONS
+
+           How to Apply These Terms to Your New Programs
+
+  If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+  To do so, attach the following notices to the program.  It is safest
+to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+    <one line to give the program's name and a brief idea of what it does.>
+    Copyright (C) <year>  <name of author>
+
+    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 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+
+
+Also add information on how to contact you by electronic and paper mail.
+
+If the program is interactive, make it output a short notice like this
+when it starts in an interactive mode:
+
+    Gnomovision version 69, Copyright (C) year name of author
+    Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+    This is free software, and you are welcome to redistribute it
+    under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License.  Of course, the commands you use may
+be called something other than `show w' and `show c'; they could even be
+mouse-clicks or menu items--whatever suits your program.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the program, if
+necessary.  Here is a sample; alter the names:
+
+  Yoyodyne, Inc., hereby disclaims all copyright interest in the program
+  `Gnomovision' (which makes passes at compilers) written by James Hacker.
+
+  <signature of Ty Coon>, 1 April 1989
+  Ty Coon, President of Vice
+
+This General Public License does not permit incorporating your program into
+proprietary programs.  If your program is a subroutine library, you may
+consider it more useful to permit linking proprietary applications with the
+library.  If this is what you want to do, use the GNU Library General
+Public License instead of this License.
diff --git a/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite2.0/README.md b/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite2.0/README.md
new file mode 100755 (executable)
index 0000000..1ced010
--- /dev/null
@@ -0,0 +1,125 @@
+## Dependency:
+
+1. python2.7
+2. python-setuptools python-support python-pip
+   1. Ubuntu
+      `sudo apt-get install python-setuptools python-support python-pip`
+   2. Fedora(RHEL)
+      `sudo yum install python-setuptools python-support python-pip`
+   3. openSUSE(TIZEN)
+      `sudo zypper install python-setuptools python-support python-pip`
+3. python-requests(>=1.1)
+   `sudo pip install requests`
+
+## How to build Debian package:
+
+Host with Ubuntu OS recommended.
+
+Run the command below to build from source code and get Debian package:
+
+`dpkg-buildpackage`
+
+## How to build RPM package:
+
+Host with Fedora OS recommended.
+
+Run the command below to build from source code and get RPM package:
+
+```
+make -C packaging/
+rpmbuild -tb packaging/testkit-lite_<version>.tar.gz --nodeps
+```
+
+Host with Ubuntu OS, we need to add a workaround to support the RPM build:
+
+`rpmbuild --define 'python_sitelib /usr/lib/python2.7/site-packages' -tb packaging/testkit-lite_<version>.tar.gz --nodeps`
+
+## How to install:
+
+Install testkit lite from source code:
+
+`sudo python setup.py install --record /var/log/testkit-lite.files`
+
+Install testkit lite from debian build:
+
+`sudo dpkg -i ../testkit-lite_<version>_all.deb`
+
+## How to uninstall:
+
+Uninstall testkit-lite installed with `setup.py install`:
+
+`cat /var/log/testkit-lite.files | sudo xargs rm -rf`
+
+Uninstall testkit-lite installed with `debian`:
+
+`sudo dpkg -r testkit-lite`
+
+## How to use:
+
+1. You can run case on target:
+   1. For web test cases:
+
+   `testkit-lite -f device:"<somewhere>/<package_name>/tests.xml" -e 'WRTLauncher <package_name>'`
+
+   2. For native test cases:
+
+     `testkit-lite -f device:"<somewhere>/<package_name>/tests.xml"`
+
+2. You can run case in single mode :
+   1. For web test cases:
+
+      `testkit-lite -f "<somewhere>/<package_name>/tests.xml" -e 'WRTLauncher <package_name>' --comm localhost`
+
+   2. For native test cases:
+
+      `testkit-lite -f "<somewhere>/<package_name>/tests.xml" --comm localhost`
+
+3. You can select on parser engine to simply conduct one or more `tests.xml` on target:
+
+   `testkit-lite -f device:"<somewhere>/<package_name1>/tests.xml ... <somewhere>/<package_namen>/tests.xml" -e 'WRTLauncher <package_name1> ... <package_namen>'`
+
+4. If you want to execute both auto and manual tests:
+
+   `testkit-lite -f device:"<somewhere>/<package_name>/tests.xml"`
+
+5. If you just want to execute manual tests:
+
+   `testkit-lite -f device:"<somewhere>/<package_name>/tests.xml" -M`
+
+6. If you just want to execute auto tests:
+
+   `testkit-lite -f device:"<somewhere>/<package_name>/tests.xml" -A`
+
+7. If you want to save test result to another file, by default it'll be under `/opt/testkit/lite/latest`:
+
+   `testkit-lite -f device:"<somewhere>/<package_name>/tests.xml" -o <somewhere>/xxx.xml`
+
+8. If you want to choose some filters:
+
+   `testkit-lite -f device:"<somewhere>/<package_name>/tests.xml" --status level1 --type type1 ...`
+
+9. If you want to run test according capability:
+
+   `testkit-lite -f device:"<somewhere>/<package_name>/tests.xml" --capability capability.xml`
+
+10. At last, you can freely compose the above parameters together:
+
+    `testkit-lite -f <somewhere1>/tests.xml <somewhere2>/tests.xml -A --priority P1 --type type1 ...`
+
+## Get Results:
+
+Test report will be generated as tests.result.xml.The result will be under `/opt/testkit/lite/latest` after execution, you can also check the history results in `/opt/testkit/lite/yyyy-mm-dd-HH:MM:SS.NNNNNN`.
+
+## View Results:
+
+Test report can be viewed in HTML format, so the data in the xml result file looks more human friendly.
+
+Please follow the following steps to view test report:
+
+1. Copy files: `application.js back_top.png jquery.min.js testresult.xsl tests.css` under directory `/opt/testkit/lite/xsd/`
+2. Put the files from step 1) under the same directory as the xml result file
+3. Open xml result file with a web browser(IE, Chrome or Firefox)
+
+## Known Issues:
+
+N/A
diff --git a/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite2.0/VERSION b/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite2.0/VERSION
new file mode 100755 (executable)
index 0000000..3e1feef
--- /dev/null
@@ -0,0 +1,4 @@
+[public_version]
+version=TESTKIT2_3.0
+[internal_version]
+version=TESTKIT2_3.0.1-151106
diff --git a/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite2.0/debian/changelog b/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite2.0/debian/changelog
new file mode 100755 (executable)
index 0000000..c9a8298
--- /dev/null
@@ -0,0 +1,5 @@
+testkit-lite (3.1.12) unstable; urgency=low
+
+  * Public Release.
+
+ -- Shaofeng Tang <shaofeng.tang@intel.com>  Fri, 21 Feb 2014 11:13:11 +0800
diff --git a/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite2.0/debian/compat b/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite2.0/debian/compat
new file mode 100755 (executable)
index 0000000..45a4fb7
--- /dev/null
@@ -0,0 +1 @@
+8
diff --git a/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite2.0/debian/control b/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite2.0/debian/control
new file mode 100755 (executable)
index 0000000..4190c6f
--- /dev/null
@@ -0,0 +1,16 @@
+Source: testkit-lite
+Section: utils
+Priority: standard
+Maintainer: Cathy Shen <cathy.shen@intel.com>
+Build-Depends: debhelper (>= 8.0.0), python-setuptools, python-support (>= 0.8.4)
+Standards-Version: 3.9.3
+Homepage: https://github.com/testkit/testkit-lite
+#Vcs-Git: git://git.debian.org/collab-maint/testkit-manager.git
+#Vcs-Browser: http://git.debian.org/?p=collab-maint/testkit-manager.git;a=summary
+
+Package: testkit-lite
+Architecture: all
+Depends: ${misc:Depends}, ${python:Depends}, python-dbus, python-gobject, python-gtk2
+XB-Python-Version: ${python:Versions}
+Description: Test runner for test execution.
+
diff --git a/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite2.0/debian/copyright b/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite2.0/debian/copyright
new file mode 100755 (executable)
index 0000000..71edd1c
--- /dev/null
@@ -0,0 +1,27 @@
+Format: http://dep.debian.net/deps/dep5
+Source: https://github.com/testkit/testkit-lite
+
+Files: *
+Copyright: 2012-2013 Intel Corp. 
+License: GPL-2.0
+
+Files: debian/*
+Copyright: 2012-2013 Intel Corp.
+License: GPL-2.0
+
+License: GPL-2.0
+ 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 of the License
+ .
+ This package is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ GNU General Public License for more details.
+ .
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+ .
+ On Debian systems, the complete text of the GNU General
+ Public License version 3 can be found in "/usr/share/common-licenses/GPL-3".
+
diff --git a/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite2.0/debian/docs b/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite2.0/debian/docs
new file mode 100755 (executable)
index 0000000..e845566
--- /dev/null
@@ -0,0 +1 @@
+README
diff --git a/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite2.0/debian/files b/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite2.0/debian/files
new file mode 100755 (executable)
index 0000000..666bfc2
--- /dev/null
@@ -0,0 +1 @@
+testkit-lite_3.1.12_all.deb utils standard
diff --git a/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite2.0/debian/postinst b/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite2.0/debian/postinst
new file mode 100755 (executable)
index 0000000..5685df7
--- /dev/null
@@ -0,0 +1,7 @@
+#!/bin/sh
+
+# Set permissions
+mkdir -p /opt/testkit/lite3.0/test_packages
+chmod ugo+rwx -R /opt/testkit/lite3.0
+ln -fs /usr/share/pyshared/testkitlite /usr/lib/python2.7/dist-packages/testkitlite
+
diff --git a/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite2.0/debian/rules b/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite2.0/debian/rules
new file mode 100755 (executable)
index 0000000..abde6ef
--- /dev/null
@@ -0,0 +1,5 @@
+#!/usr/bin/make -f
+
+%:
+       dh $@
+
diff --git a/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite2.0/doc/Makefile.am b/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite2.0/doc/Makefile.am
new file mode 100755 (executable)
index 0000000..41cb9ef
--- /dev/null
@@ -0,0 +1,18 @@
+# Copyright (C) 2012 Intel Corporation
+# 
+# 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
+# of the License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# Authors:
+#              Zhang, Huihui <huihuix.zhang@intel.com>
+#              Wendong,Sui  <weidongx.sun@intel.com>
+
+testkitdocdir = /opt/testkit/lite3.0/doc
+dist_testkitdoc_DATA = testkit-lite_user_guide_for_tct.pdf
diff --git a/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite2.0/doc/test_definition_schema.pdf b/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite2.0/doc/test_definition_schema.pdf
new file mode 100755 (executable)
index 0000000..2c8b267
Binary files /dev/null and b/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite2.0/doc/test_definition_schema.pdf differ
diff --git a/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite2.0/doc/testkit-lite_tutorial.pdf b/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite2.0/doc/testkit-lite_tutorial.pdf
new file mode 100755 (executable)
index 0000000..fec9b26
Binary files /dev/null and b/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite2.0/doc/testkit-lite_tutorial.pdf differ
diff --git a/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite2.0/doc/testkit-lite_user_guide.pdf b/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite2.0/doc/testkit-lite_user_guide.pdf
new file mode 100755 (executable)
index 0000000..bab774e
Binary files /dev/null and b/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite2.0/doc/testkit-lite_user_guide.pdf differ
diff --git a/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite2.0/packaging/Makefile b/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite2.0/packaging/Makefile
new file mode 100755 (executable)
index 0000000..24da850
--- /dev/null
@@ -0,0 +1,21 @@
+PKG_NAME := testkit-lite
+SPECFILE = $(addsuffix .spec, $(PKG_NAME))
+PKG_VERSION := $(shell grep '^Version: ' $(SPECFILE)|awk '{print $$2}')
+
+TARBALL := $(PKG_NAME)_$(PKG_VERSION).tar.gz
+
+dsc: $(TARBALL)
+               $(eval MD5=$(shell md5sum $(TARBALL) | sed "s/  / $(shell stat -c '%s' $(TARBALL)) /"))
+                       @sed  -i 's/^Version:.*/Version: $(PKG_VERSION)/' $(PKG_NAME).dsc
+                       @sed  -i 's/ [a-f0-9]\+ [0-9]\+ $(PKG_NAME).*tar.*/ $(MD5)/' $(PKG_NAME).dsc
+
+$(TARBALL):
+               cd "$$(git rev-parse --show-toplevel)" \
+                       && git archive --prefix $(PKG_NAME)-$(PKG_VERSION)/ HEAD \
+                       | gzip > "$(CURDIR)/$(TARBALL)"
+
+clean:
+               rm -f $(PKG_NAME)*.tar.gz
+
+all: clean dsc
+
diff --git a/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite2.0/packaging/testkit-lite.dsc b/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite2.0/packaging/testkit-lite.dsc
new file mode 100755 (executable)
index 0000000..cfd7043
--- /dev/null
@@ -0,0 +1,11 @@
+Source: testkit-lite
+Section: utils
+Priority: standard
+Maintainer: Lei Yang <lei.a.yang@intel.com>
+Build-Depends: debhelper (>= 8.0.0), python-setuptools, python-support (>= 0.8.4)
+Standards-Version: 3.9.2
+Homepage: https://github.com/testkit/testkit-manager
+Version: 3.1.12
+Files:
+ e3b0bfd4442c7301aa9982201c6ebd3b 1398131 testkit-lite_3.1.11.tar.gz
+
diff --git a/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite2.0/packaging/testkit-lite.spec b/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite2.0/packaging/testkit-lite.spec
new file mode 100755 (executable)
index 0000000..a6b0fd7
--- /dev/null
@@ -0,0 +1,52 @@
+Summary: TCT-Lite
+Name: testkit-lite
+Version: 3.1.12
+Release: 1
+License: GPLv2
+Group: Applications/System
+Source: %{name}_%{version}.tar.gz
+
+BuildRequires: python-distribute
+
+%{!?python_sitelib: %define python_sitelib %(python -c "from distutils.sysconfig import get_python_lib; print get_python_lib()")}
+
+%description
+testkit-lite is a test runner with command-line interface.It has the following functions 
+1. Accepts .xml test case descriptor files as input. 
+2. drives automatic test execution. 
+3. provide multiple options to meet various test requirements. 
+
+%prep
+%setup -q
+
+%build
+
+%install
+python setup.py install --prefix=%{_prefix} --root=%{buildroot}
+# remove tests
+rm -rf %{buildroot}/%{python_sitelib}/tests
+
+%clean
+rm -rf %{buildroot}
+
+%post
+# Set permissions
+chmod ugo+rwx /opt/testkit/lite3.0
+
+%files
+%{python_sitelib}/testkitlite/*
+%{python_sitelib}/testkit_lite-*.egg-info/*
+/etc/dbus-1/system.d/com.intel.testkit.conf
+/opt/testkit/lite3.0/VERSION
+/opt/testkit/lite3.0/commodule/CONFIG
+/opt/testkit/lite3.0/mh.html
+%{_bindir}/testkit-lite
+%{_bindir}/testkit-lite-dbus
+%defattr(-,root,root)
+
+%doc
+/opt/testkit/lite3.0/testkit-lite_user_guide.pdf
+/opt/testkit/lite3.0/testkit-lite_tutorial.pdf
+/opt/testkit/lite3.0/test_definition_schema.pdf
+
+%changelog
diff --git a/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite2.0/resource/mh.html b/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite2.0/resource/mh.html
new file mode 100755 (executable)
index 0000000..4617c18
--- /dev/null
@@ -0,0 +1,76 @@
+<html>
+<head>
+<title>Web Manual Test Harness</title>
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<style type="text/css">
+body { font-family:Verdana; font-size:14px; margin:0;}
+#container-div {border: 0;margin:0 auto; width:100%;}
+#sidebar-left {border: 0;float:left; width:6px; height:100%;}
+#sidebar-right {border: 0;float:right; width:6px; height:100%;}
+#content-div {border: 0;margin:0 7px !important; height:100%;}
+.button {display:inline-block;min-width: 30px; max-width: 100px; margin-top: 3px;margin-bottom: 3px;padding: 3px}
+#back-bt, #forward-bt {max-width: 20px;}
+#case-info-area {border 0;text-align:left;}
+#test-entry, #refer-test-entry {font-size: 10px;color: red}
+#test-entry-area, #refer-test-entry-area {font-size: 10px;}
+#run-test-area, #result-area {text-align:right; margin:0 auto;padding:0;}
+iframe {border: 1px solid black;width: 100%; height: 600px;}
+</style>
+<script>
+function run_test(){
+    document.getElementById("test-area").src = document.getElementById("test-entry").textContent;
+};
+
+function run_refer_test(){
+    document.getElementById("test-area").src = document.getElementById("refer-test-entry").textContent;
+};
+
+function result_handler(){
+    try{
+        window.stop();
+    } catch(e) {
+        document.execCommand('Stop');
+    }
+    window.stop();
+    document.getElementById("case-info-area").className = this.name
+};
+
+function init_mh(){
+    document.getElementById("case-info-area").className = "READY";
+    document.getElementById("run-test-bt").addEventListener("click", run_test, false);
+    document.getElementById("run-refer-test-bt").addEventListener("click", run_refer_test, false);
+    document.getElementById("back-bt").addEventListener("click", result_handler, false);
+    document.getElementById("pass-bt").addEventListener("click", result_handler, false);
+    document.getElementById("fail-bt").addEventListener("click", result_handler, false);
+    document.getElementById("block-bt").addEventListener("click", result_handler, false);
+    document.getElementById("forward-bt").addEventListener("click", result_handler, false);
+    document.getElementById("done-bt").addEventListener("click", result_handler, false);
+};
+</script>
+</head>
+<body onload="init_mh()">
+<div id="container-div">
+    <div id="sidebar-left"></div>
+    <div id="sidebar-right"></div>
+    <div id="content-div">
+        <div id="run-test-area">
+            <input type="button" id="back-bt" name="BACK" class="button" value="<"></input>
+            <input type="button" id="run-test-bt" class="button" value="Run Test"></input>
+            <input type="button" id="run-refer-test-bt" class="button" value="Run Refer Test"></input>
+            <input type="button" id="forward-bt" name="FORWARD" class="button" value=">"></input>
+        </div>
+        <div id=result-area>
+                <input type="button" id="pass-bt" name="PASS" class="button" value="PASS"></input>
+                <input type="button" id="fail-bt" name="FAIL" class="button" value="FAIL"></input>
+                <input type="button" id="block-bt" name="BLOCK" class="button" value="BLOCK"></input>
+                <input type="button" id="done-bt" name="DONE" class="button" value="DONE"></input>
+        </div>
+        <div id="case-info-area">
+            <div id="test-entry-area">Test Entry: <span id="test-entry">http://www.baidu.com</span></div>
+            <div id="refer-test-entry-area">Refer Test Entry: <span id="refer-test-entry">http://www.sina.com</span></div>
+        </div>
+        <iframe id="test-area"></iframe>
+    </div>
+</div>
+</body>
+</html>
diff --git a/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite2.0/setup.py b/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite2.0/setup.py
new file mode 100755 (executable)
index 0000000..b243b69
--- /dev/null
@@ -0,0 +1,52 @@
+#!/usr/bin/python
+#
+# Copyright (C) 2012 Intel Corporation
+#
+# 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
+# of the License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# Authors:
+#              Yuanyuan,Zou  <yuanyuanx.zou@intel.com>
+
+from setuptools import setup, find_packages
+import os
+from stat import ST_MODE, S_ISDIR
+from distutils.command.install_data import install_data
+
+
+class post_install_cmd(install_data):
+    def run (self):
+        install_data.run(self)
+        if os.name == 'posix':
+            for path in ['/opt/testkit/lite3.0','/opt/testkit/lite3.0/commodule/']:
+                try:
+                    mode = os.stat(path)[ST_MODE]
+                    mode |= 066
+                    os.chmod(path, mode)
+                except OSError as err:
+                    pass
+
+
+setup(
+    name = "testkit-lite",
+    description = "Test runner for test execution",
+    url = "https://github.com/testkit/testkit-lite",
+    author = "Shaofeng Tang",
+    author_email = "shaofeng.tang@intel.com",
+    version = "3.1.12",
+    include_package_data = True,
+    data_files = [('/opt/testkit/lite3.0', ['VERSION', 'doc/testkit-lite_user_guide.pdf', 'doc/testkit-lite_tutorial.pdf', 'doc/test_definition_schema.pdf']),
+                  ('/opt/testkit/lite3.0/commodule/', ['CONFIG']),
+                  ('/opt/testkit/lite3.0', ['resource/mh.html']),
+                  ('/etc/dbus-1/system.d/', ['dbus/com.intel.testkit.conf'])],
+    scripts = ('testkit-lite', 'dbus/testkit-lite-dbus'),
+    packages = find_packages(),
+    cmdclass = {'install_data': post_install_cmd},
+)
diff --git a/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite2.0/temp/temp b/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite2.0/temp/temp
new file mode 100755 (executable)
index 0000000..e69de29
diff --git a/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite2.0/testkit-lite b/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite2.0/testkit-lite
new file mode 100755 (executable)
index 0000000..e4ed526
--- /dev/null
@@ -0,0 +1,635 @@
+#!/usr/bin/python
+#
+# Copyright (C) 2012 Intel Corporation
+#
+# 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
+# of the License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# Authors:
+#              Jing,Wang  <jing.j.wang@intel.com>
+#              Yuanyuan,Zou  <yuanyuanx.zou@intel.com>
+""" testkit lite tools"""
+
+import os
+import sys
+import traceback
+import platform
+import signal
+import ConfigParser
+import re
+import xml.etree.ElementTree as etree
+from optparse import OptionParser, make_option
+from datetime import datetime
+import json
+
+from testkitlite.util.errors import TestCaseNotFoundException, TestEngineException
+
+
+os.environ["DBUS_SESSION_BUS_ADDRESS"]='unix:path=/run/dbus/system_bus_socket'
+os.environ["DISPLAY"]=':0.0'
+
+try:
+    # import logger
+    from testkitlite.util.log import LOGGER
+except ImportError, err:
+    print "[ Error: loading logging failed, error: %s ]\n" % err
+    print "try to run command " \
+        "'export PYTHONPATH=/usr/local/lib/python2.7/dist-packages' or " \
+        "'export PYTHONPATH=/usr/local/lib/python2.7/site-packages' to resolve module missed issue"
+    sys.exit(1)
+
+
+# get platform version info
+OS_VER = platform.system()
+JOIN = os.path.join
+EXISTS = os.path.exists
+DIRNAME = os.path.dirname
+BASENAME = os.path.basename
+ABSPATH = os.path.abspath
+SPLIT = os.path.split
+ISLINK = os.path.islink
+
+TESTKIT_DIR = "/opt/testkit/lite3.0"
+if not OS_VER == "Linux" and not OS_VER == "Darwin":
+    TESTKIT_DIR = DIRNAME(ABSPATH(__file__))
+    sys.path += [JOIN(TESTKIT_DIR)]
+    TESTKIT_DIR = JOIN(TESTKIT_DIR, "results")
+
+LOG_DIR = TESTKIT_DIR
+TEST_PACKAGES_DIR = JOIN(TESTKIT_DIR, "test_packages")
+COMMON_FILTERS = {
+    "suite": [],
+    "set": [],
+    "priority": [],
+    "id": [],
+    "type": [],
+    "status": [],
+    "component": [],
+    "set_type": []}
+down_status = False
+remote_test = False
+can_merge_result = False
+device_id = ""
+device_locked = False
+RUNNER = None
+
+# detect version option
+if "--version" in sys.argv:
+    try:
+        CONFIG = ConfigParser.ConfigParser()
+        if platform.system() == "Linux":
+            CONFIG.read('/opt/testkit/lite3.0/VERSION')
+        else:
+            VERSION_FILE = JOIN(sys.path[0], 'VERSION')
+            CONFIG.read(VERSION_FILE)
+        VERSION = CONFIG.get('public_version', 'version')
+        LOGGER.info("V%s" % VERSION)
+        sys.exit()
+    except ConfigParser.Error, err:
+        LOGGER.error(
+            "[ Error: fail to parse version info, error: %s ]\n" % err)
+        sys.exit(1)
+
+# detect internal version option
+if "--internal-version" in sys.argv:
+    try:
+        CONFIG = ConfigParser.ConfigParser()
+        if platform.system() == "Linux":
+            CONFIG.read('/opt/testkit/lite3.0/VERSION')
+        else:
+            VERSION_FILE = JOIN(sys.path[0], 'VERSION')
+            CONFIG.read(VERSION_FILE)
+        VERSION = CONFIG.get('internal_version', 'version')
+        print VERSION
+        sys.exit()
+    except ConfigParser.Error, err:
+        print "[ Error: fail to parse version info, error: %s ]\n" % err
+        sys.exit(1)
+#try:
+#    CONFIG = ConfigParser.ConfigParser()
+#    CONFIG.read('/opt/testkit/lite3.0/commodule/CONFIG')
+#    tizen = CONFIG.get('TIZEN_USER','tizen_user')
+#    if tizen:
+#        os.environ['TIZEN_USER'] = tizen
+#except:
+#    pass   
+
+def varnarg(option, opt_str, value, parser):
+    """ parser srg"""
+    value = []
+    import re
+    for arg in parser.rargs:
+        if re.search('^--.+', arg) or \
+                re.search('^-[\D]', arg):
+            break
+        value.append(arg)
+
+    del parser.rargs[:len(value)]
+    setattr(parser.values, option.dest, value)
+
+def unlock_and_exit(exit_code=signal.SIGINT):
+    if device_locked:
+        release_device_lock(device_id)
+    sys.exit(exit_code)
+
+def final_clean_test():
+    try:
+        if RUNNER is not None:
+            if RUNNER.session_id:
+                RUNNER.finalize_test(RUNNER.session_id)
+            if can_merge_result:
+                RUNNER.merge_resultfile(START_TIME, CURRENT_LOG_DIR)
+            if down_status:
+                clean_testxml(OPTIONS.testxml, remote_test)
+    except (KeyboardInterrupt, Exception), err:
+        pass
+
+def sig_exit_handler(*args):
+    final_clean_test()
+    LOGGER.info("\n[ exiting testkit-lite on system signal ]\n")
+    unlock_and_exit()
+
+if platform.system() == "Linux":
+    signal.signal(signal.SIGTSTP, sig_exit_handler)
+signal.signal(signal.SIGTERM, sig_exit_handler)
+try:
+    OPTION_LIST = [
+        make_option("-f", "--testxml", dest="testxml",
+                    action="callback", callback=varnarg,
+                    help="Specify the path of test definition file (tests.xml)."
+                    " If run more one test package,just list the all the path "
+                    " of \"tests.xml\" and separate with a whitespace"),
+        make_option("-D", "--dryrun", dest="bdryrun",
+                    action="store_true",
+                    help="Dry-run the selected test cases"),
+        make_option("-M", "--manual-only", dest="bmanualonly",
+                    action="store_true",
+                    help="Enable only manual tests"),
+        make_option("-A", "--auto-only", dest="bautoonly",
+                    action="store_true",
+                    help="Enable only auto tests"),
+        make_option("-o", "--output", dest="resultfile",
+                    help="Specify output file for result xml. \
+                    If more than one testxml provided, \
+                    results will be merged together to this output file"),
+        make_option("-e", dest="exttest", action="store",
+                    help="Launch external test with a launcher,\
+                         supports browser or other web-runtime"),
+        make_option("-k", "--worker", dest="worker", action="store",
+                    help="Specify a test engine for execution, use value 'default' by default"),
+       # make_option("-p", "--target-platform", dest="targetplatform",
+       #             action="store",
+       #             help="specify special test target platform, e.g. xw_android, chrome_ubuntu"),
+       # make_option("--webdriver-url", dest="wdurl", action="store",
+       #             help="specify special web driver listening url"),
+        make_option("--version", dest="version_info", action="store_true",
+                    help="Show version information"),
+        make_option("--internal-version", dest="internal_version_info",
+                    action="store_true",
+                    help="Show internal version information"),
+        make_option("--deviceid", dest="device_serial", action="store",
+                    help="set device serial information"),
+        make_option("--testprefix", dest="test_prefix", action="store",
+                    help="set prefix for test case entry"),
+        make_option("--testenvs", dest="test_env", action="store",
+                    help="set environs for test case execution, use ';' to separator multi option"),
+        make_option("--comm", dest="commodule", action="store",
+                    help="set commodule by default,"
+                    "set \"localhost\" for local web testing"),
+        make_option("--capability", dest="capability", action="store",
+                    help="set platform for sepecfic device capability"),
+        make_option("--debug", dest="debug", action="store_true",
+                    help="run in debug mode,more log information print out"),
+        make_option("--rerun", dest="rerun", action="store_true",
+                    help="check if rerun test mode"),
+        make_option("--non-active", dest="non_active", action="store_true",
+                    help="Disable the ability to set the result of \
+                    core manual cases from the console"),
+       # make_option("-d", "--debugip", dest="debugip", action="store",
+       #             help="specify tizen xwalk debug ip "),
+        make_option("--init-script", dest="initscript", action="store",
+                   help="init script before script"),
+        make_option("--post-script", dest="postscript", action="store",
+                   help="post script"),
+        make_option('--disable-dlog', dest="disabledlog", action="store_true",
+                   help="disable dlog information"),
+       # make_option('--user', dest="user", action="store",
+       #            help="setting test user")
+        make_option("--tizen-version", dest="tizenversion", action="callback", callback=varnarg, help="set tizen version infomation"),
+        make_option("--skip-tc", dest="skip_tc", action="callback", callback=varnarg, help ="Specify the testcase id for exclude from the test"),
+        make_option("--stub-port", dest="stubport", action="callback", callback=varnarg, help = "set testkit-stub port number")
+    ]
+
+    OPTION_LIST.extend([
+        make_option("--%s" % flt,
+                    dest="w%s" % flt, action="callback", callback=varnarg,
+                    help="Select the specified filter-rules : %s" % flt)
+        for flt in COMMON_FILTERS])
+
+    try:
+        # untrusted behaviour of %%prog
+        USAGE = "%%prog [options] -f [prefix:]\"<somewhere/test.xml>\" \n\
+forms:    %%prog  -f [prefix:]\"<somewhere>/test.xml\" \n\
+          %%prog  -f [prefix:]\"<somewhere>/test.xml\" -D\n\
+          %%prog  -f [prefix:]\"<somewhere>/test.xml\" -A\n\
+          %%prog  -f [prefix:]\"<somewhere>/test.xml\" -M\n\
+          %%prog  -f [prefix:]\"<somewhere>/test.xml\" --set <set_name>\n\
+          %%prog  -f [prefix:]\"<somewhere>/test.xml\" --type <type_name>\n\
+          %%prog  -f [prefix:]\"<somewhere>/test.xml\" --status <status_name>\n\
+          %%prog  -f [prefix:]\"<somewhere>/test.xml\" --priority <priority_value>\n\
+          %%prog  -f [prefix:]\"<somewhere>/test.xml\" --component <component_name>\n\
+          %%prog  -f [prefix:]\"<somewhere>/test.xml\" --id <case_id>\n\
+          %%prog  -f [prefix:]\"<somewhere>/test.xml\" --capability <capability_file> --comm <comm_type>\n\
+          %%prog  -f [prefix:]\"<somewhere>/test.xml\" --comm <comm_type>\n\
+          %%prog  -f [prefix:]\"<somewhere>/test1.xml <somewhere>/test2.xml <somewhere>/test3.xml\" \n\
+          %%prog  -f [prefix:]\"<somewhere>/test1.xml <somewhere>/test2.xml <somewhere>/test3.xml --testenvs 'wd-url=...;wd-debugip=...'\" \n\
+exmaples of \"prefix\" usage: \n\
+    run a web test with a test definition (XML file) from device side: \n\
+          %%prog -f device:\"/opt/usr/media/tct/opt/tct-websocket-w3c-tests/tests.xml\" -A \n\
+    run a web test with a test definition (XML file) from localhost: \n\
+          %%prog -f \"/opt/usr/media/tct/opt/tct-websocket-w3c-tests/tests.xml\" -A \n\
+exmaples of \"-e\" usage: \n\
+    run a web test package with TIZEN web-runtime, launcher provided in tests.xml, so \"-e\" is omitted: \n\
+          %%prog -f device:\"/opt/usr/media/tct/opt/tct-websocket-w3c-tests/tests.xml\" -A \n\
+    run a web test package with chrome browser: \n\
+          %%prog -f \"/usr/share/webapi-webkit-tests/tests.xml\" -e \
+'google-chrome --allow-file-access-from-files --disable-web-security --start-maximized --user-data-dir=/home/test/data /home/test/webrunner/index.html' -A --comm localhost \n\
+\n\
+Note: \n\
+          1) Proxy settings should be disabled when execute webapi packages\n\
+          2) TestLog is stored to %s/latest\n\
+          3) %%prog enables both auto and manual tests by default\n\
+          4) Obviously -A and -M are conflict options\n\
+          5) -e option does not support -D mode\n\
+          6) The test cases' order in the result files might be arbitrary,\
+when running same tests.xml with same options. This is caused \
+by python's API 'getiterator' from module 'xml.etree.ElementTree'\n\
+          7) run command 'testkit-lite', \
+it might not be able to locate module 'testkitlite.engines.\
+default.runner', \
+run command 'export PYTHONPATH=/usr/local/lib/python2.7/dist-packages' or \
+run command 'export PYTHONPATH=/usr/local/lib/python2.7/site-packages' \
+to resolve this issue" % (LOG_DIR)
+    except Exception:
+        USAGE = None
+
+    # detect non-params
+    if len(sys.argv) == 1:
+        sys.argv.append("-h")
+
+    PARSERS = OptionParser(option_list=OPTION_LIST, usage=USAGE)
+    (OPTIONS, ARGS) = PARSERS.parse_args()
+    # init test engine here
+    from testkitlite.util.connector import ConnectorBuilder
+    from testkitlite.util.process import get_device_lock, release_device_lock, clean_testxml
+    from testkitlite.util.session import TestSession
+    from testkitlite.util.errors import TestCaseNotFoundException, TestEngineException
+
+    #execute_type
+    exec_types = ["auto","manual"]
+    if OPTIONS.bautoonly and OPTIONS.bmanualonly:
+        raise ValueError("-A and -M are conflict")
+    elif OPTIONS.bautoonly:
+        exec_types.remove("manual")
+    elif OPTIONS.bmanualonly:
+        exec_types.remove("auto")
+
+    if OPTIONS.worker and OPTIONS.worker != 'webdriver':
+        raise ValueError('-k is just service for webdriver, you can not set it ,using default')
+
+    debugip = None
+    if OPTIONS.test_env:
+        #envs = OPTIONS.test_env.replace(';',' ').split(' ')
+        envs = OPTIONS.test_env.split(';')
+        for env_t in envs:
+            env_t = env_t.strip()
+            if not env_t:
+                continue
+            k, v = env_t.split('=')
+            if 'app_launcher' in v:
+                os.environ[k.strip()] = "app_launcher -s"
+            else:
+                os.environ[k.strip()] = v.strip()
+            if cmp(k.strip(),"wd-debugip") == 0:
+               debugip = v.strip()
+    if not os.environ.has_key('TIZEN_USER'):
+        try:
+            CONFIG = ConfigParser.ConfigParser()
+            CONFIG.read('/opt/testkit/lite3.0/commodule/CONFIG')
+            tizen = CONFIG.get('TIZEN','tizen_user')
+            if tizen:
+                os.environ['TIZEN_USER'] = tizen
+        except:
+            pass
+    # connector options
+    conn_opt = {}
+    #conn_opt['commodule'] = OPTIONS.commodule or "tizenmobile"
+    conn_opt['commodule'] = OPTIONS.commodule or "localhost"
+    conn_opt['deviceid'] = OPTIONS.device_serial
+    CONNECTOR = ConnectorBuilder(conn_opt).get_connector()
+    if CONNECTOR == None:
+        sys.exit(1)
+
+    device_id = CONNECTOR.get_device_info()['device_id']
+    os.environ['DEVICE_ID'] = device_id
+    if not OPTIONS.non_active:
+        device_locked = get_device_lock(device_id)
+        if not device_locked:
+            LOGGER.error("[ Error: Failed to get device for current session... ]\n")
+            sys.exit(1)
+
+    #modify at 2014.09.11
+    targetplatform = None
+    #debugip = None
+    if OPTIONS.exttest and OPTIONS.worker and OPTIONS.worker.upper() == 'WEBDRIVER':
+        if conn_opt['commodule'] == 'localhost':
+            targetplatform = "chrome_ubuntu"
+            os.environ['targetplatform'] = targetplatform
+        elif conn_opt['commodule'] == 'tizenmobile':
+            targetplatform = "xw_tizen"
+            os.environ['targetplatform'] = targetplatform
+        elif conn_opt['commodule'] == 'androidmobile':
+            targetplatform = "xw_android"
+            os.environ['targetplatform'] = targetplatform
+    # process test environ
+    if OPTIONS.test_env:
+        #envs = OPTIONS.test_env.replace(';',' ').split(' ')
+        envs = OPTIONS.test_env.split(';')
+        for env_t in envs:
+            env_t = env_t.strip()
+            if not env_t:
+                continue
+            k, v = env_t.split('=')
+            if 'app_launcher' in v:
+                os.environ[k.strip()] = "app_launcher -s"
+            else:
+                os.environ[k.strip()] = v.strip()
+
+    # load profile for wedrvier
+    if targetplatform:
+        webdriver_vars = {}
+        exec 'from testkitlite.capability.%s import initCapability' % targetplatform
+        if targetplatform.upper().find('TIZEN') >= 0:
+            if not debugip:
+                raise ValueError("For tizen xwalk, option --debugip is needed!")
+            webdriver_vars = initCapability('TEST_APP_ID', debugip)
+        elif targetplatform.upper().find('ANDROID') >= 0:
+            webdriver_vars = initCapability('TEST_PKG_NAME', 'TEST_ACTIVITY_NAME')
+        else:
+            webdriver_vars = initCapability()
+        os.environ['WEBDRIVER_VARS'] = json.dumps(webdriver_vars)
+
+    # process test environ
+   # if OPTIONS.test_env:
+   #     envs = OPTIONS.test_env.replace(';',' ').split(' ')
+   #     for env_t in envs:
+   #         env_t = env_t.strip()
+   #         if not env_t:
+   #             continue
+   #         k, v = env_t.split('=')
+   #         os.environ[k.strip()] = v.strip()
+    if OPTIONS.initscript:
+        os.environ['initscript'] = OPTIONS.initscript
+    if OPTIONS.postscript:
+        os.environ['postscript'] = OPTIONS.postscript
+    # load test defintion files
+    if "device:" in OPTIONS.testxml[0]:
+        if not CONNECTOR.is_support_remote():
+            raise ValueError("For '%s' mode, please test file without prefix 'device:' " % conn_opt['commodule'])
+
+        remote_test = True
+        try:
+            if not EXISTS(TEST_PACKAGES_DIR):
+                os.makedirs(TEST_PACKAGES_DIR)
+        except OSError, err:
+            LOGGER.error("[ Error: "
+                "can't create test package directory: %s, error: %s ]\n" %
+                        (TEST_PACKAGES_DIR, err))
+            unlock_and_exit()
+        REMOTE_TESTLITS = OPTIONS.testxml[0]
+        REMOTE_TESTLITS = REMOTE_TESTLITS.split(':')[1]
+        TESTLISTARRARY = REMOTE_TESTLITS.split()
+        LOCALARRY = []
+
+        for remote_file in TESTLISTARRARY:
+            tmp_remote_file = SPLIT(remote_file)
+            tmp_remote_folder = BASENAME(tmp_remote_file[0])
+            tmp_remote_test_xml = JOIN(
+                tmp_remote_folder, tmp_remote_file[1])
+            local_test_package = JOIN(
+                TEST_PACKAGES_DIR, tmp_remote_test_xml)
+            down_status = CONNECTOR.download_file(remote_file, local_test_package)
+            if not down_status:
+                LOGGER.error("Failed to get test file '%s' from device"
+                             % remote_file)
+                unlock_and_exit()
+            LOCALARRY.append(local_test_package)
+        OPTIONS.testxml = LOCALARRY
+    else:
+        if len(OPTIONS.testxml) == 1:
+            i, start, end = 0, 0, 0
+            LOCAL_TESTLISTS = []
+            temp_xml = OPTIONS.testxml[0]
+            while(i < len(temp_xml)):
+                tmp = temp_xml[i:len(temp_xml)]
+                if ".xml" in tmp:
+                    index = tmp.index(".xml") + 4 + i
+                    end = index
+                    i = index + 1
+                    LOCAL_TESTLISTS.append(temp_xml[start:end])
+                    start = index + 1
+                else:
+                    LOGGER.error("No xml found")
+                    break
+            OPTIONS.testxml = LOCAL_TESTLISTS
+
+
+    # load test engine
+    if OPTIONS.worker:
+        os.environ['WORKER'] = OPTIONS.worker
+
+    workername = OPTIONS.worker or 'default'
+    try:
+        exec "from testkitlite.engines.%s import TestWorker" % workername
+    except Exception as error:
+        raise TestEngineException(workername)
+    WORKER = TestWorker(CONNECTOR)
+
+    # create runner
+    RUNNER = TestSession(CONNECTOR, WORKER)
+    # apply all options
+    RUNNER.set_global_parameters(OPTIONS)
+
+    if OPTIONS.tizenversion is None:
+        LOGGER.error("[ Error : input your tizen version ]\n")
+        sys.exit(1)
+    else :
+        tizenver = OPTIONS.tizenversion[0]
+        VER_PATTERN = "^tizen_web_\d.\d|^tizen_native_\d.\d|^tizen_csharp_\d.\d"
+        pa = re.compile(VER_PATTERN, re.I)
+        ma = pa.match(tizenver)
+        if ma is None:
+             LOGGER.error("A required \"/opt/tct/"+tizenver+" could not be found.\n")
+             sys.exit(1)
+
+        RUNNER.set_tizenversion(tizenver)
+
+    if OPTIONS.stubport is not None:
+        port = OPTIONS.stubport[0]
+        RUNNER.set_stubport(port)
+
+    if OPTIONS.skip_tc is not None:
+        RUNNER.set_skip_tc(OPTIONS.skip_tc)
+
+    # set capability
+    if not RUNNER.get_capability(OPTIONS.capability):
+        unlock_and_exit()
+    # apply filter
+    WFILTERS = {}
+    for flt in COMMON_FILTERS:
+        if eval('OPTIONS.w%s' % flt):
+            WFILTERS[flt] = eval('OPTIONS.w%s' % flt)
+    RUNNER.add_filter_rules(**WFILTERS)
+
+    if not OPTIONS.testxml:
+        LOGGER.error("[ Error: not specify a test xml... ]\n")
+        unlock_and_exit()
+    # 1) prepare log dir
+    if OS_VER == "Linux" or OS_VER == "Darwin":
+        SESSION = datetime.today().isoformat('-') + str(os.getpid()) + "_session"
+    else:
+        SESSION = datetime.today().strftime("%Y-%m-%d_%H_%M_%S") + \
+                str(os.getpid()) + "_session"
+    CURRENT_LOG_DIR = JOIN(LOG_DIR, SESSION)
+    LATEST_DIR = JOIN(LOG_DIR, "latest")
+    try:
+        if EXISTS(LATEST_DIR):
+            os.remove(LATEST_DIR)
+        if ISLINK(LATEST_DIR):
+            os.remove(LATEST_DIR)
+        os.makedirs(CURRENT_LOG_DIR)
+        if os.name == "posix":
+            os.symlink(CURRENT_LOG_DIR, LATEST_DIR)
+    except IOError, err:
+        LOGGER.error("[ Error: create session log directory: "
+                     "%s failed, error: %s ]\n" % (CURRENT_LOG_DIR, err))
+    except OSError, err:
+        LOGGER.error("error : %s" % err)
+    finally:
+        if not EXISTS(CURRENT_LOG_DIR):
+            os.makedirs(CURRENT_LOG_DIR)
+
+    # 2) prepare run test
+    # run more than one tests.xml
+    # 1. run all auto cases from the xmls
+    # 2. run all manual cases from the xmls
+    TESTXMLS = set(OPTIONS.testxml)
+    for t in TESTXMLS:
+        if EXISTS(t):
+            filename = t
+            filename = os.path.splitext(filename)[0]
+            if OS_VER == "Linux" or OS_VER == "Darwin":
+                if not filename.startswith('/'):
+                    LOGGER.error("[ Error:"
+                          " xml file %s should start with '/' ]" % filename)
+                    unlock_and_exit()
+                file_items = filename.split('/')
+            else:
+                file_items = re.split(r'[/\\]+', filename)
+            if len(file_items) < 2 or file_items[-2] == "" or file_items[-1] == "":
+                LOGGER.error("[ Error:"
+                      " unable to find package name from %s ]" % t)
+                unlock_and_exit()
+            filename = file_items[-2] + '_' + file_items[-1]
+            filename = "%s.total" % BASENAME(filename)
+            resultfile = "%s.xml" % filename
+            resultfile = JOIN(CURRENT_LOG_DIR, resultfile)
+            try:
+                ep = etree.parse(t)
+                suiteparent = ep.getroot()
+            except etree.ParseError:
+                LOGGER.error("[ Error: no case found in testxml, "
+                             "pls check the test package ]\n")
+                unlock_and_exit()
+            no_test_definition = 1
+            for tf in ep.getiterator('test_definition'):
+                no_test_definition = 0
+            if no_test_definition:
+                suiteparent = etree.Element('test_definition')
+                suiteparent.tail = "\n"
+                for suite in ep.getiterator('suite'):
+                    suite.tail = "\n"
+                    suiteparent.append(suite)
+            WFILTERS['execution_type'] = exec_types
+            RUNNER.add_filter_rules(**WFILTERS)
+            RUNNER.apply_filter(suiteparent)
+            # merge duplicated test set under suite node
+            tset_list = set()
+            for suite in ep.getiterator('suite'):
+                for tset in suite.getiterator('set'):
+                    for testcase in tset.getiterator('testcase'):
+                        tset.remove(testcase)
+                    if tset.get('name') in tset_list:
+                        suite.remove(tset)
+                    else:
+                        tset_list.add(tset.get('name'))
+            try:
+                with open(resultfile, 'w') as output:
+                    tree = etree.ElementTree(element=suiteparent)
+                    tree.write(output)
+            except IOError, err:
+                LOGGER.error(
+                    "[ Error: create filtered total result file: %s failed, "
+                    "error: %s ]\n" % (resultfile, err))
+        else:
+            LOGGER.error("[ test xml file '%s' not found ]" % t)
+            unlock_and_exit()
+
+    for t in TESTXMLS:
+        for e_type in exec_types:
+            try:
+                WFILTERS['execution_type'] = [e_type]
+                RUNNER.add_filter_rules(**WFILTERS)
+                RUNNER.prepare_run(t, resultdir=CURRENT_LOG_DIR)
+            except IOError, err:
+                LOGGER.error("[ Error: prepare_run test xml: "
+                  "%s from testkit-lite failed, error: %s ]\n" % (t, err))
+
+    START_TIME = datetime.today().strftime("%Y-%m-%d_%H_%M_%S")
+    try:
+        can_merge_result = True
+        RUNNER.run_case(CURRENT_LOG_DIR)
+    except TestCaseNotFoundException, err:
+        LOGGER.info("\n[ Error: exiting testkit-lite on error: %s ]\n" % err)
+        unlock_and_exit()
+    except Exception, err:
+        clean_testxml(TESTXMLS, remote_test)
+        traceback.print_exc()
+        LOGGER.error("[ Error: run test failed, error: %s ]\n" % err)
+
+    try:
+        RUNNER.merge_resultfile(START_TIME, CURRENT_LOG_DIR)
+        clean_testxml(TESTXMLS, remote_test)
+        LOGGER.info("[ all tasks for testkit lite are accomplished, goodbye ]")
+        unlock_and_exit(0)
+    except Exception, err:
+        traceback.print_exc()
+        clean_testxml(TESTXMLS,remote_test)
+        LOGGER.error("[ Error: merge result failed, error: %s ]\n" % err)
+        unlock_and_exit()
+except (TestEngineException, KeyboardInterrupt), err:
+    final_clean_test()
+    LOGGER.info("\n[ exiting testkit-lite on user cancel ]\n")
+    unlock_and_exit()
+except Exception, err:
+    final_clean_test()
+    LOGGER.error("\n[ Error: exiting testkit-lite due to critical error: %s ]\n" % err)
+    traceback.print_exc()
+    unlock_and_exit()
diff --git a/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite2.0/testkit-merge b/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite2.0/testkit-merge
new file mode 100755 (executable)
index 0000000..113f570
--- /dev/null
@@ -0,0 +1,51 @@
+#!/usr/bin/python
+#
+# Copyright (C) 2014 Intel Corporation
+#
+# 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
+# of the License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+#
+# Authors: 
+#          Nicolas Zingile <n.zingile@gmail.com>
+
+import argparse
+from testkitmerge.merger import *
+
+def main():
+    argparser = argparse.ArgumentParser(description='Tool to merge testkit result xml files')
+    argparser.add_argument('-f', '--files', help='list of testkit xml result files', nargs='+')
+    argparser.add_argument('-o', '--outdir',  help='output directory of final result file', required=True)
+    argparser.add_argument('-n', '--name', help ='name of the final result file', default='result.xml')
+    args = argparser.parse_args()
+    print args
+
+    parser = etree.XMLParser(strip_cdata=False)
+    sourcexmltree = None
+    resultxmltree = None
+
+    for resultxml in args.files:
+       if not os.path.isfile(resultxml):
+           print "Error: the file '" + resultxml + "'doesn't exist !"
+           exit(1)
+       if not resultxml.endswith('.xml'):
+           print "Error: '" + resultxml + "' is not an xml file !"
+           exit(1)
+    for index in range(len(args.files)):
+       sourcexmltree =  etree.parse(args.files[index], parser)
+       resultxmltree = merge_testkitxml(sourcexmltree, resultxmltree)
+       
+    resultxmltree.write(os.path.join(args.outdir, args.name), pretty_print=True, encoding='utf8', method='xml', xml_declaration=True)
+
+if __name__ == "__main__":
+    main()
diff --git a/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite2.0/testkitlite/Makefile.am b/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite2.0/testkitlite/Makefile.am
new file mode 100755 (executable)
index 0000000..5a462d8
--- /dev/null
@@ -0,0 +1,20 @@
+# Copyright (C) 2012 Intel Corporation
+# 
+# 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
+# of the License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# Authors:
+#              Zhang, Huihui <huihuix.zhang@intel.com>
+#              Wendong,Sui  <weidongx.sun@intel.com>
+
+SUBDIRS = common engines
+
+testkitlitedir = /usr/lib/python2.7/dist-packages/testkitlite
+dist_testkitlite_SCRIPTS = __init__.py
diff --git a/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite2.0/testkitlite/__init__.py b/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite2.0/testkitlite/__init__.py
new file mode 100755 (executable)
index 0000000..8b13789
--- /dev/null
@@ -0,0 +1 @@
+
diff --git a/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite2.0/testkitlite/capability/Makefile.am b/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite2.0/testkitlite/capability/Makefile.am
new file mode 100755 (executable)
index 0000000..18f2503
--- /dev/null
@@ -0,0 +1,18 @@
+# Copyright (C) 2012 Intel Corporation
+# 
+# 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
+# of the License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# Authors:
+#              Zhang, Huihui <huihuix.zhang@intel.com>
+#              Wendong,Sui  <weidongx.sun@intel.com>
+
+testkitlitecapdir = /usr/lib/python2.7/dist-packages/testkitlite/capability
+dist_testkitlitecap_SCRIPTS = *.py
diff --git a/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite2.0/testkitlite/capability/__init__.py b/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite2.0/testkitlite/capability/__init__.py
new file mode 100755 (executable)
index 0000000..8b13789
--- /dev/null
@@ -0,0 +1 @@
+
diff --git a/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite2.0/testkitlite/capability/chrome_ubuntu.py b/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite2.0/testkitlite/capability/chrome_ubuntu.py
new file mode 100755 (executable)
index 0000000..2cc6277
--- /dev/null
@@ -0,0 +1,3 @@
+def initCapability(test_app=None, test_ext=None):
+    capability = {'chrome.binary': '/usr/bin/chromium-browser'}
+    return {'webdriver_url': 'http://127.0.0.1:9515', 'desired_capabilities': capability, 'test_prefix': 'file:///'}
diff --git a/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite2.0/testkitlite/capability/xw_android.py b/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite2.0/testkitlite/capability/xw_android.py
new file mode 100755 (executable)
index 0000000..5a3f984
--- /dev/null
@@ -0,0 +1,3 @@
+def initCapability(test_name=None, test_ext=None, webdriver_url='http://127.0.0.1:9515', test_prefix='file:///android_asset/www/'):
+    capability = {'xwalkOptions': {'androidPackage':test_name, 'androidActivity': test_ext}}
+    return {'webdriver_url': webdriver_url, 'desired_capabilities': capability, 'test_prefix': test_prefix }
diff --git a/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite2.0/testkitlite/capability/xw_tizen.py b/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite2.0/testkitlite/capability/xw_tizen.py
new file mode 100755 (executable)
index 0000000..7d11d53
--- /dev/null
@@ -0,0 +1,8 @@
+def initCapability(test_app=None, test_ext=None, webdriver_url='http://127.0.0.1:9515', test_prefix=''):
+    capability = {'xwalkOptions': {
+                     'tizenDebuggerAddress':  test_ext,
+                     'tizenAppId': test_app
+                     }
+                 }
+#    print capability
+    return {'webdriver_url':webdriver_url , 'desired_capabilities': capability, 'test_prefix': test_prefix}
diff --git a/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite2.0/testkitlite/commodule/CONFIG b/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite2.0/testkitlite/commodule/CONFIG
new file mode 100755 (executable)
index 0000000..e6b6d74
--- /dev/null
@@ -0,0 +1,8 @@
+[LOGGING]
+log_level=INFO
+
+[EXTENSION]
+crosswalk=--external-extensions-path=/usr/lib/tizen-extensions-crosswalk
+
+[TIZEN]
+tizen_user=app
diff --git a/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite2.0/testkitlite/commodule/Makefile.am b/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite2.0/testkitlite/commodule/Makefile.am
new file mode 100755 (executable)
index 0000000..9edbd3e
--- /dev/null
@@ -0,0 +1,18 @@
+# Copyright (C) 2012 Intel Corporation
+# 
+# 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
+# of the License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# Authors:
+#              Yuanyuan,Zou  <yuanyuanx.zou@intel.com>
+
+
+commoduleimpldir = /usr/lib/python2.7/dist-packages/commodule
+dist_commoduleimpl_SCRIPTS = *.py
diff --git a/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite2.0/testkitlite/commodule/__init__.py b/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite2.0/testkitlite/commodule/__init__.py
new file mode 100755 (executable)
index 0000000..8b13789
--- /dev/null
@@ -0,0 +1 @@
+
diff --git a/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite2.0/testkitlite/commodule/androidmobile.py b/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite2.0/testkitlite/commodule/androidmobile.py
new file mode 100755 (executable)
index 0000000..bede441
--- /dev/null
@@ -0,0 +1,329 @@
+#!/usr/bin/python
+#
+# Copyright (C) 2012 Intel Corporation
+#
+# 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
+# of the License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# Authors:
+#           Chengtao,Liu  <chengtaox.liu@intel.com>
+
+""" The implementation of Android communication driver"""
+
+import os
+import time
+import socket
+import threading
+import re
+
+from testkitlite.util.log import LOGGER
+from testkitlite.util.autoexec import shell_command, shell_command_ext
+from testkitlite.util.killall import killall
+from testkitlite.util.errors import InvalidDeviceException
+
+
+os.environ['TEST_PLATFORM'] = 'android'
+os.environ['CONNECT_TYPE'] = 'adb'
+LOCAL_HOST_NS = "127.0.0.1"
+APP_QUERY_STR = "adb -s %s shell ps | grep %s | awk '{print $2}' "
+APK_INSTALL = "adb -s %s shell pm install %s"
+APK_UNINSTALL = "adb -s %s shell pm uninstall %s"
+APK_LIST = "adb -s %s shell pm list packages |grep '%s'|cut -d ':' -f2"
+APP_NONBLOCK_STR = "adb -s %s shell '%s' &"
+APP_START = "adb -s %s shell am start -n %s"
+APP_STOP = "adb -s %s shell am force-stop %s"
+XWALK_APP_STR = "org.xwalk.%s/.%sActivity"
+
+
+LOGCAT_CLEAR = "adb -s %s shell logcat -c"
+LOGCAT_START = "adb -s %s shell logcat -v time"
+DMESG_CLEAR = "adb -s %s shell dmesg -c"
+DMESG_START = "adb -s %s shell cat /proc/kmsg"
+
+
+def debug_trace(cmdline, logfile):
+    global debug_flag, metux
+    wbuffile = file(logfile, "a")
+    import subprocess
+    exit_code = None
+    proc = subprocess.Popen(args=cmdline,
+                            shell=True,
+                            stdout=wbuffile,
+                            stderr=None)
+    while True:
+        exit_code = proc.poll()
+        if exit_code is not None:
+            break
+        time.sleep(0.5)
+        metux.acquire()
+        proc_flag = debug_flag
+        metux.release()
+        if not proc_flag:
+            break
+    wbuffile.close()
+    if exit_code is None:
+        killall(proc.pid)
+
+
+def _get_device_ids():
+    """get android device list of ids"""
+    result = []
+    exit_code, ret = shell_command("adb devices")
+    for line in ret:
+        if str.find(line, "\tdevice") != -1:
+            result.append(line.split("\t")[0])
+    return result
+
+
+class AndroidMobile:
+
+    """ Implementation for transfer data
+        between Host and Android Mobile Device
+    """
+
+    def __init__(self, device_id=None):
+        self.deviceid = device_id
+        self.support_remote = True
+
+    def is_support_remote(self):
+        return self.support_remote
+
+    def shell_cmd(self, cmd="", timeout=15):
+        cmdline = "adb -s %s shell %s" % (self.deviceid, cmd)
+        return shell_command(cmdline, timeout)
+
+    def check_process(self, process_name):
+        exit_code, ret = shell_command(
+            APP_QUERY_STR % (self.deviceid, process_name))
+        return len(ret)
+
+    def kill_stub(self):
+        #add this function to avoid webdriver issue, yangx.zhou@intel.com,2015.01.15
+        wgt_name = "testkit.stub/.TestkitStub"
+        pkg_name = wgt_name.split('/')[0]
+        cmdline = APP_STOP % (self.deviceid, pkg_name)
+        exit_code, ret = shell_command(cmdline)
+
+
+    def launch_stub(self, stub_app, stub_port="8000", debug_opt=""):
+       # self.kill_stub()
+        wgt_name = "testkit.stub/.TestkitStub"
+       # pkg_name = wgt_name.split('/')[0]
+       # cmdline = APP_STOP % (self.deviceid, pkg_name)
+       # exit_code, ret = shell_command(cmdline)
+        cmdline = APP_START % (self.deviceid, wgt_name)
+        debug_ext = " -e debug on" if debug_opt != "" else " -e debug off"
+        port_ext = " -e port " + stub_port
+        exit_code, ret = shell_command(cmdline + port_ext + debug_ext)
+        time.sleep(2)
+        return True
+
+    def shell_cmd_ext(self,
+                      cmd="",
+                      timeout=None,
+                      boutput=False,
+                      stdout_file=None,
+                      stderr_file=None,
+                      callbk=None):
+        cmdline = "adb -s %s shell '%s; echo returncode=$?'" % (
+            self.deviceid, cmd)
+        return shell_command_ext(cmdline, timeout, boutput, stdout_file, stderr_file, callbk)
+
+    def get_device_info(self):
+        """get android device inforamtion"""
+        device_info = {}
+        device_info["device_id"] = self.deviceid
+        device_info["resolution"] = "N/A"
+        device_info["screen_size"] = "N/A"
+        device_info["device_model"] = "N/A"
+        device_info["device_name"] = "N/A"
+        device_info["os_version"] = "N/A"
+        device_info["build_id"] = "N/A"
+        return device_info
+
+    def download_file(self, remote_path, local_path):
+        """download file from device"""
+        cmd = "adb -s %s pull %s %s" % (self.deviceid, remote_path, local_path)
+        exit_code, ret = shell_command(cmd)
+        if exit_code != 0:
+            error = ret[0].strip('\r\n') if len(ret) else "sdb shell timeout"
+            LOGGER.info("[ Download file \"%s\" failed, error: %s ]"
+                        % (remote_path, error))
+            return False
+        else:
+            return True
+
+    def upload_file(self, remote_path, local_path):
+        """upload file to device"""
+        cmd = "adb -s %s push %s %s" % (self.deviceid, local_path, remote_path)
+        exit_code, ret = shell_command(cmd)
+        if exit_code != 0:
+            error = ret[0].strip('\r\n') if len(ret) else "sdb shell timeout"
+            LOGGER.info("[ Upload file \"%s\" failed,"
+                        " get error: %s ]" % (local_path, error))
+            return False
+        else:
+            return True
+
+    def get_launcher_opt(self, test_launcher, test_ext, test_widget, test_suite, test_set):
+        """get test option dict """
+        test_opt = {}
+        test_opt["suite_name"] = test_suite
+        test_opt["launcher"] = test_launcher
+        if test_launcher.find('xwalk') >= 0:
+            if test_widget is not None and test_widget != "":
+                test_suite = test_widget
+            test_suite = test_suite.replace('-', '_')
+            test_opt["test_app_id"] = XWALK_APP_STR % (test_suite, test_suite)
+        else:
+            test_opt["test_app_id"] = test_launcher
+        return test_opt
+
+    def get_server_url(self, remote_port="8000"):
+        """forward request a host tcp port to targe tcp port"""
+        if remote_port is None:
+            return None
+
+        os.environ['no_proxy'] = LOCAL_HOST_NS
+        host = LOCAL_HOST_NS
+        inner_port = 9000
+        time_out = 2
+        bflag = False
+        while True:
+            sock_inner = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
+            sock_inner.settimeout(time_out)
+            try:
+                sock_inner.bind((host, inner_port))
+                sock_inner.close()
+                bflag = False
+            except socket.error as error:
+                if error.errno == 98 or error.errno == 13:
+                    bflag = True
+            if bflag:
+                inner_port += 1
+            else:
+                break
+        host_port = str(inner_port)
+        cmd = "adb -s %s forward tcp:%s tcp:%s" % \
+            (self.deviceid, host_port, remote_port)
+        exit_code, ret = shell_command(cmd)
+        url_forward = "http://%s:%s" % (host, host_port)
+        return url_forward
+
+    def install_package(self, pkgpath):
+        """install a package on android device:
+        push package and install with shell command
+        """
+        cmd = APK_INSTALL % (self.deviceid, pkgpath)
+        exit_code, ret = shell_command(cmd)
+        return ret
+
+    def uninstall_package(self, pkgname):
+        """install a package on android device:
+        push package and install with shell command
+        """
+        cmd = APK_UNINSTALL % (self.deviceid, pkgname)
+        exit_code, ret = shell_command(cmd)
+        return ret
+
+    def get_installed_package(self):
+        """get list of installed package from device"""
+        cmd = APK_LIST % self.deviceid
+        exit_code, ret = shell_command(cmd)
+        return ret
+
+    def start_debug(self, dlogfile):
+        global debug_flag, metux
+        debug_flag = True
+        metux = threading.Lock()
+        logcat_cmd = LOGCAT_CLEAR % self.deviceid
+        exit_code, ret = shell_command(logcat_cmd)
+        dmesg_cmd = DMESG_CLEAR % self.deviceid
+        exit_code, ret = shell_command(logcat_cmd)
+        logcat_cmd = LOGCAT_START % self.deviceid
+        dmesg_cmd = DMESG_START % self.deviceid
+        threading.Thread(target=debug_trace, args=(logcat_cmd, dlogfile+'.logcat')).start()
+        threading.Thread(target=debug_trace, args=(dmesg_cmd, dlogfile+'.dmesg')).start()
+
+    def stop_debug(self):
+        global debug_flag, metux
+        metux.acquire()
+        debug_flag = False
+        metux.release()
+
+    def launch_app(self, wgt_name):
+        blauched = False
+        if wgt_name.find('xwalk') != -1:
+            timecnt = 0
+            blauched = False
+            pkg_name, actv_name = wgt_name.split('/')
+            actv_name = actv_name.strip('.')
+            cmdline = APP_STOP % (self.deviceid, pkg_name)
+            exit_code, ret = shell_command(cmdline)
+            cmdline = APP_START % (self.deviceid, wgt_name)
+            exit_code, ret = shell_command(cmdline)
+            if len(ret) > 1:
+                # remove Activity to retry
+                actv_name = actv_name.replace('Activity', '')
+                LOGGER.info("[ Retry to launch app: %s ]" % (pkg_name + '/.' + actv_name))
+                cmdline = APP_START % (self.deviceid, pkg_name + '/.' + actv_name)
+                exit_code, ret = shell_command(cmdline)
+            if len(ret) > 1:
+                # use capitalize to retry
+                tmps = actv_name.split('_')
+                actv_name = ''.join([it.capitalize() for it in tmps if it])
+                LOGGER.info("[ Retry to launch app: %s ]" % (pkg_name + '/.' + actv_name + 'Activity'))
+                cmdline = APP_START % (self.deviceid, pkg_name + '/.' + actv_name + 'Activity')
+                exit_code, ret = shell_command(cmdline)
+                if len(ret) > 1:
+                    # remove Activity
+                    LOGGER.info("[ Retry to launch app: %s ]" % (pkg_name + '/.' + actv_name))
+                    cmdline = APP_START % (self.deviceid, pkg_name + '/.' + actv_name)
+                    exit_code, ret = shell_command(cmdline)
+
+            blauched = True
+            time.sleep(3)
+        else:
+            cmdline = APP_NONBLOCK_STR % (self.deviceid, wgt_name)
+            exit_code, ret = shell_command(cmdline)
+            time.sleep(3)
+            cmd = APP_QUERY_STR % (self.deviceid, wgt_name)
+            exit_code, ret = shell_command(cmd)
+            if ret and len(ret):
+                blauched = True
+        return blauched
+
+    def kill_app(self, wgt_name):
+        pkg_name = wgt_name.split('/')[0]
+        cmdline = APP_STOP % (self.deviceid, pkg_name)
+        exit_code, ret = shell_command(cmdline)        
+        return True
+
+    install_app = install_package
+    uninstall_app = uninstall_package
+
+    def get_buildinfo(self):
+        """ get builf info"""
+        build_info = {}
+        build_info['buildid'] = ''
+        build_info['manufacturer'] = ''
+        build_info['model'] = ''
+        return build_info
+
+
+def get_target_conn(device_id=None):
+    """ Get connection for Test Target"""
+    if device_id is None:
+        dev_list = _get_device_ids()
+        if len(dev_list):
+            device_id = dev_list[0]
+        else:
+            raise InvalidDeviceException('No android device found!')
+    return AndroidMobile(device_id)
diff --git a/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite2.0/testkitlite/commodule/localhost.py b/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite2.0/testkitlite/commodule/localhost.py
new file mode 100755 (executable)
index 0000000..3108839
--- /dev/null
@@ -0,0 +1,166 @@
+#!/usr/bin/python
+#
+# Copyright (C) 2012 Intel Corporation
+#
+# 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
+# of the License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# Authors:
+#           Chengtao,Liu  <chengtaox.liu@intel.com>
+
+""" The implementation of local host communication"""
+
+import os
+import time
+import socket
+import re
+from shutil import copyfile
+
+from testkitlite.util.log import LOGGER
+from testkitlite.util.autoexec import shell_command, shell_command_ext
+
+
+HOST_NS = "127.0.0.1"
+os.environ['no_proxy'] = HOST_NS
+os.environ['TEST_PLATFORM'] = 'localhost'
+if not os.environ.has_key('CONNECT_TYPE'):
+    os.environ['CONNECT_TYPE'] = 'local'
+APP_QUERY_STR = "ps aux | grep %s | grep -v grep"
+
+
+class LocalHost:
+
+    """ Implementation for transfer data
+        between Host and Tizen PC
+    """
+
+    def __init__(self):
+        self.deviceid = os.environ.get('TEST_PLATFORM','')
+        #self.deviceid = "localhost"
+        self.support_remote = False
+
+    def is_support_remote(self):
+        return self.support_remote
+
+    def shell_cmd(self, cmd="", timeout=15):
+        return shell_command(cmd, timeout)
+
+    def check_process(self, process_name):
+        exit_code, ret = shell_command(APP_QUERY_STR % process_name)
+        return len(ret)
+
+    def kill_stub(self):
+        #add this fucntion to avoid webdriver issue if it running on device, yangx.zhou@intel.com
+        cmdline = "ps -aux | grep testkit-stub | grep -v grep | awk '{ print $2 }'"
+        exit_code, ret = self.shell_cmd(cmdline)
+        if exit_code == 0 and len(ret) >0:
+            cmdline = "kill -9 %s" %ret[0]
+            exit_code, ret = self.shell_cmd(cmdline)
+        
+
+    def launch_stub(self, stub_app, stub_port="8000", debug_opt=""):
+        cmdline = "%s --port:%s %s" % (stub_app, stub_port, debug_opt)
+        exit_code, ret = self.shell_cmd(cmdline)
+        time.sleep(2)
+
+    def check_widget_process(self, wgt_name):
+        return True
+
+    def shell_cmd_ext(self,
+                      cmd="",
+                      timeout=None,
+                      boutput=False,
+                      stdout_file=None,
+                      stderr_file=None):
+        return shell_command_ext(cmd, timeout, boutput, stdout_file, stderr_file)
+
+    def get_device_ids(self):
+        """
+            get device list of ids
+        """
+        return []
+
+    def get_device_info(self):
+        """
+            get tizen device inforamtion
+        """
+        device_info = {}
+        device_info["device_id"] = self.deviceid
+        device_info["resolution"] = "N/A"
+        device_info["screen_size"] = "N/A"
+        device_info["device_model"] = "N/A"
+        device_info["device_name"] = "N/A"
+        device_info["os_version"] = "N/A"
+        device_info["build_id"] = "N/A"
+        return device_info
+
+    def get_server_url(self, remote_port="8000"):
+        """get server url"""
+        url_forward = "http://%s:%s" % (HOST_NS, remote_port)
+        return url_forward
+
+    def install_package(self, pkgpath):
+        """
+           install a package on tizen device
+        """
+        cmd = "rpm -ivh %s" % pkgpath
+        exit_code, ret = shell_command(cmd)
+        return ret
+
+    def get_installed_package(self):
+        """get list of installed package from device"""
+        cmd = "rpm -qa | grep tct"
+        exit_code, ret = shell_command(cmd)
+        return ret
+
+    def download_file(self, remote_path, local_path):
+        """download file"""
+        # copyfile(remote_path, local_path)
+        # return True
+        return False
+
+    def upload_file(self, remote_path, local_path):
+        """upload file"""
+        # copyfile(local_path, remote_path)
+        return False
+
+    def get_launcher_opt(self, test_launcher, test_ext, test_widget, test_suite, test_set):
+        """get test option dict """
+        test_opt = {}
+        test_opt["suite_name"] = test_suite
+        test_opt["launcher"] = test_launcher
+        test_opt["test_app_id"] = test_launcher
+        return test_opt
+
+    def launch_app(self, wgt_name):
+        exit_code, ret = shell_command(wgt_name + '&')
+        return True
+
+    def kill_app(self, wgt_name):
+        return True
+
+    def start_debug(self, dlogfile):
+        pass
+
+    def stop_debug(self):
+        pass
+
+    def get_buildinfo(self):
+        """ get builf info"""
+        build_info = {}
+        build_info['buildid'] = ''
+        build_info['manufacturer'] = ''
+        build_info['model'] = ''
+        return build_info
+
+
+def get_target_conn():
+    """ Get connection for Test Target"""
+    return LocalHost()
diff --git a/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite2.0/testkitlite/commodule/tizenivi.py b/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite2.0/testkitlite/commodule/tizenivi.py
new file mode 100755 (executable)
index 0000000..4cc39b0
--- /dev/null
@@ -0,0 +1,489 @@
+#!/usr/bin/python
+#
+# Copyright (C) 2012 Intel Corporation
+#
+# 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
+# of the License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# Authors:
+#           Chengtao,Liu  <chengtaox.liu@intel.com>
+
+""" The implementation of tizen IVI communication"""
+
+import os
+import time
+import socket
+import threading
+import ConfigParser
+import re
+import sys
+from shutil import copyfile
+from testkitlite.util.log import LOGGER
+from testkitlite.util.autoexec import shell_command, shell_command_ext
+from testkitlite.util.killall import killall
+from testkitlite.util.errors import InvalidDeviceException
+
+try:
+    import paramiko
+except ImportError, err:
+    LOGGER.info("Failed to import 'paramiko' module, please check your installation:")
+    LOGGER.info("  You can use 'sudo pip install paramiko' to install the module!")
+    sys.exit(1)
+
+TCT_CONFIG_FILE = "/opt/tools/TCT_CONFIG"
+tct_parser = ConfigParser.ConfigParser()
+tct_parser.read(TCT_CONFIG_FILE)
+
+DEVICE_SUITE_TARGET_30 = tct_parser.get('DEVICE', 'DEVICE_SUITE_TARGET_30')
+
+
+HOST_NS = "127.0.0.1"
+os.environ['no_proxy'] = HOST_NS
+os.environ['TEST_PLATFORM'] = 'tizen'
+os.environ['CONNECT_TYPE'] = 'ssh'
+TIZEN_USER = os.environ.get('TIZEN_USER', 'owner')
+#print 'debug', os.environ.get('TIZEN_USER','')
+
+# common constants
+RPM_INSTALL = "ssh %s rpm -ivh %s"
+RPM_UNINSTALL = "ssh %s rpm -e %s"
+RPM_LIST = "ssh %s rpm -qa | grep tct"
+APP_QUERY_STR = "ssh %s \"ps aux |grep '%s'|grep -v grep\"|awk '{print $2}'"
+APP_KILL_STR = "ssh %s kill -9 %s"
+APP_NONBLOCK_STR = "ssh %s \"%s &\""
+SSH_COMMAND_RTN = "ssh %s \"%s\"; echo returncode=$?"
+#SSH_COMMAND_APP = "ssh %s \"su - app -c 'export DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/5000/dbus/user_bus_socket; %s'\";echo returncode=$?"
+SSH_COMMAND_APP = "ssh %s \"su - %s -c 'export DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/%s/dbus/user_bus_socket; %s'\";echo returncode=$?"
+
+# wrt-launcher constants
+WRT_MAIN = "wrt-launcher"
+WRT_QUERY_STR = "ssh %s \"wrt-launcher -l|grep '%s'|grep -v grep\"|awk '{print $2\":\"$NF}'"
+WRT_START_STR = "ssh %s 'wrt-launcher -s %s; echo returncode=$?'"
+WRT_STOP_STR = "ssh %s wrt-launcher -k %s"
+WRT_INSTALL_STR = "ssh %s wrt-installer -i %s"
+WRT_UNINSTL_STR = "ssh %s wrt-installer -un %s"
+WRT_LOCATION = os.path.join(DEVICE_SUITE_TARGET_30, "tct/opt/%s/%s.wgt")
+
+# crosswalk constants
+#XWALK_MAIN = "xwalkctl"
+#XWALK_MAIN = "open_app"
+XWALK_MAIN = os.environ.get("Launcher","app_launcher -s")
+if cmp(XWALK_MAIN,'app_launcher') == 0:
+    XWALK_MAIN = 'app_launcher -s '
+#XWALK_QUERY_STR = "ssh %s \"su - app -c 'export DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/5000/dbus/user_bus_socket;xwalkctl' \"| grep -w %s | awk '{print $(NF-1)}'"
+XWALK_QUERY_STR = "ssh %s \"su - %s -c 'export DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/%s/dbus/user_bus_socket;app_launcher -l' \"| grep -w %s | awk '{print $2}'"
+#XWALK_START_STR = "ssh %s \"su - app -c 'export DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/5000/dbus/user_bus_socket;launch_app %s' & \""
+XWALK_START_STR = "ssh %s \"su - %s -c 'export DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/%s/dbus/user_bus_socket;%s %s' & \""
+#XWALK_INSTALL_STR = "ssh %s \"su - app -c 'export DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/5000/dbus/user_bus_socket;xwalkctl --install %s' \""
+XWALK_INSTALL_STR = "ssh %s \"su - %s -c 'export DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/%s/dbus/user_bus_socket;pkgcmd -i -t %s -p  %s -q' \""
+#XWALK_UNINSTL_STR = "ssh %s \"su - app -c 'export DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/5000/dbus/user_bus_socket;xwalkctl --uninstall %s' \""
+XWALK_UNINSTL_STR = "ssh %s \"su - %s -c 'export DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/%s/dbus/user_bus_socket;pkgcmd -u -t wgt -q -n %s' \""
+XWALK_LOCATION = os.path.join(DEVICE_SUITE_TARGET_30, "tct/opt/%s/%s.wgt")
+
+XWALK_QUERY_ID = "ssh %s 'id -u %s'"
+
+class SSH_Handler:
+    """
+    long connection with login
+    """
+
+    def __init__(self, host='127.0.0.1', username='root', password='tizen', port=22):
+        self._ssh = paramiko.SSHClient()
+        self._ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
+        self._ssh.connect(host, port, username, password)
+
+    def ssh_command(self, cmd='whoami'):
+        stdin, stdout, stderr = self._ssh.exec_command(cmd)
+        return stdout.readlines()
+
+    def close(self):
+        if self._ssh is not None:
+            self._ssh.close()
+
+
+class tizenIVI:
+
+    """ Implementation for transfer data
+        between Host and IVI/PC on SSH connection
+    """
+
+    def __init__(self, deviceid="root@127.0.0.1"):
+        self.deviceid = deviceid
+        remotes = deviceid.split('@')
+        self._ssh = SSH_Handler(remotes[1], remotes[0])
+        self._wrt = False
+        self._xwalk = False
+        self.support_remote = True
+        self._get_user_id()
+
+    def _get_user_id(self):
+        if TIZEN_USER.lower() == 'owner':
+            self.port = '5000'
+        else:
+            cmdline = XWALK_QUERY_ID % (self.deviceid, TIZEN_USER)
+            exit_code, ret = shell_command(cmdline)
+            if exit_code == -1:
+                LOGGER.info("[ can not get user id ]")
+            if len(ret) > 0 :
+                self.port = ret[0].strip('\r\n')
+
+
+    def is_support_remote(self):
+        return self.support_remote
+
+    def shell_cmd(self, cmd="", timeout=15):
+        cmd = "ssh %s %s" % (self.deviceid, cmd)
+        return shell_command(cmd, timeout)
+
+    def check_process(self, process_name):
+        exit_code, ret = shell_command(APP_QUERY_STR % (self.deviceid, process_name))
+        return len(ret)
+
+    def kill_stub(self):
+        #add this function to avoid webdriver issue if stub runnning on device, yangx.zhou@intel.com
+        cmdline = "ps -aux | grep testkit-stub | grep -v grep | awk '{ print $2 }'"
+        ret_lines = self._ssh.ssh_command(cmdline)
+        if len(ret_lines) > 0:
+            cmdline = "kill -9 %s" %ret_lines[0]
+            ret_lines = self._ssh.ssh_command(cmdline)
+
+    def launch_stub(self, stub_app, stub_port="8000", debug_opt=""):
+        #self.kill_stub() 
+        cmdline = "%s --port:%s %s" % (stub_app, stub_port, debug_opt)
+        ret_lines = self._ssh.ssh_command(cmdline)
+        time.sleep(2)
+
+    def shell_cmd_ext(self,
+                      cmd="",
+                      timeout=None,
+                      boutput=False,
+                      stdout_file=None,
+                      stderr_file=None):
+        #if cmd.startswith('app_user@'):
+        usr = TIZEN_USER + '_user@'
+        if cmd.startswith(usr):
+            cmdline = SSH_COMMAND_APP % (self.deviceid, TIZEN_USER, self.port,  cmd[9:])
+        else:
+            cmdline = SSH_COMMAND_RTN % (self.deviceid, cmd)
+        return shell_command_ext(cmdline, timeout, boutput, stdout_file, stderr_file)
+
+    def shell_cmd_host(self,
+                       cmd="",
+                       timeout=None,
+                       boutput=False,
+                       stdout_file=None,
+                       stderr_file=None):
+        cmd = cmd.replace("$deviceid", self.deviceid)
+        return shell_command_ext(cmd, timeout, boutput, stdout_file, stderr_file)
+
+    def get_device_ids(self):
+        """
+            get device list of ids
+        """
+        return ['localhost']
+
+    def get_device_info(self):
+        """
+            get tizenivi device inforamtion
+        """
+        device_info = {}
+        resolution_str = ""
+        screen_size_str = ""
+        device_model_str = ""
+        device_name_str = ""
+        build_id_str = ""
+        os_version_str = ""
+
+        # get resolution and screen size
+        exit_code, ret = shell_command("ssh %s xrandr" % self.deviceid)
+        pattern = re.compile("connected (\d+)x(\d+).* (\d+mm) x (\d+mm)")
+        for line in ret:
+            match = pattern.search(line)
+            if match:
+                resolution_str = "%s x %s" % (match.group(1), match.group(2))
+                screen_size_str = "%s x %s" % (match.group(3), match.group(4))
+
+        # get architecture
+        exit_code, ret = shell_command("ssh %s uname -m" % self.deviceid)
+        if len(ret) > 0:
+            device_model_str = ret[0]
+
+        # get hostname
+        exit_code, ret = shell_command("ssh %s uname -n" % self.deviceid)
+        if len(ret) > 0:
+            device_name_str = ret[0]
+
+        # get os version
+        exit_code, ret = shell_command("ssh %s cat /etc/issue" % self.deviceid)
+        for line in ret:
+            if len(line) > 1:
+                os_version_str = "%s %s" % (os_version_str, line)
+
+        # get build id
+        exit_code, ret = shell_command("ssh %s cat /etc/os-release" % self.deviceid)
+        for line in ret:
+            if line.find("BUILD_ID=") != -1:
+                build_id_str = line.split('=')[1].strip('\"\r\n')
+
+        os_version_str = os_version_str[0:-1]
+        device_info["device_id"] = self.deviceid
+        device_info["resolution"] = resolution_str
+        device_info["screen_size"] = screen_size_str
+        device_info["device_model"] = device_model_str
+        device_info["device_name"] = device_name_str
+        device_info["os_version"] = os_version_str
+        device_info["build_id"] = build_id_str
+        return device_info
+
+    def get_server_url(self, remote_port="8000"):
+        """get server url"""
+        remote_ip = self.deviceid
+        remote_ip = remote_ip.split('@')[1]
+        os.environ['no_proxy'] = remote_ip
+        url_forward = "http://%s:%s" % (remote_ip, remote_port)
+        return url_forward
+
+    def install_package(self, pkgpath):
+        """
+           install a package on tizenivi device
+        """
+        cmd = RPM_INSTALL % (self.deviceid, pkgpath)
+        exit_code, ret = shell_command(cmd)
+        return ret
+
+    def install_package(self, pkgname):
+        """
+           install a package on tizenivi device
+        """
+        cmd = RPM_UNINSTALL % (self.deviceid, pkgname)
+        exit_code, ret = shell_command(cmd)
+        return ret
+
+    def get_installed_package(self):
+        """get list of installed package from device"""
+        cmd = RPM_LIST % (self.deviceid)
+        exit_code, ret = shell_command(cmd)
+        return ret
+
+    def download_file(self, remote_path, local_path):
+        """download file"""
+        local_path_dir = os.path.dirname(local_path)
+        if not os.path.exists(local_path_dir):
+            os.makedirs(local_path_dir)
+        cmd = "scp %s:%s %s" % (self.deviceid, remote_path, local_path)
+        exit_code, ret = shell_command(cmd)
+        if not os.path.exists(local_path):
+            return False
+        return True
+
+    def upload_file(self, remote_path, local_path):
+        """upload file"""
+        cmd = "scp %s %s:%s" % (local_path, self.deviceid, remote_path)
+        exit_code, ret = shell_command(cmd)
+        return True
+
+    def _get_wrt_app(self, test_suite, test_set, fuzzy_match, auto_iu):
+        test_app_id = None
+        if auto_iu:
+            test_wgt = test_set
+            test_wgt_path = WRT_LOCATION % (test_suite, test_wgt)
+            if not self.install_app(test_wgt_path):
+                LOGGER.info("[ failed to install widget \"%s\" in target ]"
+                            % test_wgt)
+                return None
+        else:
+            test_wgt = test_suite
+
+        # check if widget installed already
+        cmd = WRT_QUERY_STR % (test_wgt)
+        exit_code, ret = shell_command(cmd)
+        if exit_code == -1:
+            return None
+        for line in ret:
+            items = line.split(':')
+            if len(items) < 1:
+                continue
+            if (fuzzy_match and items[0].find(test_wgt) != -1) or items[0] == test_wgt:
+                test_app_id = items[1].strip('\r\n')
+                break
+
+        if test_app_id is None:
+            LOGGER.info("[ test widget \"%s\" not found in target ]"
+                        % test_wgt)
+            return None
+
+        return test_app_id
+
+    def _get_xwalk_app(self, test_suite, test_set, fuzzy_match, auto_iu):
+        test_app_id = None
+        if auto_iu:
+            test_wgt = test_set
+            test_wgt_path = XWALK_LOCATION % (test_suite, test_wgt)
+            if not self.install_app(test_wgt_path):
+                LOGGER.info("[ failed to install widget \"%s\" in target ]"
+                            % test_wgt)
+                return None
+        else:
+            test_wgt = test_suite
+
+        # check if widget installed already
+        cmd = XWALK_QUERY_STR % (self.deviceid,TIZEN_USER, self.port,  test_wgt)
+        exit_code, ret = shell_command(cmd)
+        if exit_code == -1:
+            return None
+        for line in ret:
+            test_app_id = line.strip('\r\n')
+
+        if test_app_id is None:
+            LOGGER.info("[ test widget \"%s\" not found in target ]"
+                        % test_wgt)
+            return None
+
+        return test_app_id
+
+    def get_launcher_opt(self, test_launcher, test_ext, test_widget, test_suite, test_set):
+        """
+        get test option dict
+        """
+        test_opt = {}
+        self._wrt = False
+        self._xwalk = False
+        app_id = None
+        test_opt["suite_name"] = test_suite
+        test_opt["launcher"] = test_launcher
+        if test_widget is not None and test_widget != "":
+            test_suite = test_widget
+        if test_launcher.find('WRTLauncher') >= 0:
+            self._wrt = True
+            test_opt["launcher"] = WRT_MAIN
+            client_cmds = test_launcher.strip().split()
+            wrt_tag = client_cmds[1] if len(client_cmds) > 1 else ""
+            test_opt['fuzzy_match'] = fuzzy_match = wrt_tag.find('z') != -1
+            test_opt['auto_iu'] = auto_iu = wrt_tag.find('iu') != -1
+            test_opt['self_exec'] = wrt_tag.find('a') != -1
+            test_opt['self_repeat'] = wrt_tag.find('r') != -1
+            app_id = self._get_wrt_app(test_suite, test_set, fuzzy_match, auto_iu)
+        elif test_launcher.find('xwalk') >= 0 and len(test_launcher) <= 16:
+            self._xwalk = True
+            test_opt["launcher"] = XWALK_MAIN
+            client_cmds = test_launcher.strip().split()
+            xpk_tag = client_cmds[1] if len(client_cmds) > 1 else ""
+            test_opt['fuzzy_match'] = fuzzy_match = xpk_tag.find('z') != -1
+            test_opt['auto_iu'] = auto_iu = xpk_tag.find('iu') != -1
+            test_opt['self_exec'] = xpk_tag.find('a') != -1
+            test_opt['self_repeat'] = xpk_tag.find('r') != -1
+            app_id = self._get_xwalk_app(test_suite, test_set, fuzzy_match, auto_iu)
+        else:
+            app_id = test_launcher
+
+        if app_id is None:
+            return None
+        test_opt["test_app_id"] = app_id
+        return test_opt
+
+    def start_debug(self, dlogfile):
+        global debug_flag, metux
+        debug_flag = True
+
+    def stop_debug(self):
+        global debug_flag
+        debug_flag = False
+
+    def launch_app(self, wgt_name):
+        blauched = False
+        if self._wrt:
+            timecnt = 0
+            cmdline = WRT_STOP_STR % (self.deviceid, wgt_name)
+            exit_code, ret = shell_command(cmdline)
+            cmdline = WRT_START_STR % (self.deviceid, wgt_name)
+            while timecnt < 3:
+                exit_code, ret_out, ret_err = shell_command_ext(cmdline, 30)
+                if exit_code == "0":
+                    blauched = True
+                    break
+                timecnt += 1
+                time.sleep(3)
+        elif self._xwalk:
+            cmd = APP_QUERY_STR % (self.deviceid, wgt_name)
+            exit_code, ret = shell_command(cmd)
+            for line in ret:
+                cmd = APP_KILL_STR % (self.deviceid, line.strip('\r\n'))
+                exit_code, ret = shell_command(cmd)
+            cmdline = XWALK_START_STR % (self.deviceid,TIZEN_USER, self.port, XWALK_MAIN,  wgt_name)
+            exit_code, ret = shell_command(cmdline)
+            time.sleep(3)
+            blauched = True
+        else:
+            cmdline = APP_NONBLOCK_STR % (self.deviceid, wgt_name)
+            exit_code, ret = shell_command(cmdline)
+            time.sleep(3)
+            cmd = APP_QUERY_STR % (self.deviceid, wgt_name)
+            exit_code, ret = shell_command(cmd)
+            if ret and len(ret):
+                blauched = True
+
+        return blauched
+
+    def kill_app(self, wgt_name):
+        if self._wrt:
+            cmdline = WRT_STOP_STR % (self.deviceid, wgt_name)
+            exit_code, ret = shell_command(cmdline)
+        elif self._xwalk:
+            cmd = APP_QUERY_STR % (self.deviceid, wgt_name)
+            exit_code, ret = shell_command(cmd)
+            for line in ret:
+                cmd = APP_KILL_STR % (line.strip('\r\n'))
+                exit_code, ret = shell_command(cmd)
+        return True
+
+    def install_app(self, wgt_path="", timeout=90):
+        if self._wrt:
+            cmd = WRT_INSTALL_STR % (self.deviceid, wgt_path)
+        elif self._xwalk:
+            if len(wgt_path)>0:
+                ext = wgt_path.split('.')[1]
+            cmd = XWALK_INSTALL_STR % (self.deviceid,TIZEN_USER, self.port,ext,  wgt_path)
+        else:
+            return True
+        exit_code, ret = shell_command(cmd, timeout)
+        if exit_code == -1:
+            cmd = APP_QUERY_STR % (self.deviceid, wgt_path)
+            exit_code, ret = shell_command(cmd)
+            for line in ret:
+                cmd = APP_KILL_STR % (self.deviceid, line.strip('\r\n'))
+                exit_code, ret = shell_command(cmd)
+            return False
+        else:
+            return True
+
+    def uninstall_app(self, wgt_name):
+        if self._wrt:
+            cmd = WRT_UNINSTL_STR % (self.deviceid, wgt_name)
+        elif self._xwalk:
+            cmd = XWALK_UNINSTL_STR % (self.deviceid, TIZEN_USER, self.port, wgt_name)
+        else:
+            return True
+        exit_code, ret = shell_command(cmd)
+        return True
+
+    def get_buildinfo(self):
+        """ get builf info"""
+        build_info = {}
+        build_info['buildid'] = ''
+        build_info['manufacturer'] = ''
+        build_info['model'] = ''
+        return build_info
+
+
+def get_target_conn(deviceid=None):
+    """ Get connection for Test Target"""
+    if deviceid is None or '@' not in deviceid:
+        raise InvalidDeviceException('deviceid("username@ip") required by SSH connection!')
+    return tizenIVI(deviceid)
diff --git a/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite2.0/testkitlite/commodule/tizenlocal.py b/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite2.0/testkitlite/commodule/tizenlocal.py
new file mode 100755 (executable)
index 0000000..c1f37aa
--- /dev/null
@@ -0,0 +1,434 @@
+#!/usr/bin/python
+#
+# Copyright (C) 2012 Intel Corporation
+#
+# 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
+# of the License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# Authors:
+#           Chengtao,Liu  <chengtaox.liu@intel.com>
+
+""" The implementation of tizen localhost communication"""
+
+import os
+import time
+import socket
+import threading
+import re
+from shutil import copyfile
+
+from testkitlite.util.log import LOGGER
+from testkitlite.util.autoexec import shell_command, shell_command_ext
+from testkitlite.util.killall import killall
+
+HOST_NS = "127.0.0.1"
+os.environ['no_proxy'] = HOST_NS
+os.environ['TEST_PLATFORM'] = 'tizen'
+os.environ['CONNECT_TYPE'] = 'local'
+RPM_INSTALL = "rpm -ivh %s"
+RPM_UNINSTALL = "rpm -e %s"
+RPM_LIST = "rpm -qa | grep tct | grep -v grep"
+APP_QUERY_STR = "ps aux |grep '%s'|grep -v grep|awk '{print $2}'"
+APP_KILL_STR = "kill -9 %s"
+APP_NONBLOCK_STR = "%s &"
+
+# wrt-launcher constants
+WRT_MAIN = "wrt-launcher"
+WRT_QUERY_STR = "wrt-launcher -l | grep '%s'|awk '{print $2\":\"$NF}'"
+WRT_START_STR = "wrt-launcher -s %s"
+WRT_STOP_STR = "wrt-launcher -k %s"
+WRT_INSTALL_STR = "wrt-installer -i %s"
+WRT_UNINSTL_STR = "wrt-installer -un %s"
+WRT_LOCATION = "/opt/usr/media/tct/opt/%s/%s.wgt"
+
+# crosswalk constants
+#XWALK_MAIN = "xwalkctl"
+XWALK_MAIN = os.environ.get("Launcher","app_launcher -s")
+if cmp(XWALK_MAIN, 'app_launcher') == 0:
+    XWALK_MAIN = "app_launcher -s "
+#XWALK_MAIN = "open_app"
+#XWALK_QUERY_STR = "ail_list | grep -w %s | awk '{print $(NF-1)}'"
+XWALK_QUERY_STR = "app_launcher -l | grep -w %s | awk '{print $2}'"
+#XWALK_START_STR = "xwalk-launcher %s &"
+XWALK_START_STR = "%s %s &"
+#XWALK_INSTALL_STR = "xwalkctl --install %s"
+XWALK_INSTALL_STR = "pkgcmd --install -t %s -p %s -q"
+XWALK_UNINSTL_STR = "pkgcmd -u -t wgt -q  -n %s"
+#XWALK_UNINSTL_STR = "xwalkctl --uninstall %s"
+XWALK_LOCATION = "/opt/usr/media/tct/opt/%s/%s.wgt"
+DLOG_CLEAR = "dlogutil -c"
+DLOG_WRT = "dlogutil WRT:D -v threadtime"
+TIZEN_USER = os.environ.get('TIZEN_USER','app')
+
+def debug_trace(cmdline, logfile):
+    global debug_flag, metux
+    wbuffile = file(logfile, "w")
+    import subprocess
+    exit_code = None
+    proc = subprocess.Popen(args=cmdline,
+                            shell=True,
+                            stdout=wbuffile,
+                            stderr=None)
+    while True:
+        exit_code = proc.poll()
+        if exit_code is not None:
+            break
+        time.sleep(0.5)
+        metux.acquire()
+        proc_flag = debug_flag
+        metux.release()
+        if not proc_flag:
+            break
+    wbuffile.close()
+    if exit_code is None:
+        killall(proc.pid)
+
+
+class tizenHost:
+
+    """ Implementation for transfer data on TIZEN localhost
+    """
+
+    def __init__(self):
+        self.deviceid = "localhost"
+        self._wrt = False
+        self._xwalk = False
+        self.support_remote = False
+
+    def is_support_remote(self):
+        return self.support_remote
+
+    def shell_cmd(self, cmd="", timeout=15):
+        return shell_command(cmd, timeout)
+
+    def check_process(self, process_name):
+        exit_code, ret = shell_command(APP_QUERY_STR % process_name)
+        return len(ret)
+    
+    def kill_stub(self):
+        #add this function to avoid webdriver issue if stub exists, yangx.zhou@intel.com
+        cmdline = "ps -aux | grep testkit-stub | grep -v grep | awk '{ print $2}'"
+        exit_code, ret = self.shell_cmd(cmdline)
+        if exit_code == 0 and len(ret) > 0:
+            cmdline = "kill -9 %s" %ret[0]
+            exit_code, ret = self.shell_cmd(cmdline)
+        time.sleep(1)
+
+    def launch_stub(self, stub_app, stub_port="8000", debug_opt=""):
+        self.kill_stub()
+        cmdline = "%s --port:%s %s" % (stub_app, stub_port, debug_opt)
+        exit_code, ret = self.shell_cmd(cmdline)
+        time.sleep(2)
+
+    def shell_cmd_ext(self,
+                      cmd="",
+                      timeout=None,
+                      boutput=False,
+                      stdout_file=None,
+                      stderr_file=None):
+        usr = TIZEN_USER + '_user@'
+        if cmd.startswith(usr):
+            cmd = cmd[9:]
+        return shell_command_ext(cmd, timeout, boutput, stdout_file, stderr_file)
+
+    def get_device_ids(self):
+        """
+            get device list of ids
+        """
+        return ['localhost']
+
+    def get_device_info(self):
+        """
+            get tizenpc device inforamtion
+        """
+        device_info = {}
+        resolution_str = ""
+        screen_size_str = ""
+        device_model_str = ""
+        device_name_str = ""
+        build_id_str = ""
+        os_version_str = ""
+
+        # get resolution and screen size
+        exit_code, ret = shell_command("xrandr")
+        pattern = re.compile("connected (\d+)x(\d+).* (\d+mm) x (\d+mm)")
+        for line in ret:
+            match = pattern.search(line)
+            if match:
+                resolution_str = "%s x %s" % (match.group(1), match.group(2))
+                screen_size_str = "%s x %s" % (match.group(3), match.group(4))
+
+        # get architecture
+        exit_code, ret = shell_command("uname -m")
+        if len(ret) > 0:
+            device_model_str = ret[0]
+
+        # get hostname
+        exit_code, ret = shell_command("uname -n")
+        if len(ret) > 0:
+            device_name_str = ret[0]
+
+        # get os version
+        exit_code, ret = shell_command("cat /etc/issue")
+        for line in ret:
+            if len(line) > 1:
+                os_version_str = "%s %s" % (os_version_str, line)
+
+        # get build id
+        exit_code, ret = shell_command("cat /etc/os-release")
+        for line in ret:
+            if line.find("BUILD_ID=") != -1:
+                build_id_str = line.split('=')[1].strip('\"\r\n')
+
+        os_version_str = os_version_str[0:-1]
+        device_info["device_id"] = self.deviceid
+        device_info["resolution"] = resolution_str
+        device_info["screen_size"] = screen_size_str
+        device_info["device_model"] = device_model_str
+        device_info["device_name"] = device_name_str
+        device_info["os_version"] = os_version_str
+        device_info["build_id"] = build_id_str
+        return device_info
+
+    def get_server_url(self, remote_port="8000"):
+        """get server url"""
+        url_forward = "http://%s:%s" % (HOST_NS, remote_port)
+        return url_forward
+
+    def install_package(self, pkgpath):
+        """
+           install a package on tizenpc device
+        """
+        cmd = RPM_INSTALL % pkgpath
+        exit_code, ret = shell_command(cmd)
+        return ret
+
+    def install_package(self, pkgname):
+        """
+           install a package on tizenpc device
+        """
+        cmd = RPM_UNINSTALL % pkgname
+        exit_code, ret = shell_command(cmd)
+        return ret
+
+    def get_installed_package(self):
+        """get list of installed package from device"""
+        cmd = RPM_LIST
+        exit_code, ret = shell_command(cmd)
+        return ret
+
+    def download_file(self, remote_path, local_path):
+        """download file"""
+        copyfile(remote_path, local_path)
+        return True
+
+    def upload_file(self, remote_path, local_path):
+        """upload file"""
+        copyfile(local_path, remote_path)
+        return True
+
+    def _get_wrt_app(self, test_suite, test_set, fuzzy_match, auto_iu):
+        test_app_id = None
+        if auto_iu:
+            test_wgt = test_set
+            test_wgt_path = WRT_LOCATION % (test_suite, test_wgt)
+            if not self.install_app(test_wgt_path):
+                LOGGER.info("[ failed to install widget \"%s\" in target ]"
+                            % test_wgt)
+                return None
+        else:
+            test_wgt = test_suite
+
+        # check if widget installed already
+        cmd = WRT_QUERY_STR % (test_wgt)
+        exit_code, ret = shell_command(cmd)
+        if exit_code == -1:
+            return None
+        for line in ret:
+            items = line.split(':')
+            if len(items) < 1:
+                continue
+            if (fuzzy_match and items[0].find(test_wgt) != -1) or items[0] == test_wgt:
+                test_app_id = items[1].strip('\r\n')
+                break
+
+        if test_app_id is None:
+            LOGGER.info("[ test widget \"%s\" not found in target ]"
+                        % test_wgt)
+            return None
+
+        return test_app_id
+
+    def _get_xwalk_app(self, test_suite, test_set, fuzzy_match, auto_iu):
+        test_app_id = None
+        if auto_iu:
+            test_wgt = test_set
+            test_wgt_path = XWALK_LOCATION % (test_suite, test_wgt)
+            if not self.install_app(test_wgt_path):
+                LOGGER.info("[ failed to install widget \"%s\" in target ]"
+                            % test_wgt)
+                return None
+        else:
+            test_wgt = test_suite
+
+        # check if widget installed already
+        cmd = XWALK_QUERY_STR % (test_wgt)
+        exit_code, ret = shell_command(cmd)
+        if exit_code == -1:
+            return None
+        for line in ret:
+            test_app_id = line.strip('\r\n')
+
+        if test_app_id is None:
+            LOGGER.info("[ test widget \"%s\" not found in target ]"
+                        % test_wgt)
+            return None
+
+        return test_app_id
+
+    def get_launcher_opt(self, test_launcher, test_ext, test_widget, test_suite, test_set):
+        """
+        get test option dict
+        """
+        test_opt = {}
+        self._wrt = False
+        self._xwalk = False
+        app_id = None
+        test_opt["suite_name"] = test_suite
+        test_opt["launcher"] = test_launcher
+        if test_widget is not None and test_widget != "":
+            test_suite = test_widget
+        if test_launcher.find('WRTLauncher') >= 0:
+            self._wrt = True
+            test_opt["launcher"] = WRT_MAIN
+            client_cmds = test_launcher.strip().split()
+            wrt_tag = client_cmds[1] if len(client_cmds) > 1 else ""
+            test_opt['fuzzy_match'] = fuzzy_match = wrt_tag.find('z') != -1
+            test_opt['auto_iu'] = auto_iu = wrt_tag.find('iu') != -1
+            test_opt['self_exec'] = wrt_tag.find('a') != -1
+            test_opt['self_repeat'] = wrt_tag.find('r') != -1
+            app_id = self._get_wrt_app(test_suite, test_set, fuzzy_match, auto_iu)
+        elif test_launcher.find('xwalk') >= 0 and len(test_launcher) <= 16:
+            self._xwalk = True
+            test_opt["launcher"] = XWALK_MAIN
+            client_cmds = test_launcher.strip().split()
+            xpk_tag = client_cmds[1] if len(client_cmds) > 1 else ""
+            test_opt['fuzzy_match'] = fuzzy_match = xpk_tag.find('z') != -1
+            test_opt['auto_iu'] = auto_iu = xpk_tag.find('iu') != -1
+            test_opt['self_exec'] = xpk_tag.find('a') != -1
+            test_opt['self_repeat'] = xpk_tag.find('r') != -1
+            app_id = self._get_xwalk_app(test_suite, test_set, fuzzy_match, auto_iu)
+        else:
+            app_id = test_launcher
+
+        if app_id is None:
+            return None
+        test_opt["test_app_id"] = app_id
+        return test_opt
+
+    def start_debug(self, dlogfile):
+        global debug_flag, metux
+        debug_flag = True
+        metux = threading.Lock()
+
+    def stop_debug(self):
+        global debug_flag, metux
+        metux.acquire()
+        debug_flag = False
+        metux.release()
+
+    def launch_app(self, wgt_name):
+        blauched = False
+        if self._wrt:
+            timecnt = 0
+            cmdline = WRT_STOP_STR % (wgt_name)
+            exit_code, ret = shell_command(cmdline)
+            cmdline = WRT_START_STR % (wgt_name)
+            while timecnt < 3:
+                exit_code, ret_out, ret_err = shell_command_ext(cmdline, 30)
+                if exit_code == "0":
+                    blauched = True
+                    break
+                timecnt += 1
+                time.sleep(3)
+        elif self._xwalk:
+            cmd = APP_QUERY_STR % (wgt_name)
+            exit_code, ret = shell_command(cmd)
+            for line in ret:
+                cmd = APP_KILL_STR % (line.strip('\r\n'))
+                exit_code, ret = shell_command(cmd)
+            cmdline = XWALK_START_STR % (XWALK_MAIN, wgt_name)
+            exit_code, ret = shell_command(cmdline)
+            time.sleep(3)
+            blauched = True
+        else:
+            cmdline = APP_NONBLOCK_STR % (wgt_name)
+            exit_code, ret = shell_command(cmdline)
+            time.sleep(3)
+            cmd = APP_QUERY_STR % (wgt_name)
+            exit_code, ret = shell_command(cmd)
+            if ret and len(ret):
+                blauched = True
+
+        return blauched
+
+    def kill_app(self, wgt_name):
+        if self._wrt:
+            cmdline = WRT_STOP_STR % (wgt_name)
+            exit_code, ret = shell_command(cmdline)
+        elif self._xwalk:
+            cmd = APP_QUERY_STR % (wgt_name)
+            exit_code, ret = shell_command(cmd)
+            for line in ret:
+                cmd = APP_KILL_STR % (line.strip('\r\n'))
+                exit_code, ret = shell_command(cmd)
+        return True
+
+    def install_app(self, wgt_path="", timeout=90):
+        if self._wrt:
+            cmd = WRT_INSTALL_STR % (wgt_path)
+        elif self._xwalk:
+            ext = wgt_path.split(".")[1]
+            cmd = XWALK_INSTALL_STR % (ext, wgt_path)
+        else:
+            return True
+        exit_code, ret = shell_command(cmd, timeout)
+        if exit_code == -1:
+            cmd = APP_QUERY_STR % (wgt_path)
+            exit_code, ret = shell_command(cmd)
+            for line in ret:
+                cmd = APP_KILL_STR % (line.strip('\r\n'))
+                exit_code, ret = shell_command(cmd)
+            return False
+        else:
+            return True
+
+    def uninstall_app(self, wgt_name):
+        if self._wrt:
+            cmd = WRT_UNINSTL_STR % (wgt_name)
+        elif self._xwalk:
+            cmd = XWALK_UNINSTL_STR % (wgt_name)
+        else:
+            return True
+        exit_code, ret = shell_command(cmd)
+        return True
+
+    def get_buildinfo(self):
+        """ get builf info"""
+        build_info = {}
+        build_info['buildid'] = ''
+        build_info['manufacturer'] = ''
+        build_info['model'] = ''
+        return build_info
+
+
+def get_target_conn():
+    """ Get connection for Test Target"""
+    return tizenHost()
diff --git a/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite2.0/testkitlite/commodule/tizenmobile.py b/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite2.0/testkitlite/commodule/tizenmobile.py
new file mode 100755 (executable)
index 0000000..3780384
--- /dev/null
@@ -0,0 +1,637 @@
+#!/usr/bin/python
+#
+# Copyright (C) 2012 Intel Corporation
+#
+# 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
+# of the License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# Authors:
+#           Chengtao,Liu  <chengtaox.liu@intel.com>
+
+""" The implementation of TIZEN mobile communication"""
+
+import os
+import time
+import socket
+import threading
+import re
+import shutil
+import ConfigParser
+import xml.etree.ElementTree as etree
+import platform
+
+from testkitlite.util.log import LOGGER
+from testkitlite.util.autoexec import shell_command, shell_command_ext
+from testkitlite.util.killall import killall
+from testkitlite.util.errors import InvalidDeviceException
+
+EXISTS = os.path.exists
+
+
+TCT_CONFIG_FILE = "/opt/tools/TCT_CONFIG"
+tct_parser = ConfigParser.ConfigParser()
+tct_parser.read(TCT_CONFIG_FILE)
+
+DEVICE_SUITE_TARGET_30 = tct_parser.get('DEVICE', 'DEVICE_SUITE_TARGET_30')
+DEVICE_USER_30 = tct_parser.get('DEVICE', 'DEVICE_EXECUTION_MODE_30')
+
+os.environ['TEST_PLATFORM'] = 'tizen'
+os.environ['CONNECT_TYPE'] = 'sdb'
+LOCAL_HOST_NS = "127.0.0.1"
+BUILD_INFO_FILE = os.path.join(DEVICE_SUITE_TARGET_30,'Documents/tct/buildinfo.xml')
+RPM_INSTALL = "sdb -s %s shell rpm -ivh %s"
+RPM_UNINSTALL = "sdb -s %s shell rpm -e %s"
+RPM_LIST = "sdb -s %s shell \"rpm -qa|grep tct\""
+
+APP_QUERY_STR = "sdb -s %s shell \"ps aux|grep '%s'|grep -v grep\"|awk '{print $2}'"
+STUB_KILL_STR = "sdb -s %s shell \"ps aux|grep '%s'|grep -v grep\"|awk '{print $2}'|xargs kill -9"
+APP_KILL_STR = "sdb -s %s shell kill -9 %s"
+APP_NONBLOCK_STR = "sdb -s %s shell '%s' &"
+SDB_COMMAND = "sdb -s %s shell '%s'"
+SDB_COMMAND_RTN = "sdb -s %s shell '%s; echo returncode=$?'"
+#SDB_COMMAND_APP = "sdb -s %s shell su - app -c 'export DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/5000/dbus/user_bus_socket;%s;echo returncode=$?'"
+#SDB_COMMAND_APP = "sdb -s %s shell su - %s -c 'export DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/%s/dbus/user_bus_socket;%s;echo returncode=$?'"
+SDB_COMMAND_APP = """sdb -s %s shell 'su - %s -c "export DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/%s/dbus/user_bus_socket;%s";echo returncode=$?'"""
+
+# wrt-launcher constants
+
+WRT_MAIN = "wrt-launcher"
+WRT_QUERY_STR = "sdb -s %s shell wrt-launcher -l | grep '%s'|awk '{print $2\":\"$NF}'"
+WRT_START_STR = "sdb -s %s shell 'wrt-launcher -s %s; echo returncode=$?'"
+WRT_STOP_STR = "sdb -s %s shell wrt-launcher -k %s"
+WRT_INSTALL_STR = "sdb -s %s shell wrt-installer -i %s"
+WRT_UNINSTL_STR = "sdb -s %s shell wrt-installer -un %s"
+WRT_LOCATION = os.path.join(DEVICE_SUITE_TARGET_30, "tct/opt/%s/%s.wgt")
+WRT_SMACK_STR = "sdb -s %s shell 'echo \"User::Shell User::Pkg::%s rwx\" | smackload'"
+WRT_SMACK_REV_STR = "sdb -s %s shell 'echo \"User::Pkg::%s User::Shell rwx\" | smackload'"
+#default user is changed "app" to "owner"
+#jh0219.han@samsung.com
+
+# crosswalk constants
+#XWALK_MAIN = "xwalkctl"
+#XWALK_MAIN = "open_app"
+XWALK_MAIN = os.environ.get("Launcher","app_launcher -s")
+if cmp(XWALK_MAIN,'app_launcher') == 0:
+    XWALK_MAIN = 'app_launcher -s '
+#XWALK_QUERY_STR = "sdb -s %s shell su - app -c 'export DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/5000/dbus/user_bus_socket;ail_list' | grep -w %s | awk '{print $(NF-1)}'"
+XWALK_QUERY_STR = "sdb -s %s shell su - %s -c 'export DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/%s/dbus/user_bus_socket;app_launcher -l' | grep -w %s | awk '{print $2}'"
+#XWALK_QUERY_STR = "sdb -s %s shell su - app -c 'export DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/5000/dbus/user_bus_socket;xwalkctl' | grep -w %s | awk '{print $(NF-1)}'"
+#XWALK_START_STR = "sdb -s %s shell su - app -c 'export DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/5000/dbus/user_bus_socket;launch_app %s' &"
+XWALK_START_STR = "sdb -s %s shell su - %s -c 'export DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/%s/dbus/user_bus_socket;%s %s' &"
+#XWALK_START_STR = "sdb -s %s shell su - %s -c 'export DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/%s/dbus/user_bus_socket;xwalk-launcher %s' &"
+XWALK_INSTALL_STR = "sdb -s %s shell su - %s -c 'export DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/%s/dbus/user_bus_socket;pkgcmd -i -t %s -p  %s -q'"
+#XWALK_INSTALL_STR = "sdb -s %s shell su - app -c 'export DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/5000/dbus/user_bus_socket;xwalkctl --install %s'"
+XWALK_UNINSTL_STR = "sdb -s %s shell su - %s -c 'export DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/%s/dbus/user_bus_socket;pkgcmd -u -t wgt -q -n %s'"
+#XWALK_UNINSTL_STR = "sdb -s %s shell su - app -c 'export DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/5000/dbus/user_bus_socket;xwalkctl --uninstall %s'"
+XWALK_LOCATION = os.path.join(DEVICE_SUITE_TARGET_30, "tct/opt/%s/%s.wgt")
+#default user is changed "app" to "owner"
+#jh0219.han@samsung.com
+
+# redefine constants for windows
+if platform.system() == "Windows":
+    APP_QUERY_STR = 'sdb -s %s shell "ps aux|grep %s|grep -v grep |awk \'{print $2}\'"'
+    SDB_COMMAND = 'sdb -s %s shell "%s"'
+    SDB_COMMAND_RTN = 'sdb -s %s shell "%s; echo returncode=$?"'
+    SDB_COMMAND_APP = 'sdb -s %s shell \"su - %s -c \"export DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/%s/dbus/user_bus_socket;%s\";echo returncode=$?\"'
+    WRT_START_STR = 'sdb -s %s shell "wrt-launcher -s %s; echo returncode=$?"'
+    XWALK_QUERY_STR = 'sdb -s %s shell su - %s -c "export DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/%s/dbus/user_bus_socket;app_launcher -l | grep -w %s | awk \'{print \$2}\'"'
+
+XWALK_QUERY_ID = "sdb -s %s shell  'id -u %s'"
+
+temp_tuser = DEVICE_USER_30.split('/')
+
+if not temp_tuser:
+    TIZEN_USER = 'owner'
+else:
+    TIZEN_USER = temp_tuser[0]
+
+LOGGER.debug('testkit-lite current user : %s' % str(TIZEN_USER))
+
+#TIZEN_USER = os.environ.get('TIZEN_USER','owner').strip()
+#default user is changed "app" to "owner"
+#jh0219.han@samsung.com
+
+#print os.environ['tizen_user']
+# dlog constants
+DLOG_CLEAR = "sdb -s %s shell dlogutil -c"
+DLOG_WRT = "sdb -s %s shell dlogutil -v threadtime"
+
+def debug_trace(cmdline, logfile):
+    global debug_flag, metux
+    wbuffile = file(logfile, "a")
+    import subprocess
+    exit_code = None
+    proc = subprocess.Popen(args=cmdline,
+                            shell=True,
+                            stdout=wbuffile,
+                            stderr=None)
+    while True:
+        exit_code = proc.poll()
+        if exit_code is not None:
+            break
+        time.sleep(0.5)
+        metux.acquire()
+        proc_flag = debug_flag
+        metux.release()
+        if not proc_flag:
+            break
+    wbuffile.close()
+    if exit_code is None:
+        killall(proc.pid)
+
+
+def _get_device_ids():
+    """get tizen device list of ids"""
+    result = []
+    exit_code, ret = shell_command("sdb start-server")
+    exit_code, ret = shell_command("sdb devices")
+    for line in ret:
+        if str.find(line, "\tdevice") != -1:
+            result.append(line.split("\t")[0])
+    return result
+
+class TizenMobile:
+
+    """
+    Implementation for transfer data
+    between Host and Tizen Mobile Device
+    """
+
+    def __init__(self, device_id=None):
+        self.deviceid = device_id
+        self.is_NE = 0
+        if self.deviceid and str(self.deviceid).find('NE') > -1:
+            self.is_NE = int(self.deviceid.split(':')[1].split('_')[0])
+            self.deviceid = self.deviceid.split('_')[1]
+        self._wrt = False
+        self._xwalk = False
+        self.support_remote = True
+        self.get_user_id()
+
+#default user is changed "app" to "owner"
+#jh0219.han@samsung.com
+
+    def is_NE_mode(self):
+        return self.is_NE
+
+    def get_devid(self):
+        return self.deviceid
+
+    def get_user_id(self):
+        if TIZEN_USER == 'owner':
+            self.port = '5000'
+        else:
+            cmdline = XWALK_QUERY_ID % (self.deviceid, TIZEN_USER)
+            exit_code, ret = shell_command(cmdline)
+            if exit_code == -1:
+                LOGGER.info("[ can not get user id ]")
+            if len(ret) >0 :
+                self.port = ret[0]
+
+    def is_support_remote(self):
+        return self.support_remote
+
+    def shell_cmd(self, cmd="", timeout=15):
+        cmdline = SDB_COMMAND % (self.deviceid, cmd)
+        return shell_command(cmdline, timeout)
+
+    def check_process(self, process_name):
+        exit_code, ret = shell_command(
+            APP_QUERY_STR % (self.deviceid, process_name))
+        return len(ret)
+
+    def kill_stub(self):
+        #add this function to avoid webdriver issue if stub exists running on device,yangx.zhou@intel.com
+        cmdline = "ps -aux | grep testkit-stub | grep -v grep | awk '{ print $2 }'"
+        exit_code, ret = self.shell_cmd(cmdline)
+        if exit_code == 0 and len(ret) >0:
+            cmdline = "kill -9 %s" %ret[0]
+            exit_code, ret = self.shell_cmd(cmdline)
+
+    def launch_stub(self, stub_app, stub_port, debug_opt=""):
+        #block OTCIS-3781
+        #self.kill_stub()
+        cmdline = "/opt/home/developer/%s --port:%s %s; sleep 2s" % \
+                (stub_app, stub_port, debug_opt)
+
+        exit_code, ret = self.shell_cmd(cmdline)
+        time.sleep(2)
+
+    def shell_cmd_ext(self,
+                      cmd="",
+                      timeout=None,
+                      boutput=False,
+                      stdout_file=None,
+                      stderr_file=None):
+        #if cmd.startswith('app_user@'):
+        #jh0219.han@samsung.com
+        #modified considering multi_user
+        usr = TIZEN_USER + '_user@'
+        usr_len = len(usr)
+        if cmd.startswith(usr):
+            cmdline = SDB_COMMAND_APP % (self.deviceid,TIZEN_USER, self.port, cmd[usr_len:])
+        else:
+            cmdline = SDB_COMMAND_RTN % (self.deviceid, cmd)
+        return shell_command_ext(cmdline, timeout, boutput, stdout_file, stderr_file)
+
+    def get_device_info(self):
+        """get tizen device inforamtion"""
+        device_info = {}
+        resolution_str = ""
+        screen_size_str = ""
+        device_model_str = ""
+        device_name_str = ""
+        build_id_str = ""
+        os_version_str = ""
+
+        # get resolution and screen size
+        exit_code, ret = shell_command(
+            "sdb -s %s shell xrandr" % self.deviceid)
+        pattern = re.compile("connected (\d+)x(\d+).* (\d+mm) x (\d+mm)")
+        for line in ret:
+            match = pattern.search(line)
+            if match:
+                resolution_str = "%s x %s" % (match.group(1), match.group(2))
+                screen_size_str = "%s x %s" % (match.group(3), match.group(4))
+
+        # get architecture
+        exit_code, ret = shell_command(
+            "sdb -s %s shell cat /etc/info.ini" % self.deviceid)
+        for line in ret:
+            if line.find("Model=") != -1:
+                device_model_str = str(line.split('=')[1]).replace(";","")
+                break
+
+        # get hostname
+        exit_code, ret = shell_command(
+            "sdb -s %s shell uname -n" % self.deviceid)
+        if len(ret) > 0:
+            device_name_str = ret[0]
+
+        # get os version
+        exit_code, ret = shell_command(
+            "sdb -s %s shell cat /etc/issue" % self.deviceid)
+        for line in ret:
+            if len(line) > 1:
+                os_version_str = "%s %s" % (os_version_str, line)
+
+        # get build id
+        exit_code, ret = shell_command(
+            "sdb -s %s shell cat /etc/os-release" % self.deviceid)
+        for line in ret:
+            if line.find("BUILD_ID=") != -1:
+                build_id_str = line.split('=')[1].strip('\"\r\n')
+
+        os_version_str = os_version_str[0:-1]
+        device_info["device_id"] = self.deviceid
+        device_info["resolution"] = resolution_str
+        device_info["screen_size"] = screen_size_str
+        device_info["device_model"] = device_model_str
+        device_info["device_name"] = device_name_str
+        device_info["os_version"] = os_version_str
+        device_info["build_id"] = build_id_str
+        return device_info
+
+    def get_server_url(self, remote_port="8000"):
+        """forward request a host tcp port to targe tcp port"""
+        if remote_port is None:
+            return None
+
+        os.environ['no_proxy'] = LOCAL_HOST_NS
+        host = LOCAL_HOST_NS
+        inner_port = 9000
+        time_out = 2
+        bflag = False
+        while True:
+            sock_inner = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
+            sock_inner.settimeout(time_out)
+            try:
+                sock_inner.bind((host, inner_port))
+                sock_inner.close()
+                bflag = False
+            except socket.error as error:
+                if error.errno == 98 or error.errno == 13:
+                    bflag = True
+            if bflag:
+                inner_port += 1
+            else:
+                break
+        host_port = str(inner_port)
+        cmd = "sdb -s %s forward tcp:%s tcp:%s" % \
+            (self.deviceid, host_port, remote_port)
+        exit_code, ret = shell_command(cmd)
+        url_forward = "http://%s:%s" % (host, host_port)
+        return url_forward
+
+    def download_file(self, remote_path, local_path):
+        """download file from device"""
+        local_path_dir = os.path.dirname(local_path)
+        if not os.path.exists(local_path_dir):
+            os.makedirs(local_path_dir)
+        filename = os.path.basename(remote_path)
+        cmd = "sdb -s %s pull %s %s" % (
+            self.deviceid, remote_path, local_path_dir)
+        exit_code, ret = shell_command(cmd)
+        if exit_code != 0:
+            error = ret[0].strip('\r\n') if len(ret) else "sdb shell timeout"
+            LOGGER.info("[ Download file \"%s\" failed, error: %s ]"
+                        % (remote_path, error))
+            return False
+        else:
+            src_path = os.path.join(local_path_dir, filename)
+            if src_path != local_path:
+                shutil.move(src_path, local_path)
+            return True
+
+    def upload_file(self, remote_path, local_path):
+        """upload file to device"""
+        cmd = "sdb -s %s push %s %s" % (self.deviceid, local_path, remote_path)
+        exit_code, ret = shell_command(cmd)
+        if exit_code != 0:
+            error = ret[0].strip('\r\n') if len(ret) else "sdb shell timeout"
+            LOGGER.info("[ Upload file \"%s\" failed,"
+                        " get error: %s ]" % (local_path, error))
+            return False
+        else:
+            return True
+
+    def _get_wrt_app(self, test_suite, test_set, fuzzy_match, auto_iu):
+        test_app_id = None
+        if auto_iu:
+            test_wgt = test_set
+            test_wgt_path = WRT_LOCATION % (test_suite, test_wgt)
+            if not self.install_app(test_wgt_path):
+                LOGGER.info("[ failed to install widget \"%s\" in target ]"
+                            % test_wgt)
+                return None
+        else:
+            test_wgt = test_suite
+
+        # check if widget installed already
+        cmd = WRT_QUERY_STR % (self.deviceid, test_wgt)
+        exit_code, ret = shell_command(cmd)
+        if exit_code == -1:
+            return None
+        for line in ret:
+            items = line.split(':')
+            if len(items) < 1:
+                continue
+            if (fuzzy_match and items[0].find(test_wgt) != -1) or items[0] == test_wgt:
+                test_app_id = items[1].strip('\r\n')
+                break
+
+        if test_app_id is None:
+            LOGGER.info("[ test widget \"%s\" not found in target ]"
+                        % test_wgt)
+            return None
+
+        return test_app_id
+
+    def _get_xwalk_app(self, test_suite, test_set, fuzzy_match, auto_iu):
+        test_app_id = None
+        if auto_iu:
+            test_wgt = test_set
+            test_wgt_path = XWALK_LOCATION % (test_suite, test_wgt)
+
+            if not self.install_app(test_wgt_path):
+                LOGGER.info("[ failed to install widget \"%s\" in target ]"
+                            % test_wgt)
+                return None
+        else:
+            test_wgt = test_suite
+
+        # check if widget installed already
+        cmd = XWALK_QUERY_STR % (self.deviceid, TIZEN_USER, self.port, test_wgt)
+        exit_code, ret = shell_command(cmd)
+        if exit_code == -1:
+            return None
+        for line in ret:
+            test_app_id = line.strip('\r\n')
+        if test_app_id is None:
+            LOGGER.info("[ test widget \"%s\" not found in target ]"
+                        % test_wgt)
+            return None
+
+        return test_app_id
+
+    def get_launcher_opt(self, test_launcher, test_ext, test_widget, test_suite, test_set):
+        """
+        get test option dict
+        """
+        test_opt = {}
+        self._wrt = False
+        self._xwalk = False
+        app_id = None
+        test_opt["suite_name"] = test_suite
+        test_opt["launcher"] = test_launcher
+        if test_widget is not None and test_widget != "":
+            test_suite = test_widget
+        if test_launcher.find('WRTLauncher') >= 0:
+            self._wrt = True
+            test_opt["launcher"] = WRT_MAIN
+            client_cmds = test_launcher.strip().split()
+            wrt_tag = client_cmds[1] if len(client_cmds) > 1 else ""
+            test_opt['fuzzy_match'] = fuzzy_match = wrt_tag.find('z') != -1
+            test_opt['auto_iu'] = auto_iu = wrt_tag.find('iu') != -1
+            test_opt['self_exec'] = wrt_tag.find('a') != -1
+            test_opt['self_repeat'] = wrt_tag.find('r') != -1
+            app_id = self._get_wrt_app(test_suite, test_set, fuzzy_match, auto_iu)
+        elif test_launcher.find('xwalk') >= 0 and len(test_launcher) <= 16:
+            self._xwalk = True
+            test_opt["launcher"] = XWALK_MAIN
+            client_cmds = test_launcher.strip().split()
+            xpk_tag = client_cmds[1] if len(client_cmds) > 1 else ""
+            test_opt['fuzzy_match'] = fuzzy_match = xpk_tag.find('z') != -1
+            test_opt['auto_iu'] = auto_iu = xpk_tag.find('iu') != -1
+            test_opt['self_exec'] = xpk_tag.find('a') != -1
+            test_opt['self_repeat'] = xpk_tag.find('r') != -1
+            app_id = self._get_xwalk_app(test_suite, test_set, fuzzy_match, auto_iu)
+        else:
+            app_id = test_launcher
+
+        if app_id is None:
+            return None
+        length = len(app_id) - 1
+        #test_opt["test_app_id"] = '''%s''' % app_id[1:length]
+        test_opt["test_app_id"] = app_id
+        print app_id
+        cmd_app_id = app_id.split('.')[0]
+        cmd1 = WRT_SMACK_STR % (self.deviceid, cmd_app_id[1:])
+        cmd2 = WRT_SMACK_REV_STR % (self.deviceid, cmd_app_id[1:])
+        print cmd1
+        print cmd2
+
+        shell_command(cmd1)
+        shell_command(cmd2)
+
+        return test_opt
+
+    def install_package(self, pkgpath):
+        """install a package on tizen device:
+        push package and install with shell command
+        """
+        cmd = RPM_INSTALL % (self.deviceid, pkgpath)
+        exit_code, ret = shell_command(cmd)
+        return ret
+
+    def uninstall_package(self, pkgname):
+        """install a package on tizen device:
+        push package and install with shell command
+        """
+        cmd = RPM_UNINSTALL % (self.deviceid, pkgname)
+        exit_code, ret = shell_command(cmd)
+        return ret
+
+    def get_installed_package(self):
+        """get list of installed package from device"""
+        cmd = RPM_LIST % self.deviceid
+        exit_code, ret = shell_command(cmd)
+        return ret
+
+    def start_debug(self, dlogfile):
+        global debug_flag, metux
+        if self.is_NE_mode(): 
+            return
+        debug_flag = True
+        metux = threading.Lock()
+        cmdline = DLOG_CLEAR % self.deviceid
+        exit_code, ret = shell_command(cmdline)
+        cmdline = DLOG_WRT % self.deviceid
+        th = threading.Thread(target=debug_trace, args=(cmdline, dlogfile+'.dlog'))
+        th.setDaemon(True)
+        th.start()        
+
+    def stop_debug(self):
+        global debug_flag, metux
+        if self.is_NE_mode(): 
+            return
+        metux.acquire()
+        debug_flag = False
+        metux.release()
+
+    def launch_app(self, wgt_name):
+        blauched = False
+        if self._wrt:
+            timecnt = 0
+            cmdline = WRT_STOP_STR % (self.deviceid, wgt_name)
+            exit_code, ret = shell_command(cmdline)
+            cmdline = WRT_START_STR % (self.deviceid, wgt_name)
+            while timecnt < 3:
+                exit_code, ret_out, ret_err = shell_command_ext(cmdline, 30)
+                if exit_code == "0":
+                    blauched = True
+                    break
+                timecnt += 1
+                time.sleep(3)
+        elif self._xwalk:
+            cmd = APP_QUERY_STR % (self.deviceid, wgt_name)
+            exit_code, ret = shell_command(cmd)
+            for line in ret:
+                cmd = APP_KILL_STR % (self.deviceid, line.strip('\r\n'))
+                exit_code, ret = shell_command(cmd)
+            cmdline = XWALK_START_STR % (self.deviceid, TIZEN_USER, self.port, XWALK_MAIN, wgt_name)
+            exit_code, ret = shell_command(cmdline)
+            time.sleep(3)
+            blauched = True
+        else:
+            cmdline = APP_NONBLOCK_STR % (self.deviceid, wgt_name)
+            exit_code, ret = shell_command(cmdline)
+            time.sleep(3)
+            cmd = APP_QUERY_STR % (self.deviceid, wgt_name)
+            exit_code, ret = shell_command(cmd)
+            if ret and len(ret):
+                blauched = True
+
+        return blauched
+
+    def kill_app(self, wgt_name):
+        if self._wrt:
+            cmdline = WRT_STOP_STR % (self.deviceid, wgt_name)
+            exit_code, ret = shell_command(cmdline)
+        elif self._xwalk:
+            cmd = APP_QUERY_STR % (self.deviceid, wgt_name)
+            exit_code, ret = shell_command(cmd)
+            for line in ret:
+                cmd = APP_KILL_STR % (self.deviceid, line.strip('\r\n'))
+                exit_code, ret = shell_command(cmd)
+        return True
+
+    def install_app(self, wgt_path="", timeout=90):
+        if self._wrt:
+            cmd = WRT_INSTALL_STR % (self.deviceid, wgt_path)
+        elif self._xwalk:
+            if len(wgt_path):
+                 ext = wgt_path.split(".")[1]
+            cmd = XWALK_INSTALL_STR % (self.deviceid, TIZEN_USER, self.port, ext, wgt_path)
+        else:
+            return True
+        exit_code, ret = shell_command(cmd, timeout)
+        if exit_code == -1:
+            cmd = APP_QUERY_STR % (self.deviceid, wgt_path)
+            exit_code, ret = shell_command(cmd)
+            for line in ret:
+                cmd = APP_KILL_STR % (self.deviceid, line.strip('\r\n'))
+                exit_code, ret = shell_command(cmd)
+            return False
+        else:
+            return True
+
+    def uninstall_app(self, wgt_name):
+        if self._wrt:
+            cmd = WRT_UNINSTL_STR % (self.deviceid, TIZEN_USER, self.port,  wgt_name)
+        elif self._xwalk:
+            cmd = XWALK_UNINSTL_STR % (self.deviceid, TIZEN_USER,self.port,  wgt_name)
+        else:
+            return True
+        exit_code, ret = shell_command(cmd)
+        return True
+
+    def get_buildinfo(self, _tizenV):
+        """ get builf info"""
+        device_file = DEVICE_SUITE_TARGET_30 + '/Documents/tct/buildinfo.xml'
+
+        buildinfo_file = '/opt/testkit/lite3.0/' + self.deviceid + '/buildinfo.xml'
+        build_info = {}
+        build_info['buildid'] = ''
+        build_info['manufacturer'] = ''
+        build_info['model'] = ''
+
+        if self.download_file(device_file, buildinfo_file) \
+            and EXISTS(buildinfo_file):
+            root = etree.parse(buildinfo_file).getroot()
+            for element in root.findall("buildinfo"):
+                if element is not None:
+                    if element.get("name").lower() == 'buildversion':
+                        child = etree.Element.getchildren(element)
+                        if child and child[0].text:
+                            buildid = child[0].text
+                            build_info['buildid'] = buildid
+                    if element.get("name").lower() == 'manufacturer':
+                        child = etree.Element.getchildren(element)
+                        if child and child[0].text:
+                            manufacturer = child[0].text
+                            build_info['manufacturer'] = manufacturer
+                    if element.get("name").lower() == 'model':
+                        child = etree.Element.getchildren(element)
+                        if child and child[0].text:
+                            model = child[0].text
+                            build_info['model'] = model
+            os.remove(buildinfo_file)
+        return build_info
+
+def get_target_conn(device_id=None):
+    """ Get connection for Test Target"""
+    if device_id is None:
+        dev_list = _get_device_ids()
+        if len(dev_list):
+            device_id = dev_list[0]
+        else:
+            raise InvalidDeviceException('No TIZEN device found!')
+    return TizenMobile(device_id)
diff --git a/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite2.0/testkitlite/engines/Makefile.am b/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite2.0/testkitlite/engines/Makefile.am
new file mode 100755 (executable)
index 0000000..16d6aaf
--- /dev/null
@@ -0,0 +1,18 @@
+# Copyright (C) 2012 Intel Corporation
+# 
+# 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
+# of the License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# Authors:
+#              Zhang, Huihui <huihuix.zhang@intel.com>
+#              Wendong,Sui  <weidongx.sun@intel.com>
+
+testkitliteenginesdir = /usr/lib/python2.7/dist-packages/testkitlite/engines
+dist_testkitliteengines_SCRIPTS = *.py
diff --git a/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite2.0/testkitlite/engines/__init__.py b/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite2.0/testkitlite/engines/__init__.py
new file mode 100755 (executable)
index 0000000..8b13789
--- /dev/null
@@ -0,0 +1 @@
+
diff --git a/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite2.0/testkitlite/engines/androidunit.py b/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite2.0/testkitlite/engines/androidunit.py
new file mode 100755 (executable)
index 0000000..57c1c1f
--- /dev/null
@@ -0,0 +1,183 @@
+#!/usr/bin/python
+#
+# Copyright (C) 2012 Intel Corporation
+#
+# 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
+# of the License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# Authors:
+#           Chengtao,Liu  <chengtaox.liu@intel.com>
+""" The implementation of pyunit test engine"""
+
+import os
+import time
+import sys
+import threading
+import uuid
+import StringIO
+import unittest
+from unittest import TestResult
+from datetime import datetime
+from testkitlite.util.log import LOGGER
+from testkitlite.util.result import TestSetResut
+
+
+ANDROID_UNIT_STATUS = "INSTRUMENTATION_STATUS:"
+ANDROID_UNIT_STATUS_CODE = "INSTRUMENTATION_STATUS_CODE:"
+ANDROID_UNIT_STATUS_LEN = len(ANDROID_UNIT_STATUS)
+ANDROID_UNIT_STATUS_CODE_LEN = len(ANDROID_UNIT_STATUS_CODE)
+ANDROID_UNIT_START = "am instrument -r -w -e class %s %s/android.test.InstrumentationTestRunner"
+DATE_FORMAT_STR = "%Y-%m-%d %H:%M:%S"
+result_buffer = None
+
+
+def _case_create(case_class, case_id, purpose, status, message):
+    _case = dict()
+    _case['case_class'] = case_class
+    _case['case_id'] = case_id
+    _case['purpose'] = case_id
+    _case['start_at'] = datetime.now().strftime(DATE_FORMAT_STR)
+    if status == '-2':
+        _case['result'] = 'FAIL'
+    elif status == '0':
+        _case['result'] = 'PASS'
+    _case['stdout'] = '[message]' + message
+    _case['end_at'] = datetime.now().strftime(DATE_FORMAT_STR)
+    return _case
+
+
+def _adunit_lines_handler(outstr):
+    """android unittest result wrapper"""
+    lines = outstr.split('\r\n')
+    results = []
+    b_stack = False
+    case_class=case_id = purpose = result = message = ''
+    for line in lines:
+        #print 'debug', line
+        if line.startswith(ANDROID_UNIT_STATUS):
+            content = line[ANDROID_UNIT_STATUS_LEN:].strip()
+            if content.startswith('class='):
+                case_class = content[content.find('class=')+6:]
+            elif content.startswith('test='):
+                result = message = ''
+                b_stack = False
+                case_id = content[content.find('test=')+5:]
+                purpose = case_id
+            elif content.startswith('stack='):
+                message = content[content.find('stack=')+6:]
+                b_stack = True
+        elif line.startswith(ANDROID_UNIT_STATUS_CODE):
+            status = line[ANDROID_UNIT_STATUS_CODE_LEN:].strip()
+            if status != '1': # FAIL / PASS
+                results.append(_case_create(case_class, case_id, purpose, status, message))
+               # print 'debug', results 
+        else:
+            if b_stack:
+                message += line
+    result_buffer.extend_result(results)
+
+
+def _adunit_test_exec(conn, test_session, test_set_path, result_obj):
+    """function for running core tests"""
+    global result_buffer
+    result_buffer = result_obj
+    result_obj.set_status(0)
+    for tc in test_set_path['cases']:
+   # LOGGER.info('[ android unit test, entry: %s ]' % test_set_path)
+   # test_cmd = ANDROID_UNIT_START % (test_set_path, '.'.join(test_set_path.split('.')[:-1]))
+   # _code, _out, _error = conn.shell_cmd_ext(cmd=test_cmd, timeout=None, boutput=True, callbk=_adunit_lines_handler)
+   # result_obj.set_status(1)
+        LOGGER.info('[ android unit test, entry: %s ]' % tc['entry'])
+        test_cmd = ANDROID_UNIT_START % (tc['entry'], '.'.join(tc['entry'].split('.')[:-1]))
+        _code, _out, _error = conn.shell_cmd_ext(cmd=test_cmd, timeout=None, boutput=True, callbk=_adunit_lines_handler)
+    result_obj.set_status(1)
+
+class TestWorker(object):
+
+    """Test executor for testkit-lite"""
+
+    def __init__(self, conn):
+        super(TestWorker, self).__init__()
+        self.conn = conn
+        self.server_url = None
+        self.result_obj = None
+        self.opts = dict({'block_size': 300,
+                          'test_type': None,
+                          'auto_iu': False,
+                          'fuzzy_match': False,
+                          'self_exec': False,
+                          'self_repeat': False,
+                          'debug_mode': False
+                          })
+
+    def init_test(self, params):
+        """init the test envrionment"""
+        self.opts['testset_name'] = params.get('testset-name', '')
+        self.opts['testsuite_name'] = params.get('testsuite-name', '')
+        self.opts['debug_log_base'] = params.get("debug-log-base", '')
+        return str(uuid.uuid1())
+
+    def run_test(self, sessionid, test_set):
+        """
+            process the execution for a test set
+        """
+        #print 'debug', test_set
+        if sessionid is None:
+            return False
+        disabledlog = os.environ.get("disabledlog","")
+        # start debug trace thread
+        if len(disabledlog) > 1:
+            pass
+        else:
+            self.conn.start_debug(self.opts['debug_log_base'])
+        time.sleep(1)
+        self.result_obj = TestSetResut(
+            self.opts['testsuite_name'], self.opts['testset_name'])
+        self.opts['async_th'] = threading.Thread(
+            target=_adunit_test_exec,
+            args=(self.conn, sessionid, test_set, self.result_obj)
+        )
+       # self.opts['async_th'] = threading.Thread(
+       #     target=_adunit_test_exec,
+       #     args=(self.conn, sessionid, test_set['test_set_src'], self.result_obj)
+       # )
+        self.opts['async_th'].start()
+        return True
+
+    def get_test_status(self, sessionid):
+        """poll the test task status"""
+        if sessionid is None:
+            return None
+        result = {}
+        result["msg"] = []
+        result["finished"] = str(self.result_obj.get_status())
+        return result
+
+    def get_test_result(self, sessionid):
+        """get the test result for a test set """
+        result = {}
+        if sessionid is None:
+            return result
+
+        result = self.result_obj.get_result()
+        return result
+
+    def finalize_test(self, sessionid):
+        """clear the test stub and related resources"""
+        if sessionid is None:
+            return False
+
+        if self.result_obj is not None:
+            self.result_obj.set_status(1)
+
+        # stop debug thread
+        self.conn.stop_debug()
+
+        return True
diff --git a/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite2.0/testkitlite/engines/default.py b/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite2.0/testkitlite/engines/default.py
new file mode 100755 (executable)
index 0000000..4549afe
--- /dev/null
@@ -0,0 +1,653 @@
+#!/usr/bin/python
+#
+# Copyright (C) 2012 Intel Corporation
+#
+# 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
+# of the License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# Authors:
+#           Chengtao,Liu  <chengtaox.liu@intel.com>
+""" The implementation of default test engine"""
+
+import os
+import time
+import threading
+import uuid
+import ConfigParser
+
+from datetime import datetime
+from testkitlite.util.log import LOGGER
+from testkitlite.util.httprequest import get_url, http_request
+from testkitlite.util.result import TestSetResut
+
+TCT_CONFIG_FILE = "/opt/tools/TCT_CONFIG"
+tct_parser = ConfigParser.ConfigParser()
+tct_parser.read(TCT_CONFIG_FILE)
+
+DEVICE_SUITE_TARGET_30 = tct_parser.get('DEVICE', 'DEVICE_SUITE_TARGET_30')
+
+CNT_RETRY = 10
+DATE_FORMAT_STR = "%Y-%m-%d %H:%M:%S"
+UIFW_MAX_TIME = 300
+UIFW_MAX_WRITE_TIME = 10
+UIFW_RESULT = os.path.join(DEVICE_SUITE_TARGET_30, "Documents/tcresult")
+UIFW_SET_NUM = 0
+LAUNCH_ERROR = 1
+BLOCK_ERROR = 3
+FILES_ROOT = os.path.expanduser("~") + os.sep
+
+
+def _core_test_exec(conn, test_session, test_set_name, exetype, \
+        cases_queue, result_obj):
+    """function for running core tests"""
+    exetype = exetype.lower()
+    total_count = len(cases_queue)
+    current_idx = 0
+    manual_skip_all = False
+    result_list = []
+    stdout_file = FILES_ROOT + test_session + "_stdout.log"
+    stderr_file = FILES_ROOT + test_session + "_stderr.log"
+    initscript = os.environ.get('initscript', '')
+    postscript = os.environ.get('postscript', '')
+    for test_case in cases_queue:
+        if result_obj.get_status() == 1:
+            break
+
+        current_idx += 1
+        core_cmd = ""
+        if "entry" in test_case:
+            core_cmd = test_case["entry"]
+        else:
+            LOGGER.info(
+                "[ Warnning: test script is empty,"
+                " please check your test xml file ]")
+            continue
+        expected_result = test_case.get('expected_result', '0')
+        time_out = int(test_case.get('timeout', '90'))
+        location = test_case.get('location', 'device')
+        measures = test_case.get('measures', [])
+        retmeasures = []
+        os.environ['CASE_ID'] = test_case['case_id']
+
+        LOGGER.info("\n[%s:%s] TestCase: %s\n"
+                    "TestEntry: %s"
+                    % (current_idx, total_count, test_case['case_id'], core_cmd))
+
+        strtime = datetime.now().strftime(DATE_FORMAT_STR)
+        LOGGER.info("start: %s" % strtime)
+        test_case["start_at"] = strtime
+        if exetype == 'auto':
+            return_code, stdout, stderr = -1, [], []
+            if location == 'host':
+                if len(initscript) > 1:
+                    return_code, stdout, stderr = \
+                            conn.shell_cmd_host(initscript, time_out, False, \
+                            stdout_file, stderr_file)
+
+                    if return_code is not None and return_code != "timeout":
+                        LOGGER.info('init script ok')
+                    else:
+                        LOGGER.info('init script fail')
+                return_code, stdout, stderr = -1, [], []
+                return_code, stdout, stderr = \
+                        conn.shell_cmd_host(core_cmd, time_out, False, \
+                        stdout_file, stderr_file)
+            else:
+                if len(initscript) > 1:
+                    return_code, stdout, stderr = \
+                            conn.shell_cmd_ext(initscript, time_out, False, \
+                            stdout_file, stderr_file)
+                    if return_code is not None and return_code != "timeout":
+                        LOGGER.info('init script ok')
+                    else:
+                        LOGGER.info('init script fail')
+                return_code, stdout, stderr = -1, [], []
+                return_code, stdout, stderr = \
+                        conn.shell_cmd_ext(core_cmd, time_out, False, \
+                        stdout_file, stderr_file)
+            print 'return ', return_code, stdout, stderr
+            if return_code is not None and return_code != "timeout":
+                test_case["result"] = "pass" if str(
+                    return_code) == expected_result else "fail"
+                test_case["stdout"] = stdout
+                test_case["stderr"] = stderr
+                for item in measures:
+                    ind = item['name']
+                    fname = item['file']
+                    if fname is None:
+                        continue
+                    tmpname = FILES_ROOT + test_session + "_mea_tmp"
+                    if conn.download_file(fname, tmpname):
+                        try:
+                            config = ConfigParser.ConfigParser()
+                            config.read(tmpname)
+                            item['value'] = config.get(ind, 'value')
+                            retmeasures.append(item)
+                            os.remove(tmpname)
+                        except IOError as error:
+                            LOGGER.error(
+                                "[ Error: fail to parse value,"
+                                " error:%s ]\n" % error)
+                test_case["measures"] = retmeasures
+            else:
+                test_case["result"] = "BLOCK"
+                test_case["stdout"] = stdout
+                test_case["stderr"] = stderr
+        elif exetype == 'manual':
+            # handle manual core cases
+            try:
+                # LOGGER.infopre-condition info
+                if "pre_condition" in test_case:
+                    LOGGER.info("\n****\nPre-condition: %s\n ****\n"
+                                % test_case['pre_condition'])
+                # LOGGER.infostep info
+                if "steps" in test_case:
+                    for step in test_case['steps']:
+                        LOGGER.info(
+                            "********************\n"
+                            "Step Order: %s" % step['order'])
+                        LOGGER.info("Step Desc: %s" % step['step_desc'])
+                        LOGGER.info(
+                            "Expected: %s\n********************\n"
+                            % step['expected'])
+                if manual_skip_all:
+                    test_case["result"] = "N/A"
+                else:
+                    while True:
+                        test_result = raw_input(
+                            '[ please input case result ]'
+                            ' (p^PASS, f^FAIL, b^BLOCK, n^Next, d^Done):')
+                        if test_result.lower() == 'p':
+                            test_case["result"] = "PASS"
+                            break
+                        elif test_result.lower() == 'f':
+                            test_case["result"] = "FAIL"
+                            break
+                        elif test_result.lower() == 'b':
+                            test_case["result"] = "BLOCK"
+                            break
+                        elif test_result.lower() == 'n':
+                            test_case["result"] = "N/A"
+                            break
+                        elif test_result.lower() == 'd':
+                            manual_skip_all = True
+                            test_case["result"] = "N/A"
+                            break
+                        else:
+                            LOGGER.info(
+                                "[ Warnning: you input: '%s' is invalid,"
+                                " please try again ]" % test_result)
+            except IOError as error:
+                LOGGER.info(
+                    "[ Error: fail to get core manual test step,"
+                    " error: %s ]\n" % error)
+        strtime = datetime.now().strftime(DATE_FORMAT_STR)
+        LOGGER.info("end : %s" % strtime)
+        test_case["end_at"] = strtime
+        LOGGER.info("execute case: %s" % test_case["result"])
+        result_list.append(test_case)
+        if len(postscript) > 1:
+            if location == 'host':
+                return_code, stdout, stderr = \
+                        conn.shell_cmd_host(postscript, time_out, False, \
+                        stdout_file, stderr_file)
+                if return_code is not None and return_code != "timeout":
+                    LOGGER.info('post script ok')
+                else:
+                    LOGGER.info('post script fail')
+
+            else:
+                if postscript is not None or postscript is not '':
+                    return_code, stdout, stderr = \
+                            conn.shell_cmd_ext(postscript, time_out, False, \
+                            stdout_file, stderr_file)
+                    if return_code is not None and return_code != "timeout":
+                        LOGGER.info('post script ok')
+                    else:
+                        LOGGER.info('post script fail')
+
+    result_obj.extend_result(result_list, False)
+    result_obj.set_status(1)
+
+
+def _web_test_exec(conn, server_url, test_web_app, exetype, \
+        cases_queue, result_obj):
+    """function for running web tests"""
+    exetype = exetype.lower()
+    test_set_finished = False
+    err_cnt = 0
+    for test_group in cases_queue:
+        if test_set_finished:
+            break
+
+        ret = http_request(
+            get_url(server_url, "/set_testcase"), "POST", test_group, 30)
+        if ret is None:
+            LOGGER.error(
+                "[ set testcases timeout, please check device! ]")
+            result_obj.set_status(1)
+            break
+
+        if not conn.launch_app(test_web_app):
+            LOGGER.error("[ ERROR: launch test app %s failed! ]" \
+                    % test_web_app)
+            result_obj.set_status(1)
+            break
+
+        while True:
+            if result_obj.get_status() == 1:
+                test_set_finished = True
+                break
+            ret = http_request(
+                get_url(server_url, "/check_server_status"), "GET", {})
+            if ret is None:
+                LOGGER.error(
+                    "[ ERROR: get server status timeout, please check device! ]")
+                err_cnt += 1
+            else:
+                result_cases = ret.get("cases")
+                error_code = ret.get("error_code")
+                if error_code is not None:
+                    if not conn.launch_app(test_web_app):
+                        test_set_finished = True
+                        result_obj.set_status(1)
+                        break
+                    if error_code == LAUNCH_ERROR:
+                        LOGGER.error("[ERROR : test app no response, hang or not launched!]")
+                        test_set_finished = True
+                        result_obj.set_status(1)
+                        break
+                    elif error_code == BLOCK_ERROR:
+                        LOGGER.error("[ ERROR: test case block issue! ]")
+                        err_cnt += 1
+                else:
+                    err_cnt = 0
+
+                if result_cases is not None and len(result_cases):
+                    result_obj.extend_result(result_cases)
+                elif exetype == 'manual':
+                    LOGGER.info(
+                        "[ please execute manual cases ]\r\n")
+
+                if ret["finished"] == 1:
+                    test_set_finished = True
+                    result_obj.set_status(1)
+                    break
+                elif ret["block_finished"] == 1:
+                    break
+
+            if err_cnt >= CNT_RETRY:
+                LOGGER.error(
+                    "[error: get too many errors, stop current set]")
+                test_set_finished = True
+                result_obj.set_status(1)
+                break
+            time.sleep(2)
+
+
+def _webuifw_test_exec(conn, test_web_app, test_session, test_set_name, \
+        exetype, cases_queue, result_obj):
+    """function for running webuifw tests"""
+    global UIFW_SET_NUM
+    UIFW_SET_NUM = UIFW_SET_NUM + 1
+    set_UIFW_RESULT = UIFW_RESULT + "_" + str(UIFW_SET_NUM) + ".xml"
+    result_obj.set_status(0)
+    result_obj.set_result({"resultfile": ""})
+    ls_cmd = "ls -l %s" % set_UIFW_RESULT
+    sz_cmd = "du -hk %s " % set_UIFW_RESULT
+    time_out = UIFW_MAX_TIME
+    rm_cmd = "rm " + os.path.join(DEVICE_SUITE_TARGET_30, "Documents/tcresult*.xml")
+    #jh0219.han@samsung.com
+    if exetype == "auto":
+        conn.shell_cmd(rm_cmd)
+        UIFW_SET_NUM = 1
+        LOGGER.info('[webuifw] start test executing')
+        if not conn.launch_app(test_web_app):
+            LOGGER.info("[ launch test app \"%s\" failed! ]" % test_web_app)
+            result_obj.set_result({"resultfile": ""})
+            result_obj.set_status(1)
+
+    result_file = FILES_ROOT + test_session + "_uifw.xml"
+
+    while time_out > 0:
+        LOGGER.info('[webuifw] waiting for test completed...')
+        exit_code, ret = conn.shell_cmd(ls_cmd)
+        if not 'No such file or directory' in ret[0]:
+            exit_code, ret = conn.shell_cmd(sz_cmd)
+            f_size = int(ret[0].split("\t")[0])
+            if f_size > 0:
+                break
+            if time_out > UIFW_MAX_WRITE_TIME:
+                time_out = UIFW_MAX_WRITE_TIME
+        time.sleep(2)
+        time_out -= 2
+
+    LOGGER.info('[webuifw] end test executing')
+    if conn.download_file(set_UIFW_RESULT, result_file):
+        result_obj.set_result({"resultfile": result_file})
+    for test_case in cases_queue:
+        LOGGER.info("[webuifw] execute case: %s # %s" %
+                    (test_set_name, test_case['case_id']))
+    result_obj.set_status(1)
+
+
+class TestWorker(object):
+
+    """Test executor for testkit-lite"""
+
+    def __init__(self, conn):
+        super(TestWorker, self).__init__()
+        self.conn = conn
+        self.server_url = None
+        self.result_obj = None
+
+        self.opts = dict({'block_size': 300,
+                          'test_type': None,
+                          'auto_iu': False,
+                          'fuzzy_match': False,
+                          'self_exec': False,
+                          'self_repeat': False,
+                          'debug_mode': False
+                          })
+
+    def set_TizenVersion(self, tizenversion):
+        print ""
+
+    def __init_test_stub(self, stub_app, stub_port, debug_opt):
+        # init testkit-stub deamon process
+        timecnt = 0
+        blaunched = False
+        while timecnt < CNT_RETRY:
+            #print 'stub_app' ,stub_app
+            if not self.conn.check_process(stub_app):
+                LOGGER.info("[ no stub process activated, now try to launch %s ]" % stub_app)
+                self.conn.launch_stub(stub_app, stub_port, debug_opt)
+                timecnt += 1
+            else:
+                blaunched = True
+                break
+
+        if not blaunched:
+            LOGGER.info("[ launch stub process failed! ]")
+            return False
+
+        if self.server_url is None:
+            self.server_url = self.conn.get_server_url(stub_port)
+
+        timecnt = 0
+        blaunched = False
+        while timecnt < CNT_RETRY:
+            ret = http_request(get_url(
+                self.server_url, "/check_server_status"), "GET", {})
+            if ret is None:
+                LOGGER.info("[ check server status, not ready yet! ]")
+                timecnt += 1
+                time.sleep(1)
+            else:
+                blaunched = True
+                break
+        return blaunched
+
+    def __init_webtest_opt(self, params):
+        """init the test runtime, mainly process the star up of test stub"""
+        if params is None:
+            return None
+
+        session_id = str(uuid.uuid1())
+        stub_app = params.get('stub-name', 'testkit-stub')
+        stub_port = params.get('stub-port', '8000')
+        testsuite_name = params.get('testsuite-name', '')
+        testset_name = params.get('testset-name', '')
+        capability_opt = params.get("capability", None)
+        test_launcher = params.get('test-launcher', '')
+        test_extension = params.get('test-extension', None)
+        test_widget = params.get('test-widget', None)
+ #      jh0219.han@samsung.com //in
+        client_cmds = params.get('test-launcher', '').strip().split()
+        wrt_tag = client_cmds[1] if len(client_cmds) > 1 else ""
+        self.opts['self_exec'] = wrt_tag.find('a') != -1
+        self.opts['self_repeat'] = wrt_tag.find('r') != -1
+ #      jh0219.han@samsung.com //out
+ #       LOGGER.info("[f*: %s ]" % str(params))
+        test_opt = self.conn.get_launcher_opt(
+            test_launcher, test_extension, test_widget, \
+                    testsuite_name, testset_name)
+        if test_opt is None:
+            LOGGER.info("[ init the test launcher, get failed ]")
+            return None
+        LOGGER.info("[ test launcher: %s ]" % test_opt["launcher"])
+        LOGGER.info("[ test app: %s ]" % test_opt["test_app_id"])
+        self.opts.update(test_opt)
+        self.opts['debug_mode'] = params.get("debug", False)
+
+        # uifw, this suite don't need stub
+        if self.opts['self_exec'] or self.opts['self_repeat']:
+            self.opts['test_type'] = "jqunit"
+            return session_id
+
+        # enable debug information
+        stub_debug_opt = "--debug" if self.opts['debug_mode'] else ""
+
+        # suite_id to be removed in later version
+        test_opt["suite_id"] = test_opt["test_app_id"]
+        if self.__init_test_stub(stub_app, stub_port, stub_debug_opt):
+            ret = http_request(get_url(
+                self.server_url, "/init_test"), "POST", test_opt)
+            if ret is None:
+                LOGGER.info("[ init test suite failed! ]")
+                return None
+            elif "error_code" in ret:
+                LOGGER.info("[ init test suite, "
+                            "get error code %d ! ]" % ret["error_code"])
+                return None
+
+            if capability_opt is not None:
+                ret = http_request(get_url(self.server_url,
+                                           "/set_capability"),
+                                   "POST", capability_opt)
+            return session_id
+        else:
+            LOGGER.info("[ Init test failed ! ]")
+            return None
+
+    def init_test(self, params):
+        """init the test envrionment"""
+        self.opts['testset_name'] = params.get('testset-name', '')
+        self.opts['testsuite_name'] = params.get('testsuite-name', '')
+        self.opts['debug_log_base'] = params.get("debug-log-base", '')
+        if params.get('test-launcher') is not None:
+            self.opts['test_type'] = "webapi"
+            return self.__init_webtest_opt(params)
+        elif params.get('set_type') in ['ref', 'js']:
+            self.opts['test_type'] = "webapi"
+            params['test-launcher'] = "xwalk"
+            return self.__init_webtest_opt(params)
+        else:
+            self.opts['test_type'] = "coreapi"
+            return str(uuid.uuid1())
+
+    def __run_core_test(self, sessionid, test_set_name, exetype, cases):
+        """
+            process the execution for core api test
+        """
+        self.opts['async_th'] = threading.Thread(
+            target=_core_test_exec,
+            args=(
+                self.conn, sessionid, test_set_name, exetype, \
+                        cases, self.result_obj)
+        )
+        self.opts['async_th'].start()
+        return True
+
+    def __run_jqt_test(self, sessionid, test_set_name, cases):
+        """
+            process the execution for Qunit testing
+        """
+        exetype = "auto" if self.opts['self_exec'] else ""
+        self.opts['async_th'] = threading.Thread(
+            target=_webuifw_test_exec,
+            args=(
+                self.conn, self.opts['test_app_id'], sessionid, \
+                        test_set_name, exetype, cases, self.result_obj)
+        )
+        self.opts['async_th'].start()
+        return True
+
+    def __run_web_test(self, sessionid, test_set_name, exetype, ctype, cases):
+        """
+            process the execution for web api test
+            may be splitted to serveral blocks,
+            with the unit size defined by block_size
+        """
+        #print 'web test'
+        case_count = len(cases)
+        blknum = 0
+        if case_count % self.opts['block_size'] == 0:
+            blknum = case_count / self.opts['block_size']
+        else:
+            blknum = case_count / self.opts['block_size'] + 1
+
+        idx = 1
+        test_set_queues = []
+        while idx <= blknum:
+            block_data = {}
+            block_data["exetype"] = exetype
+            block_data["type"] = ctype
+            block_data["totalBlk"] = str(blknum)
+            block_data["currentBlk"] = str(idx)
+            block_data["casecount"] = str(case_count)
+            start = (idx - 1) * self.opts['block_size']
+            if idx == blknum:
+                end = case_count
+            else:
+                end = idx * self.opts['block_size']
+            block_data["cases"] = cases[start:end]
+            test_set_queues.append(block_data)
+            idx += 1
+        self.opts['async_th'] = threading.Thread(
+            target=_web_test_exec,
+            args=(
+                self.conn, self.server_url, self.opts['test_app_id'], \
+                        exetype, test_set_queues, self.result_obj)
+        )
+        self.opts['async_th'].start()
+        return True
+
+    def run_test(self, sessionid, test_set):
+        """
+            process the execution for a test set
+        """
+        if sessionid is None:
+            return False
+
+        if not "cases" in test_set:
+            return False
+        disabledlog = os.environ.get('disabledlog', '')
+        cases, exetype, ctype = test_set[
+            "cases"], test_set["exetype"], test_set["type"]
+        #print 'exetype', exetype
+        if len(cases) == 0:
+            return False
+        # start debug trace thread
+        if disabledlog == 'True':
+            pass
+        else:
+            self.conn.start_debug(self.opts['debug_log_base'])
+        time.sleep(1)
+
+        self.result_obj = TestSetResut(
+            self.opts['testsuite_name'], self.opts['testset_name'])
+
+        devid = self.conn.get_devid()
+        if self.conn.is_NE_mode() or (devid and devid.find('None') > -1):
+            result_list = []
+            for case in cases:
+                test_case = {}
+                test_case['case_id'] = case['case_id']
+                test_case['result'] = 'N/A'
+                if devid.find('None') > -1:
+                    test_case['stdout'] = "target not found"
+                else:
+                    issue_num = int(self.conn.is_NE_mode())
+                    err_msg = "precondition failed "
+                    if issue_num == 1:
+                        err_msg += "(not connected to wifi)"
+                    elif issue_num == 2:
+                        err_msg += "(not set email account)"
+                    elif issue_num == 3:
+                        err_msg += "(not available device network)"
+                    elif issue_num == 4:
+                        err_msg += "(not enable bluetooth)"
+                    elif issue_num == 5:
+                        err_msg += "(not enable nfc)"
+                    elif issue_num == 6:
+                        err_msg += "(not available sim card)"
+                    test_case['stdout'] = err_msg
+  
+                result_list.append(test_case)
+
+            self.result_obj.extend_result(result_list)
+            self.result_obj.set_status(1)
+            return True
+        
+        if self.opts['test_type'] == "webapi":
+            if ctype == 'ref':
+                exetype = 'manual'
+            return self.__run_web_test(sessionid, \
+                    self.opts['testset_name'], exetype, ctype, cases)
+        elif self.opts['test_type'] == "coreapi":
+            return self.__run_core_test(sessionid, \
+                    self.opts['testset_name'], exetype, cases)
+        #elif self.opts['test_type'] == "jqunit":
+        elif self.opts['test_type'] in ["jqunit", 'pyunit']:
+            return self.__run_jqt_test(sessionid, \
+                    self.opts['testset_name'], cases)
+        else:
+            LOGGER.info("[ unsupported test suite type ! ]")
+            return False
+
+    def get_test_status(self, sessionid):
+        """poll the test task status"""
+        if sessionid is None:
+            return None
+        result = {}
+        result["msg"] = []
+        result["finished"] = str(self.result_obj.get_status())
+        return result
+
+    def get_test_result(self, sessionid):
+        """get the test result for a test set """
+        result = {}
+        if sessionid is None:
+            return result
+
+        result = self.result_obj.get_result()
+        return result
+
+    def finalize_test(self, sessionid):
+        """clear the test stub and related resources"""
+        if sessionid is None:
+            return False
+
+        if self.result_obj is not None:
+            self.result_obj.set_status(1)
+
+        # stop test app
+        if self.opts['test_type'] == "webapi":
+            self.conn.kill_app(self.opts['test_app_id'])
+            # uninstall test app
+            if self.opts['auto_iu']:
+                self.conn.uninstall_app(\
+                        self.opts['test_app_id'].split('.')[0][1:])
+
+        # stop debug thread
+        self.conn.stop_debug()
+
+        return True
diff --git a/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite2.0/testkitlite/engines/pyunit.py b/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite2.0/testkitlite/engines/pyunit.py
new file mode 100755 (executable)
index 0000000..3e3385c
--- /dev/null
@@ -0,0 +1,179 @@
+#!/usr/bin/python
+#
+# Copyright (C) 2012 Intel Corporation
+#
+# 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
+# of the License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# Authors:
+#           Chengtao,Liu  <chengtaox.liu@intel.com>
+""" The implementation of pyunit test engine"""
+
+import os
+import time
+import sys
+import threading
+import uuid
+import StringIO
+import unittest
+from unittest import TestResult
+from datetime import datetime
+from testkitlite.util.log import LOGGER
+from testkitlite.util.result import TestSetResut
+
+
+DATE_FORMAT_STR = "%Y-%m-%d %H:%M:%S"
+result_buffer = None
+class LiteTestResult(TestResult):
+
+    """Python unittest result wrapper"""
+
+    def startTest(self, test):
+        super(LiteTestResult, self).startTest(test)
+        self._case = {}
+        case_full_id = test.id()
+        self._case['case_id'] = case_full_id.split('.')[-1]
+        self._case['purpose'] = case_full_id
+        self._case['start_at'] = datetime.now().strftime(DATE_FORMAT_STR)
+
+    def stopTest(self, test):
+        self._case['end_at'] = datetime.now().strftime(DATE_FORMAT_STR)
+        super(LiteTestResult, self).stopTest(test)
+        if result_buffer is not None:
+            result_buffer.extend_result([self._case])
+
+    def addSuccess(self, test):
+        super(LiteTestResult, self).addSuccess(test)
+        self._case['result'] = 'PASS'
+
+    def addError(self, test, err):
+        super(LiteTestResult, self).addError(test, err)
+        _, _exc_str = self.errors[-1]
+        self._case['result'] = 'BLOCK'
+        self._case['stdout'] = '[message]' + _exc_str
+
+    def addFailure(self, test, err):
+        super(LiteTestResult, self).addFailure(test, err)
+        _, _exc_str = self.failures[-1]
+        self._case['result'] = 'FAIL'
+        self._case['stdout'] = '[message]' + _exc_str
+
+
+def _pyunit_test_exec(test_session, cases, result_obj):
+    """function for running core tests"""
+    global result_buffer
+    result_buffer = result_obj
+    result_obj.set_status(0)
+    total = unittest.TestSuite()
+    for tc in cases['cases']:
+        if tc['entry'].find(os.sep) != -1:
+            arr = tc['entry'].split(os.sep)
+            path = tc['entry'][:tc['entry'].rindex(os.sep)]
+            case = arr[-1]
+        else:
+            path = os.getcwd()
+            case = tc['entry']
+        try:
+            tests = unittest.TestLoader().discover(path, pattern='''%s''' %case)
+            total.addTest(tests)
+           # unittest.TextTestRunner(resultclass=LiteTestResult, buffer=True).run(tests)
+        except ImportError as error:
+            pass
+    try:
+        unittest.TextTestRunner(resultclass=LiteTestResult, buffer=True).run(total)
+    except ImportError as error:
+        pass
+
+    #result_obj.extend_result(resultclass)
+    result_obj.set_status(1)
+
+
+class TestWorker(object):
+
+    """Test executor for testkit-lite"""
+
+    def __init__(self, conn):
+        super(TestWorker, self).__init__()
+        self.conn = conn
+        self.server_url = None
+        self.result_obj = None
+        self.opts = dict({'block_size': 300,
+                          'test_type': None,
+                          'auto_iu': False,
+                          'fuzzy_match': False,
+                          'self_exec': False,
+                          'self_repeat': False,
+                          'debug_mode': False
+                          })
+
+    def init_test(self, params):
+        """init the test envrionment"""
+        self.opts['testset_name'] = params.get('testset-name', '')
+        self.opts['testsuite_name'] = params.get('testsuite-name', '')
+        self.opts['debug_log_base'] = params.get("debug-log-base", '')
+        return str(uuid.uuid1())
+
+    def run_test(self, sessionid, test_set):
+        """
+            process the execution for a test set
+        """
+        if sessionid is None:
+            return False
+        disabledlog = os.environ.get("disabledlog","")
+        # start debug trace thread
+        if len(disabledlog) > 0 :
+            pass
+        else:
+            self.conn.start_debug(self.opts['debug_log_base'])
+        time.sleep(1)
+        self.result_obj = TestSetResut(
+            self.opts['testsuite_name'], self.opts['testset_name'])
+       # self.opts['async_th'] = threading.Thread(
+       #     target=_pyunit_test_exec,
+       #     args=(sessionid, test_set['test_set_src'], test_set,  self.result_obj)
+       # )
+        self.opts['async_th'] = threading.Thread(
+            target=_pyunit_test_exec,
+            args=(sessionid, test_set, self.result_obj)
+        )
+        self.opts['async_th'].start()
+        return True
+
+    def get_test_status(self, sessionid):
+        """poll the test task status"""
+        if sessionid is None:
+            return None
+        result = {}
+        result["msg"] = []
+        result["finished"] = str(self.result_obj.get_status())
+        return result
+
+    def get_test_result(self, sessionid):
+        """get the test result for a test set """
+        result = {}
+        if sessionid is None:
+            return result
+
+        result = self.result_obj.get_result()
+        return result
+
+    def finalize_test(self, sessionid):
+        """clear the test stub and related resources"""
+        if sessionid is None:
+            return False
+
+        if self.result_obj is not None:
+            self.result_obj.set_status(1)
+
+        # stop debug thread
+        self.conn.stop_debug()
+
+        return True
diff --git a/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite2.0/testkitlite/engines/test_executer.py b/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite2.0/testkitlite/engines/test_executer.py
new file mode 100755 (executable)
index 0000000..8a20f3e
--- /dev/null
@@ -0,0 +1,575 @@
+import os
+import re
+import time
+import sys
+import thread
+import threading
+import socket
+import json
+import hashlib
+import signal
+import logging
+import subprocess
+import ConfigParser
+from testkitlite.util import tr_utils
+from testkitlite.util.log import LOGGER as g_logger
+from urlparse import urlparse
+
+try:
+    from selenium.webdriver.remote.webdriver import WebDriver
+    from selenium.webdriver.support.ui import WebDriverWait
+except ImportError, err:
+    g_logger.info("Failed to import 'selenium' module, please check your installation:")
+    g_logger.info("  You can use 'sudo pip install selenium' to install the module!")
+    raise ImportError
+
+TE = None
+EXE_LOCK = threading.Lock()
+DEFAULT_TIMEOUT = 90
+REF_SET_TYPE = 'ref'
+JS_SET_TYPE = 'js'
+SCRIPT_SET_TYPE = 'script'
+STR_PASS = 'PASS'
+STR_FAIL = 'FAIL'
+STR_BLOCK = 'BLOCK'
+STR_NOTRUN = 'n/a'
+DEFAULT_WD_URL = 'http://127.0.0.1:9515'
+MH_FILE = "/opt/testkit/lite3.0/mh.html"
+
+
+class TestExecuter:
+
+    def __init__(self, test_env=None):
+        self.runner_proc = test_env['runner_proc']
+        self.exe_thread = None
+        self.exe_status = 'READY'
+        self.tests_json = ''
+        self.target_platform = test_env['target_platform']
+        self.web_driver = None
+        self.wd_url = test_env.get("wd_url", '') or DEFAULT_WD_URL
+        self.suite_name = test_env['suite_name']
+        self.set_type = test_env['set_type']
+        self.set_exetype = test_env['set_exetype']
+        self.test_prefix = ''
+        self.exe_socket_file = test_env['exe_socket_file']
+        self.exe_socket_buff_size = test_env['exe_socket_buff_size']
+        self.exe_socket = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM)
+        self.exe_socket.connect(self.exe_socket_file)
+        self.TE_LOG = g_logger
+        self.debugip = test_env.get("debugip", '')
+        self.appid = test_env.get("appid", '')
+        signal.signal(signal.SIGINT, self.__exitHandler)
+        signal.signal(signal.SIGTERM, self.__exitHandler)
+
+    def __exitHandler(self, a, b):
+        if self.web_driver:
+            self.web_driver.quit()
+            self.web_driver = None
+        with EXE_LOCK:
+            self.exe_status = 'DONE'
+
+    def __updateTestPrefix(self):
+        if self.target_platform.upper().find('ANDROID') >= 0:
+            url_components = urlparse(self.web_driver.current_url)
+            if url_components.scheme == 'http':
+                self.test_prefix = '%s://%s/' % (url_components.scheme,
+                                                 url_components.netloc)
+        elif self.target_platform.upper().find('TIZEN') >=0:
+            url_components = urlparse(self.web_driver.current_url)
+            self.test_prefix = '%s://%s/' % (url_components.scheme,
+                               url_components.netloc)
+            
+
+
+    def __initWebDriver(self):
+        from selenium import webdriver
+        self.TE_LOG.info('init web driver')
+        if self.web_driver:
+            self.web_driver.quit()
+            self.web_driver = None
+
+        test_app = test_ext = ''
+        driver_env = {}
+        try:
+            exec 'from testkitlite.capability.%s import initCapability' % self.target_platform
+            if self.target_platform.upper().find('TIZEN') >= 0:
+                test_app = self.appid
+                test_ext = self.debugip
+                capa = {'xwalkOptions': {'tizenAppId': test_app[1:-1], 'tizenDebuggerAddress': test_ext}}
+            elif self.target_platform.upper().find('ANDROID') >= 0:
+                test_app, test_ext = self.appid.split('/')
+                driver_env = initCapability(test_app, test_ext)
+                capa = driver_env['desired_capabilities']
+            driver_env = initCapability(test_app, test_ext)
+            self.test_prefix = driver_env['test_prefix']
+            self.web_driver = WebDriver(self.wd_url, capa)
+            url_compon = urlparse(self.web_driver.current_url)
+            self.__updateTestPrefix()
+            return True
+        except Exception, e:
+            if self.target_platform.upper().find('ANDROID') >= 0:
+                try:
+                    test_ext = test_ext.strip('.').replace('Activity', '')
+                    tmps = test_ext.split('_')
+                    actv_name = ''.join([it.capitalize() for it in tmps if it])
+                    test_ext = '.%sActivity' % actv_name
+                    self.TE_LOG.info('activity : %s' %test_ext)
+                    driver_env = initCapability(test_app, test_ext)
+                    self.web_driver = WebDriver(self.wd_url, driver_env['desired_capabilities'])
+                    self.__updateTestPrefix()
+                    return True
+                except Exception, e:
+                    try:
+                        test_app, test_ext = self.appid.split('/')
+                        test_ext = test_ext.replace('Activity', '')
+                        self.TE_LOG.info('activity : %s' %test_ext)
+                        driver_env = initCapability(test_app, test_ext)
+                        self.web_driver = WebDriver(self.wd_url, driver_env['desired_capabilities'])
+                        self.__updateTestPrefix()
+                        return True
+                    except Exception, e: 
+                        self.TE_LOG.error('Retry to init Web Driver get failed: %s' % e)
+                        return False
+            else:
+                self.TE_LOG.error('Init Web Driver failed: %s' % e)
+                return False
+
+    def __talkWithRunnerRecv(self):
+        try:
+            exe_data = self.exe_socket.recv(self.exe_socket_buff_size)
+            if exe_data is None:
+                return (None, None)
+            exe_json = json.loads(exe_data)
+            command = exe_json['COMMAND']
+            data = exe_json['DATA']
+        except Exception, e:
+            self.TE_LOG.debug('Receive data failed, %s' % e)
+            time.sleep(2)
+            return (None, None)
+        return (command, data)
+
+    def __talkWithRunnerSend(self, data=None):
+        try:
+            self.exe_socket.send(json.dumps(data))
+        except Exception, e:
+            self.TE_LOG.debug('Send data failed, %s' % e)
+            time.sleep(2)
+            return False
+        return True
+
+    def __initWebManualHarness(self):
+        if self.target_platform.upper().find('CHROME') >= 0:
+            self.web_driver.get('%s%s' % (self.test_prefix, MH_FILE))
+        else:
+            self.web_driver.get('%s/index.html' % self.test_prefix)
+
+        try:
+            harness_page_file = open(MH_FILE)
+            harness_page_raw = harness_page_file.read()
+            harness_page_file.close()
+        except Exception, e:
+            self.TE_LOG.debug('Read manual harness file failed: %s' % e)
+            return False
+        harness_page_raw = harness_page_raw.replace(
+            '\n', '').replace('"', '\\"').replace("'", "\\'")
+        self.web_driver.execute_script(
+            "document.write(\"%s\")" % harness_page_raw)
+        self.web_driver.execute_script("document.close()")
+        self.web_driver.execute_script("init_mh()")
+
+        return True
+
+    def __runWebManualTests(self):
+        if not self.__initWebManualHarness():
+            self.TE_LOG.error(
+                'Init web manual harness failed, exit from executer')
+            return False
+
+        case_num = len(self.tests_json['cases'])
+        i_case = 0
+        while True:
+            try:
+                if i_case >= (case_num - 1):
+                    i_case = case_num - 1
+                    self.web_driver.execute_script(
+                        "document.getElementById(\"forward-bt\").disabled=\"true\"")
+                else:
+                    self.web_driver.execute_script(
+                        "document.getElementById(\"forward-bt\").disabled=\"\"")
+
+                if i_case <= 0:
+                    i_case = 0
+                    self.web_driver.execute_script(
+                        "document.getElementById(\"back-bt\").disabled=\"true\"")
+                else:
+                    self.web_driver.execute_script(
+                        "document.getElementById(\"back-bt\").disabled=\"\"")
+
+                if self.set_type == REF_SET_TYPE:
+                    self.web_driver.execute_script(
+                        "document.getElementById(\"test-entry\").textContent=\"%s%s\"" % (self.test_prefix, self.tests_json['cases'][i_case]['entry']))
+                    self.web_driver.execute_script(
+                        "document.getElementById(\"refer-test-entry\").textContent=\"%s%s\"" % (self.test_prefix, self.tests_json['cases'][i_case]['refer_entry']))
+                    self.web_driver.execute_script(
+                        "document.getElementById(\"run-refer-test-bt\").style.display=\"\"")
+                    self.web_driver.execute_script(
+                        "document.getElementById(\"refer-test-entry-area\").style.display=\"\"")
+                elif self.set_type == JS_SET_TYPE:
+                    self.web_driver.execute_script(
+                        "document.getElementById(\"test-entry\").textContent=\"%s%s\"" % (self.test_prefix, self.tests_json['cases'][i_case]['entry']))
+                    self.web_driver.execute_script(
+                        "document.getElementById(\"run-refer-test-bt\").style.display=\"none\"")
+                    self.web_driver.execute_script(
+                        "document.getElementById(\"refer-test-entry-area\").style.display=\"none\"")
+
+                WebDriverWait(self.web_driver, 3600).until(lambda strdiff: self.web_driver.execute_script(
+                    "return document.getElementById(\"case-info-area\").className") != "READY")
+                i_case_status = self.web_driver.find_element_by_id(
+                    "case-info-area").get_attribute("class")
+                self.web_driver.execute_script(
+                    "document.getElementById(\"case-info-area\").className = \"READY\"")
+                if i_case_status in [STR_PASS, STR_FAIL, STR_BLOCK]:
+                    self.tests_json['cases'][i_case]['result'] = i_case_status
+                    i_case = i_case + 1
+                elif i_case_status == "FORWARD":
+                    i_case = i_case + 1
+                elif i_case_status == "BACK":
+                    i_case = i_case - 1
+                else:
+                    break
+            except Exception, e:
+                self.tests_json['cases'][i_case]['result'] = STR_BLOCK
+                self.TE_LOG.error("Run %s: failed: %s, exit from executer" %
+                                  (self.tests_json['cases'][i_case]['case_id'], e))
+                break
+
+    def __checkPageNotFound(self, page_url=None):
+        try:
+            if self.web_driver.current_url.find('data:text/html,chromewebdata') >= 0:
+                self.TE_LOG.debug("Page not found: %s" %
+                              self.web_driver.current_url)
+                return False
+            else:
+                return True
+        except Exception, e:
+            self.TE_LOG.error("Failed to get current url")
+            return False
+
+    def __runRefTests(self, haha=None, kkkk=None):
+        for i_case in self.tests_json['cases']:
+            with EXE_LOCK:
+                if self.exe_status == 'DONE':
+                    return False
+
+            i_case['start_at'] = time.strftime(
+                "%Y-%m-%d %H:%M:%S", time.localtime())
+            try:
+                i_case_timeout = i_case['timeout']
+            except Exception, e:
+                i_case_timeout = DEFAULT_TIMEOUT
+
+            i_page_url = '%s%s' % (self.test_prefix, i_case['entry'])
+            try:
+                self.web_driver.set_page_load_timeout(i_case_timeout)
+                self.web_driver.implicitly_wait(i_case['onload_delay'])
+                self.web_driver.get(i_page_url)
+            except Exception, e:
+                i_case['result'] = STR_BLOCK
+                self.TE_LOG.info(
+                    "Cases %s: blocked by %s" % (i_case['case_id'], e))
+                i_case['end_at'] = time.strftime(
+                    "%Y-%m-%d %H:%M:%S", time.localtime())
+                continue
+
+            if not self.__checkPageNotFound(i_page_url):
+                i_case['result'] = STR_BLOCK
+                self.TE_LOG.info(
+                    "Cases %s: blocked, page not found" % i_case['case_id'])
+                i_case['end_at'] = time.strftime(
+                    "%Y-%m-%d %H:%M:%S", time.localtime())
+                i_case['stdout'] = "page not found"
+                continue
+
+            try:
+                test01_md5 = hashlib.md5(
+                    self.web_driver.get_screenshot_as_base64()).hexdigest().upper()
+            except Exception, e:
+                i_case['result'] = STR_BLOCK
+                self.TE_LOG.info(
+                    "Cases %s: blocked by %s" % (i_case['case_id'], e))
+                i_case['end_at'] = time.strftime(
+                    "%Y-%m-%d %H:%M:%S", time.localtime())
+                continue
+
+            try:
+                i_refer_case_timeout = i_case['refer_timeout']
+            except Exception, e:
+                i_refer_case_timeout = DEFAULT_TIMEOUT
+
+            i_ref_page_url = '%s%s' % (self.test_prefix, i_case['refer_entry'])
+            try:
+                self.web_driver.set_page_load_timeout(i_refer_case_timeout)
+                self.web_driver.implicitly_wait(i_case['onload_delay'])
+                self.web_driver.get(i_ref_page_url)
+            except Exception, e:
+                i_case['result'] = STR_BLOCK
+                self.TE_LOG.info(
+                    "Cases %s: blocked by %s" % (i_case['case_id'], e))
+                i_case['end_at'] = time.strftime(
+                    "%Y-%m-%d %H:%M:%S", time.localtime())
+                continue
+
+            if not self.__checkPageNotFound(i_ref_page_url):
+                i_case['result'] = STR_BLOCK
+                self.TE_LOG.info(
+                    "Cases %s: blocked, ref page not found" % i_case['case_id'])
+                i_case['end_at'] = time.strftime(
+                    "%Y-%m-%d %H:%M:%S", time.localtime())
+                continue
+
+            try:
+                test02_md5 = hashlib.md5(
+                    self.web_driver.get_screenshot_as_base64()).hexdigest().upper()
+            except Exception, e:
+                i_case['result'] = STR_BLOCK
+                self.TE_LOG.info(
+                    "Cases %s: blocked by %s" % (i_case['case_id'], e))
+                i_case['end_at'] = time.strftime(
+                    "%Y-%m-%d %H:%M:%S", time.localtime())
+                continue
+
+            if test01_md5 == test02_md5:
+                i_case['result'] = STR_PASS
+            else:
+                i_case['result'] = STR_FAIL
+
+    def __getCaseIndex(self, url):
+        try:
+            value_pos = url.rindex('value')
+            if value_pos == -1:
+                return 0
+            eq_value = url[value_pos:]
+            eq_index = eq_value.index('=')
+            if eq_index == -1:
+                return 0
+            sub_value = eq_value[eq_index + 1:]
+            if sub_value is not None:
+                return sub_value
+        except Exception, e:
+            return 0
+
+    def __checkUrlSame(self, pre_url, url):
+        try:
+            if pre_url == '' or url == '':
+                return False
+
+            index_pre_url = pre_url.index('?')
+            if index_pre_url == -1:
+                return False
+            ab_pre_url = pre_url[0:index_pre_url]
+
+            index_url = url.index('?')
+            if index_url == -1:
+                return False
+            ab_url = url[0:index_url]
+            if ab_pre_url == ab_url:
+                return True
+            else:
+                return False
+        except Exception:
+            return False
+
+    def __runJSTests(self, haha=None, kkkk=None):
+        element_index = -1
+        for i_case in self.tests_json['cases']:
+            element_index += 1
+            with EXE_LOCK:
+                if self.exe_status == 'DONE':
+                    return False
+            i_case['start_at'] = time.strftime(
+                "%Y-%m-%d %H:%M:%S", time.localtime())
+            try:
+                sub_index = 0
+                url_equal = False
+                if element_index:
+                    pre_url = self.tests_json['cases'][
+                        element_index - 1]['entry']
+                    url_equal = self.__checkUrlSame(pre_url, i_case['entry'])
+                i_case_timeout = i_case['timeout']
+            except Exception, e:
+                i_case_timeout = DEFAULT_TIMEOUT
+            #self.test_prefix = '/home/app/.config/xwalk-service/applications/css3backgr.WebAPICSS3BackgroundsTests'
+            i_page_url = '%s%s' % (self.test_prefix, i_case['entry'])
+            try:
+                self.web_driver.set_page_load_timeout(i_case_timeout)
+                sub_index = self.__getCaseIndex(i_case['entry'])
+                if not url_equal:
+                    self.web_driver.implicitly_wait(i_case['onload_delay'])
+                    self.web_driver.get(i_page_url)
+            except Exception, e:
+                print 'exception'
+                i_case['result'] = STR_BLOCK
+                self.TE_LOG.debug(
+                    "Cases %s: blocked by %s" % (i_case['case_id'], e))
+                i_case['end_at'] = time.strftime(
+                    "%Y-%m-%d %H:%M:%S", time.localtime())
+                continue
+
+            if not self.__checkPageNotFound(i_page_url):
+                i_case['result'] = STR_BLOCK
+                self.TE_LOG.info(
+                    "Cases %s: blocked, page not found" % i_case['case_id'])
+                i_case['end_at'] = time.strftime(
+                    "%Y-%m-%d %H:%M:%S", time.localtime())
+                i_case['stdout'] = "page not found"
+                continue
+
+            try:
+                if sub_index:
+                    sub_index = int(sub_index) - 1
+                table = self.web_driver.find_element_by_xpath(
+                    "//table[@id='results']")
+                tr = table.find_elements_by_xpath(".//tbody/tr")[sub_index]
+                sub_result = tr.find_elements_by_xpath(".//td")[0].text
+                error_message = tr.find_elements_by_xpath(".//td")[2].text
+                if sub_result.upper() == 'PASS':
+                    i_case['result'] = STR_PASS
+                elif sub_result.upper() == 'FAIL':
+                    i_case['result'] = STR_FAIL
+                    i_case['stdout'] = error_message
+                else:
+                    i_case['result'] = STR_BLOCK
+                i_case['end_at'] = time.strftime(
+                    "%Y-%m-%d %H:%M:%S", time.localtime())
+            except Exception, e:
+                try:
+                    result = self.web_driver.find_element_by_class_name('pass')
+                except:
+                    i_case['result'] = STR_FAIL
+                else:    
+                    if result.text == STR_FAIL:
+                        i_case['result'] = STR_FAIL
+                    elif result.text == STR_PASS:
+                        i_case['result'] = STR_PASS
+                    else:
+                        i_case['result'] = STR_BLOCK
+                i_case['end_at'] = time.strftime(
+                    "%Y-%m-%d %H:%M:%S", time.localtime())
+
+    def __runScriptTests(self, haha=None, kkkk=None):
+        for i_case in self.tests_json['cases']:
+            with EXE_LOCK:
+                if self.exe_status == 'DONE':
+                    return False
+            try:
+                i_case_timeout = int(i_case['timeout'])
+            except Exception, e:
+                i_case_timeout = DEFAULT_TIMEOUT
+
+            try:
+                i_case_proc = subprocess.Popen(
+                    args="%s" % i_case['entry'], shell=True)
+                i_case_pre_time = time.time()
+                while True:
+                    i_case_exit_code = i_case_proc.poll()
+                    i_case_elapsed_time = time.time() - i_case_pre_time
+                    if i_case_exit_code == None:
+                        if i_case_elapsed_time >= i_case_timeout:
+                            tr_utils.KillAllProcesses(ppid=i_case_proc.pid)
+                            i_case['result'] = STR_BLOCK
+                            self.TE_LOG.debug(
+                                "Run %s timeout" % i_case['case_id'])
+                            break
+                    elif str(i_case_exit_code) == str(i_case['expected_result']):
+                        i_case['result'] = STR_PASS
+                        break
+                    else:
+                        i_case['result'] = STR_FAIL
+                        break
+                    time.sleep(1)
+            except Exception, e:
+                i_case['result'] = STR_BLOCK
+                self.TE_LOG.error(
+                    "Run %s: failed: %s, exit from executer" % (i_case['case_id'], e))
+                break
+
+    def __runTests(self, haha=None, kkkk=None):
+        for i_case in self.tests_json['cases']:
+            i_case['result'] = STR_NOTRUN
+        if self.set_exetype == "manual":
+            self.__runWebManualTests()
+        elif self.set_type == REF_SET_TYPE:
+            self.__runRefTests()
+        elif self.set_type == JS_SET_TYPE:
+            self.__runJSTests()
+        elif self.set_type == SCRIPT_SET_TYPE:
+            self.__runScriptTests()
+
+        with EXE_LOCK:
+            self.exe_status = 'DONE'
+
+        return True
+
+    def runTestsExecuter(self):
+        if not self.set_type in [REF_SET_TYPE, JS_SET_TYPE, SCRIPT_SET_TYPE]:
+            self.TE_LOG.error(
+                "Unsupported set type %s, exit from executer" % self.set_type)
+            return False
+
+        if self.set_type in [REF_SET_TYPE, JS_SET_TYPE]:
+            try:
+                if not self.__initWebDriver():
+                    if self.web_driver:
+                        self.web_driver.quit()
+                        self.web_driver = None
+                    self.TE_LOG.error("Exit from executer")
+                    return False
+            except Exception, e:
+                if self.web_driver:
+                    self.web_driver.quit()
+                self.TE_LOG.error(
+                    "Init Web Driver failed: %s, exit from executer" % e)
+                return False
+
+        while True:
+            if not tr_utils.pidExists(self.runner_proc):
+                if self.set_type in [REF_SET_TYPE, JS_SET_TYPE]:
+                    if self.web_driver:
+                        self.web_driver.quit()
+                        self.web_driver = None
+                self.TE_LOG.debug('Can not find runner, exit from executer')
+                return False
+            exe_command, exe_data = self.__talkWithRunnerRecv()
+            if exe_command == 'GET_STATUS':
+                with EXE_LOCK:
+                    self.__talkWithRunnerSend(
+                        {'COMMAND': exe_command, 'DATA': self.exe_status})
+            elif exe_command == 'TESTS':
+                with EXE_LOCK:
+                    self.exe_status = 'RUNNING'
+                self.tests_json = exe_data['data']
+                self.exe_thread = thread.start_new_thread(
+                    self.__runTests, (1, 2))
+                self.__talkWithRunnerSend(
+                    {'COMMAND': exe_command, 'DATA': 'OK'})
+            elif exe_command == 'GET_RESULTS':
+                if not self.__talkWithRunnerSend({'COMMAND': exe_command, 'DATA': self.tests_json}):
+                    continue
+                with EXE_LOCK:
+                    self.exe_status = 'READY'
+            elif exe_command == 'TERMINAL':
+                if self.web_driver:
+                    self.web_driver.quit()
+                    self.web_driver = None
+                with EXE_LOCK:
+                    self.exe_status = 'DONE'
+                self.__talkWithRunnerSend(
+                    {'COMMAND': exe_command, 'DATA': 'OK'})
+            else:
+                continue
+
+    def EndExecuter(self):
+        if self.web_driver:
+            self.web_driver.quit()
+            self.web_driver = None
+            return True
diff --git a/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite2.0/testkitlite/engines/webdriver.py b/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite2.0/testkitlite/engines/webdriver.py
new file mode 100755 (executable)
index 0000000..ef8ec2b
--- /dev/null
@@ -0,0 +1,338 @@
+
+#!/usr/bin/python
+#
+# Copyright (C) 2012 Intel Corporation
+#
+# 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
+# of the License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# Authors:
+#           Chengtao,Liu  <chengtaox.liu@intel.com>
+""" The implementation of default test engine"""
+import os
+import time
+import sys
+import json
+import socket
+import shutil
+import uuid
+import threading
+import re
+import ConfigParser
+from datetime import datetime
+from tempfile import mktemp
+import xml.etree.ElementTree as etree
+from testkitlite.engines import test_executer
+from shutil import copyfile
+from testkitlite.util import tr_utils
+from testkitlite.util.log import LOGGER
+from testkitlite.util.result import TestSetResut
+
+EXECUTER_POLLING_INTERVAL = 2
+CNT_RETRY = 10
+
+
+def initExecuter(test_env=None):
+    TE = test_executer.TestExecuter(test_env)
+    TE.runTestsExecuter()
+
+
+def _run_webdrvier_test(self, cases, result_obj):
+    """
+        process the execution for web api test
+        may be splitted to serveral blocks,
+        with the unit size defined by block_size
+    """
+    case_count = len(cases)
+    blknum = 0
+    if case_count % self.opts['block_size'] == 0:
+        blknum = case_count / self.opts['block_size']
+    else:
+        blknum = case_count / self.opts['block_size'] + 1
+
+    idx = 1
+    test_set_queues = []
+    while idx <= blknum:
+        block_data = {}
+        start = (idx - 1) * self.opts['block_size']
+        if idx == blknum:
+            end = case_count
+        else:
+            end = idx * self.opts['block_size']
+        block_data = cases[start:end]
+        for tc in block_data:
+            tc.pop('purpose')
+        test_set_queues.append({'cases': block_data})
+        idx += 1
+
+    self.testcases = []
+    get_result = False
+    abort_from_set = False
+
+    for section_json in test_set_queues:
+        if result_obj.get_status() == 1:
+            break
+        LOGGER.info("Load a new section for testing, please wait ...")
+        get_result = False
+        while True:
+            if result_obj.get_status() == 1:
+                break
+            exe_command, exe_data = self.talkWithEXE(
+                'GET_STATUS', '', 0)
+            if exe_command == 'GET_STATUS':
+                if exe_data == 'READY':
+                    exe_command, exe_data = self.talkWithEXE(
+                        'TESTS', {'data': section_json}, 0)
+                    if exe_command != 'TESTS' or exe_data != 'OK':
+                        LOGGER.debug('Send tests failed')
+                        result_obj.set_status(1)
+                        break
+                    continue
+                elif exe_data == 'RUNNING':
+                    time.sleep(EXECUTER_POLLING_INTERVAL)
+                    continue
+                elif exe_data == 'DONE':
+                    exe_command, exe_data = self.talkWithEXE(
+                        'GET_RESULTS', '', 0)
+                    if exe_data is not None and len(exe_data):
+                        result_obj.extend_result(exe_data['cases'])
+                    get_result = True
+                    break
+                elif exe_data == 'ERROR':
+                    LOGGER.error('Executer got error')
+                    get_result = True
+                    result_obj.set_status(1)
+                    break
+            else:
+                abort_from_set = True
+                result_obj.set_status(1)
+                break
+        if abort_from_set:
+            LOGGER.error('Exit from current set execution')
+            return
+    ### normally exit
+    result_obj.set_status(1)
+    exe_command, exe_data = self.talkWithEXE(
+        'TERMINAL', '', 1)
+
+
+class TestWorker(object):
+
+    """Test executor for testkit-lite"""
+
+    def __init__(self, conn):
+        super(TestWorker, self).__init__()
+        self.conn = conn
+        self.server_url = None
+        self.result_obj = None
+        self.opts = dict({'block_size': 10,
+                          'test_type': None,
+                          'exe_socket_buff_size': 20480,
+                          'runner_proc': os.getpid(),
+                          })
+        self.testcases = []
+        self.runner_proc = self.opts['runner_proc']
+        self.exe_socket_file = os.path.expanduser(
+            "~") + os.sep + str(self.runner_proc) + '.socket'
+        self.exe_proc = None
+        self.exe_socket = None
+        self.exe_socket_connect = None
+
+    def init_test(self, params):
+        """init the test envrionment"""
+        self.opts['testset_name'] = params.get('testset-name', '')
+        self.opts['suite_name'] = params.get('testsuite-name', '')
+        self.opts['debug_log_base'] = params.get("debug-log-base", '')
+        self.opts['wd_url'] = params.get("wd_url", '')
+        self.opts['target_platform'] = params.get("target_platform", '')
+        self.opts['set_type'] = params.get("set_type", '')
+        self.opts['set_exetype'] = params.get("set_exetype", '')
+        self.opts['session_dir'] = params.get("session_dir", '')
+        self.opts['log_debug'] = params.get("log_debug", '')
+        self.opts['exe_socket_file'] = self.exe_socket_file
+        test_launcher = params.get('test-launcher', None) or 'xwalk'
+        test_extension = params.get('test-extension', None)
+        test_widget = params.get('test-widget', None)
+        #kill stub
+        self.conn.kill_stub()
+        # get app id from commodule
+        _opts = self.conn.get_launcher_opt(test_launcher, test_extension, test_widget, self.opts['suite_name'], self.opts['testset_name'])
+        self.opts['appid'] = _opts.get("test_app_id", '') if _opts else ''
+        #self.opts['debugip'] = params.get("debugip", '')
+        self.opts['debugip'] = os.environ.get("wd-debugip", '')
+
+        if not self.__exitExecuter():
+            LOGGER.debug('__exitExecuter failed')
+            return None
+
+        if self.__initExecuterSocket():
+            time.sleep(EXECUTER_POLLING_INTERVAL)
+            if (not self.exe_proc) or (not tr_utils.pidExists(self.exe_proc)):
+                LOGGER.debug('Executer not existing')
+                return None
+            else:
+                timecnt = 0
+                blaunched = False
+                while timecnt < CNT_RETRY:
+                    exe_command, exe_data = self.talkWithEXE(
+                        'GET_STATUS', '', 0)
+                    if exe_command == 'GET_STATUS':
+                        if exe_data == 'READY':
+                            blaunched = True
+                            break
+                    else:
+                        timecnt += 1
+                if not blaunched:
+                    LOGGER.info("[ launch webdriver failed! ]")
+                    return None
+                else:
+                    return str(uuid.uuid1())
+
+    def __initExecuter(self):
+        try:
+            new_proc = os.fork()
+
+            if new_proc == 0:
+                initExecuter(self.opts)
+                sys.exit(0)
+            else:
+                self.exe_proc = new_proc
+                LOGGER.debug('Runner Proc: %s, Executer Proc: %s' %
+                          (self.runner_proc, self.exe_proc))
+                return True
+        except OSError, e:
+            return False
+
+    def __exitExecuter(self):
+        if self.exe_socket:
+            self.exe_socket_connect.close()
+            self.exe_socket.close()
+        self.exe_socket = None
+        try:
+            os.remove(self.exe_socket_file)
+        except Exception, e:
+            pass
+
+        if self.exe_proc and tr_utils.pidExists(self.exe_proc):
+            if not tr_utils.KillAllProcesses(self.exe_proc):
+                return False
+        self.exe_proc = None
+        return True
+
+    def __initExecuterSocket(self):
+        if not self.exe_socket:
+            try:
+                os.remove(self.exe_socket_file)
+            except OSError:
+                pass
+            try:
+                self.exe_socket = socket.socket(
+                    socket.AF_UNIX, socket.SOCK_STREAM)
+                self.exe_socket.bind(self.exe_socket_file)
+                self.exe_socket.listen(1)
+            except Exception, e:
+                LOGGER.error('Setup socket failed')
+                return False
+            if not self.__initExecuter():
+                LOGGER.error('Init Executer failed')
+                if self.exe_proc and tr_utils.pidExists(self.exe_proc):
+                    killProcGroup(self.exe_proc)
+                self.exe_proc = None
+                self.exe_socket.close()
+                self.exe_socket = None
+                return False
+            self.exe_socket_connect, addr = self.exe_socket.accept()
+        return True
+
+    def talkWithEXE(self, command=None, data=None, recv_timeout=None):
+        # LOGGER.debug('Start send: %s, %s' % (command, data))
+        try:
+            if self.exe_socket is None:
+                return (None, None)
+            self.exe_socket.settimeout(recv_timeout)
+            self.exe_socket_connect.send(
+                json.dumps({'COMMAND': command, 'DATA': data}))
+            exe_data = self.exe_socket_connect.recv(
+                self.opts['exe_socket_buff_size'])
+            if not exe_data:
+                return (None, None)
+            exe_json = json.loads(exe_data)
+            if exe_json['COMMAND']:
+                command = exe_json['COMMAND']
+            if exe_json['DATA']:
+                data = exe_json['DATA']
+        except Exception, e:
+            LOGGER.error('Talk with executer failed: %s, kill executer' % e)
+            self.__exitExecuter()
+            return (None, None)
+
+        return (command, data)
+
+    def __saveSectionToSetJSON(self, testcases, exe_data):
+        if exe_data:
+            for i_case in exe_data['cases']:
+                testcases.append(i_case)
+
+        return testcases
+
+    def run_test(self, sessionid, test_set):
+        """
+            process the execution for a test set
+        """
+        if sessionid is None:
+            return False
+
+        if not "cases" in test_set:
+            return False
+
+        if len(test_set["cases"]) == 0:
+            return False
+
+        self.result_obj = TestSetResut(
+            self.opts['suite_name'], self.opts['testset_name'])
+        cases, exetype, ctype = test_set[
+            "cases"], test_set["exetype"], test_set["type"]
+
+        self.opts['async_th'] = threading.Thread(
+            target=_run_webdrvier_test,
+            args=(self, cases, self.result_obj)
+        )
+        self.opts['async_th'].start()
+        return True
+
+    def get_test_status(self, sessionid):
+        """poll the test task status"""
+        if sessionid is None:
+            return None
+        result = {}
+        result["msg"] = []
+        result["finished"] = str(self.result_obj.get_status())
+        return result
+
+    def get_test_result(self, sessionid):
+        """get the test result for a test set """
+        result = {}
+        if sessionid is None:
+            return result
+
+        result = self.result_obj.get_result()
+        return result
+
+    def finalize_test(self, sessionid):
+        """clear the test stub and related resources"""
+        if sessionid is None:
+            return False
+
+        if self.result_obj is not None:
+            self.result_obj.set_status(1)
+
+        # remove socketfile
+
+        return True
diff --git a/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite2.0/testkitlite/util/CONFIG b/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite2.0/testkitlite/util/CONFIG
new file mode 100755 (executable)
index 0000000..e6b6d74
--- /dev/null
@@ -0,0 +1,8 @@
+[LOGGING]
+log_level=INFO
+
+[EXTENSION]
+crosswalk=--external-extensions-path=/usr/lib/tizen-extensions-crosswalk
+
+[TIZEN]
+tizen_user=app
diff --git a/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite2.0/testkitlite/util/Makefile.am b/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite2.0/testkitlite/util/Makefile.am
new file mode 100755 (executable)
index 0000000..dd646f7
--- /dev/null
@@ -0,0 +1,18 @@
+# Copyright (C) 2012 Intel Corporation
+# 
+# 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
+# of the License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# Authors:
+#              Zhang, Huihui <huihuix.zhang@intel.com>
+#              Wendong,Sui  <weidongx.sun@intel.com>
+
+testkitliteutildir = /usr/lib/python2.7/dist-packages/testkitlite/util
+dist_testkitliteutil_SCRIPTS = *.py
diff --git a/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite2.0/testkitlite/util/__init__.py b/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite2.0/testkitlite/util/__init__.py
new file mode 100755 (executable)
index 0000000..8b13789
--- /dev/null
@@ -0,0 +1 @@
+
diff --git a/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite2.0/testkitlite/util/autoexec.py b/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite2.0/testkitlite/util/autoexec.py
new file mode 100755 (executable)
index 0000000..0daa44a
--- /dev/null
@@ -0,0 +1,127 @@
+#!/usr/bin/python
+#
+# Copyright (C) 2012 Intel Corporation
+#
+# 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
+# of the License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# Authors:
+#              Liu,chengtao <chengtaox.liu@intel.com>
+""" The shell command executor module"""
+
+import os
+import sys
+import time
+import subprocess
+
+from testkitlite.util.killall import killall
+from testkitlite.util.str2 import str2str
+
+
+def shell_command(cmd, timeout=15):
+    """shell communication for quick return in sync mode"""
+    proc = subprocess.Popen(cmd,
+                            shell=True,
+                            stdout=subprocess.PIPE,
+                            stderr=subprocess.PIPE)
+    time_cnt = 0
+    exit_code = None
+    result = []
+    while time_cnt < timeout:
+        exit_code = proc.poll()
+        if not exit_code is None:
+            break
+        time_cnt += 0.2
+        time.sleep(0.2)
+
+    if exit_code is None:
+        killall(proc.pid)
+        exit_code = -1
+        result = []
+    elif not cmd.endswith('&'):
+        while True:
+            line = proc.stdout.readline()
+            if not line or line.find('daemon started') >= 0:
+                break
+            result.append(line)
+    return [exit_code, result]
+
+
+def shell_command_ext(cmd="",
+                      timeout=None,
+                      boutput=False,
+                      stdout_file=None,
+                      stderr_file=None,
+                      callbk=None):
+    """shell executor, return [exitcode, stdout/stderr]
+       timeout: None means unlimited timeout
+       boutput: specify whether print output during the command running
+    """
+    if stdout_file is None:
+        stdout_file = os.path.expanduser("~") + os.sep + "shell_stdout"
+
+    if stderr_file is None:
+        stderr_file = os.path.expanduser("~") + os.sep + "shell_stderr"
+
+    exit_code = None
+    wbuffile1 = file(stdout_file, "w")
+    wbuffile2 = file(stderr_file, "w")
+    rbuffile1 = file(stdout_file, "r")
+    rbuffile2 = file(stderr_file, "r")
+    cmd_open = subprocess.Popen(args=cmd,
+                                shell=True,
+                                stdout=wbuffile1,
+                                stderr=wbuffile2)
+    rbuffile1.seek(0)
+    rbuffile2.seek(0)
+
+    def print_log():
+        """print the stdout to terminate"""
+        if callbk and callable(callbk):
+            callbk(rbuffile1.read())
+        else:
+            sys.stdout.write(rbuffile1.read())
+            sys.stdout.write(rbuffile2.read())
+            sys.stdout.flush()
+
+    while True:
+        exit_code = cmd_open.poll()
+        if exit_code is not None:
+            break
+        if boutput:
+            print_log()
+        if timeout is not None:
+            timeout -= 0.1
+            if timeout <= 0:
+                exit_code = "timeout"
+                killall(cmd_open.pid)
+                time.sleep(3)
+                break
+        time.sleep(0.1)
+
+    if boutput:
+        print_log()
+    rbuffile1.seek(0)
+    rbuffile2.seek(0)
+    stdout_log = str2str(rbuffile1.read())
+    stderr_log = str2str(rbuffile2.read())
+    if 'returncode=' in stdout_log:
+        index = stdout_log.find('returncode=') + 11
+        exit_code = str(stdout_log[index:]).strip('\r\n')
+    stdout_log = '<![CDATA[' + stdout_log + ']]>'
+    stderr_log = '<![CDATA[' + stderr_log + ']]>'
+
+    wbuffile1.close()
+    wbuffile2.close()
+    rbuffile1.close()
+    rbuffile2.close()
+    os.remove(stdout_file)
+    os.remove(stderr_file)
+    return [exit_code, stdout_log, stderr_log]
diff --git a/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite2.0/testkitlite/util/config.py b/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite2.0/testkitlite/util/config.py
new file mode 100755 (executable)
index 0000000..d06f14c
--- /dev/null
@@ -0,0 +1,45 @@
+#!/usr/bin/python
+#
+# Copyright (C) 2013 Intel Corporation
+#
+# 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
+# of the License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# Authors:
+#              Liu,chengtao <liux.chengtao@intel.com>
+"""General Config Class"""
+
+import os
+import ConfigParser
+from ConfigParser import NoOptionError, NoSectionError
+
+CONFIG_FILE = "/opt/testkit/lite3.0/testkitlite/commodule/CONFIG"
+cfg = ConfigParser.ConfigParser()
+if os.path.exists(CONFIG_FILE):
+    cfg.read(CONFIG_FILE)
+else:
+    cfg.read(os.path.join(os.getcwd(), "CONFIG"))
+
+
+class Config:
+
+    LOG_LEVEL = cfg.get('LOGGING', 'log_level')
+
+    @staticmethod
+    def get_extension(extension_name):
+        ret = ""
+        try:
+            if extension_name is not None:
+                ret = cfg.get('EXTENSION', extension_name)
+        except (NoOptionError, NoSectionError) as error:
+            pass
+        except IOError as error:
+            pass
+        return ret
diff --git a/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite2.0/testkitlite/util/connector.py b/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite2.0/testkitlite/util/connector.py
new file mode 100755 (executable)
index 0000000..3ab1e83
--- /dev/null
@@ -0,0 +1,42 @@
+#!/usr/bin/python
+#
+# Copyright (C) 2013 Intel Corporation
+#
+# 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
+# of the License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# Authors:
+#              Liu,chengtao <chengtaox.liu@intel.com>
+"""Test connector for test instance and target instance"""
+
+from testkitlite.util.log import LOGGER
+
+
+class ConnectorBuilder:
+
+    """Communication module for test host and test remote"""
+
+    def __init__(self, config):
+        self.conn = None
+        if "commodule" in config:
+            try:
+                exec "from testkitlite.commodule.%s import get_target_conn" % config[
+                    "commodule"]
+                device_no = config.get('deviceid', None)
+                if device_no is not None:
+                    self.conn = get_target_conn(device_no)
+                else:
+                    self.conn = get_target_conn()
+            except Exception as error:
+                LOGGER.error("[ Error: Initialize commodule failed: '%s']\n" % error)
+
+    def get_connector(self):
+        """list the handler instance"""
+        return self.conn
diff --git a/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite2.0/testkitlite/util/errors.py b/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite2.0/testkitlite/util/errors.py
new file mode 100755 (executable)
index 0000000..7475dc7
--- /dev/null
@@ -0,0 +1,50 @@
+#!/usr/bin/python
+#
+# Copyright (C) 2013 Intel Corporation
+#
+# 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
+# of the License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# Authors:
+#              Liu,chengtao <liux.chengtao@intel.com>
+""" The definition of exceptions"""
+
+
+class InvalidDeviceException(Exception):
+    """ 
+    Device_Id not defined / Invalid Exception
+    """
+    __data = ""
+    def __init__(self, data):
+        self.__data = data
+
+    def __str__(self):
+        return self.__data
+
+class TestCaseNotFoundException(Exception):
+    """
+    Test case not found Exception
+    """
+    __data = ""
+    def __init__(self, data):
+        self.__data = data
+
+    def __str__(self):
+        return self.__data
+
+class TestEngineException(Exception):
+    """
+    Test case not found Exception
+    """
+    def __init__(self, name):
+        self.__engine = name
+
+    def __str__(self):
+        return "Failed to load test engine '%s'" % self.__engine
\ No newline at end of file
diff --git a/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite2.0/testkitlite/util/httprequest.py b/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite2.0/testkitlite/util/httprequest.py
new file mode 100755 (executable)
index 0000000..b5996c1
--- /dev/null
@@ -0,0 +1,58 @@
+#!/usr/bin/python
+#
+# Copyright (C) 2012 Intel Corporation
+#
+# 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
+# of the License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# Authors:
+#           Liu,chengtao <chengtaox.liu@intel.com>
+""" The http request process module"""
+
+import json
+from testkitlite.util.log import LOGGER
+
+try:
+    import requests
+except ImportError, err:
+    LOGGER.info("Failed to import 'requests' module, please check your installation:")
+    LOGGER.info("  You can use 'sudo pip install requests' to install the module!")
+    raise ImportError
+
+def get_url(baseurl, api):
+    """get full url string"""
+    return "%s%s" % (baseurl, api)
+
+
+def http_request(url, rtype="POST", data=None, time_out=30):
+    """
+    http request to the device http server
+    """
+    result = None
+    if rtype == "POST":
+        headers = {'content-type': 'application/json'}
+        try:
+            ret = requests.post(url, data=json.dumps(
+                data), headers=headers, timeout=time_out)
+
+            if ret:
+                result = ret.json()
+        except Exception as error:
+            LOGGER.error(str(error))
+            pass
+    elif rtype == "GET":
+        try:
+            ret = requests.get(url, params=data, timeout=time_out)
+            if ret:
+                result = ret.json()
+        except Exception as error:
+            LOGGER.error(str(error))
+            pass
+    return result
diff --git a/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite2.0/testkitlite/util/killall.py b/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite2.0/testkitlite/util/killall.py
new file mode 100755 (executable)
index 0000000..ac54b01
--- /dev/null
@@ -0,0 +1,70 @@
+#!/usr/bin/python
+#
+# Copyright (C) 2012 Intel Corporation
+#
+# 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
+# of the License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# Authors:
+#              Zhang, Huihui <huihuix.zhang@intel.com>
+#              Wendong,Sui  <weidongx.sun@intel.com>
+""" The process kill for os"""
+
+import os
+import platform
+import signal
+import re
+import ctypes
+
+
+def killall(ppid):
+    """Kill all children process by parent process ID"""
+    os_ver = platform.system()
+    try:
+        if os_ver == "Linux" or os_ver == "Darwin":
+            ppid = str(ppid)
+            pidgrp = []
+            if not ppid.isdigit():
+                return
+            def getchildpids(ppid):
+                """Return a list of children process"""
+                command = "ps -ef | awk '{if ($3 == %s) print $2;}'" % str(
+                    ppid)
+                pids = os.popen(command).read()
+                pids = pids.split()
+                return pids
+
+            pidgrp.extend(getchildpids(ppid))
+            for pid in pidgrp:
+                pidgrp.extend(getchildpids(pid))
+            # Insert self process ID to PID group list
+            pidgrp.insert(0, ppid)
+            while len(pidgrp) > 0:
+                pid = pidgrp.pop()
+                try:
+                    os.kill(int(pid), signal.SIGKILL)
+                except OSError, error:
+                    pattern = re.compile('No such process')
+                    match = pattern.search(str(error))
+                    if not match:
+                        print "[ Error: fail to kill pid: %s," \
+                            " error: %s ]\n" % (int(pid), error)
+        # kill for windows platform
+        else:
+            kernel32 = ctypes.windll.kernel32
+            handle = kernel32.OpenProcess(1, 0, int(ppid))
+            kernel32.TerminateProcess(handle, 0)
+    except OSError, error:
+        pattern = re.compile('No such process')
+        match = pattern.search(str(error))
+        if not match:
+            print "[ Error: fail to kill pid: %s, error: %s ]\n" \
+                % (int(ppid), error)
+    return None
diff --git a/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite2.0/testkitlite/util/log.py b/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite2.0/testkitlite/util/log.py
new file mode 100755 (executable)
index 0000000..fe98dbd
--- /dev/null
@@ -0,0 +1,98 @@
+#!/usr/bin/python
+#
+# Copyright (C) 2013 Intel Corporation
+#
+# 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
+# of the License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# Authors:
+#              Liu,chengtao <liux.chengtao@intel.com>
+"""General Implementation"""
+
+import threading
+import logging
+import logging.handlers
+import sys
+import os
+
+# logger levels
+LEVELS = {"CRITICAL": 50,
+          "ERROR": 40,
+          "WARNING": 30,
+          "INFO": 20,
+          "DEBUG": 10,
+          "NOTSET": 0
+          }
+
+
+class Logger:
+
+    """General Logger Class"""
+    _instance = None
+    _mutex = threading.Lock()
+
+    def __init__(self, level="DEBUG", format_str="%(message)s"):
+        """Generate root logger"""
+        self._logger = logging.getLogger("TCT")
+        self._level = LEVELS[level]
+        self._logger.setLevel(LEVELS[level])
+        self._formatter = logging.Formatter(format_str)
+        self.add_print_logger()
+
+    def add_print_logger(self, level="INFO"):
+        """Generate console writer [StreamHandler]"""
+        writer = logging.StreamHandler(sys.stdout)
+        writer.setLevel(LEVELS[level])
+        writer.setFormatter(self._formatter)
+        self._logger.addHandler(writer)
+
+    @staticmethod
+    def get_logger(level="DEBUG", format_str="%(message)s"):
+        """sinlgeton of Logger"""
+        if Logger._instance is None:
+            Logger._mutex.acquire()
+            if Logger._instance is None:
+                Logger._instance = Logger(level, format_str)
+            else:
+                pass
+            Logger._mutex.release()
+        return Logger._instance
+
+    def debug(self, msg):
+        """debug level message"""
+        if msg is not None:
+            sys.stdout.write(msg + '\r\n')
+            sys.stdout.flush()
+
+    def info(self, msg):
+        """info level message"""
+        if msg is not None:
+            sys.stdout.write(msg + '\r\n')
+            sys.stdout.flush()
+
+    def warning(self, msg):
+        """warning level message"""
+        if msg is not None:
+            self._logger.warning(msg)
+
+    def error(self, msg):
+        """error level message"""
+        if msg is not None:
+            sys.stdout.write(msg + '\r\n')
+            sys.stdout.flush()
+
+    def critical(self, msg):
+        """critical level message"""
+        if msg is not None:
+            self._logger.critical(msg)
+
+from .config import Config
+
+LOGGER = Logger.get_logger(level=Config.LOG_LEVEL)
diff --git a/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite2.0/testkitlite/util/process.py b/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite2.0/testkitlite/util/process.py
new file mode 100755 (executable)
index 0000000..5000bae
--- /dev/null
@@ -0,0 +1,99 @@
+#!/usr/bin/python
+#
+# Copyright (C) 2012 Intel Corporation
+#
+# 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
+# of the License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# Authors:
+#              Yuanyuan,Zou  <yuanyuanx.zou@intel.com>
+
+""" kill testkit-lite """
+import os
+import re
+import platform
+if not platform.system() == "Windows":
+    import dbus
+
+import time
+from testkitlite.util.log import LOGGER
+from testkitlite.util.killall import killall
+from testkitlite.util.autoexec import shell_command
+
+DEVICE_DBUS = "testkit-lite-dbus"
+DEVICE_WHITE_LIST = ['localhost', '127.0.0.1']
+
+
+def kill_testkit_lite(pid_file):
+    """ kill testkit lite"""
+    try:
+        with open(pid_file, "r") as pidfile:
+            pid = pidfile.readline().rstrip("\n")
+            if pid:
+                killall(pid)
+    except IOError as error:
+        pattern = re.compile('No such file or directory|No such process')
+        match = pattern.search(str(error))
+        if not match:
+            LOGGER.info("[ Error: fail to kill existing testkit-lite, "\
+                "error: %s ]\n" % error)
+    return None
+
+def launch_dbus_deamon():
+    exit_code, ret = shell_command(DEVICE_DBUS + '&')
+    time.sleep(3)
+
+def get_device_lock(device_id):
+    if not OS_VER == "Windows":
+        LOGGER.debug("method using dbus is not implemented on windows")
+        return True
+
+    """ set device lock for current testkit lite"""
+    if device_id in DEVICE_WHITE_LIST:
+        return True
+    bus = dbus.SessionBus()
+    try:
+        device_service = bus.get_object('com.intel.testkit', '/com/intel/testkit/devices')
+    except Exception as error:
+        launch_dbus_deamon()
+        device_service = bus.get_object('com.intel.testkit', '/com/intel/testkit/devices')
+
+    try:
+        ret = device_service.addDevice(device_id)
+        return bool(ret)
+    except Exception as error:
+        return False
+
+def release_device_lock(device_id):
+    if not OS_VER == "Linux" and not OS_VER == "Darwin":
+        LOGGER.debug("method using dbus is not implemented on windows")
+        return True
+
+    """ kill testkit lite"""
+    if device_id in DEVICE_WHITE_LIST:
+        return True
+    bus = dbus.SessionBus()
+    try:
+        device_service = bus.get_object('com.intel.testkit', '/com/intel/testkit/devices')
+        ret = device_service.removeDevice(device_id)
+        return True
+    except Exception as error:
+        return False
+
+def clean_testxml(testxmls,remote_test):
+    """clean all test xmls"""
+    if remote_test:
+        EXISTS = os.path.exists
+        for testxml in testxmls:
+            if EXISTS(testxml):
+                fd_name = os.path.dirname(testxml)
+                os.remove(testxml)
+                os.rmdir(fd_name)
+    return None
diff --git a/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite2.0/testkitlite/util/result.py b/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite2.0/testkitlite/util/result.py
new file mode 100755 (executable)
index 0000000..1f9f0ba
--- /dev/null
@@ -0,0 +1,76 @@
+#!/usr/bin/python
+#
+# Copyright (C) 2012 Intel Corporation
+#
+# 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
+# of the License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# Authors:
+#           Chengtao,Liu  <chengtaox.liu@intel.com>
+""" The implementation test result"""
+
+import threading
+from testkitlite.util.log import LOGGER
+from testkitlite.util.str2 import str2str
+
+
+class TestSetResut(object):
+
+    """ test result """
+
+    _progress = "execute case: %s # %s...(%s)"
+    _mutex = threading.Lock()
+
+    def __init__(self, testsuite_name="", testset_name=""):
+        self._suite_name = testsuite_name
+        self._set_name = testset_name
+        self._result = {"cases": []}
+        self._finished = 0
+
+    def set_status(self, flag=0):
+        """set finished tag"""
+        self._mutex.acquire()
+        self._finished = flag
+        self._mutex.release()
+
+    def get_status(self):
+        """return finished tag"""
+        self._mutex.acquire()
+        flag = self._finished
+        self._mutex.release()
+        return flag
+
+    def set_result(self, tresult):
+        """set cases result to result buffer"""
+        self._mutex.acquire()
+        self._result = tresult
+        self._mutex.release()
+
+    def extend_result(self, cases_result=None, print_out=True):
+        """update cases result to the result buffer"""
+        self._mutex.acquire()
+        if cases_result is not None:
+            self._result["cases"].extend(cases_result)
+
+        if print_out:
+            for case_it in cases_result:
+                LOGGER.info(self._progress %
+                            (self._suite_name, case_it['case_id'], case_it['result']))
+                if case_it['result'].lower() in ['fail', 'block'] and 'stdout' in case_it:
+                    LOGGER.info(str2str(case_it['stdout']))
+        self._mutex.release()
+
+    def get_result(self):
+        """get cases result from the result buffer"""
+        self._mutex.acquire()
+        result = self._result
+        self._mutex.release()
+    
+        return result
diff --git a/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite2.0/testkitlite/util/session.py b/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite2.0/testkitlite/util/session.py
new file mode 100755 (executable)
index 0000000..c9b4630
--- /dev/null
@@ -0,0 +1,1623 @@
+#!/usr/bin/python
+#
+# Copyright (C) 2012 Intel Corporation
+#
+# 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
+# of the License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# Authors:
+#              Zhang, Huihui <huihuix.zhang@intel.com>
+#              Wendong,Sui  <weidongx.sun@intel.com>
+#              Yuanyuan,Zou  <zouyuanx@intel.com>
+""" prepare run , split xml ,run case , merge result """
+import traceback
+import os
+import platform
+import time
+import sys
+from datetime import datetime
+from shutil import copyfile
+import xml.etree.ElementTree as etree
+import ConfigParser
+from tempfile import mktemp
+from shutil import move
+from os import remove
+import copy
+import re
+import ConfigParser
+from testkitlite.util.log import LOGGER
+from testkitlite.util.str2 import str2xmlstr
+from testkitlite.util.errors import TestCaseNotFoundException
+from testkitlite.util.errors import TestEngineException
+
+if platform.system().startswith("Linux"):
+    import fcntl
+if platform.system().startswith("Windows"):
+    import win32con
+    import win32file
+    import pywintypes
+
+
+
+
+
+JOIN = os.path.join
+DIRNAME = os.path.dirname
+BASENAME = os.path.basename
+EXISTS = os.path.exists
+ABSPATH = os.path.abspath
+
+# test constants
+OPT_LAUNCHER = 'test-launcher'
+OPT_EXTENSION = 'test-extension'
+OPT_DEBUG_LOG = 'debug-log-base'
+OPT_CAPABILITY = 'capability'
+OPT_DEBUG = 'debug'
+OPT_RERUN = 'rerun'
+OPT_WIDGET = 'test-widget'
+OPT_STUB = 'stub-name'
+OPT_STUB_PORT = 'stub-port'
+OPT_SUITE = 'testsuite-name'
+OPT_SET = 'testset-name'
+OPT_test_set_src = 'test-set-src'
+
+TCT_CONFIG_FILE = "/opt/tools/TCT_CONFIG"
+tct_parser = ConfigParser.ConfigParser()
+tct_parser.read(TCT_CONFIG_FILE)
+
+DEVICE_SUITE_TARGET_30 = tct_parser.get('DEVICE', 'DEVICE_SUITE_TARGET_30')
+DEVICE_EXECUTION_MODE_30 = tct_parser.get('DEVICE', 'DEVICE_EXECUTION_MODE_30')
+DEVICE_SUITE_TARGET_30_STR = "{DEVICE_SUITE_TARGET_30}"
+DEVICE_EXECUTION_MODE_30_STR = "{DEVICE_EXECUTION_MODE_30}"
+
+class TestSession:
+
+    """
+    Parse the testdefinition.xml files.
+    Apply filter for each run.
+    Conduct tests execution.
+    """
+
+    def __init__(self, connector, worker):
+        """ init all self parameters here """
+        # dryrun
+        self.bdryrun = False
+        # non_active
+        self.non_active = False
+        # result file
+        self.resultfile = None
+        # external test
+        self.external_test = None
+        # filter rules
+        self.filter_rules = None
+        self.debug = False
+        self.resultfiles = set()
+        self.core_auto_files = []
+        self.core_manual_files = []
+        self.unit_test_files = []
+        self.skip_all_manual = False
+        self.testsuite_dict = {}
+        self.exe_sequence = []
+        self.testresult_dict = {"pass": 0, "fail": 0,
+                                "block": 0, "not_run": 0}
+        self.current_test_xml = "none"
+        self.first_run = True
+        self.deviceid = None
+        self.session_id = None
+        self.set_parameters = {}
+        self.connector = connector
+        self.stub_name = "testkit-stub"
+        self.testworker = worker
+        self.capabilities = {}
+        self.has_capability = False
+        self.rerun = False
+        self.test_prefix = ""
+        self.filter_ok = False
+        #self.wdurl = ""
+        #self.debugip =  ""
+        self.targetplatform =  ""
+        self.system = platform.system()
+        self.tizenV = None
+        self.stub_port = "8000"
+        self.skip_tc = None
+
+    def set_global_parameters(self, options):
+        "get all options "
+        # apply dryrun
+        if options.bdryrun:
+            self.bdryrun = options.bdryrun
+        # Disable set the result of core manual cases from the console
+        if options.non_active:
+            self.non_active = options.non_active
+        # apply user specify test result file
+        if options.resultfile:
+            self.resultfile = options.resultfile
+        # set the external test
+        if options.exttest:
+            self.external_test = options.exttest
+        if options.debug:
+            self.debug = options.debug
+        if options.rerun:
+            self.rerun = options.rerun
+        if options.test_prefix:
+            self.test_prefix = options.test_prefix
+        if options.device_serial:
+            self.deviceid = options.device_serial
+        if options.worker:
+            self.worker_name = options.worker
+        else:
+            self.worker_name = None
+        #if options.targetplatform:
+        self.targetplatform = os.environ.get("targetplatform",'')
+        #modify the wdurl value, yangx.zhou@intel.com, 2014.09.18
+        #if options.wdurl:
+        #    self.wdurl = options.wdurl
+        #if options.debugip:
+        #    self.debugip = options.debugip
+
+    def add_filter_rules(self, **kargs):
+        """
+        kargs:  key:values - "":["",]
+        """
+        self.filter_rules = kargs
+
+    def set_session_id(self, session_id):
+        """ set the set test session id which is get form com_module """
+        self.session_id = session_id
+
+    def set_stubport(self, stubport):
+        self.stub_port = stubport
+
+    def set_tizenversion(self, tizenversion):
+        self.tizenV = tizenversion
+        self.testworker.set_TizenVersion(self.tizenV)
+
+    def set_skip_tc(self, skip_tc):
+        self.skip_tc = skip_tc
+
+    def set_capability(self, capabilities):
+        """ set capabilitys  """
+        self.capabilities = capabilities
+        self.has_capability = True
+
+    def prepare_run(self, testxmlfile, resultdir=None):
+        """
+        testxmlfile: target testxml file
+        execdir and resultdir: should be the absolute path since TestSession
+        is the common lib
+        """
+        # resultdir is set to current directory by default
+        if not resultdir:
+            resultdir = os.getcwd()
+        self.session_dir = resultdir
+        try:
+            filename = testxmlfile
+            filename = os.path.splitext(filename)[0]
+            os_ver = platform.system()
+            if os_ver == "Linux" or os_ver == "Darwin":
+                file_items = filename.split('/')
+            else:
+                file_items = re.split(r'[/\\]+', filename)
+            if len(file_items) < 2 or file_items[-2] == "" or file_items[-1] == "":
+                return False
+            filename = file_items[-2] + '_' + file_items[-1]
+            if self.filter_rules["execution_type"] == ["manual"]:
+                resultfile = "%s.manual.xml" % filename
+            else:
+                resultfile = "%s.auto.xml" % filename
+            resultfile = JOIN(resultdir, resultfile)
+            if not EXISTS(resultdir):
+                os.mkdir(resultdir)
+            LOGGER.info("[ analysis test xml file: %s ]" % resultfile)
+            self.__prepare_result_file(testxmlfile, resultfile)
+            self.__split_test_xml(resultfile, resultdir)
+        except IOError as error:
+            LOGGER.error(error)
+            return False
+        return True
+
+    def __split_test_xml(self, resultfile, resultdir):
+        """ split_test_xml into auto and manual"""
+        setfind = etree.parse(resultfile).getiterator('set')
+        if setfind:
+            test_file_name = "%s" % BASENAME(resultfile)
+            test_file_name = os.path.splitext(test_file_name)[0]
+            self.__splite_external_test(
+                resultfile, test_file_name, resultdir)
+
+    def __splite_external_test(self, resultfile, test_file_name, resultdir):
+        """select external_test"""
+        testsuite_dict_value_list = []
+        testsuite_dict_add_flag = 0
+        filename_diff = 1
+
+        parser = etree.parse(resultfile)
+        for tsuite in parser.getiterator('suite'):
+            root = etree.Element('test_definition')
+            suitefilename = os.path.splitext(resultfile)[0]
+            suitefilename += ".suite_%s.xml" % filename_diff
+            suitefilename = JOIN(resultdir, suitefilename)
+            tsuite.tail = "\n"
+            root.append(tsuite)
+            try:
+                with open(suitefilename, 'w') as output:
+                    tree = etree.ElementTree(element=root)
+                    tree.write(output)
+            except IOError as error:
+                LOGGER.error("[ Error: create filtered result file: %s failed,\
+                 error: %s ]" % (suitefilename, error))
+            case_suite_find = etree.parse(
+                suitefilename).getiterator('testcase')
+            if case_suite_find:
+                #add by yangx.zhou@intel.com. 2014.09.12
+                set_type = tsuite.find('set').get('type')
+                if set_type == 'script' or set_type == 'pyunit' or set_type == 'androidunit':
+                    if set_type  == 'script':
+                        self.external_test = None
+                    if self.filter_rules["execution_type"] == ["auto"]:
+                        self.core_auto_files.append(suitefilename)
+                    else:
+                        self.core_manual_files.append(suitefilename)
+                    self.resultfiles.add(suitefilename)
+
+                #if tsuite.get('launcher'):
+                elif set_type in ['js', 'ref','wrt', 'qunit']:
+                #elif set_type in ['js','wrt', 'qunit']:
+                    testsuite_dict_value_list.append(suitefilename)
+                    if testsuite_dict_add_flag == 0:
+                        self.exe_sequence.append(test_file_name)
+                    testsuite_dict_add_flag = 1
+                    self.resultfiles.add(suitefilename)
+
+               # elif set_type =='ref' and self.worker_name == "webdriver":
+               #     testsuite_dict_value_list.append(suitefilename)
+               #     if testsuite_dict_add_flag == 0:
+               #         self.exe_sequence.append(test_file_name)
+               #     testsuite_dict_add_flag = 1
+               #     self.resultfiles.add(suitefilename)
+
+                else:
+                    if self.filter_rules["execution_type"] == ["auto"]:
+                        self.core_auto_files.append(suitefilename)
+                    else:
+                        self.core_manual_files.append(suitefilename)
+                    self.resultfiles.add(suitefilename)
+            else:
+                self.unit_test_files.append(suitefilename)
+                self.resultfiles.add(suitefilename)
+
+            filename_diff += 1
+        if testsuite_dict_add_flag:
+            self.testsuite_dict[test_file_name] = testsuite_dict_value_list
+
+    def __prepare_result_file(self, testxmlfile, resultfile):
+        """ write the test_xml content to resultfile"""
+        try:
+            parse_tree = etree.parse(testxmlfile)
+            suiteparent = parse_tree.getroot()
+            no_test_definition = 1
+            if parse_tree.getiterator('test_definition'):
+                no_test_definition = 0
+            if no_test_definition:
+                suiteparent = etree.Element('test_definition')
+                suiteparent.tail = "\n"
+                for suite in parse_tree.getiterator('suite'):
+                    suite.tail = "\n"
+                    suiteparent.append(suite)
+            self.apply_filter(suiteparent)
+            try:
+                with open(resultfile, 'w') as output:
+                    tree = etree.ElementTree(element=suiteparent)
+                    tree.write(output)
+            except IOError as error:
+                LOGGER.error("[ Error: create filtered result file: %s failed,\
+                    error: %s ]" % (resultfile, error))
+        except IOError as error:
+            LOGGER.error(error)
+            return False
+
+    def run_case(self, latest_dir):
+        """ run case """
+        # case not found
+        case_ids = self.filter_rules.get('id')
+        #print 'disable dlog', self.disabledlog
+        if case_ids and not self.filter_ok:
+            raise TestCaseNotFoundException('Test case %s not found!' % case_ids)
+
+        # run core auto cases
+        self.__run_core_auto()
+
+        # run webAPI cases
+        self.__run_webapi_test(latest_dir)
+
+        # run core manual cases
+        self.__run_core_manual()
+
+        # run unit test cases
+        self.__run_unit_test()
+
+    def __run_core_auto(self):
+        """ core auto cases run"""
+        self.core_auto_files.sort()
+        for core_auto_file in self.core_auto_files:
+            temp_test_xml = os.path.splitext(core_auto_file)[0]
+            temp_test_xml = os.path.splitext(temp_test_xml)[0]
+            temp_test_xml = os.path.splitext(temp_test_xml)[0]
+            temp_test_xml += ".auto"
+            # print identical xml file name
+            if self.current_test_xml != temp_test_xml:
+                time.sleep(3)
+                LOGGER.info("\n[ testing xml: %s.xml ]" % temp_test_xml)
+                self.current_test_xml = temp_test_xml
+            self.__run_with_worker(core_auto_file)
+
+    def __run_core_manual(self):
+        """ core manual cases run """
+        self.core_manual_files.sort()
+        for core_manual_file in self.core_manual_files:
+            temp_test_xml = os.path.splitext(core_manual_file)[0]
+            temp_test_xml = os.path.splitext(temp_test_xml)[0]
+            temp_test_xml = os.path.splitext(temp_test_xml)[0]
+            temp_test_xml += ".manual"
+            # print identical xml file name
+            if self.current_test_xml != temp_test_xml:
+                time.sleep(3)
+                LOGGER.info("\n[ testing xml: %s.xml ]" % temp_test_xml)
+                self.current_test_xml = temp_test_xml
+            if self.non_active:
+                self.skip_all_manual = True
+            else:
+                self.__run_with_worker(core_manual_file)
+
+    def __run_unit_test(self):
+        """ unit test cases run """
+        for ut_file in self.unit_test_files:
+            temp_test_xml = os.path.splitext(ut_file)[0]
+            temp_test_xml = os.path.splitext(temp_test_xml)[0]
+            temp_test_xml = os.path.splitext(temp_test_xml)[0]
+            temp_test_xml += ".auto"
+            # print identical xml file name
+            if self.current_test_xml != temp_test_xml:
+                time.sleep(3)
+                LOGGER.info("\n[ testing xml: %s.xml ]" % temp_test_xml)
+                self.current_test_xml = temp_test_xml
+                self.__run_with_worker(ut_file)
+
+    def __run_webapi_test(self, latest_dir):
+        """ run webAPI test"""
+        if self.bdryrun:
+            LOGGER.info("[ Web Test mode does not support dryrun ]")
+            return True
+
+        list_auto = []
+        list_manual = []
+        for i in self.exe_sequence:
+            if i[-4::1] == "auto":
+                list_auto.append(i)
+            if i[-6::1] == "manual":
+                list_manual.append(i)
+        list_auto.sort()
+        list_manual.sort()
+        self.exe_sequence = []
+        self.exe_sequence.extend(list_auto)
+        self.exe_sequence.extend(list_manual)
+
+        for webapi_total_file in self.exe_sequence:
+            for webapi_file in self.testsuite_dict[webapi_total_file]:
+                # print identical xml file name
+                if self.current_test_xml != JOIN(latest_dir, webapi_total_file):
+                    time.sleep(3)
+                    LOGGER.info("\n[ testing xml: %s.xml ]\n"
+                                % JOIN(latest_dir, webapi_total_file))
+                    self.current_test_xml = JOIN(latest_dir, webapi_total_file)
+
+                self.__run_with_worker(webapi_file)
+
+    def __run_with_worker(self, suite_test_xml):
+        """run_with_commodule,Initialization,check status,get result"""
+        try:
+            # prepare test set list
+            test_xml_set_list = self.__split_xml_to_set(suite_test_xml)
+            # create temporary parameter
+            for test_xml_set in test_xml_set_list:
+                LOGGER.info("\n[ run set: %s ]" % test_xml_set)
+                # prepare the test JSON
+                self.__prepare_external_test_json(test_xml_set)
+
+                # init test here
+                init_status = self.__init_com_module(test_xml_set)
+                if not init_status:
+                    continue
+                # send set JSON Data to com_module
+               # if not self.worker_name and self.set_parameters['type'] == 'ref':
+               #     continue
+               # else:
+                u_ret = self.testworker.run_test(self.session_id, self.set_parameters)
+                if not u_ret:
+                    continue
+                while True:
+                    time.sleep(1)
+                    # check the test status ,if the set finished,get
+                    # the set_result,and finalize_test
+                    if self.__check_test_status():
+                        set_result = self.testworker.get_test_result(
+                            self.session_id)
+                        # write_result to set_xml
+                        self.__write_set_result(
+                            test_xml_set, set_result)
+                        # shut down server
+                        self.finalize_test(self.session_id)
+                        break
+        except IOError as error:
+            LOGGER.error(
+                "[ Error: fail to run webapi test xml, error: %s ]" % error)
+
+    def __split_xml_to_set(self, webapi_file):
+        """split xml by <set>"""
+
+        LOGGER.debug("[ split xml: %s by <set> ]" % webapi_file)
+        LOGGER.debug("[ this might take some time, please wait ]")
+        set_number = 1
+        test_xml_set_list = []
+        self.resultfiles.discard(webapi_file)
+        test_xml_temp = etree.parse(webapi_file)
+        for test_xml_temp_suite in test_xml_temp.getiterator('suite'):
+            while set_number <= len(test_xml_temp_suite.getiterator('set')):
+                #print 'debug',test_xml_temp_suite.find('set')[set_number].get('type')
+                copy_url = os.path.splitext(webapi_file)[0]
+                copy_url += "_set_%s.xml" % set_number
+                copyfile(webapi_file, copy_url)
+                test_xml_set_list.append(copy_url)
+                self.resultfiles.add(copy_url)
+                set_number += 1
+        time.sleep(3)
+        set_number -= 1
+        LOGGER.info("[ total set number is: %s ]" % set_number)
+
+        # only keep one set in each xml file and remove empty set
+        test_xml_set_list_empty = []
+        if len(test_xml_set_list) > 1:
+            test_xml_set_list.reverse()
+        for test_xml_set in test_xml_set_list:
+            test_xml_set_tmp = etree.parse(test_xml_set)
+            set_keep_number = 1
+            for temp_suite in test_xml_set_tmp.getiterator('suite'):
+                for test_xml_set_temp_set in temp_suite.getiterator('set'):
+                    if set_keep_number != set_number:
+                        temp_suite.remove(test_xml_set_temp_set)
+                    else:
+                        if not test_xml_set_temp_set.getiterator('testcase'):
+                            test_xml_set_list_empty.append(test_xml_set)
+                    set_keep_number += 1
+            set_number -= 1
+            test_xml_set_tmp.write(test_xml_set)
+        for empty_set in test_xml_set_list_empty:
+            LOGGER.debug("[ remove empty set: %s ]" % empty_set)
+            test_xml_set_list.remove(empty_set)
+            self.resultfiles.discard(empty_set)
+        if len(test_xml_set_list) > 1:
+            test_xml_set_list.reverse()
+        return test_xml_set_list
+
+    def lock(self, fl):
+        try:
+            if self.system.startswith("Linux"):
+            #if self.system.startswith("Linux"):
+                fcntl.flock(fl, fcntl.LOCK_EX)
+            else:
+                hfile = win32file._get_osfhandle(fl.fileno())
+                ov = pywintypes.OVERLAPPED()
+                win32file.LockFileEx(hfile, win32con.LOCKFILE_EXCLUSIVE_LOCK, 0, -0x10000, ov)
+        except:
+            print traceback.print_exc()
+            return False
+        else:
+            return True
+
+    def release(self, fl):
+        if self.system.startswith("Linux"):
+            fcntl.flock(fl, fcntl.LOCK_UN)
+        elif self.system.startswith("Windows"):
+            hfile = win32file._get_osfhandle(fl.fileno())
+            win32file.UnlockFileEx(hfile, 0, -0x10000, pywintypes.OVERLAPPED())        
+
+    def merge_resultfile(self, start_time, latest_dir):
+        """ merge_result_file """
+        mergefile = mktemp(suffix='.xml', prefix='tests.', dir=latest_dir)
+        mergefile = os.path.splitext(mergefile)[0]
+        mergefile = os.path.splitext(mergefile)[0]
+        mergefile = "%s.result" % BASENAME(mergefile)
+        mergefile = "%s.xml" % mergefile
+        mergefile = JOIN(latest_dir, mergefile)
+        end_time = datetime.today().strftime("%Y-%m-%d_%H_%M_%S")
+        LOGGER.info("\n[ test complete at time: %s ]" % end_time)
+        LOGGER.debug("[ start merging test result xml files, "\
+            "this might take some time, please wait ]")
+        LOGGER.debug("[ merge result files into %s ]" % mergefile)
+        root = etree.Element('test_definition')
+        root.tail = "\n"
+        totals = set()
+
+        # merge result files
+        resultfiles = self.resultfiles
+        totals = self.__merge_result(resultfiles, totals)
+        for total in totals:
+            result_xml = etree.parse(total)
+            for suite in result_xml.getiterator('suite'):
+                if suite.getiterator('testcase'):
+                    suite.tail = "\n"
+                    root.append(suite)
+
+        # print test summary
+        self.__print_summary()
+        # generate actual xml file
+        LOGGER.info("[ generate result xml: %s ]" % mergefile)
+        if self.skip_all_manual:
+            LOGGER.info("[ some results of core manual cases are N/A,"
+                        "please refer to the above result file ]")
+        LOGGER.info("[ merge complete, write to the result file,"
+                    " this might take some time, please wait ]")
+        # get useful info for xml
+        # add environment node
+        # add summary node
+        root.insert(0, get_summary(start_time, end_time))
+        root.insert(0, self.__get_environment())
+        # add XSL support to testkit-lite
+        declaration_text = """<?xml version="1.0" encoding="UTF-8"?>
+        <?xml-stylesheet type="text/xsl" href="testresult.xsl"?>\n"""
+        try:
+            with open(mergefile, 'w') as output:
+                output.write(declaration_text)
+                tree = etree.ElementTree(element=root)
+                tree.write(output, xml_declaration=False, encoding='utf-8')
+        except IOError as error:
+            LOGGER.error(
+                "[ Error: merge result file failed, error: %s ]" % error)
+        # change &lt;![CDATA[]]&gt; to <![CDATA[]]>
+        replace_cdata(mergefile)
+        # copy result to -o option
+        self._final_merge(mergefile)
+
+    def _final_merge(self, mergefile):
+        try:
+            if self.resultfile:
+                if os.path.splitext(self.resultfile)[-1] == '.xml':
+                    if not EXISTS(os.path.dirname(self.resultfile)):
+                        if len(os.path.dirname(self.resultfile)) > 0:
+                            os.makedirs(os.path.dirname(self.resultfile))
+                    LOGGER.info("[ copy result xml to output file: %s ]" % self.resultfile)
+                    copyfile(mergefile, self.resultfile)
+                else:
+                    LOGGER.info(
+                        "[ Please specify and xml file for result output,"
+                        " not:%s ]" % self.resultfile)
+        except IOError as error:
+            LOGGER.error("[ Error: fail to copy the result file to: %s,"
+                         " please check if you have created its parent directory,"
+                         " error: %s ]" % (self.resultfile, error))
+    '''
+                    if not EXISTS(self.resultfile):
+                        if not EXISTS(DIRNAME(self.resultfile)):
+                            if len(DIRNAME(self.resultfile)) > 0:
+                                os.makedirs(DIRNAME(self.resultfile))
+                        LOGGER.info("[ copy result xml to output file:"
+                                    " %s ]" % self.resultfile)
+                        copyfile(mergefile, self.resultfile)
+
+                    else:
+                        suite_total = {}
+                        #print 'result file path : ' , self.resultfile
+                        xml_element_tree = etree.parse(self.resultfile).getroot()
+                        for suite in xml_element_tree.getiterator('suite'):
+                            suite_name = suite.get('name').strip()
+                            #print suite_name,'suite_name'
+                            if suite_name:
+                                if suite_name not in suite_total.keys():
+                                    suite_total[suite_name] = []
+                                    for set in suite.getiterator('set'):
+                                        set_name = set.get('name').strip()
+                                        if set_name:
+                                                                       suite_total['%s' %suite_name].append(set_name)
+    
+                        if xml_element_tree is not None:
+                            #f = open(self.resultfile, 'w')
+                            while True:
+                                    #self.lock(f)
+                                f = open(self.resultfile, 'w')
+                                if  self.lock(f):
+                                    time.sleep(1)
+                                                                   #pass
+
+                                    root = etree.parse(mergefile).getroot()
+                                    for suite in root.getiterator('suite'):
+                                        suite_name = suite.get('name').strip()
+                                        if suite_name in suite_total.keys():
+                                            for set in suite.getiterator('set'):
+                                                set_name = set.get('name').strip()
+                                                if set_name in suite_total[suite_name]:
+                                                 #   for testcase in set.getiterator('testcase'):
+                                                    for dest_suite in xml_element_tree.getiterator('suite'):
+                                                        if cmp(dest_suite.get('name').strip(),suite_name) ==0:
+                                                            for dest_set in dest_suite.getiterator('set'):
+                                                                if cmp(dest_set.get('name').strip(),set_name) == 0:  
+                                                    #xml_element_tree.find(suite).find(set).append(testcase)
+                                                                    for testcase in set.getiterator('testcase'):
+                                                                        dest_set.append(testcase)
+                                                else:
+                                                    for dest_suite in xml_element_tree.getiterator('suite'):
+                                                        if cmp(dest_suite.get('name').strip(),suite_name) ==0:
+                                                            dest_suite.append(set)
+                                                            suite_total[suite_name].append(set_name)
+                                        else:
+                                            xml_element_tree.append(suite)
+                                            suite_total[suite_name] = []
+                                            for set in suite.getiterator('set'):
+                                                if set.get('name'):
+                                                    suite_total[suite_name].append(set.get('name'))
+                                   try:
+                                           f.write(etree.tostring(xml_element_tree))
+                                   except:
+                                           self.release(f)
+                                           LOGGER.Warning("[ can not write to result file:" " %s]" %self.resultfile)
+                                           break
+                                    else:
+                                        self.release(f)
+                                        f.close()
+                                        try:
+                                            root = etree.parse(self.resultfile).getroot()
+                                        except:
+                                            break
+                                        else:
+                                            self.testresult_dict = {"pass":0 , "fail":0, "block":0, "not_run": 0}
+                                            for result_testcase in root.getiterator("testcase"):
+                                                if result_testcase.get("result") == "PASS":
+                                                    self.testresult_dict["pass"] += 1
+                                                if result_testcase.get("result") == "FAIL":
+                                                    self.testresult_dict["fail"] += 1
+                                                if result_testcase.get("result") == "BLOCK":
+                                                    self.testresult_dict["block"] += 1
+                                                if result_testcase.get("result").lower() == "NOT_RUN":
+                                                    self.testresult_dict["not_run"] += 1
+                                            self.__print_summary()      
+                                            break
+                                else:
+                                    time.sleep(1)
+                                    self.lock(f)
+    '''
+
+    def __merge_result(self, setresultfiles, totals):
+        """ merge set result to total"""
+        resultfiles = setresultfiles
+        for resultfile in resultfiles:
+            totalfile = os.path.splitext(resultfile)[0]
+            totalfile = os.path.splitext(totalfile)[0]
+            totalfile = os.path.splitext(totalfile)[0]
+            totalfile = "%s.total" % totalfile
+            totalfile = "%s.xml" % totalfile
+            total_xml = etree.parse(totalfile)
+            # LOGGER.info("|--[ merge webapi result file: %s ]" % resultfile)
+            result_xml = etree.parse(resultfile)
+            root = result_xml.getroot()
+            for total_suite in total_xml.getiterator('suite'):
+                for total_set in total_suite.getiterator('set'):
+                    for result_suite in result_xml.getiterator('suite'):
+                        for result_set in result_suite.getiterator('set'):
+                            # when total xml and result xml have same suite, set
+                           # print result_set.get('type'),'debug',resultfile
+                            if result_set.get('type') =='pyunit':
+                                for test_case in result_set.getiterator('testcase'):
+                                    #print test_case.find('description/test_script_entry').text
+                                    if (test_case.find('description/test_script_entry') is not None) and test_case.find('description/test_script_entry').text:
+                                        result_set.remove(test_case)
+                                self.__merge_result_by_name(
+                                    result_set, total_set, result_suite, total_suite)
+                            else:
+                                self.__merge_result_by_name(
+                                    result_set, total_set, result_suite, total_suite)
+            total_xml.write(totalfile)
+            totals.add(totalfile)
+        return totals
+
+    def __merge_result_by_name(
+            self, result_set, total_set, result_suite, total_suite):
+        ''' merge result select by name'''
+        if result_set.get('name') == total_set.get('name') \
+                and result_suite.get('name') == total_suite.get('name'):
+            if result_set.get('set_debug_msg'):
+                total_set.set("set_debug_msg", result_set.get('set_debug_msg'))
+            result_case_iterator = result_set.getiterator(
+                'testcase')
+            if result_case_iterator:
+                for result_case in result_case_iterator:
+                    try:
+                        if self.skip_tc and str(self.skip_tc).find(result_case.get('id')) > -1:
+                            continue
+                        self.__count_result(result_case)
+                        total_set.append(result_case)
+                    except IOError as error:
+                        LOGGER.error("[ Error: fail to append %s, error: %s ]"
+                                     % (result_case.get('id'), error))
+    def __count_result(self, result_case):
+        """ record the pass,failed,block,N/A case number"""
+        if not result_case.get('result'):
+            result_case.set('result', 'N/A')
+            # add empty result node structure for N/A case
+            resinfo_elm = etree.Element('result_info')
+            res_elm = etree.Element('actual_result')
+            start_elm = etree.Element('start')
+            end_elm = etree.Element('end')
+            stdout_elm = etree.Element('stdout')
+            stderr_elm = etree.Element('stderr')
+            resinfo_elm.append(res_elm)
+            resinfo_elm.append(start_elm)
+            resinfo_elm.append(end_elm)
+            resinfo_elm.append(stdout_elm)
+            resinfo_elm.append(stderr_elm)
+            result_case.append(resinfo_elm)
+            res_elm.text = 'N/A'
+        if result_case.get('result') == "PASS":
+            self.testresult_dict["pass"] += 1
+        if result_case.get('result') == "FAIL":
+            self.testresult_dict["fail"] += 1
+        if result_case.get('result') == "BLOCK":
+            self.testresult_dict["block"] += 1
+        if result_case.get('result') == "N/A":
+            self.testresult_dict["not_run"] += 1
+
+    def __get_environment(self):
+        """ get environment """
+        device_info = self.connector.get_device_info()
+        build_infos = self.connector.get_buildinfo(self.tizenV)
+        # add environment node
+        environment = etree.Element('environment')
+        environment.attrib['device_id'] = device_info["device_id"]
+        environment.attrib['device_model'] = device_info["device_model"]
+        environment.attrib['device_name'] = device_info["device_name"]
+        environment.attrib['host'] = platform.platform()
+        environment.attrib['lite_version'] = get_version_info()
+        environment.attrib['resolution'] = device_info["resolution"]
+        environment.attrib['screen_size'] = device_info["screen_size"]
+        environment.attrib['build_id'] = device_info['build_id']
+        environment.attrib['manufacturer'] = build_infos['manufacturer']
+        other = etree.Element('other')
+        other.text = ""
+        environment.append(other)
+        environment.tail = "\n"
+
+        return environment
+
+    def __print_summary(self):
+        """ print test summary infomation"""
+        LOGGER.info("[ test summary ]")
+        total_case_number = int(self.testresult_dict["pass"]) \
+            + int(self.testresult_dict["fail"]) \
+            + int(self.testresult_dict["block"]) \
+            + int(self.testresult_dict["not_run"])
+        #LOGGER.info("  [ total case number: %s ]" % (total_case_number))
+        if total_case_number == 0:
+            LOGGER.info("[Warning: found 0 case from the result files, "
+                        "if it's not right, please check the test xml files, "
+                        "or the filter values ]")
+        else:
+            LOGGER.info("  [ total case number: %s ]" % (total_case_number))
+            LOGGER.info("  [ pass rate: %.2f%% ]" % (float(
+                self.testresult_dict["pass"]) * 100 / int(total_case_number)))
+            LOGGER.info("  [ PASS case number: %s ]" %
+                        self.testresult_dict["pass"])
+            LOGGER.info("  [ FAIL case number: %s ]" %
+                        self.testresult_dict["fail"])
+            LOGGER.info("  [ BLOCK case number: %s ]" %
+                        self.testresult_dict["block"])
+            LOGGER.info("  [ N/A case number: %s ]" %
+                        self.testresult_dict["not_run"])
+
+    def __prepare_external_test_json(self, resultfile):
+        """Run external test"""
+        parameters = {}
+        xml_set_tmp = resultfile
+        # split set_xml by <case> get case parameters
+        LOGGER.debug("[ split xml: %s by <case> ]" % xml_set_tmp)
+        LOGGER.debug("[ this might take some time, please wait ]")
+        try:
+            parse_tree = etree.parse(xml_set_tmp)
+            root_em = parse_tree.getroot()
+            tsuite = root_em.getiterator('suite')[0]
+            case_tmp = []
+            parameters.setdefault("suite_name", tsuite.get('name'))
+            for tset in root_em.getiterator('set'):
+                case_order = 1
+                parameters.setdefault("casecount", str(len(tset.getiterator('testcase'))))
+                parameters.setdefault("current_set_name", xml_set_tmp)
+                parameters.setdefault("name", tset.get('name'))
+                parameters.setdefault("type", tset.get('type'))
+                parameters.setdefault("exetype", '')
+                #add test set location, yangx.zhou@intel.com
+                parameters.setdefault("location", '')
+                if tset.get("location") is not None:
+                    parameters["location"] = tset.get("location")
+
+               # if tset.get("test_set_src") is not None:
+               #     set_entry = self.test_prefix + tset.get("test_set_src")
+               #     parameters.setdefault("test_set_src", set_entry)
+
+                for tcase in tset.getiterator('testcase'):
+                    if self.skip_tc and str(self.skip_tc).find(tcase.get('id')) > -1:
+                        continue
+
+                    case_detail_tmp = {}
+                    step_tmp = []
+                    parameters["exetype"] = tcase.get('execution_type')
+                    case_detail_tmp.setdefault("case_id", tcase.get('id'))
+                    case_detail_tmp.setdefault("purpose", tcase.get('purpose'))
+                    case_detail_tmp.setdefault("order", str(case_order))
+                    case_detail_tmp.setdefault("onload_delay", "3")
+                    if parameters["location"] != '':
+                        case_detail_tmp.setdefault("location", parameters["location"])
+                    else:
+                        case_detail_tmp.setdefault("location", "device")
+
+                    if tcase.find('description/test_script_entry') is not None:
+                        tc_entry = tcase.find(
+                            'description/test_script_entry').text
+                        if not tc_entry:
+                            tc_entry = ""
+
+                        tc_entry = tc_entry.replace(DEVICE_SUITE_TARGET_30_STR,DEVICE_SUITE_TARGET_30)
+                        tc_entry = tc_entry.replace(DEVICE_EXECUTION_MODE_30_STR,DEVICE_EXECUTION_MODE_30)
+
+                        case_detail_tmp["entry"] = self.test_prefix + tc_entry
+                        if tcase.find(
+                                'description/test_script_entry').get('timeout'):
+                            case_detail_tmp["timeout"] = tcase.find(
+                                'description/test_script_entry'
+                            ).get('timeout')
+                        if tcase.find(
+                            'description/test_script_entry'
+                        ).get('test_script_expected_result'):
+                            case_detail_tmp["expected_result"] = tcase.find(
+                                'description/test_script_entry'
+                            ).get('test_script_expected_result')
+                        if tcase.find(
+                            'description/test_script_entry'
+                        ).get('location'):
+                            case_detail_tmp["location"] = tcase.find(
+                                'description/test_script_entry'
+                            ).get('location')
+                    tc_refer_entry = ""
+                    if tcase.find('description/refer_test_script_entry') is not None:
+                        tc_refer_entry = tcase.find(
+                            'description/refer_test_script_entry').text
+
+                    case_detail_tmp["refer_entry"] = tc_refer_entry
+
+                    if tcase.find('description/refer_test_script_entry')is not None:
+                        case_detail_tmp["refer_timeout"] = tcase.find(
+                            'description/refer_test_script_entry').get('timeout')
+                    if tcase.find('description/refer_test_script_entry')is not None:
+                        case_detail_tmp["refer_expected_result"] = tcase.find(
+                            'description/refer_test_script_entry').get('test_script_expected_result')
+                    if tcase.find('description/refer_test_script_entry') is not None:
+                        case_detail_tmp["refer_location"] = tcase.find(
+                            'description/refer_test_script_entry').get('location')
+
+                    if tcase.getiterator("step"):
+                        for this_step in tcase.getiterator("step"):
+                            step_detail_tmp = {}
+                            step_detail_tmp.setdefault("order", "1")
+                            step_detail_tmp["order"] = str(
+                                this_step.get('order'))
+
+                            if this_step.find("step_desc") is not None:
+                                text = this_step.find("step_desc").text
+                                if text is not None:
+                                    step_detail_tmp["step_desc"] = text
+
+                            if this_step.find("expected") is not None:
+                                text = this_step.find("expected").text
+                                if text is not None:
+                                    step_detail_tmp["expected"] = text
+
+                            step_tmp.append(step_detail_tmp)
+
+                    case_detail_tmp['steps'] = step_tmp
+
+                    if tcase.find('description/pre_condition') is not None:
+                        text = tcase.find('description/pre_condition').text
+                        if text is not None:
+                            case_detail_tmp["pre_condition"] = text
+
+                    if tcase.find('description/post_condition') is not None:
+                        text = tcase.find('description/post_condition').text
+                        if text is not None:
+                            case_detail_tmp['post_condition'] = text
+
+                    if tcase.get('onload_delay') is not None:
+                        case_detail_tmp[
+                            'onload_delay'] = tcase.get('onload_delay')
+                    # Check performance test
+                    if tcase.find('measurement') is not None:
+                        measures = tcase.getiterator('measurement')
+                        measures_array = []
+                        for measure in measures:
+                            measure_json = {}
+                            measure_json['name'] = measure.get('name')
+                            measure_json['file'] = measure.get('file')
+                            measures_array.append(measure_json)
+                        case_detail_tmp['measures'] = measures_array
+                    case_tmp.append(case_detail_tmp)
+                    case_order += 1
+            parameters.setdefault("cases", case_tmp)
+            if self.bdryrun:
+                parameters.setdefault("dryrun", True)
+            self.set_parameters = parameters
+
+            #add by yangx.zhou@intel.com, 2014.09.11 
+           # if self.worker_name !=None and self.worker_name == 'webdriver':
+           #     value = 'webdriver'
+            value = None
+            if parameters['type']!= None and self.worker_name == None:
+           #     if parameters['type'] == 'script':
+           #         value = 'default'
+                if parameters['type'] == 'androidunit':
+                    value = 'androidunit'
+                    #value ='default'
+                elif parameters['type'] == 'pyunit' :
+                    value = 'pyunit'
+                elif parameters['type'] == 'qunit':
+                    value = 'default'
+            if value != None:
+                try:
+                    exec "from testkitlite.engines.%s import TestWorker" %value
+                    LOGGER.info("TestWorker is %s" %value)
+                except Exception as error:
+                    #print 'path: ',  os.getcwd()
+                    raise TestEngineException(value)
+                else:
+                    self.testworker = TestWorker(self.connector)
+        except IOError as error:
+            LOGGER.error("[ Error: fail to prepare cases parameters, "
+                         "error: %s ]\n" % error)
+            return False
+        return True
+
+    def apply_filter(self, root_em):
+        """ apply filter """
+        rules = self.filter_rules
+        for tsuite in root_em.getiterator('suite'):
+            if rules.get('suite'):
+                if tsuite.get('name') not in rules['suite']:
+                    root_em.remove(tsuite)
+            for tset in tsuite.getiterator('set'):
+                if rules.get('set'):
+                    if tset.get('name') not in rules['set']:
+                        tsuite.remove(tset)
+
+            for tsuite in root_em.getiterator('suite'):
+                for tset in tsuite.getiterator('set'):
+                    # if there are capabilities ,do filter
+                    if self.has_capability:
+                        tset_status = self.__apply_capability_filter_set(tset)
+                        if not tset_status:
+                            tsuite.remove(tset)
+                            continue
+                    for tcase in tset.getiterator('testcase'):
+                        if not self.__apply_filter_case_check(tcase):
+                            tset.remove(tcase)
+                        else:
+                            self.filter_ok = True
+
+    def __apply_filter_case_check(self, tcase):
+        """filter cases"""
+        rules = self.filter_rules
+        for key in rules.iterkeys():
+            if key in ["suite", "set"]:
+                continue
+            # Check attribute
+            t_val = tcase.get(key)
+            if t_val:
+                if not t_val in rules[key]:
+                    return False
+            else:
+                # Check sub-element
+                items = tcase.getiterator(key)
+                if items:
+                    t_val = []
+                    for i in items:
+                        t_val.append(i.text)
+                    if len(set(rules[key]) & set(t_val)) == 0:
+                        return False
+                else:
+                    return False
+        return True
+
+    def __apply_capability_filter_set(self, tset):
+        """ check the set required capability with  self.capabilities """
+
+        for tcaps in tset.getiterator('capabilities'):
+            for tcap in tcaps.getiterator('capability'):
+                capname = None
+                capvalue = None
+                capname = tcap.get('name').lower()
+                if tcap.find('value') is not None:
+                    capvalue = tcap.find('value').text
+
+                if capname in self.capabilities:
+                    if capvalue is not None:
+                        if capvalue != self.capabilities[capname]:
+                            # if capability value is not equal ,remove the case
+                            return False
+                else:
+                    # if does not hava this capability ,remove case
+                    return False
+        return True
+
+    # sdx@kooltux.org: parse measures returned by test script
+    # and insert in XML result
+    # see xsd/test_definition.xsd: measurementType
+    _MEASURE_ATTRIBUTES = ['name', 'value', 'unit',
+                           'target', 'failure', 'power']
+
+    def __insert_measures(self, case, buf, pattern="###[MEASURE]###"):
+        """ get measures """
+        measures = self.__extract_measures(buf, pattern)
+        for measure in measures:
+            m_elm = etree.Element('measurement')
+            for key in measure:
+                m_elm.attrib[key] = measure[key]
+            case.append(m_elm)
+
+    def __extract_measures(self, buf, pattern):
+        """
+        This function extracts lines from <buf> containing the defined
+        <pattern>. For each line containing the pattern, it extracts the
+        string to the end of line Then it splits the content in multiple
+        fields using the defined separator <field_sep> and maps the fields
+        to measurement attributes defined in xsd. Finally, a list containing
+        all measurement objects found in input buffer is returned
+        """
+        out = []
+        for line in buf.split("\n"):
+            pos = line.find(pattern)
+            if pos < 0:
+                continue
+
+            measure = {}
+            elts = collections.deque(line[pos + len(pattern):].split(':'))
+            for k in self._MEASURE_ATTRIBUTES:
+                if len(elts) == 0:
+                    measure[k] = ''
+                else:
+                    measure[k] = elts.popleft()
+
+            # don't accept unnamed measure
+            if measure['name'] != '':
+                out.append(measure)
+        return out
+
+    def __init_com_module(self, testxml):
+        """
+            send init test to com_module
+            if webapi test,com_module will start testkit-stub
+            else com_module send the test case to devices
+        """
+        starup_prms = self.__prepare_starup_parameters(testxml)
+        # init stub and get the session_id
+        session_id = self.testworker.init_test(starup_prms)
+        if session_id == None:
+            LOGGER.error("[ Error: Initialization Error]")
+            return False
+        else:
+            self.set_session_id(session_id)
+            return True
+
+    def __prepare_starup_parameters(self, testxml):
+        """ prepare_starup_parameters """
+
+        starup_parameters = {}
+        LOGGER.info("[ preparing for startup options ]")
+        try:
+            parse_tree = etree.parse(testxml)
+            tsuite = parse_tree.getroot().getiterator('suite')[0]
+            tset = parse_tree.getroot().getiterator('set')[0]
+            #if tset.get("launcher") is not None:
+            #    starup_parameters[OPT_LAUNCHER] = tset.get("launcher")
+            #else:
+            #    starup_parameters[OPT_LAUNCHER] = tsuite.get("launcher")
+
+
+            if self.external_test is not None:
+                starup_parameters[OPT_LAUNCHER] = self.external_test
+                starup_parameters[OPT_EXTENSION] = self.external_test.split(' ')[0]
+
+            tp = tset.get('type')
+
+            if tp == "wrt":
+                starup_parameters[OPT_LAUNCHER] = "xwalk -iu"
+                starup_parameters[OPT_EXTENSION] = "xwalk"
+            elif tp in ['js','qunit', 'ref']:
+                starup_parameters[OPT_LAUNCHER] = "xwalk"
+ #          jh0219.han@samsung.com //in
+            elif tp == "uifw":
+                starup_parameters[OPT_LAUNCHER] = "xwalk -a"
+            elif tp == "uifwr":
+                starup_parameters[OPT_LAUNCHER] = "xwalk -r"
+ #          jh0219.han@samsung.com //out               
+            #print starup_parameters[OPT_LAUNCHER],'debug'    
+           # if self.external_test is not None:
+           #     starup_parameters[OPT_LAUNCHER] = self.external_test
+           #     starup_parameters[OPT_EXTENSION] = self.external_test.split(' ')[0]
+
+            if tsuite.get("extension") is not None:
+                starup_parameters[OPT_EXTENSION] = tsuite.get("extension")
+            if tsuite.get("widget") is not None:
+                starup_parameters[OPT_WIDGET] = tsuite.get("widget")
+            starup_parameters[OPT_SUITE] = tsuite.get("name")
+            starup_parameters[OPT_SET] = tset.get("name")
+            starup_parameters[OPT_STUB] = self.stub_name
+            starup_parameters[OPT_STUB_PORT] = self.stub_port
+            starup_parameters['tizen-version'] =self.tizenV
+
+           # if self.external_test is not None and \
+           # starup_parameters[OPT_LAUNHER].find(self.external_test) == -1:
+           # if self.external_test is not None:
+           #     starup_parameters[OPT_LAUNCHER] = self.external_test
+           #     starup_parameters[OPT_EXTENSION] = self.external_test.split(' ')[0]
+            #print     starup_parameters[OPT_LAUNCHER]
+            starup_parameters[OPT_DEBUG] = self.debug
+            if self.resultfile:
+                debug_dir = DIRNAME(self.resultfile)
+                debug_name = os.path.splitext(BASENAME(self.resultfile))[0]
+                if not EXISTS(debug_dir):
+                    os.makedirs(debug_dir)
+            else:
+                debug_dir = DIRNAME(testxml)
+                debug_name = os.path.splitext(BASENAME(testxml))[0]
+            starup_parameters[OPT_DEBUG_LOG] = JOIN(debug_dir, debug_name)
+            self.debug_log_file = starup_parameters[OPT_DEBUG_LOG] + '.dlog'
+            if self.rerun:
+                starup_parameters[OPT_RERUN] = self.rerun
+            if len(self.capabilities) > 0:
+                starup_parameters[OPT_CAPABILITY] = self.capabilities
+            # for webdriver
+            starup_parameters['target_platform'] = self.targetplatform
+            #starup_parameters['debugip'] = self.debugip
+            #starup_parameters['wd_url'] = self.wdurl
+            starup_parameters['set_type'] = self.set_parameters['type']
+            starup_parameters['set_exetype'] = self.set_parameters['exetype']
+            starup_parameters['session_dir'] = self.session_dir
+            starup_parameters['log_debug'] = self.debug
+            
+        except IOError as error:
+            LOGGER.error(
+                "[ Error: prepare starup parameters, error: %s ]" % error)
+        return starup_parameters
+
+    def __check_test_status(self):
+        '''
+            get_test_status from com_module
+            check the status
+            if end ,return ture; else return False
+        '''
+        # check test running or end
+        # if the status id end return True ,else return False
+        session_status = self.testworker.get_test_status(self.session_id)
+        if not session_status == None:
+            if session_status["finished"] == "0":
+                progress_msg_list = session_status["msg"]
+                for line in progress_msg_list:
+                    LOGGER.info(line)
+                return False
+            elif session_status["finished"] == "1":
+                return True
+        else:
+            LOGGER.error("[ session status error ,pls finalize test ]\n")
+            # return True to finished this set  ,becasue server error
+            return True
+
+    def finalize_test(self, sessionid):
+        '''shut_down testkit-stub'''
+        try:
+            self.testworker.finalize_test(sessionid)
+        except Exception as error:
+            LOGGER.error("[ Error: fail to close webapi http server, "
+                         "error: %s ]" % error)
+
+    def get_capability(self, file_name):
+        """get_capability from file """
+        if file_name is None:
+            return True
+        capability_xml = file_name
+        capabilities = {}
+        try:
+            parse_tree = etree.parse(capability_xml)
+            root_em = parse_tree.getroot()
+            for tcap in root_em.getiterator('capability'):
+                capability = get_capability_form_node(tcap)
+                capabilities = dict(capabilities, **capability)
+
+            self.set_capability(capabilities)
+            return True
+        except IOError as error:
+            LOGGER.error(
+                "[ Error: fail to parse capability xml, error: %s ]" % error)
+            return False
+
+    def __write_set_result(self, testxmlfile, result):
+        """
+            get the result JSON form com_module,
+            write them to orignal testxmlfile
+        """
+        #print 'debug', set_result
+        # write the set_result to set_xml
+        set_result_xml = testxmlfile
+        # covert JOSN to python dict string
+        set_result = result
+        if 'resultfile' in set_result:
+            write_file_result(set_result_xml, set_result, self.debug_log_file)
+        else:
+            write_json_result(set_result_xml, set_result, self.debug_log_file)
+
+
+def get_capability_form_node(capability_em):
+    ''' splite capability key and value form element tree'''
+    tmp_key = ''
+    capability = {}
+    tcap = capability_em
+    if tcap.get("name"):
+        tmp_key = tcap.get("name").lower()
+
+    if tcap.get("type").lower() == 'boolean':
+        if tcap.get("support").lower() == 'true':
+            capability[tmp_key] = True
+
+    if tcap.get("type").lower() == 'integer':
+        if tcap.get("support").lower() == 'true':
+            if tcap.getiterator(
+                    "value") and tcap.find("value").text is not None:
+                capability[tmp_key] = int(tcap.find("value").text)
+
+    if tcap.get("type").lower() == 'string':
+        if tcap.get("support").lower() == 'true':
+            if tcap.getiterator(
+                    "value") and tcap.find("value").text is not None:
+                capability[tmp_key] = tcap.find("value").text
+
+    return capability
+
+
+def get_version_info():
+    """
+        get testkit tool version ,just read the version in VERSION file
+        VERSION file must put in /opt/testkit/lite3.0/
+    """
+    try:
+        config = ConfigParser.ConfigParser()
+        if platform.system() == "Linux":
+            config.read('/opt/testkit/lite3.0/VERSION')
+        else:
+            version_file = os.path.join(sys.path[0], 'VERSION')
+            config.read(version_file)
+        version = config.get('public_version', 'version')
+        return version
+    except KeyError as error:
+        LOGGER.error(
+            "[ Error: fail to parse version info, error: %s ]\n" % error)
+        return ""
+
+
+def replace_cdata(file_name):
+    """ replace some character"""
+    try:
+        abs_path = mktemp()
+        new_file = open(abs_path, 'w')
+        old_file = open(file_name)
+        for line in old_file:
+            line_temp = line.replace('&lt;![CDATA', '<![CDATA')
+            new_file.write(line_temp.replace(']]&gt;', ']]>'))
+        new_file.close()
+        old_file.close()
+        remove(file_name)
+        move(abs_path, file_name)
+    except IOError as error:
+        LOGGER.error("[ Error: fail to replace cdata in the result file, "
+                     "error: %s ]\n" % error)
+
+
+def extract_notes(buf, pattern):
+    """util func to split lines in buffer, search for pattern on each line
+    then concatenate remaining content in output buffer"""
+    out = ""
+    for line in buf.split("\n"):
+        pos = line.find(pattern)
+        if pos >= 0:
+            out += line[pos + len(pattern):] + "\n"
+    return out
+
+# sdx@kooltux.org: parse notes in buffer and insert them in XML result
+
+
+def insert_notes(case, buf, pattern="###[NOTE]###"):
+    """ insert notes"""
+    desc = case.find('description')
+    if desc is None:
+        return
+
+    notes_elm = desc.find('notes')
+    if notes_elm is None:
+        notes_elm = etree.Element('notes')
+        desc.append(notes_elm)
+    if notes_elm.text is None:
+        notes_elm.text = extract_notes(buf, pattern)
+    else:
+        notes_elm.text += "\n" + extract_notes(buf, pattern)
+
+
+def get_summary(start_time, end_time):
+    """ set summary node """
+    summary = etree.Element('summary')
+    summary.attrib['test_plan_name'] = "Empty test_plan_name"
+    start_at = etree.Element('start_at')
+    start_at.text = start_time
+    end_at = etree.Element('end_at')
+    end_at.text = end_time
+    summary.append(start_at)
+    summary.append(end_at)
+    summary.tail = "\n  "
+    return summary
+
+
+def write_file_result(set_result_xml, set_result, debug_log_file):
+    """write xml result file"""
+    result_file = set_result['resultfile']
+    try:
+        test_tree = etree.parse(set_result_xml)
+        test_em = test_tree.getroot()
+        result_tree = etree.parse(result_file)
+        result_em = result_tree.getroot()
+        dubug_file = BASENAME(debug_log_file)
+        for result_suite in result_em.getiterator('suite'):
+            for result_set in result_suite.getiterator('set'):
+                for test_suite in test_em.getiterator('suite'):
+                    for test_set in test_suite.getiterator('set'):
+                        if result_set.get('name') == \
+                                test_set.get('name'):
+                            result_set.set("set_debug_msg", dubug_file)
+                            test_suite.remove(test_set)
+                            test_suite.append(result_set)
+        test_tree.write(set_result_xml)
+        os.remove(result_file)
+        LOGGER.info("[ cases result saved to resultfile ]\n")
+    except OSError as error:
+        traceback.print_exc()
+        LOGGER.error(
+            "[ Error: fail to write cases result, error: %s ]\n" % error)
+
+
+def __expand_subcases(tset, tcase, sub_num, result_msg, detail=None):
+    sub_case_result = result_msg.split("[assert]")[1:]
+    if not detail: 
+        for i in range(sub_num):
+            sub_case = copy.deepcopy(tcase)
+            sub_case.set("id", "/".join([tcase.get("id"), str(i+1)]))
+            sub_case.set("purpose", "/".join([tcase.get("purpose"), str(i+1)]))
+            sub_case.remove(sub_case.find("./result_info"))
+            result_info = etree.SubElement(sub_case, "result_info")
+            actual_result = etree.SubElement(result_info, "actual_result")
+            stdout = etree.SubElement(result_info, "stdout")
+            if i < len(sub_case_result):
+                sub_info = sub_case_result[i].split('[message]')
+                #print sub_info
+                sub_case.set("result", sub_info[0].upper())
+                actual_result.text = sub_info[0].upper()
+                stdout.text = sub_info[1]
+            else:
+                sub_case.set("result", "")
+                actual_result.text = ""
+                stdout.text = ""
+            tset.append(sub_case)
+    else:
+        for i in range(sub_num):
+            print 'debug', detail[i], i
+            sub_case = copy.deepcopy(tcase)
+            sub_case.set("id", "/".join([tcase.get("id"), str(i+1)]))
+            sub_case.set("purpose", "/".join([tcase.get("purpose"), str(i+1)]))
+            sub_case.remove(sub_case.find("./result_info"))
+            result_info = etree.SubElement(sub_case, "result_info")
+            actual_result = etree.SubElement(result_info, "actual_result")
+            stdout = etree.SubElement(result_info, "stdout")
+            #add 1392 co 1395,1396 --1399 tab  
+            if i > len(detail) -1:
+                sub_info = detail[i]['stdout'].split('[message]')
+                sub_case.set("result", "BLOCK")
+                actual_result.text = "BLOCK"
+            else:
+                sub_case.set("result", detail[i]['result'])
+                actual_result.text = detail[i]['result'].upper()
+                #actual_result.text = sub_info[0].upper()
+                stdout.text = detail[i]['stdout']
+            #stdout.text = sub_info[1]
+           # else:
+           #     sub_case.set("result", "")
+           #     actual_result.text = ""
+           #     stdout.text = ""
+            tset.append(sub_case)
+
+    tset.remove(tcase)
+
+
+def __write_by_create(tset, case_results, cm):
+    for case_result in case_results:
+        tcase = etree.Element('testcase')
+        tcase.set('id', case_result['case_id'])
+        tcase.set('purpose', case_result['purpose'])
+        tcase.set('result', case_result['result'].upper())
+        tcase.set('component',cm)
+        result_info = etree.SubElement(tcase, "result_info")
+        actual_result = etree.SubElement(result_info, "actual_result")
+        actual_result.text = case_result['result'].upper()
+        start = etree.SubElement(result_info, "start")
+        end = etree.SubElement(result_info, "end")
+        stdout = etree.SubElement(result_info, "stdout")
+        stderr = etree.SubElement(result_info, "stderr")
+        if 'start_at' in case_result:
+            start.text = case_result['start_at']
+        if 'end_at' in case_result:
+            end.text = case_result['end_at']
+        if 'stdout' in case_result:
+            stdout.text = str2xmlstr(case_result['stdout'])
+        if 'stderr' in case_result:
+            stderr.text = str2xmlstr(case_result['stderr'])
+        tset.append(tcase)
+
+
+def __write_by_caseid(tset, case_results):
+    #tset.set("set_debug_msg", "N/A")
+    for tcase in tset.getiterator('testcase'):
+        for case_result in case_results:
+            if tcase.get("id") == case_result['case_id']:
+                tcase.set('result', case_result['result'].upper())
+                # Check performance test
+                if tcase.find('measurement') is not None:
+                    for measurement in tcase.getiterator(
+                            'measurement'):
+                        if 'measures' in case_result:
+                            m_results = case_result['measures']
+                            for m_result in m_results:
+                                if measurement.get('name') == \
+                                        m_result['name'] and 'value' in m_result:
+                                    measurement.set(
+                                        'value', m_result[
+                                            'value'])
+                if tcase.find("./result_info") is not None:
+                    tcase.remove(tcase.find("./result_info"))
+                result_info = etree.SubElement(tcase, "result_info")
+                actual_result = etree.SubElement(
+                    result_info, "actual_result")
+                actual_result.text = case_result['result'].upper()
+                start = etree.SubElement(result_info, "start")
+                end = etree.SubElement(result_info, "end")
+                stdout = etree.SubElement(result_info, "stdout")
+                stderr = etree.SubElement(result_info, "stderr")
+                if 'start_at' in case_result:
+                    start.text = case_result['start_at']
+                if 'end_at' in case_result:
+                    end.text = case_result['end_at']
+                if 'stdout' in case_result:
+                    stdout.text = str2xmlstr(case_result['stdout'])
+                if 'stderr' in case_result:
+                    stderr.text = str2xmlstr(case_result['stderr'])
+                if tcase.get("subcase") is not None:
+                    #print 'subcase', tcase.get('subcase')
+                    sub_num = int(tcase.get("subcase"))
+                    result_msg = case_result['stdout']
+                    __expand_subcases(tset, tcase, sub_num, result_msg)
+
+def __write_by_class(tset, case_results):
+    tset.set("set_debug_msg", "N/A")
+    for tcase in tset.getiterator('testcase'):
+        #for key in case_results.keys():
+        sub_no = int(tcase.get('subcase'))
+        text = tcase.find('description/test_script_entry').text
+        if text in case_results:
+           # tcase.set('result', case_result['result'].upper())
+            if tcase.find("./result_info") is not None:
+                tcase.remove(tcase.find("./result_info"))
+            result_info = etree.SubElement(tcase, "result_info")
+            if sub_no == len(case_results[text]):
+                for case_result in case_results[text]:
+                    actual_result = etree.SubElement(
+                        result_info, "actual_result")
+                    actual_result.text = case_result['result'].upper()
+                    start = etree.SubElement(result_info, "start")
+                    end = etree.SubElement(result_info, "end")
+                    stdout = etree.SubElement(result_info, "stdout")
+                    stderr = etree.SubElement(result_info, "stderr")
+                    if 'start_at' in case_result:
+                        start.text = case_result['start_at']
+                    if 'end_at' in case_result:
+                        end.text = case_result['end_at']
+                    if 'stdout' in case_result:
+                        stdout.text = str2xmlstr(case_result['stdout'])
+                    if 'stderr' in case_result:
+                        stderr.text = str2xmlstr(case_result['stderr'])
+            else:
+                for case_result in case_results[text]:
+                    actual_result = etree.SubElement(
+                        result_info, "actual_result")
+                    actual_result.text = case_result['result'].upper()
+                    start = etree.SubElement(result_info, "start")
+                    end = etree.SubElement(result_info, "end")
+                    stdout = etree.SubElement(result_info, "stdout")
+                    stderr = etree.SubElement(result_info, "stderr")
+                    if 'start_at' in case_result:
+                        start.text = case_result['start_at']
+                    if 'end_at' in case_result:
+                        end.text = case_result['end_at']
+                    if 'stdout' in case_result:
+                        stdout.text = str2xmlstr(case_result['stdout'])
+                    if 'stderr' in case_result:
+                        stderr.text = str2xmlstr(case_result['stderr'])
+                for i in range(sub_no - len(case_results[text])):
+                    case_result = case_results[text][-1]
+                    actual_result = etree.SubElement(
+                        result_info, "actual_result")
+                    actual_result.text = case_result['result'].upper()
+                    start = etree.SubElement(result_info, "start")
+                    end = etree.SubElement(result_info, "end")
+                    stdout = etree.SubElement(result_info, "stdout")
+                    stderr = etree.SubElement(result_info, "stderr")
+                    if 'start_at' in case_result:
+                        start.text = case_result['start_at']
+                    if 'end_at' in case_result:
+                        end.text = case_result['end_at']
+                    if 'stdout' in case_result:
+                        stdout.text = str2xmlstr(case_result['stdout'])
+                    if 'stderr' in case_result:
+                        stderr.text = str2xmlstr(case_result['stderr'])
+
+            if tcase.get("subcase") is not None:
+                sub_num = int(tcase.get("subcase"))
+                result_msg = case_result['stdout']
+                __expand_subcases(tset, tcase, sub_num, result_msg, case_results[text])
+
+def sort_result(case_results):
+    total = dict()
+    for result in case_results:
+        if result['case_class'] in total:
+            total[result['case_class']].append(result)
+        else:
+            total[result['case_class']] = [result]
+    return total
+
+def write_json_result(set_result_xml, set_result, debug_log_file):
+    ''' fetch result form JSON'''
+    case_results = set_result["cases"]
+    try:
+        parse_tree = etree.parse(set_result_xml)
+        #print 'debug tree', debug_log_file
+        root_em = parse_tree.getroot()
+        dubug_file = BASENAME(debug_log_file)
+        for tset in root_em.getiterator('set'):
+            tset.set("set_debug_msg", dubug_file)
+            if tset.get('type') == 'pyunit':
+                cm = tset.find('testcase').get('component')
+                __write_by_create(tset, case_results, cm)
+            elif tset.get('type') == 'androidunit':
+                total = sort_result(case_results)
+                __write_by_class(tset, total)
+            else:
+                __write_by_caseid(tset, case_results)
+        parse_tree.write(set_result_xml)
+        LOGGER.info("[ cases result saved to resultfile ]\n")
+    except IOError as error:
+        traceback.print_exc()
+        LOGGER.error(
+            "[ Error: fail to write cases result, error: %s ]\n" % error)
diff --git a/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite2.0/testkitlite/util/str2.py b/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite2.0/testkitlite/util/str2.py
new file mode 100755 (executable)
index 0000000..6971df4
--- /dev/null
@@ -0,0 +1,66 @@
+#!/usr/bin/python
+#
+# Copyright (C) 2012 Intel Corporation
+#
+# 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
+# of the License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# Authors:
+#              Zhang, Huihui <huihuix.zhang@intel.com>
+#              Wendong,Sui  <weidongx.sun@intel.com>
+""" string convertor"""
+
+from types import IntType, FloatType, LongType
+import string
+
+
+def str2str(src):
+    """string to printable string"""
+    if isinstance(src, unicode):
+        return src.encode("utf8")
+
+    if isinstance(src, str):
+        accept = string.punctuation + string.letters + string.digits + ' \r\n'
+        return filter(lambda x: x in accept, src)
+
+    return ""
+
+
+def str2val(src):
+    """string to program value"""
+    ret = None
+    try:
+        ret = eval(str2str(src))
+    except:
+        pass
+    return ret
+
+
+def str2bool(src):
+    """string to boolean"""
+    if "TRUE" == str2str(src).upper():
+        return True
+    if "FALSE" == str2str(src).upper():
+        return False
+    return None
+
+
+def str2number(src):
+    """string to boolean"""
+    val = str2val(str2str(src))
+    if type(val) in [IntType, FloatType, LongType]:
+        return val
+    else:
+        return None
+
+
+def str2xmlstr(src):
+    """string to xml string value"""
+    return src.replace('\n', '\\n')
diff --git a/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite2.0/testkitlite/util/tr_utils.py b/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite2.0/testkitlite/util/tr_utils.py
new file mode 100755 (executable)
index 0000000..a3ce9bf
--- /dev/null
@@ -0,0 +1,53 @@
+import os
+import signal
+import sys
+import logging
+
+LOG = logging.getLogger("TestRunner")
+
+
+def pidExists(pid):
+    if pid < 0:
+        return False
+    try:
+        os.kill(pid, 0)
+    except OSError as e:
+        return False
+    else:
+        return True
+
+
+def IsWindows():
+    return sys.platform == 'cygwin' or sys.platform.startswith('win')
+
+
+def KillAllProcesses(ppid=None):
+    if IsWindows():
+        subprocess.check_call("TASKKILL /F /PID %s /T" % ppid)
+    else:
+        ppid = str(ppid)
+        pidgrp = []
+
+        def GetChildPids(ppid):
+            command = "ps -ef | awk '{if ($3 ==%s) print $2;}'" % str(ppid)
+            pids = os.popen(command).read()
+            pids = pids.split()
+
+            return pids
+
+        pidgrp.extend(GetChildPids(ppid))
+        for pid in pidgrp:
+            pidgrp.extend(GetChildPids(pid))
+
+        pidgrp.insert(0, ppid)
+        while len(pidgrp) > 0:
+            pid = pidgrp.pop()
+            try:
+                os.kill(int(pid), signal.SIGKILL)
+                return True
+            except OSError:
+                try:
+                    os.popen("kill -9 %d" % int(pid))
+                    return True
+                except:
+                    return False
diff --git a/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite2.0/testkitmerge/__init__.py b/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite2.0/testkitmerge/__init__.py
new file mode 100755 (executable)
index 0000000..e69de29
diff --git a/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite2.0/testkitmerge/merger.py b/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite2.0/testkitmerge/merger.py
new file mode 100755 (executable)
index 0000000..4b5b3ee
--- /dev/null
@@ -0,0 +1,275 @@
+#!/usr/bin/python
+#
+# Copyright (C) 2014 Intel Corporation
+#
+# 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
+# of the License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+#
+# Authors: 
+#           Nicolas Zingile <n.zingile@gmail.com>
+
+"""Merger module for testkit xml files"""
+
+from lxml import etree
+import os
+
+#------------------------- Global variables -------------------------#
+
+TESTDEFATTRS  = {}
+TESTDEFCHILDS = {"environment" : False, "summary" : False, "suite" : False}
+ENVATTRS      = {"build_id" : False, "device_id" : False, "device_model" : False,
+               "device_name" : False, "host" : False, "lite_version" : False,
+               "manufacturer" : False, "resolution" : False, "screen_size" : False}
+ENVCHILDS     = {"other" : False}
+SUMATTRS      = {"test_plan_name" : False}
+SUMCHILDS     = {"start_at" : True, "end_at" : True}
+SUITEATTRS    = {"name" : True, "launcher" : False,'category':None,'extension':None}
+SUITECHILDS   = {"set" : True}
+SETATTRS      = {"name" : True, "set_debug_msg" : False,'type':None}
+SETCHILDS     = {"testcase" : False,'capabilities':False}
+TCATTRS       = {"component" : True, "execution_type" : True, "id" :True,
+               "name" : False, "priority" : True, "purpose" : True,"onload_delay":None,
+                "result" : True, "status" : True, "type" : True}
+TCCHILDS      = {"description" : False ,"result_info":False}
+
+DESCATTRS     ={}
+DESCCHILDS    = {"test_script_entry": True,"refer_test_script_entry":False,"pre_condition" : False, "post_condition" : False, "steps" : False}
+RESULTCHILD = {'actual_result':True,'start':False,'end':False,'stdout':False}
+RESINFOATTRS  = {}
+RESINFOCHILDS = {"actual_result" : True, "start" :False, "end" : False,
+               "stdout" : False, "stderr" : False}
+
+class ElementError(Exception):
+    """Custom class to handle the merging exceptions"""
+    pass
+
+def check_element(element, attrdico, childsdico):
+    """Checks a node of the testkit result xml tree.
+
+    Allows to verify the integrity of a testkit result xml node.
+    Check if element contains allowed attributes and if the value of
+    those attributes is filled if it should be.
+    Check if the child nodes of element are allowed and if so, checks
+    if the child node contains text if it should.
+
+    Args:
+       element : Element to check
+       attrdico: A dict that contains information on attributes of element
+               keys: String - allowed attributes of the element
+               values: Booleans indicating if the keys should be filled
+       childsdico: A dict that contains information on sub elements of element
+               keys: String - allowed sub elements of element
+               values: Booleans indicating if the keys should contain text
+    Returns:
+
+    Raises:
+       ElementError
+    """
+    for attrname, attrvalue in element.attrib.items():
+        if attrname in attrdico.keys():
+            if not attrvalue and attrdico.get(attrname):
+                raise ElementError("Attribute '" + attrname + "' of element '" + element.tag
+                + "' is not defined")
+        else:
+            raise ElementError("Attribute '" + attrname + "' is not authorized as an attribute of the '" + element.tag + "' element")
+    for child in list(element):
+        if (child.tag not in childsdico.keys()):
+            raise ElementError("Element '" + child.tag + " should not be a child element of '" + element.tag + "'")
+       elif (not child.text and childsdico.get(child.tag)):
+            raise ElementError("The element '" + child.tag + "' should contain some text")
+
+def create_xmltree():
+    """Creates an ElementTree object.
+    Args:
+
+    Return:
+       An ElementTree object that represents en empty testkit result xml file.
+    """
+    root = etree.Element("test_definition")
+    xmltree = etree.ElementTree(root)
+    print "xml tree created !"
+    
+    return xmltree
+
+def create_envandsum(srcxmltree, destxmltree):
+    """Creates the environment and the summary nodes of
+    an ElementTree object.
+
+    Copy the environment and the summary nodes of srcxmltree in 
+    the destxmltree. The destxmltree only contains the root element.
+
+    Args:
+       srcxmltree: Source xmltree from where we want to copy some nodes.
+       destxmltree: Destination xmltree to augment with some nodes.
+
+    Returns:
+       An ElementTree that partially represents a testkit result xml file.
+    """
+    testdef = destxmltree.getroot()
+    environment = srcxmltree.find("/environment")
+    summary = srcxmltree.find("/summary")
+    testdef.append(environment)
+    testdef.append(summary)
+
+    return destxmltree
+
+def check_testdefinition(xmltree):
+    """Checks the test_definition node of a testkit result xml.
+
+    Checkis that all the sub elements of the test_definition node are present
+    and that integrity of that sub elements is good.
+
+    Args:
+       xmltree: An ElementTree that represents a testkit result xml tree.
+
+    Returns:
+
+    Raises:
+       ElementError
+    """
+    testdef = xmltree.getroot()
+    check_element(testdef, TESTDEFATTRS, TESTDEFCHILDS)
+    environment = testdef.find("./environment")
+    summary = testdef.find("summary")
+    if environment is not None:
+        check_element(environment, ENVATTRS, ENVCHILDS)
+    else:
+       raise ElementError("Element 'test_definition' should contain an 'environment' element")
+    if summary is not None:
+        check_element(summary, SUMATTRS, SUMCHILDS)
+    else:
+       raise ElementError("Element 'test_definition' should contain a 'summary' element")
+    for asuite in testdef.findall("./suite"):
+       check_suite(asuite)
+           
+def check_suite(eltsuite):
+    """Checks the integrity of a suite element.
+
+    Args:
+       eltsuite: A suite element to check
+
+    Returns:
+    """
+    check_element(eltsuite, SUITEATTRS, SUITECHILDS) 
+    for child in list(eltsuite):
+       check_set(child)
+
+def check_set(eltset):
+    """Checks the integrity of a set element.
+
+    Args:
+       eltset: A set element to check.
+
+    Returns:
+    """
+    check_element(eltset, SETATTRS, SETCHILDS)
+    for child in list (eltset):
+       check_testcase(child)
+
+def check_testcase(eltcase):
+    """Checks the integrity of a testcase element.
+
+    Also verify that the result of the eltcase is present and consistent
+
+    Args:
+       eltcase: A testcase element to check
+
+    Returns:
+
+    Raises:
+       ElementError
+    """
+    try:
+       result = eltcase.get("result")
+       actual_result = eltcase.find("./result_info/actual_result").text
+       allowed_results = ["PASS", "FAIL", "N/A","BLOCK","TIMEOUT"]
+    except AttributeError:
+       raise ElementError("result of the testcase is not valid !")
+    if result not in allowed_results or result != actual_result:
+       raise ElementError("The testcase '" + eltcase.get("id") + "' doesn't have a consistent result")
+    check_element(eltcase, TCATTRS, TCCHILDS)
+    for child in list (eltcase):
+       if child.tag == "description":
+          # print "-- checking description node"
+           check_element(child, DESCATTRS, DESCCHILDS)
+       elif child.tag == "result_info":
+         #  print "-- checking result_info node"
+           check_element(child, RESINFOATTRS, RESINFOCHILDS)
+       #elif child.tag == "categories":
+       #    pass
+       else:
+           raise ElementError("Element '" + child.tag + "' is not allowed")
+
+def solve_conflicts(sourcecase, destcase):
+    """Selects a result when same testcase is encountered in both source and destination
+    testkit xml files.
+
+    The result is chosen according to the following priority : FAIL > N/A > PASS.
+
+    Args:
+       sourcecase: A testcase element of the source testkit xml result file
+       destcase: A testcase element of the destination testkit xml result file
+
+    Returns:
+    """
+    srcresult = sourcecase.get('result')
+    destresult = destcase.get('result')
+    if (srcresult == destresult) or (destresult == 'FAIL') \
+    or (srcresult == 'PASS' and destresult == 'N/A'):
+       pass
+    else:
+       destcase.set('result', srcresult)
+       destcase.find('./result_info/actual_result').text = srcresult
+
+def merge_testkitxml (sourcexmltree, destxmltree=None):
+    """Merge two testkit xml result files.
+
+    Merge the information of sourcexmltree in destxmltree. If destxmltree is
+    not definded, creates a new ElementTree and copy all the information of
+    sourcexmltree in it.
+
+    Args:
+       sourcexmltree: The source ElementTree object that represents the 
+               testkit result xml source file
+       destxmltree: The destination ElementTree object that represents the 
+               testkit result xml destination file
+    Returns:
+       An ElementTree that represents the result of the merging of the sourcexmltree
+       and destxmltree
+    """
+    print "## Checking source xml file ..."
+    check_testdefinition(sourcexmltree)
+    print "source xml file is correct. Ok\n"
+    if destxmltree is None:
+        print "Destination xml file doesn't exist... will be created"
+        destxmltree = create_xmltree()
+        create_envandsum(sourcexmltree, destxmltree)
+    for asuite in sourcexmltree.iter('suite'):
+        destsuite = destxmltree.find("/suite[@name='" + asuite.get('name') + "']")
+        if destsuite is not None:
+            for aset in asuite.iter('set'):
+                destset = destsuite.find("./set[@name='" + aset.get('name') + "']")
+                if destset is not None:
+                    for acase in aset.iter('testcase'):
+                        destcase = destset.find("./testcase[@id='" + acase.get('id') + "']")
+                        if destcase is not None:
+                           solve_conflicts(acase, destcase)
+                        else:
+                            destset.append(acase)
+               else:
+                    destsuite.append(aset)
+        else:
+            destxmltree.getroot().append(asuite)
+
+    return destxmltree
diff --git a/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite2.0/xsd/Makefile.am b/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite2.0/xsd/Makefile.am
new file mode 100755 (executable)
index 0000000..e24d378
--- /dev/null
@@ -0,0 +1,22 @@
+# Copyright (C) 2012 Intel Corporation
+# 
+# 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
+# of the License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
+#
+# Authors:
+#              Zhang, Huihui <huihuix.zhang@intel.com>
+#              Wendong,Sui  <weidongx.sun@intel.com>
+
+testkitxsddir = /opt/testkit/lite3.0/xsd
+dist_testkitxsd_DATA = *.js *.xsl *.css *.png *.txt *.xml *.xsd release-notes
diff --git a/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite2.0/xsd/application.js b/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite2.0/xsd/application.js
new file mode 100755 (executable)
index 0000000..964aa19
--- /dev/null
@@ -0,0 +1,47 @@
+function getScrollTop() {
+  return f_scrollTop();
+}
+
+function f_scrollTop() {
+  return f_filterResults (
+    $(window) ? $(window).scrollTop() : 0,
+    document.documentElement ? document.documentElement.scrollTop : 0,
+    document.body ? document.body.scrollTop : 0
+  );
+}
+
+function f_filterResults(n_win, n_docel, n_body) {
+  var n_result = n_win ? n_win : 0;
+  if (n_docel && (!n_result || (n_result > n_docel)))
+    n_result = n_docel;
+  return n_body && (!n_result || (n_result > n_body)) ? n_body : n_result;
+}
+
+function setScrollTop() {
+  $(window) ? $(window).scrollTop(0): 0;
+  document.documentElement ? document.documentElement.scrollTop = 0 :0;
+  document.body ? document.body.scrollTop = 0 : 0;
+}
+
+function goTopEx() {
+  $node = $('#goTopBtn');
+
+  if (getScrollTop() > 0) {
+    $node.show();
+  } else {
+    $node.hide();
+  }
+
+  $(window).scroll(function () {
+    if (getScrollTop() > 0) {
+      $node.show();
+    } else {
+      $node.hide();
+    }
+  });
+
+  $node.click(function () {
+    setScrollTop();
+  });
+}
+
diff --git a/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite2.0/xsd/back_top.png b/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite2.0/xsd/back_top.png
new file mode 100755 (executable)
index 0000000..19cbd76
Binary files /dev/null and b/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite2.0/xsd/back_top.png differ
diff --git a/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite2.0/xsd/jquery.min.js b/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite2.0/xsd/jquery.min.js
new file mode 100755 (executable)
index 0000000..198b3ff
--- /dev/null
@@ -0,0 +1,4 @@
+/*! jQuery v1.7.1 jquery.com | jquery.org/license */
+(function(a,b){function cy(a){return f.isWindow(a)?a:a.nodeType===9?a.defaultView||a.parentWindow:!1}function cv(a){if(!ck[a]){var b=c.body,d=f("<"+a+">").appendTo(b),e=d.css("display");d.remove();if(e==="none"||e===""){cl||(cl=c.createElement("iframe"),cl.frameBorder=cl.width=cl.height=0),b.appendChild(cl);if(!cm||!cl.createElement)cm=(cl.contentWindow||cl.contentDocument).document,cm.write((c.compatMode==="CSS1Compat"?"<!doctype html>":"")+"<html><body>"),cm.close();d=cm.createElement(a),cm.body.appendChild(d),e=f.css(d,"display"),b.removeChild(cl)}ck[a]=e}return ck[a]}function cu(a,b){var c={};f.each(cq.concat.apply([],cq.slice(0,b)),function(){c[this]=a});return c}function ct(){cr=b}function cs(){setTimeout(ct,0);return cr=f.now()}function cj(){try{return new a.ActiveXObject("Microsoft.XMLHTTP")}catch(b){}}function ci(){try{return new a.XMLHttpRequest}catch(b){}}function cc(a,c){a.dataFilter&&(c=a.dataFilter(c,a.dataType));var d=a.dataTypes,e={},g,h,i=d.length,j,k=d[0],l,m,n,o,p;for(g=1;g<i;g++){if(g===1)for(h in a.converters)typeof h=="string"&&(e[h.toLowerCase()]=a.converters[h]);l=k,k=d[g];if(k==="*")k=l;else if(l!=="*"&&l!==k){m=l+" "+k,n=e[m]||e["* "+k];if(!n){p=b;for(o in e){j=o.split(" ");if(j[0]===l||j[0]==="*"){p=e[j[1]+" "+k];if(p){o=e[o],o===!0?n=p:p===!0&&(n=o);break}}}}!n&&!p&&f.error("No conversion from "+m.replace(" "," to ")),n!==!0&&(c=n?n(c):p(o(c)))}}return c}function cb(a,c,d){var e=a.contents,f=a.dataTypes,g=a.responseFields,h,i,j,k;for(i in g)i in d&&(c[g[i]]=d[i]);while(f[0]==="*")f.shift(),h===b&&(h=a.mimeType||c.getResponseHeader("content-type"));if(h)for(i in e)if(e[i]&&e[i].test(h)){f.unshift(i);break}if(f[0]in d)j=f[0];else{for(i in d){if(!f[0]||a.converters[i+" "+f[0]]){j=i;break}k||(k=i)}j=j||k}if(j){j!==f[0]&&f.unshift(j);return d[j]}}function ca(a,b,c,d){if(f.isArray(b))f.each(b,function(b,e){c||bE.test(a)?d(a,e):ca(a+"["+(typeof e=="object"||f.isArray(e)?b:"")+"]",e,c,d)});else if(!c&&b!=null&&typeof b=="object")for(var e in b)ca(a+"["+e+"]",b[e],c,d);else d(a,b)}function b_(a,c){var d,e,g=f.ajaxSettings.flatOptions||{};for(d in c)c[d]!==b&&((g[d]?a:e||(e={}))[d]=c[d]);e&&f.extend(!0,a,e)}function b$(a,c,d,e,f,g){f=f||c.dataTypes[0],g=g||{},g[f]=!0;var h=a[f],i=0,j=h?h.length:0,k=a===bT,l;for(;i<j&&(k||!l);i++)l=h[i](c,d,e),typeof l=="string"&&(!k||g[l]?l=b:(c.dataTypes.unshift(l),l=b$(a,c,d,e,l,g)));(k||!l)&&!g["*"]&&(l=b$(a,c,d,e,"*",g));return l}function bZ(a){return function(b,c){typeof b!="string"&&(c=b,b="*");if(f.isFunction(c)){var d=b.toLowerCase().split(bP),e=0,g=d.length,h,i,j;for(;e<g;e++)h=d[e],j=/^\+/.test(h),j&&(h=h.substr(1)||"*"),i=a[h]=a[h]||[],i[j?"unshift":"push"](c)}}}function bC(a,b,c){var d=b==="width"?a.offsetWidth:a.offsetHeight,e=b==="width"?bx:by,g=0,h=e.length;if(d>0){if(c!=="border")for(;g<h;g++)c||(d-=parseFloat(f.css(a,"padding"+e[g]))||0),c==="margin"?d+=parseFloat(f.css(a,c+e[g]))||0:d-=parseFloat(f.css(a,"border"+e[g]+"Width"))||0;return d+"px"}d=bz(a,b,b);if(d<0||d==null)d=a.style[b]||0;d=parseFloat(d)||0;if(c)for(;g<h;g++)d+=parseFloat(f.css(a,"padding"+e[g]))||0,c!=="padding"&&(d+=parseFloat(f.css(a,"border"+e[g]+"Width"))||0),c==="margin"&&(d+=parseFloat(f.css(a,c+e[g]))||0);return d+"px"}function bp(a,b){b.src?f.ajax({url:b.src,async:!1,dataType:"script"}):f.globalEval((b.text||b.textContent||b.innerHTML||"").replace(bf,"/*$0*/")),b.parentNode&&b.parentNode.removeChild(b)}function bo(a){var b=c.createElement("div");bh.appendChild(b),b.innerHTML=a.outerHTML;return b.firstChild}function bn(a){var b=(a.nodeName||"").toLowerCase();b==="input"?bm(a):b!=="script"&&typeof a.getElementsByTagName!="undefined"&&f.grep(a.getElementsByTagName("input"),bm)}function bm(a){if(a.type==="checkbox"||a.type==="radio")a.defaultChecked=a.checked}function bl(a){return typeof a.getElementsByTagName!="undefined"?a.getElementsByTagName("*"):typeof a.querySelectorAll!="undefined"?a.querySelectorAll("*"):[]}function bk(a,b){var c;if(b.nodeType===1){b.clearAttributes&&b.clearAttributes(),b.mergeAttributes&&b.mergeAttributes(a),c=b.nodeName.toLowerCase();if(c==="object")b.outerHTML=a.outerHTML;else if(c!=="input"||a.type!=="checkbox"&&a.type!=="radio"){if(c==="option")b.selected=a.defaultSelected;else if(c==="input"||c==="textarea")b.defaultValue=a.defaultValue}else a.checked&&(b.defaultChecked=b.checked=a.checked),b.value!==a.value&&(b.value=a.value);b.removeAttribute(f.expando)}}function bj(a,b){if(b.nodeType===1&&!!f.hasData(a)){var c,d,e,g=f._data(a),h=f._data(b,g),i=g.events;if(i){delete h.handle,h.events={};for(c in i)for(d=0,e=i[c].length;d<e;d++)f.event.add(b,c+(i[c][d].namespace?".":"")+i[c][d].namespace,i[c][d],i[c][d].data)}h.data&&(h.data=f.extend({},h.data))}}function bi(a,b){return f.nodeName(a,"table")?a.getElementsByTagName("tbody")[0]||a.appendChild(a.ownerDocument.createElement("tbody")):a}function U(a){var b=V.split("|"),c=a.createDocumentFragment();if(c.createElement)while(b.length)c.createElement(b.pop());return c}function T(a,b,c){b=b||0;if(f.isFunction(b))return f.grep(a,function(a,d){var e=!!b.call(a,d,a);return e===c});if(b.nodeType)return f.grep(a,function(a,d){return a===b===c});if(typeof b=="string"){var d=f.grep(a,function(a){return a.nodeType===1});if(O.test(b))return f.filter(b,d,!c);b=f.filter(b,d)}return f.grep(a,function(a,d){return f.inArray(a,b)>=0===c})}function S(a){return!a||!a.parentNode||a.parentNode.nodeType===11}function K(){return!0}function J(){return!1}function n(a,b,c){var d=b+"defer",e=b+"queue",g=b+"mark",h=f._data(a,d);h&&(c==="queue"||!f._data(a,e))&&(c==="mark"||!f._data(a,g))&&setTimeout(function(){!f._data(a,e)&&!f._data(a,g)&&(f.removeData(a,d,!0),h.fire())},0)}function m(a){for(var b in a){if(b==="data"&&f.isEmptyObject(a[b]))continue;if(b!=="toJSON")return!1}return!0}function l(a,c,d){if(d===b&&a.nodeType===1){var e="data-"+c.replace(k,"-$1").toLowerCase();d=a.getAttribute(e);if(typeof d=="string"){try{d=d==="true"?!0:d==="false"?!1:d==="null"?null:f.isNumeric(d)?parseFloat(d):j.test(d)?f.parseJSON(d):d}catch(g){}f.data(a,c,d)}else d=b}return d}function h(a){var b=g[a]={},c,d;a=a.split(/\s+/);for(c=0,d=a.length;c<d;c++)b[a[c]]=!0;return b}var c=a.document,d=a.navigator,e=a.location,f=function(){function J(){if(!e.isReady){try{c.documentElement.doScroll("left")}catch(a){setTimeout(J,1);return}e.ready()}}var e=function(a,b){return new e.fn.init(a,b,h)},f=a.jQuery,g=a.$,h,i=/^(?:[^#<]*(<[\w\W]+>)[^>]*$|#([\w\-]*)$)/,j=/\S/,k=/^\s+/,l=/\s+$/,m=/^<(\w+)\s*\/?>(?:<\/\1>)?$/,n=/^[\],:{}\s]*$/,o=/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,p=/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,q=/(?:^|:|,)(?:\s*\[)+/g,r=/(webkit)[ \/]([\w.]+)/,s=/(opera)(?:.*version)?[ \/]([\w.]+)/,t=/(msie) ([\w.]+)/,u=/(mozilla)(?:.*? rv:([\w.]+))?/,v=/-([a-z]|[0-9])/ig,w=/^-ms-/,x=function(a,b){return(b+"").toUpperCase()},y=d.userAgent,z,A,B,C=Object.prototype.toString,D=Object.prototype.hasOwnProperty,E=Array.prototype.push,F=Array.prototype.slice,G=String.prototype.trim,H=Array.prototype.indexOf,I={};e.fn=e.prototype={constructor:e,init:function(a,d,f){var g,h,j,k;if(!a)return this;if(a.nodeType){this.context=this[0]=a,this.length=1;return this}if(a==="body"&&!d&&c.body){this.context=c,this[0]=c.body,this.selector=a,this.length=1;return this}if(typeof a=="string"){a.charAt(0)!=="<"||a.charAt(a.length-1)!==">"||a.length<3?g=i.exec(a):g=[null,a,null];if(g&&(g[1]||!d)){if(g[1]){d=d instanceof e?d[0]:d,k=d?d.ownerDocument||d:c,j=m.exec(a),j?e.isPlainObject(d)?(a=[c.createElement(j[1])],e.fn.attr.call(a,d,!0)):a=[k.createElement(j[1])]:(j=e.buildFragment([g[1]],[k]),a=(j.cacheable?e.clone(j.fragment):j.fragment).childNodes);return e.merge(this,a)}h=c.getElementById(g[2]);if(h&&h.parentNode){if(h.id!==g[2])return f.find(a);this.length=1,this[0]=h}this.context=c,this.selector=a;return this}return!d||d.jquery?(d||f).find(a):this.constructor(d).find(a)}if(e.isFunction(a))return f.ready(a);a.selector!==b&&(this.selector=a.selector,this.context=a.context);return e.makeArray(a,this)},selector:"",jquery:"1.7.1",length:0,size:function(){return this.length},toArray:function(){return F.call(this,0)},get:function(a){return a==null?this.toArray():a<0?this[this.length+a]:this[a]},pushStack:function(a,b,c){var d=this.constructor();e.isArray(a)?E.apply(d,a):e.merge(d,a),d.prevObject=this,d.context=this.context,b==="find"?d.selector=this.selector+(this.selector?" ":"")+c:b&&(d.selector=this.selector+"."+b+"("+c+")");return d},each:function(a,b){return e.each(this,a,b)},ready:function(a){e.bindReady(),A.add(a);return this},eq:function(a){a=+a;return a===-1?this.slice(a):this.slice(a,a+1)},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},slice:function(){return this.pushStack(F.apply(this,arguments),"slice",F.call(arguments).join(","))},map:function(a){return this.pushStack(e.map(this,function(b,c){return a.call(b,c,b)}))},end:function(){return this.prevObject||this.constructor(null)},push:E,sort:[].sort,splice:[].splice},e.fn.init.prototype=e.fn,e.extend=e.fn.extend=function(){var a,c,d,f,g,h,i=arguments[0]||{},j=1,k=arguments.length,l=!1;typeof i=="boolean"&&(l=i,i=arguments[1]||{},j=2),typeof i!="object"&&!e.isFunction(i)&&(i={}),k===j&&(i=this,--j);for(;j<k;j++)if((a=arguments[j])!=null)for(c in a){d=i[c],f=a[c];if(i===f)continue;l&&f&&(e.isPlainObject(f)||(g=e.isArray(f)))?(g?(g=!1,h=d&&e.isArray(d)?d:[]):h=d&&e.isPlainObject(d)?d:{},i[c]=e.extend(l,h,f)):f!==b&&(i[c]=f)}return i},e.extend({noConflict:function(b){a.$===e&&(a.$=g),b&&a.jQuery===e&&(a.jQuery=f);return e},isReady:!1,readyWait:1,holdReady:function(a){a?e.readyWait++:e.ready(!0)},ready:function(a){if(a===!0&&!--e.readyWait||a!==!0&&!e.isReady){if(!c.body)return setTimeout(e.ready,1);e.isReady=!0;if(a!==!0&&--e.readyWait>0)return;A.fireWith(c,[e]),e.fn.trigger&&e(c).trigger("ready").off("ready")}},bindReady:function(){if(!A){A=e.Callbacks("once memory");if(c.readyState==="complete")return setTimeout(e.ready,1);if(c.addEventListener)c.addEventListener("DOMContentLoaded",B,!1),a.addEventListener("load",e.ready,!1);else if(c.attachEvent){c.attachEvent("onreadystatechange",B),a.attachEvent("onload",e.ready);var b=!1;try{b=a.frameElement==null}catch(d){}c.documentElement.doScroll&&b&&J()}}},isFunction:function(a){return e.type(a)==="function"},isArray:Array.isArray||function(a){return e.type(a)==="array"},isWindow:function(a){return a&&typeof a=="object"&&"setInterval"in a},isNumeric:function(a){return!isNaN(parseFloat(a))&&isFinite(a)},type:function(a){return a==null?String(a):I[C.call(a)]||"object"},isPlainObject:function(a){if(!a||e.type(a)!=="object"||a.nodeType||e.isWindow(a))return!1;try{if(a.constructor&&!D.call(a,"constructor")&&!D.call(a.constructor.prototype,"isPrototypeOf"))return!1}catch(c){return!1}var d;for(d in a);return d===b||D.call(a,d)},isEmptyObject:function(a){for(var b in a)return!1;return!0},error:function(a){throw new Error(a)},parseJSON:function(b){if(typeof b!="string"||!b)return null;b=e.trim(b);if(a.JSON&&a.JSON.parse)return a.JSON.parse(b);if(n.test(b.replace(o,"@").replace(p,"]").replace(q,"")))return(new Function("return "+b))();e.error("Invalid JSON: "+b)},parseXML:function(c){var d,f;try{a.DOMParser?(f=new DOMParser,d=f.parseFromString(c,"text/xml")):(d=new ActiveXObject("Microsoft.XMLDOM"),d.async="false",d.loadXML(c))}catch(g){d=b}(!d||!d.documentElement||d.getElementsByTagName("parsererror").length)&&e.error("Invalid XML: "+c);return d},noop:function(){},globalEval:function(b){b&&j.test(b)&&(a.execScript||function(b){a.eval.call(a,b)})(b)},camelCase:function(a){return a.replace(w,"ms-").replace(v,x)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toUpperCase()===b.toUpperCase()},each:function(a,c,d){var f,g=0,h=a.length,i=h===b||e.isFunction(a);if(d){if(i){for(f in a)if(c.apply(a[f],d)===!1)break}else for(;g<h;)if(c.apply(a[g++],d)===!1)break}else if(i){for(f in a)if(c.call(a[f],f,a[f])===!1)break}else for(;g<h;)if(c.call(a[g],g,a[g++])===!1)break;return a},trim:G?function(a){return a==null?"":G.call(a)}:function(a){return a==null?"":(a+"").replace(k,"").replace(l,"")},makeArray:function(a,b){var c=b||[];if(a!=null){var d=e.type(a);a.length==null||d==="string"||d==="function"||d==="regexp"||e.isWindow(a)?E.call(c,a):e.merge(c,a)}return c},inArray:function(a,b,c){var d;if(b){if(H)return H.call(b,a,c);d=b.length,c=c?c<0?Math.max(0,d+c):c:0;for(;c<d;c++)if(c in b&&b[c]===a)return c}return-1},merge:function(a,c){var d=a.length,e=0;if(typeof c.length=="number")for(var f=c.length;e<f;e++)a[d++]=c[e];else while(c[e]!==b)a[d++]=c[e++];a.length=d;return a},grep:function(a,b,c){var d=[],e;c=!!c;for(var f=0,g=a.length;f<g;f++)e=!!b(a[f],f),c!==e&&d.push(a[f]);return d},map:function(a,c,d){var f,g,h=[],i=0,j=a.length,k=a instanceof e||j!==b&&typeof j=="number"&&(j>0&&a[0]&&a[j-1]||j===0||e.isArray(a));if(k)for(;i<j;i++)f=c(a[i],i,d),f!=null&&(h[h.length]=f);else for(g in a)f=c(a[g],g,d),f!=null&&(h[h.length]=f);return h.concat.apply([],h)},guid:1,proxy:function(a,c){if(typeof c=="string"){var d=a[c];c=a,a=d}if(!e.isFunction(a))return b;var f=F.call(arguments,2),g=function(){return a.apply(c,f.concat(F.call(arguments)))};g.guid=a.guid=a.guid||g.guid||e.guid++;return g},access:function(a,c,d,f,g,h){var i=a.length;if(typeof c=="object"){for(var j in c)e.access(a,j,c[j],f,g,d);return a}if(d!==b){f=!h&&f&&e.isFunction(d);for(var k=0;k<i;k++)g(a[k],c,f?d.call(a[k],k,g(a[k],c)):d,h);return a}return i?g(a[0],c):b},now:function(){return(new Date).getTime()},uaMatch:function(a){a=a.toLowerCase();var b=r.exec(a)||s.exec(a)||t.exec(a)||a.indexOf("compatible")<0&&u.exec(a)||[];return{browser:b[1]||"",version:b[2]||"0"}},sub:function(){function a(b,c){return new a.fn.init(b,c)}e.extend(!0,a,this),a.superclass=this,a.fn=a.prototype=this(),a.fn.constructor=a,a.sub=this.sub,a.fn.init=function(d,f){f&&f instanceof e&&!(f instanceof a)&&(f=a(f));return e.fn.init.call(this,d,f,b)},a.fn.init.prototype=a.fn;var b=a(c);return a},browser:{}}),e.each("Boolean Number String Function Array Date RegExp Object".split(" "),function(a,b){I["[object "+b+"]"]=b.toLowerCase()}),z=e.uaMatch(y),z.browser&&(e.browser[z.browser]=!0,e.browser.version=z.version),e.browser.webkit&&(e.browser.safari=!0),j.test(" ")&&(k=/^[\s\xA0]+/,l=/[\s\xA0]+$/),h=e(c),c.addEventListener?B=function(){c.removeEventListener("DOMContentLoaded",B,!1),e.ready()}:c.attachEvent&&(B=function(){c.readyState==="complete"&&(c.detachEvent("onreadystatechange",B),e.ready())});return e}(),g={};f.Callbacks=function(a){a=a?g[a]||h(a):{};var c=[],d=[],e,i,j,k,l,m=function(b){var d,e,g,h,i;for(d=0,e=b.length;d<e;d++)g=b[d],h=f.type(g),h==="array"?m(g):h==="function"&&(!a.unique||!o.has(g))&&c.push(g)},n=function(b,f){f=f||[],e=!a.memory||[b,f],i=!0,l=j||0,j=0,k=c.length;for(;c&&l<k;l++)if(c[l].apply(b,f)===!1&&a.stopOnFalse){e=!0;break}i=!1,c&&(a.once?e===!0?o.disable():c=[]:d&&d.length&&(e=d.shift(),o.fireWith(e[0],e[1])))},o={add:function(){if(c){var a=c.length;m(arguments),i?k=c.length:e&&e!==!0&&(j=a,n(e[0],e[1]))}return this},remove:function(){if(c){var b=arguments,d=0,e=b.length;for(;d<e;d++)for(var f=0;f<c.length;f++)if(b[d]===c[f]){i&&f<=k&&(k--,f<=l&&l--),c.splice(f--,1);if(a.unique)break}}return this},has:function(a){if(c){var b=0,d=c.length;for(;b<d;b++)if(a===c[b])return!0}return!1},empty:function(){c=[];return this},disable:function(){c=d=e=b;return this},disabled:function(){return!c},lock:function(){d=b,(!e||e===!0)&&o.disable();return this},locked:function(){return!d},fireWith:function(b,c){d&&(i?a.once||d.push([b,c]):(!a.once||!e)&&n(b,c));return this},fire:function(){o.fireWith(this,arguments);return this},fired:function(){return!!e}};return o};var i=[].slice;f.extend({Deferred:function(a){var b=f.Callbacks("once memory"),c=f.Callbacks("once memory"),d=f.Callbacks("memory"),e="pending",g={resolve:b,reject:c,notify:d},h={done:b.add,fail:c.add,progress:d.add,state:function(){return e},isResolved:b.fired,isRejected:c.fired,then:function(a,b,c){i.done(a).fail(b).progress(c);return this},always:function(){i.done.apply(i,arguments).fail.apply(i,arguments);return this},pipe:function(a,b,c){return f.Deferred(function(d){f.each({done:[a,"resolve"],fail:[b,"reject"],progress:[c,"notify"]},function(a,b){var c=b[0],e=b[1],g;f.isFunction(c)?i[a](function(){g=c.apply(this,arguments),g&&f.isFunction(g.promise)?g.promise().then(d.resolve,d.reject,d.notify):d[e+"With"](this===i?d:this,[g])}):i[a](d[e])})}).promise()},promise:function(a){if(a==null)a=h;else for(var b in h)a[b]=h[b];return a}},i=h.promise({}),j;for(j in g)i[j]=g[j].fire,i[j+"With"]=g[j].fireWith;i.done(function(){e="resolved"},c.disable,d.lock).fail(function(){e="rejected"},b.disable,d.lock),a&&a.call(i,i);return i},when:function(a){function m(a){return function(b){e[a]=arguments.length>1?i.call(arguments,0):b,j.notifyWith(k,e)}}function l(a){return function(c){b[a]=arguments.length>1?i.call(arguments,0):c,--g||j.resolveWith(j,b)}}var b=i.call(arguments,0),c=0,d=b.length,e=Array(d),g=d,h=d,j=d<=1&&a&&f.isFunction(a.promise)?a:f.Deferred(),k=j.promise();if(d>1){for(;c<d;c++)b[c]&&b[c].promise&&f.isFunction(b[c].promise)?b[c].promise().then(l(c),j.reject,m(c)):--g;g||j.resolveWith(j,b)}else j!==a&&j.resolveWith(j,d?[a]:[]);return k}}),f.support=function(){var b,d,e,g,h,i,j,k,l,m,n,o,p,q=c.createElement("div"),r=c.documentElement;q.setAttribute("className","t"),q.innerHTML="   <link/><table></table><a href='/a' style='top:1px;float:left;opacity:.55;'>a</a><input type='checkbox'/>",d=q.getElementsByTagName("*"),e=q.getElementsByTagName("a")[0];if(!d||!d.length||!e)return{};g=c.createElement("select"),h=g.appendChild(c.createElement("option")),i=q.getElementsByTagName("input")[0],b={leadingWhitespace:q.firstChild.nodeType===3,tbody:!q.getElementsByTagName("tbody").length,htmlSerialize:!!q.getElementsByTagName("link").length,style:/top/.test(e.getAttribute("style")),hrefNormalized:e.getAttribute("href")==="/a",opacity:/^0.55/.test(e.style.opacity),cssFloat:!!e.style.cssFloat,checkOn:i.value==="on",optSelected:h.selected,getSetAttribute:q.className!=="t",enctype:!!c.createElement("form").enctype,html5Clone:c.createElement("nav").cloneNode(!0).outerHTML!=="<:nav></:nav>",submitBubbles:!0,changeBubbles:!0,focusinBubbles:!1,deleteExpando:!0,noCloneEvent:!0,inlineBlockNeedsLayout:!1,shrinkWrapBlocks:!1,reliableMarginRight:!0},i.checked=!0,b.noCloneChecked=i.cloneNode(!0).checked,g.disabled=!0,b.optDisabled=!h.disabled;try{delete q.test}catch(s){b.deleteExpando=!1}!q.addEventListener&&q.attachEvent&&q.fireEvent&&(q.attachEvent("onclick",function(){b.noCloneEvent=!1}),q.cloneNode(!0).fireEvent("onclick")),i=c.createElement("input"),i.value="t",i.setAttribute("type","radio"),b.radioValue=i.value==="t",i.setAttribute("checked","checked"),q.appendChild(i),k=c.createDocumentFragment(),k.appendChild(q.lastChild),b.checkClone=k.cloneNode(!0).cloneNode(!0).lastChild.checked,b.appendChecked=i.checked,k.removeChild(i),k.appendChild(q),q.innerHTML="",a.getComputedStyle&&(j=c.createElement("div"),j.style.width="0",j.style.marginRight="0",q.style.width="2px",q.appendChild(j),b.reliableMarginRight=(parseInt((a.getComputedStyle(j,null)||{marginRight:0}).marginRight,10)||0)===0);if(q.attachEvent)for(o in{submit:1,change:1,focusin:1})n="on"+o,p=n in q,p||(q.setAttribute(n,"return;"),p=typeof q[n]=="function"),b[o+"Bubbles"]=p;k.removeChild(q),k=g=h=j=q=i=null,f(function(){var a,d,e,g,h,i,j,k,m,n,o,r=c.getElementsByTagName("body")[0];!r||(j=1,k="position:absolute;top:0;left:0;width:1px;height:1px;margin:0;",m="visibility:hidden;border:0;",n="style='"+k+"border:5px solid #000;padding:0;'",o="<div "+n+"><div></div></div>"+"<table "+n+" cellpadding='0' cellspacing='0'>"+"<tr><td></td></tr></table>",a=c.createElement("div"),a.style.cssText=m+"width:0;height:0;position:static;top:0;margin-top:"+j+"px",r.insertBefore(a,r.firstChild),q=c.createElement("div"),a.appendChild(q),q.innerHTML="<table><tr><td style='padding:0;border:0;display:none'></td><td>t</td></tr></table>",l=q.getElementsByTagName("td"),p=l[0].offsetHeight===0,l[0].style.display="",l[1].style.display="none",b.reliableHiddenOffsets=p&&l[0].offsetHeight===0,q.innerHTML="",q.style.width=q.style.paddingLeft="1px",f.boxModel=b.boxModel=q.offsetWidth===2,typeof q.style.zoom!="undefined"&&(q.style.display="inline",q.style.zoom=1,b.inlineBlockNeedsLayout=q.offsetWidth===2,q.style.display="",q.innerHTML="<div style='width:4px;'></div>",b.shrinkWrapBlocks=q.offsetWidth!==2),q.style.cssText=k+m,q.innerHTML=o,d=q.firstChild,e=d.firstChild,h=d.nextSibling.firstChild.firstChild,i={doesNotAddBorder:e.offsetTop!==5,doesAddBorderForTableAndCells:h.offsetTop===5},e.style.position="fixed",e.style.top="20px",i.fixedPosition=e.offsetTop===20||e.offsetTop===15,e.style.position=e.style.top="",d.style.overflow="hidden",d.style.position="relative",i.subtractsBorderForOverflowNotVisible=e.offsetTop===-5,i.doesNotIncludeMarginInBodyOffset=r.offsetTop!==j,r.removeChild(a),q=a=null,f.extend(b,i))});return b}();var j=/^(?:\{.*\}|\[.*\])$/,k=/([A-Z])/g;f.extend({cache:{},uuid:0,expando:"jQuery"+(f.fn.jquery+Math.random()).replace(/\D/g,""),noData:{embed:!0,object:"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000",applet:!0},hasData:function(a){a=a.nodeType?f.cache[a[f.expando]]:a[f.expando];return!!a&&!m(a)},data:function(a,c,d,e){if(!!f.acceptData(a)){var g,h,i,j=f.expando,k=typeof c=="string",l=a.nodeType,m=l?f.cache:a,n=l?a[j]:a[j]&&j,o=c==="events";if((!n||!m[n]||!o&&!e&&!m[n].data)&&k&&d===b)return;n||(l?a[j]=n=++f.uuid:n=j),m[n]||(m[n]={},l||(m[n].toJSON=f.noop));if(typeof c=="object"||typeof c=="function")e?m[n]=f.extend(m[n],c):m[n].data=f.extend(m[n].data,c);g=h=m[n],e||(h.data||(h.data={}),h=h.data),d!==b&&(h[f.camelCase(c)]=d);if(o&&!h[c])return g.events;k?(i=h[c],i==null&&(i=h[f.camelCase(c)])):i=h;return i}},removeData:function(a,b,c){if(!!f.acceptData(a)){var d,e,g,h=f.expando,i=a.nodeType,j=i?f.cache:a,k=i?a[h]:h;if(!j[k])return;if(b){d=c?j[k]:j[k].data;if(d){f.isArray(b)||(b in d?b=[b]:(b=f.camelCase(b),b in d?b=[b]:b=b.split(" ")));for(e=0,g=b.length;e<g;e++)delete d[b[e]];if(!(c?m:f.isEmptyObject)(d))return}}if(!c){delete j[k].data;if(!m(j[k]))return}f.support.deleteExpando||!j.setInterval?delete j[k]:j[k]=null,i&&(f.support.deleteExpando?delete a[h]:a.removeAttribute?a.removeAttribute(h):a[h]=null)}},_data:function(a,b,c){return f.data(a,b,c,!0)},acceptData:function(a){if(a.nodeName){var b=f.noData[a.nodeName.toLowerCase()];if(b)return b!==!0&&a.getAttribute("classid")===b}return!0}}),f.fn.extend({data:function(a,c){var d,e,g,h=null;if(typeof a=="undefined"){if(this.length){h=f.data(this[0]);if(this[0].nodeType===1&&!f._data(this[0],"parsedAttrs")){e=this[0].attributes;for(var i=0,j=e.length;i<j;i++)g=e[i].name,g.indexOf("data-")===0&&(g=f.camelCase(g.substring(5)),l(this[0],g,h[g]));f._data(this[0],"parsedAttrs",!0)}}return h}if(typeof a=="object")return this.each(function(){f.data(this,a)});d=a.split("."),d[1]=d[1]?"."+d[1]:"";if(c===b){h=this.triggerHandler("getData"+d[1]+"!",[d[0]]),h===b&&this.length&&(h=f.data(this[0],a),h=l(this[0],a,h));return h===b&&d[1]?this.data(d[0]):h}return this.each(function(){var b=f(this),e=[d[0],c];b.triggerHandler("setData"+d[1]+"!",e),f.data(this,a,c),b.triggerHandler("changeData"+d[1]+"!",e)})},removeData:function(a){return this.each(function(){f.removeData(this,a)})}}),f.extend({_mark:function(a,b){a&&(b=(b||"fx")+"mark",f._data(a,b,(f._data(a,b)||0)+1))},_unmark:function(a,b,c){a!==!0&&(c=b,b=a,a=!1);if(b){c=c||"fx";var d=c+"mark",e=a?0:(f._data(b,d)||1)-1;e?f._data(b,d,e):(f.removeData(b,d,!0),n(b,c,"mark"))}},queue:function(a,b,c){var d;if(a){b=(b||"fx")+"queue",d=f._data(a,b),c&&(!d||f.isArray(c)?d=f._data(a,b,f.makeArray(c)):d.push(c));return d||[]}},dequeue:function(a,b){b=b||"fx";var c=f.queue(a,b),d=c.shift(),e={};d==="inprogress"&&(d=c.shift()),d&&(b==="fx"&&c.unshift("inprogress"),f._data(a,b+".run",e),d.call(a,function(){f.dequeue(a,b)},e)),c.length||(f.removeData(a,b+"queue "+b+".run",!0),n(a,b,"queue"))}}),f.fn.extend({queue:function(a,c){typeof a!="string"&&(c=a,a="fx");if(c===b)return f.queue(this[0],a);return this.each(function(){var b=f.queue(this,a,c);a==="fx"&&b[0]!=="inprogress"&&f.dequeue(this,a)})},dequeue:function(a){return this.each(function(){f.dequeue(this,a)})},delay:function(a,b){a=f.fx?f.fx.speeds[a]||a:a,b=b||"fx";return this.queue(b,function(b,c){var d=setTimeout(b,a);c.stop=function(){clearTimeout(d)}})},clearQueue:function(a){return this.queue(a||"fx",[])},promise:function(a,c){function m(){--h||d.resolveWith(e,[e])}typeof a!="string"&&(c=a,a=b),a=a||"fx";var d=f.Deferred(),e=this,g=e.length,h=1,i=a+"defer",j=a+"queue",k=a+"mark",l;while(g--)if(l=f.data(e[g],i,b,!0)||(f.data(e[g],j,b,!0)||f.data(e[g],k,b,!0))&&f.data(e[g],i,f.Callbacks("once memory"),!0))h++,l.add(m);m();return d.promise()}});var o=/[\n\t\r]/g,p=/\s+/,q=/\r/g,r=/^(?:button|input)$/i,s=/^(?:button|input|object|select|textarea)$/i,t=/^a(?:rea)?$/i,u=/^(?:autofocus|autoplay|async|checked|controls|defer|disabled|hidden|loop|multiple|open|readonly|required|scoped|selected)$/i,v=f.support.getSetAttribute,w,x,y;f.fn.extend({attr:function(a,b){return f.access(this,a,b,!0,f.attr)},removeAttr:function(a){return this.each(function(){f.removeAttr(this,a)})},prop:function(a,b){return f.access(this,a,b,!0,f.prop)},removeProp:function(a){a=f.propFix[a]||a;return this.each(function(){try{this[a]=b,delete this[a]}catch(c){}})},addClass:function(a){var b,c,d,e,g,h,i;if(f.isFunction(a))return this.each(function(b){f(this).addClass(a.call(this,b,this.className))});if(a&&typeof a=="string"){b=a.split(p);for(c=0,d=this.length;c<d;c++){e=this[c];if(e.nodeType===1)if(!e.className&&b.length===1)e.className=a;else{g=" "+e.className+" ";for(h=0,i=b.length;h<i;h++)~g.indexOf(" "+b[h]+" ")||(g+=b[h]+" ");e.className=f.trim(g)}}}return this},removeClass:function(a){var c,d,e,g,h,i,j;if(f.isFunction(a))return this.each(function(b){f(this).removeClass(a.call(this,b,this.className))});if(a&&typeof a=="string"||a===b){c=(a||"").split(p);for(d=0,e=this.length;d<e;d++){g=this[d];if(g.nodeType===1&&g.className)if(a){h=(" "+g.className+" ").replace(o," ");for(i=0,j=c.length;i<j;i++)h=h.replace(" "+c[i]+" "," ");g.className=f.trim(h)}else g.className=""}}return this},toggleClass:function(a,b){var c=typeof a,d=typeof b=="boolean";if(f.isFunction(a))return this.each(function(c){f(this).toggleClass(a.call(this,c,this.className,b),b)});return this.each(function(){if(c==="string"){var e,g=0,h=f(this),i=b,j=a.split(p);while(e=j[g++])i=d?i:!h.hasClass(e),h[i?"addClass":"removeClass"](e)}else if(c==="undefined"||c==="boolean")this.className&&f._data(this,"__className__",this.className),this.className=this.className||a===!1?"":f._data(this,"__className__")||""})},hasClass:function(a){var b=" "+a+" ",c=0,d=this.length;for(;c<d;c++)if(this[c].nodeType===1&&(" "+this[c].className+" ").replace(o," ").indexOf(b)>-1)return!0;return!1},val:function(a){var c,d,e,g=this[0];{if(!!arguments.length){e=f.isFunction(a);return this.each(function(d){var g=f(this),h;if(this.nodeType===1){e?h=a.call(this,d,g.val()):h=a,h==null?h="":typeof h=="number"?h+="":f.isArray(h)&&(h=f.map(h,function(a){return a==null?"":a+""})),c=f.valHooks[this.nodeName.toLowerCase()]||f.valHooks[this.type];if(!c||!("set"in c)||c.set(this,h,"value")===b)this.value=h}})}if(g){c=f.valHooks[g.nodeName.toLowerCase()]||f.valHooks[g.type];if(c&&"get"in c&&(d=c.get(g,"value"))!==b)return d;d=g.value;return typeof d=="string"?d.replace(q,""):d==null?"":d}}}}),f.extend({valHooks:{option:{get:function(a){var b=a.attributes.value;return!b||b.specified?a.value:a.text}},select:{get:function(a){var b,c,d,e,g=a.selectedIndex,h=[],i=a.options,j=a.type==="select-one";if(g<0)return null;c=j?g:0,d=j?g+1:i.length;for(;c<d;c++){e=i[c];if(e.selected&&(f.support.optDisabled?!e.disabled:e.getAttribute("disabled")===null)&&(!e.parentNode.disabled||!f.nodeName(e.parentNode,"optgroup"))){b=f(e).val();if(j)return b;h.push(b)}}if(j&&!h.length&&i.length)return f(i[g]).val();return h},set:function(a,b){var c=f.makeArray(b);f(a).find("option").each(function(){this.selected=f.inArray(f(this).val(),c)>=0}),c.length||(a.selectedIndex=-1);return c}}},attrFn:{val:!0,css:!0,html:!0,text:!0,data:!0,width:!0,height:!0,offset:!0},attr:function(a,c,d,e){var g,h,i,j=a.nodeType;if(!!a&&j!==3&&j!==8&&j!==2){if(e&&c in f.attrFn)return f(a)[c](d);if(typeof a.getAttribute=="undefined")return f.prop(a,c,d);i=j!==1||!f.isXMLDoc(a),i&&(c=c.toLowerCase(),h=f.attrHooks[c]||(u.test(c)?x:w));if(d!==b){if(d===null){f.removeAttr(a,c);return}if(h&&"set"in h&&i&&(g=h.set(a,d,c))!==b)return g;a.setAttribute(c,""+d);return d}if(h&&"get"in h&&i&&(g=h.get(a,c))!==null)return g;g=a.getAttribute(c);return g===null?b:g}},removeAttr:function(a,b){var c,d,e,g,h=0;if(b&&a.nodeType===1){d=b.toLowerCase().split(p),g=d.length;for(;h<g;h++)e=d[h],e&&(c=f.propFix[e]||e,f.attr(a,e,""),a.removeAttribute(v?e:c),u.test(e)&&c in a&&(a[c]=!1))}},attrHooks:{type:{set:function(a,b){if(r.test(a.nodeName)&&a.parentNode)f.error("type property can't be changed");else if(!f.support.radioValue&&b==="radio"&&f.nodeName(a,"input")){var c=a.value;a.setAttribute("type",b),c&&(a.value=c);return b}}},value:{get:function(a,b){if(w&&f.nodeName(a,"button"))return w.get(a,b);return b in a?a.value:null},set:function(a,b,c){if(w&&f.nodeName(a,"button"))return w.set(a,b,c);a.value=b}}},propFix:{tabindex:"tabIndex",readonly:"readOnly","for":"htmlFor","class":"className",maxlength:"maxLength",cellspacing:"cellSpacing",cellpadding:"cellPadding",rowspan:"rowSpan",colspan:"colSpan",usemap:"useMap",frameborder:"frameBorder",contenteditable:"contentEditable"},prop:function(a,c,d){var e,g,h,i=a.nodeType;if(!!a&&i!==3&&i!==8&&i!==2){h=i!==1||!f.isXMLDoc(a),h&&(c=f.propFix[c]||c,g=f.propHooks[c]);return d!==b?g&&"set"in g&&(e=g.set(a,d,c))!==b?e:a[c]=d:g&&"get"in g&&(e=g.get(a,c))!==null?e:a[c]}},propHooks:{tabIndex:{get:function(a){var c=a.getAttributeNode("tabindex");return c&&c.specified?parseInt(c.value,10):s.test(a.nodeName)||t.test(a.nodeName)&&a.href?0:b}}}}),f.attrHooks.tabindex=f.propHooks.tabIndex,x={get:function(a,c){var d,e=f.prop(a,c);return e===!0||typeof e!="boolean"&&(d=a.getAttributeNode(c))&&d.nodeValue!==!1?c.toLowerCase():b},set:function(a,b,c){var d;b===!1?f.removeAttr(a,c):(d=f.propFix[c]||c,d in a&&(a[d]=!0),a.setAttribute(c,c.toLowerCase()));return c}},v||(y={name:!0,id:!0},w=f.valHooks.button={get:function(a,c){var d;d=a.getAttributeNode(c);return d&&(y[c]?d.nodeValue!=="":d.specified)?d.nodeValue:b},set:function(a,b,d){var e=a.getAttributeNode(d);e||(e=c.createAttribute(d),a.setAttributeNode(e));return e.nodeValue=b+""}},f.attrHooks.tabindex.set=w.set,f.each(["width","height"],function(a,b){f.attrHooks[b]=f.extend(f.attrHooks[b],{set:function(a,c){if(c===""){a.setAttribute(b,"auto");return c}}})}),f.attrHooks.contenteditable={get:w.get,set:function(a,b,c){b===""&&(b="false"),w.set(a,b,c)}}),f.support.hrefNormalized||f.each(["href","src","width","height"],function(a,c){f.attrHooks[c]=f.extend(f.attrHooks[c],{get:function(a){var d=a.getAttribute(c,2);return d===null?b:d}})}),f.support.style||(f.attrHooks.style={get:function(a){return a.style.cssText.toLowerCase()||b},set:function(a,b){return a.style.cssText=""+b}}),f.support.optSelected||(f.propHooks.selected=f.extend(f.propHooks.selected,{get:function(a){var b=a.parentNode;b&&(b.selectedIndex,b.parentNode&&b.parentNode.selectedIndex);return null}})),f.support.enctype||(f.propFix.enctype="encoding"),f.support.checkOn||f.each(["radio","checkbox"],function(){f.valHooks[this]={get:function(a){return a.getAttribute("value")===null?"on":a.value}}}),f.each(["radio","checkbox"],function(){f.valHooks[this]=f.extend(f.valHooks[this],{set:function(a,b){if(f.isArray(b))return a.checked=f.inArray(f(a).val(),b)>=0}})});var z=/^(?:textarea|input|select)$/i,A=/^([^\.]*)?(?:\.(.+))?$/,B=/\bhover(\.\S+)?\b/,C=/^key/,D=/^(?:mouse|contextmenu)|click/,E=/^(?:focusinfocus|focusoutblur)$/,F=/^(\w*)(?:#([\w\-]+))?(?:\.([\w\-]+))?$/,G=function(a){var b=F.exec(a);b&&(b[1]=(b[1]||"").toLowerCase(),b[3]=b[3]&&new RegExp("(?:^|\\s)"+b[3]+"(?:\\s|$)"));return b},H=function(a,b){var c=a.attributes||{};return(!b[1]||a.nodeName.toLowerCase()===b[1])&&(!b[2]||(c.id||{}).value===b[2])&&(!b[3]||b[3].test((c["class"]||{}).value))},I=function(a){return f.event.special.hover?a:a.replace(B,"mouseenter$1 mouseleave$1")};
+f.event={add:function(a,c,d,e,g){var h,i,j,k,l,m,n,o,p,q,r,s;if(!(a.nodeType===3||a.nodeType===8||!c||!d||!(h=f._data(a)))){d.handler&&(p=d,d=p.handler),d.guid||(d.guid=f.guid++),j=h.events,j||(h.events=j={}),i=h.handle,i||(h.handle=i=function(a){return typeof f!="undefined"&&(!a||f.event.triggered!==a.type)?f.event.dispatch.apply(i.elem,arguments):b},i.elem=a),c=f.trim(I(c)).split(" ");for(k=0;k<c.length;k++){l=A.exec(c[k])||[],m=l[1],n=(l[2]||"").split(".").sort(),s=f.event.special[m]||{},m=(g?s.delegateType:s.bindType)||m,s=f.event.special[m]||{},o=f.extend({type:m,origType:l[1],data:e,handler:d,guid:d.guid,selector:g,quick:G(g),namespace:n.join(".")},p),r=j[m];if(!r){r=j[m]=[],r.delegateCount=0;if(!s.setup||s.setup.call(a,e,n,i)===!1)a.addEventListener?a.addEventListener(m,i,!1):a.attachEvent&&a.attachEvent("on"+m,i)}s.add&&(s.add.call(a,o),o.handler.guid||(o.handler.guid=d.guid)),g?r.splice(r.delegateCount++,0,o):r.push(o),f.event.global[m]=!0}a=null}},global:{},remove:function(a,b,c,d,e){var g=f.hasData(a)&&f._data(a),h,i,j,k,l,m,n,o,p,q,r,s;if(!!g&&!!(o=g.events)){b=f.trim(I(b||"")).split(" ");for(h=0;h<b.length;h++){i=A.exec(b[h])||[],j=k=i[1],l=i[2];if(!j){for(j in o)f.event.remove(a,j+b[h],c,d,!0);continue}p=f.event.special[j]||{},j=(d?p.delegateType:p.bindType)||j,r=o[j]||[],m=r.length,l=l?new RegExp("(^|\\.)"+l.split(".").sort().join("\\.(?:.*\\.)?")+"(\\.|$)"):null;for(n=0;n<r.length;n++)s=r[n],(e||k===s.origType)&&(!c||c.guid===s.guid)&&(!l||l.test(s.namespace))&&(!d||d===s.selector||d==="**"&&s.selector)&&(r.splice(n--,1),s.selector&&r.delegateCount--,p.remove&&p.remove.call(a,s));r.length===0&&m!==r.length&&((!p.teardown||p.teardown.call(a,l)===!1)&&f.removeEvent(a,j,g.handle),delete o[j])}f.isEmptyObject(o)&&(q=g.handle,q&&(q.elem=null),f.removeData(a,["events","handle"],!0))}},customEvent:{getData:!0,setData:!0,changeData:!0},trigger:function(c,d,e,g){if(!e||e.nodeType!==3&&e.nodeType!==8){var h=c.type||c,i=[],j,k,l,m,n,o,p,q,r,s;if(E.test(h+f.event.triggered))return;h.indexOf("!")>=0&&(h=h.slice(0,-1),k=!0),h.indexOf(".")>=0&&(i=h.split("."),h=i.shift(),i.sort());if((!e||f.event.customEvent[h])&&!f.event.global[h])return;c=typeof c=="object"?c[f.expando]?c:new f.Event(h,c):new f.Event(h),c.type=h,c.isTrigger=!0,c.exclusive=k,c.namespace=i.join("."),c.namespace_re=c.namespace?new RegExp("(^|\\.)"+i.join("\\.(?:.*\\.)?")+"(\\.|$)"):null,o=h.indexOf(":")<0?"on"+h:"";if(!e){j=f.cache;for(l in j)j[l].events&&j[l].events[h]&&f.event.trigger(c,d,j[l].handle.elem,!0);return}c.result=b,c.target||(c.target=e),d=d!=null?f.makeArray(d):[],d.unshift(c),p=f.event.special[h]||{};if(p.trigger&&p.trigger.apply(e,d)===!1)return;r=[[e,p.bindType||h]];if(!g&&!p.noBubble&&!f.isWindow(e)){s=p.delegateType||h,m=E.test(s+h)?e:e.parentNode,n=null;for(;m;m=m.parentNode)r.push([m,s]),n=m;n&&n===e.ownerDocument&&r.push([n.defaultView||n.parentWindow||a,s])}for(l=0;l<r.length&&!c.isPropagationStopped();l++)m=r[l][0],c.type=r[l][1],q=(f._data(m,"events")||{})[c.type]&&f._data(m,"handle"),q&&q.apply(m,d),q=o&&m[o],q&&f.acceptData(m)&&q.apply(m,d)===!1&&c.preventDefault();c.type=h,!g&&!c.isDefaultPrevented()&&(!p._default||p._default.apply(e.ownerDocument,d)===!1)&&(h!=="click"||!f.nodeName(e,"a"))&&f.acceptData(e)&&o&&e[h]&&(h!=="focus"&&h!=="blur"||c.target.offsetWidth!==0)&&!f.isWindow(e)&&(n=e[o],n&&(e[o]=null),f.event.triggered=h,e[h](),f.event.triggered=b,n&&(e[o]=n));return c.result}},dispatch:function(c){c=f.event.fix(c||a.event);var d=(f._data(this,"events")||{})[c.type]||[],e=d.delegateCount,g=[].slice.call(arguments,0),h=!c.exclusive&&!c.namespace,i=[],j,k,l,m,n,o,p,q,r,s,t;g[0]=c,c.delegateTarget=this;if(e&&!c.target.disabled&&(!c.button||c.type!=="click")){m=f(this),m.context=this.ownerDocument||this;for(l=c.target;l!=this;l=l.parentNode||this){o={},q=[],m[0]=l;for(j=0;j<e;j++)r=d[j],s=r.selector,o[s]===b&&(o[s]=r.quick?H(l,r.quick):m.is(s)),o[s]&&q.push(r);q.length&&i.push({elem:l,matches:q})}}d.length>e&&i.push({elem:this,matches:d.slice(e)});for(j=0;j<i.length&&!c.isPropagationStopped();j++){p=i[j],c.currentTarget=p.elem;for(k=0;k<p.matches.length&&!c.isImmediatePropagationStopped();k++){r=p.matches[k];if(h||!c.namespace&&!r.namespace||c.namespace_re&&c.namespace_re.test(r.namespace))c.data=r.data,c.handleObj=r,n=((f.event.special[r.origType]||{}).handle||r.handler).apply(p.elem,g),n!==b&&(c.result=n,n===!1&&(c.preventDefault(),c.stopPropagation()))}}return c.result},props:"attrChange attrName relatedNode srcElement altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "),fixHooks:{},keyHooks:{props:"char charCode key keyCode".split(" "),filter:function(a,b){a.which==null&&(a.which=b.charCode!=null?b.charCode:b.keyCode);return a}},mouseHooks:{props:"button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement".split(" "),filter:function(a,d){var e,f,g,h=d.button,i=d.fromElement;a.pageX==null&&d.clientX!=null&&(e=a.target.ownerDocument||c,f=e.documentElement,g=e.body,a.pageX=d.clientX+(f&&f.scrollLeft||g&&g.scrollLeft||0)-(f&&f.clientLeft||g&&g.clientLeft||0),a.pageY=d.clientY+(f&&f.scrollTop||g&&g.scrollTop||0)-(f&&f.clientTop||g&&g.clientTop||0)),!a.relatedTarget&&i&&(a.relatedTarget=i===a.target?d.toElement:i),!a.which&&h!==b&&(a.which=h&1?1:h&2?3:h&4?2:0);return a}},fix:function(a){if(a[f.expando])return a;var d,e,g=a,h=f.event.fixHooks[a.type]||{},i=h.props?this.props.concat(h.props):this.props;a=f.Event(g);for(d=i.length;d;)e=i[--d],a[e]=g[e];a.target||(a.target=g.srcElement||c),a.target.nodeType===3&&(a.target=a.target.parentNode),a.metaKey===b&&(a.metaKey=a.ctrlKey);return h.filter?h.filter(a,g):a},special:{ready:{setup:f.bindReady},load:{noBubble:!0},focus:{delegateType:"focusin"},blur:{delegateType:"focusout"},beforeunload:{setup:function(a,b,c){f.isWindow(this)&&(this.onbeforeunload=c)},teardown:function(a,b){this.onbeforeunload===b&&(this.onbeforeunload=null)}}},simulate:function(a,b,c,d){var e=f.extend(new f.Event,c,{type:a,isSimulated:!0,originalEvent:{}});d?f.event.trigger(e,null,b):f.event.dispatch.call(b,e),e.isDefaultPrevented()&&c.preventDefault()}},f.event.handle=f.event.dispatch,f.removeEvent=c.removeEventListener?function(a,b,c){a.removeEventListener&&a.removeEventListener(b,c,!1)}:function(a,b,c){a.detachEvent&&a.detachEvent("on"+b,c)},f.Event=function(a,b){if(!(this instanceof f.Event))return new f.Event(a,b);a&&a.type?(this.originalEvent=a,this.type=a.type,this.isDefaultPrevented=a.defaultPrevented||a.returnValue===!1||a.getPreventDefault&&a.getPreventDefault()?K:J):this.type=a,b&&f.extend(this,b),this.timeStamp=a&&a.timeStamp||f.now(),this[f.expando]=!0},f.Event.prototype={preventDefault:function(){this.isDefaultPrevented=K;var a=this.originalEvent;!a||(a.preventDefault?a.preventDefault():a.returnValue=!1)},stopPropagation:function(){this.isPropagationStopped=K;var a=this.originalEvent;!a||(a.stopPropagation&&a.stopPropagation(),a.cancelBubble=!0)},stopImmediatePropagation:function(){this.isImmediatePropagationStopped=K,this.stopPropagation()},isDefaultPrevented:J,isPropagationStopped:J,isImmediatePropagationStopped:J},f.each({mouseenter:"mouseover",mouseleave:"mouseout"},function(a,b){f.event.special[a]={delegateType:b,bindType:b,handle:function(a){var c=this,d=a.relatedTarget,e=a.handleObj,g=e.selector,h;if(!d||d!==c&&!f.contains(c,d))a.type=e.origType,h=e.handler.apply(this,arguments),a.type=b;return h}}}),f.support.submitBubbles||(f.event.special.submit={setup:function(){if(f.nodeName(this,"form"))return!1;f.event.add(this,"click._submit keypress._submit",function(a){var c=a.target,d=f.nodeName(c,"input")||f.nodeName(c,"button")?c.form:b;d&&!d._submit_attached&&(f.event.add(d,"submit._submit",function(a){this.parentNode&&!a.isTrigger&&f.event.simulate("submit",this.parentNode,a,!0)}),d._submit_attached=!0)})},teardown:function(){if(f.nodeName(this,"form"))return!1;f.event.remove(this,"._submit")}}),f.support.changeBubbles||(f.event.special.change={setup:function(){if(z.test(this.nodeName)){if(this.type==="checkbox"||this.type==="radio")f.event.add(this,"propertychange._change",function(a){a.originalEvent.propertyName==="checked"&&(this._just_changed=!0)}),f.event.add(this,"click._change",function(a){this._just_changed&&!a.isTrigger&&(this._just_changed=!1,f.event.simulate("change",this,a,!0))});return!1}f.event.add(this,"beforeactivate._change",function(a){var b=a.target;z.test(b.nodeName)&&!b._change_attached&&(f.event.add(b,"change._change",function(a){this.parentNode&&!a.isSimulated&&!a.isTrigger&&f.event.simulate("change",this.parentNode,a,!0)}),b._change_attached=!0)})},handle:function(a){var b=a.target;if(this!==b||a.isSimulated||a.isTrigger||b.type!=="radio"&&b.type!=="checkbox")return a.handleObj.handler.apply(this,arguments)},teardown:function(){f.event.remove(this,"._change");return z.test(this.nodeName)}}),f.support.focusinBubbles||f.each({focus:"focusin",blur:"focusout"},function(a,b){var d=0,e=function(a){f.event.simulate(b,a.target,f.event.fix(a),!0)};f.event.special[b]={setup:function(){d++===0&&c.addEventListener(a,e,!0)},teardown:function(){--d===0&&c.removeEventListener(a,e,!0)}}}),f.fn.extend({on:function(a,c,d,e,g){var h,i;if(typeof a=="object"){typeof c!="string"&&(d=c,c=b);for(i in a)this.on(i,c,d,a[i],g);return this}d==null&&e==null?(e=c,d=c=b):e==null&&(typeof c=="string"?(e=d,d=b):(e=d,d=c,c=b));if(e===!1)e=J;else if(!e)return this;g===1&&(h=e,e=function(a){f().off(a);return h.apply(this,arguments)},e.guid=h.guid||(h.guid=f.guid++));return this.each(function(){f.event.add(this,a,e,d,c)})},one:function(a,b,c,d){return this.on.call(this,a,b,c,d,1)},off:function(a,c,d){if(a&&a.preventDefault&&a.handleObj){var e=a.handleObj;f(a.delegateTarget).off(e.namespace?e.type+"."+e.namespace:e.type,e.selector,e.handler);return this}if(typeof a=="object"){for(var g in a)this.off(g,c,a[g]);return this}if(c===!1||typeof c=="function")d=c,c=b;d===!1&&(d=J);return this.each(function(){f.event.remove(this,a,d,c)})},bind:function(a,b,c){return this.on(a,null,b,c)},unbind:function(a,b){return this.off(a,null,b)},live:function(a,b,c){f(this.context).on(a,this.selector,b,c);return this},die:function(a,b){f(this.context).off(a,this.selector||"**",b);return this},delegate:function(a,b,c,d){return this.on(b,a,c,d)},undelegate:function(a,b,c){return arguments.length==1?this.off(a,"**"):this.off(b,a,c)},trigger:function(a,b){return this.each(function(){f.event.trigger(a,b,this)})},triggerHandler:function(a,b){if(this[0])return f.event.trigger(a,b,this[0],!0)},toggle:function(a){var b=arguments,c=a.guid||f.guid++,d=0,e=function(c){var e=(f._data(this,"lastToggle"+a.guid)||0)%d;f._data(this,"lastToggle"+a.guid,e+1),c.preventDefault();return b[e].apply(this,arguments)||!1};e.guid=c;while(d<b.length)b[d++].guid=c;return this.click(e)},hover:function(a,b){return this.mouseenter(a).mouseleave(b||a)}}),f.each("blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error contextmenu".split(" "),function(a,b){f.fn[b]=function(a,c){c==null&&(c=a,a=null);return arguments.length>0?this.on(b,null,a,c):this.trigger(b)},f.attrFn&&(f.attrFn[b]=!0),C.test(b)&&(f.event.fixHooks[b]=f.event.keyHooks),D.test(b)&&(f.event.fixHooks[b]=f.event.mouseHooks)}),function(){function x(a,b,c,e,f,g){for(var h=0,i=e.length;h<i;h++){var j=e[h];if(j){var k=!1;j=j[a];while(j){if(j[d]===c){k=e[j.sizset];break}if(j.nodeType===1){g||(j[d]=c,j.sizset=h);if(typeof b!="string"){if(j===b){k=!0;break}}else if(m.filter(b,[j]).length>0){k=j;break}}j=j[a]}e[h]=k}}}function w(a,b,c,e,f,g){for(var h=0,i=e.length;h<i;h++){var j=e[h];if(j){var k=!1;j=j[a];while(j){if(j[d]===c){k=e[j.sizset];break}j.nodeType===1&&!g&&(j[d]=c,j.sizset=h);if(j.nodeName.toLowerCase()===b){k=j;break}j=j[a]}e[h]=k}}}var a=/((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^\[\]]*\]|['"][^'"]*['"]|[^\[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,d="sizcache"+(Math.random()+"").replace(".",""),e=0,g=Object.prototype.toString,h=!1,i=!0,j=/\\/g,k=/\r\n/g,l=/\W/;[0,0].sort(function(){i=!1;return 0});var m=function(b,d,e,f){e=e||[],d=d||c;var h=d;if(d.nodeType!==1&&d.nodeType!==9)return[];if(!b||typeof b!="string")return e;var i,j,k,l,n,q,r,t,u=!0,v=m.isXML(d),w=[],x=b;do{a.exec(""),i=a.exec(x);if(i){x=i[3],w.push(i[1]);if(i[2]){l=i[3];break}}}while(i);if(w.length>1&&p.exec(b))if(w.length===2&&o.relative[w[0]])j=y(w[0]+w[1],d,f);else{j=o.relative[w[0]]?[d]:m(w.shift(),d);while(w.length)b=w.shift(),o.relative[b]&&(b+=w.shift()),j=y(b,j,f)}else{!f&&w.length>1&&d.nodeType===9&&!v&&o.match.ID.test(w[0])&&!o.match.ID.test(w[w.length-1])&&(n=m.find(w.shift(),d,v),d=n.expr?m.filter(n.expr,n.set)[0]:n.set[0]);if(d){n=f?{expr:w.pop(),set:s(f)}:m.find(w.pop(),w.length===1&&(w[0]==="~"||w[0]==="+")&&d.parentNode?d.parentNode:d,v),j=n.expr?m.filter(n.expr,n.set):n.set,w.length>0?k=s(j):u=!1;while(w.length)q=w.pop(),r=q,o.relative[q]?r=w.pop():q="",r==null&&(r=d),o.relative[q](k,r,v)}else k=w=[]}k||(k=j),k||m.error(q||b);if(g.call(k)==="[object Array]")if(!u)e.push.apply(e,k);else if(d&&d.nodeType===1)for(t=0;k[t]!=null;t++)k[t]&&(k[t]===!0||k[t].nodeType===1&&m.contains(d,k[t]))&&e.push(j[t]);else for(t=0;k[t]!=null;t++)k[t]&&k[t].nodeType===1&&e.push(j[t]);else s(k,e);l&&(m(l,h,e,f),m.uniqueSort(e));return e};m.uniqueSort=function(a){if(u){h=i,a.sort(u);if(h)for(var b=1;b<a.length;b++)a[b]===a[b-1]&&a.splice(b--,1)}return a},m.matches=function(a,b){return m(a,null,null,b)},m.matchesSelector=function(a,b){return m(b,null,null,[a]).length>0},m.find=function(a,b,c){var d,e,f,g,h,i;if(!a)return[];for(e=0,f=o.order.length;e<f;e++){h=o.order[e];if(g=o.leftMatch[h].exec(a)){i=g[1],g.splice(1,1);if(i.substr(i.length-1)!=="\\"){g[1]=(g[1]||"").replace(j,""),d=o.find[h](g,b,c);if(d!=null){a=a.replace(o.match[h],"");break}}}}d||(d=typeof b.getElementsByTagName!="undefined"?b.getElementsByTagName("*"):[]);return{set:d,expr:a}},m.filter=function(a,c,d,e){var f,g,h,i,j,k,l,n,p,q=a,r=[],s=c,t=c&&c[0]&&m.isXML(c[0]);while(a&&c.length){for(h in o.filter)if((f=o.leftMatch[h].exec(a))!=null&&f[2]){k=o.filter[h],l=f[1],g=!1,f.splice(1,1);if(l.substr(l.length-1)==="\\")continue;s===r&&(r=[]);if(o.preFilter[h]){f=o.preFilter[h](f,s,d,r,e,t);if(!f)g=i=!0;else if(f===!0)continue}if(f)for(n=0;(j=s[n])!=null;n++)j&&(i=k(j,f,n,s),p=e^i,d&&i!=null?p?g=!0:s[n]=!1:p&&(r.push(j),g=!0));if(i!==b){d||(s=r),a=a.replace(o.match[h],"");if(!g)return[];break}}if(a===q)if(g==null)m.error(a);else break;q=a}return s},m.error=function(a){throw new Error("Syntax error, unrecognized expression: "+a)};var n=m.getText=function(a){var b,c,d=a.nodeType,e="";if(d){if(d===1||d===9){if(typeof a.textContent=="string")return a.textContent;if(typeof a.innerText=="string")return a.innerText.replace(k,"");for(a=a.firstChild;a;a=a.nextSibling)e+=n(a)}else if(d===3||d===4)return a.nodeValue}else for(b=0;c=a[b];b++)c.nodeType!==8&&(e+=n(c));return e},o=m.selectors={order:["ID","NAME","TAG"],match:{ID:/#((?:[\w\u00c0-\uFFFF\-]|\\.)+)/,CLASS:/\.((?:[\w\u00c0-\uFFFF\-]|\\.)+)/,NAME:/\[name=['"]*((?:[\w\u00c0-\uFFFF\-]|\\.)+)['"]*\]/,ATTR:/\[\s*((?:[\w\u00c0-\uFFFF\-]|\\.)+)\s*(?:(\S?=)\s*(?:(['"])(.*?)\3|(#?(?:[\w\u00c0-\uFFFF\-]|\\.)*)|)|)\s*\]/,TAG:/^((?:[\w\u00c0-\uFFFF\*\-]|\\.)+)/,CHILD:/:(only|nth|last|first)-child(?:\(\s*(even|odd|(?:[+\-]?\d+|(?:[+\-]?\d*)?n\s*(?:[+\-]\s*\d+)?))\s*\))?/,POS:/:(nth|eq|gt|lt|first|last|even|odd)(?:\((\d*)\))?(?=[^\-]|$)/,PSEUDO:/:((?:[\w\u00c0-\uFFFF\-]|\\.)+)(?:\((['"]?)((?:\([^\)]+\)|[^\(\)]*)+)\2\))?/},leftMatch:{},attrMap:{"class":"className","for":"htmlFor"},attrHandle:{href:function(a){return a.getAttribute("href")},type:function(a){return a.getAttribute("type")}},relative:{"+":function(a,b){var c=typeof b=="string",d=c&&!l.test(b),e=c&&!d;d&&(b=b.toLowerCase());for(var f=0,g=a.length,h;f<g;f++)if(h=a[f]){while((h=h.previousSibling)&&h.nodeType!==1);a[f]=e||h&&h.nodeName.toLowerCase()===b?h||!1:h===b}e&&m.filter(b,a,!0)},">":function(a,b){var c,d=typeof b=="string",e=0,f=a.length;if(d&&!l.test(b)){b=b.toLowerCase();for(;e<f;e++){c=a[e];if(c){var g=c.parentNode;a[e]=g.nodeName.toLowerCase()===b?g:!1}}}else{for(;e<f;e++)c=a[e],c&&(a[e]=d?c.parentNode:c.parentNode===b);d&&m.filter(b,a,!0)}},"":function(a,b,c){var d,f=e++,g=x;typeof b=="string"&&!l.test(b)&&(b=b.toLowerCase(),d=b,g=w),g("parentNode",b,f,a,d,c)},"~":function(a,b,c){var d,f=e++,g=x;typeof b=="string"&&!l.test(b)&&(b=b.toLowerCase(),d=b,g=w),g("previousSibling",b,f,a,d,c)}},find:{ID:function(a,b,c){if(typeof b.getElementById!="undefined"&&!c){var d=b.getElementById(a[1]);return d&&d.parentNode?[d]:[]}},NAME:function(a,b){if(typeof b.getElementsByName!="undefined"){var c=[],d=b.getElementsByName(a[1]);for(var e=0,f=d.length;e<f;e++)d[e].getAttribute("name")===a[1]&&c.push(d[e]);return c.length===0?null:c}},TAG:function(a,b){if(typeof b.getElementsByTagName!="undefined")return b.getElementsByTagName(a[1])}},preFilter:{CLASS:function(a,b,c,d,e,f){a=" "+a[1].replace(j,"")+" ";if(f)return a;for(var g=0,h;(h=b[g])!=null;g++)h&&(e^(h.className&&(" "+h.className+" ").replace(/[\t\n\r]/g," ").indexOf(a)>=0)?c||d.push(h):c&&(b[g]=!1));return!1},ID:function(a){return a[1].replace(j,"")},TAG:function(a,b){return a[1].replace(j,"").toLowerCase()},CHILD:function(a){if(a[1]==="nth"){a[2]||m.error(a[0]),a[2]=a[2].replace(/^\+|\s*/g,"");var b=/(-?)(\d*)(?:n([+\-]?\d*))?/.exec(a[2]==="even"&&"2n"||a[2]==="odd"&&"2n+1"||!/\D/.test(a[2])&&"0n+"+a[2]||a[2]);a[2]=b[1]+(b[2]||1)-0,a[3]=b[3]-0}else a[2]&&m.error(a[0]);a[0]=e++;return a},ATTR:function(a,b,c,d,e,f){var g=a[1]=a[1].replace(j,"");!f&&o.attrMap[g]&&(a[1]=o.attrMap[g]),a[4]=(a[4]||a[5]||"").replace(j,""),a[2]==="~="&&(a[4]=" "+a[4]+" ");return a},PSEUDO:function(b,c,d,e,f){if(b[1]==="not")if((a.exec(b[3])||"").length>1||/^\w/.test(b[3]))b[3]=m(b[3],null,null,c);else{var g=m.filter(b[3],c,d,!0^f);d||e.push.apply(e,g);return!1}else if(o.match.POS.test(b[0])||o.match.CHILD.test(b[0]))return!0;return b},POS:function(a){a.unshift(!0);return a}},filters:{enabled:function(a){return a.disabled===!1&&a.type!=="hidden"},disabled:function(a){return a.disabled===!0},checked:function(a){return a.checked===!0},selected:function(a){a.parentNode&&a.parentNode.selectedIndex;return a.selected===!0},parent:function(a){return!!a.firstChild},empty:function(a){return!a.firstChild},has:function(a,b,c){return!!m(c[3],a).length},header:function(a){return/h\d/i.test(a.nodeName)},text:function(a){var b=a.getAttribute("type"),c=a.type;return a.nodeName.toLowerCase()==="input"&&"text"===c&&(b===c||b===null)},radio:function(a){return a.nodeName.toLowerCase()==="input"&&"radio"===a.type},checkbox:function(a){return a.nodeName.toLowerCase()==="input"&&"checkbox"===a.type},file:function(a){return a.nodeName.toLowerCase()==="input"&&"file"===a.type},password:function(a){return a.nodeName.toLowerCase()==="input"&&"password"===a.type},submit:function(a){var b=a.nodeName.toLowerCase();return(b==="input"||b==="button")&&"submit"===a.type},image:function(a){return a.nodeName.toLowerCase()==="input"&&"image"===a.type},reset:function(a){var b=a.nodeName.toLowerCase();return(b==="input"||b==="button")&&"reset"===a.type},button:function(a){var b=a.nodeName.toLowerCase();return b==="input"&&"button"===a.type||b==="button"},input:function(a){return/input|select|textarea|button/i.test(a.nodeName)},focus:function(a){return a===a.ownerDocument.activeElement}},setFilters:{first:function(a,b){return b===0},last:function(a,b,c,d){return b===d.length-1},even:function(a,b){return b%2===0},odd:function(a,b){return b%2===1},lt:function(a,b,c){return b<c[3]-0},gt:function(a,b,c){return b>c[3]-0},nth:function(a,b,c){return c[3]-0===b},eq:function(a,b,c){return c[3]-0===b}},filter:{PSEUDO:function(a,b,c,d){var e=b[1],f=o.filters[e];if(f)return f(a,c,b,d);if(e==="contains")return(a.textContent||a.innerText||n([a])||"").indexOf(b[3])>=0;if(e==="not"){var g=b[3];for(var h=0,i=g.length;h<i;h++)if(g[h]===a)return!1;return!0}m.error(e)},CHILD:function(a,b){var c,e,f,g,h,i,j,k=b[1],l=a;switch(k){case"only":case"first":while(l=l.previousSibling)if(l.nodeType===1)return!1;if(k==="first")return!0;l=a;case"last":while(l=l.nextSibling)if(l.nodeType===1)return!1;return!0;case"nth":c=b[2],e=b[3];if(c===1&&e===0)return!0;f=b[0],g=a.parentNode;if(g&&(g[d]!==f||!a.nodeIndex)){i=0;for(l=g.firstChild;l;l=l.nextSibling)l.nodeType===1&&(l.nodeIndex=++i);g[d]=f}j=a.nodeIndex-e;return c===0?j===0:j%c===0&&j/c>=0}},ID:function(a,b){return a.nodeType===1&&a.getAttribute("id")===b},TAG:function(a,b){return b==="*"&&a.nodeType===1||!!a.nodeName&&a.nodeName.toLowerCase()===b},CLASS:function(a,b){return(" "+(a.className||a.getAttribute("class"))+" ").indexOf(b)>-1},ATTR:function(a,b){var c=b[1],d=m.attr?m.attr(a,c):o.attrHandle[c]?o.attrHandle[c](a):a[c]!=null?a[c]:a.getAttribute(c),e=d+"",f=b[2],g=b[4];return d==null?f==="!=":!f&&m.attr?d!=null:f==="="?e===g:f==="*="?e.indexOf(g)>=0:f==="~="?(" "+e+" ").indexOf(g)>=0:g?f==="!="?e!==g:f==="^="?e.indexOf(g)===0:f==="$="?e.substr(e.length-g.length)===g:f==="|="?e===g||e.substr(0,g.length+1)===g+"-":!1:e&&d!==!1},POS:function(a,b,c,d){var e=b[2],f=o.setFilters[e];if(f)return f(a,c,b,d)}}},p=o.match.POS,q=function(a,b){return"\\"+(b-0+1)};for(var r in o.match)o.match[r]=new RegExp(o.match[r].source+/(?![^\[]*\])(?![^\(]*\))/.source),o.leftMatch[r]=new RegExp(/(^(?:.|\r|\n)*?)/.source+o.match[r].source.replace(/\\(\d+)/g,q));var s=function(a,b){a=Array.prototype.slice.call(a,0);if(b){b.push.apply(b,a);return b}return a};try{Array.prototype.slice.call(c.documentElement.childNodes,0)[0].nodeType}catch(t){s=function(a,b){var c=0,d=b||[];if(g.call(a)==="[object Array]")Array.prototype.push.apply(d,a);else if(typeof a.length=="number")for(var e=a.length;c<e;c++)d.push(a[c]);else for(;a[c];c++)d.push(a[c]);return d}}var u,v;c.documentElement.compareDocumentPosition?u=function(a,b){if(a===b){h=!0;return 0}if(!a.compareDocumentPosition||!b.compareDocumentPosition)return a.compareDocumentPosition?-1:1;return a.compareDocumentPosition(b)&4?-1:1}:(u=function(a,b){if(a===b){h=!0;return 0}if(a.sourceIndex&&b.sourceIndex)return a.sourceIndex-b.sourceIndex;var c,d,e=[],f=[],g=a.parentNode,i=b.parentNode,j=g;if(g===i)return v(a,b);if(!g)return-1;if(!i)return 1;while(j)e.unshift(j),j=j.parentNode;j=i;while(j)f.unshift(j),j=j.parentNode;c=e.length,d=f.length;for(var k=0;k<c&&k<d;k++)if(e[k]!==f[k])return v(e[k],f[k]);return k===c?v(a,f[k],-1):v(e[k],b,1)},v=function(a,b,c){if(a===b)return c;var d=a.nextSibling;while(d){if(d===b)return-1;d=d.nextSibling}return 1}),function(){var a=c.createElement("div"),d="script"+(new Date).getTime(),e=c.documentElement;a.innerHTML="<a name='"+d+"'/>",e.insertBefore(a,e.firstChild),c.getElementById(d)&&(o.find.ID=function(a,c,d){if(typeof c.getElementById!="undefined"&&!d){var e=c.getElementById(a[1]);return e?e.id===a[1]||typeof e.getAttributeNode!="undefined"&&e.getAttributeNode("id").nodeValue===a[1]?[e]:b:[]}},o.filter.ID=function(a,b){var c=typeof a.getAttributeNode!="undefined"&&a.getAttributeNode("id");return a.nodeType===1&&c&&c.nodeValue===b}),e.removeChild(a),e=a=null}(),function(){var a=c.createElement("div");a.appendChild(c.createComment("")),a.getElementsByTagName("*").length>0&&(o.find.TAG=function(a,b){var c=b.getElementsByTagName(a[1]);if(a[1]==="*"){var d=[];for(var e=0;c[e];e++)c[e].nodeType===1&&d.push(c[e]);c=d}return c}),a.innerHTML="<a href='#'></a>",a.firstChild&&typeof a.firstChild.getAttribute!="undefined"&&a.firstChild.getAttribute("href")!=="#"&&(o.attrHandle.href=function(a){return a.getAttribute("href",2)}),a=null}(),c.querySelectorAll&&function(){var a=m,b=c.createElement("div"),d="__sizzle__";b.innerHTML="<p class='TEST'></p>";if(!b.querySelectorAll||b.querySelectorAll(".TEST").length!==0){m=function(b,e,f,g){e=e||c;if(!g&&!m.isXML(e)){var h=/^(\w+$)|^\.([\w\-]+$)|^#([\w\-]+$)/.exec(b);if(h&&(e.nodeType===1||e.nodeType===9)){if(h[1])return s(e.getElementsByTagName(b),f);if(h[2]&&o.find.CLASS&&e.getElementsByClassName)return s(e.getElementsByClassName(h[2]),f)}if(e.nodeType===9){if(b==="body"&&e.body)return s([e.body],f);if(h&&h[3]){var i=e.getElementById(h[3]);if(!i||!i.parentNode)return s([],f);if(i.id===h[3])return s([i],f)}try{return s(e.querySelectorAll(b),f)}catch(j){}}else if(e.nodeType===1&&e.nodeName.toLowerCase()!=="object"){var k=e,l=e.getAttribute("id"),n=l||d,p=e.parentNode,q=/^\s*[+~]/.test(b);l?n=n.replace(/'/g,"\\$&"):e.setAttribute("id",n),q&&p&&(e=e.parentNode);try{if(!q||p)return s(e.querySelectorAll("[id='"+n+"'] "+b),f)}catch(r){}finally{l||k.removeAttribute("id")}}}return a(b,e,f,g)};for(var e in a)m[e]=a[e];b=null}}(),function(){var a=c.documentElement,b=a.matchesSelector||a.mozMatchesSelector||a.webkitMatchesSelector||a.msMatchesSelector;if(b){var d=!b.call(c.createElement("div"),"div"),e=!1;try{b.call(c.documentElement,"[test!='']:sizzle")}catch(f){e=!0}m.matchesSelector=function(a,c){c=c.replace(/\=\s*([^'"\]]*)\s*\]/g,"='$1']");if(!m.isXML(a))try{if(e||!o.match.PSEUDO.test(c)&&!/!=/.test(c)){var f=b.call(a,c);if(f||!d||a.document&&a.document.nodeType!==11)return f}}catch(g){}return m(c,null,null,[a]).length>0}}}(),function(){var a=c.createElement("div");a.innerHTML="<div class='test e'></div><div class='test'></div>";if(!!a.getElementsByClassName&&a.getElementsByClassName("e").length!==0){a.lastChild.className="e";if(a.getElementsByClassName("e").length===1)return;o.order.splice(1,0,"CLASS"),o.find.CLASS=function(a,b,c){if(typeof b.getElementsByClassName!="undefined"&&!c)return b.getElementsByClassName(a[1])},a=null}}(),c.documentElement.contains?m.contains=function(a,b){return a!==b&&(a.contains?a.contains(b):!0)}:c.documentElement.compareDocumentPosition?m.contains=function(a,b){return!!(a.compareDocumentPosition(b)&16)}:m.contains=function(){return!1},m.isXML=function(a){var b=(a?a.ownerDocument||a:0).documentElement;return b?b.nodeName!=="HTML":!1};var y=function(a,b,c){var d,e=[],f="",g=b.nodeType?[b]:b;while(d=o.match.PSEUDO.exec(a))f+=d[0],a=a.replace(o.match.PSEUDO,"");a=o.relative[a]?a+"*":a;for(var h=0,i=g.length;h<i;h++)m(a,g[h],e,c);return m.filter(f,e)};m.attr=f.attr,m.selectors.attrMap={},f.find=m,f.expr=m.selectors,f.expr[":"]=f.expr.filters,f.unique=m.uniqueSort,f.text=m.getText,f.isXMLDoc=m.isXML,f.contains=m.contains}();var L=/Until$/,M=/^(?:parents|prevUntil|prevAll)/,N=/,/,O=/^.[^:#\[\.,]*$/,P=Array.prototype.slice,Q=f.expr.match.POS,R={children:!0,contents:!0,next:!0,prev:!0};f.fn.extend({find:function(a){var b=this,c,d;if(typeof a!="string")return f(a).filter(function(){for(c=0,d=b.length;c<d;c++)if(f.contains(b[c],this))return!0});var e=this.pushStack("","find",a),g,h,i;for(c=0,d=this.length;c<d;c++){g=e.length,f.find(a,this[c],e);if(c>0)for(h=g;h<e.length;h++)for(i=0;i<g;i++)if(e[i]===e[h]){e.splice(h--,1);break}}return e},has:function(a){var b=f(a);return this.filter(function(){for(var a=0,c=b.length;a<c;a++)if(f.contains(this,b[a]))return!0})},not:function(a){return this.pushStack(T(this,a,!1),"not",a)},filter:function(a){return this.pushStack(T(this,a,!0),"filter",a)},is:function(a){return!!a&&(typeof a=="string"?Q.test(a)?f(a,this.context).index(this[0])>=0:f.filter(a,this).length>0:this.filter(a).length>0)},closest:function(a,b){var c=[],d,e,g=this[0];if(f.isArray(a)){var h=1;while(g&&g.ownerDocument&&g!==b){for(d=0;d<a.length;d++)f(g).is(a[d])&&c.push({selector:a[d],elem:g,level:h});g=g.parentNode,h++}return c}var i=Q.test(a)||typeof a!="string"?f(a,b||this.context):0;for(d=0,e=this.length;d<e;d++){g=this[d];while(g){if(i?i.index(g)>-1:f.find.matchesSelector(g,a)){c.push(g);break}g=g.parentNode;if(!g||!g.ownerDocument||g===b||g.nodeType===11)break}}c=c.length>1?f.unique(c):c;return this.pushStack(c,"closest",a)},index:function(a){if(!a)return this[0]&&this[0].parentNode?this.prevAll().length:-1;if(typeof a=="string")return f.inArray(this[0],f(a));return f.inArray(a.jquery?a[0]:a,this)},add:function(a,b){var c=typeof a=="string"?f(a,b):f.makeArray(a&&a.nodeType?[a]:a),d=f.merge(this.get(),c);return this.pushStack(S(c[0])||S(d[0])?d:f.unique(d))},andSelf:function(){return this.add(this.prevObject)}}),f.each({parent:function(a){var b=a.parentNode;return b&&b.nodeType!==11?b:null},parents:function(a){return f.dir(a,"parentNode")},parentsUntil:function(a,b,c){return f.dir(a,"parentNode",c)},next:function(a){return f.nth(a,2,"nextSibling")},prev:function(a){return f.nth(a,2,"previousSibling")},nextAll:function(a){return f.dir(a,"nextSibling")},prevAll:function(a){return f.dir(a,"previousSibling")},nextUntil:function(a,b,c){return f.dir(a,"nextSibling",c)},prevUntil:function(a,b,c){return f.dir(a,"previousSibling",c)},siblings:function(a){return f.sibling(a.parentNode.firstChild,a)},children:function(a){return f.sibling(a.firstChild)},contents:function(a){return f.nodeName(a,"iframe")?a.contentDocument||a.contentWindow.document:f.makeArray(a.childNodes)}},function(a,b){f.fn[a]=function(c,d){var e=f.map(this,b,c);L.test(a)||(d=c),d&&typeof d=="string"&&(e=f.filter(d,e)),e=this.length>1&&!R[a]?f.unique(e):e,(this.length>1||N.test(d))&&M.test(a)&&(e=e.reverse());return this.pushStack(e,a,P.call(arguments).join(","))}}),f.extend({filter:function(a,b,c){c&&(a=":not("+a+")");return b.length===1?f.find.matchesSelector(b[0],a)?[b[0]]:[]:f.find.matches(a,b)},dir:function(a,c,d){var e=[],g=a[c];while(g&&g.nodeType!==9&&(d===b||g.nodeType!==1||!f(g).is(d)))g.nodeType===1&&e.push(g),g=g[c];return e},nth:function(a,b,c,d){b=b||1;var e=0;for(;a;a=a[c])if(a.nodeType===1&&++e===b)break;return a},sibling:function(a,b){var c=[];for(;a;a=a.nextSibling)a.nodeType===1&&a!==b&&c.push(a);return c}});var V="abbr|article|aside|audio|canvas|datalist|details|figcaption|figure|footer|header|hgroup|mark|meter|nav|output|progress|section|summary|time|video",W=/ jQuery\d+="(?:\d+|null)"/g,X=/^\s+/,Y=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/ig,Z=/<([\w:]+)/,$=/<tbody/i,_=/<|&#?\w+;/,ba=/<(?:script|style)/i,bb=/<(?:script|object|embed|option|style)/i,bc=new RegExp("<(?:"+V+")","i"),bd=/checked\s*(?:[^=]|=\s*.checked.)/i,be=/\/(java|ecma)script/i,bf=/^\s*<!(?:\[CDATA\[|\-\-)/,bg={option:[1,"<select multiple='multiple'>","</select>"],legend:[1,"<fieldset>","</fieldset>"],thead:[1,"<table>","</table>"],tr:[2,"<table><tbody>","</tbody></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],col:[2,"<table><tbody></tbody><colgroup>","</colgroup></table>"],area:[1,"<map>","</map>"],_default:[0,"",""]},bh=U(c);bg.optgroup=bg.option,bg.tbody=bg.tfoot=bg.colgroup=bg.caption=bg.thead,bg.th=bg.td,f.support.htmlSerialize||(bg._default=[1,"div<div>","</div>"]),f.fn.extend({text:function(a){if(f.isFunction(a))return this.each(function(b){var c=f(this);c.text(a.call(this,b,c.text()))});if(typeof a!="object"&&a!==b)return this.empty().append((this[0]&&this[0].ownerDocument||c).createTextNode(a));return f.text(this)},wrapAll:function(a){if(f.isFunction(a))return this.each(function(b){f(this).wrapAll(a.call(this,b))});if(this[0]){var b=f(a,this[0].ownerDocument).eq(0).clone(!0);this[0].parentNode&&b.insertBefore(this[0]),b.map(function(){var a=this;while(a.firstChild&&a.firstChild.nodeType===1)a=a.firstChild;return a}).append(this)}return this},wrapInner:function(a){if(f.isFunction(a))return this.each(function(b){f(this).wrapInner(a.call(this,b))});return this.each(function(){var b=f(this),c=b.contents();c.length?c.wrapAll(a):b.append(a)})},wrap:function(a){var b=f.isFunction(a);return this.each(function(c){f(this).wrapAll(b?a.call(this,c):a)})},unwrap:function(){return this.parent().each(function(){f.nodeName(this,"body")||f(this).replaceWith(this.childNodes)}).end()},append:function(){return this.domManip(arguments,!0,function(a){this.nodeType===1&&this.appendChild(a)})},prepend:function(){return this.domManip(arguments,!0,function(a){this.nodeType===1&&this.insertBefore(a,this.firstChild)})},before:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this)});if(arguments.length){var a=f.clean(arguments);a.push.apply(a,this.toArray());return this.pushStack(a,"before",arguments)}},after:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this.nextSibling)});if(arguments.length){var a=this.pushStack(this,"after",arguments);a.push.apply(a,f.clean(arguments));return a}},remove:function(a,b){for(var c=0,d;(d=this[c])!=null;c++)if(!a||f.filter(a,[d]).length)!b&&d.nodeType===1&&(f.cleanData(d.getElementsByTagName("*")),f.cleanData([d])),d.parentNode&&d.parentNode.removeChild(d);return this},empty:function()
+{for(var a=0,b;(b=this[a])!=null;a++){b.nodeType===1&&f.cleanData(b.getElementsByTagName("*"));while(b.firstChild)b.removeChild(b.firstChild)}return this},clone:function(a,b){a=a==null?!1:a,b=b==null?a:b;return this.map(function(){return f.clone(this,a,b)})},html:function(a){if(a===b)return this[0]&&this[0].nodeType===1?this[0].innerHTML.replace(W,""):null;if(typeof a=="string"&&!ba.test(a)&&(f.support.leadingWhitespace||!X.test(a))&&!bg[(Z.exec(a)||["",""])[1].toLowerCase()]){a=a.replace(Y,"<$1></$2>");try{for(var c=0,d=this.length;c<d;c++)this[c].nodeType===1&&(f.cleanData(this[c].getElementsByTagName("*")),this[c].innerHTML=a)}catch(e){this.empty().append(a)}}else f.isFunction(a)?this.each(function(b){var c=f(this);c.html(a.call(this,b,c.html()))}):this.empty().append(a);return this},replaceWith:function(a){if(this[0]&&this[0].parentNode){if(f.isFunction(a))return this.each(function(b){var c=f(this),d=c.html();c.replaceWith(a.call(this,b,d))});typeof a!="string"&&(a=f(a).detach());return this.each(function(){var b=this.nextSibling,c=this.parentNode;f(this).remove(),b?f(b).before(a):f(c).append(a)})}return this.length?this.pushStack(f(f.isFunction(a)?a():a),"replaceWith",a):this},detach:function(a){return this.remove(a,!0)},domManip:function(a,c,d){var e,g,h,i,j=a[0],k=[];if(!f.support.checkClone&&arguments.length===3&&typeof j=="string"&&bd.test(j))return this.each(function(){f(this).domManip(a,c,d,!0)});if(f.isFunction(j))return this.each(function(e){var g=f(this);a[0]=j.call(this,e,c?g.html():b),g.domManip(a,c,d)});if(this[0]){i=j&&j.parentNode,f.support.parentNode&&i&&i.nodeType===11&&i.childNodes.length===this.length?e={fragment:i}:e=f.buildFragment(a,this,k),h=e.fragment,h.childNodes.length===1?g=h=h.firstChild:g=h.firstChild;if(g){c=c&&f.nodeName(g,"tr");for(var l=0,m=this.length,n=m-1;l<m;l++)d.call(c?bi(this[l],g):this[l],e.cacheable||m>1&&l<n?f.clone(h,!0,!0):h)}k.length&&f.each(k,bp)}return this}}),f.buildFragment=function(a,b,d){var e,g,h,i,j=a[0];b&&b[0]&&(i=b[0].ownerDocument||b[0]),i.createDocumentFragment||(i=c),a.length===1&&typeof j=="string"&&j.length<512&&i===c&&j.charAt(0)==="<"&&!bb.test(j)&&(f.support.checkClone||!bd.test(j))&&(f.support.html5Clone||!bc.test(j))&&(g=!0,h=f.fragments[j],h&&h!==1&&(e=h)),e||(e=i.createDocumentFragment(),f.clean(a,i,e,d)),g&&(f.fragments[j]=h?e:1);return{fragment:e,cacheable:g}},f.fragments={},f.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){f.fn[a]=function(c){var d=[],e=f(c),g=this.length===1&&this[0].parentNode;if(g&&g.nodeType===11&&g.childNodes.length===1&&e.length===1){e[b](this[0]);return this}for(var h=0,i=e.length;h<i;h++){var j=(h>0?this.clone(!0):this).get();f(e[h])[b](j),d=d.concat(j)}return this.pushStack(d,a,e.selector)}}),f.extend({clone:function(a,b,c){var d,e,g,h=f.support.html5Clone||!bc.test("<"+a.nodeName)?a.cloneNode(!0):bo(a);if((!f.support.noCloneEvent||!f.support.noCloneChecked)&&(a.nodeType===1||a.nodeType===11)&&!f.isXMLDoc(a)){bk(a,h),d=bl(a),e=bl(h);for(g=0;d[g];++g)e[g]&&bk(d[g],e[g])}if(b){bj(a,h);if(c){d=bl(a),e=bl(h);for(g=0;d[g];++g)bj(d[g],e[g])}}d=e=null;return h},clean:function(a,b,d,e){var g;b=b||c,typeof b.createElement=="undefined"&&(b=b.ownerDocument||b[0]&&b[0].ownerDocument||c);var h=[],i;for(var j=0,k;(k=a[j])!=null;j++){typeof k=="number"&&(k+="");if(!k)continue;if(typeof k=="string")if(!_.test(k))k=b.createTextNode(k);else{k=k.replace(Y,"<$1></$2>");var l=(Z.exec(k)||["",""])[1].toLowerCase(),m=bg[l]||bg._default,n=m[0],o=b.createElement("div");b===c?bh.appendChild(o):U(b).appendChild(o),o.innerHTML=m[1]+k+m[2];while(n--)o=o.lastChild;if(!f.support.tbody){var p=$.test(k),q=l==="table"&&!p?o.firstChild&&o.firstChild.childNodes:m[1]==="<table>"&&!p?o.childNodes:[];for(i=q.length-1;i>=0;--i)f.nodeName(q[i],"tbody")&&!q[i].childNodes.length&&q[i].parentNode.removeChild(q[i])}!f.support.leadingWhitespace&&X.test(k)&&o.insertBefore(b.createTextNode(X.exec(k)[0]),o.firstChild),k=o.childNodes}var r;if(!f.support.appendChecked)if(k[0]&&typeof (r=k.length)=="number")for(i=0;i<r;i++)bn(k[i]);else bn(k);k.nodeType?h.push(k):h=f.merge(h,k)}if(d){g=function(a){return!a.type||be.test(a.type)};for(j=0;h[j];j++)if(e&&f.nodeName(h[j],"script")&&(!h[j].type||h[j].type.toLowerCase()==="text/javascript"))e.push(h[j].parentNode?h[j].parentNode.removeChild(h[j]):h[j]);else{if(h[j].nodeType===1){var s=f.grep(h[j].getElementsByTagName("script"),g);h.splice.apply(h,[j+1,0].concat(s))}d.appendChild(h[j])}}return h},cleanData:function(a){var b,c,d=f.cache,e=f.event.special,g=f.support.deleteExpando;for(var h=0,i;(i=a[h])!=null;h++){if(i.nodeName&&f.noData[i.nodeName.toLowerCase()])continue;c=i[f.expando];if(c){b=d[c];if(b&&b.events){for(var j in b.events)e[j]?f.event.remove(i,j):f.removeEvent(i,j,b.handle);b.handle&&(b.handle.elem=null)}g?delete i[f.expando]:i.removeAttribute&&i.removeAttribute(f.expando),delete d[c]}}}});var bq=/alpha\([^)]*\)/i,br=/opacity=([^)]*)/,bs=/([A-Z]|^ms)/g,bt=/^-?\d+(?:px)?$/i,bu=/^-?\d/,bv=/^([\-+])=([\-+.\de]+)/,bw={position:"absolute",visibility:"hidden",display:"block"},bx=["Left","Right"],by=["Top","Bottom"],bz,bA,bB;f.fn.css=function(a,c){if(arguments.length===2&&c===b)return this;return f.access(this,a,c,!0,function(a,c,d){return d!==b?f.style(a,c,d):f.css(a,c)})},f.extend({cssHooks:{opacity:{get:function(a,b){if(b){var c=bz(a,"opacity","opacity");return c===""?"1":c}return a.style.opacity}}},cssNumber:{fillOpacity:!0,fontWeight:!0,lineHeight:!0,opacity:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{"float":f.support.cssFloat?"cssFloat":"styleFloat"},style:function(a,c,d,e){if(!!a&&a.nodeType!==3&&a.nodeType!==8&&!!a.style){var g,h,i=f.camelCase(c),j=a.style,k=f.cssHooks[i];c=f.cssProps[i]||i;if(d===b){if(k&&"get"in k&&(g=k.get(a,!1,e))!==b)return g;return j[c]}h=typeof d,h==="string"&&(g=bv.exec(d))&&(d=+(g[1]+1)*+g[2]+parseFloat(f.css(a,c)),h="number");if(d==null||h==="number"&&isNaN(d))return;h==="number"&&!f.cssNumber[i]&&(d+="px");if(!k||!("set"in k)||(d=k.set(a,d))!==b)try{j[c]=d}catch(l){}}},css:function(a,c,d){var e,g;c=f.camelCase(c),g=f.cssHooks[c],c=f.cssProps[c]||c,c==="cssFloat"&&(c="float");if(g&&"get"in g&&(e=g.get(a,!0,d))!==b)return e;if(bz)return bz(a,c)},swap:function(a,b,c){var d={};for(var e in b)d[e]=a.style[e],a.style[e]=b[e];c.call(a);for(e in b)a.style[e]=d[e]}}),f.curCSS=f.css,f.each(["height","width"],function(a,b){f.cssHooks[b]={get:function(a,c,d){var e;if(c){if(a.offsetWidth!==0)return bC(a,b,d);f.swap(a,bw,function(){e=bC(a,b,d)});return e}},set:function(a,b){if(!bt.test(b))return b;b=parseFloat(b);if(b>=0)return b+"px"}}}),f.support.opacity||(f.cssHooks.opacity={get:function(a,b){return br.test((b&&a.currentStyle?a.currentStyle.filter:a.style.filter)||"")?parseFloat(RegExp.$1)/100+"":b?"1":""},set:function(a,b){var c=a.style,d=a.currentStyle,e=f.isNumeric(b)?"alpha(opacity="+b*100+")":"",g=d&&d.filter||c.filter||"";c.zoom=1;if(b>=1&&f.trim(g.replace(bq,""))===""){c.removeAttribute("filter");if(d&&!d.filter)return}c.filter=bq.test(g)?g.replace(bq,e):g+" "+e}}),f(function(){f.support.reliableMarginRight||(f.cssHooks.marginRight={get:function(a,b){var c;f.swap(a,{display:"inline-block"},function(){b?c=bz(a,"margin-right","marginRight"):c=a.style.marginRight});return c}})}),c.defaultView&&c.defaultView.getComputedStyle&&(bA=function(a,b){var c,d,e;b=b.replace(bs,"-$1").toLowerCase(),(d=a.ownerDocument.defaultView)&&(e=d.getComputedStyle(a,null))&&(c=e.getPropertyValue(b),c===""&&!f.contains(a.ownerDocument.documentElement,a)&&(c=f.style(a,b)));return c}),c.documentElement.currentStyle&&(bB=function(a,b){var c,d,e,f=a.currentStyle&&a.currentStyle[b],g=a.style;f===null&&g&&(e=g[b])&&(f=e),!bt.test(f)&&bu.test(f)&&(c=g.left,d=a.runtimeStyle&&a.runtimeStyle.left,d&&(a.runtimeStyle.left=a.currentStyle.left),g.left=b==="fontSize"?"1em":f||0,f=g.pixelLeft+"px",g.left=c,d&&(a.runtimeStyle.left=d));return f===""?"auto":f}),bz=bA||bB,f.expr&&f.expr.filters&&(f.expr.filters.hidden=function(a){var b=a.offsetWidth,c=a.offsetHeight;return b===0&&c===0||!f.support.reliableHiddenOffsets&&(a.style&&a.style.display||f.css(a,"display"))==="none"},f.expr.filters.visible=function(a){return!f.expr.filters.hidden(a)});var bD=/%20/g,bE=/\[\]$/,bF=/\r?\n/g,bG=/#.*$/,bH=/^(.*?):[ \t]*([^\r\n]*)\r?$/mg,bI=/^(?:color|date|datetime|datetime-local|email|hidden|month|number|password|range|search|tel|text|time|url|week)$/i,bJ=/^(?:about|app|app\-storage|.+\-extension|file|res|widget):$/,bK=/^(?:GET|HEAD)$/,bL=/^\/\//,bM=/\?/,bN=/<script\b[^<]*(?:(?!<\/script>)<[^<]*)*<\/script>/gi,bO=/^(?:select|textarea)/i,bP=/\s+/,bQ=/([?&])_=[^&]*/,bR=/^([\w\+\.\-]+:)(?:\/\/([^\/?#:]*)(?::(\d+))?)?/,bS=f.fn.load,bT={},bU={},bV,bW,bX=["*/"]+["*"];try{bV=e.href}catch(bY){bV=c.createElement("a"),bV.href="",bV=bV.href}bW=bR.exec(bV.toLowerCase())||[],f.fn.extend({load:function(a,c,d){if(typeof a!="string"&&bS)return bS.apply(this,arguments);if(!this.length)return this;var e=a.indexOf(" ");if(e>=0){var g=a.slice(e,a.length);a=a.slice(0,e)}var h="GET";c&&(f.isFunction(c)?(d=c,c=b):typeof c=="object"&&(c=f.param(c,f.ajaxSettings.traditional),h="POST"));var i=this;f.ajax({url:a,type:h,dataType:"html",data:c,complete:function(a,b,c){c=a.responseText,a.isResolved()&&(a.done(function(a){c=a}),i.html(g?f("<div>").append(c.replace(bN,"")).find(g):c)),d&&i.each(d,[c,b,a])}});return this},serialize:function(){return f.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?f.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||bO.test(this.nodeName)||bI.test(this.type))}).map(function(a,b){var c=f(this).val();return c==null?null:f.isArray(c)?f.map(c,function(a,c){return{name:b.name,value:a.replace(bF,"\r\n")}}):{name:b.name,value:c.replace(bF,"\r\n")}}).get()}}),f.each("ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "),function(a,b){f.fn[b]=function(a){return this.on(b,a)}}),f.each(["get","post"],function(a,c){f[c]=function(a,d,e,g){f.isFunction(d)&&(g=g||e,e=d,d=b);return f.ajax({type:c,url:a,data:d,success:e,dataType:g})}}),f.extend({getScript:function(a,c){return f.get(a,b,c,"script")},getJSON:function(a,b,c){return f.get(a,b,c,"json")},ajaxSetup:function(a,b){b?b_(a,f.ajaxSettings):(b=a,a=f.ajaxSettings),b_(a,b);return a},ajaxSettings:{url:bV,isLocal:bJ.test(bW[1]),global:!0,type:"GET",contentType:"application/x-www-form-urlencoded",processData:!0,async:!0,accepts:{xml:"application/xml, text/xml",html:"text/html",text:"text/plain",json:"application/json, text/javascript","*":bX},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText"},converters:{"* text":a.String,"text html":!0,"text json":f.parseJSON,"text xml":f.parseXML},flatOptions:{context:!0,url:!0}},ajaxPrefilter:bZ(bT),ajaxTransport:bZ(bU),ajax:function(a,c){function w(a,c,l,m){if(s!==2){s=2,q&&clearTimeout(q),p=b,n=m||"",v.readyState=a>0?4:0;var o,r,u,w=c,x=l?cb(d,v,l):b,y,z;if(a>=200&&a<300||a===304){if(d.ifModified){if(y=v.getResponseHeader("Last-Modified"))f.lastModified[k]=y;if(z=v.getResponseHeader("Etag"))f.etag[k]=z}if(a===304)w="notmodified",o=!0;else try{r=cc(d,x),w="success",o=!0}catch(A){w="parsererror",u=A}}else{u=w;if(!w||a)w="error",a<0&&(a=0)}v.status=a,v.statusText=""+(c||w),o?h.resolveWith(e,[r,w,v]):h.rejectWith(e,[v,w,u]),v.statusCode(j),j=b,t&&g.trigger("ajax"+(o?"Success":"Error"),[v,d,o?r:u]),i.fireWith(e,[v,w]),t&&(g.trigger("ajaxComplete",[v,d]),--f.active||f.event.trigger("ajaxStop"))}}typeof a=="object"&&(c=a,a=b),c=c||{};var d=f.ajaxSetup({},c),e=d.context||d,g=e!==d&&(e.nodeType||e instanceof f)?f(e):f.event,h=f.Deferred(),i=f.Callbacks("once memory"),j=d.statusCode||{},k,l={},m={},n,o,p,q,r,s=0,t,u,v={readyState:0,setRequestHeader:function(a,b){if(!s){var c=a.toLowerCase();a=m[c]=m[c]||a,l[a]=b}return this},getAllResponseHeaders:function(){return s===2?n:null},getResponseHeader:function(a){var c;if(s===2){if(!o){o={};while(c=bH.exec(n))o[c[1].toLowerCase()]=c[2]}c=o[a.toLowerCase()]}return c===b?null:c},overrideMimeType:function(a){s||(d.mimeType=a);return this},abort:function(a){a=a||"abort",p&&p.abort(a),w(0,a);return this}};h.promise(v),v.success=v.done,v.error=v.fail,v.complete=i.add,v.statusCode=function(a){if(a){var b;if(s<2)for(b in a)j[b]=[j[b],a[b]];else b=a[v.status],v.then(b,b)}return this},d.url=((a||d.url)+"").replace(bG,"").replace(bL,bW[1]+"//"),d.dataTypes=f.trim(d.dataType||"*").toLowerCase().split(bP),d.crossDomain==null&&(r=bR.exec(d.url.toLowerCase()),d.crossDomain=!(!r||r[1]==bW[1]&&r[2]==bW[2]&&(r[3]||(r[1]==="http:"?80:443))==(bW[3]||(bW[1]==="http:"?80:443)))),d.data&&d.processData&&typeof d.data!="string"&&(d.data=f.param(d.data,d.traditional)),b$(bT,d,c,v);if(s===2)return!1;t=d.global,d.type=d.type.toUpperCase(),d.hasContent=!bK.test(d.type),t&&f.active++===0&&f.event.trigger("ajaxStart");if(!d.hasContent){d.data&&(d.url+=(bM.test(d.url)?"&":"?")+d.data,delete d.data),k=d.url;if(d.cache===!1){var x=f.now(),y=d.url.replace(bQ,"$1_="+x);d.url=y+(y===d.url?(bM.test(d.url)?"&":"?")+"_="+x:"")}}(d.data&&d.hasContent&&d.contentType!==!1||c.contentType)&&v.setRequestHeader("Content-Type",d.contentType),d.ifModified&&(k=k||d.url,f.lastModified[k]&&v.setRequestHeader("If-Modified-Since",f.lastModified[k]),f.etag[k]&&v.setRequestHeader("If-None-Match",f.etag[k])),v.setRequestHeader("Accept",d.dataTypes[0]&&d.accepts[d.dataTypes[0]]?d.accepts[d.dataTypes[0]]+(d.dataTypes[0]!=="*"?", "+bX+"; q=0.01":""):d.accepts["*"]);for(u in d.headers)v.setRequestHeader(u,d.headers[u]);if(d.beforeSend&&(d.beforeSend.call(e,v,d)===!1||s===2)){v.abort();return!1}for(u in{success:1,error:1,complete:1})v[u](d[u]);p=b$(bU,d,c,v);if(!p)w(-1,"No Transport");else{v.readyState=1,t&&g.trigger("ajaxSend",[v,d]),d.async&&d.timeout>0&&(q=setTimeout(function(){v.abort("timeout")},d.timeout));try{s=1,p.send(l,w)}catch(z){if(s<2)w(-1,z);else throw z}}return v},param:function(a,c){var d=[],e=function(a,b){b=f.isFunction(b)?b():b,d[d.length]=encodeURIComponent(a)+"="+encodeURIComponent(b)};c===b&&(c=f.ajaxSettings.traditional);if(f.isArray(a)||a.jquery&&!f.isPlainObject(a))f.each(a,function(){e(this.name,this.value)});else for(var g in a)ca(g,a[g],c,e);return d.join("&").replace(bD,"+")}}),f.extend({active:0,lastModified:{},etag:{}});var cd=f.now(),ce=/(\=)\?(&|$)|\?\?/i;f.ajaxSetup({jsonp:"callback",jsonpCallback:function(){return f.expando+"_"+cd++}}),f.ajaxPrefilter("json jsonp",function(b,c,d){var e=b.contentType==="application/x-www-form-urlencoded"&&typeof b.data=="string";if(b.dataTypes[0]==="jsonp"||b.jsonp!==!1&&(ce.test(b.url)||e&&ce.test(b.data))){var g,h=b.jsonpCallback=f.isFunction(b.jsonpCallback)?b.jsonpCallback():b.jsonpCallback,i=a[h],j=b.url,k=b.data,l="$1"+h+"$2";b.jsonp!==!1&&(j=j.replace(ce,l),b.url===j&&(e&&(k=k.replace(ce,l)),b.data===k&&(j+=(/\?/.test(j)?"&":"?")+b.jsonp+"="+h))),b.url=j,b.data=k,a[h]=function(a){g=[a]},d.always(function(){a[h]=i,g&&f.isFunction(i)&&a[h](g[0])}),b.converters["script json"]=function(){g||f.error(h+" was not called");return g[0]},b.dataTypes[0]="json";return"script"}}),f.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/javascript|ecmascript/},converters:{"text script":function(a){f.globalEval(a);return a}}}),f.ajaxPrefilter("script",function(a){a.cache===b&&(a.cache=!1),a.crossDomain&&(a.type="GET",a.global=!1)}),f.ajaxTransport("script",function(a){if(a.crossDomain){var d,e=c.head||c.getElementsByTagName("head")[0]||c.documentElement;return{send:function(f,g){d=c.createElement("script"),d.async="async",a.scriptCharset&&(d.charset=a.scriptCharset),d.src=a.url,d.onload=d.onreadystatechange=function(a,c){if(c||!d.readyState||/loaded|complete/.test(d.readyState))d.onload=d.onreadystatechange=null,e&&d.parentNode&&e.removeChild(d),d=b,c||g(200,"success")},e.insertBefore(d,e.firstChild)},abort:function(){d&&d.onload(0,1)}}}});var cf=a.ActiveXObject?function(){for(var a in ch)ch[a](0,1)}:!1,cg=0,ch;f.ajaxSettings.xhr=a.ActiveXObject?function(){return!this.isLocal&&ci()||cj()}:ci,function(a){f.extend(f.support,{ajax:!!a,cors:!!a&&"withCredentials"in a})}(f.ajaxSettings.xhr()),f.support.ajax&&f.ajaxTransport(function(c){if(!c.crossDomain||f.support.cors){var d;return{send:function(e,g){var h=c.xhr(),i,j;c.username?h.open(c.type,c.url,c.async,c.username,c.password):h.open(c.type,c.url,c.async);if(c.xhrFields)for(j in c.xhrFields)h[j]=c.xhrFields[j];c.mimeType&&h.overrideMimeType&&h.overrideMimeType(c.mimeType),!c.crossDomain&&!e["X-Requested-With"]&&(e["X-Requested-With"]="XMLHttpRequest");try{for(j in e)h.setRequestHeader(j,e[j])}catch(k){}h.send(c.hasContent&&c.data||null),d=function(a,e){var j,k,l,m,n;try{if(d&&(e||h.readyState===4)){d=b,i&&(h.onreadystatechange=f.noop,cf&&delete ch[i]);if(e)h.readyState!==4&&h.abort();else{j=h.status,l=h.getAllResponseHeaders(),m={},n=h.responseXML,n&&n.documentElement&&(m.xml=n),m.text=h.responseText;try{k=h.statusText}catch(o){k=""}!j&&c.isLocal&&!c.crossDomain?j=m.text?200:404:j===1223&&(j=204)}}}catch(p){e||g(-1,p)}m&&g(j,k,m,l)},!c.async||h.readyState===4?d():(i=++cg,cf&&(ch||(ch={},f(a).unload(cf)),ch[i]=d),h.onreadystatechange=d)},abort:function(){d&&d(0,1)}}}});var ck={},cl,cm,cn=/^(?:toggle|show|hide)$/,co=/^([+\-]=)?([\d+.\-]+)([a-z%]*)$/i,cp,cq=[["height","marginTop","marginBottom","paddingTop","paddingBottom"],["width","marginLeft","marginRight","paddingLeft","paddingRight"],["opacity"]],cr;f.fn.extend({show:function(a,b,c){var d,e;if(a||a===0)return this.animate(cu("show",3),a,b,c);for(var g=0,h=this.length;g<h;g++)d=this[g],d.style&&(e=d.style.display,!f._data(d,"olddisplay")&&e==="none"&&(e=d.style.display=""),e===""&&f.css(d,"display")==="none"&&f._data(d,"olddisplay",cv(d.nodeName)));for(g=0;g<h;g++){d=this[g];if(d.style){e=d.style.display;if(e===""||e==="none")d.style.display=f._data(d,"olddisplay")||""}}return this},hide:function(a,b,c){if(a||a===0)return this.animate(cu("hide",3),a,b,c);var d,e,g=0,h=this.length;for(;g<h;g++)d=this[g],d.style&&(e=f.css(d,"display"),e!=="none"&&!f._data(d,"olddisplay")&&f._data(d,"olddisplay",e));for(g=0;g<h;g++)this[g].style&&(this[g].style.display="none");return this},_toggle:f.fn.toggle,toggle:function(a,b,c){var d=typeof a=="boolean";f.isFunction(a)&&f.isFunction(b)?this._toggle.apply(this,arguments):a==null||d?this.each(function(){var b=d?a:f(this).is(":hidden");f(this)[b?"show":"hide"]()}):this.animate(cu("toggle",3),a,b,c);return this},fadeTo:function(a,b,c,d){return this.filter(":hidden").css("opacity",0).show().end().animate({opacity:b},a,c,d)},animate:function(a,b,c,d){function g(){e.queue===!1&&f._mark(this);var b=f.extend({},e),c=this.nodeType===1,d=c&&f(this).is(":hidden"),g,h,i,j,k,l,m,n,o;b.animatedProperties={};for(i in a){g=f.camelCase(i),i!==g&&(a[g]=a[i],delete a[i]),h=a[g],f.isArray(h)?(b.animatedProperties[g]=h[1],h=a[g]=h[0]):b.animatedProperties[g]=b.specialEasing&&b.specialEasing[g]||b.easing||"swing";if(h==="hide"&&d||h==="show"&&!d)return b.complete.call(this);c&&(g==="height"||g==="width")&&(b.overflow=[this.style.overflow,this.style.overflowX,this.style.overflowY],f.css(this,"display")==="inline"&&f.css(this,"float")==="none"&&(!f.support.inlineBlockNeedsLayout||cv(this.nodeName)==="inline"?this.style.display="inline-block":this.style.zoom=1))}b.overflow!=null&&(this.style.overflow="hidden");for(i in a)j=new f.fx(this,b,i),h=a[i],cn.test(h)?(o=f._data(this,"toggle"+i)||(h==="toggle"?d?"show":"hide":0),o?(f._data(this,"toggle"+i,o==="show"?"hide":"show"),j[o]()):j[h]()):(k=co.exec(h),l=j.cur(),k?(m=parseFloat(k[2]),n=k[3]||(f.cssNumber[i]?"":"px"),n!=="px"&&(f.style(this,i,(m||1)+n),l=(m||1)/j.cur()*l,f.style(this,i,l+n)),k[1]&&(m=(k[1]==="-="?-1:1)*m+l),j.custom(l,m,n)):j.custom(l,h,""));return!0}var e=f.speed(b,c,d);if(f.isEmptyObject(a))return this.each(e.complete,[!1]);a=f.extend({},a);return e.queue===!1?this.each(g):this.queue(e.queue,g)},stop:function(a,c,d){typeof a!="string"&&(d=c,c=a,a=b),c&&a!==!1&&this.queue(a||"fx",[]);return this.each(function(){function h(a,b,c){var e=b[c];f.removeData(a,c,!0),e.stop(d)}var b,c=!1,e=f.timers,g=f._data(this);d||f._unmark(!0,this);if(a==null)for(b in g)g[b]&&g[b].stop&&b.indexOf(".run")===b.length-4&&h(this,g,b);else g[b=a+".run"]&&g[b].stop&&h(this,g,b);for(b=e.length;b--;)e[b].elem===this&&(a==null||e[b].queue===a)&&(d?e[b](!0):e[b].saveState(),c=!0,e.splice(b,1));(!d||!c)&&f.dequeue(this,a)})}}),f.each({slideDown:cu("show",1),slideUp:cu("hide",1),slideToggle:cu("toggle",1),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(a,b){f.fn[a]=function(a,c,d){return this.animate(b,a,c,d)}}),f.extend({speed:function(a,b,c){var d=a&&typeof a=="object"?f.extend({},a):{complete:c||!c&&b||f.isFunction(a)&&a,duration:a,easing:c&&b||b&&!f.isFunction(b)&&b};d.duration=f.fx.off?0:typeof d.duration=="number"?d.duration:d.duration in f.fx.speeds?f.fx.speeds[d.duration]:f.fx.speeds._default;if(d.queue==null||d.queue===!0)d.queue="fx";d.old=d.complete,d.complete=function(a){f.isFunction(d.old)&&d.old.call(this),d.queue?f.dequeue(this,d.queue):a!==!1&&f._unmark(this)};return d},easing:{linear:function(a,b,c,d){return c+d*a},swing:function(a,b,c,d){return(-Math.cos(a*Math.PI)/2+.5)*d+c}},timers:[],fx:function(a,b,c){this.options=b,this.elem=a,this.prop=c,b.orig=b.orig||{}}}),f.fx.prototype={update:function(){this.options.step&&this.options.step.call(this.elem,this.now,this),(f.fx.step[this.prop]||f.fx.step._default)(this)},cur:function(){if(this.elem[this.prop]!=null&&(!this.elem.style||this.elem.style[this.prop]==null))return this.elem[this.prop];var a,b=f.css(this.elem,this.prop);return isNaN(a=parseFloat(b))?!b||b==="auto"?0:b:a},custom:function(a,c,d){function h(a){return e.step(a)}var e=this,g=f.fx;this.startTime=cr||cs(),this.end=c,this.now=this.start=a,this.pos=this.state=0,this.unit=d||this.unit||(f.cssNumber[this.prop]?"":"px"),h.queue=this.options.queue,h.elem=this.elem,h.saveState=function(){e.options.hide&&f._data(e.elem,"fxshow"+e.prop)===b&&f._data(e.elem,"fxshow"+e.prop,e.start)},h()&&f.timers.push(h)&&!cp&&(cp=setInterval(g.tick,g.interval))},show:function(){var a=f._data(this.elem,"fxshow"+this.prop);this.options.orig[this.prop]=a||f.style(this.elem,this.prop),this.options.show=!0,a!==b?this.custom(this.cur(),a):this.custom(this.prop==="width"||this.prop==="height"?1:0,this.cur()),f(this.elem).show()},hide:function(){this.options.orig[this.prop]=f._data(this.elem,"fxshow"+this.prop)||f.style(this.elem,this.prop),this.options.hide=!0,this.custom(this.cur(),0)},step:function(a){var b,c,d,e=cr||cs(),g=!0,h=this.elem,i=this.options;if(a||e>=i.duration+this.startTime){this.now=this.end,this.pos=this.state=1,this.update(),i.animatedProperties[this.prop]=!0;for(b in i.animatedProperties)i.animatedProperties[b]!==!0&&(g=!1);if(g){i.overflow!=null&&!f.support.shrinkWrapBlocks&&f.each(["","X","Y"],function(a,b){h.style["overflow"+b]=i.overflow[a]}),i.hide&&f(h).hide();if(i.hide||i.show)for(b in i.animatedProperties)f.style(h,b,i.orig[b]),f.removeData(h,"fxshow"+b,!0),f.removeData(h,"toggle"+b,!0);d=i.complete,d&&(i.complete=!1,d.call(h))}return!1}i.duration==Infinity?this.now=e:(c=e-this.startTime,this.state=c/i.duration,this.pos=f.easing[i.animatedProperties[this.prop]](this.state,c,0,1,i.duration),this.now=this.start+(this.end-this.start)*this.pos),this.update();return!0}},f.extend(f.fx,{tick:function(){var a,b=f.timers,c=0;for(;c<b.length;c++)a=b[c],!a()&&b[c]===a&&b.splice(c--,1);b.length||f.fx.stop()},interval:13,stop:function(){clearInterval(cp),cp=null},speeds:{slow:600,fast:200,_default:400},step:{opacity:function(a){f.style(a.elem,"opacity",a.now)},_default:function(a){a.elem.style&&a.elem.style[a.prop]!=null?a.elem.style[a.prop]=a.now+a.unit:a.elem[a.prop]=a.now}}}),f.each(["width","height"],function(a,b){f.fx.step[b]=function(a){f.style(a.elem,b,Math.max(0,a.now)+a.unit)}}),f.expr&&f.expr.filters&&(f.expr.filters.animated=function(a){return f.grep(f.timers,function(b){return a===b.elem}).length});var cw=/^t(?:able|d|h)$/i,cx=/^(?:body|html)$/i;"getBoundingClientRect"in c.documentElement?f.fn.offset=function(a){var b=this[0],c;if(a)return this.each(function(b){f.offset.setOffset(this,a,b)});if(!b||!b.ownerDocument)return null;if(b===b.ownerDocument.body)return f.offset.bodyOffset(b);try{c=b.getBoundingClientRect()}catch(d){}var e=b.ownerDocument,g=e.documentElement;if(!c||!f.contains(g,b))return c?{top:c.top,left:c.left}:{top:0,left:0};var h=e.body,i=cy(e),j=g.clientTop||h.clientTop||0,k=g.clientLeft||h.clientLeft||0,l=i.pageYOffset||f.support.boxModel&&g.scrollTop||h.scrollTop,m=i.pageXOffset||f.support.boxModel&&g.scrollLeft||h.scrollLeft,n=c.top+l-j,o=c.left+m-k;return{top:n,left:o}}:f.fn.offset=function(a){var b=this[0];if(a)return this.each(function(b){f.offset.setOffset(this,a,b)});if(!b||!b.ownerDocument)return null;if(b===b.ownerDocument.body)return f.offset.bodyOffset(b);var c,d=b.offsetParent,e=b,g=b.ownerDocument,h=g.documentElement,i=g.body,j=g.defaultView,k=j?j.getComputedStyle(b,null):b.currentStyle,l=b.offsetTop,m=b.offsetLeft;while((b=b.parentNode)&&b!==i&&b!==h){if(f.support.fixedPosition&&k.position==="fixed")break;c=j?j.getComputedStyle(b,null):b.currentStyle,l-=b.scrollTop,m-=b.scrollLeft,b===d&&(l+=b.offsetTop,m+=b.offsetLeft,f.support.doesNotAddBorder&&(!f.support.doesAddBorderForTableAndCells||!cw.test(b.nodeName))&&(l+=parseFloat(c.borderTopWidth)||0,m+=parseFloat(c.borderLeftWidth)||0),e=d,d=b.offsetParent),f.support.subtractsBorderForOverflowNotVisible&&c.overflow!=="visible"&&(l+=parseFloat(c.borderTopWidth)||0,m+=parseFloat(c.borderLeftWidth)||0),k=c}if(k.position==="relative"||k.position==="static")l+=i.offsetTop,m+=i.offsetLeft;f.support.fixedPosition&&k.position==="fixed"&&(l+=Math.max(h.scrollTop,i.scrollTop),m+=Math.max(h.scrollLeft,i.scrollLeft));return{top:l,left:m}},f.offset={bodyOffset:function(a){var b=a.offsetTop,c=a.offsetLeft;f.support.doesNotIncludeMarginInBodyOffset&&(b+=parseFloat(f.css(a,"marginTop"))||0,c+=parseFloat(f.css(a,"marginLeft"))||0);return{top:b,left:c}},setOffset:function(a,b,c){var d=f.css(a,"position");d==="static"&&(a.style.position="relative");var e=f(a),g=e.offset(),h=f.css(a,"top"),i=f.css(a,"left"),j=(d==="absolute"||d==="fixed")&&f.inArray("auto",[h,i])>-1,k={},l={},m,n;j?(l=e.position(),m=l.top,n=l.left):(m=parseFloat(h)||0,n=parseFloat(i)||0),f.isFunction(b)&&(b=b.call(a,c,g)),b.top!=null&&(k.top=b.top-g.top+m),b.left!=null&&(k.left=b.left-g.left+n),"using"in b?b.using.call(a,k):e.css(k)}},f.fn.extend({position:function(){if(!this[0])return null;var a=this[0],b=this.offsetParent(),c=this.offset(),d=cx.test(b[0].nodeName)?{top:0,left:0}:b.offset();c.top-=parseFloat(f.css(a,"marginTop"))||0,c.left-=parseFloat(f.css(a,"marginLeft"))||0,d.top+=parseFloat(f.css(b[0],"borderTopWidth"))||0,d.left+=parseFloat(f.css(b[0],"borderLeftWidth"))||0;return{top:c.top-d.top,left:c.left-d.left}},offsetParent:function(){return this.map(function(){var a=this.offsetParent||c.body;while(a&&!cx.test(a.nodeName)&&f.css(a,"position")==="static")a=a.offsetParent;return a})}}),f.each(["Left","Top"],function(a,c){var d="scroll"+c;f.fn[d]=function(c){var e,g;if(c===b){e=this[0];if(!e)return null;g=cy(e);return g?"pageXOffset"in g?g[a?"pageYOffset":"pageXOffset"]:f.support.boxModel&&g.document.documentElement[d]||g.document.body[d]:e[d]}return this.each(function(){g=cy(this),g?g.scrollTo(a?f(g).scrollLeft():c,a?c:f(g).scrollTop()):this[d]=c})}}),f.each(["Height","Width"],function(a,c){var d=c.toLowerCase();f.fn["inner"+c]=function(){var a=this[0];return a?a.style?parseFloat(f.css(a,d,"padding")):this[d]():null},f.fn["outer"+c]=function(a){var b=this[0];return b?b.style?parseFloat(f.css(b,d,a?"margin":"border")):this[d]():null},f.fn[d]=function(a){var e=this[0];if(!e)return a==null?null:this;if(f.isFunction(a))return this.each(function(b){var c=f(this);c[d](a.call(this,b,c[d]()))});if(f.isWindow(e)){var g=e.document.documentElement["client"+c],h=e.document.body;return e.document.compatMode==="CSS1Compat"&&g||h&&h["client"+c]||g}if(e.nodeType===9)return Math.max(e.documentElement["client"+c],e.body["scroll"+c],e.documentElement["scroll"+c],e.body["offset"+c],e.documentElement["offset"+c]);if(a===b){var i=f.css(e,d),j=parseFloat(i);return f.isNumeric(j)?j:i}return this.css(d,typeof a=="string"?a:a+"px")}}),a.jQuery=a.$=f,typeof define=="function"&&define.amd&&define.amd.jQuery&&define("jquery",[],function(){return f})})(window);
\ No newline at end of file
diff --git a/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite2.0/xsd/readme.md b/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite2.0/xsd/readme.md
new file mode 100755 (executable)
index 0000000..687f28e
--- /dev/null
@@ -0,0 +1,59 @@
+# XSLT style for Test Case and Test Result
+
+## File structure
+
+- readme.txt
+- test_definition.xsd   // The schema of test definition
+- tests.css             // CSS style for showing test cases and results
+- testresult.xsl
+- testcase.xsl
+- tests.xml             //example of test cases
+- result.xml            //example of test result
+
+## Applying the style
+
+### Update in definition and result XML
+
+To apply this style for the definition XML of test cases, please add below statement before the root element of XML (the tag "test_definition").
+
+`<?xml-stylesheet type="text/xsl"  href="./testcase.xsl"?>`
+
+... such as:
+
+```
+<?xml version="1.0" encoding="UTF-8"?>
+<?xml-stylesheet type="text/xsl"  href="./testcase.xsl"?>
+<test_definition>
+```
+
+To apply this style for the test-result XML, please add below statement before the root element of XML (the tag "test_definition").
+
+`<?xml-stylesheet type="text/xsl"  href="./testresult.xsl"?>`
+
+... such as:
+
+```
+<?xml version="1.0" encoding="UTF-8"?>
+<?xml-stylesheet type="text/xsl"  href="./testresult.xsl"?>
+<test_definition>
+```
+
+### Deploy XSLT and CSS style
+
+Please add at least the 3 files into each test package.
+
+- tests.css
+- testresult.xsl
+- testcase.xsl
+
+... such as:
+
+```
+tct-alarm-tizen-tests/
+|-- ...
+|-- testcase.xsl
+|-- testresult.xsl
+|-- tests.css
+|-- ...
+```
+
diff --git a/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite2.0/xsd/release-notes b/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite2.0/xsd/release-notes
new file mode 100755 (executable)
index 0000000..30e97e8
--- /dev/null
@@ -0,0 +1,86 @@
+-- version 1.0.1-2 --
+
+ adding 2 new case types "compliance" and "user_experience"
+-- version 1.0.1-3 --
+ Add a new sub-element "spec" (type: string) under the "testcase" element.
+-- version 1.0.1-4 --
+  
+ Add 2 new priority "P3" and "P4"
+-- version 1.0.1-5 --
+ Add a new root "test_definition", and the element "suite" has been move into it as children elements.
+-- version 1.0.1-6 --
+ A new optional attribute "launcher" is added in the element "testdefinition" for supporting identifying which kind of test suites the XML is designed for
+
+-- version 1.0.1-7 --
+The Xslt related files are merged into this repo. 
+including 
+
+        tests.css             // CSS style for showing test cases and results
+        testresult.xsl
+        testcase.xsl
+        tests.xml             //example of test cases
+        result.xml            //example of test result
+        application.js        //Javascript for "back to top"
+        jquery.min.js         //JQuery
+        back_top.png          //image for "back to top"
+
+Modification in Schema:
+
+1\ the optional attribute "launcher" is moved into suite, not in "testdefinition" element any longer.
+
+2\ "spec" element is removed. and a new "specs" structure is added as below
+
+                                <specs>
+                                       <spec>
+                                               <spec_assertion category="Tizen Device API Specifications"
+                                                       section="Widget" specification="Widget Packaging and XML Configuration"
+                                                       interface="Widget" usage="true" />
+                                               <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>
+                                               <spec_statement>spec_statement</spec_statement>
+                                       </spec>
+                               </specs>
+All spec-related infomation are re-organized as XML element and attributes.
+
+In Xslt, 
+
+1\ a float image "Back to top" is available on right-bottom for scrolling to top.
+
+2\ html anchor is adder for scrolling back to suite summary table, and case detail tables.
+
+-- version 1.0.1-8 --
+1\ For more flexible, rename the attribute "method_or_attribute" to "element_name".
+2\ Add a new attribute "element_type" to describe the type of the corresponding specification item
+
+related example and Xlst is also updated for above.
+
+-- version 1.0.1-9 --
+1\ add an attribute "cts_version" in the element "environment/BuildInfoType" for saving the version of CTS tool
+2\ add an attribute "file" in "measurement/simpleMeasurementType"
+3\ update the result XSLt for showing cts_version
+4\ update the result XSLt for showing Â¡Â°Test Blocked¡± instead of "Test N/A"
+5\ add a summary table for showing all FAIL cases.
+
+
+-- version 1.0.2-1 --
+1\ add a new int optional attribute "onload_delay" with default "3"
+
+-- version 1.0.2-2 --
+1\ Add a new sub element "capabilities" under the element "testcase"
+2\ Add a new boolean attribute "check_unsupport_error" in the element "testcase"
+
+-- version 1.0.2-3 --
+1\ Move the sub element "capabilities" from the element "testcase" to the element "set"
+
+
+-- version 1.0.2-4 --
+1\ Add a unique limitation for suite name
+2\ Add a new optional attribute "launcher" in set 
+
+
+-- version 1.0.2-5 --
+1\ Add a attribute "set_debug_msg" in set for recording the name of log file.
diff --git a/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite2.0/xsd/result.xml b/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite2.0/xsd/result.xml
new file mode 100755 (executable)
index 0000000..6654512
--- /dev/null
@@ -0,0 +1,1482 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?xml-stylesheet type="text/xsl"  href="testresult.xsl"?>
+<test_definition xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" name="http://tempuri.org" type="" xsi:noNamespaceSchemaLocation="test_definition.xsd">
+  <environment device_id="generic/sdk/generic:4.0.4/MR1/302030:eng/test-keys" device_model="unknown" device_name="MR8" firmware_version="4.0.4" host="zhongqing-dev.sh.intel.com (Linux - 2.6.38.6-26.rc1.fc15.i686)" os_version="4.0.4" resolution="1280*800" screen_size="250*150" cts_version="2.3.0-3">
+    <other> Here is a Long String for testing ~~~~~~~~~~~~~~~~~~~
+    Here is a Long String for testing ~~~~~~~~~~~~~~~~~~~
+    Here is a Long String for testing ~~~~~~~~~~~~~~~~~~~
+    </other>
+  </environment>
+  <summary test_plan_name="tmp_test_1">
+    <start_at>Fri Jul 13 04:04:59 CST 2012</start_at>
+    <end_at>Fri Jul 13 05:01:53 CST 2012</end_at>
+  </summary>
+  <suite name="webapi-tizen-alarm-tests" type="">
+    <set name="Alarm1">
+      <testcase component="WebAPI/Tizen/Alarm" execution_type="auto" id="Alarm_AlarmRelative_constructor_delay" priority="P1" purpose="check AlarmRelative attribute when create with delay" status="approved" type="compliance" result="PASS">
+        <description>
+          <pre_condition/>
+          <post_condition/>
+          <steps>
+            <step order="1">
+              <step_desc>check AlarmRelative create constructor with delay
+              </step_desc>
+              <expected>AlarmRelative create succeed with constructor with
+                delay
+              </expected>
+            </step>
+          </steps>
+          <test_script_entry test_script_expected_result="0">/opt/webapi-tizen-alarm-tests/Alarm/Alarm_AlarmRelative_constructor_delay.htm
+          </test_script_entry>
+        </description>
+        <specs>
+          <spec>
+            <spec_assertion category="Tizen Device API Specifications" section="Widget" specification="Widget Packaging and XML Configuration" interface="Widget" usage="true"/>
+            <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>
+            <spec_statement>spec_statement</spec_statement>
+          </spec>
+        </specs>
+        <result_info>
+          <actual_result>PASS</actual_result>
+          <start>Sat Jan 01 2000 13:43:44 GMT+0900 (KST)</start>
+          <end>Sat Jan 01 2000 13:43:46 GMT+0900 (KST)</end>
+          <stdout/>
+        </result_info>
+      </testcase>
+      <testcase component="WebAPI/Tizen/Alarm" execution_type="auto" id="Alarm_AlarmManager_get" priority="P1" purpose="check AlarmManager method removeAll: without input attribute" status="approved" type="compliance" result="BLOCK">
+        <description>
+          <pre_condition/>
+          <post_condition/>
+          <steps>
+            <step order="1">
+              <step_desc>check AlarmManager method get: default check
+              </step_desc>
+              <expected>AlarmManager method get: default check succeed
+              </expected>
+            </step>
+          </steps>
+          <test_script_entry test_script_expected_result="0">/opt/webapi-tizen-alarm-tests/Alarm/Alarm_AlarmManager_get.htm
+          </test_script_entry>
+        </description>
+        <specs>
+          <spec>
+            <spec_assertion category="Tizen Device API Specifications" section="Widget" specification="Widget Packaging and XML Configuration" interface="Widget" usage="true"/>
+            <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>
+            <spec_statement>spec_statement</spec_statement>
+          </spec>
+        </specs>
+        <result_info>
+          <actual_result>BLOCK</actual_result>
+          <start>Sat Jan 01 2000 13:43:46 GMT+0900 (KST)</start>
+          <end>Sat Jan 01 2000 13:44:02 GMT+0900 (KST)</end>
+          <stdout>Test time out</stdout>
+        </result_info>
+      </testcase>
+      <testcase component="WebAPI/Tizen/Alarm" execution_type="auto" id="Alarm_AlarmAbsolute_attri_date_01" priority="P1" purpose="check AlarmAbsolute attribute when create with date" status="approved" type="compliance">
+        <description>
+          <pre_condition/>
+          <post_condition/>
+          <steps>
+            <step order="1">
+              <step_desc>check AlarmAbsolute attribute when create with date
+              </step_desc>
+              <expected>AlarmAbsolute attribute return correct value when
+                create with date
+              </expected>
+            </step>
+          </steps>
+          <test_script_entry test_script_expected_result="0">/opt/webapi-tizen-alarm-tests/Alarm/Alarm_AlarmAbsolute_attri_date.htm?total_num=3&amp;locator_key=id&amp;value=1
+          </test_script_entry>
+        </description>
+        <specs>
+          <spec>
+            <spec_assertion category="Tizen Device API Specifications" section="Widget" specification="Widget Packaging and XML Configuration" interface="Widget" usage="true"/>
+            <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>
+            <spec_statement>spec_statement</spec_statement>
+          </spec>
+        </specs>
+        <result_info>
+          <actual_result>N/R</actual_result>
+          <start>Sat Jan 01 2000 13:44:02 GMT+0900 (KST)</start>
+          <end>Sat Jan 01 2000 13:44:05 GMT+0900 (KST)</end>
+          <stdout/>
+        </result_info>
+      </testcase>
+      <testcase component="WebAPI/Tizen/Alarm" execution_type="auto" id="Alarm_AlarmManager_add_rel" priority="P1" purpose="check AlarmManager method add: add relative alarm" status="approved" type="compliance" result="FAIL">
+        <description>
+          <pre_condition/>
+          <post_condition/>
+          <steps>
+            <step order="1">
+              <step_desc>check AlarmManager method add: add relative alarm
+              </step_desc>
+              <expected>AlarmManager method add: add relative alarm succeed
+              </expected>
+            </step>
+          </steps>
+          <test_script_entry test_script_expected_result="0">/opt/webapi-tizen-alarm-tests/Alarm/Alarm_AlarmManager_add_rel.htm
+          </test_script_entry>
+        </description>
+        <specs>
+          <spec>
+            <spec_assertion category="Tizen Device API Specifications" section="Widget" specification="Widget Packaging and XML Configuration" interface="Widget" usage="true"/>
+            <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>
+            <spec_statement>spec_statement</spec_statement>
+          </spec>
+        </specs>
+        <result_info>
+          <actual_result>FAIL</actual_result>
+          <start>Sat Jan 01 2000 13:44:05 GMT+0900 (KST)</start>
+          <end>Sat Jan 01 2000 13:44:21 GMT+0900 (KST)</end>
+          <stdout>Test time out</stdout>
+        </result_info>
+      </testcase>
+      <testcase component="WebAPI/Tizen/Alarm" execution_type="auto" id="Alarm_AlarmRelative_attri_delay_02" priority="P1" purpose="check AlarmAbsolute attribute when create with period" status="approved" type="compliance" result="FAIL">
+        <description>
+          <pre_condition/>
+          <post_condition/>
+          <steps>
+            <step order="1">
+              <step_desc>check AlarmRelative attribute when create with delay
+              </step_desc>
+              <expected>AlarmRelative attribute return correct value when
+                create succeed with with delay
+              </expected>
+            </step>
+          </steps>
+          <test_script_entry test_script_expected_result="0">/opt/webapi-tizen-alarm-tests/Alarm/Alarm_AlarmRelative_attri_delay.htm?total_num=2&amp;locator_key=id&amp;value=2
+          </test_script_entry>
+        </description>
+        <specs>
+          <spec>
+            <spec_assertion category="Tizen Device API Specifications" section="Widget" specification="Widget Packaging and XML Configuration" interface="Widget" usage="true"/>
+            <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>
+            <spec_statement>spec_statement</spec_statement>
+          </spec>
+        </specs>
+        <result_info>
+          <actual_result>FAIL</actual_result>
+          <start>Sat Jan 01 2000 13:44:21 GMT+0900 (KST)</start>
+          <end>Sat Jan 01 2000 13:44:23 GMT+0900 (KST)</end>
+          <stdout/>
+        </result_info>
+      </testcase>
+      <testcase component="WebAPI/Tizen/Alarm" execution_type="auto" id="Alarm_AlarmManager_getAll" priority="P1" purpose="check AlarmManager method getAll: default check" status="approved" type="compliance" result="FAIL">
+        <description>
+          <pre_condition/>
+          <post_condition/>
+          <steps>
+            <step order="1">
+              <step_desc>check AlarmManager method getAll: default check
+              </step_desc>
+              <expected>AlarmManager method getAll: default check succeed
+              </expected>
+            </step>
+          </steps>
+          <test_script_entry test_script_expected_result="0">/opt/webapi-tizen-alarm-tests/Alarm/Alarm_AlarmManager_getAll.htm
+          </test_script_entry>
+        </description>
+        <specs>
+          <spec>
+            <spec_assertion category="Tizen Device API Specifications" section="Widget" specification="Widget Packaging and XML Configuration" interface="Widget" usage="true"/>
+            <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>
+            <spec_statement>spec_statement</spec_statement>
+          </spec>
+        </specs>
+        <result_info>
+          <actual_result>FAIL</actual_result>
+          <start>Sat Jan 01 2000 13:44:23 GMT+0900 (KST)</start>
+          <end>Sat Jan 01 2000 13:44:39 GMT+0900 (KST)</end>
+          <stdout>Test time out</stdout>
+        </result_info>
+      </testcase>
+      <testcase component="WebAPI/Tizen/Alarm" execution_type="auto" id="Alarm_AlarmAbsolute_attri_date_03" priority="P1" purpose="check AlarmAbsolute attribute when create with date" status="approved" type="compliance" result="Blocked">
+        <description>
+          <pre_condition/>
+          <post_condition/>
+          <steps>
+            <step order="1">
+              <step_desc>check AlarmAbsolute attribute when create with date
+              </step_desc>
+              <expected>AlarmAbsolute attribute return correct value when
+                create with date
+              </expected>
+            </step>
+          </steps>
+          <test_script_entry test_script_expected_result="0">/opt/webapi-tizen-alarm-tests/Alarm/Alarm_AlarmAbsolute_attri_date.htm?total_num=3&amp;locator_key=id&amp;value=3
+          </test_script_entry>
+        </description>
+        <specs>
+          <spec>
+            <spec_assertion category="Tizen Device API Specifications" section="Widget" specification="Widget Packaging and XML Configuration" interface="Widget" usage="true"/>
+            <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>
+            <spec_statement>spec_statement</spec_statement>
+          </spec>
+        </specs>
+        <result_info>
+          <actual_result>FAIL</actual_result>
+          <start>Sat Jan 01 2000 13:44:39 GMT+0900 (KST)</start>
+          <end>Sat Jan 01 2000 13:44:41 GMT+0900 (KST)</end>
+          <stdout/>
+        </result_info>
+      </testcase>
+      <testcase component="WebAPI/Tizen/Alarm" execution_type="auto" id="Alarm_AlarmAbsolute_getNextScheduledDate_date" priority="P1" purpose="check AlarmAbsolute method getNextScheduledDate when create with date" status="approved" type="compliance" result="FAIL">
+        <description>
+          <pre_condition/>
+          <post_condition/>
+          <steps>
+            <step order="1">
+              <step_desc>check AlarmAbsolute method getNextScheduledDate when
+                create with date
+              </step_desc>
+              <expected>AlarmAbsolute method getNextScheduledDate return
+                correct value when create with date
+              </expected>
+            </step>
+          </steps>
+          <test_script_entry test_script_expected_result="0">/opt/webapi-tizen-alarm-tests/Alarm/Alarm_AlarmAbsolute_getNextScheduledDate_date.htm
+          </test_script_entry>
+        </description>
+        <specs>
+          <spec>
+            <spec_assertion category="Tizen Device API Specifications" section="Widget" specification="Widget Packaging and XML Configuration" interface="Widget" usage="true"/>
+            <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>
+            <spec_statement>spec_statement</spec_statement>
+          </spec>
+        </specs>
+        <result_info>
+          <actual_result>FAIL</actual_result>
+          <start>Sat Jan 01 2000 13:44:41 GMT+0900 (KST)</start>
+          <end>Sat Jan 01 2000 13:44:57 GMT+0900 (KST)</end>
+          <stdout>Test time out</stdout>
+        </result_info>
+      </testcase>
+      <testcase component="WebAPI/Tizen/Alarm" execution_type="auto" id="Alarm_AlarmAbsolute_constructor_date" priority="P1" purpose="check AlarmAbsolute create constructor with date" status="approved" type="compliance" result="FAIL">
+        <description>
+          <pre_condition/>
+          <post_condition/>
+          <steps>
+            <step order="1">
+              <step_desc>check AlarmAbsolute create constructor with date
+              </step_desc>
+              <expected>AlarmAbsolute create succeed with constructor with date
+              </expected>
+            </step>
+          </steps>
+          <test_script_entry test_script_expected_result="0">/opt/webapi-tizen-alarm-tests/Alarm/Alarm_AlarmAbsolute_constructor_date.htm
+          </test_script_entry>
+        </description>
+        <specs>
+          <spec>
+            <spec_assertion category="Tizen Device API Specifications" section="Widget" specification="Widget Packaging and XML Configuration" interface="Widget" usage="true"/>
+            <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>
+            <spec_statement>spec_statement</spec_statement>
+          </spec>
+        </specs>
+        <result_info>
+          <actual_result>FAIL</actual_result>
+          <start>Sat Jan 01 2000 13:44:57 GMT+0900 (KST)</start>
+          <end>Sat Jan 01 2000 13:45:13 GMT+0900 (KST)</end>
+          <stdout>Test time out</stdout>
+        </result_info>
+      </testcase>
+      <testcase component="WebAPI/Tizen/Alarm" execution_type="auto" id="Alarm_AlarmRelative_getRemainingSeconds_delay" priority="P1" purpose="check AlarmRelative method getNextScheduleddelay when create with delay" status="approved" type="compliance" result="FAIL">
+        <description>
+          <pre_condition/>
+          <post_condition/>
+          <steps>
+            <step order="1">
+              <step_desc>check AlarmRelative method getNextScheduleddelay when
+                create with delay
+              </step_desc>
+              <expected>AlarmRelative method getNextScheduleddelay return
+                correct value when create succeed with with delay
+              </expected>
+            </step>
+          </steps>
+          <test_script_entry test_script_expected_result="0">/opt/webapi-tizen-alarm-tests/Alarm/Alarm_AlarmRelative_getRemainingSeconds_delay.htm
+          </test_script_entry>
+        </description>
+        <specs>
+          <spec>
+            <spec_assertion category="Tizen Device API Specifications" section="Widget" specification="Widget Packaging and XML Configuration" interface="Widget" usage="true"/>
+            <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>
+            <spec_statement>spec_statement</spec_statement>
+          </spec>
+        </specs>
+        <result_info>
+          <actual_result>FAIL</actual_result>
+          <start>Sat Jan 01 2000 13:45:13 GMT+0900 (KST)</start>
+          <end>Sat Jan 01 2000 13:45:30 GMT+0900 (KST)</end>
+          <stdout>Test time out</stdout>
+        </result_info>
+      </testcase>
+      <testcase component="WebAPI/Tizen/Alarm" execution_type="auto" id="Alarm_AlarmRelative_attri_delay_01" priority="P1" purpose="check AlarmAbsolute attribute when create with period" status="approved" type="compliance" result="FAIL">
+        <description>
+          <pre_condition/>
+          <post_condition/>
+          <steps>
+            <step order="1">
+              <step_desc>check AlarmRelative attribute when create with delay
+              </step_desc>
+              <expected>AlarmRelative attribute return correct value when
+                create succeed with with delay
+              </expected>
+            </step>
+          </steps>
+          <test_script_entry test_script_expected_result="0">/opt/webapi-tizen-alarm-tests/Alarm/Alarm_AlarmRelative_attri_delay.htm?total_num=2&amp;locator_key=id&amp;value=1
+          </test_script_entry>
+        </description>
+        <specs>
+          <spec>
+            <spec_assertion category="Tizen Device API Specifications" section="Widget" specification="Widget Packaging and XML Configuration" interface="Widget" usage="true"/>
+            <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>
+            <spec_statement>spec_statement</spec_statement>
+          </spec>
+        </specs>
+        <result_info>
+          <actual_result>FAIL</actual_result>
+          <start>Sat Jan 01 2000 13:45:30 GMT+0900 (KST)</start>
+          <end>Sat Jan 01 2000 13:45:32 GMT+0900 (KST)</end>
+          <stdout/>
+        </result_info>
+      </testcase>
+      <testcase component="WebAPI/Tizen/Alarm" execution_type="auto" id="Alarm_AlarmManager_add_abs" priority="P1" purpose="check AlarmManager method add: add absolute alarm" status="approved" type="compliance" result="FAIL">
+        <description>
+          <pre_condition/>
+          <post_condition/>
+          <steps>
+            <step order="1">
+              <step_desc>check AlarmManager method add: add absolute alarm
+              </step_desc>
+              <expected>AlarmManager method add: add absolute alarm succeed
+              </expected>
+            </step>
+          </steps>
+          <test_script_entry test_script_expected_result="0">/opt/webapi-tizen-alarm-tests/Alarm/Alarm_AlarmManager_add_abs.htm
+          </test_script_entry>
+        </description>
+        <specs>
+          <spec>
+            <spec_assertion category="Tizen Device API Specifications" section="Widget" specification="Widget Packaging and XML Configuration" interface="Widget" usage="true"/>
+            <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>
+            <spec_statement>spec_statement</spec_statement>
+          </spec>
+        </specs>
+        <result_info>
+          <actual_result>FAIL</actual_result>
+          <start>Sat Jan 01 2000 13:45:32 GMT+0900 (KST)</start>
+          <end>Sat Jan 01 2000 13:45:48 GMT+0900 (KST)</end>
+          <stdout>Test time out</stdout>
+        </result_info>
+      </testcase>
+      <testcase component="WebAPI/Tizen/Alarm" execution_type="auto" id="Alarm_AlarmAbsolute_attri_date_02" priority="P1" purpose="check AlarmAbsolute attribute when create with date" status="approved" type="compliance" result="FAIL">
+        <description>
+          <pre_condition/>
+          <post_condition/>
+          <steps>
+            <step order="1">
+              <step_desc>check AlarmAbsolute attribute when create with date
+              </step_desc>
+              <expected>AlarmAbsolute attribute return correct value when
+                create with date
+              </expected>
+            </step>
+          </steps>
+          <test_script_entry test_script_expected_result="0">/opt/webapi-tizen-alarm-tests/Alarm/Alarm_AlarmAbsolute_attri_date.htm?total_num=3&amp;locator_key=id&amp;value=2
+          </test_script_entry>
+        </description>
+        <specs>
+          <spec>
+            <spec_assertion category="Tizen Device API Specifications" section="Widget" specification="Widget Packaging and XML Configuration" interface="Widget" usage="true"/>
+            <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>
+            <spec_statement>spec_statement</spec_statement>
+          </spec>
+        </specs>
+        <result_info>
+          <actual_result>FAIL</actual_result>
+          <start>Sat Jan 01 2000 13:45:48 GMT+0900 (KST)</start>
+          <end>Sat Jan 01 2000 13:45:50 GMT+0900 (KST)</end>
+          <stdout/>
+        </result_info>
+      </testcase>
+      <testcase component="WebAPI/Tizen/Alarm" execution_type="auto" id="Alarm_AlarmManager_removeAll" priority="P1" purpose="check AlarmManager method removeAll: default check" status="approved" type="compliance" result="FAIL">
+        <description>
+          <pre_condition/>
+          <post_condition/>
+          <steps>
+            <step order="1">
+              <step_desc>check AlarmManager method removeAll: default check
+              </step_desc>
+              <expected>AlarmManager method removeAll: default check succeed
+              </expected>
+            </step>
+          </steps>
+          <test_script_entry test_script_expected_result="0">/opt/webapi-tizen-alarm-tests/Alarm/Alarm_AlarmManager_removeAll.htm
+          </test_script_entry>
+        </description>
+        <specs>
+          <spec>
+            <spec_assertion category="Tizen Device API Specifications" section="Widget" specification="Widget Packaging and XML Configuration" interface="Widget" usage="true"/>
+            <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>
+            <spec_statement>spec_statement</spec_statement>
+          </spec>
+        </specs>
+        <result_info>
+          <actual_result>FAIL</actual_result>
+          <start>Sat Jan 01 2000 13:45:50 GMT+0900 (KST)</start>
+          <end>Sat Jan 01 2000 13:46:06 GMT+0900 (KST)</end>
+          <stdout>Test time out</stdout>
+        </result_info>
+      </testcase>
+      <testcase component="WebAPI/Tizen/Alarm" execution_type="auto" id="Alarm_AlarmManager_remove" priority="P1" purpose="check AlarmManager method remove: default check" status="approved" type="compliance" result="FAIL">
+        <description>
+          <pre_condition/>
+          <post_condition/>
+          <steps>
+            <step order="1">
+              <step_desc>check AlarmManager method remove: default check
+              </step_desc>
+              <expected>AlarmManager method remove: default check succeed
+              </expected>
+            </step>
+          </steps>
+          <test_script_entry test_script_expected_result="0">/opt/webapi-tizen-alarm-tests/Alarm/Alarm_AlarmManager_remove.htm
+          </test_script_entry>
+        </description>
+        <specs>
+          <spec>
+            <spec_assertion category="Tizen Device API Specifications" section="Widget" specification="Widget Packaging and XML Configuration" interface="Widget" usage="true"/>
+            <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>
+            <spec_statement>spec_statement</spec_statement>
+          </spec>
+        </specs>
+        <result_info>
+          <actual_result>FAIL</actual_result>
+          <start>Sat Jan 01 2000 13:46:06 GMT+0900 (KST)</start>
+          <end>Sat Jan 01 2000 13:46:22 GMT+0900 (KST)</end>
+          <stdout>Test time out</stdout>
+        </result_info>
+      </testcase>
+      <testcase component="WebAPI/Tizen/Alarm" execution_type="auto" id="Alarm_AlarmManagerObject_exist" priority="P1" purpose="check AlarmManagerObject existance" status="approved" type="compliance" result="FAIL">
+        <description>
+          <pre_condition/>
+          <post_condition/>
+          <steps>
+            <step order="1">
+              <step_desc>check AlarmManagerObject exist</step_desc>
+              <expected>AlarmManagerObject exist</expected>
+            </step>
+          </steps>
+          <test_script_entry test_script_expected_result="">/opt/webapi-tizen-alarm-tests/Alarm/Alarm_AlarmManagerObject_exist.htm
+          </test_script_entry>
+        </description>
+        <specs>
+          <spec>
+            <spec_assertion category="Tizen Device API Specifications" section="Widget" specification="Widget Packaging and XML Configuration" interface="Widget" usage="true"/>
+            <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>
+            <spec_statement>spec_statement</spec_statement>
+          </spec>
+        </specs>
+        <result_info>
+          <actual_result>FAIL</actual_result>
+          <start>Sat Jan 01 2000 13:46:22 GMT+0900 (KST)</start>
+          <end>Sat Jan 01 2000 13:46:38 GMT+0900 (KST)</end>
+          <stdout>Test time out</stdout>
+        </result_info>
+      </testcase>
+      <testcase component="WebAPI/Tizen/Alarm" execution_type="auto" id="Alarm_AlarmManager_const_check_01" priority="P1" purpose="Check AlarmManager constants:PERIOD_MINUTE" status="approved" type="compliance" result="FAIL">
+        <description>
+          <pre_condition/>
+          <post_condition/>
+          <steps>
+            <step order="1">
+              <step_desc>Check AlarmManager constants:</step_desc>
+              <expected>AlarmManager constants value is correct:</expected>
+            </step>
+          </steps>
+          <test_script_entry test_script_expected_result="0">/opt/webapi-tizen-alarm-tests/Alarm/Alarm_AlarmManager_const_check.htm?total_num=4&amp;locator_key=id&amp;value=1
+          </test_script_entry>
+        </description>
+        <specs>
+          <spec>
+            <spec_assertion category="Tizen Device API Specifications" section="Widget" specification="Widget Packaging and XML Configuration" interface="Widget" usage="true"/>
+            <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>
+            <spec_statement>spec_statement</spec_statement>
+          </spec>
+        </specs>
+        <result_info>
+          <actual_result>FAIL</actual_result>
+          <start>Sat Jan 01 2000 13:46:38 GMT+0900 (KST)</start>
+          <end>Sat Jan 01 2000 13:46:40 GMT+0900 (KST)</end>
+          <stdout>Can't find variable: tizen</stdout>
+        </result_info>
+      </testcase>
+      <testcase component="WebAPI/Tizen/Alarm" execution_type="auto" id="Alarm_AlarmManager_const_check_02" priority="P1" purpose="Check AlarmManager constants:PERIOD_HOUR" status="approved" type="compliance" result="FAIL">
+        <description>
+          <pre_condition/>
+          <post_condition/>
+          <steps>
+            <step order="1">
+              <step_desc>Check AlarmManager constants:</step_desc>
+              <expected>AlarmManager constants value is correct:</expected>
+            </step>
+          </steps>
+          <test_script_entry test_script_expected_result="0">/opt/webapi-tizen-alarm-tests/Alarm/Alarm_AlarmManager_const_check.htm?total_num=4&amp;locator_key=id&amp;value=2
+          </test_script_entry>
+        </description>
+        <specs>
+          <spec>
+            <spec_assertion category="Tizen Device API Specifications" section="Widget" specification="Widget Packaging and XML Configuration" interface="Widget" usage="true"/>
+            <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>
+            <spec_statement>spec_statement</spec_statement>
+          </spec>
+        </specs>
+        <result_info>
+          <actual_result>FAIL</actual_result>
+          <start>Sat Jan 01 2000 13:46:40 GMT+0900 (KST)</start>
+          <end>Sat Jan 01 2000 13:46:42 GMT+0900 (KST)</end>
+          <stdout>Can't find variable: tizen</stdout>
+        </result_info>
+      </testcase>
+      <testcase component="WebAPI/Tizen/Alarm" execution_type="auto" id="Alarm_AlarmManager_const_check_03" priority="P1" purpose="Check AlarmManager constants:PERIOD_DAY" status="approved" type="compliance" result="FAIL">
+        <description>
+          <pre_condition/>
+          <post_condition/>
+          <steps>
+            <step order="1">
+              <step_desc>Check AlarmManager constants:</step_desc>
+              <expected>AlarmManager constants value is correct:</expected>
+            </step>
+          </steps>
+          <test_script_entry test_script_expected_result="0">/opt/webapi-tizen-alarm-tests/Alarm/Alarm_AlarmManager_const_check.htm?total_num=4&amp;locator_key=id&amp;value=3
+          </test_script_entry>
+        </description>
+        <specs>
+          <spec>
+            <spec_assertion category="Tizen Device API Specifications" section="Widget" specification="Widget Packaging and XML Configuration" interface="Widget" usage="true"/>
+            <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>
+            <spec_statement>spec_statement</spec_statement>
+          </spec>
+        </specs>
+        <result_info>
+          <actual_result>FAIL</actual_result>
+          <start>Sat Jan 01 2000 13:46:42 GMT+0900 (KST)</start>
+          <end>Sat Jan 01 2000 13:46:44 GMT+0900 (KST)</end>
+          <stdout>Can't find variable: tizen</stdout>
+        </result_info>
+      </testcase>
+      <testcase component="WebAPI/Tizen/Alarm" execution_type="auto" id="Alarm_AlarmManager_const_check_04" priority="P1" purpose="Check AlarmManager constants:PERIOD_WEEK" status="approved" type="compliance" result="FAIL">
+        <description>
+          <pre_condition/>
+          <post_condition/>
+          <steps>
+            <step order="1">
+              <step_desc>Check AlarmManager constants:</step_desc>
+              <expected>AlarmManager constants value is correct:</expected>
+            </step>
+          </steps>
+          <test_script_entry test_script_expected_result="0">/opt/webapi-tizen-alarm-tests/Alarm/Alarm_AlarmManager_const_check.htm?total_num=4&amp;locator_key=id&amp;value=4
+          </test_script_entry>
+        </description>
+        <specs>
+          <spec>
+            <spec_assertion category="Tizen Device API Specifications" section="Widget" specification="Widget Packaging and XML Configuration" interface="Widget" usage="true"/>
+            <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>
+            <spec_statement>spec_statement</spec_statement>
+          </spec>
+        </specs>
+        <result_info>
+          <actual_result>FAIL</actual_result>
+          <start>Sat Jan 01 2000 13:46:44 GMT+0900 (KST)</start>
+          <end>Sat Jan 01 2000 13:46:46 GMT+0900 (KST)</end>
+          <stdout>Can't find variable: tizen</stdout>
+        </result_info>
+      </testcase>
+    </set>
+    <set name="Alarm">
+      <testcase component="WebAPI/Tizen/Alarm" execution_type="auto" id="Alarm_AlarmRelative_constructor_delay" priority="P1" purpose="check AlarmRelative attribute when create with delay" status="approved" type="compliance" result="PASS">
+        <description>
+          <pre_condition/>
+          <post_condition/>
+          <steps>
+            <step order="1">
+              <step_desc>check AlarmRelative create constructor with delay
+              </step_desc>
+              <expected>AlarmRelative create succeed with constructor with
+                delay
+              </expected>
+            </step>
+          </steps>
+          <test_script_entry test_script_expected_result="0">/opt/webapi-tizen-alarm-tests/Alarm/Alarm_AlarmRelative_constructor_delay.htm
+          </test_script_entry>
+        </description>
+        <specs>
+          <spec>
+            <spec_assertion category="Tizen Device API Specifications" section="Widget" specification="Widget Packaging and XML Configuration" interface="Widget" usage="true"/>
+            <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>
+            <spec_statement>spec_statement</spec_statement>
+          </spec>
+        </specs>
+        <result_info>
+          <actual_result>PASS</actual_result>
+          <start>Sat Jan 01 2000 13:43:44 GMT+0900 (KST)</start>
+          <end>Sat Jan 01 2000 13:43:46 GMT+0900 (KST)</end>
+          <stdout/>
+        </result_info>
+      </testcase>
+      <testcase component="WebAPI/Tizen/Alarm" execution_type="auto" id="Alarm_AlarmManager_get" priority="P1" purpose="check AlarmManager method removeAll: without input attribute" status="approved" type="compliance" result="FAIL">
+        <description>
+          <pre_condition/>
+          <post_condition/>
+          <steps>
+            <step order="1">
+              <step_desc>check AlarmManager method get: default check
+              </step_desc>
+              <expected>AlarmManager method get: default check succeed
+              </expected>
+            </step>
+          </steps>
+          <test_script_entry test_script_expected_result="0">/opt/webapi-tizen-alarm-tests/Alarm/Alarm_AlarmManager_get.htm
+          </test_script_entry>
+        </description>
+        <specs>
+          <spec>
+            <spec_assertion category="Tizen Device API Specifications" section="Widget" specification="Widget Packaging and XML Configuration" interface="Widget" usage="true"/>
+            <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>
+            <spec_statement>spec_statement</spec_statement>
+          </spec>
+        </specs>
+        <result_info>
+          <actual_result>FAIL</actual_result>
+          <start>Sat Jan 01 2000 13:43:46 GMT+0900 (KST)</start>
+          <end>Sat Jan 01 2000 13:44:02 GMT+0900 (KST)</end>
+          <stdout>Test time out</stdout>
+        </result_info>
+      </testcase>
+      <testcase component="WebAPI/Tizen/Alarm" execution_type="auto" id="Alarm_AlarmAbsolute_attri_date_01" priority="P1" purpose="check AlarmAbsolute attribute when create with date" status="approved" type="compliance" result="FAIL">
+        <description>
+          <pre_condition/>
+          <post_condition/>
+          <steps>
+            <step order="1">
+              <step_desc>check AlarmAbsolute attribute when create with date
+              </step_desc>
+              <expected>AlarmAbsolute attribute return correct value when
+                create with date
+              </expected>
+            </step>
+          </steps>
+          <test_script_entry test_script_expected_result="0">/opt/webapi-tizen-alarm-tests/Alarm/Alarm_AlarmAbsolute_attri_date.htm?total_num=3&amp;locator_key=id&amp;value=1
+          </test_script_entry>
+        </description>
+        <specs>
+          <spec>
+            <spec_assertion category="Tizen Device API Specifications" section="Widget" specification="Widget Packaging and XML Configuration" interface="Widget" usage="true"/>
+            <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>
+            <spec_statement>spec_statement</spec_statement>
+          </spec>
+        </specs>
+        <result_info>
+          <actual_result>FAIL</actual_result>
+          <start>Sat Jan 01 2000 13:44:02 GMT+0900 (KST)</start>
+          <end>Sat Jan 01 2000 13:44:05 GMT+0900 (KST)</end>
+          <stdout/>
+        </result_info>
+      </testcase>
+      <testcase component="WebAPI/Tizen/Alarm" execution_type="auto" id="Alarm_AlarmManager_add_rel" priority="P1" purpose="check AlarmManager method add: add relative alarm" status="approved" type="compliance" result="FAIL">
+        <description>
+          <pre_condition/>
+          <post_condition/>
+          <steps>
+            <step order="1">
+              <step_desc>check AlarmManager method add: add relative alarm
+              </step_desc>
+              <expected>AlarmManager method add: add relative alarm succeed
+              </expected>
+            </step>
+          </steps>
+          <test_script_entry test_script_expected_result="0">/opt/webapi-tizen-alarm-tests/Alarm/Alarm_AlarmManager_add_rel.htm
+          </test_script_entry>
+        </description>
+        <specs>
+          <spec>
+            <spec_assertion category="Tizen Device API Specifications" section="Widget" specification="Widget Packaging and XML Configuration" interface="Widget" usage="true"/>
+            <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>
+            <spec_statement>spec_statement</spec_statement>
+          </spec>
+        </specs>
+        <result_info>
+          <actual_result>FAIL</actual_result>
+          <start>Sat Jan 01 2000 13:44:05 GMT+0900 (KST)</start>
+          <end>Sat Jan 01 2000 13:44:21 GMT+0900 (KST)</end>
+          <stdout>Test time out</stdout>
+        </result_info>
+      </testcase>
+      <testcase component="WebAPI/Tizen/Alarm" execution_type="auto" id="Alarm_AlarmRelative_attri_delay_02" priority="P1" purpose="check AlarmAbsolute attribute when create with period" status="approved" type="compliance" result="FAIL">
+        <description>
+          <pre_condition/>
+          <post_condition/>
+          <steps>
+            <step order="1">
+              <step_desc>check AlarmRelative attribute when create with delay
+              </step_desc>
+              <expected>AlarmRelative attribute return correct value when
+                create succeed with with delay
+              </expected>
+            </step>
+          </steps>
+          <test_script_entry test_script_expected_result="0">/opt/webapi-tizen-alarm-tests/Alarm/Alarm_AlarmRelative_attri_delay.htm?total_num=2&amp;locator_key=id&amp;value=2
+          </test_script_entry>
+        </description>
+        <specs>
+          <spec>
+            <spec_assertion category="Tizen Device API Specifications" section="Widget" specification="Widget Packaging and XML Configuration" interface="Widget" usage="true"/>
+            <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>
+            <spec_statement>spec_statement</spec_statement>
+          </spec>
+        </specs>
+        <result_info>
+          <actual_result>FAIL</actual_result>
+          <start>Sat Jan 01 2000 13:44:21 GMT+0900 (KST)</start>
+          <end>Sat Jan 01 2000 13:44:23 GMT+0900 (KST)</end>
+          <stdout/>
+        </result_info>
+      </testcase>
+    </set>
+  </suite>
+  <suite name="webapi-tizen-alarm-tests1" type="">
+    <set name="Alarm4">
+      <testcase component="WebAPI/Tizen/Alarm" execution_type="auto" id="Alarm_AlarmRelative_constructor_delay" priority="P1" purpose="check AlarmRelative attribute when create with delay" status="approved" type="compliance" result="PASS">
+        <description>
+          <pre_condition/>
+          <post_condition/>
+          <steps>
+            <step order="1">
+              <step_desc>check AlarmRelative create constructor with delay
+              </step_desc>
+              <expected>AlarmRelative create succeed with constructor with
+                delay
+              </expected>
+            </step>
+          </steps>
+          <test_script_entry test_script_expected_result="0">/opt/webapi-tizen-alarm-tests/Alarm/Alarm_AlarmRelative_constructor_delay.htm
+          </test_script_entry>
+        </description>
+        <specs>
+          <spec>
+            <spec_assertion category="Tizen Device API Specifications" section="Widget" specification="Widget Packaging and XML Configuration" interface="Widget" usage="true"/>
+            <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>
+            <spec_statement>spec_statement</spec_statement>
+          </spec>
+        </specs>
+        <result_info>
+          <actual_result>PASS</actual_result>
+          <start>Sat Jan 01 2000 13:43:44 GMT+0900 (KST)</start>
+          <end>Sat Jan 01 2000 13:43:46 GMT+0900 (KST)</end>
+          <stdout/>
+        </result_info>
+      </testcase>
+      <testcase component="WebAPI/Tizen/Alarm" execution_type="auto" id="Alarm_AlarmManager_get" priority="P1" purpose="check AlarmManager method removeAll: without input attribute" status="approved" type="compliance" result="FAIL">
+        <description>
+          <pre_condition/>
+          <post_condition/>
+          <steps>
+            <step order="1">
+              <step_desc>check AlarmManager method get: default check
+              </step_desc>
+              <expected>AlarmManager method get: default check succeed
+              </expected>
+            </step>
+          </steps>
+          <test_script_entry test_script_expected_result="0">/opt/webapi-tizen-alarm-tests/Alarm/Alarm_AlarmManager_get.htm
+          </test_script_entry>
+        </description>
+        <specs>
+          <spec>
+            <spec_assertion category="Tizen Device API Specifications" section="Widget" specification="Widget Packaging and XML Configuration" interface="Widget" usage="true"/>
+            <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>
+            <spec_statement>spec_statement</spec_statement>
+          </spec>
+        </specs>
+        <result_info>
+          <actual_result>FAIL</actual_result>
+          <start>Sat Jan 01 2000 13:43:46 GMT+0900 (KST)</start>
+          <end>Sat Jan 01 2000 13:44:02 GMT+0900 (KST)</end>
+          <stdout>Test time out</stdout>
+        </result_info>
+      </testcase>
+      <testcase component="WebAPI/Tizen/Alarm" execution_type="auto" id="Alarm_AlarmAbsolute_attri_date_01" priority="P1" purpose="check AlarmAbsolute attribute when create with date" status="approved" type="compliance" result="FAIL">
+        <description>
+          <pre_condition/>
+          <post_condition/>
+          <steps>
+            <step order="1">
+              <step_desc>check AlarmAbsolute attribute when create with date
+              </step_desc>
+              <expected>AlarmAbsolute attribute return correct value when
+                create with date
+              </expected>
+            </step>
+          </steps>
+          <test_script_entry test_script_expected_result="0">/opt/webapi-tizen-alarm-tests/Alarm/Alarm_AlarmAbsolute_attri_date.htm?total_num=3&amp;locator_key=id&amp;value=1
+          </test_script_entry>
+        </description>
+        <specs>
+          <spec>
+            <spec_assertion category="Tizen Device API Specifications" section="Widget" specification="Widget Packaging and XML Configuration" interface="Widget" usage="true"/>
+            <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>
+            <spec_statement>spec_statement</spec_statement>
+          </spec>
+        </specs>
+        <result_info>
+          <actual_result>FAIL</actual_result>
+          <start>Sat Jan 01 2000 13:44:02 GMT+0900 (KST)</start>
+          <end>Sat Jan 01 2000 13:44:05 GMT+0900 (KST)</end>
+          <stdout/>
+        </result_info>
+      </testcase>
+      <testcase component="WebAPI/Tizen/Alarm" execution_type="auto" id="Alarm_AlarmManager_add_rel" priority="P1" purpose="check AlarmManager method add: add relative alarm" status="approved" type="compliance" result="FAIL">
+        <description>
+          <pre_condition/>
+          <post_condition/>
+          <steps>
+            <step order="1">
+              <step_desc>check AlarmManager method add: add relative alarm
+              </step_desc>
+              <expected>AlarmManager method add: add relative alarm succeed
+              </expected>
+            </step>
+          </steps>
+          <test_script_entry test_script_expected_result="0">/opt/webapi-tizen-alarm-tests/Alarm/Alarm_AlarmManager_add_rel.htm
+          </test_script_entry>
+        </description>
+        <specs>
+          <spec>
+            <spec_assertion category="Tizen Device API Specifications" section="Widget" specification="Widget Packaging and XML Configuration" interface="Widget" usage="true"/>
+            <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>
+            <spec_statement>spec_statement</spec_statement>
+          </spec>
+        </specs>
+        <result_info>
+          <actual_result>FAIL</actual_result>
+          <start>Sat Jan 01 2000 13:44:05 GMT+0900 (KST)</start>
+          <end>Sat Jan 01 2000 13:44:21 GMT+0900 (KST)</end>
+          <stdout>Test time out</stdout>
+        </result_info>
+      </testcase>
+      <testcase component="WebAPI/Tizen/Alarm" execution_type="auto" id="Alarm_AlarmRelative_attri_delay_02" priority="P1" purpose="check AlarmAbsolute attribute when create with period" status="approved" type="compliance" result="FAIL">
+        <description>
+          <pre_condition/>
+          <post_condition/>
+          <steps>
+            <step order="1">
+              <step_desc>check AlarmRelative attribute when create with delay
+              </step_desc>
+              <expected>AlarmRelative attribute return correct value when
+                create succeed with with delay
+              </expected>
+            </step>
+          </steps>
+          <test_script_entry test_script_expected_result="0">/opt/webapi-tizen-alarm-tests/Alarm/Alarm_AlarmRelative_attri_delay.htm?total_num=2&amp;locator_key=id&amp;value=2
+          </test_script_entry>
+        </description>
+        <specs>
+          <spec>
+            <spec_assertion category="Tizen Device API Specifications" section="Widget" specification="Widget Packaging and XML Configuration" interface="Widget" usage="true"/>
+            <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>
+            <spec_statement>spec_statement</spec_statement>
+          </spec>
+        </specs>
+        <result_info>
+          <actual_result>FAIL</actual_result>
+          <start>Sat Jan 01 2000 13:44:21 GMT+0900 (KST)</start>
+          <end>Sat Jan 01 2000 13:44:23 GMT+0900 (KST)</end>
+          <stdout/>
+        </result_info>
+      </testcase>
+      <testcase component="WebAPI/Tizen/Alarm" execution_type="auto" id="Alarm_AlarmManager_getAll" priority="P1" purpose="check AlarmManager method getAll: default check" status="approved" type="compliance" result="FAIL">
+        <description>
+          <pre_condition/>
+          <post_condition/>
+          <steps>
+            <step order="1">
+              <step_desc>check AlarmManager method getAll: default check
+              </step_desc>
+              <expected>AlarmManager method getAll: default check succeed
+              </expected>
+            </step>
+          </steps>
+          <test_script_entry test_script_expected_result="0">/opt/webapi-tizen-alarm-tests/Alarm/Alarm_AlarmManager_getAll.htm
+          </test_script_entry>
+        </description>
+        <specs>
+          <spec>
+            <spec_assertion category="Tizen Device API Specifications" section="Widget" specification="Widget Packaging and XML Configuration" interface="Widget" usage="true"/>
+            <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>
+            <spec_statement>spec_statement</spec_statement>
+          </spec>
+        </specs>
+        <result_info>
+          <actual_result>FAIL</actual_result>
+          <start>Sat Jan 01 2000 13:44:23 GMT+0900 (KST)</start>
+          <end>Sat Jan 01 2000 13:44:39 GMT+0900 (KST)</end>
+          <stdout>Test time out</stdout>
+        </result_info>
+      </testcase>
+      <testcase component="WebAPI/Tizen/Alarm" execution_type="auto" id="Alarm_AlarmAbsolute_attri_date_03" priority="P1" purpose="check AlarmAbsolute attribute when create with date" status="approved" type="compliance" result="FAIL">
+        <description>
+          <pre_condition/>
+          <post_condition/>
+          <steps>
+            <step order="1">
+              <step_desc>check AlarmAbsolute attribute when create with date
+              </step_desc>
+              <expected>AlarmAbsolute attribute return correct value when
+                create with date
+              </expected>
+            </step>
+          </steps>
+          <test_script_entry test_script_expected_result="0">/opt/webapi-tizen-alarm-tests/Alarm/Alarm_AlarmAbsolute_attri_date.htm?total_num=3&amp;locator_key=id&amp;value=3
+          </test_script_entry>
+        </description>
+        <specs>
+          <spec>
+            <spec_assertion category="Tizen Device API Specifications" section="Widget" specification="Widget Packaging and XML Configuration" interface="Widget" usage="true"/>
+            <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>
+            <spec_statement>spec_statement</spec_statement>
+          </spec>
+        </specs>
+        <result_info>
+          <actual_result>FAIL</actual_result>
+          <start>Sat Jan 01 2000 13:44:39 GMT+0900 (KST)</start>
+          <end>Sat Jan 01 2000 13:44:41 GMT+0900 (KST)</end>
+          <stdout/>
+        </result_info>
+      </testcase>
+      <testcase component="WebAPI/Tizen/Alarm" execution_type="auto" id="Alarm_AlarmAbsolute_getNextScheduledDate_date" priority="P1" purpose="check AlarmAbsolute method getNextScheduledDate when create with date" status="approved" type="compliance" result="FAIL">
+        <description>
+          <pre_condition/>
+          <post_condition/>
+          <steps>
+            <step order="1">
+              <step_desc>check AlarmAbsolute method getNextScheduledDate when
+                create with date
+              </step_desc>
+              <expected>AlarmAbsolute method getNextScheduledDate return
+                correct value when create with date
+              </expected>
+            </step>
+          </steps>
+          <test_script_entry test_script_expected_result="0">/opt/webapi-tizen-alarm-tests/Alarm/Alarm_AlarmAbsolute_getNextScheduledDate_date.htm
+          </test_script_entry>
+        </description>
+        <specs>
+          <spec>
+            <spec_assertion category="Tizen Device API Specifications" section="Widget" specification="Widget Packaging and XML Configuration" interface="Widget" usage="true"/>
+            <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>
+            <spec_statement>spec_statement</spec_statement>
+          </spec>
+        </specs>
+        <result_info>
+          <actual_result>FAIL</actual_result>
+          <start>Sat Jan 01 2000 13:44:41 GMT+0900 (KST)</start>
+          <end>Sat Jan 01 2000 13:44:57 GMT+0900 (KST)</end>
+          <stdout>Test time out</stdout>
+        </result_info>
+      </testcase>
+      <testcase component="WebAPI/Tizen/Alarm" execution_type="auto" id="Alarm_AlarmAbsolute_constructor_date" priority="P1" purpose="check AlarmAbsolute create constructor with date" status="approved" type="compliance" result="FAIL">
+        <description>
+          <pre_condition/>
+          <post_condition/>
+          <steps>
+            <step order="1">
+              <step_desc>check AlarmAbsolute create constructor with date
+              </step_desc>
+              <expected>AlarmAbsolute create succeed with constructor with date
+              </expected>
+            </step>
+          </steps>
+          <test_script_entry test_script_expected_result="0">/opt/webapi-tizen-alarm-tests/Alarm/Alarm_AlarmAbsolute_constructor_date.htm
+          </test_script_entry>
+        </description>
+        <specs>
+          <spec>
+            <spec_assertion category="Tizen Device API Specifications" section="Widget" specification="Widget Packaging and XML Configuration" interface="Widget" usage="true"/>
+            <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>
+            <spec_statement>spec_statement</spec_statement>
+          </spec>
+        </specs>
+        <result_info>
+          <actual_result>FAIL</actual_result>
+          <start>Sat Jan 01 2000 13:44:57 GMT+0900 (KST)</start>
+          <end>Sat Jan 01 2000 13:45:13 GMT+0900 (KST)</end>
+          <stdout>Test time out</stdout>
+        </result_info>
+      </testcase>
+      <testcase component="WebAPI/Tizen/Alarm" execution_type="auto" id="Alarm_AlarmRelative_getRemainingSeconds_delay" priority="P1" purpose="check AlarmRelative method getNextScheduleddelay when create with delay" status="approved" type="compliance" result="FAIL">
+        <description>
+          <pre_condition/>
+          <post_condition/>
+          <steps>
+            <step order="1">
+              <step_desc>check AlarmRelative method getNextScheduleddelay when
+                create with delay
+              </step_desc>
+              <expected>AlarmRelative method getNextScheduleddelay return
+                correct value when create succeed with with delay
+              </expected>
+            </step>
+          </steps>
+          <test_script_entry test_script_expected_result="0">/opt/webapi-tizen-alarm-tests/Alarm/Alarm_AlarmRelative_getRemainingSeconds_delay.htm
+          </test_script_entry>
+        </description>
+        <specs>
+          <spec>
+            <spec_assertion category="Tizen Device API Specifications" section="Widget" specification="Widget Packaging and XML Configuration" interface="Widget" usage="true"/>
+            <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>
+            <spec_statement>spec_statement</spec_statement>
+          </spec>
+        </specs>
+        <result_info>
+          <actual_result>FAIL</actual_result>
+          <start>Sat Jan 01 2000 13:45:13 GMT+0900 (KST)</start>
+          <end>Sat Jan 01 2000 13:45:30 GMT+0900 (KST)</end>
+          <stdout>Test time out</stdout>
+        </result_info>
+      </testcase>
+      <testcase component="WebAPI/Tizen/Alarm" execution_type="auto" id="Alarm_AlarmRelative_attri_delay_01" priority="P1" purpose="check AlarmAbsolute attribute when create with period" status="approved" type="compliance" result="FAIL">
+        <description>
+          <pre_condition/>
+          <post_condition/>
+          <steps>
+            <step order="1">
+              <step_desc>check AlarmRelative attribute when create with delay
+              </step_desc>
+              <expected>AlarmRelative attribute return correct value when
+                create succeed with with delay
+              </expected>
+            </step>
+          </steps>
+          <test_script_entry test_script_expected_result="0">/opt/webapi-tizen-alarm-tests/Alarm/Alarm_AlarmRelative_attri_delay.htm?total_num=2&amp;locator_key=id&amp;value=1
+          </test_script_entry>
+        </description>
+        <specs>
+          <spec>
+            <spec_assertion category="Tizen Device API Specifications" section="Widget" specification="Widget Packaging and XML Configuration" interface="Widget" usage="true"/>
+            <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>
+            <spec_statement>spec_statement</spec_statement>
+          </spec>
+        </specs>
+        <result_info>
+          <actual_result>FAIL</actual_result>
+          <start>Sat Jan 01 2000 13:45:30 GMT+0900 (KST)</start>
+          <end>Sat Jan 01 2000 13:45:32 GMT+0900 (KST)</end>
+          <stdout/>
+        </result_info>
+      </testcase>
+      <testcase component="WebAPI/Tizen/Alarm" execution_type="auto" id="Alarm_AlarmManager_add_abs" priority="P1" purpose="check AlarmManager method add: add absolute alarm" status="approved" type="compliance" result="FAIL">
+        <description>
+          <pre_condition/>
+          <post_condition/>
+          <steps>
+            <step order="1">
+              <step_desc>check AlarmManager method add: add absolute alarm
+              </step_desc>
+              <expected>AlarmManager method add: add absolute alarm succeed
+              </expected>
+            </step>
+          </steps>
+          <test_script_entry test_script_expected_result="0">/opt/webapi-tizen-alarm-tests/Alarm/Alarm_AlarmManager_add_abs.htm
+          </test_script_entry>
+        </description>
+        <specs>
+          <spec>
+            <spec_assertion category="Tizen Device API Specifications" section="Widget" specification="Widget Packaging and XML Configuration" interface="Widget" usage="true"/>
+            <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>
+            <spec_statement>spec_statement</spec_statement>
+          </spec>
+        </specs>
+        <result_info>
+          <actual_result>FAIL</actual_result>
+          <start>Sat Jan 01 2000 13:45:32 GMT+0900 (KST)</start>
+          <end>Sat Jan 01 2000 13:45:48 GMT+0900 (KST)</end>
+          <stdout>Test time out</stdout>
+        </result_info>
+      </testcase>
+      <testcase component="WebAPI/Tizen/Alarm" execution_type="auto" id="Alarm_AlarmAbsolute_attri_date_02" priority="P1" purpose="check AlarmAbsolute attribute when create with date" status="approved" type="compliance" result="FAIL">
+        <description>
+          <pre_condition/>
+          <post_condition/>
+          <steps>
+            <step order="1">
+              <step_desc>check AlarmAbsolute attribute when create with date
+              </step_desc>
+              <expected>AlarmAbsolute attribute return correct value when
+                create with date
+              </expected>
+            </step>
+          </steps>
+          <test_script_entry test_script_expected_result="0">/opt/webapi-tizen-alarm-tests/Alarm/Alarm_AlarmAbsolute_attri_date.htm?total_num=3&amp;locator_key=id&amp;value=2
+          </test_script_entry>
+        </description>
+        <specs>
+          <spec>
+            <spec_assertion category="Tizen Device API Specifications" section="Widget" specification="Widget Packaging and XML Configuration" interface="Widget" usage="true"/>
+            <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>
+            <spec_statement>spec_statement</spec_statement>
+          </spec>
+        </specs>
+        <result_info>
+          <actual_result>FAIL</actual_result>
+          <start>Sat Jan 01 2000 13:45:48 GMT+0900 (KST)</start>
+          <end>Sat Jan 01 2000 13:45:50 GMT+0900 (KST)</end>
+          <stdout/>
+        </result_info>
+      </testcase>
+      <testcase component="WebAPI/Tizen/Alarm" execution_type="auto" id="Alarm_AlarmManager_removeAll" priority="P1" purpose="check AlarmManager method removeAll: default check" status="approved" type="compliance" result="FAIL">
+        <description>
+          <pre_condition/>
+          <post_condition/>
+          <steps>
+            <step order="1">
+              <step_desc>check AlarmManager method removeAll: default check
+              </step_desc>
+              <expected>AlarmManager method removeAll: default check succeed
+              </expected>
+            </step>
+          </steps>
+          <test_script_entry test_script_expected_result="0">/opt/webapi-tizen-alarm-tests/Alarm/Alarm_AlarmManager_removeAll.htm
+          </test_script_entry>
+        </description>
+        <specs>
+          <spec>
+            <spec_assertion category="Tizen Device API Specifications" section="Widget" specification="Widget Packaging and XML Configuration" interface="Widget" usage="true"/>
+            <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>
+            <spec_statement>spec_statement</spec_statement>
+          </spec>
+        </specs>
+        <result_info>
+          <actual_result>FAIL</actual_result>
+          <start>Sat Jan 01 2000 13:45:50 GMT+0900 (KST)</start>
+          <end>Sat Jan 01 2000 13:46:06 GMT+0900 (KST)</end>
+          <stdout>Test time out</stdout>
+        </result_info>
+      </testcase>
+      <testcase component="WebAPI/Tizen/Alarm" execution_type="auto" id="Alarm_AlarmManager_remove" priority="P1" purpose="check AlarmManager method remove: default check" status="approved" type="compliance" result="FAIL">
+        <description>
+          <pre_condition/>
+          <post_condition/>
+          <steps>
+            <step order="1">
+              <step_desc>check AlarmManager method remove: default check
+              </step_desc>
+              <expected>AlarmManager method remove: default check succeed
+              </expected>
+            </step>
+          </steps>
+          <test_script_entry test_script_expected_result="0">/opt/webapi-tizen-alarm-tests/Alarm/Alarm_AlarmManager_remove.htm
+          </test_script_entry>
+        </description>
+        <specs>
+          <spec>
+            <spec_assertion category="Tizen Device API Specifications" section="Widget" specification="Widget Packaging and XML Configuration" interface="Widget" usage="true"/>
+            <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>
+            <spec_statement>spec_statement</spec_statement>
+          </spec>
+        </specs>
+        <result_info>
+          <actual_result>FAIL</actual_result>
+          <start>Sat Jan 01 2000 13:46:06 GMT+0900 (KST)</start>
+          <end>Sat Jan 01 2000 13:46:22 GMT+0900 (KST)</end>
+          <stdout>Test time out</stdout>
+        </result_info>
+      </testcase>
+      <testcase component="WebAPI/Tizen/Alarm" execution_type="auto" id="Alarm_AlarmManagerObject_exist" priority="P1" purpose="check AlarmManagerObject existance" status="approved" type="compliance" result="FAIL">
+        <description>
+          <pre_condition/>
+          <post_condition/>
+          <steps>
+            <step order="1">
+              <step_desc>check AlarmManagerObject exist</step_desc>
+              <expected>AlarmManagerObject exist</expected>
+            </step>
+          </steps>
+          <test_script_entry test_script_expected_result="">/opt/webapi-tizen-alarm-tests/Alarm/Alarm_AlarmManagerObject_exist.htm
+          </test_script_entry>
+        </description>
+        <specs>
+          <spec>
+            <spec_assertion category="Tizen Device API Specifications" section="Widget" specification="Widget Packaging and XML Configuration" interface="Widget" usage="true"/>
+            <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>
+            <spec_statement>spec_statement</spec_statement>
+          </spec>
+        </specs>
+        <result_info>
+          <actual_result>FAIL</actual_result>
+          <start>Sat Jan 01 2000 13:46:22 GMT+0900 (KST)</start>
+          <end>Sat Jan 01 2000 13:46:38 GMT+0900 (KST)</end>
+          <stdout>Test time out</stdout>
+        </result_info>
+      </testcase>
+      <testcase component="WebAPI/Tizen/Alarm" execution_type="auto" id="Alarm_AlarmManager_const_check_01" priority="P1" purpose="Check AlarmManager constants:PERIOD_MINUTE" status="approved" type="compliance" result="FAIL">
+        <description>
+          <pre_condition/>
+          <post_condition/>
+          <steps>
+            <step order="1">
+              <step_desc>Check AlarmManager constants:</step_desc>
+              <expected>AlarmManager constants value is correct:</expected>
+            </step>
+          </steps>
+          <test_script_entry test_script_expected_result="0">/opt/webapi-tizen-alarm-tests/Alarm/Alarm_AlarmManager_const_check.htm?total_num=4&amp;locator_key=id&amp;value=1
+          </test_script_entry>
+        </description>
+        <specs>
+          <spec>
+            <spec_assertion category="Tizen Device API Specifications" section="Widget" specification="Widget Packaging and XML Configuration" interface="Widget" usage="true"/>
+            <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>
+            <spec_statement>spec_statement</spec_statement>
+          </spec>
+        </specs>
+        <result_info>
+          <actual_result>FAIL</actual_result>
+          <start>Sat Jan 01 2000 13:46:38 GMT+0900 (KST)</start>
+          <end>Sat Jan 01 2000 13:46:40 GMT+0900 (KST)</end>
+          <stdout>Can't find variable: tizen</stdout>
+        </result_info>
+      </testcase>
+      <testcase component="WebAPI/Tizen/Alarm" execution_type="auto" id="Alarm_AlarmManager_const_check_02" priority="P1" purpose="Check AlarmManager constants:PERIOD_HOUR" status="approved" type="compliance" result="FAIL">
+        <description>
+          <pre_condition/>
+          <post_condition/>
+          <steps>
+            <step order="1">
+              <step_desc>Check AlarmManager constants:</step_desc>
+              <expected>AlarmManager constants value is correct:</expected>
+            </step>
+          </steps>
+          <test_script_entry test_script_expected_result="0">/opt/webapi-tizen-alarm-tests/Alarm/Alarm_AlarmManager_const_check.htm?total_num=4&amp;locator_key=id&amp;value=2
+          </test_script_entry>
+        </description>
+        <specs>
+          <spec>
+            <spec_assertion category="Tizen Device API Specifications" section="Widget" specification="Widget Packaging and XML Configuration" interface="Widget" usage="true"/>
+            <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>
+            <spec_statement>spec_statement</spec_statement>
+          </spec>
+        </specs>
+        <result_info>
+          <actual_result>FAIL</actual_result>
+          <start>Sat Jan 01 2000 13:46:40 GMT+0900 (KST)</start>
+          <end>Sat Jan 01 2000 13:46:42 GMT+0900 (KST)</end>
+          <stdout>Can't find variable: tizen</stdout>
+        </result_info>
+      </testcase>
+      <testcase component="WebAPI/Tizen/Alarm" execution_type="auto" id="Alarm_AlarmManager_const_check_03" priority="P1" purpose="Check AlarmManager constants:PERIOD_DAY" status="approved" type="compliance" result="FAIL">
+        <description>
+          <pre_condition/>
+          <post_condition/>
+          <steps>
+            <step order="1">
+              <step_desc>Check AlarmManager constants:</step_desc>
+              <expected>AlarmManager constants value is correct:</expected>
+            </step>
+          </steps>
+          <test_script_entry test_script_expected_result="0">/opt/webapi-tizen-alarm-tests/Alarm/Alarm_AlarmManager_const_check.htm?total_num=4&amp;locator_key=id&amp;value=3
+          </test_script_entry>
+        </description>
+        <specs>
+          <spec>
+            <spec_assertion category="Tizen Device API Specifications" section="Widget" specification="Widget Packaging and XML Configuration" interface="Widget" usage="true"/>
+            <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>
+            <spec_statement>spec_statement</spec_statement>
+          </spec>
+        </specs>
+        <result_info>
+          <actual_result>FAIL</actual_result>
+          <start>Sat Jan 01 2000 13:46:42 GMT+0900 (KST)</start>
+          <end>Sat Jan 01 2000 13:46:44 GMT+0900 (KST)</end>
+          <stdout>Can't find variable: tizen</stdout>
+        </result_info>
+      </testcase>
+      <testcase component="WebAPI/Tizen/Alarm" execution_type="auto" id="Alarm_AlarmManager_const_check_04" priority="P1" purpose="Check AlarmManager constants:PERIOD_WEEK" status="approved" type="compliance" result="FAIL">
+        <description>
+          <pre_condition/>
+          <post_condition/>
+          <steps>
+            <step order="1">
+              <step_desc>Check AlarmManager constants:</step_desc>
+              <expected>AlarmManager constants value is correct:</expected>
+            </step>
+          </steps>
+          <test_script_entry test_script_expected_result="0">/opt/webapi-tizen-alarm-tests/Alarm/Alarm_AlarmManager_const_check.htm?total_num=4&amp;locator_key=id&amp;value=4
+          </test_script_entry>
+        </description>
+        <specs>
+          <spec>
+            <spec_assertion category="Tizen Device API Specifications" section="Widget" specification="Widget Packaging and XML Configuration" interface="Widget" usage="true"/>
+            <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>
+            <spec_statement>spec_statement</spec_statement>
+          </spec>
+        </specs>
+        <result_info>
+          <actual_result>FAIL</actual_result>
+          <start>Sat Jan 01 2000 13:46:44 GMT+0900 (KST)</start>
+          <end>Sat Jan 01 2000 13:46:46 GMT+0900 (KST)</end>
+          <stdout>Can't find variable: tizen</stdout>
+        </result_info>
+      </testcase>
+    </set>
+    <set name="Alarm3">
+      <testcase component="WebAPI/Tizen/Alarm" execution_type="auto" id="Alarm_AlarmRelative_constructor_delay" priority="P1" purpose="check AlarmRelative attribute when create with delay" status="approved" type="compliance" result="PASS">
+        <description>
+          <pre_condition/>
+          <post_condition/>
+          <steps>
+            <step order="1">
+              <step_desc>check AlarmRelative create constructor with delay
+              </step_desc>
+              <expected>AlarmRelative create succeed with constructor with
+                delay
+              </expected>
+            </step>
+          </steps>
+          <test_script_entry test_script_expected_result="0">/opt/webapi-tizen-alarm-tests/Alarm/Alarm_AlarmRelative_constructor_delay.htm
+          </test_script_entry>
+        </description>
+        <specs>
+          <spec>
+            <spec_assertion category="Tizen Device API Specifications" section="Widget" specification="Widget Packaging and XML Configuration" interface="Widget" usage="true"/>
+            <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>
+            <spec_statement>spec_statement</spec_statement>
+          </spec>
+        </specs>
+        <result_info>
+          <actual_result>PASS</actual_result>
+          <start>Sat Jan 01 2000 13:43:44 GMT+0900 (KST)</start>
+          <end>Sat Jan 01 2000 13:43:46 GMT+0900 (KST)</end>
+          <stdout/>
+        </result_info>
+      </testcase>
+      <testcase component="WebAPI/Tizen/Alarm" execution_type="auto" id="Alarm_AlarmManager_get" priority="P1" purpose="check AlarmManager method removeAll: without input attribute" status="approved" type="compliance" result="FAIL">
+        <description>
+          <pre_condition/>
+          <post_condition/>
+          <steps>
+            <step order="1">
+              <step_desc>check AlarmManager method get: default check
+              </step_desc>
+              <expected>AlarmManager method get: default check succeed
+              </expected>
+            </step>
+          </steps>
+          <test_script_entry test_script_expected_result="0">/opt/webapi-tizen-alarm-tests/Alarm/Alarm_AlarmManager_get.htm
+          </test_script_entry>
+        </description>
+        <specs>
+          <spec>
+            <spec_assertion category="Tizen Device API Specifications" section="Widget" specification="Widget Packaging and XML Configuration" interface="Widget" usage="true"/>
+            <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>
+            <spec_statement>spec_statement</spec_statement>
+          </spec>
+        </specs>
+        <result_info>
+          <actual_result>FAIL</actual_result>
+          <start>Sat Jan 01 2000 13:43:46 GMT+0900 (KST)</start>
+          <end>Sat Jan 01 2000 13:44:02 GMT+0900 (KST)</end>
+          <stdout>Test time out</stdout>
+        </result_info>
+      </testcase>
+      <testcase component="WebAPI/Tizen/Alarm" execution_type="auto" id="Alarm_AlarmAbsolute_attri_date_01" priority="P1" purpose="check AlarmAbsolute attribute when create with date" status="approved" type="compliance" result="FAIL">
+        <description>
+          <pre_condition/>
+          <post_condition/>
+          <steps>
+            <step order="1">
+              <step_desc>check AlarmAbsolute attribute when create with date
+              </step_desc>
+              <expected>AlarmAbsolute attribute return correct value when
+                create with date
+              </expected>
+            </step>
+          </steps>
+          <test_script_entry test_script_expected_result="0">/opt/webapi-tizen-alarm-tests/Alarm/Alarm_AlarmAbsolute_attri_date.htm?total_num=3&amp;locator_key=id&amp;value=1
+          </test_script_entry>
+        </description>
+        <specs>
+          <spec>
+            <spec_assertion category="Tizen Device API Specifications" section="Widget" specification="Widget Packaging and XML Configuration" interface="Widget" usage="true"/>
+            <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>
+            <spec_statement>spec_statement</spec_statement>
+          </spec>
+        </specs>
+        <result_info>
+          <actual_result>FAIL</actual_result>
+          <start>Sat Jan 01 2000 13:44:02 GMT+0900 (KST)</start>
+          <end>Sat Jan 01 2000 13:44:05 GMT+0900 (KST)</end>
+          <stdout/>
+        </result_info>
+      </testcase>
+      <testcase component="WebAPI/Tizen/Alarm" execution_type="auto" id="Alarm_AlarmManager_add_rel" priority="P1" purpose="check AlarmManager method add: add relative alarm" status="approved" type="compliance" result="FAIL">
+        <description>
+          <pre_condition/>
+          <post_condition/>
+          <steps>
+            <step order="1">
+              <step_desc>check AlarmManager method add: add relative alarm
+              </step_desc>
+              <expected>AlarmManager method add: add relative alarm succeed
+              </expected>
+            </step>
+          </steps>
+          <test_script_entry test_script_expected_result="0">/opt/webapi-tizen-alarm-tests/Alarm/Alarm_AlarmManager_add_rel.htm
+          </test_script_entry>
+        </description>
+        <specs>
+          <spec>
+            <spec_assertion category="Tizen Device API Specifications" section="Widget" specification="Widget Packaging and XML Configuration" interface="Widget" usage="true"/>
+            <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>
+            <spec_statement>spec_statement</spec_statement>
+          </spec>
+        </specs>
+        <result_info>
+          <actual_result>FAIL</actual_result>
+          <start>Sat Jan 01 2000 13:44:05 GMT+0900 (KST)</start>
+          <end>Sat Jan 01 2000 13:44:21 GMT+0900 (KST)</end>
+          <stdout>Test time out</stdout>
+        </result_info>
+      </testcase>
+      <testcase component="WebAPI/Tizen/Alarm" execution_type="auto" id="Alarm_AlarmRelative_attri_delay_02" priority="P1" purpose="check AlarmAbsolute attribute when create with period" status="approved" type="compliance" result="FAIL">
+        <description>
+          <pre_condition/>
+          <post_condition/>
+          <steps>
+            <step order="1">
+              <step_desc>check AlarmRelative attribute when create with delay
+              </step_desc>
+              <expected>AlarmRelative attribute return correct value when
+                create succeed with with delay
+              </expected>
+            </step>
+          </steps>
+          <test_script_entry test_script_expected_result="0">/opt/webapi-tizen-alarm-tests/Alarm/Alarm_AlarmRelative_attri_delay.htm?total_num=2&amp;locator_key=id&amp;value=2
+          </test_script_entry>
+        </description>
+        <specs>
+          <spec>
+            <spec_assertion category="Tizen Device API Specifications" section="Widget" specification="Widget Packaging and XML Configuration" interface="Widget" usage="true"/>
+            <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>
+            <spec_statement>spec_statement</spec_statement>
+          </spec>
+        </specs>
+        <result_info>
+          <actual_result>FAIL</actual_result>
+          <start>Sat Jan 01 2000 13:44:21 GMT+0900 (KST)</start>
+          <end>Sat Jan 01 2000 13:44:23 GMT+0900 (KST)</end>
+          <stdout/>
+        </result_info>
+      </testcase>
+    </set>
+  </suite>
+</test_definition>
diff --git a/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite2.0/xsd/test_definition.xsd b/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite2.0/xsd/test_definition.xsd
new file mode 100755 (executable)
index 0000000..f47b778
--- /dev/null
@@ -0,0 +1,263 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
+  <xs:element name="suite">
+    <xs:complexType>
+      <xs:sequence minOccurs="1" maxOccurs="unbounded">
+        <xs:element ref="set" minOccurs="0" maxOccurs="unbounded"/>
+      </xs:sequence>
+      <xs:attributeGroup ref="set_attribute_group"/>
+      <xs:attribute name="launcher" type="xs:string"/>
+    </xs:complexType>
+    <xs:unique name="uniqueSetName">
+      <xs:selector xpath=".//set"/>
+      <xs:field xpath="@name"/>
+    </xs:unique>
+  </xs:element>
+  <xs:element name="set">
+    <xs:complexType>
+      <xs:sequence>
+        <xs:element name="capabilities" type="CapabilitiesType" minOccurs="0" maxOccurs="1"/>
+        <xs:sequence minOccurs="1" maxOccurs="unbounded">
+          <xs:element ref="testcase" minOccurs="0" maxOccurs="unbounded"/>
+        </xs:sequence>
+      </xs:sequence>
+      <xs:attributeGroup ref="set_attribute_group"/>
+      <xs:attribute name="launcher" type="xs:string"/>
+      <xs:attribute name="set_debug_msg" type="xs:string"/>
+    </xs:complexType>
+    <xs:unique name="uniqueCaseName">
+      <xs:selector xpath=".//testcase"/>
+      <xs:field xpath="@id"/>
+    </xs:unique>
+  </xs:element>
+  <xs:element name="testcase">
+    <xs:complexType>
+      <xs:sequence minOccurs="1">
+        <xs:element ref="description"/>
+        <xs:element name="categories" type="categories" minOccurs="0" maxOccurs="1"/>
+        <xs:element name="measurement" type="measurementType" minOccurs="0" maxOccurs="unbounded"/>
+        <xs:element name="series" type="seriesType" minOccurs="0" maxOccurs="unbounded"/>
+        <xs:element name="specs" type="specsType" minOccurs="0" maxOccurs="1"/>
+        <xs:element name="result_info" type="result_info_type" minOccurs="0"/>
+      </xs:sequence>
+      <xs:attributeGroup ref="case_attribute_group"/>
+    </xs:complexType>
+  </xs:element>
+  <xs:element name="steps">
+    <xs:complexType>
+      <xs:sequence minOccurs="0" maxOccurs="unbounded">
+        <xs:element ref="step"/>
+      </xs:sequence>
+    </xs:complexType>
+    <xs:unique name="uniqueStepName">
+      <xs:selector xpath=".//step"/>
+      <xs:field xpath="@order"/>
+    </xs:unique>
+  </xs:element>
+  <xs:attributeGroup name="set_attribute_group">
+    <xs:attribute name="name" type="xs:anyURI" use="required"/>
+    <xs:attribute name="type" type="xs:string"/>
+  </xs:attributeGroup>
+  <xs:attributeGroup name="case_attribute_group">
+    <xs:attribute name="id" use="required">
+      <xs:simpleType>
+        <xs:restriction base="xs:string">
+          <xs:minLength value="1"/>
+          <xs:whiteSpace value="collapse"/>
+        </xs:restriction>
+      </xs:simpleType>
+    </xs:attribute>
+    <xs:attribute name="priority" type="priority_simple_type" use="required"/>
+    <xs:attribute name="execution_type" type="execution_type_simple_type" use="required"/>
+    <xs:attribute name="component" type="xs:string"/>
+    <xs:attribute name="requirement_ref" type="xs:anyURI" use="optional"/>
+    <xs:attribute name="status" type="status_type" use="required"/>
+    <xs:attribute name="type" type="case_type_type" use="required"/>
+    <xs:attribute name="purpose" type="xs:string"/>
+    <xs:attribute name="result" type="xs:string"/>
+    <xs:attribute name="onload_delay" type="xs:int" use="optional" default="3"/>
+  </xs:attributeGroup>
+  <xs:simpleType name="priority_simple_type">
+    <xs:restriction base="xs:string">
+      <xs:enumeration value="P0"/>
+      <xs:enumeration value="P1"/>
+      <xs:enumeration value="P2"/>
+      <xs:enumeration value="P3"/>
+      <xs:enumeration value="P4"/>
+    </xs:restriction>
+  </xs:simpleType>
+  <xs:simpleType name="execution_type_simple_type">
+    <xs:restriction base="xs:string">
+      <xs:enumeration value="auto"/>
+      <xs:enumeration value="manual"/>
+    </xs:restriction>
+  </xs:simpleType>
+  <xs:simpleType name="status_type">
+    <xs:restriction base="xs:string">
+      <xs:enumeration value="designed"/>
+      <xs:enumeration value="ready"/>
+      <xs:enumeration value="approved"/>
+    </xs:restriction>
+  </xs:simpleType>
+  <xs:simpleType name="case_type_type">
+    <xs:restriction base="xs:string">
+      <xs:enumeration value="functional_positive"/>
+      <xs:enumeration value="functional_negative"/>
+      <xs:enumeration value="security"/>
+      <xs:enumeration value="performance"/>
+      <xs:enumeration value="reliability"/>
+      <xs:enumeration value="portability"/>
+      <xs:enumeration value="maintainability"/>
+      <xs:enumeration value="compliance"/>
+      <xs:enumeration value="user_experience"/>
+      <xs:enumeration value="undefined"/>
+    </xs:restriction>
+  </xs:simpleType>
+  <xs:element name="purpose" type="xs:anySimpleType"/>
+  <xs:element name="notes" type="xs:string"/>
+  <xs:element name="pre_condition" type="xs:string"/>
+  <xs:element name="post_condition" type="xs:string"/>
+  <xs:element name="description">
+    <xs:complexType>
+      <xs:sequence minOccurs="1" maxOccurs="unbounded">
+        <xs:choice minOccurs="0" maxOccurs="1">
+          <xs:element ref="notes"/>
+        </xs:choice>
+        <xs:choice minOccurs="0" maxOccurs="1">
+          <xs:element ref="pre_condition"/>
+        </xs:choice>
+        <xs:choice minOccurs="0" maxOccurs="1">
+          <xs:element ref="post_condition"/>
+        </xs:choice>
+        <xs:element ref="steps" minOccurs="1" maxOccurs="1"/>
+        <xs:choice minOccurs="0" maxOccurs="1">
+          <xs:element ref="test_script_entry"/>
+        </xs:choice>
+      </xs:sequence>
+    </xs:complexType>
+  </xs:element>
+  <xs:element name="step">
+    <xs:complexType>
+      <xs:sequence>
+        <xs:element name="step_desc" type="xs:string"/>
+        <xs:element name="expected" type="xs:string"/>
+      </xs:sequence>
+      <xs:attribute name="order" type="xs:int"/>
+    </xs:complexType>
+  </xs:element>
+  <xs:element name="test_script_entry">
+    <xs:complexType>
+      <xs:simpleContent>
+        <xs:extension base="xs:string">
+          <xs:attribute name="test_script_expected_result" type="xs:string" default="0"/>
+          <xs:attribute name="timeout" type="xs:int" default="90"/>
+          <xs:attribute name="location" type="xs:string" default="device"/>
+        </xs:extension>
+      </xs:simpleContent>
+    </xs:complexType>
+  </xs:element>
+  <xs:complexType name="result_info_type">
+    <xs:sequence minOccurs="0">
+      <xs:element name="actual_result" type="xs:string"/>
+      <xs:element name="start" type="xs:string"/>
+      <xs:element name="end" type="xs:string"/>
+      <xs:element name="stdout" type="xs:string" minOccurs="0"/>
+      <xs:element name="stderr" type="xs:string" minOccurs="0"/>
+    </xs:sequence>
+  </xs:complexType>
+  <xs:complexType name="measurementType">
+    <xs:attribute name="name" type="xs:string"/>
+    <xs:attribute name="value" type="xs:string"/>
+    <xs:attribute name="unit" type="xs:string"/>
+    <xs:attribute name="target" type="xs:string"/>
+    <xs:attribute name="failure" type="xs:string"/>
+    <xs:attribute name="power" type="xs:string"/>
+  </xs:complexType>
+  <xs:complexType name="seriesType">
+    <xs:sequence>
+      <xs:element name="measurement" type="simpleMeasurementType" minOccurs="1" maxOccurs="unbounded"/>
+    </xs:sequence>
+    <xs:attribute name="name" type="xs:string"/>
+    <xs:attribute name="group" type="xs:string"/>
+    <xs:attribute name="unit" type="xs:string"/>
+    <xs:attribute name="interval" type="xs:string"/>
+    <xs:attribute name="interval_unit" type="xs:string"/>
+    <xs:attribute name="power" type="xs:string"/>
+  </xs:complexType>
+  <xs:complexType name="simpleMeasurementType">
+    <xs:attribute name="value" type="xs:string"/>
+    <xs:attribute name="file" type="xs:string"/>
+  </xs:complexType>
+  <xs:complexType name="categories">
+    <xs:sequence>
+      <xs:element name="category" type="xs:string" maxOccurs="unbounded" minOccurs="0"/>
+    </xs:sequence>
+  </xs:complexType>
+  <xs:element name="test_definition">
+    <xs:complexType>
+      <xs:sequence minOccurs="1" maxOccurs="unbounded">
+        <xs:element name="environment" type="BuildInfoType" minOccurs="0"/>
+        <xs:element name="summary" type="summaryType" minOccurs="0"/>
+        <xs:element ref="suite" minOccurs="1" maxOccurs="unbounded"/>
+      </xs:sequence>
+    </xs:complexType>
+    <xs:unique name="uniqueSuiteName">
+      <xs:selector xpath=".//suite"/>
+      <xs:field xpath="@name"/>
+    </xs:unique>
+  </xs:element>
+  <xs:complexType name="BuildInfoType">
+    <xs:sequence>
+      <xs:element name="other" type="xs:string"/>
+    </xs:sequence>
+    <xs:attribute name="device_name" type="xs:string"/>
+    <xs:attribute name="device_model" type="xs:string"/>
+    <xs:attribute name="os_version" type="xs:string"/>
+    <xs:attribute name="device_id" type="xs:string"/>
+    <xs:attribute name="firmware_version" type="xs:string"/>
+    <xs:attribute name="screen_size" type="xs:string"/>
+    <xs:attribute name="resolution" type="xs:string"/>
+    <xs:attribute name="host" type="xs:string"/>
+    <xs:attribute name="cts_version" type="xs:string"/>
+    <xs:attribute name="build_id" type="xs:string"/>
+  </xs:complexType>
+  <xs:complexType name="summaryType">
+    <xs:sequence>
+      <xs:element name="start_at" type="xs:string"/>
+      <xs:element name="end_at" type="xs:string"/>
+    </xs:sequence>
+    <xs:attribute name="test_plan_name" type="xs:string"/>
+  </xs:complexType>
+  <xs:complexType name="specsType">
+    <xs:sequence>
+      <xs:element name="spec" type="specType" maxOccurs="unbounded"/>
+    </xs:sequence>
+  </xs:complexType>
+  <xs:complexType name="specType">
+    <xs:sequence>
+      <xs:element name="spec_assertion" type="spec_assertionType"/>
+      <xs:element name="spec_url" type="xs:string"/>
+      <xs:element name="spec_statement" type="xs:string"/>
+    </xs:sequence>
+  </xs:complexType>
+  <xs:complexType name="spec_assertionType">
+    <xs:attribute name="category" type="xs:string" use="required"/>
+    <xs:attribute name="section" type="xs:string" use="required"/>
+    <xs:attribute name="specification" type="xs:string" use="required"/>
+    <xs:attribute name="interface" type="xs:string" use="required"/>
+    <xs:attribute name="element_name" type="xs:string" use="optional"/>
+    <xs:attribute name="usage" type="xs:boolean" default="false"/>
+    <xs:attribute name="element_type" type="xs:string"/>
+  </xs:complexType>
+  <xs:complexType name="CapabilitiesType">
+    <xs:sequence>
+      <xs:element name="capability" type="CapabilityType" minOccurs="1" maxOccurs="unbounded"/>
+    </xs:sequence>
+  </xs:complexType>
+  <xs:complexType name="CapabilityType">
+    <xs:sequence minOccurs="0">
+      <xs:element name="value" type="xs:string"/>
+    </xs:sequence>
+    <xs:attribute name="name" type="xs:string" use="required"/>
+  </xs:complexType>
+</xs:schema>
diff --git a/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite2.0/xsd/testcase.xsl b/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite2.0/xsd/testcase.xsl
new file mode 100755 (executable)
index 0000000..fb32685
--- /dev/null
@@ -0,0 +1,200 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
+  <xsl:output method="html" version="1.0" encoding="UTF-8" indent="yes"/>
+  <xsl:template match="/">
+    <html>
+      <STYLE type="text/css">
+        @import "tests.css";
+      </STYLE>
+      <head>
+        <script type="text/javascript" src="jquery.min.js"/>
+      </head>
+      <body>
+        <div id="testcasepage">
+          <div id="title">
+            <table>
+              <tr>
+                <td>
+                  <h1>Test Cases</h1>
+                </td>
+              </tr>
+            </table>
+          </div>
+          <div id="suites">
+            <a name="contents"/>
+            <table>
+              <tr>
+                <th>Test Suite</th>
+                <th>Total</th>
+                <th>Auto</th>
+                <th>Manual</th>
+              </tr>
+              <tr>
+                <td>
+                  Total
+                </td>
+                <td>
+                  <xsl:value-of select="count(test_definition/suite/set//testcase)"/>
+                </td>
+                <td>
+                  <xsl:value-of select="count(test_definition/suite/set//testcase[@execution_type = 'auto'])"/>
+                </td>
+                <td>
+                  <xsl:value-of select="count(test_definition/suite/set//testcase[@execution_type != 'auto'])"/>
+                </td>
+              </tr>
+              <xsl:for-each select="test_definition/suite">
+                <tr>
+                  <td>
+                    <a>
+                      <xsl:attribute name="href">
+                        #<xsl:value-of select="@name"/>
+                      </xsl:attribute>
+                      <xsl:value-of select="@name"/>
+                    </a>
+                  </td>
+                  <td>
+                    <xsl:value-of select="count(set//testcase)"/>
+                  </td>
+                  <td>
+                    <xsl:value-of select="count(set/testcase[@execution_type = 'auto'])"/>
+                  </td>
+                  <td>
+                    <xsl:value-of select="count(set/testcase[@execution_type != 'auto'])"/>
+                  </td>
+                </tr>
+              </xsl:for-each>
+            </table>
+          </div>
+          <div id="title">
+            <table>
+              <tr>
+                <td class="title">
+                  <h1>Detailed Test Cases</h1>
+                </td>
+              </tr>
+            </table>
+          </div>
+          <div id="cases">
+            <xsl:for-each select="test_definition/suite">
+              <xsl:sort select="@name"/>
+              <div id="btc">
+                <a href="#contents">Back to Contents</a>
+              </div>
+              <div id="suite_title">
+                Test Suite:
+                <xsl:value-of select="@name"/>
+                <a><xsl:attribute name="name"><xsl:value-of select="@name"/></xsl:attribute></a>
+              </div>
+              <table>
+                <tr>
+                  <th>Case_ID</th>
+                  <th>Purpose</th>
+                  <th>Type</th>
+                  <th>Component</th>
+                  <th>Execution Type</th>
+                  <th>Description</th>
+                  <th>Specification</th>
+                </tr>
+                <xsl:for-each select=".//set">
+                  <xsl:sort select="@name"/>
+                  <tr>
+                    <td colspan="7">
+                      Test Set:
+                      <xsl:value-of select="@name"/>
+                    </td>
+                  </tr>
+                  <xsl:for-each select=".//testcase">
+                    <!-- xsl:sort select="@id" /> -->
+                    <tr>
+                      <td>
+                        <xsl:value-of select="@id"/>
+                      </td>
+                      <td>
+                        <xsl:value-of select="@purpose"/>
+                      </td>
+                      <td>
+                        <xsl:value-of select="@type"/>
+                      </td>
+                      <td>
+                        <xsl:value-of select="@component"/>
+                      </td>
+                      <td>
+                        <xsl:value-of select="@execution_type"/>
+                      </td>
+                      <td>
+                        <p>
+                          Pre_condition:
+                          <xsl:value-of select=".//description/pre_condition"/>
+                        </p>
+                        <p>
+                          Post_condition:
+                          <xsl:value-of select=".//description/post_condition"/>
+                        </p>
+                        <p>
+                          Test Script Entry:
+                          <xsl:value-of select=".//description/test_script_entry"/>
+                        </p>
+                        <p>
+                          Steps:
+                          <p/>
+                          <xsl:for-each select=".//description/steps/step"><xsl:sort select="@order"/>
+                            Step
+                            <xsl:value-of select="@order"/>
+                            :
+                            <xsl:value-of select="./step_desc"/>
+                            ;
+                            <p/>
+                            Expected Result:
+                            <xsl:value-of select="./expected"/>
+                            <p/>
+                          </xsl:for-each>
+                        </p>
+                      </td>
+                      <td>
+                        <xsl:for-each select=".//specs/spec"><b>[Spec_Assertion]:</b><br/>
+                          [Category]:
+                          <xsl:value-of select="./spec_assertion/@category"/>
+                          <br/>
+                          [Section]:
+                          <xsl:value-of select="./spec_assertion/@section"/>
+                          <br/>
+                          [Specification]:
+                          <xsl:value-of select="./spec_assertion/@specification"/>
+                          <br/>
+                          [Interface]:
+                          <xsl:value-of select="./spec_assertion/@interface"/>
+                          <br/>
+                          <xsl:choose><xsl:when test="./spec_assertion/@element_name">
+                              [<xsl:value-of select="./spec_assertion/@element_type"/>]:
+                              <xsl:value-of select="./spec_assertion/@element_name"/>
+                              <br/>
+                            </xsl:when></xsl:choose>
+                          [URL]:
+                          <xsl:value-of select="./spec_url"/>
+                          <br/>
+                          [Statement]:
+                          <xsl:value-of select="./spec_statement"/>
+                          <br/>
+                        </xsl:for-each>
+                      </td>
+                    </tr>
+                  </xsl:for-each>
+                </xsl:for-each>
+              </table>
+            </xsl:for-each>
+          </div>
+        </div>
+        <div id="goTopBtn">
+          <img border="0" src="./back_top.png"/>
+        </div>
+        <script type="text/javascript" src="application.js"/>
+        <script language="javascript" type="text/javascript">
+          $(document).ready(function(){
+            goTopEx();
+          });
+        </script>
+      </body>
+    </html>
+  </xsl:template>
+</xsl:stylesheet>
diff --git a/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite2.0/xsd/testresult.xsl b/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite2.0/xsd/testresult.xsl
new file mode 100755 (executable)
index 0000000..c5199c0
--- /dev/null
@@ -0,0 +1,491 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
+  <xsl:output method="html" version="1.0" encoding="UTF-8" indent="yes"/>
+  <xsl:template match="/">
+    <html>
+      <STYLE type="text/css">
+        @import "tests.css";
+      </STYLE>
+      <head>
+        <script type="text/javascript" src="jquery.min.js"/>
+      </head>
+      <body>
+        <div id="testcasepage">
+          <div id="title">
+            <table>
+              <tr>
+                <td>
+                  <h1>Test Report</h1>
+                </td>
+              </tr>
+            </table>
+          </div>
+          <div id="device">
+            <table>
+              <tr>
+                <th colspan="2">Device Information</th>
+              </tr>
+              <tr>
+                <td>Device Name</td>
+                <td>
+                  <xsl:choose>
+                    <xsl:when test="test_definition/environment/@device_name">
+                      <xsl:if test="test_definition/environment/@device_name = ''">
+                        N/A
+                      </xsl:if>
+                      <xsl:value-of select="test_definition/environment/@device_name"/>
+                    </xsl:when>
+                    <xsl:otherwise>
+                      N/A
+                    </xsl:otherwise>
+                  </xsl:choose>
+                </td>
+              </tr>
+              <tr>
+                <td>Device Model</td>
+                <td>
+                  <xsl:choose>
+                    <xsl:when test="test_definition/environment/@device_model">
+                      <xsl:if test="test_definition/environment/@device_model = ''">
+                        N/A
+                      </xsl:if>
+                      <xsl:value-of select="test_definition/environment/@device_model"/>
+                    </xsl:when>
+                    <xsl:otherwise>
+                      N/A
+                    </xsl:otherwise>
+                  </xsl:choose>
+                </td>
+              </tr>
+              <tr>
+                <td>OS Version</td>
+                <td>
+                  <xsl:choose>
+                    <xsl:when test="test_definition/environment/@os_version">
+                      <xsl:if test="test_definition/environment/@os_version = ''">
+                        N/A
+                      </xsl:if>
+                      <xsl:value-of select="test_definition/environment/@os_version"/>
+                    </xsl:when>
+                    <xsl:otherwise>
+                      N/A
+                    </xsl:otherwise>
+                  </xsl:choose>
+                </td>
+              </tr>
+              <tr>
+                <td>Device ID</td>
+                <td>
+                  <xsl:choose>
+                    <xsl:when test="test_definition/environment/@device_id">
+                      <xsl:if test="test_definition/environment/@device_id = ''">
+                        N/A
+                      </xsl:if>
+                      <xsl:value-of select="test_definition/environment/@device_id"/>
+                    </xsl:when>
+                    <xsl:otherwise>
+                      N/A
+                    </xsl:otherwise>
+                  </xsl:choose>
+                </td>
+              </tr>
+              <tr>
+                <td>Firmware Version</td>
+                <td>
+                  <xsl:choose>
+                    <xsl:when test="test_definition/environment/@firmware_version">
+                      <xsl:if test="test_definition/environment/@firmware_version = ''">
+                        N/A
+                      </xsl:if>
+                      <xsl:value-of select="test_definition/environment/@firmware_version"/>
+                    </xsl:when>
+                    <xsl:otherwise>
+                      N/A
+                    </xsl:otherwise>
+                  </xsl:choose>
+                </td>
+              </tr>
+              <tr>
+                <td>Build ID</td>
+                <td>
+                  <xsl:choose>
+                    <xsl:when test="test_definition/environment/@build_id">
+                      <xsl:if test="test_definition/environment/@build_id = ''">
+                        N/A
+                      </xsl:if>
+                      <xsl:value-of select="test_definition/environment/@build_id"/>
+                    </xsl:when>
+                    <xsl:otherwise>
+                      N/A
+                    </xsl:otherwise>
+                  </xsl:choose>
+                </td>
+              </tr>
+              <tr>
+                <td>Screen Size</td>
+                <td>
+                  <xsl:choose>
+                    <xsl:when test="test_definition/environment/@screen_size">
+                      <xsl:if test="test_definition/environment/@screen_size = ''">
+                        N/A
+                      </xsl:if>
+                      <xsl:value-of select="test_definition/environment/@screen_size"/>
+                    </xsl:when>
+                    <xsl:otherwise>
+                      N/A
+                    </xsl:otherwise>
+                  </xsl:choose>
+                </td>
+              </tr>
+              <tr>
+                <td>Resolution</td>
+                <td>
+                  <xsl:choose>
+                    <xsl:when test="test_definition/environment/@resolution">
+                      <xsl:if test="test_definition/environment/@resolution = ''">
+                        N/A
+                      </xsl:if>
+                      <xsl:value-of select="test_definition/environment/@resolution"/>
+                    </xsl:when>
+                    <xsl:otherwise>
+                      N/A
+                    </xsl:otherwise>
+                  </xsl:choose>
+                </td>
+              </tr>
+              <tr>
+                <td>Host Info</td>
+                <td>
+                  <xsl:choose>
+                    <xsl:when test="test_definition/environment/@host">
+                      <xsl:if test="test_definition/environment/@host = ''">
+                        N/A
+                      </xsl:if>
+                      <xsl:value-of select="test_definition/environment/@host"/>
+                    </xsl:when>
+                    <xsl:otherwise>
+                      N/A
+                    </xsl:otherwise>
+                  </xsl:choose>
+                </td>
+              </tr>
+              <tr>
+                <td>CTS Version</td>
+                <td>
+                  <xsl:choose>
+                    <xsl:when test="test_definition/environment/@cts_version">
+                      <xsl:if test="test_definition/environment/@cts_version = ''">
+                        N/A
+                      </xsl:if>
+                      <xsl:value-of select="test_definition/environment/@cts_version"/>
+                    </xsl:when>
+                    <xsl:otherwise>
+                      N/A
+                    </xsl:otherwise>
+                  </xsl:choose>
+                </td>
+              </tr>
+              <tr>
+                <td>Others</td>
+                <td>
+                  <xsl:if test="test_definition/environment/other = ''">
+                    N/A
+                  </xsl:if>
+                  <xsl:call-template name="br-replace">
+                    <xsl:with-param name="word" select="test_definition/environment/other"/>
+                  </xsl:call-template>
+                </td>
+              </tr>
+            </table>
+          </div>
+          <div id="summary">
+            <table>
+              <tr>
+                <th colspan="2">Test Summary</th>
+              </tr>
+              <tr>
+                <td>Test Plan Name</td>
+                <td>
+                  <xsl:value-of select="test_definition/summary/@test_plan_name"/>
+                </td>
+              </tr>
+              <tr>
+                <td>Tests Total</td>
+                <td>
+                  <xsl:value-of select="count(test_definition//suite/set/testcase)"/>
+                </td>
+              </tr>
+              <tr>
+                <td>Test Passed</td>
+                <td>
+                  <xsl:value-of select="count(test_definition//suite/set/testcase[@result = 'PASS'])"/>
+                </td>
+              </tr>
+              <tr>
+                <td>Test Failed</td>
+                <td>
+                  <xsl:value-of select="count(test_definition//suite/set/testcase[@result = 'FAIL'])"/>
+                </td>
+              </tr>
+              <tr>
+                <td>Test Block</td>
+                <td>
+                  <xsl:value-of select="count(test_definition//suite/set/testcase[@result = 'BLOCK'])"/>
+                </td>
+              </tr>
+              <tr>
+                <td>Test Not Run</td>
+                <td>
+                  <xsl:value-of select="count(test_definition//suite/set/testcase) - count(test_definition//suite/set/testcase[@result = 'PASS']) - count(test_definition//suite/set/testcase[@result = 'FAIL']) - count(test_definition//suite/set/testcase[@result = 'BLOCK'])"/>
+                </td>
+              </tr>
+              <tr>
+                <td>Start time</td>
+                <td>
+                  <xsl:value-of select="test_definition/summary/start_at"/>
+                </td>
+              </tr>
+              <tr>
+                <td>End time</td>
+                <td>
+                  <xsl:value-of select="test_definition/summary/end_at"/>
+                </td>
+              </tr>
+            </table>
+          </div>
+          <div id="suite_summary">
+            <div id="title">
+              <a name="contents"/>
+              <table>
+                <tr>
+                  <td class="title">
+                    <h1>Test Summary by Suite</h1>
+                  </td>
+                </tr>
+              </table>
+            </div>
+            <table>
+              <tr>
+                <th>Suite</th>
+                <th>Passed</th>
+                <th>Failed</th>
+                <th>Blocked</th>
+                <th>Not Run</th>
+                <th>Total</th>
+              </tr>
+              <xsl:for-each select="test_definition/suite">
+                <xsl:sort select="@name"/>
+                <tr>
+                  <td>
+                    <a>
+                      <xsl:attribute name="href">
+                        #<xsl:value-of select="@name"/>
+                      </xsl:attribute>
+                      <xsl:value-of select="@name"/>
+                    </a>
+                  </td>
+                  <td>
+                    <xsl:value-of select="count(set//testcase[@result = 'PASS'])"/>
+                  </td>
+                  <td>
+                    <xsl:value-of select="count(set//testcase[@result = 'FAIL'])"/>
+                  </td>
+                  <td>
+                    <xsl:value-of select="count(set//testcase[@result = 'BLOCK'])"/>
+                  </td>
+                  <td>
+                    <xsl:value-of select="count(set//testcase) - count(set//testcase[@result = 'PASS']) - count(set//testcase[@result = 'FAIL']) - count(set//testcase[@result = 'BLOCK'])"/>
+                  </td>
+                  <td>
+                    <xsl:value-of select="count(set//testcase)"/>
+                  </td>
+                </tr>
+              </xsl:for-each>
+            </table>
+          </div>
+          <div id="fail_cases">
+            <div id="title">
+              <table>
+                <tr>
+                  <td class="title">
+                    <h1 align="center">
+                      Test Failures (
+                        <xsl:value-of select="count(test_definition/suite/set//testcase[@result = 'FAIL'])"/>
+                      )
+                    </h1>
+                  </td>
+                </tr>
+              </table>
+            </div>
+            <xsl:for-each select="test_definition/suite">
+              <xsl:sort select="@name"/>
+              <div id="btc">
+                <a href="#contents">Back to Contents</a>
+              </div>
+              <div id="suite_title">
+                Test Suite:
+                <xsl:value-of select="@name"/>
+                <a><xsl:attribute name="name"><xsl:value-of select="@name"/></xsl:attribute></a>
+              </div>
+              <table>
+                <tr>
+                  <th>Case_ID</th>
+                  <th>Purpose</th>
+                  <th>Result</th>
+                  <th>Stdout</th>
+                </tr>
+                <xsl:for-each select=".//set">
+                  <xsl:sort select="@name"/>
+                  <tr>
+                    <td colspan="4">
+                      Test Set:
+                      <xsl:value-of select="@name"/>
+                    </td>
+                  </tr>
+                  <xsl:for-each select=".//testcase">
+                    <xsl:sort select="@id"/>
+                    <xsl:choose>
+                      <xsl:when test="@result">
+                        <xsl:if test="@result = 'FAIL'">
+                          <tr>
+                            <td>
+                              <xsl:value-of select="@id"/>
+                            </td>
+                            <td>
+                              <xsl:value-of select="@purpose"/>
+                            </td>
+                            <td class="red_rate">
+                              <xsl:value-of select="@result"/>
+                            </td>
+                            <td>
+                              <xsl:value-of select=".//result_info/stdout"/>
+                              <xsl:if test=".//result_info/stdout = ''">
+                                N/A
+                              </xsl:if>
+                            </td>
+                          </tr>
+                        </xsl:if>
+                      </xsl:when>
+                    </xsl:choose>
+                  </xsl:for-each>
+                </xsl:for-each>
+              </table>
+            </xsl:for-each>
+          </div>
+          <div id="cases">
+            <div id="title">
+              <table>
+                <tr>
+                  <td class="title">
+                    <h1 align="center">Detailed Test Results</h1>
+                  </td>
+                </tr>
+              </table>
+            </div>
+            <xsl:for-each select="test_definition/suite">
+              <xsl:sort select="@name"/>
+              <div id="btc">
+                <a href="#contents">Back to Contents</a>
+              </div>
+              <div id="suite_title">
+                Test Suite:
+                <xsl:value-of select="@name"/>
+                <a><xsl:attribute name="name"><xsl:value-of select="@name"/></xsl:attribute></a>
+              </div>
+              <table>
+                <tr>
+                  <th>Case_ID</th>
+                  <th>Purpose</th>
+                  <th>Result</th>
+                  <th>Stdout</th>
+                </tr>
+                <xsl:for-each select=".//set">
+                  <xsl:sort select="@name"/>
+                  <tr>
+                    <td colspan="4">
+                      Test Set:
+                      <xsl:value-of select="@name"/>
+                    </td>
+                  </tr>
+                  <xsl:for-each select=".//testcase">
+                    <xsl:sort select="@id"/>
+                    <tr>
+                      <td>
+                        <xsl:value-of select="@id"/>
+                      </td>
+                      <td>
+                        <xsl:value-of select="@purpose"/>
+                      </td>
+                      <xsl:choose>
+                        <xsl:when test="@result">
+                          <xsl:if test="@result = 'FAIL'">
+                            <td class="red_rate">
+                              <xsl:value-of select="@result"/>
+                            </td>
+                          </xsl:if>
+                          <xsl:if test="@result = 'PASS'">
+                            <td class="green_rate">
+                              <xsl:value-of select="@result"/>
+                            </td>
+                          </xsl:if>
+                          <xsl:if test="@result = 'BLOCK' ">
+                            <td>
+                              BLOCK
+                            </td>
+                          </xsl:if>
+                          <xsl:if test="@result != 'BLOCK' and @result != 'FAIL' and @result != 'PASS' ">
+                            <td>
+                              Not Run
+                            </td>
+                          </xsl:if>
+                        </xsl:when>
+                        <xsl:otherwise>
+                          <td>
+                          </td>
+                        </xsl:otherwise>
+                      </xsl:choose>
+                      <td>
+                        <xsl:value-of select=".//result_info/stdout"/>
+                        <xsl:if test=".//result_info/stdout = ''">
+                          N/A
+                        </xsl:if>
+                      </td>
+                    </tr>
+                  </xsl:for-each>
+                </xsl:for-each>
+              </table>
+            </xsl:for-each>
+          </div>
+        </div>
+        <div id="goTopBtn">
+          <img border="0" src="./back_top.png"/>
+        </div>
+        <script type="text/javascript" src="application.js"/>
+        <script language="javascript" type="text/javascript">
+          $(document).ready(function(){
+            goTopEx();
+          });
+        </script>
+      </body>
+    </html>
+  </xsl:template>
+  <xsl:template name="br-replace">
+    <xsl:param name="word"/>
+    <xsl:variable name="cr">
+      <xsl:text>
+      </xsl:text>
+    </xsl:variable>
+    <xsl:choose>
+      <xsl:when test="contains($word,$cr)">
+        <xsl:value-of select="substring-before($word,$cr)"/>
+        <br/>
+        <xsl:call-template name="br-replace">
+          <xsl:with-param name="word" select="substring-after($word,$cr)"/>
+        </xsl:call-template>
+      </xsl:when>
+      <xsl:otherwise>
+        <xsl:value-of select="$word"/>
+      </xsl:otherwise>
+    </xsl:choose>
+  </xsl:template>
+</xsl:stylesheet>
diff --git a/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite2.0/xsd/tests.css b/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite2.0/xsd/tests.css
new file mode 100755 (executable)
index 0000000..c2ba69b
--- /dev/null
@@ -0,0 +1,132 @@
+@charset "UTF-8";\r
+/* CSS Document */\r
+#testcasepage div,\r
+#testcasepage h1,\r
+#testcasepage p,\r
+#testcasepage table,\r
+#testcasepage tr,\r
+#testcasepage th,\r
+#testcasepage td {\r
+  margin: 0;\r
+  padding: 0;\r
+  border: 0;\r
+  font-weight: inherit;\r
+  font-style: inherit;\r
+  font-size: 0.96em;\r
+  font-family: arial;\r
+  vertical-align: baseline;\r
+}\r
+\r
+#testcasepage p {\r
+  text-align: left;\r
+}\r
+\r
+#suite_title {\r
+  text-align: left;\r
+}\r
+\r
+#btc {\r
+  text-align: right;\r
+}\r
+\r
+#testcasepage table {\r
+  border-collapse: separate;\r
+  border-spacing: 0;\r
+  margin-bottom: 1.4em;\r
+  vertical-align: middle;\r
+}\r
+\r
+#testcasepage th,\r
+#testcasepage td {\r
+  text-align: left;\r
+  font-weight: normal;\r
+  padding: 4px 10px 4px 5px;\r
+  vertical-align: middle;\r
+}\r
+\r
+#cases table {\r
+  width: 101%;\r
+}\r
+\r
+#fail_cases table {\r
+  width: 101%;\r
+}\r
+\r
+#title table {\r
+  width: 101%;\r
+}\r
+\r
+#device table {\r
+  width: 50%;\r
+}\r
+\r
+#summary table {\r
+  width: 50%;\r
+}\r
+\r
+#testcasepage th {\r
+  border-bottom: 1px solid #000;\r
+  background-color: #AAAAAA;\r
+  border-left: 1px solid #000;\r
+  border-top: 1px solid #000;\r
+  color: #000;\r
+  font-weight: bold;\r
+  vertical-align: bottom;\r
+}\r
+\r
+#testcasepage th:last-child,\r
+#testcasepage td:last-child {\r
+  border-right: 1px solid #000;\r
+}\r
+\r
+#testcasepage td {\r
+  border-left: 1px solid;\r
+  font-weight: normal;\r
+  border-bottom: 1px solid;\r
+}\r
+\r
+#testcasepage td.yellow_rate {\r
+  background-color: #ffcc00;\r
+}\r
+\r
+#testcasepage td.green_rate {\r
+  background-color: #33cc33;\r
+}\r
+\r
+#testcasepage td.dgreen_rate {\r
+  background-color: #339933;\r
+}\r
+\r
+#testcasepage td.red_rate {\r
+  background-color: #FF3333;\r
+}\r
+\r
+#title table,\r
+#title tr,\r
+#title td {\r
+  border-left: none;\r
+  border-bottom: none;\r
+  text-align: center;\r
+}\r
+\r
+#title td:last-child {\r
+  border-right: none;\r
+}\r
+\r
+#testcasepage h1 {\r
+  font-size: 2em;\r
+  font-family: Arial, sans-serif;\r
+  font-weight: bold;\r
+  line-height: 1;\r
+  color: #000;\r
+  margin-bottom: 0.75em;\r
+  padding-top: 0.25em;\r
+  font-weight: bold;\r
+}\r
+\r
+#goTopBtn {\r
+  right: 0px;\r
+  bottom: 0px;\r
+  position: fixed; +position: absolute;\r
+  top: expression(parseInt(document.body.scrollTop) + document.body.clientHeight - 40);\r
+}\r
diff --git a/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite2.0/xsd/tests.xml b/release/csharp-tct_6.0_dotnet/tct-tools_r4_rc1/testkitlite2.0/xsd/tests.xml
new file mode 100755 (executable)
index 0000000..aedf930
--- /dev/null
@@ -0,0 +1,1033 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?xml-stylesheet type="text/xsl"  href="testcase.xsl"?>
+<test_definition xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="test_definition.xsd">
+  <suite name="webapi-w3c-widget-tests">
+    <set name="WidgetPackaging">
+      <testcase purpose="Tests the user agent's ability to process files with no file extension. " type="compliance" status="ready" component="WebAPI/W3C_Widget/WidgetPackaging" execution_type="auto" priority="P3" id="dm">
+        <description>
+          <pre_condition/>
+          <post_condition/>
+          <steps>
+            <step order="1">
+              <step_desc>Install /opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/dm</step_desc>
+              <expected>To pass, the user agent start file of the widget must be index.htm</expected>
+            </step>
+          </steps>
+          <test_script_entry>/opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/dm</test_script_entry>
+        </description>
+        <specs>
+          <spec>
+            <spec_assertion category="Tizen Device API Specifications" section="Widget" specification="Widget Packaging and XML Configuration" interface="Widget" element_name="constructor" element_type="method"/>
+            <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>
+            <spec_statement>spec_statement</spec_statement>
+          </spec>
+          <spec>
+            <spec_assertion category="Tizen Device API Specifications" section="Tizen" specification="Tizen Packaging and XML Configuration" interface="Tizen" usage="true"/>
+            <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>
+            <spec_statement>spec_statement</spec_statement>
+          </spec>
+        </specs>
+      </testcase>
+      <testcase purpose="Tests the user agent's ability to process files with a file extension other than .wgt." type="compliance" status="ready" component="WebAPI/W3C_Widget/WidgetPackaging" execution_type="manual" priority="P3" id="dn">
+        <description>
+          <pre_condition/>
+          <post_condition/>
+          <steps>
+            <step order="1">
+              <step_desc>Install /opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/dn.test</step_desc>
+              <expected>To pass, the user agent start file of the widget must be index.htm</expected>
+            </step>
+          </steps>
+          <test_script_entry>/opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/dn.test</test_script_entry>
+        </description>
+        <specs>
+          <spec>
+            <spec_assertion category="Tizen Device API Specifications" section="Widget" specification="Widget Packaging and XML Configuration" interface="Widget" usage="true"/>
+            <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>
+            <spec_statement>spec_statement</spec_statement>
+          </spec>
+        </specs>
+      </testcase>
+      <testcase purpose="Test the ability of the UA to verify a zip archive." type="compliance" status="ready" component="WebAPI/W3C_Widget/WidgetPackaging" execution_type="manual" priority="P3" id="do">
+        <description>
+          <pre_condition/>
+          <post_condition/>
+          <steps>
+            <step order="1">
+              <step_desc>Install /opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/split.wgt.001</step_desc>
+              <expected>To pass, the user agent must treat this as an invalid widget (archive is spanned).</expected>
+            </step>
+          </steps>
+          <test_script_entry>/opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/split.wgt.001</test_script_entry>
+        </description>
+        <specs>
+          <spec>
+            <spec_assertion category="Tizen Device API Specifications" section="Widget" specification="Widget Packaging and XML Configuration" interface="Widget" element_name="constructor" element_type="method"/>
+            <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>
+            <spec_statement>spec_statement</spec_statement>
+          </spec>
+        </specs>
+      </testcase>
+      <testcase purpose="Test the user agent's ability to get a widget over HTTP and respect the application/widget mimetype. The server from which this test is served from has been set up to label the 'test' resource as an 'application/widget'." type="compliance" status="ready" component="WebAPI/W3C_Widget/WidgetPackaging" execution_type="manual" priority="P3" id="z3">
+        <description>
+          <pre_condition/>
+          <post_condition/>
+          <steps>
+            <step order="1">
+              <step_desc>Install /opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/z3</step_desc>
+              <expected>To pass, a user agent must correctly process this resource as a widget because of the 'application/widget' mimetype (i.e., not only because of sniffing).</expected>
+            </step>
+          </steps>
+          <test_script_entry>/opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/z3</test_script_entry>
+        </description>
+        <specs>
+          <spec>
+            <spec_assertion category="Tizen Device API Specifications" section="Widget" specification="Widget Packaging and XML Configuration" interface="Widget" element_name="constructor" element_type="method"/>
+            <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>
+            <spec_statement>spec_statement</spec_statement>
+          </spec>
+        </specs>
+      </testcase>
+      <testcase purpose="Test the user agent's ability to get a widget over HTTP and respect the 'application/widget' mimetype. The server from which this test is served from has been set up to label the 'test.html' resource as an 'application/widget'." type="compliance" status="ready" component="WebAPI/W3C_Widget/WidgetPackaging" execution_type="manual" priority="P3" id="z4">
+        <description>
+          <pre_condition/>
+          <post_condition/>
+          <steps>
+            <step order="1">
+              <step_desc>Install /opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/z4.html</step_desc>
+              <expected>To pass, a user agent must correctly process this resource as a widget because of the 'application/widget' mimetype (i.e., not only via sniffing).</expected>
+            </step>
+          </steps>
+          <test_script_entry>/opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/z4.html</test_script_entry>
+        </description>
+        <specs>
+          <spec>
+            <spec_assertion category="Tizen Device API Specifications" section="Widget" specification="Widget Packaging and XML Configuration" interface="Widget" element_name="constructor" element_type="method"/>
+            <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>
+            <spec_statement>spec_statement</spec_statement>
+          </spec>
+        </specs>
+      </testcase>
+      <testcase purpose="Tests that an empty defaultlocale attribute is ignored (and does not cause the widget to be treated as invalid)." type="compliance" status="ready" component="WebAPI/W3C_Widget/WidgetPackaging" execution_type="manual" priority="P3" id="dlocignore00">
+        <description>
+          <pre_condition/>
+          <post_condition/>
+          <steps>
+            <step order="1">
+              <step_desc>Install /opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/dlocignore00.wgt</step_desc>
+              <expected>To pass, the widget must simply run..</expected>
+            </step>
+          </steps>
+          <test_script_entry>/opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/dlocignore00.wgt</test_script_entry>
+        </description>
+        <specs>
+          <spec>
+            <spec_assertion category="Tizen Device API Specifications" section="Widget" specification="Widget Packaging and XML Configuration" interface="Widget" element_name="constructor" element_type="method"/>
+            <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>
+            <spec_statement>spec_statement</spec_statement>
+          </spec>
+        </specs>
+      </testcase>
+      <testcase purpose="Tests that the user agent applies rule for getting a single attribute value to the defaultlocale attribute." type="compliance" status="ready" component="WebAPI/W3C_Widget/WidgetPackaging" execution_type="manual" priority="P3" id="dlocignore01">
+        <description>
+          <pre_condition/>
+          <post_condition/>
+          <steps>
+            <step order="1">
+              <step_desc>Install /opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/ta-de-001.wgt</step_desc>
+              <expected> To pass, the name of the widget must be the value PASS..</expected>
+            </step>
+          </steps>
+          <test_script_entry>/opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/ta-de-001.wgt</test_script_entry>
+        </description>
+        <specs>
+          <spec>
+            <spec_assertion category="Tizen Device API Specifications" section="Widget" specification="Widget Packaging and XML Configuration" interface="Widget" element_name="constructor" element_type="method"/>
+            <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>
+            <spec_statement>spec_statement</spec_statement>
+          </spec>
+        </specs>
+      </testcase>
+      <testcase purpose="Test that the user agent matches obscure, yet valid, language tags." type="compliance" status="ready" component="WebAPI/W3C_Widget/WidgetPackaging" execution_type="manual" priority="P3" id="dlocignore02">
+        <description>
+          <pre_condition/>
+          <post_condition/>
+          <steps>
+            <step order="1">
+              <step_desc>Install /opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/ta-de-002.wgt</step_desc>
+              <expected> To pass, the widgets description must be the value PASS..</expected>
+            </step>
+          </steps>
+          <test_script_entry>/opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/ta-de-002.wgt</test_script_entry>
+        </description>
+        <specs>
+          <spec>
+            <spec_assertion category="Tizen Device API Specifications" section="Widget" specification="Widget Packaging and XML Configuration" interface="Widget" element_name="constructor" element_type="method"/>
+            <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>
+            <spec_statement>spec_statement</spec_statement>
+          </spec>
+        </specs>
+      </testcase>
+      <testcase purpose="Tests that a language tag already part of the UA's locales list is ignored when it is repeated for defaultlocale attribute." type="compliance" status="ready" component="WebAPI/W3C_Widget/WidgetPackaging" execution_type="manual" priority="P3" id="dlocignore03">
+        <description>
+          <pre_condition/>
+          <post_condition/>
+          <steps>
+            <step order="1">
+              <step_desc>Install /opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/ta-de-003.wgt</step_desc>
+              <expected>To pass, the specified value should not be added twice to the locales list of the UA..</expected>
+            </step>
+          </steps>
+          <test_script_entry>/opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/ta-de-003.wgt</test_script_entry>
+        </description>
+        <specs>
+          <spec>
+            <spec_assertion category="Tizen Device API Specifications" section="Widget" specification="Widget Packaging and XML Configuration" interface="Widget" element_name="constructor" element_type="method"/>
+            <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>
+            <spec_statement>spec_statement</spec_statement>
+          </spec>
+        </specs>
+      </testcase>
+      <testcase purpose="Tests that the default locale is added to the end of the user agent's locale list   (and does not override the default language, which is assumed to be 'en')." type="compliance" status="ready" component="WebAPI/W3C_Widget/WidgetPackaging" execution_type="manual" priority="P3" id="dlocignore04">
+        <description>
+          <pre_condition/>
+          <post_condition/>
+          <steps>
+            <step order="1">
+              <step_desc>Install /opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/ta-de-004.wgt</step_desc>
+              <expected>To pass, the name of the widget must be PASS..</expected>
+            </step>
+          </steps>
+          <test_script_entry>/opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/ta-de-004.wgt</test_script_entry>
+        </description>
+        <specs>
+          <spec>
+            <spec_assertion category="Tizen Device API Specifications" section="Widget" specification="Widget Packaging and XML Configuration" interface="Widget" element_name="constructor" element_type="method"/>
+            <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>
+            <spec_statement>spec_statement</spec_statement>
+          </spec>
+        </specs>
+      </testcase>
+      <testcase purpose="Tests that the value of defaultlocale is also used to in folder-based localization." type="compliance" status="ready" component="WebAPI/W3C_Widget/WidgetPackaging" execution_type="manual" priority="P3" id="dlocuse00">
+        <description>
+          <pre_condition/>
+          <post_condition/>
+          <steps>
+            <step order="1">
+              <step_desc>Install /opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/ta-de-000.wgt</step_desc>
+              <expected>To pass, the index.html of the folder 'locales/esx-al/' should be loaded and say PASS..</expected>
+            </step>
+          </steps>
+          <test_script_entry>/opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/ta-de-000.wgt</test_script_entry>
+        </description>
+        <specs>
+          <spec>
+            <spec_assertion category="Tizen Device API Specifications" section="Widget" specification="Widget Packaging and XML Configuration" interface="Widget" element_name="constructor" element_type="method"/>
+            <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>
+            <spec_statement>spec_statement</spec_statement>
+          </spec>
+        </specs>
+      </testcase>
+      <testcase purpose="Tests that the value of defaultlocale works in conjunction to xml:lang on the widget element." type="compliance" status="ready" component="WebAPI/W3C_Widget/WidgetPackaging" execution_type="manual" priority="P3" id="dlocuse01">
+        <description>
+          <pre_condition/>
+          <post_condition/>
+          <steps>
+            <step order="1">
+              <step_desc>Install /opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/dlocuse01.wgt</step_desc>
+              <expected>To pass, the name of the widget must be PASS..</expected>
+            </step>
+          </steps>
+          <test_script_entry>/opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/dlocuse01.wgt</test_script_entry>
+        </description>
+        <specs>
+          <spec>
+            <spec_assertion category="Tizen Device API Specifications" section="Widget" specification="Widget Packaging and XML Configuration" interface="Widget" element_name="constructor" element_type="method"/>
+            <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>
+            <spec_statement>spec_statement</spec_statement>
+          </spec>
+        </specs>
+      </testcase>
+      <testcase purpose="Tests that the UA rejects configuration documents that don't have  correct widget element at the root." type="compliance" status="ready" component="WebAPI/W3C_Widget/WidgetPackaging" execution_type="manual" priority="P3" id="aa">
+        <description>
+          <pre_condition/>
+          <post_condition/>
+          <steps>
+            <step order="1">
+              <step_desc>Install /opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/aa.wgt</step_desc>
+              <expected> To pass, the UA must treat this as an invalid widget (the root element is not widget)..</expected>
+            </step>
+          </steps>
+          <test_script_entry>/opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/aa.wgt</test_script_entry>
+        </description>
+        <specs>
+          <spec>
+            <spec_assertion category="Tizen Device API Specifications" section="Widget" specification="Widget Packaging and XML Configuration" interface="Widget" element_name="constructor" element_type="method"/>
+            <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>
+            <spec_statement>spec_statement</spec_statement>
+          </spec>
+        </specs>
+      </testcase>
+      <testcase purpose="Tests that the UA rejects configuration documents that don't have correct  widget element at the root." type="compliance" status="ready" component="WebAPI/W3C_Widget/WidgetPackaging" execution_type="manual" priority="P3" id="ab">
+        <description>
+          <pre_condition/>
+          <post_condition/>
+          <steps>
+            <step order="1">
+              <step_desc>Install /opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/ab.wgt</step_desc>
+              <expected> To pass, the UA must treat this as an invalid widget (the namespace is wrong)..</expected>
+            </step>
+          </steps>
+          <test_script_entry>/opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/ab.wgt</test_script_entry>
+        </description>
+        <specs>
+          <spec>
+            <spec_assertion category="Tizen Device API Specifications" section="Widget" specification="Widget Packaging and XML Configuration" interface="Widget" element_name="constructor" element_type="method"/>
+            <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>
+            <spec_statement>spec_statement</spec_statement>
+          </spec>
+        </specs>
+      </testcase>
+      <testcase purpose="Tests that the UA rejects configuration documents that don't have correct widget  element at the root." type="compliance" status="ready" component="WebAPI/W3C_Widget/WidgetPackaging" execution_type="manual" priority="P3" id="ac">
+        <description>
+          <pre_condition/>
+          <post_condition/>
+          <steps>
+            <step order="1">
+              <step_desc>Install /opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/ac.wgt</step_desc>
+              <expected>To pass, the UA must treat this as an invalid widget (the namespace is missing)..</expected>
+            </step>
+          </steps>
+          <test_script_entry>/opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/ac.wgt</test_script_entry>
+        </description>
+        <specs>
+          <spec>
+            <spec_assertion category="Tizen Device API Specifications" section="Widget" specification="Widget Packaging and XML Configuration" interface="Widget" element_name="constructor" element_type="method"/>
+            <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>
+            <spec_statement>spec_statement</spec_statement>
+          </spec>
+        </specs>
+      </testcase>
+      <testcase purpose="Test that a user agent correctly processes a author element." type="compliance" status="ready" component="WebAPI/W3C_Widget/WidgetPackaging" execution_type="manual" priority="P3" id="af">
+        <description>
+          <pre_condition/>
+          <post_condition/>
+          <steps>
+            <step order="1">
+              <step_desc>Install /opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/af.wgt</step_desc>
+              <expected>To pass, the author name must be the string "PASS"..</expected>
+            </step>
+          </steps>
+          <test_script_entry>/opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/af.wgt</test_script_entry>
+        </description>
+        <specs>
+          <spec>
+            <spec_assertion category="Tizen Device API Specifications" section="Widget" specification="Widget Packaging and XML Configuration" interface="Widget" element_name="constructor" element_type="method"/>
+            <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>
+            <spec_statement>spec_statement</spec_statement>
+          </spec>
+        </specs>
+      </testcase>
+      <testcase purpose="Test that a user agent correctly applies the Rule for Getting Text Content with Normalized White Space." type="compliance" status="ready" component="WebAPI/W3C_Widget/WidgetPackaging" execution_type="manual" priority="P3" id="ag">
+        <description>
+          <pre_condition/>
+          <post_condition/>
+          <steps>
+            <step order="1">
+              <step_desc>Install /opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/ag.wgt</step_desc>
+              <expected>To pass, the widget author must be the string "P A S S" (i.e., white space collapsed to single space)..</expected>
+            </step>
+          </steps>
+          <test_script_entry>/opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/ag.wgt</test_script_entry>
+        </description>
+        <specs>
+          <spec>
+            <spec_assertion category="Tizen Device API Specifications" section="Widget" specification="Widget Packaging and XML Configuration" interface="Widget" element_name="constructor" element_type="method"/>
+            <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>
+            <spec_statement>spec_statement</spec_statement>
+          </spec>
+        </specs>
+      </testcase>
+      <testcase purpose="Test that a user agent correctly applies the Rule for Getting Text Content with Normalized White Space." type="compliance" status="ready" component="WebAPI/W3C_Widget/WidgetPackaging" execution_type="manual" priority="P3" id="ah">
+        <description>
+          <pre_condition/>
+          <post_condition/>
+          <steps>
+            <step order="1">
+              <step_desc>Install /opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/ah.wgt</step_desc>
+              <expected>To pass, the author name must be the string "PASS" (i.e., all white space collapsed to single space, spaces at start/end trimmed)..</expected>
+            </step>
+          </steps>
+          <test_script_entry>/opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/ah.wgt</test_script_entry>
+        </description>
+        <specs>
+          <spec>
+            <spec_assertion category="Tizen Device API Specifications" section="Widget" specification="Widget Packaging and XML Configuration" interface="Widget" element_name="constructor" element_type="method"/>
+            <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>
+            <spec_statement>spec_statement</spec_statement>
+          </spec>
+        </specs>
+      </testcase>
+      <testcase purpose="Test that a user agent correctly applies the rule for getting a single attribute value." type="compliance" status="ready" component="WebAPI/W3C_Widget/WidgetPackaging" execution_type="manual" priority="P3" id="ai">
+        <description>
+          <pre_condition/>
+          <post_condition/>
+          <steps>
+            <step order="1">
+              <step_desc>Install /opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/ai.wgt</step_desc>
+              <expected>To pass, the author email must be the string "PASS"..</expected>
+            </step>
+          </steps>
+          <test_script_entry>/opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/ai.wgt</test_script_entry>
+        </description>
+        <specs>
+          <spec>
+            <spec_assertion category="Tizen Device API Specifications" section="Widget" specification="Widget Packaging and XML Configuration" interface="Widget" element_name="constructor" element_type="method"/>
+            <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>
+            <spec_statement>spec_statement</spec_statement>
+          </spec>
+        </specs>
+      </testcase>
+      <testcase purpose="Test that a user agent correctly applies the rule for getting a single attribute value and the Rule for Getting Text Content with Normalized White Space." type="compliance" status="ready" component="WebAPI/W3C_Widget/WidgetPackaging" execution_type="manual" priority="P3" id="aj">
+        <description>
+          <pre_condition/>
+          <post_condition/>
+          <steps>
+            <step order="1">
+              <step_desc>Install /opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/aj.wgt</step_desc>
+              <expected>To pass, the author name must be the string "PASS"..</expected>
+            </step>
+          </steps>
+          <test_script_entry>/opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/aj.wgt</test_script_entry>
+        </description>
+        <specs>
+          <spec>
+            <spec_assertion category="Tizen Device API Specifications" section="Widget" specification="Widget Packaging and XML Configuration" interface="Widget" element_name="constructor" element_type="method"/>
+            <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>
+            <spec_statement>spec_statement</spec_statement>
+          </spec>
+        </specs>
+      </testcase>
+      <testcase purpose="Test that a user agent correctly applies the rule for getting a single attribute value and the Rule for Getting Text Content with Normalized White Space." type="compliance" status="ready" component="WebAPI/W3C_Widget/WidgetPackaging" execution_type="manual" priority="P3" id="ak">
+        <description>
+          <pre_condition/>
+          <post_condition/>
+          <steps>
+            <step order="1">
+              <step_desc>Install /opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/ak.wgt</step_desc>
+              <expected>To pass, the author name must be the string "PASS"..</expected>
+            </step>
+          </steps>
+          <test_script_entry>/opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/ak.wgt</test_script_entry>
+        </description>
+        <specs>
+          <spec>
+            <spec_assertion category="Tizen Device API Specifications" section="Widget" specification="Widget Packaging and XML Configuration" interface="Widget" element_name="constructor" element_type="method"/>
+            <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>
+            <spec_statement>spec_statement</spec_statement>
+          </spec>
+        </specs>
+      </testcase>
+      <testcase purpose="Test the ability of the user agent to handle an empty author element." type="compliance" status="ready" component="WebAPI/W3C_Widget/WidgetPackaging" execution_type="manual" priority="P3" id="al">
+        <description>
+          <pre_condition/>
+          <post_condition/>
+          <steps>
+            <step order="1">
+              <step_desc>Install /opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/al.wgt</step_desc>
+              <expected>To pass, the author name must be an empty string..</expected>
+            </step>
+          </steps>
+          <test_script_entry>/opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/al.wgt</test_script_entry>
+        </description>
+        <specs>
+          <spec>
+            <spec_assertion category="Tizen Device API Specifications" section="Widget" specification="Widget Packaging and XML Configuration" interface="Widget" element_name="constructor" element_type="method"/>
+            <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>
+            <spec_statement>spec_statement</spec_statement>
+          </spec>
+        </specs>
+      </testcase>
+      <testcase purpose="Test the ability of the user agent to correctly process the author href attribute." type="compliance" status="ready" component="WebAPI/W3C_Widget/WidgetPackaging" execution_type="manual" priority="P3" id="am">
+        <description>
+          <pre_condition/>
+          <post_condition/>
+          <steps>
+            <step order="1">
+              <step_desc>Install /opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/am.wgt</step_desc>
+              <expected>To pass, the value of author href must be "PASS:PASS"..</expected>
+            </step>
+          </steps>
+          <test_script_entry>/opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/am.wgt</test_script_entry>
+        </description>
+        <specs>
+          <spec>
+            <spec_assertion category="Tizen Device API Specifications" section="Widget" specification="Widget Packaging and XML Configuration" interface="Widget" element_name="constructor" element_type="method"/>
+            <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>
+            <spec_statement>spec_statement</spec_statement>
+          </spec>
+        </specs>
+      </testcase>
+      <testcase purpose="Test the ability of the user agent to correctly process the author href attribute." type="compliance" status="ready" component="WebAPI/W3C_Widget/WidgetPackaging" execution_type="manual" priority="P3" id="an">
+        <description>
+          <pre_condition/>
+          <post_condition/>
+          <steps>
+            <step order="1">
+              <step_desc>Install /opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/an.wgt</step_desc>
+              <expected>To pass, the value of author href must be ignored..</expected>
+            </step>
+          </steps>
+          <test_script_entry>/opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/an.wgt</test_script_entry>
+        </description>
+        <specs>
+          <spec>
+            <spec_assertion category="Tizen Device API Specifications" section="Widget" specification="Widget Packaging and XML Configuration" interface="Widget" element_name="constructor" element_type="method"/>
+            <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>
+            <spec_statement>spec_statement</spec_statement>
+          </spec>
+        </specs>
+      </testcase>
+      <testcase purpose="Test that a user agent correctly processes a name element." type="compliance" status="ready" component="WebAPI/W3C_Widget/WidgetPackaging" execution_type="manual" priority="P3" id="ao">
+        <description>
+          <pre_condition/>
+          <post_condition/>
+          <steps>
+            <step order="1">
+              <step_desc>Install /opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/ao.wgt</step_desc>
+              <expected>To pass, the widget name must be the string "PASS"..</expected>
+            </step>
+          </steps>
+          <test_script_entry>/opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/ao.wgt</test_script_entry>
+        </description>
+        <specs>
+          <spec>
+            <spec_assertion category="Tizen Device API Specifications" section="Widget" specification="Widget Packaging and XML Configuration" interface="Widget" element_name="constructor" element_type="method"/>
+            <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>
+            <spec_statement>spec_statement</spec_statement>
+          </spec>
+        </specs>
+      </testcase>
+      <testcase purpose="Test that a user agent correctly applies the Rule for Getting Text Content with Normalized White Space." type="compliance" status="ready" component="WebAPI/W3C_Widget/WidgetPackaging" execution_type="manual" priority="P3" id="ap">
+        <description>
+          <pre_condition/>
+          <post_condition/>
+          <steps>
+            <step order="1">
+              <step_desc>Install /opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/ap.wgt</step_desc>
+              <expected>To pass, the widget name must be the string "P A S S" (i.e., white space collapsed to single space)..</expected>
+            </step>
+          </steps>
+          <test_script_entry>/opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/ap.wgt</test_script_entry>
+        </description>
+        <specs>
+          <spec>
+            <spec_assertion category="Tizen Device API Specifications" section="Widget" specification="Widget Packaging and XML Configuration" interface="Widget" element_name="constructor" element_type="method"/>
+            <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>
+            <spec_statement>spec_statement</spec_statement>
+          </spec>
+        </specs>
+      </testcase>
+      <testcase purpose="Test that a user agent correctly applies the Rule for Getting Text Content with Normalized White Space." type="compliance" status="ready" component="WebAPI/W3C_Widget/WidgetPackaging" execution_type="manual" priority="P3" id="aq">
+        <description>
+          <pre_condition/>
+          <post_condition/>
+          <steps>
+            <step order="1">
+              <step_desc>Install /opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/aq.wgt</step_desc>
+              <expected>To pass, the widget name must be the string "PASS" (i.e., all white space collapsed to single space, spaces at front/back trimmed)..</expected>
+            </step>
+          </steps>
+          <test_script_entry>/opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/aq.wgt</test_script_entry>
+        </description>
+        <specs>
+          <spec>
+            <spec_assertion category="Tizen Device API Specifications" section="Widget" specification="Widget Packaging and XML Configuration" interface="Widget" element_name="constructor" element_type="method"/>
+            <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>
+            <spec_statement>spec_statement</spec_statement>
+          </spec>
+        </specs>
+      </testcase>
+      <testcase purpose="Test that a user agent correctly applies the rule for getting a single attribute value." type="compliance" status="ready" component="WebAPI/W3C_Widget/WidgetPackaging" execution_type="manual" priority="P3" id="ar">
+        <description>
+          <pre_condition/>
+          <post_condition/>
+          <steps>
+            <step order="1">
+              <step_desc>Install /opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/ar.wgt</step_desc>
+              <expected>To pass, the widget short name must be the string "PASS"..</expected>
+            </step>
+          </steps>
+          <test_script_entry>/opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/ar.wgt</test_script_entry>
+        </description>
+        <specs>
+          <spec>
+            <spec_assertion category="Tizen Device API Specifications" section="Widget" specification="Widget Packaging and XML Configuration" interface="Widget" element_name="constructor" element_type="method"/>
+            <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>
+            <spec_statement>spec_statement</spec_statement>
+          </spec>
+        </specs>
+      </testcase>
+      <testcase purpose="Test that a user agent correctly applies the rule for getting a single attribute value and  the Rule for Getting Text Content with Normalized White Space." type="compliance" status="ready" component="WebAPI/W3C_Widget/WidgetPackaging" execution_type="manual" priority="P3" id="as">
+        <description>
+          <pre_condition/>
+          <post_condition/>
+          <steps>
+            <step order="1">
+              <step_desc>Install /opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/as.wgt</step_desc>
+              <expected>To pass, the widget short name must be the string "PASS" and the widget name must be "PASS"..</expected>
+            </step>
+          </steps>
+          <test_script_entry>/opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/as.wgt</test_script_entry>
+        </description>
+        <specs>
+          <spec>
+            <spec_assertion category="Tizen Device API Specifications" section="Widget" specification="Widget Packaging and XML Configuration" interface="Widget" element_name="constructor" element_type="method"/>
+            <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>
+            <spec_statement>spec_statement</spec_statement>
+          </spec>
+        </specs>
+      </testcase>
+      <testcase purpose="Test that a user agent correctly applies the rule for getting a single attribute value and  the Rule for Getting Text Content with Normalized White Space." type="compliance" status="ready" component="WebAPI/W3C_Widget/WidgetPackaging" execution_type="manual" priority="P3" id="at">
+        <description>
+          <pre_condition/>
+          <post_condition/>
+          <steps>
+            <step order="1">
+              <step_desc>Install /opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/at.wgt</step_desc>
+              <expected>To pass, the widget short name must be the string "PASS" and the widget name must be "PASS"..</expected>
+            </step>
+          </steps>
+          <test_script_entry>/opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/at.wgt</test_script_entry>
+        </description>
+        <specs>
+          <spec>
+            <spec_assertion category="Tizen Device API Specifications" section="Widget" specification="Widget Packaging and XML Configuration" interface="Widget" element_name="constructor" element_type="method"/>
+            <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>
+            <spec_statement>spec_statement</spec_statement>
+          </spec>
+        </specs>
+      </testcase>
+      <testcase purpose="Test that a user agent correctly processes the short attribute." type="compliance" status="ready" component="WebAPI/W3C_Widget/WidgetPackaging" execution_type="manual" priority="P3" id="au">
+        <description>
+          <pre_condition/>
+          <post_condition/>
+          <steps>
+            <step order="1">
+              <step_desc>Install /opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/au.wgt</step_desc>
+              <expected>To pass, the widget short name must be an empty string..</expected>
+            </step>
+          </steps>
+          <test_script_entry>/opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/au.wgt</test_script_entry>
+        </description>
+        <specs>
+          <spec>
+            <spec_assertion category="Tizen Device API Specifications" section="Widget" specification="Widget Packaging and XML Configuration" interface="Widget" element_name="constructor" element_type="method"/>
+            <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>
+            <spec_statement>spec_statement</spec_statement>
+          </spec>
+        </specs>
+      </testcase>
+      <testcase purpose="Test the ability of the user agent to handle an empty name element." type="compliance" status="ready" component="WebAPI/W3C_Widget/WidgetPackaging" execution_type="manual" priority="P3" id="av">
+        <description>
+          <pre_condition/>
+          <post_condition/>
+          <steps>
+            <step order="1">
+              <step_desc>Install /opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/av.wgt</step_desc>
+              <expected>To pass, the widget name must be an empty string..</expected>
+            </step>
+          </steps>
+          <test_script_entry>/opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/av.wgt</test_script_entry>
+        </description>
+        <specs>
+          <spec>
+            <spec_assertion category="Tizen Device API Specifications" section="Widget" specification="Widget Packaging and XML Configuration" interface="Widget" element_name="constructor" element_type="method"/>
+            <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>
+            <spec_statement>spec_statement</spec_statement>
+          </spec>
+        </specs>
+      </testcase>
+      <testcase purpose="Test that a user agent correctly processes a name element with xml:lang attribute." type="compliance" status="ready" component="WebAPI/W3C_Widget/WidgetPackaging" execution_type="manual" priority="P3" id="oa">
+        <description>
+          <pre_condition/>
+          <post_condition/>
+          <steps>
+            <step order="1">
+              <step_desc>Install /opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/oa.wgt</step_desc>
+              <expected>To pass, the widget name must be the string "PASS"..</expected>
+            </step>
+          </steps>
+          <test_script_entry>/opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/oa.wgt</test_script_entry>
+        </description>
+        <specs>
+          <spec>
+            <spec_assertion category="Tizen Device API Specifications" section="Widget" specification="Widget Packaging and XML Configuration" interface="Widget" element_name="constructor" element_type="method"/>
+            <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>
+            <spec_statement>spec_statement</spec_statement>
+          </spec>
+        </specs>
+      </testcase>
+      <testcase purpose="Test that the user agent does not attempt to load a default start file when a custom start file has been declared." type="compliance" status="ready" component="WebAPI/W3C_Widget/WidgetPackaging" execution_type="manual" priority="P3" id="aw">
+        <description>
+          <pre_condition/>
+          <post_condition/>
+          <steps>
+            <step order="1">
+              <step_desc>Install /opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/aw.wgt</step_desc>
+              <expected>To pass, the widget start file must point to "pass.html" and the icons list must contain a pointer to "icon.png" at the root of the widget..</expected>
+            </step>
+          </steps>
+          <test_script_entry>/opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/aw.wgt</test_script_entry>
+        </description>
+        <specs>
+          <spec>
+            <spec_assertion category="Tizen Device API Specifications" section="Widget" specification="Widget Packaging and XML Configuration" interface="Widget" element_name="constructor" element_type="method"/>
+            <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>
+            <spec_statement>spec_statement</spec_statement>
+          </spec>
+        </specs>
+      </testcase>
+      <testcase purpose="Test the UA's ability process the height attribute." type="compliance" status="ready" component="WebAPI/W3C_Widget/WidgetPackaging" execution_type="manual" priority="P3" id="ax">
+        <description>
+          <pre_condition/>
+          <post_condition/>
+          <steps>
+            <step order="1">
+              <step_desc>Install /opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/ax.wgt</step_desc>
+              <expected>To pass, the widget height must be either the numeric value 123 or a value greater than 0..</expected>
+            </step>
+          </steps>
+          <test_script_entry>/opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/ax.wgt</test_script_entry>
+        </description>
+        <specs>
+          <spec>
+            <spec_assertion category="Tizen Device API Specifications" section="Widget" specification="Widget Packaging and XML Configuration" interface="Widget" element_name="constructor" element_type="method"/>
+            <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>
+            <spec_statement>spec_statement</spec_statement>
+          </spec>
+        </specs>
+      </testcase>
+      <testcase purpose="Test the UA's ability process the height attribute." type="compliance" status="ready" component="WebAPI/W3C_Widget/WidgetPackaging" execution_type="manual" priority="P3" id="ay">
+        <description>
+          <pre_condition/>
+          <post_condition/>
+          <steps>
+            <step order="1">
+              <step_desc>Install /opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/ay.wgt</step_desc>
+              <expected>To pass, the user agent must ignore the value of the height attribute (the value is composed of characters)..</expected>
+            </step>
+          </steps>
+          <test_script_entry>/opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/ay.wgt</test_script_entry>
+        </description>
+        <specs>
+          <spec>
+            <spec_assertion category="Tizen Device API Specifications" section="Widget" specification="Widget Packaging and XML Configuration" interface="Widget" element_name="constructor" element_type="method"/>
+            <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>
+            <spec_statement>spec_statement</spec_statement>
+          </spec>
+        </specs>
+      </testcase>
+      <testcase purpose="Test the UA's ability process the height attribute." type="compliance" status="ready" component="WebAPI/W3C_Widget/WidgetPackaging" execution_type="manual" priority="P3" id="az">
+        <description>
+          <pre_condition/>
+          <post_condition/>
+          <steps>
+            <step order="1">
+              <step_desc>Install /opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/az.wgt</step_desc>
+              <expected>To pass, the widget height must be the numeric value 100 or a value greater than 0 (resulting from rule for parsing a non-negative integer)..</expected>
+            </step>
+          </steps>
+          <test_script_entry>/opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/az.wgt</test_script_entry>
+        </description>
+        <specs>
+          <spec>
+            <spec_assertion category="Tizen Device API Specifications" section="Widget" specification="Widget Packaging and XML Configuration" interface="Widget" element_name="constructor" element_type="method"/>
+            <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>
+            <spec_statement>spec_statement</spec_statement>
+          </spec>
+        </specs>
+      </testcase>
+      <testcase purpose="Test the UA's ability process the height attribute." type="compliance" status="ready" component="WebAPI/W3C_Widget/WidgetPackaging" execution_type="manual" priority="P3" id="a1">
+        <description>
+          <pre_condition/>
+          <post_condition/>
+          <steps>
+            <step order="1">
+              <step_desc>Install /opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/a1.wgt</step_desc>
+              <expected>To pass, the widget height must be the numeric value 123 or a value greater than 0 (resulting from rule for parsing a non-negative integer)..</expected>
+            </step>
+          </steps>
+          <test_script_entry>/opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/a1.wgt</test_script_entry>
+        </description>
+        <specs>
+          <spec>
+            <spec_assertion category="Tizen Device API Specifications" section="Widget" specification="Widget Packaging and XML Configuration" interface="Widget" element_name="constructor" element_type="method"/>
+            <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>
+            <spec_statement>spec_statement</spec_statement>
+          </spec>
+        </specs>
+      </testcase>
+      <testcase purpose="Test the UA's ability process the height attribute." type="compliance" status="ready" component="WebAPI/W3C_Widget/WidgetPackaging" execution_type="manual" priority="P3" id="a2">
+        <description>
+          <pre_condition/>
+          <post_condition/>
+          <steps>
+            <step order="1">
+              <step_desc>Install /opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/a2.wgt</step_desc>
+              <expected>To pass, the widget height must be ignored (the value is an empty string, hence it would be ignored)..</expected>
+            </step>
+          </steps>
+          <test_script_entry>/opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/a2.wgt</test_script_entry>
+        </description>
+        <specs>
+          <spec>
+            <spec_assertion category="Tizen Device API Specifications" section="Widget" specification="Widget Packaging and XML Configuration" interface="Widget" element_name="constructor" element_type="method"/>
+            <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>
+            <spec_statement>spec_statement</spec_statement>
+          </spec>
+        </specs>
+      </testcase>
+      <testcase purpose="Test the UA's ability process the height attribute." type="compliance" status="ready" component="WebAPI/W3C_Widget/WidgetPackaging" execution_type="manual" priority="P3" id="a3">
+        <description>
+          <pre_condition/>
+          <post_condition/>
+          <steps>
+            <step order="1">
+              <step_desc>Install /opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/a3.wgt</step_desc>
+              <expected>To pass, the widget height must be ignored (the value is a sequence of space characters, hence it would be ignored)..</expected>
+            </step>
+          </steps>
+          <test_script_entry>/opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/a3.wgt</test_script_entry>
+        </description>
+        <specs>
+          <spec>
+            <spec_assertion category="Tizen Device API Specifications" section="Widget" specification="Widget Packaging and XML Configuration" interface="Widget" element_name="constructor" element_type="method"/>
+            <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>
+            <spec_statement>spec_statement</spec_statement>
+          </spec>
+        </specs>
+      </testcase>
+      <testcase purpose="Test the UA's ability process the height attribute." type="compliance" status="ready" component="WebAPI/W3C_Widget/WidgetPackaging" execution_type="manual" priority="P3" id="a4">
+        <description>
+          <pre_condition/>
+          <post_condition/>
+          <steps>
+            <step order="1">
+              <step_desc>Install /opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/a4.wgt</step_desc>
+              <expected>To pass, the widget height must be ignored (the value is an empty string)..</expected>
+            </step>
+          </steps>
+          <test_script_entry>/opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/a4.wgt</test_script_entry>
+        </description>
+        <specs>
+          <spec>
+            <spec_assertion category="Tizen Device API Specifications" section="Widget" specification="Widget Packaging and XML Configuration" interface="Widget" element_name="constructor" element_type="method"/>
+            <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>
+            <spec_statement>spec_statement</spec_statement>
+          </spec>
+        </specs>
+      </testcase>
+      <testcase purpose="Test that the UA skips preference elements without a name attribute." type="compliance" status="ready" component="WebAPI/W3C_Widget/WidgetPackaging" execution_type="manual" priority="P3" id="a5">
+        <description>
+          <pre_condition/>
+          <post_condition/>
+          <steps>
+            <step order="1">
+              <step_desc>Install /opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/a5.wgt</step_desc>
+              <expected>To pass, widget preferences must remain an empty list (i.e., the preference is skipped)..</expected>
+            </step>
+          </steps>
+          <test_script_entry>/opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/a5.wgt</test_script_entry>
+        </description>
+        <specs>
+          <spec>
+            <spec_assertion category="Tizen Device API Specifications" section="Widget" specification="Widget Packaging and XML Configuration" interface="Widget" element_name="constructor" element_type="method"/>
+            <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>
+            <spec_statement>spec_statement</spec_statement>
+          </spec>
+        </specs>
+      </testcase>
+      <testcase purpose="Test that the UA skips preference element already defined." type="compliance" status="ready" component="WebAPI/W3C_Widget/WidgetPackaging" execution_type="manual" priority="P3" id="a6">
+        <description>
+          <pre_condition/>
+          <post_condition/>
+          <steps>
+            <step order="1">
+              <step_desc>Install /opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/a6.wgt</step_desc>
+              <expected>To pass, widget preference must contain one preference whose name is "PASS" and whose value is "PASS" and whose readonly attr value must be "false"..</expected>
+            </step>
+          </steps>
+          <test_script_entry>/opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/a6.wgt</test_script_entry>
+        </description>
+        <specs>
+          <spec>
+            <spec_assertion category="Tizen Device API Specifications" section="Widget" specification="Widget Packaging and XML Configuration" interface="Widget" element_name="constructor" element_type="method"/>
+            <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>
+            <spec_statement>spec_statement</spec_statement>
+          </spec>
+        </specs>
+      </testcase>
+      <testcase purpose="Test that the UA does a case sensitive comparison on the value of the readonly attribute." type="compliance" status="ready" component="WebAPI/W3C_Widget/WidgetPackaging" execution_type="manual" priority="P3" id="a7">
+        <description>
+          <pre_condition/>
+          <post_condition/>
+          <steps>
+            <step order="1">
+              <step_desc>Install /opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/a7.wgt</step_desc>
+              <expected>To pass, widget preference must contain one preference whose name is "PASS" and whose value is "PASS" and whose readonly attr value must be "false"..</expected>
+            </step>
+          </steps>
+          <test_script_entry>/opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/a7.wgt</test_script_entry>
+        </description>
+        <specs>
+          <spec>
+            <spec_assertion category="Tizen Device API Specifications" section="Widget" specification="Widget Packaging and XML Configuration" interface="Widget" element_name="constructor" element_type="method"/>
+            <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>
+            <spec_statement>spec_statement</spec_statement>
+          </spec>
+        </specs>
+      </testcase>
+      <testcase purpose="Test that the UA does a case sensitive comparison on the value of the readonly attribute." type="compliance" status="ready" component="WebAPI/W3C_Widget/WidgetPackaging" execution_type="manual" priority="P3" id="a8">
+        <description>
+          <pre_condition/>
+          <post_condition/>
+          <steps>
+            <step order="1">
+              <step_desc>Install /opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/a8.wgt</step_desc>
+              <expected>To pass, widget preference must contain one preference whose name is "PASS" and whose value is "PASS" and whose readonly attr value must be "true"..</expected>
+            </step>
+          </steps>
+          <test_script_entry>/opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/a8.wgt</test_script_entry>
+        </description>
+        <specs>
+          <spec>
+            <spec_assertion category="Tizen Device API Specifications" section="Widget" specification="Widget Packaging and XML Configuration" interface="Widget" element_name="constructor" element_type="method"/>
+            <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>
+            <spec_statement>spec_statement</spec_statement>
+          </spec>
+        </specs>
+      </testcase>
+      <testcase purpose="Test that the UA sets the readonly attribute to false by default." type="compliance" status="ready" component="WebAPI/W3C_Widget/WidgetPackaging" execution_type="manual" priority="P3" id="a9">
+        <description>
+          <pre_condition/>
+          <post_condition/>
+          <steps>
+            <step order="1">
+              <step_desc>Install /opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/a9.wgt</step_desc>
+              <expected>To pass, widget preference must contain one preference whose name is "PASS" and whose value is "PASS" and whose readonly attr value must be "false"..</expected>
+            </step>
+          </steps>
+          <test_script_entry>/opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/a9.wgt</test_script_entry>
+        </description>
+        <specs>
+          <spec>
+            <spec_assertion category="Tizen Device API Specifications" section="Widget" specification="Widget Packaging and XML Configuration" interface="Widget" element_name="constructor" element_type="method"/>
+            <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>
+            <spec_statement>spec_statement</spec_statement>
+          </spec>
+        </specs>
+      </testcase>
+      <testcase purpose="Test that the UA skips multiple preference element already defined." type="compliance" status="ready" component="WebAPI/W3C_Widget/WidgetPackaging" execution_type="manual" priority="P3" id="ba">
+        <description>
+          <pre_condition/>
+          <post_condition/>
+          <steps>
+            <step order="1">
+              <step_desc>Install /opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/ba.wgt</step_desc>
+              <expected>To pass, widget preference must contain one preference whose name is "a" and whose value is "a" and whose readonly attr value must be "false"..</expected>
+            </step>
+          </steps>
+          <test_script_entry>/opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/ba.wgt</test_script_entry>
+        </description>
+        <specs>
+          <spec>
+            <spec_assertion category="Tizen Device API Specifications" section="Widget" specification="Widget Packaging and XML Configuration" interface="Widget" element_name="constructor" element_type="method"/>
+            <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>
+            <spec_statement>spec_statement</spec_statement>
+          </spec>
+        </specs>
+      </testcase>
+      <testcase purpose="Test the UA's ability store preferences whose name vary only in case." type="compliance" status="ready" component="WebAPI/W3C_Widget/WidgetPackaging" execution_type="manual" priority="P3" id="bb">
+        <description>
+          <pre_condition/>
+          <post_condition/>
+          <steps>
+            <step order="1">
+              <step_desc>Install /opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/bb.wgt</step_desc>
+              <expected>To pass, widget preference must contain two preferences: 1 must have a name "a" and whose value is "a" and whose readonly attr value must be "false". 2 must have a name "A" and whose value is "b" and whose readonly attribute value must be "false"..</expected>
+            </step>
+          </steps>
+          <test_script_entry>/opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/bb.wgt</test_script_entry>
+        </description>
+        <specs>
+          <spec>
+            <spec_assertion category="Tizen Device API Specifications" section="Widget" specification="Widget Packaging and XML Configuration" interface="Widget" element_name="constructor" element_type="method"/>
+            <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>
+            <spec_statement>spec_statement</spec_statement>
+          </spec>
+        </specs>
+      </testcase>
+      <testcase purpose="Tests that the UA applies the rule for getting a single attribute value to name, value, and readonly attributes." type="compliance" status="ready" component="WebAPI/W3C_Widget/WidgetPackaging" execution_type="manual" priority="P3" id="bc">
+        <description>
+          <pre_condition/>
+          <post_condition/>
+          <steps>
+            <step order="1">
+              <step_desc>Install /opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/bc.wgt</step_desc>
+              <expected>To pass, widget preference must contain one preference whose name is "PASS" and whose value is "PASS" and whose readonly attr value must be "false"..</expected>
+            </step>
+          </steps>
+          <test_script_entry>/opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/bc.wgt</test_script_entry>
+        </description>
+        <specs>
+          <spec>
+            <spec_assertion category="Tizen Device API Specifications" section="Widget" specification="Widget Packaging and XML Configuration" interface="Widget" element_name="constructor" element_type="method"/>
+            <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>
+            <spec_statement>spec_statement</spec_statement>
+          </spec>
+        </specs>
+      </testcase>
+      <testcase purpose="Test to make sure that the UA only checks the root of the widget for config files, and not in an arbitrary folder." type="compliance" status="ready" component="WebAPI/W3C_Widget/WidgetPackaging" execution_type="manual" priority="P3" id="bg">
+        <description>
+          <pre_condition/>
+          <post_condition/>
+          <steps>
+            <step order="1">
+              <step_desc>Install /opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/bg.wgt</step_desc>
+              <expected>To pass, the user agent must treat this widget as an invalid widget (config file is not at the root)..</expected>
+            </step>
+          </steps>
+          <test_script_entry>/opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/bg.wgt</test_script_entry>
+        </description>
+        <specs>
+          <spec>
+            <spec_assertion category="Tizen Device API Specifications" section="Widget" specification="Widget Packaging and XML Configuration" interface="Widget" element_name="constructor" element_type="method"/>
+            <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>
+            <spec_statement>spec_statement</spec_statement>
+          </spec>
+        </specs>
+      </testcase>
+      <testcase purpose="Test to make sure that the UA only checks the root of the widget for config files, and not in a locale folder." type="compliance" status="ready" component="WebAPI/W3C_Widget/WidgetPackaging" execution_type="manual" priority="P3" id="bh">
+        <description>
+          <pre_condition/>
+          <post_condition/>
+          <steps>
+            <step order="1">
+              <step_desc>Install /opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/bh.wgt</step_desc>
+              <expected>To pass, the user agent must treat this widget as an invalid widget (config file is not at the root, but in locale folder)..</expected>
+            </step>
+          </steps>
+          <test_script_entry>/opt/webapi-w3c-widget-tests/WidgetPackaging/w3c/bh.wgt</test_script_entry>
+        </description>
+        <specs>
+          <spec>
+            <spec_assertion category="Tizen Device API Specifications" section="Widget" specification="Widget Packaging and XML Configuration" interface="Widget" element_name="constructor" element_type="method"/>
+            <spec_url>http://www.w3.org/TR/widgets-apis/</spec_url>
+            <spec_statement>spec_statement</spec_statement>
+          </spec>
+        </specs>
+      </testcase>
+    </set>
+  </suite>
+</test_definition>
index 025438a7d8cf2af00ed7d3a77e76f087e3b79d08..7aaf6083ee0035d91dd1f9390122de314c0e3c27 100755 (executable)
@@ -5,13 +5,13 @@
 TOOL_KIT='/home/hoon/share/repository/tct-tools/tct-toolkit/tct-tools/'
 
 # tool path
-# {repository_path}/tools/tct_5.5/
-TOOLS='/home/hoon/share/repository/tct-tools/tools/tct_5.5/'
+# {repository_path}/tools/tct_6.0/
+TOOLS='/home/hoon/share/repository/tct-tools/tools/tct_6.0/'
 
 
 # tct path
-# {repository_path}/api/release/chsarp-tct_5.5_dotnet
-TCT_PATH='/home/hoon/share/repository/public/csharp/net5.5/api/release/csharp-tct_5.5_dotnet'
+# {repository_path}/api/release/chsarp-tct_6.0_dotnet
+TCT_PATH='/home/hoon/share/repository/public/csharp/net6.0/api/release/csharp-tct_6.0_dotnet'
 
 
 echo "Getting latest tools in spin repository."
@@ -25,13 +25,13 @@ git pull
 
 
 echo "Updating resource folder"
-rsync -avz --exclude=tct-testconfig --exclude=tct-testconfig-3.0.zip $TOOLS/resource/ $TCT_PATH/csharp-tct_5.5_dotnet/resource/
+rsync -avz --exclude=tct-testconfig --exclude=tct-testconfig-3.0.zip $TOOLS/resource/ $TCT_PATH/csharp-tct_6.0_dotnet/resource/
 # remove tizen-web-ui-fw and tinyweb folder
-rm -rf $TCT_PATH/csharp-tct_5.5_dotnet/resource/tizen-web-ui-fw/
-rm -rf $TCT_PATH/csharp-tct_5.5_dotnet/resource/tinyweb/
+rm -rf $TCT_PATH/csharp-tct_6.0_dotnet/resource/tizen-web-ui-fw/
+rm -rf $TCT_PATH/csharp-tct_6.0_dotnet/resource/tinyweb/
 
 echo "Updating tools folder"
-rsync -avz --exclude=healthcheck.ini --exclude=manager $TOOLS/tools/ $TCT_PATH/csharp-tct_5.5_dotnet/tools/
+rsync -avz --exclude=healthcheck.ini --exclude=manager $TOOLS/tools/ $TCT_PATH/csharp-tct_6.0_dotnet/tools/
 
 
 echo "Updating tct-toolkit"
@@ -41,18 +41,18 @@ sudo cp -r $TOOL_KIT/* $TCT_PATH/tct-tools_r4_rc1/
 
 
 echo "Changing folder permission"
-sudo chmod -R 777 $TCT_PATH/csharp-tct_5.5_dotnet/
+sudo chmod -R 777 $TCT_PATH/csharp-tct_6.0_dotnet/
 sudo chmod -R 777 $TCT_PATH/tct-tools_r4_rc1/
 
 
 cd $TCT_PATH
 cd ../../tool/script
 
-sudo rm -rf ../../release/csharp-tct_5.5_dotnet/csharp-tct_5.5_dotnet/package/mobile
-sudo rm -rf ../../release/csharp-tct_5.5_dotnet/csharp-tct_5.5_dotnet/package/tv
-sudo rm -rf ../../release/csharp-tct_5.5_dotnet/csharp-tct_5.5_dotnet/package/wearable
-sudo rm -rf ../../release/csharp-tct_5.5_dotnet/csharp-tct_5.5_dotnet/package/common_iot
-sudo mkdir ../../release/csharp-tct_5.5_dotnet/csharp-tct_5.5_dotnet/package/mobile
+sudo rm -rf ../../release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile
+sudo rm -rf ../../release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/tv
+sudo rm -rf ../../release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/wearable
+sudo rm -rf ../../release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/common_iot
+sudo mkdir ../../release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile
 
 
 ########################### Auto packaging ###########################
@@ -128,24 +128,24 @@ sudo python pack.py manual Systemsettings
 sudo python pack.py manual Tracer
 
 
-#sudo sed -i 's/profile="mobile"/profile="common_iot"/' ../../release/csharp-tct_5.5_dotnet/csharp-tct_5.5_dotnet/package/pkg_infos/mobile_pkg_info.xml
-#sudo sed -i 's#mobile/#common_iot/#' ../../release/csharp-tct_5.5_dotnet/csharp-tct_5.5_dotnet/package/pkg_infos/mobile_pkg_info.xml
+#sudo sed -i 's/profile="mobile"/profile="common_iot"/' ../../release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/pkg_infos/mobile_pkg_info.xml
+#sudo sed -i 's#mobile/#common_iot/#' ../../release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/pkg_infos/mobile_pkg_info.xml
 
-#sudo mv ../../release/csharp-tct_5.5_dotnet/csharp-tct_5.5_dotnet/package/pkg_infos/mobile_pkg_info.xml ../../release/csharp-tct_5.5_dotnet/csharp-tct_5.5_dotnet/package/pkg_infos/common_iot_pkg_info.xml
-#sudo mv ../../release/csharp-tct_5.5_dotnet/csharp-tct_5.5_dotnet/package/mobile ../../release/csharp-tct_5.5_dotnet/csharp-tct_5.5_dotnet/package/common_iot
+#sudo mv ../../release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/pkg_infos/mobile_pkg_info.xml ../../release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/pkg_infos/common_iot_pkg_info.xml
+#sudo mv ../../release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile ../../release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/common_iot
 
-sudo chmod -R 777 ../../release/csharp-tct_5.5_dotnet/csharp-tct_5.5_dotnet/package/
+sudo chmod -R 777 ../../release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/
 
-#sudo rm -f ../../release/csharp-tct_5.5_dotnet/csharp-tct_5.5_dotnet/package/pkg_infos/mobile_pkg_info.xml
-sudo rm -f ../../release/csharp-tct_5.5_dotnet/csharp-tct_5.5_dotnet/package/pkg_infos/tv_pkg_info.xml
-sudo rm -f ../../release/csharp-tct_5.5_dotnet/csharp-tct_5.5_dotnet/package/pkg_infos/wearable_pkg_info.xml
-sudo rm -f ../../release/csharp-tct_5.5_dotnet/csharp-tct_5.5_dotnet/package/pkg_infos/common_iot_pkg_info.xml
+#sudo rm -f ../../release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/pkg_infos/mobile_pkg_info.xml
+sudo rm -f ../../release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/pkg_infos/tv_pkg_info.xml
+sudo rm -f ../../release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/pkg_infos/wearable_pkg_info.xml
+sudo rm -f ../../release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/pkg_infos/common_iot_pkg_info.xml
 
 
-daily_headed="csharp-tct_5.5_$(date +%Y%m%d)_headed"
-sudo rm -rf ../../release/$daily_headed 
-sudo cp -r ../../release/csharp-tct_5.5_dotnet/ ../../release/$daily_headed
-sudo mv ../../release/$daily_headed/csharp-tct_5.5_dotnet ../../release/$daily_headed/$daily_headed
+daily_headed="csharp-tct_6.0_$(date +%Y%m%d)_headed"
+sudo rm -rf ../../release/$daily_headed
+sudo cp -r ../../release/csharp-tct_6.0_dotnet/ ../../release/$daily_headed
+sudo mv ../../release/$daily_headed/csharp-tct_6.0_dotnet ../../release/$daily_headed/$daily_headed
 
 # copy healthcheck and inst.py files for artik profile
 sudo cp -r artik_template/healthcheck.ini ../../release/$daily_headed/$daily_headed/tools/healthcheck.ini
index 2e380df361963644dc6dc17f10a3982ba13fe87d..7b59ee68e0ce6aee8e5e8db80e69d9dc54287d31 100755 (executable)
@@ -25,12 +25,12 @@ if __name__ == "__main__":
 #    os.system ('git reset --hard')
 #    os.system ('git pull')
 
-    remove_folder('../../release/csharp-tct_5.5_dotnet/csharp-tct_5.5_dotnet/package/mobile')
-    remove_folder('../../release/csharp-tct_5.5_dotnet/csharp-tct_5.5_dotnet/package/tv')
-    remove_folder('../../release/csharp-tct_5.5_dotnet/csharp-tct_5.5_dotnet/package/wearable')
-    create_folder('../../release/csharp-tct_5.5_dotnet/csharp-tct_5.5_dotnet/package/mobile')
-    remove_folder('../../release/csharp-tct_5.5_dotnet/csharp-tct_5.5_dotnet/package/pkg_infos')
-    create_folder('../../release/csharp-tct_5.5_dotnet/csharp-tct_5.5_dotnet/package/pkg_infos')
+    remove_folder('../../release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile')
+    remove_folder('../../release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/tv')
+    remove_folder('../../release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/wearable')
+    create_folder('../../release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile')
+    remove_folder('../../release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/pkg_infos')
+    create_folder('../../release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/pkg_infos')
 
 
     # pack tv package
@@ -38,11 +38,11 @@ if __name__ == "__main__":
 
     # Copy mobile package folder to tv package.
     # set tv_pkg_info.xml
-    sed_inplace('../../release/csharp-tct_5.5_dotnet/csharp-tct_5.5_dotnet/package/pkg_infos/mobile_pkg_info.xml','profile="mobile"', 'profile="tv"' )
-    sed_inplace('../../release/csharp-tct_5.5_dotnet/csharp-tct_5.5_dotnet/package/pkg_infos/mobile_pkg_info.xml','mobile/', 'tv/' )
-    os.rename('../../release/csharp-tct_5.5_dotnet/csharp-tct_5.5_dotnet/package/pkg_infos/mobile_pkg_info.xml','../../release/csharp-tct_5.5_dotnet/csharp-tct_5.5_dotnet/package/pkg_infos/tv_pkg_info.xml')
+    sed_inplace('../../release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/pkg_infos/mobile_pkg_info.xml','profile="mobile"', 'profile="tv"' )
+    sed_inplace('../../release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/pkg_infos/mobile_pkg_info.xml','mobile/', 'tv/' )
+    os.rename('../../release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/pkg_infos/mobile_pkg_info.xml','../../release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/pkg_infos/tv_pkg_info.xml')
     # rename mobile folder to tv folder
-    os.rename('../../release/csharp-tct_5.5_dotnet/csharp-tct_5.5_dotnet/package/mobile','../../release/csharp-tct_5.5_dotnet/csharp-tct_5.5_dotnet/package/tv')
+    os.rename('../../release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile','../../release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/tv')
 
 
     # pack wearable package
@@ -55,15 +55,15 @@ if __name__ == "__main__":
 
     # Copy mobile package folder to wearable package.
     # set wearable_pkg_info.xml
-    sed_inplace('../../release/csharp-tct_5.5_dotnet/csharp-tct_5.5_dotnet/package/pkg_infos/mobile_pkg_info.xml','profile="mobile"', 'profile="wearable"' )
-    sed_inplace('../../release/csharp-tct_5.5_dotnet/csharp-tct_5.5_dotnet/package/pkg_infos/mobile_pkg_info.xml','mobile/', 'wearable/' )
-    os.rename('../../release/csharp-tct_5.5_dotnet/csharp-tct_5.5_dotnet/package/pkg_infos/mobile_pkg_info.xml','../../release/csharp-tct_5.5_dotnet/csharp-tct_5.5_dotnet/package/pkg_infos/wearable_pkg_info.xml')
+    sed_inplace('../../release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/pkg_infos/mobile_pkg_info.xml','profile="mobile"', 'profile="wearable"' )
+    sed_inplace('../../release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/pkg_infos/mobile_pkg_info.xml','mobile/', 'wearable/' )
+    os.rename('../../release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/pkg_infos/mobile_pkg_info.xml','../../release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/pkg_infos/wearable_pkg_info.xml')
     # rename mobile folder to wearable folder
-    os.rename('../../release/csharp-tct_5.5_dotnet/csharp-tct_5.5_dotnet/package/mobile','../../release/csharp-tct_5.5_dotnet/csharp-tct_5.5_dotnet/package/wearable')
+    os.rename('../../release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile','../../release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/wearable')
 
 
     # pack mobile package
-    create_folder('../../release/csharp-tct_5.5_dotnet/csharp-tct_5.5_dotnet/package/mobile')
+    create_folder('../../release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile')
     os.system(LINUX_PERMISSION+' python pack.py '+'all')
 
 
@@ -77,17 +77,17 @@ if __name__ == "__main__":
     #        os.system(LINUX_PERMISSION+' python pack.py '+line)
     #f.close()
 
-    #sed_inplace('../../release/csharp-tct_5.5_dotnet/csharp-tct_5.5_dotnet/package/pkg_infos/mobile_pkg_info.xml','profile="mobile"', 'profile="tv"' )
-    #sed_inplace('../../release/csharp-tct_5.5_dotnet/csharp-tct_5.5_dotnet/package/pkg_infos/mobile_pkg_info.xml','mobile/', 'tv/' )
-    #os.rename('../../release/csharp-tct_5.5_dotnet/csharp-tct_5.5_dotnet/package/pkg_infos/mobile_pkg_info.xml','../../release/csharp-tct_5.5_dotnet/csharp-tct_5.5_dotnet/package/pkg_infos/tv_pkg_info.xml')
-    #os.rename('../../release/csharp-tct_5.5_dotnet/csharp-tct_5.5_dotnet/package/mobile','../../release/csharp-tct_5.5_dotnet/csharp-tct_5.5_dotnet/package/tv')
-    #create_folder('../../release/csharp-tct_5.5_dotnet/csharp-tct_5.5_dotnet/package/mobile')
+    #sed_inplace('../../release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/pkg_infos/mobile_pkg_info.xml','profile="mobile"', 'profile="tv"' )
+    #sed_inplace('../../release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/pkg_infos/mobile_pkg_info.xml','mobile/', 'tv/' )
+    #os.rename('../../release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/pkg_infos/mobile_pkg_info.xml','../../release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/pkg_infos/tv_pkg_info.xml')
+    #os.rename('../../release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile','../../release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/tv')
+    #create_folder('../../release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile')
     #os.system(LINUX_PERMISSION+' python pack.py '+'all')
 
 
     date_time = datetime.datetime.today().strftime('%Y%m%d')
-    src = '../../release/csharp-tct_5.5_dotnet/'
-    dst = '../../release/csharp-tct_5.5_' + date_time
+    src = '../../release/csharp-tct_6.0_dotnet/'
+    dst = '../../release/csharp-tct_6.0_' + date_time
     if os.path.exists(dst):
         remove_folder(dst)
     else:
@@ -101,20 +101,20 @@ if __name__ == "__main__":
         else:
             shutil.copy2(s, d)
 
-    os.rename(dst + '/csharp-tct_5.5_dotnet/',dst +'/csharp-tct_5.5_'+date_time)
+    os.rename(dst + '/csharp-tct_6.0_dotnet/',dst +'/csharp-tct_6.0_'+date_time)
 
 
     try:
-        os.remove('../../release/csharp-tct_5.5_'+date_time+'.tar.gz')
+        os.remove('../../release/csharp-tct_6.0_'+date_time+'.tar.gz')
     except OSError:
         pass
     try:
-        os.remove('../../release/csharp-tct_5.5_'+date_time+'.tar')
+        os.remove('../../release/csharp-tct_6.0_'+date_time+'.tar')
     except OSError:
         pass
 
     if platform == "linux" or platform == "linux2":
-        os.system('sudo chmod -R 777 '+ '../../release/csharp-tct_5.5_' + date_time)
+        os.system('sudo chmod -R 777 '+ '../../release/csharp-tct_6.0_' + date_time)
 
     #changing file format
     for root, dirs, files in os.walk(dst):
@@ -124,6 +124,6 @@ if __name__ == "__main__":
                 text = open(os.path.abspath(p), 'rb').read().replace('\r\n','\n')
                 open(os.path.abspath(p), 'wb').write(text)
 
-    with tarfile.open('../../release/csharp-tct_5.5_'+date_time+'.tar.gz', "w:gz") as tar:
+    with tarfile.open('../../release/csharp-tct_6.0_'+date_time+'.tar.gz', "w:gz") as tar:
         tar.add(dst, arcname=os.path.basename(dst))
-    remove_folder('../../release/csharp-tct_5.5_' + date_time)
+    remove_folder('../../release/csharp-tct_6.0_' + date_time)
index 0d95de98cf9cc48d585a50b1778d1a0add351f75..9de8ccef0fe2c072f529d2248aeea0d2ee1a8b9a 100755 (executable)
@@ -5,13 +5,13 @@
 TOOL_KIT='/home/hoon/share/repository/tct-tools/tct-toolkit/tct-tools/'
 
 # tool path
-# {repository_path}/tools/tct_5.5/
-TOOLS='/home/hoon/share/repository/tct-tools/tools/tct_5.5/'
+# {repository_path}/tools/tct_6.0/
+TOOLS='/home/hoon/share/repository/tct-tools/tools/tct_6.0/'
 
 
 # tct path
-# {repository_path}/api/release/chsarp-tct_5.5_dotnet
-TCT_PATH='/home/hoon/share/repository/public/csharp/net5.5/api/release/csharp-tct_5.5_dotnet'
+# {repository_path}/api/release/chsarp-tct_6.0_dotnet
+TCT_PATH='/home/hoon/share/repository/public/csharp/net6.0/api/release/csharp-tct_6.0_dotnet'
 
 
 echo "Getting latest tools in spin repository."
@@ -25,13 +25,13 @@ git pull
 
 
 echo "Updating resource folder"
-rsync -avz --exclude=tct-testconfig --exclude=tct-testconfig-3.0.zip $TOOLS/resource/ $TCT_PATH/csharp-tct_5.5_dotnet/resource/
+rsync -avz --exclude=tct-testconfig --exclude=tct-testconfig-3.0.zip $TOOLS/resource/ $TCT_PATH/csharp-tct_6.0_dotnet/resource/
 # remove tizen-web-ui-fw and tinyweb folder
-rm -rf $TCT_PATH/csharp-tct_5.5_dotnet/resource/tizen-web-ui-fw/
-rm -rf $TCT_PATH/csharp-tct_5.5_dotnet/resource/tinyweb/
+rm -rf $TCT_PATH/csharp-tct_6.0_dotnet/resource/tizen-web-ui-fw/
+rm -rf $TCT_PATH/csharp-tct_6.0_dotnet/resource/tinyweb/
 
 echo "Updating tools folder"
-rsync -avz --exclude=healthcheck.ini --exclude=manager $TOOLS/tools/ $TCT_PATH/csharp-tct_5.5_dotnet/tools/
+rsync -avz --exclude=healthcheck.ini --exclude=manager $TOOLS/tools/ $TCT_PATH/csharp-tct_6.0_dotnet/tools/
 
 
 echo "Updating tct-toolkit"
@@ -41,7 +41,7 @@ sudo cp -r $TOOL_KIT/* $TCT_PATH/tct-tools_r4_rc1/
 
 
 echo "Changing folder permission"
-sudo chmod -R 777 $TCT_PATH/csharp-tct_5.5_dotnet/
+sudo chmod -R 777 $TCT_PATH/csharp-tct_6.0_dotnet/
 sudo chmod -R 777 $TCT_PATH/tct-tools_r4_rc1/
 
 
index 50c9e3557eb67d052a032b38db1bd30c03588d4a..223ead1a59813599d786b68ef0046e8a06a25d94 100755 (executable)
@@ -18,7 +18,7 @@ MODULE_NAME=""
 PACKAGE_NAME = ''
 TPK_PATH = ''
 RELEASE_PATH = ''
-TCT='csharp-tct_5.5_dotnet'
+TCT='csharp-tct_6.0_dotnet'
 SUCCESS = 0
 FAILS = 0
 
@@ -139,7 +139,7 @@ def file_count(path):
 
     return count
 
-def print_result(success , fails):  
+def print_result(success , fails):
     print('')
     print('-------------------------------------')
     print(' packaging result ')
@@ -148,7 +148,7 @@ def print_result(success , fails):
     print('')
 
 
-def pack(module , cnt):  
+def pack(module , cnt):
 
     MODULE_NAME = module
 
@@ -157,27 +157,27 @@ def pack(module , cnt):
     RELEASE_PATH = 'release/'
 
     # Check the module exist or not.
-    if not os.path.isdir(PROJECT_PATH+PACKAGE_NAME+'/'): 
+    if not os.path.isdir(PROJECT_PATH+PACKAGE_NAME+'/'):
         print(bcolors.ERROR +  str(cnt+1) + "  please check the module name. "+bcolors.ENDC+MODULE_NAME+bcolors.ERROR+" package does not exist in tct-suite-vs."+bcolors.ENDC)
         print("  You can choose from below package list.")
         module_list = folder_list(PROJECT_PATH)
-        module_list.sort()   
+        module_list.sort()
         for module in module_list:
             temp = module
             if module.find(".Manual") > -1:
-                temp = module.replace(".Manual" , "") 
+                temp = module.replace(".Manual" , "")
                 temp = "manual " + temp
             else :
-                temp = "auto " + temp          
+                temp = "auto " + temp
             print("      " + temp)
-        global FAILS        
+        global FAILS
         FAILS += 1
         return
 
     if not os.path.isfile(TPK_PATH):
         print(bcolors.ERROR +  str(cnt+1) + "  You should build "+MODULE_NAME+" project before run this script." +bcolors.ENDC)
         FAILS += 1
-        return 
+        return
 
     # Create release / tclist / bin folder.
     create_folder(RELEASE_PATH)
@@ -194,7 +194,7 @@ def pack(module , cnt):
 
     # create new test.xml file
     file_list = read_all_testfiles(PROJECT_PATH+PACKAGE_NAME+'/testcase/')
-    file_list.sort()   
+    file_list.sort()
     tc_list = []
 
     for file_path in file_list:
@@ -227,20 +227,20 @@ def pack(module , cnt):
         if file_count(PROJECT_PATH+PACKAGE_NAME+'/res') > 0:
             shutil.copytree(PROJECT_PATH+PACKAGE_NAME+'/res' , 'bin/opt/'+PACKAGE_NAME+'/res')
 
-    # create zip 
-    zip('bin', RELEASE_PATH+PACKAGE_NAME+'-5.5')
-    if os.path.isfile(RELEASE_PATH+PACKAGE_NAME+'-5.5.zip'):
+    # create zip
+    zip('bin', RELEASE_PATH+PACKAGE_NAME+'-6.0')
+    if os.path.isfile(RELEASE_PATH+PACKAGE_NAME+'-6.0.zip'):
         print( str(cnt+1) + "  Created "+bcolors.OKGREEN + MODULE_NAME + bcolors.ENDC + " Packages.")
-        global SUCCESS        
+        global SUCCESS
         SUCCESS += 1
 
-    # copy zip file 
+    # copy zip file
     create_folder('../../release/'+TCT+'/'+TCT+'/package/mobile/')
-    shutil.copy(RELEASE_PATH+PACKAGE_NAME+'-5.5.zip', '../../release/'+TCT+'/'+TCT+'/package/mobile/')
+    shutil.copy(RELEASE_PATH+PACKAGE_NAME+'-6.0.zip', '../../release/'+TCT+'/'+TCT+'/package/mobile/')
 
     # If TCT is installed , replace package
-    if os.path.isdir('/opt/tct/tizen_csharp_5.5'):
-        shutil.copy(RELEASE_PATH+PACKAGE_NAME+'-5.5.zip', '/opt/tct/tizen_csharp_5.5/packages/mobile')
+    if os.path.isdir('/opt/tct/tizen_csharp_6.0'):
+        shutil.copy(RELEASE_PATH+PACKAGE_NAME+'-6.0.zip', '/opt/tct/tizen_csharp_6.0/packages/mobile')
 
     # Remove bin folder.
     remove_folder('bin')
@@ -263,7 +263,7 @@ if __name__ == "__main__":
         if(sys.argv[1] != 'all'):
             print_error()
             exit(1)
-    elif len(sys.argv) < 3:          
+    elif len(sys.argv) < 3:
         print_error()
         exit(1)
 
@@ -273,11 +273,11 @@ if __name__ == "__main__":
         print_error()
         exit(1)
 
-    if sys.argv[1] == 'all':          
+    if sys.argv[1] == 'all':
         pack_list = folder_list(PROJECT_PATH)
     else:
         MODULE = sys.argv[2]
-        if sys.argv[1] == 'manual':  
+        if sys.argv[1] == 'manual':
             MODULE = MODULE +'.Manual'
         pack_list.append(MODULE)
 
@@ -287,16 +287,15 @@ if __name__ == "__main__":
         pack(pack_list[i] , i)
 
 
-    create_folder('../../release/csharp-tct_5.5_dotnet/csharp-tct_5.5_dotnet/package/pkg_infos/')
+    create_folder('../../release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/pkg_infos/')
     if sys.argv[1] == 'all':
         pkg_info_gen = PKGInfoGenerator('all')
     else :
         pkg_info_gen = PKGInfoGenerator(PREFIX+MODULE+SUFFIX)
     pkg_info_gen.generate_pkg_info()
-    if os.path.isdir('/opt/tct/tizen_csharp_5.5'):
-        shutil.copy('../../release/'+TCT+'/'+TCT+'/package/pkg_infos/mobile_pkg_info.xml', '/opt/tct/tizen_csharp_5.5/packages/pkg_infos')
+    if os.path.isdir('/opt/tct/tizen_csharp_6.0'):
+        shutil.copy('../../release/'+TCT+'/'+TCT+'/package/pkg_infos/mobile_pkg_info.xml', '/opt/tct/tizen_csharp_6.0/packages/pkg_infos')
 
-        
 #    pkg_info_gen = PKGInfoGenerator()
 #    pkg_info_gen.generate_pkg_info()
 
index d27e0bd0612c01daae6853c94a0f8b7902897600..bdea53d454095efe194f5cc7aba99c23ff62bd80 100755 (executable)
@@ -5,14 +5,14 @@ import zipfile
 import shutil
 import platform
 
-FILE_PATH = '../../release/csharp-tct_5.5_dotnet/csharp-tct_5.5_dotnet/package/pkg_infos/mobile_pkg_info.xml'
+FILE_PATH = '../../release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/pkg_infos/mobile_pkg_info.xml'
 
 OKGREEN = '\033[92m'
 ENDC = '\033[0m'
 
 class PKGInfoGenerator:
     # If option is 'all', all package generate.
-    module = ''    
+    module = ''
     def __init__(self , module):
         self.module = module
 
@@ -48,10 +48,10 @@ class PKGInfoGenerator:
         with zipfile.ZipFile(source_file, 'r') as zf:
             zf.extractall(path=dest_path)
             zf.close()
+
 
     def add_testsuite_tag(self):
-        path = '../../release/csharp-tct_5.5_dotnet/csharp-tct_5.5_dotnet/package/mobile/'
+        path = '../../release/csharp-tct_6.0_dotnet/csharp-tct_6.0_dotnet/package/mobile/'
         for root, dirs, files in os.walk(path):
             rootpath = os.path.abspath(root)
             files.sort()
@@ -67,8 +67,8 @@ class PKGInfoGenerator:
                 splitwords = filepath.split(split_type)
                 index = len(splitwords)
                 project_name = splitwords[index-1]
-                project_name = project_name.replace("-5.5.zip","")
-                dest = filepath.replace("-5.5.zip","")
+                project_name = project_name.replace("-6.0.zip","")
+                dest = filepath.replace("-6.0.zip","")
                 #unzip
                 self.unzip( filepath , dest )
                 xml_path = dest +'/opt/'+ project_name+'/tests.xml'
@@ -83,15 +83,14 @@ class PKGInfoGenerator:
                 splitwords = output.split("\n")
                 tc_number = splitwords[0]
                 # Check whether project is auto or manual from project name
-                if "Manual" not in project_name: 
+                if "Manual" not in project_name:
                    auto_manual = "auto"
                 else:
-                   auto_manual = "manual"               
+                   auto_manual = "manual"
 
                 self.set_testsuite_tag(project_name, tc_number, auto_manual)
                 # Remove Unzip folder
                 shutil.rmtree(dest)
-                  
 
     def set_testsuite_tag(self, project_name, tc_number, auto_manual):
         if self.module == 'all' :
@@ -113,7 +112,7 @@ class PKGInfoGenerator:
             self.write_file('    <auto_tcn>0</auto_tcn>\n')
             self.write_file('    <manual_tcn>' + tc_number + '</manual_tcn>\n')
         self.write_file('    <total_tcn>' + tc_number + '</total_tcn>\n')
-        self.write_file('    <pkg_name>mobile/' + project_name + '-5.5.zip</pkg_name>\n')
+        self.write_file('    <pkg_name>mobile/' + project_name + '-6.0.zip</pkg_name>\n')
         self.write_file('  </suite>\n')
 
     def add_ending_tag(self):